From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?RGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6Pg==?= To: git-commits@fedoraproject.org Subject: [rpms/firefox] rawhide: add ppc64le JIT Date: Tue, 16 Jun 2026 13:10:58 GMT Message-ID: <178161545850.1.13214606391308119450.rpms-firefox-e99f0d4925ac@fedoraproject.org> List-ID: X-Git-Repo: rpms/firefox X-Git-Branch: rawhide X-Git-Rev: e99f0d4925ac596ad75f2ae084620d36c44a85c2 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZmlyZWZveApCcmFu Y2ggOiByYXdoaWRlCkNvbW1pdCA6IGU5OWYwZDQ5MjVhYzU5NmFkNzVmMmFlMDg0NjIwZDM2YzQ0 YTg1YzIKQXV0aG9yIDogRGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6PgpEYXRlICAgOiAyMDI2LTA2 LTE2VDEzOjEwOjM0KzAwOjAwClN0YXRzICA6ICs0MjA4Ni8tMCBpbiA0IGZpbGUocykKVVJMICAg IDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9maXJlZm94L2MvZTk5ZjBkNDky NWFjNTk2YWQ3NWYyYWUwODQ2MjBkMzZjNDRhODVjMj9icmFuY2g9cmF3aGlkZQoKTG9nOgphZGQg cHBjNjRsZSBKSVQKCi0tLQpkaWZmIC0tZ2l0IGEvMDAwMS1BZGQtVlNYLWluc3RydWN0aW9ucy1m b3ItU0tJQS5wYXRjaCBiLzAwMDEtQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLVNLSUEucGF0Y2gK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzYTBkOAotLS0gL2Rldi9udWxs CisrKyBiLzAwMDEtQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLVNLSUEucGF0Y2gKQEAgLTAsMCAr MSwxMzQ3IEBACitGcm9tIGE0N2M5OTFkYmJmYjcwOTEzNDczN2E1NGU4YmJlN2UwYjFiY2U4MDAg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/VHJ1bmc9MjBMPUMzPUFB Pz0gPDhAdGxlLmlkLmF1PgorRGF0ZTogRnJpLCAxMiBKdW4gMjAyNiAxNToyMzoxMCArMTAwMAor U3ViamVjdDogW1BBVENIIDEvM10gQWRkIFZTWCBpbnN0cnVjdGlvbnMgZm9yIFNLSUEKKworQWRh cHRlZCBmcm9tIHdvcmsgZG9uZSBieSBSYXB0b3IgRW5naW5lZXJpbmcgZm9yIGNocm9taXVtJ3Mg dmVuZG9yZWQKK1NLSUEKKworQ28tYXV0aG9yZWQtYnk6IFRpbW90aHkgUGVhcnNvbiA8dHBlYXJz b25AcmFwdG9yZW5naW5lZXJpbmcuY29tPgorLS0tCisgZ2Z4L3NraWEvc2tpYS9zcmMvYmFzZS9T a1Z4LmggICAgICAgICAgICAgICAgIHwgIDU4ICsrKy0KKyBnZngvc2tpYS9za2lhL3NyYy9jb3Jl L1NrQmxpdFJvd19EMzIuY3BwICAgICAgfCAgOTggKysrKysrCisgZ2Z4L3NraWEvc2tpYS9zcmMv Y29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcCAgIHwgMjY4ICsrKysrKysrKysrKysrKysKKyAuLi4v c2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzLmggICAgfCAxNjQgKysrKysrKysr KworIGdmeC9za2lhL3NraWEvc3JjL29wdHMvU2tCbGl0Um93X29wdHMuaCAgICAgICB8ICA0OCAr KysKKyAuLi4vc2tpYS9zcmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5lX29wdHMuaCAgICAgfCAyMzcg KysrKysrKysrKysrKysKKyBnZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0cy5p bmMgICAgfCAyODkgKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCAxMTYwIGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZngvc2tpYS9za2lh L3NyYy9iYXNlL1NrVnguaCBiL2dmeC9za2lhL3NraWEvc3JjL2Jhc2UvU2tWeC5oCitpbmRleCBm ODdjYTQ0ZDRhZjAuLmVkODBjOTFmZDM4ZSAxMDA2NDQKKy0tLSBhL2dmeC9za2lhL3NraWEvc3Jj L2Jhc2UvU2tWeC5oCisrKysgYi9nZngvc2tpYS9za2lhL3NyYy9iYXNlL1NrVnguaAorQEAgLTUy LDYgKzUyLDggQEAKKyAgICAgICAgICNpbmNsdWRlIDxhcm1fbmVvbi5oPgorICAgICAjZWxpZiBk ZWZpbmVkKF9fd2FzbV9zaW1kMTI4X18pCisgICAgICAgICAjaW5jbHVkZSA8d2FzbV9zaW1kMTI4 Lmg+CisrICAgICNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQor KyAgICAgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKyAgICAgI2VsaWYgU0tfQ1BVX0xTWF9MRVZF TCA+PSBTS19DUFVfTFNYX0xFVkVMX0xBU1gKKyAgICAgICAgICNpbmNsdWRlIDxsYXN4aW50cmlu Lmg+CisgICAgICAgICAjaW5jbHVkZSA8bHN4aW50cmluLmg+CitAQCAtNTA5LDYgKzUxMSwxNCBA QCBTSU5UIFZlYzxOLFQ+IGlmX3RoZW5fZWxzZShjb25zdCBWZWM8TixNPFQ+PiYgY29uZCwgY29u c3QgVmVjPE4sVD4mIHQsIGNvbnN0IFZlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBza19iaXRfY2FzdDx1aW50OHgxNl90PihlKSkpOworICAgICB9Cisg I2VuZGlmCisrI2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZp bmVkKF9fVlNYX18pCisrICAgIGlmIGNvbnN0ZXhwciAoTipzaXplb2YoVCkgPT0gMTYpIHsKKysg ICAgICAgIHJldHVybiBza19iaXRfY2FzdDxWZWM8TixUPj4oCisrICAgICAgICAgICAgICAgIHZl Y19zZWwoc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgY2hhcj4oZSksCisrICAgICAgICAg ICAgICAgICAgICAgICAgc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgY2hhcj4odCksCisr ICAgICAgICAgICAgICAgICAgICAgICAgc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgY2hh cj4oY29uZCkpKTsKKysgICAgfQorKyNlbmRpZgorICNpZiBTS1ZYX1VTRV9TSU1EICYmIFNLX0NQ VV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZFTF9MQVNYCisgICAgIGlmIGNvbnN0ZXhwciAo TipzaXplb2YoVCkgPT0gMzIpIHsKKyAgICAgICAgIHJldHVybiBza19iaXRfY2FzdDxWZWM8TixU Pj4oX19sYXN4X3h2Yml0c2VsX3Yoc2tfYml0X2Nhc3Q8X19tMjU2aT4oZSksCitAQCAtNTc5LDYg KzU4OSwxMSBAQCBTSU5UIGJvb2wgYW55KGNvbnN0IFZlYzxOLFQ+JiB4KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrX2JpdF9j YXN0PF9fbTEyOGk+KHgpKSk7CisgICAgICAgICByZXR1cm4gcmV0dlswXSAhPSAwYjAwMDA7Cisg ICAgIH0KKysjZW5kaWYKKysjaWYgU0tWWF9VU0VfU0lNRCAmJiBkZWZpbmVkKFNLX0NQVV9QUEMp ICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgaWYgY29uc3RleHByIChOKnNpemVvZihUKSA9PSAx NikgeworKyAgICAgICAgcmV0dXJuIHZlY19hbnlfbmUoc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5z aWduZWQgaW50Pih4KSwgdmVjX3NwbGF0cygwdSkpOworKyAgICB9CisgI2VuZGlmCisgICAgIHJl dHVybiBhbnkoeC5sbykKKyAgICAgICAgIHx8IGFueSh4LmhpKTsKK0BAIC02MjIsNiArNjM3LDEx IEBAIFNJTlQgYm9vbCBhbGwoY29uc3QgVmVjPE4sVD4mIHgpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tfYml0X2Nhc3Q8X19t MTI4aT4oeCkpKTsKKyAgICAgICAgIHJldHVybiByZXR2WzBdID09IDBiMTExMTsKKyAgICAgfQor KyNlbmRpZgorKyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVm aW5lZChfX1ZTWF9fKQorKyAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9mKFQpID09IDE2KSB7Cisr ICAgICAgICByZXR1cm4gdmVjX2FsbF9uZShza19iaXRfY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBp bnQ+KHgpLCB2ZWNfc3BsYXRzKDB1KSk7CisrICAgIH0KKyAjZW5kaWYKKyAgICAgcmV0dXJuIGFs bCh4LmxvKQorICAgICAgICAgJiYgYWxsKHguaGkpOworQEAgLTY0Nyw4ICs2NjcsMjIgQEAgU0lU ICBUIG1heChjb25zdCBWZWM8MSxUPiYgeCkgeyByZXR1cm4geC52YWw7IH0KKyBTSU5UIFQgbWlu KGNvbnN0IFZlYzxOLFQ+JiB4KSB7IHJldHVybiBzdGQ6Om1pbihtaW4oeC5sbyksIG1pbih4Lmhp KSk7IH0KKyBTSU5UIFQgbWF4KGNvbnN0IFZlYzxOLFQ+JiB4KSB7IHJldHVybiBzdGQ6Om1heCht YXgoeC5sbyksIG1heCh4LmhpKSk7IH0KKyAKKy1TSU5UIFZlYzxOLFQ+IG1pbihjb25zdCBWZWM8 TixUPiYgeCwgY29uc3QgVmVjPE4sVD4mIHkpIHsgcmV0dXJuIG5haXZlX2lmX3RoZW5fZWxzZSh5 IDwgeCwgeSwgeCk7IH0KKy1TSU5UIFZlYzxOLFQ+IG1heChjb25zdCBWZWM8TixUPiYgeCwgY29u c3QgVmVjPE4sVD4mIHkpIHsgcmV0dXJuIG5haXZlX2lmX3RoZW5fZWxzZSh4IDwgeSwgeSwgeCk7 IH0KKytTSU5UIFZlYzxOLFQ+IG1pbihjb25zdCBWZWM8TixUPiYgeCwgY29uc3QgVmVjPE4sVD4m IHkpIHsKKysjaWYgU0tWWF9VU0VfU0lNRCAmJiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmlu ZWQoX19WU1hfXykKKysgICAgaWYgY29uc3RleHByIChOKnNpemVvZihUKSA9PSAxNikgeworKyAg ICAgICAgcmV0dXJuIHNrX2JpdF9jYXN0PFZlYzxOLFQ+Pih2ZWNfbWluKHRvX3ZleHQoeCksIHRv X3ZleHQoeSkpKTsKKysgICAgfQorKyNlbmRpZgorKyAgICByZXR1cm4gbmFpdmVfaWZfdGhlbl9l bHNlKHkgPCB4LCB5LCB4KTsKKyt9CisrU0lOVCBWZWM8TixUPiBtYXgoY29uc3QgVmVjPE4sVD4m IHgsIGNvbnN0IFZlYzxOLFQ+JiB5KSB7CisrI2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChT S19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrICAgIGlmIGNvbnN0ZXhwciAoTipzaXpl b2YoVCkgPT0gMTYpIHsKKysgICAgICAgIHJldHVybiBza19iaXRfY2FzdDxWZWM8TixUPj4odmVj X21heCh0b192ZXh0KHgpLCB0b192ZXh0KHkpKSk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0 dXJuIG5haXZlX2lmX3RoZW5fZWxzZSh4IDwgeSwgeSwgeCk7CisrfQorIAorIFNJTlRVIFZlYzxO LFQ+IG1pbihjb25zdCBWZWM8TixUPiYgeCwgVSB5KSB7IHJldHVybiBtaW4oeCwgVmVjPE4sVD4o eSkpOyB9CisgU0lOVFUgVmVjPE4sVD4gbWF4KGNvbnN0IFZlYzxOLFQ+JiB4LCBVIHkpIHsgcmV0 dXJuIG1heCh4LCBWZWM8TixUPih5KSk7IH0KK0BAIC05NjAsNiArOTk0LDI2IEBAIFNJTiBWZWM8 Tix1aW50MTZfdD4gbXVsaGkoY29uc3QgVmVjPE4sdWludDE2X3Q+JiB4LAorICAgICB9IGVsc2Ug eyAvLyBOID4gOAorICAgICAgICAgcmV0dXJuIGpvaW4obXVsaGkoeC5sbywgeS5sbyksIG11bGhp KHguaGksIHkuaGkpKTsKKyAgICAgfQorKyNlbGlmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChT S19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrICAgIGlmIGNvbnN0ZXhwciAoTiA9PSA4 KSB7CisrICAgICAgICAvLyB1MTYqdTE2IC0+IHUzMiBldmVuL29kZCBwcm9kdWN0cyAodm11bGV1 aC92bXVsb3VoKSwgdGhlbiBnYXRoZXIgdGhlCisrICAgICAgICAvLyBoaWdoIDE2IGJpdHMgb2Yg ZWFjaCBiYWNrIGludG8gc2VxdWVudGlhbCBsYW5lcy4gU2FtZSBpZGlvbSBhcyB0aGUKKysgICAg ICAgIC8vIFZTWCBzY2FsZSgpIGluIFNrU3dpenpsZXJfb3B0cy4KKysgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHhzID0gc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+ KHgpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgeXMgPSBza19iaXRfY2FzdDxf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4oeSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgZXZlbiA9IHZlY192bXVsZXVoKHhzLCB5cyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBpbnQgb2RkICA9IHZlY192bXVsb3VoKHhzLCB5cyk7CisrICAgICAgICBjb25zdCBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIGhpID0geworKyAgICAgICAgICAgIDB4MDIsMHgwMywgMHgxMiwweDEz LCAgMHgwNiwweDA3LCAweDE2LDB4MTcsCisrICAgICAgICAgICAgMHgwQSwweDBCLCAweDFBLDB4 MUIsICAweDBFLDB4MEYsIDB4MUUsMHgxRgorKyAgICAgICAgfTsKKysgICAgICAgIHJldHVybiBz a19iaXRfY2FzdDxWZWM8OCx1aW50MTZfdD4+KAorKyAgICAgICAgICAgIHZlY19wZXJtKChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKWV2ZW4sIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW9kZCwgaGkp KTsKKysgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoTiA8IDgpIHsKKysgICAgICAgIHJldHVybiBt dWxoaShqb2luKHgseCksIGpvaW4oeSx5KSkubG87CisrICAgIH0gZWxzZSB7IC8vIE4gPiA4Cisr ICAgICAgICByZXR1cm4gam9pbihtdWxoaSh4LmxvLCB5LmxvKSwgbXVsaGkoeC5oaSwgeS5oaSkp OworKyAgICB9CisgI2Vsc2UKKyAgICAgcmV0dXJuIHNrdng6OmNhc3Q8dWludDE2X3Q+KG11bGwo eCwgeSkgPj4gMTYpOworICNlbmRpZgorZGlmZiAtLWdpdCBhL2dmeC9za2lhL3NraWEvc3JjL2Nv cmUvU2tCbGl0Um93X0QzMi5jcHAgYi9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdFJvd19E MzIuY3BwCitpbmRleCBiY2JmMmU2NmJkNDYuLjkyMGQ2YTliMjM2NiAxMDA2NDQKKy0tLSBhL2dm eC9za2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0Um93X0QzMi5jcHAKKysrKyBiL2dmeC9za2lhL3Nr aWEvc3JjL2NvcmUvU2tCbGl0Um93X0QzMi5jcHAKK0BAIC01MTcsNiArNTE3LDEwNCBAQCBzdGF0 aWMgdm9pZCBibGl0X3Jvd19zMzJfb3BhcXVlKFNrUE1Db2xvciogZHN0LAorICAgICAgICAgfQor ICAgICB9CisgCisrI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18p CisrICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+CisrCisrICAgIC8vIGRzdCArICgoKHNyYyAtIGRz dCkgKiBzcmNfc2NhbGUpID4+IDgpLCBzcGxheWVkIGludG8gMTYtYml0IGxhbmVzOyB0aGUKKysg ICAgLy8gdmVjXyogdHJhbnNjcmlwdGlvbiBvZiBTa1BNTGVycF9TU0UyLgorKyAgICBzdGF0aWMg aW5saW5lIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgU2tQTUxlcnBfVlNYKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNyY19zY2Fs ZSkgeworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgaW50IG1hc2sgPSB2ZWNfc3Bs YXRzKDB4MDBGRjAwRkZ1KTsKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGVpZ2h0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7CisrICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCBzcmNfcmIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX2Fu ZCgoX192ZWN0b3IgdW5zaWduZWQgaW50KXNyYywgbWFzayk7CisrICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCBzcmNfYWcgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNy YywgZWlnaHQpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZHN0X3JiID0gKF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19hbmQoKF9fdmVjdG9yIHVuc2lnbmVkIGludClkc3Qs IG1hc2spOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZHN0X2FnID0gdmVjX3Ny KChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClkc3QsIGVpZ2h0KTsKKysgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHMgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydClzcmNfc2NhbGUp OworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZGlmZl9yYiA9IHZlY19tdWwodmVj X3N1YihzcmNfcmIsIGRzdF9yYiksIHMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgZGlmZl9hZyA9IHZlY19tdWwodmVjX3N1YihzcmNfYWcsIGRzdF9hZyksIHMpOworKyAgICAg ICAgZGlmZl9yYiA9IHZlY19zcihkaWZmX3JiLCBlaWdodCk7CisrICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBpbnQgZGlmZiA9IHZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgaW50KWRpZmZfcmIs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfYW5kYygo X192ZWN0b3IgdW5zaWduZWQgaW50KWRpZmZfYWcsIG1hc2spKTsKKysgICAgICAgIHJldHVybiB2 ZWNfYWRkKGRzdCwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZGlmZik7CisrICAgIH0KKysKKysg ICAgc3RhdGljIHZvaWQgYmxpdF9yb3dfczMyX2JsZW5kKFNrUE1Db2xvciogZHN0LCBjb25zdCBT a1BNQ29sb3IqIHNyYywgaW50IGNvdW50LCBVOENQVSBhbHBoYSkgeworKyAgICAgICAgU2tBU1NF UlQoYWxwaGEgPD0gMjU1KTsKKysgICAgICAgIHVuc2lnbmVkIHNyY19zY2FsZSA9IFNrQWxwaGEy NTVUbzI1NihhbHBoYSk7CisrICAgICAgICB3aGlsZSAoY291bnQgPj0gNCkgeworKyAgICAgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQg Y2hhciopc3JjKTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGQgPSB2ZWNf eGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICAgICAgdmVjX3hzdChT a1BNTGVycF9WU1gocywgZCwgc3JjX3NjYWxlKSwgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7Cisr ICAgICAgICAgICAgc3JjICs9IDQ7IGRzdCArPSA0OyBjb3VudCAtPSA0OworKyAgICAgICAgfQor KyAgICAgICAgd2hpbGUgKGNvdW50IC0tPiAwKSB7CisrICAgICAgICAgICAgKmRzdCA9IFNrUE1M ZXJwKCpzcmMsICpkc3QsIHNyY19zY2FsZSk7CisrICAgICAgICAgICAgc3JjKys7CisrICAgICAg ICAgICAgZHN0Kys7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLy8gVGhlIHZlY18qIHRy YW5zY3JpcHRpb24gb2YgU2tCbGVuZEFSR0IzMl9TU0UyOiBzY2FsZSBzcmMgYnkgYWEgYW5kIGRz dCBieQorKyAgICAvLyBTa0FscGhhTXVsSW52MjU2KHNyY0EsIGFhKSwgdGhlbiBhZGQgdGhlIHNw bGF5ZWQgaGFsdmVzLgorKyAgICBzdGF0aWMgaW5saW5lIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg U2tCbGVuZEFSR0IzMl9WU1goX192ZWN0b3IgdW5zaWduZWQgY2hhciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIGRzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFhKSB7CisrICAgICAgICB1bnNpZ25l ZCBhbHBoYSA9IFNrQWxwaGEyNTVUbzI1NihhYSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCBzcmNfc2NhbGUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydClhbHBoYSk7Cisr ICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgbWFzayA9IHZlY19zcGxhdHMoMHgw MEZGMDBGRnUpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZWlnaHQg PSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsKKysKKysgICAgICAgIC8vIGRzdF9zY2Fs ZSA9IFNrQWxwaGFNdWxJbnYyNTYoU2tHZXRQYWNrZWRBMzIoc3JjKSwgYWxwaGEpLCBwZXIgMzIt Yml0IGxhbmUuCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc3JjQSA9IHZlY19zcigo X192ZWN0b3IgdW5zaWduZWQgaW50KXNyYywgdmVjX3NwbGF0cygyNHUpKTsKKysgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIGludCBkcyA9IChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX211bCgo X192ZWN0b3IgdW5zaWduZWQgc2hvcnQpc3JjQSwgc3JjX3NjYWxlKTsKKysgICAgICAgIGRzID0g dmVjX3N1Yih2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMHhGRkZGKSwgZHMpOworKyAgICAgICAg ZHMgPSB2ZWNfYWRkKGRzLCB2ZWNfc3IoZHMsIHZlY19zcGxhdHMoOHUpKSk7CisrICAgICAgICBk cyA9IHZlY19zcihkcywgdmVjX3NwbGF0cyg4dSkpOworKyAgICAgICAgLy8gRHVwbGljYXRlIHRo ZSBsb3cgMTYtYml0IHdvcmQgb2YgZWFjaCAzMi1iaXQgbGFuZSBpbnRvIGJvdGggaGFsdmVzCisr ICAgICAgICAvLyAodGhlIFNTRSBzaHVmZmxlbG8vc2h1ZmZsZWhpIF9NTV9TSFVGRkxFKDIsMiww LDApKS4KKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHVwID0gKF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIpeworKyAgICAgICAgICAgIDAsMSwwLDEsIDQsNSw0LDUsIDgsOSw4 LDksIDEyLDEzLDEyLDEzCisrICAgICAgICB9OworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg c2hvcnQgZHN0X3NjYWxlID0KKysgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQp dmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWRzLCBk dXApOworKworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3JjX3JiID0gKF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0KXZlY19hbmQoKF9fdmVjdG9yIHVuc2lnbmVkIGludClzcmMsIG1h c2spOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3JjX2FnID0gdmVjX3NyKChf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmMsIGVpZ2h0KTsKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IGRzdF9yYiA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfYW5kKChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpZHN0LCBtYXNrKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGRzdF9hZyA9IHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZHN0LCBl aWdodCk7CisrCisrICAgICAgICBzcmNfcmIgPSB2ZWNfbXVsKHNyY19yYiwgc3JjX3NjYWxlKTsK KysgICAgICAgIHNyY19hZyA9IHZlY19tdWwoc3JjX2FnLCBzcmNfc2NhbGUpOworKyAgICAgICAg ZHN0X3JiID0gdmVjX211bChkc3RfcmIsIGRzdF9zY2FsZSk7CisrICAgICAgICBkc3RfYWcgPSB2 ZWNfbXVsKGRzdF9hZywgZHN0X3NjYWxlKTsKKysKKysgICAgICAgIGRzdF9yYiA9IHZlY19hZGQo c3JjX3JiLCBkc3RfcmIpOworKyAgICAgICAgZHN0X2FnID0gdmVjX2FkZChzcmNfYWcsIGRzdF9h Zyk7CisrCisrICAgICAgICBkc3RfcmIgPSB2ZWNfc3IoZHN0X3JiLCBlaWdodCk7CisrICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgb3V0ID0gdmVjX29yKChfX3ZlY3RvciB1bnNpZ25lZCBp bnQpZHN0X3JiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 ZWNfYW5kYygoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdF9hZywgbWFzaykpOworKyAgICAgICAg cmV0dXJuIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW91dDsKKysgICAgfQorKworKyAgICBzdGF0 aWMgdm9pZCBibGl0X3Jvd19zMzJhX2JsZW5kKFNrUE1Db2xvciogZHN0LCBjb25zdCBTa1BNQ29s b3IqIHNyYywgaW50IGNvdW50LCBVOENQVSBhbHBoYSkgeworKyAgICAgICAgU2tBU1NFUlQoYWxw aGEgPD0gMjU1KTsKKysgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7CisrICAgICAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciBzID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFy KilzcmMpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZCA9IHZlY194bCgw LCAoY29uc3QgdW5zaWduZWQgY2hhciopZHN0KTsKKysgICAgICAgICAgICB2ZWNfeHN0KFNrQmxl bmRBUkdCMzJfVlNYKHMsIGQsIGFscGhhKSwgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAg ICAgICAgICAgc3JjICs9IDQ7IGRzdCArPSA0OyBjb3VudCAtPSA0OworKyAgICAgICAgfQorKyAg ICAgICAgd2hpbGUgKGNvdW50IC0tPiAwKSB7CisrICAgICAgICAgICAgKmRzdCA9IFNrQmxlbmRB UkdCMzIoKnNyYywgKmRzdCwgYWxwaGEpOworKyAgICAgICAgICAgIHNyYysrOworKyAgICAgICAg ICAgIGRzdCsrOworKyAgICAgICAgfQorKyAgICB9CisrCisgI2Vsc2UKKyAgICAgc3RhdGljIHZv aWQgYmxpdF9yb3dfczMyX2JsZW5kKFNrUE1Db2xvciogZHN0LCBjb25zdCBTa1BNQ29sb3IqIHNy YywgaW50IGNvdW50LCBVOENQVSBhbHBoYSkgeworICAgICAgICAgU2tBU1NFUlQoYWxwaGEgPD0g MjU1KTsKK2RpZmYgLS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlcl9BUkdC MzIuY3BwIGIvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcAoraW5k ZXggYTc1MzgwMjdiODVkLi45NjY5NDMxMjkyYjYgMTAwNjQ0CistLS0gYS9nZngvc2tpYS9za2lh L3NyYy9jb3JlL1NrQmxpdHRlcl9BUkdCMzIuY3BwCisrKysgYi9nZngvc2tpYS9za2lhL3NyYy9j b3JlL1NrQmxpdHRlcl9BUkdCMzIuY3BwCitAQCAtNDgwLDYgKzQ4MCwyNzQgQEAgc3RhdGljIGlu bGluZSBTa1BNQ29sb3IgYmxlbmRfbGNkMTZfb3BhcXVlKGludCBzcmNSLCBpbnQgc3JjRywgaW50 IHNyY0IsCisgICAgICAgICB9CisgICAgIH0KKyAKKysjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMp ICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysKKysgICAg Ly8gTmF0aXZlIFZTWC9BbHRpVmVjIHBvcnQgb2YgdGhlIFNTRTIgTENELXN1YnBpeGVsIGJsZW5k IGJsb2NrIGJlbG93LgorKyAgICAvLyBTYW1lIGFsZ29yaXRobSDigJQgb25seSB0aGUgaW50cmlu c2ljcyBjaGFuZ2UuIFRyYW5zbGF0aW9ucyBmb2xsb3cgdGhlCisrICAgIC8vIEdDQyBwcGNfd3Jh cHBlcnMgcGF0dGVybiAodmVjX21lcmdlaC9sLCB2ZWNfcGFja3N1LCBldGMuKS4KKysKKysgICAg Ly8gVGhlIGZvbGxvd2luZyAobGVmdCkgc2hpZnRzIGNhdXNlIHRoZSB0b3AgNSBiaXRzIG9mIHRo ZSBtYXNrIGNvbXBvbmVudHMgdG8KKysgICAgLy8gbGluZSB1cCB3aXRoIHRoZSBjb3JyZXNwb25k aW5nIGNvbXBvbmVudHMgaW4gYW4gU2tQTUNvbG9yLgorKyAgICAvLyBOb3RlIHRoYXQgdGhlIG1h c2sncyBSR0IxNiBvcmRlciBtYXkgZGlmZmVyIGZyb20gdGhlIFNrUE1Db2xvciBvcmRlci4KKysg ICAgI2RlZmluZSBTS19SMTZ4NV9SMzJ4NV9TSElGVCAoU0tfUjMyX1NISUZUIC0gU0tfUjE2X1NI SUZUIC0gU0tfUjE2X0JJVFMgKyA1KQorKyAgICAjZGVmaW5lIFNLX0cxNng1X0czMng1X1NISUZU IChTS19HMzJfU0hJRlQgLSBTS19HMTZfU0hJRlQgLSBTS19HMTZfQklUUyArIDUpCisrICAgICNk ZWZpbmUgU0tfQjE2eDVfQjMyeDVfU0hJRlQgKFNLX0IzMl9TSElGVCAtIFNLX0IxNl9TSElGVCAt IFNLX0IxNl9CSVRTICsgNSkKKysKKysgICAgLy8gRWFjaCBtYWNybyBtdXN0IGFsd2F5cyByZXR1 cm4gX192ZWN0b3IgdW5zaWduZWQgaW50IHNvIHRoZSBzdXJyb3VuZGluZworKyAgICAvLyB2ZWNf YW5kIGdldHMgbWF0Y2hpbmcgZWxlbWVudCB0eXBlcy4gVGhlIHBhc3MtdGhyb3VnaCBjYXNlIChT SElGVCA9PSAwKQorKyAgICAvLyBzdGlsbCBuZWVkcyBhbiBleHBsaWNpdCByZWludGVycHJldC1j YXN0IHNpbmNlIGBtYXNrYCBpcyBfX3ZlY3RvcgorKyAgICAvLyB1bnNpZ25lZCBjaGFyIGluIG91 ciBmdW5jdGlvbiBzaWduYXR1cmUuCisrICAgICNpZiBTS19SMTZ4NV9SMzJ4NV9TSElGVCA9PSAw CisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkUjE2eDVUb1VubWFza2VkUjMyeDVfVlNYKHgpICgo X192ZWN0b3IgdW5zaWduZWQgaW50KSh4KSkKKysgICAgI2VsaWYgU0tfUjE2eDVfUjMyeDVfU0hJ RlQgPiAwCisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkUjE2eDVUb1VubWFza2VkUjMyeDVfVlNY KHgpIFwKKysgICAgICAgICAgICB2ZWNfc2woKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZl Y19zcGxhdHMoKHVuc2lnbmVkIGludClTS19SMTZ4NV9SMzJ4NV9TSElGVCkpCisrICAgICNlbHNl CisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkUjE2eDVUb1VubWFza2VkUjMyeDVfVlNYKHgpIFwK KysgICAgICAgICAgICB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZlY19zcGxh dHMoKHVuc2lnbmVkIGludCkoLVNLX1IxNng1X1IzMng1X1NISUZUKSkpCisrICAgICNlbmRpZgor KworKyAgICAjaWYgU0tfRzE2eDVfRzMyeDVfU0hJRlQgPT0gMAorKyAgICAgICAgI2RlZmluZSBT a1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWCh4KSAoKF9fdmVjdG9yIHVuc2lnbmVkIGlu dCkoeCkpCisrICAgICNlbGlmIFNLX0cxNng1X0czMng1X1NISUZUID4gMAorKyAgICAgICAgI2Rl ZmluZSBTa1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWCh4KSBcCisrICAgICAgICAgICAg dmVjX3NsKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBp bnQpU0tfRzE2eDVfRzMyeDVfU0hJRlQpKQorKyAgICAjZWxzZQorKyAgICAgICAgI2RlZmluZSBT a1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWCh4KSBcCisrICAgICAgICAgICAgdmVjX3Ny KChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKC1T S19HMTZ4NV9HMzJ4NV9TSElGVCkpKQorKyAgICAjZW5kaWYKKysKKysgICAgI2lmIFNLX0IxNng1 X0IzMng1X1NISUZUID09IDAKKysgICAgICAgICNkZWZpbmUgU2tQYWNrZWRCMTZ4NVRvVW5tYXNr ZWRCMzJ4NV9WU1goeCkgKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpKQorKyAgICAjZWxpZiBT S19CMTZ4NV9CMzJ4NV9TSElGVCA+IDAKKysgICAgICAgICNkZWZpbmUgU2tQYWNrZWRCMTZ4NVRv VW5tYXNrZWRCMzJ4NV9WU1goeCkgXAorKyAgICAgICAgICAgIHZlY19zbCgoX192ZWN0b3IgdW5z aWduZWQgaW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KVNLX0IxNng1X0IzMng1X1NI SUZUKSkKKysgICAgI2Vsc2UKKysgICAgICAgICNkZWZpbmUgU2tQYWNrZWRCMTZ4NVRvVW5tYXNr ZWRCMzJ4NV9WU1goeCkgXAorKyAgICAgICAgICAgIHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQg aW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgtU0tfQjE2eDVfQjMyeDVfU0hJRlQp KSkKKysgICAgI2VuZGlmCisrCisrICAgIHN0YXRpYyBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGJs ZW5kX2xjZDE2X3ZzeChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBzcmMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg Y2hhciYgZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIG1hc2ssCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciYg c3JjQSkgeworKyAgICAgICAgLy8gR2V0IHRoZSBSLEcsQiBvZiBlYWNoIDE2Yml0IG1hc2sgcGl4 ZWwsIGFsbCBhbGlnbmVkIHRvIDUtYml0IHBvc2l0aW9ucy4KKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGludCByID0gdmVjX2FuZChTa1BhY2tlZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWCht YXNrKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tfUjMyX1NISUZUKSkpOworKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgaW50IGcgPSB2ZWNfYW5kKFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMy eDVfVlNYKG1hc2spLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgxRiA8PCBTS19HMzJfU0hJRlQpKSk7CisrICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgYiA9IHZlY19hbmQoU2tQYWNrZWRCMTZ4NVRvVW5t YXNrZWRCMzJ4NV9WU1gobWFzayksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgweDFGIDw8IFNLX0IzMl9TSElGVCkp KTsKKysKKysgICAgICAgIC8vIGEgbmVlZHMgdG8gYmUgZWl0aGVyIHRoZSBtaW4gb3IgdGhlIG1h eCBvZiB0aGUgTENEIGNvdmVyYWdlcywgZGVwZW5kaW5nIG9uIHNyY0EgPCBkc3RBLgorKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHJBID0gdmVjX3NsKHIsIHZlY19zcGxhdHMoKHVuc2ln bmVkIGludCkoU0tfQTMyX1NISUZUIC0gU0tfUjMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgaW50IGdBID0gdmVjX3NsKGcsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCko U0tfQTMyX1NISUZUIC0gU0tfRzMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgaW50IGJBID0gdmVjX3NsKGIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoU0tfQTMyX1NI SUZUIC0gU0tfQjMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBh TWluID0gdmVjX21pbih2ZWNfbWluKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXJBLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0 b3IgdW5zaWduZWQgY2hhcilnQSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWJBKTsKKysgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgYU1heCA9IHZlY19tYXgodmVjX21heCgoX192ZWN0b3IgdW5zaWdu ZWQgY2hhcilyQSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ0EpLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcili QSk7CisrICAgICAgICAvLyBzcmNBIGhhcyBiZWVuIGJpYXNlZCB0byBbMC0yNTZdOyBjb21wYXJl IHNyY0EgYWdhaW5zdCAoZHN0QSsxKS4KKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBk c3RBID0gdmVjX2FuZCh2ZWNfYWRkKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpZHN0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0 cygodW5zaWduZWQgaW50KSgxIDw8IFNLX0EzMl9TSElGVCkpKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpU0tf QTMyX01BU0spKTsKKysgICAgICAgIF9fdmVjdG9yIF9fYm9vbCBpbnQgYUxUID0gdmVjX2NtcGx0 KChfX3ZlY3RvciBzaWduZWQgaW50KXNyY0EsIChfX3ZlY3RvciBzaWduZWQgaW50KWRzdEEpOwor KyAgICAgICAgLy8gYSA9IChhTWluICYgYUxUKSB8IChhTWF4ICYgfmFMVCkKKysgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgYSA9IHZlY19vcih2ZWNfYW5kKGFNaW4sIChfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKWFMVCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmVjX2FuZGMoYU1heCwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYUxUKSk7CisrCisr ICAgICAgICAvLyBQYWNrIHRoZSA0IDE2LWJpdCBtYXNrIHBpeGVscyBpbnRvIDQgMzItYml0IHBp eGVscyAobTBBLCBtMFIsIG0wRywgbTBCLCAuLi4pLgorKyAgICAgICAgbWFzayA9IHZlY19vcih2 ZWNfb3IoYSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpciksCisrICAgICAgICAgICAgICAgICAg ICAgIHZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnLCAoX192ZWN0b3IgdW5zaWduZWQg Y2hhciliKSk7CisrCisrICAgICAgICAvLyBJbnRlcmxlYXZlIGludG8gMTYtYml0IHdvcmRzLgor KyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvcyA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIGNoYXIpMCk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBtYXNr TG8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlaChtYXNrLCB6ZXJvcyk7Cisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBtYXNrSGkgPSAoX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQpdmVjX21lcmdlbChtYXNrLCB6ZXJvcyk7CisrCisrICAgICAgICAvLyBVcHNjYWxl IDAuLjMxIC0+IDAuLjMyIGJ5IGFkZGluZyAobWFzayA+PiA0KS4KKysgICAgICAgIGNvbnN0IF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0IHY0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNCk7 CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2OCA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIHNob3J0KTgpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgdjUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk1KTsKKysgICAgICAgIG1hc2tMbyA9 IHZlY19hZGQobWFza0xvLCB2ZWNfc3IobWFza0xvLCB2NCkpOworKyAgICAgICAgbWFza0hpID0g dmVjX2FkZChtYXNrSGksIHZlY19zcihtYXNrSGksIHY0KSk7CisrCisrICAgICAgICAvLyBNdWx0 aXBseSBieSBzcmNBIHBlciAxNi1iaXQgbGFuZS4KKysgICAgICAgIG1hc2tMbyA9IHZlY19tdWwo bWFza0xvLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpc3JjQSk7CisrICAgICAgICBtYXNrSGkg PSB2ZWNfbXVsKG1hc2tIaSwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNyY0EpOworKyAgICAg ICAgLy8gRGl2aWRlIGJ5IDI1NiAocmlnaHQtc2hpZnQgOCkuCisrICAgICAgICBtYXNrTG8gPSB2 ZWNfc3IobWFza0xvLCB2OCk7CisrICAgICAgICBtYXNrSGkgPSB2ZWNfc3IobWFza0hpLCB2OCk7 CisrCisrICAgICAgICAvLyBVbnBhY2sgZHN0IGludG8gMTYtYml0IHdvcmRzLgorKyAgICAgICAg X192ZWN0b3Igc2lnbmVkIHNob3J0IGRzdExvID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNf bWVyZ2VoKGRzdCwgemVyb3MpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IGRzdEhp ID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKGRzdCwgemVyb3MpOworKyAgICAg ICAgLy8gbWFzayA9IChzcmMgLSBkc3QpICogbWFzaworKyAgICAgICAgX192ZWN0b3Igc2lnbmVk IHNob3J0IHNyY1MgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXNyYzsKKysgICAgICAgIF9fdmVj dG9yIHNpZ25lZCBzaG9ydCBtTG9TID0gdmVjX211bCgoX192ZWN0b3Igc2lnbmVkIHNob3J0KW1h c2tMbywgdmVjX3N1YihzcmNTLCBkc3RMbykpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNo b3J0IG1IaVMgPSB2ZWNfbXVsKChfX3ZlY3RvciBzaWduZWQgc2hvcnQpbWFza0hpLCB2ZWNfc3Vi KHNyY1MsIGRzdEhpKSk7CisrICAgICAgICAvLyBhcml0aG1ldGljIHNoaWZ0IHJpZ2h0IGJ5IDUK KysgICAgICAgIG1Mb1MgPSB2ZWNfc3JhKG1Mb1MsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2 NSk7CisrICAgICAgICBtSGlTID0gdmVjX3NyYShtSGlTLCAoX192ZWN0b3IgdW5zaWduZWQgc2hv cnQpdjUpOworKyAgICAgICAgLy8gcmVzdWx0ID0gZHN0ICsgKChzcmMgLSBkc3QpICogbWFzayA+ PiA1KQorKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHJlc0xvID0gdmVjX2FkZChkc3RM bywgbUxvUyk7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgcmVzSGkgPSB2ZWNfYWRk KGRzdEhpLCBtSGlTKTsKKysgICAgICAgIC8vIFBhY2sgMTYtYml0IHNpZ25lZCAtPiA4LWJpdCB1 bnNpZ25lZCB3aXRoIHNhdHVyYXRpb24uCisrICAgICAgICByZXR1cm4gdmVjX3BhY2tzdShyZXNM bywgcmVzSGkpOworKyAgICB9CisrCisrICAgIHN0YXRpYyBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IGJsZW5kX2xjZDE2X29wYXF1ZV92c3goX192ZWN0b3IgdW5zaWduZWQgY2hhciYgc3JjLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIG1h c2spIHsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCByID0gdmVjX2FuZChTa1BhY2tl ZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWChtYXNrKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tf UjMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGcgPSB2ZWNfYW5k KFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMyeDVfVlNYKG1hc2spLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgx RiA8PCBTS19HMzJfU0hJRlQpKSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgYiA9 IHZlY19hbmQoU2tQYWNrZWRCMTZ4NVRvVW5tYXNrZWRCMzJ4NV9WU1gobWFzayksCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQg aW50KSgweDFGIDw8IFNLX0IzMl9TSElGVCkpKTsKKysKKysgICAgICAgIC8vIE9wYXF1ZSBzcmM6 IGEgPSBtYXgociwgZywgYikgc2hpZnRlZCB0byBhbHBoYSBsYW5lLgorKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgaW50IHJBID0gdmVjX3NsKHIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCko U0tfQTMyX1NISUZUIC0gU0tfUjMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgaW50IGdBID0gdmVjX3NsKGcsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoU0tfQTMyX1NI SUZUIC0gU0tfRzMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGJB ID0gdmVjX3NsKGIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoU0tfQTMyX1NISUZUIC0gU0tf QjMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBhID0gdmVjX21h eCh2ZWNfbWF4KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXJBLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hh cilnQSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKWJBKTsKKysKKysgICAgICAgIG1hc2sgPSB2ZWNfb3IodmVjX29y KGEsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXIpLAorKyAgICAgICAgICAgICAgICAgICAgICB2 ZWNfb3IoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZywgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIp YikpOworKworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvcyA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCBtYXNrTG8gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlaChtYXNrLCB6 ZXJvcyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBtYXNrSGkgPSAoX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlbChtYXNrLCB6ZXJvcyk7CisrCisrICAgICAgICBj b25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2NCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTQpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjUgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk1KTsKKysgICAgICAgIG1hc2tMbyA9IHZlY19hZGQobWFz a0xvLCB2ZWNfc3IobWFza0xvLCB2NCkpOworKyAgICAgICAgbWFza0hpID0gdmVjX2FkZChtYXNr SGksIHZlY19zcihtYXNrSGksIHY0KSk7CisrCisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hv cnQgZHN0TG8gPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19tZXJnZWgoZHN0LCB6ZXJvcyk7 CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgZHN0SGkgPSAoX192ZWN0b3Igc2lnbmVk IHNob3J0KXZlY19tZXJnZWwoZHN0LCB6ZXJvcyk7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQg c2hvcnQgc3JjUyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpc3JjOworKyAgICAgICAgX192ZWN0 b3Igc2lnbmVkIHNob3J0IG1Mb1MgPSB2ZWNfbXVsKChfX3ZlY3RvciBzaWduZWQgc2hvcnQpbWFz a0xvLCB2ZWNfc3ViKHNyY1MsIGRzdExvKSk7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hv cnQgbUhpUyA9IHZlY19tdWwoKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCltYXNrSGksIHZlY19zdWIo c3JjUywgZHN0SGkpKTsKKysgICAgICAgIG1Mb1MgPSB2ZWNfc3JhKG1Mb1MsIChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCl2NSk7CisrICAgICAgICBtSGlTID0gdmVjX3NyYShtSGlTLCAoX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQpdjUpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHJl c0xvID0gdmVjX2FkZChkc3RMbywgbUxvUyk7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hv cnQgcmVzSGkgPSB2ZWNfYWRkKGRzdEhpLCBtSGlTKTsKKysgICAgICAgIHJldHVybiB2ZWNfcGFj a3N1KHJlc0xvLCByZXNIaSk7CisrICAgIH0KKysKKysgICAgdm9pZCBibGl0X3Jvd19sY2QxNihT a1BNQ29sb3IgZHN0W10sIGNvbnN0IHVpbnQxNl90IG1hc2tbXSwgU2tDb2xvciBzcmMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBTa1BNQ29sb3IpIHsKKysgICAgICAgIGlm ICh3aWR0aCA8PSAwKSB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAg ICAgaW50IHNyY0EgPSBTa0NvbG9yR2V0QShzcmMpOworKyAgICAgICAgaW50IHNyY1IgPSBTa0Nv bG9yR2V0UihzcmMpOworKyAgICAgICAgaW50IHNyY0cgPSBTa0NvbG9yR2V0RyhzcmMpOworKyAg ICAgICAgaW50IHNyY0IgPSBTa0NvbG9yR2V0QihzcmMpOworKyAgICAgICAgc3JjQSA9IFNrQWxw aGEyNTVUbzI1NihzcmNBKTsKKysKKysgICAgICAgIGlmICh3aWR0aCA+PSA0KSB7CisrICAgICAg ICAgICAgU2tBU1NFUlQoU2tJc0FsaWduNCgodWludHB0cl90KSBkc3QpKTsKKysgICAgICAgICAg ICB3aGlsZSAoIVNrSXNBbGlnbjE2KCh1aW50cHRyX3QpIGRzdCkpIHsKKysgICAgICAgICAgICAg ICAgKmRzdCA9IGJsZW5kX2xjZDE2KHNyY0EsIHNyY1IsIHNyY0csIHNyY0IsICpkc3QsICptYXNr KTsKKysgICAgICAgICAgICAgICAgbWFzaysrOyBkc3QrKzsgd2lkdGgtLTsKKysgICAgICAgICAg ICB9CisrCisrICAgICAgICAgICAgLy8gUmVwbGljYXRlIHNvdXJjZSBhY3Jvc3MgNCBsYW5lcywg dGhlbiB1bnBhY2sgbG93IGhhbGYgdG8gaW50ZXJsZWF2ZWQgMTYtYml0LgorKyAgICAgICAgICAg IHVpbnQzMl90IHNyY1BNID0gU2tQYWNrQVJHQjMyKDB4RkYsIHNyY1IsIHNyY0csIHNyY0IpOwor KyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBzcmNfdjMyID0gdmVjX3NwbGF0cyhz cmNQTSk7CisrICAgICAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvcyA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBzcmNfdiA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpc3Jj X3YzMiwgemVyb3MpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3JjQV92 ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpc3Jj QSk7CisrCisrICAgICAgICAgICAgd2hpbGUgKHdpZHRoID49IDQpIHsKKysgICAgICAgICAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBkc3RfdiA9IHZlY194bCgwLCAoY29uc3QgdW5zaWdu ZWQgY2hhciopZHN0KTsKKysgICAgICAgICAgICAgICAgLy8gTG9hZCA4IGJ5dGVzICg0eCB1aW50 MTYgbWFzaykgaW50byBsb3cgaGFsZiBvZiB2ZWN0b3IuCisrICAgICAgICAgICAgICAgIHVpbnQ2 NF90IG1sbzsKKysgICAgICAgICAgICAgICAgbWVtY3B5KCZtbG8sIG1hc2ssIHNpemVvZihtbG8p KTsKKysgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIG1hc2tfbG93 ID0KKysgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpe21s bywgMH07CisrICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFza192ID0g KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpbWFza19sb3c7CisrCisrICAgICAgICAgICAgICAgIC8v IENoZWNrIGlmIGFsbCBtYXNrIHZhbHVlcyBhcmUgemVybyAoc2tpcCBibGVuZGluZyBpZiBzbyku CisrICAgICAgICAgICAgICAgIGlmICghdmVjX2FsbF9lcSgoX192ZWN0b3IgdW5zaWduZWQgbG9u ZyBsb25nKW1hc2tfdiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxh dHMoKHVuc2lnbmVkIGxvbmcgbG9uZykwKSkpIHsKKysgICAgICAgICAgICAgICAgICAgIC8vIFVu cGFjayBsb3cgOCBieXRlcyBvZiBtYXNrICg0eCB1aW50MTYpIGludG8gNHggdWludDMyICh3aXRo IHplcm9zKS4KKysgICAgICAgICAgICAgICAgICAgIC8vIFplcm8tZXh0ZW5kIHRoZSA0IHVpbnQx NiBtYXNrcyB0byA0IHVpbnQzMiAoMTYtYml0LWdyYW51bGFyaXR5CisrICAgICAgICAgICAgICAg ICAgICAvLyBtZXJnZSwgbWF0Y2hpbmcgU1NFMidzIF9tbV91bnBhY2tsb19lcGkxNik7IGEgY2hh ci1ncmFudWxhcml0eQorKyAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2Ugd291bGQgYnl0ZS1z dHJldGNoIHRoZSBSR0I1NjUgdmFsdWUgYW5kIG1pc3BsYWNlIHRoZSBzaGlmdHMuCisrICAgICAg ICAgICAgICAgICAgICBtYXNrX3YgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2Vo KChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCltYXNrX3YsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0KXplcm9zKTsKKysgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgcmVzdWx0ID0KKysgICAgICAgICAgICAgICAgICAgICAgICBibGVuZF9sY2QxNl92c3go c3JjX3YsIGRzdF92LCBtYXNrX3YsIHNyY0Ffdik7CisrICAgICAgICAgICAgICAgICAgICB2ZWNf eHN0KHJlc3VsdCwgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICAgICAgICAgIH0K KysgICAgICAgICAgICAgICAgZHN0ICs9IDQ7IG1hc2sgKz0gNDsgd2lkdGggLT0gNDsKKysgICAg ICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICB3aGlsZSAod2lkdGggPiAwKSB7Cisr ICAgICAgICAgICAgKmRzdCA9IGJsZW5kX2xjZDE2KHNyY0EsIHNyY1IsIHNyY0csIHNyY0IsICpk c3QsICptYXNrKTsKKysgICAgICAgICAgICBtYXNrKys7IGRzdCsrOyB3aWR0aC0tOworKyAgICAg ICAgfQorKyAgICB9CisrCisrICAgIHZvaWQgYmxpdF9yb3dfbGNkMTZfb3BhcXVlKFNrUE1Db2xv ciBkc3RbXSwgY29uc3QgdWludDE2X3QgbWFza1tdLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTa0NvbG9yIHNyYywgaW50IHdpZHRoLCBTa1BNQ29sb3Igb3BhcXVlRHN0KSB7Cisr ICAgICAgICBpZiAod2lkdGggPD0gMCkgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAg IH0KKysgICAgICAgIGludCBzcmNSID0gU2tDb2xvckdldFIoc3JjKTsKKysgICAgICAgIGludCBz cmNHID0gU2tDb2xvckdldEcoc3JjKTsKKysgICAgICAgIGludCBzcmNCID0gU2tDb2xvckdldEIo c3JjKTsKKysKKysgICAgICAgIGlmICh3aWR0aCA+PSA0KSB7CisrICAgICAgICAgICAgU2tBU1NF UlQoU2tJc0FsaWduNCgodWludHB0cl90KSBkc3QpKTsKKysgICAgICAgICAgICB3aGlsZSAoIVNr SXNBbGlnbjE2KCh1aW50cHRyX3QpIGRzdCkpIHsKKysgICAgICAgICAgICAgICAgKmRzdCA9IGJs ZW5kX2xjZDE2X29wYXF1ZShzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFzaywgb3BhcXVlRHN0 KTsKKysgICAgICAgICAgICAgICAgbWFzaysrOyBkc3QrKzsgd2lkdGgtLTsKKysgICAgICAgICAg ICB9CisrCisrICAgICAgICAgICAgdWludDMyX3Qgc3JjUE0gPSBTa1BhY2tBUkdCMzIoMHhGRiwg c3JjUiwgc3JjRywgc3JjQik7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHNy Y192MzIgPSB2ZWNfc3BsYXRzKHNyY1BNKTsKKysgICAgICAgICAgICBjb25zdCBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIHplcm9zID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgICAg ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNyY192ID0gdmVjX21lcmdlaCgoX192ZWN0 b3IgdW5zaWduZWQgY2hhcilzcmNfdjMyLCB6ZXJvcyk7CisrCisrICAgICAgICAgICAgd2hpbGUg KHdpZHRoID49IDQpIHsKKysgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBk c3RfdiA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopZHN0KTsKKysgICAgICAgICAg ICAgICAgdWludDY0X3QgbWxvOworKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1sbywgbWFzaywg c2l6ZW9mKG1sbykpOworKyAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxv bmcgbWFza19sb3cgPQorKyAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGxv bmcgbG9uZyl7bWxvLCAwfTsKKysgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBtYXNrX3YgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhciltYXNrX2xvdzsKKysKKysgICAgICAg ICAgICAgICAgaWYgKCF2ZWNfYWxsX2VxKChfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpbWFz a192LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWdu ZWQgbG9uZyBsb25nKTApKSkgeworKyAgICAgICAgICAgICAgICAgICAgLy8gWmVyby1leHRlbmQg dGhlIDQgdWludDE2IG1hc2tzIHRvIDQgdWludDMyICgxNi1iaXQtZ3JhbnVsYXJpdHkKKysgICAg ICAgICAgICAgICAgICAgIC8vIG1lcmdlLCBtYXRjaGluZyBTU0UyJ3MgX21tX3VucGFja2xvX2Vw aTE2KTsgYSBjaGFyLWdyYW51bGFyaXR5CisrICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSB3 b3VsZCBieXRlLXN0cmV0Y2ggdGhlIFJHQjU2NSB2YWx1ZSBhbmQgbWlzcGxhY2UgdGhlIHNoaWZ0 cy4KKysgICAgICAgICAgICAgICAgICAgIG1hc2tfdiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KXZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KW1hc2tfdiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQpemVyb3MpOworKyAgICAgICAgICAgICAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciByZXN1bHQgPQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5k X2xjZDE2X29wYXF1ZV92c3goc3JjX3YsIGRzdF92LCBtYXNrX3YpOworKyAgICAgICAgICAgICAg ICAgICAgdmVjX3hzdChyZXN1bHQsIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAg ICAgICAgICB9CisrICAgICAgICAgICAgICAgIGRzdCArPSA0OyBtYXNrICs9IDQ7IHdpZHRoIC09 IDQ7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgd2hpbGUgKHdpZHRo ID4gMCkgeworKyAgICAgICAgICAgICpkc3QgPSBibGVuZF9sY2QxNl9vcGFxdWUoc3JjUiwgc3Jj Rywgc3JjQiwgKmRzdCwgKm1hc2ssIG9wYXF1ZURzdCk7CisrICAgICAgICAgICAgbWFzaysrOyBk c3QrKzsgd2lkdGgtLTsKKysgICAgICAgIH0KKysgICAgfQorKworICNlbGlmIGRlZmluZWQoU0tf QVJNX0hBU19ORU9OKQorICAgICAjaW5jbHVkZSA8YXJtX25lb24uaD4KKyAKK2RpZmYgLS1naXQg YS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHMuaCBiL2dmeC9z a2lhL3NraWEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0cy5oCitpbmRleCA2ZDAxYTJm NDQ1OGYuLjg3YjE2MGVkN2ExZSAxMDA2NDQKKy0tLSBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMv U2tCaXRtYXBQcm9jU3RhdGVfb3B0cy5oCisrKysgYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1Nr Qml0bWFwUHJvY1N0YXRlX29wdHMuaAorQEAgLTI5LDYgKzI5LDggQEAKKyAgICAgI2luY2x1ZGUg PGxhc3hpbnRyaW4uaD4KKyAjZWxpZiBTS19DUFVfTFNYX0xFVkVMID49IFNLX0NQVV9MU1hfTEVW RUxfTFNYCisgICAgICNpbmNsdWRlIDxsc3hpbnRyaW4uaD4KKysjZWxpZiBkZWZpbmVkKFNLX0NQ VV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKyAj ZW5kaWYKKyAKKyBuYW1lc3BhY2UgU0tfT1BUU19OUyB7CitAQCAtMjYwLDYgKzI2MiwxNjggQEAg c3RhdGljIHZvaWQgZGVjb2RlX3BhY2tlZF9jb29yZGluYXRlc19hbmRfd2VpZ2h0KFUzMiBwYWNr ZWQsIE91dCogdjAsIE91dCogdjEsIE8KKyAgICAgICAgIH0KKyAgICAgfQorIAorKyNlbGlmIGRl ZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKworKyAgICAvLyBIZWxwZXI6 IHNjYWxhciB1aW50MzJfdCAtPiAxNi1ieXRlIHZlY3RvciB3aXRoIHggaW4gbG93IDMyIGJpdHMs IHplcm8gZWxzZXdoZXJlLgorKyAgICAvLyBFcXVpdmFsZW50IG9mIHg4NidzIF9tbV9jdnRzaTMy X3NpMTI4LgorKyAgICBzdGF0aWMgaW5saW5lIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdnN4X2N2 dF91MzJfdG9fdmVjKHVpbnQzMl90IHgpIHsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGlu dCB2ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGludCl7eCwgMCwgMCwgMH07CisrICAgICAgICByZXR1 cm4gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdjsKKysgICAgfQorKworKyAgICAvLyBIZWxwZXI6 IFBQQzY0IFZTWCBlcXVpdmFsZW50IG9mIHg4NidzIF9tbV9tYWRkdWJzX2VwaTE2LiBNdWx0aXBs aWVzIHBhaXJzIG9mCisrICAgIC8vICh1bnNpZ25lZCBieXRlLCBzaWduZWQgYnl0ZSkgYW5kIGFk ZHMgYWRqYWNlbnQgcGFpcnMgdG8gcHJvZHVjZSAxNi1iaXQgc2lnbmVkCisrICAgIC8vIHZhbHVl cywgc2F0dXJhdGluZyB0byBpbnQxNi4gSW1wbGVtZW50YXRpb24gdHJhbnNjcmliZXMgdGhlIEdD QyBwcGNfd3JhcHBlcnMKKysgICAgLy8gdG1taW50cmluLmggc2VxdWVuY2UgZm9yIGVuZGlhbm5l c3MgY29ycmVjdG5lc3Mgb24gTEUgUFBDNjQuCisrICAgIHN0YXRpYyBpbmxpbmUgX192ZWN0b3Ig c2lnbmVkIHNob3J0IHZzeF9tYWRkdWJzX2VwaTE2KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgQSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBCKSB7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQg c2hvcnQgX19mZiA9IHZlY19zcGxhdHMoKHNpZ25lZCBzaG9ydCkweDAwRkYpOworKyAgICAgICAg X192ZWN0b3Igc2lnbmVkIHNob3J0IF9fQyA9IHZlY19hbmQodmVjX3VucGFja2goKF9fdmVjdG9y IHNpZ25lZCBjaGFyKUEpLCBfX2ZmKTsKKysgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBf X0QgPSB2ZWNfYW5kKHZlY191bnBhY2tsKChfX3ZlY3RvciBzaWduZWQgY2hhcilBKSwgX19mZik7 CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgX19FID0gdmVjX3VucGFja2goQik7Cisr ICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgX19GID0gdmVjX3VucGFja2woQik7CisrICAg ICAgICBfX0MgPSB2ZWNfbXVsKF9fQywgX19FKTsKKysgICAgICAgIF9fRCA9IHZlY19tdWwoX19E LCBfX0YpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfX29kZHMgID0g KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeworKyAgICAgICAgICAgIDAsMSwgNCw1LCA4LDksIDEy LDEzLCAgMTYsMTcsIDIwLDIxLCAyNCwyNSwgMjgsMjkKKysgICAgICAgIH07CisrICAgICAgICBj b25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZXZlbnMgPSAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcil7CisrICAgICAgICAgICAgMiwzLCA2LDcsIDEwLDExLCAxNCwxNSwgIDE4LDE5LCAyMiwy MywgMjYsMjcsIDMwLDMxCisrICAgICAgICB9OworKyAgICAgICAgX19FID0gKF9fdmVjdG9yIHNp Z25lZCBzaG9ydCl2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilfX0MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKV9fRCwgX19vZGRzKTsKKysgICAgICAgIF9fRiA9IChfX3ZlY3RvciBzaWduZWQgc2hv cnQpdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpX19DLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilf X0QsIF9fZXZlbnMpOworKyAgICAgICAgcmV0dXJuIHZlY19hZGRzKF9fRSwgX19GKTsKKysgICAg fQorKworKyAgICAvKm5vdCBzdGF0aWMqLyBpbmxpbmUKKysgICAgdm9pZCBTMzJfYWxwaGFfRDMy X2ZpbHRlcl9EWChjb25zdCBTa0JpdG1hcFByb2NTdGF0ZSYgcywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogeHksIGludCBjb3VudCwgdWludDMyX3Qq IGNvbG9ycykgeworKyAgICAgICAgU2tBU1NFUlQoY291bnQgPiAwICYmIGNvbG9ycyAhPSBudWxs cHRyKTsKKysgICAgICAgIFNrQVNTRVJUKHMuZkJpbGVycCk7CisrICAgICAgICBTa0FTU0VSVChr TjMyX1NrQ29sb3JUeXBlID09IHMuZlBpeG1hcC5jb2xvclR5cGUoKSk7CisrICAgICAgICBTa0FT U0VSVChzLmZBbHBoYVNjYWxlIDw9IDI1Nik7CisrCisrICAgICAgICAvLyBpbnRlcnBvbGF0ZV9p bl94KCkgaXMgdGhlIGNydXggb2YgdGhlIGltcGxlbWVudGF0aW9uLCBpbnRlcnBvbGF0aW5nIGlu IFgKKysgICAgICAgIC8vIGZvciB1cCB0byB0d28gb3V0cHV0IHBpeGVscyAoQSBhbmQgQikgdXNp bmcgdnN4X21hZGR1YnNfZXBpMTYoKS4KKysgICAgICAgIGF1dG8gaW50ZXJwb2xhdGVfaW5feCA9 IFtdKHVpbnQzMl90IEEwLCB1aW50MzJfdCBBMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IEIwLCB1aW50MzJfdCBCMSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIGludGVybGFjZWRfeF93ZWlnaHRz KSB7CisrICAgICAgICAgICAgLy8gX21tX3VucGFja2xvX2VwaTgoX21tX2N2dHNpMzJfc2kxMjgo QTApLCBfbW1fY3Z0c2kzMl9zaTEyOChBMSkpCisrICAgICAgICAgICAgLy8gPSB2ZWNfbWVyZ2Vo IG9uIHVjaGFyLCBzaW5jZSB0aGUgaW5wdXQgdmVjdG9ycyBoYXZlIG9ubHkgdGhlIGxvdyAzMiBi aXRzIHNldC4KKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGludGVybGFjZWRf QSA9IHZlY19tZXJnZWgodnN4X2N2dF91MzJfdG9fdmVjKEEwKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzeF9jdnRfdTMy X3RvX3ZlYyhBMSkpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgaW50ZXJs YWNlZF9CID0gdmVjX21lcmdlaCh2c3hfY3Z0X3UzMl90b192ZWMoQjApLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnN4X2N2 dF91MzJfdG9fdmVjKEIxKSk7CisrICAgICAgICAgICAgLy8gX21tX3VucGFja2xvX2VwaTY0ID0g dmVjX21lcmdlaCBvbiBsb25nIGxvbmcuCisrICAgICAgICAgICAgX192ZWN0b3IgbG9uZyBsb25n IGxvNjQgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciBsb25nIGxvbmcpaW50ZXJsYWNlZF9BLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3Ig bG9uZyBsb25nKWludGVybGFjZWRfQik7CisrICAgICAgICAgICAgcmV0dXJuIHZzeF9tYWRkdWJz X2VwaTE2KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWxvNjQsIGludGVybGFjZWRfeF93ZWlnaHRz KTsKKysgICAgICAgIH07CisrCisrICAgICAgICAvLyBJbnRlcnBvbGF0ZSB7QTAuLkEzfSAtLT4g b3V0cHV0IHBpeGVsIEEsIGFuZCB7QjAuLkIzfSAtLT4gb3V0cHV0IHBpeGVsIEIuCisrICAgICAg ICAvLyBSZXR1cm5zIHR3byBwaXhlbHMsIHdpdGggZWFjaCBjb2xvciBjaGFubmVsIGluIGEgMTYt Yml0IGxhbmUgb2YgdGhlIHJlc3VsdC4KKysgICAgICAgIGF1dG8gaW50ZXJwb2xhdGVfaW5feF9h bmRfeSA9IFsmXSh1aW50MzJfdCBBMCwgdWludDMyX3QgQTEsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQTIsIHVpbnQzMl90IEEzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEIwLCB1aW50MzJf dCBCMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBCMiwgdWludDMyX3QgQjMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX192ZWN0b3Igc2lnbmVkIGNoYXIgaW50ZXJsYWNlZF94X3dlaWdodHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHd5KSB7CisrICAgICAgICAg ICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHRvcCA9IGludGVycG9sYXRlX2luX3goQTAsQTEsIEIw LEIxLCBpbnRlcmxhY2VkX3hfd2VpZ2h0cyk7CisrICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVk IHNob3J0IGJvdCA9IGludGVycG9sYXRlX2luX3goQTIsQTMsIEIyLEIzLCBpbnRlcmxhY2VkX3hf d2VpZ2h0cyk7CisrCisrICAgICAgICAgICAgLy8gMTYqdG9wICsgKGJvdC10b3ApKnd5LCBtaXJy b3JpbmcgdGhlIFNTRTIgZm9ybSAoc2F2ZXMgb25lIG11bHRpcGx5IHZzLiB0aGUKKysgICAgICAg ICAgICAvLyBzdHJhaWdodGZvcndhcmQgdG9wKigxNi13eSkgKyBib3Qqd3kpLgorKyAgICAgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hv cnQpNCk7CisrICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHd5X3YgPSB2ZWNfc3Bs YXRzKChzaWduZWQgc2hvcnQpd3kpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9y dCBweCA9IHZlY19hZGQodmVjX3NsKHRvcCwgdjQpLCB2ZWNfbXVsKHZlY19zdWIoYm90LCB0b3Ap LCB3eV92KSk7CisrCisrICAgICAgICAgICAgLy8gU2NhbGUgZG93biBieSB0b3RhbCBtYXggd2Vp Z2h0IDE2eDE2ID0gMjU2LgorKyAgICAgICAgICAgIHB4ID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9y dCl2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXB4LCB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBzaG9ydCk4KSk7CisrCisrICAgICAgICAgICAgLy8gU2NhbGUgYnkgYWxwaGEgaWYgbmVlZGVk LgorKyAgICAgICAgICAgIGlmIChzLmZBbHBoYVNjYWxlIDwgMjU2KSB7CisrICAgICAgICAgICAg ICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBzY2FsZV92ID0gdmVjX3NwbGF0cygoc2lnbmVkIHNo b3J0KXMuZkFscGhhU2NhbGUpOworKyAgICAgICAgICAgICAgICBweCA9IChfX3ZlY3RvciBzaWdu ZWQgc2hvcnQpdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbXVsKHB4LCBzY2Fs ZV92KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KSk7CisrICAgICAgICAgICAgfQorKyAgICAg ICAgICAgIHJldHVybiBweDsKKysgICAgICAgIH07CisrCisrICAgICAgICAvLyBXZSdyZSBpbiBf RFggbW9kZSBoZXJlLCBzbyB3ZSdyZSBvbmx5IHZhcnlpbmcgaW4gWC4KKysgICAgICAgIC8vIFRo YXQgbWVhbnMgdGhlIGZpcnN0IGVudHJ5IG9mIHh5IGlzIG91ciBjb25zdGFudCBwYWlyIG9mIFkg Y29vcmRpbmF0ZXMgYW5kIHdlaWdodCBpbiBZLgorKyAgICAgICAgaW50IHkwLCB5MSwgd3k7Cisr ICAgICAgICBkZWNvZGVfcGFja2VkX2Nvb3JkaW5hdGVzX2FuZF93ZWlnaHQoKnh5KyssICZ5MCwg JnkxLCAmd3kpOworKworKyAgICAgICAgYXV0byByb3cwID0gKGNvbnN0IHVpbnQzMl90KikoKGNv bnN0IHVpbnQ4X3QqKXMuZlBpeG1hcC5hZGRyKCkgKyB5MCAqIHMuZlBpeG1hcC5yb3dCeXRlcygp KSwKKysgICAgICAgICAgICAgcm93MSA9IChjb25zdCB1aW50MzJfdCopKChjb25zdCB1aW50OF90 KilzLmZQaXhtYXAuYWRkcigpICsgeTEgKiBzLmZQaXhtYXAucm93Qnl0ZXMoKSk7CisrCisrICAg ICAgICB3aGlsZSAoY291bnQgPj0gNCkgeworKyAgICAgICAgICAgIC8vIFdlIGNhbiByZWFsbHkg Z2V0IGdvaW5nLCBsb2FkaW5nIDQgWC1wYWlycyBhdCBhIHRpbWUgdG8gcHJvZHVjZSA0IG91dHB1 dCBwaXhlbHMuCisrICAgICAgICAgICAgaW50IHgwWzRdLAorKyAgICAgICAgICAgICAgICB4MVs0 XTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgd3g7CisrCisrICAgICAgICAg ICAgLy8gZGVjb2RlX3BhY2tlZF9jb29yZGluYXRlc19hbmRfd2VpZ2h0KCksIDR4LgorKyAgICAg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBwYWNrZWQgPSAoX192ZWN0b3IgdW5zaWduZWQg aW50KXZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopeHkpOworKyAgICAgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIGludCB4MF92ID0gdmVjX3NyKHBhY2tlZCwgdmVjX3NwbGF0cygxOHUp KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgeDFfdiA9IHZlY19hbmQocGFj a2VkLCB2ZWNfc3BsYXRzKDB4M2ZmZnUpKTsKKysgICAgICAgICAgICB2ZWNfeHN0KChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKXgwX3YsIDAsICh1bnNpZ25lZCBjaGFyKil4MCk7CisrICAgICAgICAg ICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcil4MV92LCAwLCAodW5zaWduZWQgY2hh ciopeDEpOworKyAgICAgICAgICAgIHd4ID0gdmVjX2FuZCh2ZWNfc3IocGFja2VkLCB2ZWNfc3Bs YXRzKDE0dSkpLCB2ZWNfc3BsYXRzKDB4ZnUpKTsgIC8vIFswLDE1XQorKworKyAgICAgICAgICAg IC8vIFNwbGF0IGVhY2ggeCB3ZWlnaHQgNHggKGZvciBlYWNoIGNvbG9yIGNoYW5uZWwpIGFzIHdy IGZvciBwaXhlbHMgb24gdGhlIHJpZ2h0IGF0IHgxLAorKyAgICAgICAgICAgIC8vIGFuZCBzaXh0 ZWVuIG1pbnVzIHRoYXQgYXMgd2wgZm9yIHBpeGVscyBvbiB0aGUgbGVmdCBhdCB4MC4KKysgICAg ICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHdyX21hc2sgPSAoX192ZWN0b3Ig dW5zaWduZWQgY2hhcil7CisrICAgICAgICAgICAgICAgIDAsMCwwLDAsIDQsNCw0LDQsIDgsOCw4 LDgsIDEyLDEyLDEyLDEyCisrICAgICAgICAgICAgfTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIHdyID0gdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpd3gsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0 b3IgdW5zaWduZWQgY2hhcil3eCwgd3JfbWFzayk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciB3bCA9IHZlY19zdWIodmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxNiksIHdy KTsKKysKKysgICAgICAgICAgICAvLyBJbnRlcmxhY2Ugd2wgYW5kIHdyIGZvciB2c3hfbWFkZHVi c19lcGkxNigpLgorKyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIGludGVybGFjZWRf eF93ZWlnaHRzX0FCID0gKF9fdmVjdG9yIHNpZ25lZCBjaGFyKXZlY19tZXJnZWgod2wsIHdyKTsK KysgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0c19D RCA9IChfX3ZlY3RvciBzaWduZWQgY2hhcil2ZWNfbWVyZ2VsKHdsLCB3cik7CisrCisrICAgICAg ICAgICAgZW51bSB7IEEsQixDLEQgfTsKKysKKysgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQg c2hvcnQgQUIgPSBpbnRlcnBvbGF0ZV9pbl94X2FuZF95KAorKyAgICAgICAgICAgICAgICAgICAg cm93MFt4MFtBXV0sIHJvdzBbeDFbQV1dLCByb3cxW3gwW0FdXSwgcm93MVt4MVtBXV0sCisrICAg ICAgICAgICAgICAgICAgICByb3cwW3gwW0JdXSwgcm93MFt4MVtCXV0sIHJvdzFbeDBbQl1dLCBy b3cxW3gxW0JdXSwKKysgICAgICAgICAgICAgICAgICAgIGludGVybGFjZWRfeF93ZWlnaHRzX0FC LCB3eSk7CisrICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IENEID0gaW50ZXJwb2xh dGVfaW5feF9hbmRfeSgKKysgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBbQ11dLCByb3cwW3gx W0NdXSwgcm93MVt4MFtDXV0sIHJvdzFbeDFbQ11dLAorKyAgICAgICAgICAgICAgICAgICAgcm93 MFt4MFtEXV0sIHJvdzBbeDFbRF1dLCByb3cxW3gwW0RdXSwgcm93MVt4MVtEXV0sCisrICAgICAg ICAgICAgICAgICAgICBpbnRlcmxhY2VkX3hfd2VpZ2h0c19DRCwgd3kpOworKworKyAgICAgICAg ICAgIC8vIFBhY2sgMTYtYml0IHNpZ25lZCAtPiA4LWJpdCB1bnNpZ25lZCB3aXRoIHNhdHVyYXRp b24sIHdyaXRlIDQgcGl4ZWxzLgorKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg cGFja2VkX291dCA9IHZlY19wYWNrc3UoQUIsIENEKTsKKysgICAgICAgICAgICB2ZWNfeHN0KHBh Y2tlZF9vdXQsIDAsICh1bnNpZ25lZCBjaGFyKiljb2xvcnMpOworKyAgICAgICAgICAgIHh5ICAg ICArPSA0OworKyAgICAgICAgICAgIGNvbG9ycyArPSA0OworKyAgICAgICAgICAgIGNvdW50ICAt PSA0OworKyAgICAgICAgfQorKworKyAgICAgICAgd2hpbGUgKGNvdW50IC0tPiAwKSB7CisrICAg ICAgICAgICAgLy8gU2FtZSBmbG93IGFzIHRoZSBjb3VudCA+PSA0IGxvb3AsIGJ1dCB3cml0aW5n IG9uZSBwaXhlbC4KKysgICAgICAgICAgICBpbnQgeDAsIHgxLCB3eDsKKysgICAgICAgICAgICBk ZWNvZGVfcGFja2VkX2Nvb3JkaW5hdGVzX2FuZF93ZWlnaHQoKnh5KyssICZ4MCwgJngxLCAmd3gp OworKworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgd3IgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBjaGFyKXd4KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHdsID0gdmVjX3N1Yih2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTE2KSwgd3IpOworKyAgICAg ICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIGludGVybGFjZWRfeF93ZWlnaHRzID0gKF9fdmVj dG9yIHNpZ25lZCBjaGFyKXZlY19tZXJnZWgod2wsIHdyKTsKKysKKysgICAgICAgICAgICBfX3Zl Y3RvciBzaWduZWQgc2hvcnQgQXYgPSBpbnRlcnBvbGF0ZV9pbl94X2FuZF95KAorKyAgICAgICAg ICAgICAgICAgICAgcm93MFt4MF0sIHJvdzBbeDFdLCByb3cxW3gwXSwgcm93MVt4MV0sCisrICAg ICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgaW50ZXJs YWNlZF94X3dlaWdodHMsIHd5KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHBhY2tlZF9vdXQgPSB2ZWNfcGFja3N1KEF2LAorKyAgICAgICAgICAgICAgICAgICAgKF9fdmVj dG9yIHNpZ25lZCBzaG9ydCkoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MH0pOworKyAgICAgICAg ICAgICpjb2xvcnMrKyA9ICgoX192ZWN0b3IgdW5zaWduZWQgaW50KXBhY2tlZF9vdXQpWzBdOwor KyAgICAgICAgfQorKyAgICB9CisrCisgI2VsaWYgU0tfQ1BVX0xTWF9MRVZFTCA+PSBTS19DUFVf TFNYX0xFVkVMX0xBU1gKKyAgICAgLypub3Qgc3RhdGljKi8gaW5saW5lCisgICAgIHZvaWQgUzMy X2FscGhhX0QzMl9maWx0ZXJfRFgoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsCitkaWZmIC0t Z2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JsaXRSb3dfb3B0cy5oIGIvZ2Z4L3NraWEv c2tpYS9zcmMvb3B0cy9Ta0JsaXRSb3dfb3B0cy5oCitpbmRleCBkMWRlNTY4MWE3MmUuLmQwMzkw OGEwM2EzMiAxMDA2NDQKKy0tLSBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tCbGl0Um93X29w dHMuaAorKysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JsaXRSb3dfb3B0cy5oCitAQCAt NjgsNiArNjgsNDMgQEAKKyAgICAgfQorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKFNLX0NQVV9Q UEMpICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysKKysg ICAgLy8gTmF0aXZlIFZTWC9BbHRpVmVjIHBvcnQgb2YgU2tQTVNyY092ZXJfU1NFMi4KKysgICAg Ly8gU2FtZSBhbGdvcml0aG06IHNyYyArIGRzdCooMjU2LXNyY0FscGhhKS8yNTYuCisrICAgIHN0 YXRpYyBpbmxpbmUgX192ZWN0b3IgdW5zaWduZWQgY2hhciBTa1BNU3JjT3Zlcl9WU1goX192ZWN0 b3IgdW5zaWduZWQgY2hhciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBkc3QpIHsKKysg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBzcmNfdTMyID0gKF9fdmVjdG9yIHVuc2lnbmVk IGludClzcmM7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZHN0X3UzMiA9IChfX3Zl Y3RvciB1bnNpZ25lZCBpbnQpZHN0OworKworKyAgICAgICAgLy8gc2NhbGUgPSAyNTYgLSAoc3Jj ID4+IDI0KSAgKHBlciAzMi1iaXQgbGFuZSkKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGlu dCBzY2FsZSA9IHZlY19zdWIodmVjX3NwbGF0cygodW5zaWduZWQgaW50KTI1NiksCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcihzcmNfdTMyLCB2 ZWNfc3BsYXRzKDI0dSkpKTsKKysgICAgICAgIC8vIHNjYWxlX3gyID0gKHNjYWxlIDw8IDE2KSB8 IHNjYWxlICAtLSBzcGxhdCB0aGUgc2NhbGUgaW50byBib3RoIDE2LWJpdCBoYWx2ZXMKKysgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBzY2FsZV94MiA9IHZlY19vcih2ZWNfc2woc2NhbGUs IHZlY19zcGxhdHMoMTZ1KSksIHNjYWxlKTsKKysKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVu c2lnbmVkIGludCByYl9tYXNrID0gdmVjX3NwbGF0cygweDAwRkYwMEZGdSk7CisrCisrICAgICAg ICAvLyByYiA9IChkc3QgJiAweDAwRkYwMEZGKSAqIHNjYWxlX3gyID4+IDggICAoUiBhbmQgQiBj aGFubmVscyBpbiAxNi1iaXQgbGFuZXMpCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCByYiA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfYW5kKHJiX21hc2ssIGRzdF91MzIp OworKyAgICAgICAgcmIgPSB2ZWNfbXVsKHJiLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpc2Nh bGVfeDIpOworKyAgICAgICAgcmIgPSB2ZWNfc3IocmIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTgpKTsKKysKKysgICAgICAgIC8vIGdhID0gKGRzdCA+PiA4KSAqIHNjYWxlX3gyICB0aGVu IG1hc2sgb3V0IHRoZSByYiBjaGFubmVscworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgZ2EgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWRzdF91MzIsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBzaG9ydCk4KSk7CisrICAgICAgICBnYSA9IHZlY19tdWwoZ2EsIChfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydClzY2FsZV94Mik7CisrICAgICAgICAvLyBhbmRjKGdhLCByYl9tYXNrKSA9IGdhICYg fnJiX21hc2sgIC0tIGtlZXAgb25seSBHIGFuZCBBIGNoYW5uZWxzIGluIDE2LWJpdCBsYW5lcwor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGdhX3UzMiA9IHZlY19hbmRjKChfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQpZ2EsIHJiX21hc2spOworKworKyAgICAgICAgLy8gcmVzdWx0ID0gc3Jj ICsgYWRkc19lcHU4KHJiIHwgZ2EpCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIG1l cmdlZCA9CisrICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX29yKChfX3Zl Y3RvciB1bnNpZ25lZCBpbnQpcmIsIGdhX3UzMik7CisrICAgICAgICByZXR1cm4gdmVjX2FkZHMo c3JjLCBtZXJnZWQpOworKyAgICB9CisrI2VuZGlmCisrCisgI2lmIFNLX0NQVV9TU0VfTEVWRUwg Pj0gU0tfQ1BVX1NTRV9MRVZFTF9TU0UyCisgICAgICNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyAK K0BAIC0xNzYsNiArMjEzLDE3IEBAIGlubGluZSB2b2lkIGJsaXRfcm93X3MzMmFfb3BhcXVlKFNr UE1Db2xvciogZHN0LCBjb25zdCBTa1BNQ29sb3IqIHNyYywgaW50IGxlbiwKKyAgICAgfQorICNl bmRpZgorIAorKyNpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKKysg ICAgd2hpbGUgKGxlbiA+PSA0KSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHZz cmMgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYyk7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHZkc3QgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIq KWRzdCk7CisrICAgICAgICB2ZWNfeHN0KFNrUE1TcmNPdmVyX1ZTWCh2c3JjLCB2ZHN0KSwgMCwg KHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICBzcmMgKz0gNDsKKysgICAgICAgIGRzdCAr PSA0OworKyAgICAgICAgbGVuIC09IDQ7CisrICAgIH0KKysjZW5kaWYKKysKKyAjaWYgU0tfQ1BV X1NTRV9MRVZFTCA+PSBTS19DUFVfU1NFX0xFVkVMX1NTRTIKKyAgICAgd2hpbGUgKGxlbiA+PSA0 KSB7CisgICAgICAgICBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpKilkc3QsIFNrUE1TcmNPdmVy X1NTRTIoX21tX2xvYWR1X3NpMTI4KChjb25zdCBfX20xMjhpKilzcmMpLAorZGlmZiAtLWdpdCBh L2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tSYXN0ZXJQaXBlbGluZV9vcHRzLmggYi9nZngvc2tp YS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxpbmVfb3B0cy5oCitpbmRleCA2OTViNzE0MzRm OGMuLmUyYWYwYjk0ZjM5MiAxMDA2NDQKKy0tLSBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tS YXN0ZXJQaXBlbGluZV9vcHRzLmgKKysrKyBiL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tSYXN0 ZXJQaXBlbGluZV9vcHRzLmgKK0BAIC04Nyw2ICs4Nyw4IEBAIHVzaW5nIE5vQ3R4ID0gY29uc3Qg dm9pZCo7CisgICAgICNkZWZpbmUgU0tSUF9DUFVfU0NBTEFSCisgI2VsaWYgZGVmaW5lZChTS19B Uk1fSEFTX05FT04pCisgICAgICNkZWZpbmUgU0tSUF9DUFVfTkVPTgorKyNlbGlmIGRlZmluZWQo U0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICAjZGVmaW5lIFNLUlBfQ1BVX1ZT WAorICNlbGlmIFNLX0NQVV9TU0VfTEVWRUwgPj0gU0tfQ1BVX1NTRV9MRVZFTF9TS1gKKyAgICAg I2RlZmluZSBTS1JQX0NQVV9TS1gKKyAjZWxpZiBTS19DUFVfU1NFX0xFVkVMID49IFNLX0NQVV9T U0VfTEVWRUxfQVZYMgorQEAgLTEwOSw2ICsxMTEsOCBAQCB1c2luZyBOb0N0eCA9IGNvbnN0IHZv aWQqOworICAgICAjaW5jbHVkZSA8bWF0aC5oPgorICNlbGlmIGRlZmluZWQoU0tSUF9DUFVfTkVP TikKKyAgICAgI2luY2x1ZGUgPGFybV9uZW9uLmg+CisrI2VsaWYgZGVmaW5lZChTS1JQX0NQVV9W U1gpCisrICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+CisgI2VsaWYgZGVmaW5lZChTS1JQX0NQVV9M QVNYKQorICAgICAjaW5jbHVkZSA8bGFzeGludHJpbi5oPgorICAgICAjaW5jbHVkZSA8bHN4aW50 cmluLmg+CitAQCAtMzM3LDYgKzM0MSwyMzkgQEAgbmFtZXNwYWNlIFNLX09QVFNfTlMgeworICAg ICAgICAgdnN0NHFfZjMyKHB0ciwgKGZsb2F0MzJ4NHg0X3R7e3IsZyxiLGF9fSkpOworICAgICB9 CisgCisrI2VsaWYgZGVmaW5lZChTS1JQX0NQVV9WU1gpCisrICAgIC8vIFJldXNlIHRoZSBmaWxl LXNjb3BlIFZlYzxOLFQ+IGRlZmluZWQgYWJvdmUuIEl0IGFscmVhZHkgaGFuZGxlcyB0aGUKKysg ICAgLy8gR0NDLXZzLUNsYW5nIGRpdmVyZ2VuY2UgKGV4dF92ZWN0b3JfdHlwZSBvbiBDbGFuZzsg dmVjdG9yX3NpemUgdmlhCisrICAgIC8vIFZlY0hlbHBlciBvbiBHQ0MpIGFuZCBwcm9kdWNlcyB0 aGUgcmlnaHQgdmVjdG9yLXJlZ2lzdGVyLXBhc3NpbmcgQUJJCisrICAgIC8vIG9uIFBQQzY0LiBU aGUgdmVjXyogaW50cmluc2ljcyBpbiA8YWx0aXZlYy5oPiBhY2NlcHQgZWl0aGVyIGZvcm0uCisr ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyBWID0gVmVjPDQsIFQ+OworKyAgICB1c2lu ZyBGICAgPSBWPGZsb2F0ICAgPjsKKysgICAgdXNpbmcgSTMyID0gVjwgaW50MzJfdD47CisrICAg IHVzaW5nIFU2NCA9IFY8dWludDY0X3Q+OworKyAgICB1c2luZyBVMzIgPSBWPHVpbnQzMl90PjsK KysgICAgdXNpbmcgVTE2ID0gVjx1aW50MTZfdD47CisrICAgIHVzaW5nIFU4ICA9IFY8dWludDhf dCA+OworKworKyAgICAvLyBXZSBwb2x5ZmlsbCBhIGZldyByb3V0aW5lcyB0aGF0IENsYW5nIGRv ZXNuJ3QgYnVpbGQgaW50byBleHRfdmVjdG9yX3R5cGVzLgorKyAgICBTSSBGICAgbWluKEYgYSwg RiBiKSAgICAgeyByZXR1cm4gdmVjX21pbihhLGIpOyB9CisrICAgIFNJIEkzMiBtaW4oSTMyIGEs IEkzMiBiKSB7IHJldHVybiB2ZWNfbWluKGEsYik7IH0KKysgICAgU0kgVTMyIG1pbihVMzIgYSwg VTMyIGIpIHsgcmV0dXJuIHZlY19taW4oYSxiKTsgfQorKyAgICBTSSBGICAgbWF4KEYgYSwgRiBi KSAgICAgeyByZXR1cm4gdmVjX21heChhLGIpOyB9CisrICAgIFNJIEkzMiBtYXgoSTMyIGEsIEkz MiBiKSB7IHJldHVybiB2ZWNfbWF4KGEsYik7IH0KKysgICAgU0kgVTMyIG1heChVMzIgYSwgVTMy IGIpIHsgcmV0dXJuIHZlY19tYXgoYSxiKTsgfQorKworKyAgICBTSSBGICAgYWJzXyAgKEYgdikg ICB7IHJldHVybiB2ZWNfYWJzKHYpOyB9CisrICAgIFNJIEkzMiBhYnNfICAoSTMyIHYpIHsgcmV0 dXJuIHZlY19hYnModik7IH0KKysgICAgU0kgRiAgIHJjcF9hcHByb3goRiB2KSB7IHJldHVybiB2 ZWNfcmUodik7IH0KKysgICAgU0kgRiAgIHJjcF9wcmVjaXNlIChGIHYpIHsgRiBlID0gcmNwX2Fw cHJveCh2KTsgcmV0dXJuIGUgKiAoMi4wZiAtIHYgKiBlKTsgfQorKyAgICBTSSBGICAgcnNxcnRf YXBwcm94IChGIHYpICAgeyByZXR1cm4gdmVjX3JzcXJ0ZSh2KTsgfQorKworKyAgICBTSSBVMTYg cGFjayhVMzIgdikgICAgICAgeyByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IodiwgVTE2 KTsgfQorKyAgICBTSSBVOCAgcGFjayhVMTYgdikgICAgICAgeyByZXR1cm4gX19idWlsdGluX2Nv bnZlcnR2ZWN0b3IodiwgIFU4KTsgfQorKworKyAgICBTSSBGIGlmX3RoZW5fZWxzZShJMzIgYywg RiB0LCBGIGUpIHsKKysgICAgICAgIHJldHVybiB2ZWNfb3IoKF9fdmVjdG9yIGZsb2F0KXZlY19h bmQoKF9fdmVjdG9yIGZsb2F0KWMsIChfX3ZlY3RvciBmbG9hdCl0KSwgKF9fdmVjdG9yIGZsb2F0 KXZlY19hbmRjKChfX3ZlY3RvciBmbG9hdCllLCAoX192ZWN0b3IgZmxvYXQpYykpOworKyAgICB9 CisrICAgIFNJIEkzMiBpZl90aGVuX2Vsc2UoSTMyIGMsIEkzMiB0LCBJMzIgZSkgeworKyAgICAg ICAgcmV0dXJuIChJMzIpdmVjX29yKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX2FuZCgoX192 ZWN0b3IgdW5zaWduZWQgaW50KWMsIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpdCksIChfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQpdmVjX2FuZGMoKF9fdmVjdG9yIHVuc2lnbmVkIGludCllLCAoX192ZWN0 b3IgdW5zaWduZWQgaW50KWMpKTsKKysgICAgfQorKworKyAgICAvLyBJbiBib3RoIEFsdGlWZWMg YW5kIFNTRSB0aGVyZSBpcyBubyBob3Jpem9udGFsIGVsZW1lbnQgY29tcGFyZSwgdW5saWtlIEFS TS4gIEZhbGwgYmFjayB0byBzY2FsYXIgb3BlcmF0aW9ucyBoZXJlLi4uCisrICAgIFNJIGJvb2wg YW55KEkzMiBjKSB7CisrICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAwKSAhPSAwKSBy ZXR1cm4gMTsKKysgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDEpICE9IDApIHJldHVy biAxOworKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMikgIT0gMCkgcmV0dXJuIDE7 CisrICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAzKSAhPSAwKSByZXR1cm4gMTsKKysg ICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIFNJIGJvb2wgYWxsKEkzMiBjKSB7CisrICAg ICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAwKSA9PSAwKSByZXR1cm4gMDsKKysgICAgICAg IGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDEpID09IDApIHJldHVybiAwOworKyAgICAgICAgaWYg KHZlY19leHRyYWN0KChVMzIpYywgMikgPT0gMCkgcmV0dXJuIDA7CisrICAgICAgICBpZiAodmVj X2V4dHJhY3QoKFUzMiljLCAzKSA9PSAwKSByZXR1cm4gMDsKKysgICAgICAgIHJldHVybiAxOwor KyAgICB9CisrCisrICAgIFNJIEYgICAgIG1hZChGIGYsIEYgbSwgRiBhKSB7IHJldHVybiB2ZWNf bWFkZChmLG0sYSk7IH0KKysgICAgU0kgRiAgICBubWFkKEYgZiwgRiBtLCBGIGEpIHsgcmV0dXJu IHZlY19ubXN1YihmLG0sYSk7IH0KKysgICAgU0kgRiAgZmxvb3JfKEYgdikgeyByZXR1cm4gdmVj X2Zsb29yKHYpOyB9CisrICAgIFNJIEYgICBjZWlsXyhGIHYpIHsgcmV0dXJuIHZlY19jZWlsKHYp OyB9CisrICAgIFNJIEYgICBzcXJ0XyhGIHYpIHsgcmV0dXJuIHZlY19zcXJ0KHYpOyB9CisrICAg IFNJIEkzMiBpcm91bmQoRiB2KSB7IHJldHVybiB2ZWNfY3RzKChfX3ZlY3RvciBmbG9hdCl2ZWNf cmludCh2KSwgMCk7IH0KKysgICAgU0kgVTMyIHJvdW5kKEYgdikgIHsgcmV0dXJuIHZlY19jdHUo KF9fdmVjdG9yIGZsb2F0KXZlY19yaW50KHYpLCAwKTsgfQorKyAgICBTSSBVMzIgcm91bmQoRiB2 LCBGIHNjYWxlKSB7IHJldHVybiAoVTMyKXZlY19jdHMoKF9fdmVjdG9yIGZsb2F0KXZlY19yaW50 KHYqc2NhbGUpLCAwKTsgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgU0kg VjxUPiBnYXRoZXIoY29uc3QgVCogcCwgVTMyIGl4KSB7CisrICAgICAgICByZXR1cm4gVjxUPntw W2l4WzBdXSwgcFtpeFsxXV0sIHBbaXhbMl1dLCBwW2l4WzNdXX07CisrICAgIH0KKysgICAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIFNJIFY8VD4gZ2F0aGVyX3VuYWxpZ25lZChjb25zdCBU KiBwdHIsIFUzMiBpeCkgeworKyAgICAgICAgLy8gVGhpcyB0ZWxscyB0aGUgY29tcGlsZXIgcHRy IG1pZ2h0IG5vdCBiZSBhbGlnbmVkIGFwcHJvcHJpYXRlbHksIHNvCisrICAgICAgICAvLyBpdCBn ZW5lcmF0ZXMgYmV0dGVyIGFzc2VtYmx5LgorKyAgICAgICAgdHlwZWRlZiBUIF9fYXR0cmlidXRl X18gKChhbGlnbmVkICgxKSkpIHVuYWxpZ25lZF9wdHI7CisrICAgICAgICBjb25zdCB1bmFsaWdu ZWRfcHRyKiB1cHRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5hbGlnbmVkX3B0cio+KHB0cik7Cisr ICAgICAgICByZXR1cm4gVjxUPnt1cHRyW2l4WzBdXSwgdXB0cltpeFsxXV0sIHVwdHJbaXhbMl1d LCB1cHRyW2l4WzNdXX07CisrICAgIH0KKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFYsIHR5cGVu YW1lIFM+CisrICAgIFNJIHZvaWQgc2NhdHRlcl9tYXNrZWQoViBzcmMsIFMqIGRzdCwgVTMyIGl4 LCBJMzIgbWFzaykgeworKyAgICAgICAgViBiZWZvcmUgPSBnYXRoZXIoZHN0LCBpeCk7CisrICAg ICAgICBWIGFmdGVyID0gaWZfdGhlbl9lbHNlKG1hc2ssIHNyYywgYmVmb3JlKTsKKysgICAgICAg IGRzdFtpeFswXV0gPSBhZnRlclswXTsKKysgICAgICAgIGRzdFtpeFsxXV0gPSBhZnRlclsxXTsK KysgICAgICAgIGRzdFtpeFsyXV0gPSBhZnRlclsyXTsKKysgICAgICAgIGRzdFtpeFszXV0gPSBh ZnRlclszXTsKKysgICAgfQorKworKyAgICAvLyBOYXRpdmUgVlNYL0FsdGlWZWMgcG9ydHMgb2Yg dGhlIGxvYWQyL3N0b3JlMi9sb2FkMy9sb2FkNC9zdG9yZTQgaGVscGVycy4KKysgICAgLy8gRWFj aCB1c2VzIHZlY194bC92ZWNfeHN0IGZvciB1bmFsaWduZWQgMTYtYnl0ZSBsb2Fkcy9zdG9yZXMs IHZlY19tZXJnZWgvCisrICAgIC8vIHZlY19tZXJnZWwgZm9yIFNTRS1zdHlsZSBlcGkxNi9lcGkz Mi9wcyB1bnBhY2sgb3BzLCBhbmQgdmVjX3Blcm0gd2l0aCBhCisrICAgIC8vIGJ5dGUtbWFzayBm b3IgdGhlIFNTRSBzaHVmZmxlbG8vc2h1ZmZsZWhpL3NodWZmbGUvc3JsaV9zaTEyOCBvcHMuIFRo ZQorKyAgICAvLyBQUEM2NCBMRSByZWdpc3Rlci10by1tZW1vcnkgYnl0ZSBvcmRlciBtYXRjaGVz IHg4NiBMRSwgc28gdGhlIGJ5dGUtbWFzaworKyAgICAvLyBwYXR0ZXJucyBhcmUgaWRlbnRpY2Fs IHRvIHRoZSBjb3JyZXNwb25kaW5nIF9tbV9zZXRyX2VwaTggZm9ybXMuCisrCisrICAgIFNJIHZv aWQgbG9hZDIoY29uc3QgdWludDE2X3QqIHB0ciwgVTE2KiByLCBVMTYqIGcpIHsKKysgICAgICAg IC8vIExvYWQgOCB1aW50MTY6IHIwIGcwIHIxIGcxIHIyIGcyIHIzIGczIChpbiBMRSBtZW1vcnkg b3JkZXIpLgorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB2ID0gdmVjX3hsKDAsIChj b25zdCB1bnNpZ25lZCBjaGFyKilwdHIpOworKyAgICAgICAgLy8gRXh0cmFjdCBldmVyeS1vdGhl ciAxNi1iaXQgdmFsdWUgdmlhIHZlY19wZXJtIChoaWdoIGhhbGYgb2YgcmVzdWx0IGlzIHVudXNl ZAorKyAgICAgICAgLy8gYnV0IHdyaXR0ZW47IHNrX3VuYWxpZ25lZF9sb2FkIGJlbG93IHBpY2tz IHVwIHRoZSBsb3cgOCBieXRlcykuCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIHJfbWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKKysgICAgICAgICAgICAwLDEs IDQsNSwgOCw5LCAxMiwxMywgIDAsMCwwLDAsMCwwLDAsMAorKyAgICAgICAgfTsKKysgICAgICAg IGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ19tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIpeworKyAgICAgICAgICAgIDIsMywgNiw3LCAxMCwxMSwgMTQsMTUsICAwLDAsMCwwLDAs MCwwLDAKKysgICAgICAgIH07CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIFJfdiA9 IHZlY19wZXJtKHYsIHYsIHJfbWFzayk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IEdfdiA9IHZlY19wZXJtKHYsIHYsIGdfbWFzayk7CisrICAgICAgICAqciA9IHNrX3VuYWxpZ25l ZF9sb2FkPFUxNj4oJlJfdik7CisrICAgICAgICAqZyA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4o Jkdfdik7CisrICAgIH0KKysKKysgICAgU0kgdm9pZCBzdG9yZTIodWludDE2X3QqIHB0ciwgVTE2 IHIsIFUxNiBnKSB7CisrICAgICAgICAvLyBJbnRlcmxlYXZlOiByZyA9IHIwIGcwIHIxIGcxIHIy IGcyIHIzIGczLgorKyAgICAgICAgLy8gciBhbmQgZyBhcmUgOC1ieXRlIHZlY3RvcnM7IHdpZGVu IHRvIDE2IGFuZCB2ZWNfbWVyZ2VoIG9uIHVzaG9ydCB0YWtlcworKyAgICAgICAgLy8gdGhlIGxv dyA0IGxhbmVzIG9mIGVhY2guCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBydyA9 IHdpZGVuX2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+KHIpOworKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQgZ3cgPSB3aWRlbl9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 PihnKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHJnID0gdmVjX21lcmdlaChy dywgZ3cpOworKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyZywgMCwg KHVuc2lnbmVkIGNoYXIqKXB0cik7CisrICAgIH0KKysKKysgICAgU0kgdm9pZCBsb2FkMyhjb25z dCB1aW50MTZfdCogcHRyLCBVMTYqIHIsIFUxNiogZywgVTE2KiBiKSB7CisrICAgICAgICAvLyA0 IHBpeGVscyB4IDMgY2hhbm5lbHMgeCAyIGJ5dGVzID0gMjQgYnl0ZXMuIFR3byAxNi1ieXRlIGxv YWRzIHdpdGggb3ZlcmxhcAorKyAgICAgICAgLy8gYXZvaWQgcmVhZGluZyBwYXN0IHRoZSAyNC1i eXRlIHNvdXJjZS4KKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdjAxID0gdmVjX3hs KDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKikocHRyICsgMCkpOworKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciB2MjNfcmF3ID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKiko cHRyICsgNCkpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvID0g dmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgICAgICAgIC8vIHYyMyA9IHYyM19yYXcg Pj4gNCBieXRlcyAoZHJvcHMgdGhlIG92ZXJsYXBwaW5nIHBpeGVsLTEgdHJhaWxpbmcgUikuCisr ICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNoaWZ0NCA9IChfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKXsKKysgICAgICAgICAgICA0LDUsNiw3LCA4LDksMTAsMTEsIDEyLDEzLDE0 LDE1LCAxNiwxNiwxNiwxNgorKyAgICAgICAgfTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgdjIzID0gdmVjX3Blcm0odjIzX3JhdywgemVybywgc2hpZnQ0KTsKKysgICAgICAgIC8v IF9OIGhvbGRzIFIsRyxCIGZvciBwaXhlbCBOIGluIGl0cyBsb3dlciAzIGxhbmVzLiBzaGlmdDYg YWR2YW5jZXMgdG8gdGhlIG5leHQgcGl4ZWwuCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIHNoaWZ0NiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKKysgICAgICAgICAg ICA2LDcsOCw5LCAxMCwxMSwxMiwxMywgMTQsMTUsIDE2LDE2LCAxNiwxNiwgMTYsMTYKKysgICAg ICAgIH07CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIF8wID0gdjAxOworKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfMSA9IHZlY19wZXJtKHYwMSwgemVybywgc2hpZnQ2 KTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgXzIgPSB2MjM7CisrICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIF8zID0gdmVjX3Blcm0odjIzLCB6ZXJvLCBzaGlmdDYpOwor KyAgICAgICAgLy8gRGUtaW50ZXJsYWNlIHRvIFIsRyxCIHBlciB0aGUgU1NFIGZsb3cuCisrICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBfMDIgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydClfMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClfMik7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCBfMTMgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydClfMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClfMyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCBSX3YgPSB2ZWNfbWVyZ2VoKF8wMiwgXzEzKTsKKysgICAgICAgIGNvbnN0IF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgc2hpZnQ4ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewor KyAgICAgICAgICAgIDgsOSwxMCwxMSwgMTIsMTMsMTQsMTUsIDE2LDE2LDE2LDE2LCAxNiwxNiwx NiwxNgorKyAgICAgICAgfTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgR192ID0g dmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpUl92LCB6ZXJvLCBzaGlmdDgpOworKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgQl92ID0gdmVjX21lcmdlbChfMDIsIF8xMyk7 CisrICAgICAgICAqciA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oJlJfdik7CisrICAgICAgICAq ZyA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oJkdfdik7CisrICAgICAgICAqYiA9IHNrX3VuYWxp Z25lZF9sb2FkPFUxNj4oJkJfdik7CisrICAgIH0KKysKKysgICAgU0kgdm9pZCBsb2FkNChjb25z dCB1aW50MTZfdCogcHRyLCBVMTYqIHIsIFUxNiogZywgVTE2KiBiLCBVMTYqIGEpIHsKKysgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHYwMSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCkKKysgICAgICAgICAgICB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXB0cik7ICAg ICAgICAgICAgLy8gcjAgZzAgYjAgYTAgcjEgZzEgYjEgYTEKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IHYyMyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCkKKysgICAgICAgICAg ICB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShwdHIgKyA4KSk7ICAgICAgLy8gcjIg ZzIgYjIgYTIgcjMgZzMgYjMgYTMKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IF8w MiA9IHZlY19tZXJnZWgodjAxLCB2MjMpOyAgLy8gcjAgcjIgZzAgZzIgYjAgYjIgYTAgYTIKKysg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IF8xMyA9IHZlY19tZXJnZWwodjAxLCB2MjMp OyAgLy8gcjEgcjMgZzEgZzMgYjEgYjMgYTEgYTMKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IHJnICA9IHZlY19tZXJnZWgoXzAyLCBfMTMpOyAgLy8gcjAgcjEgcjIgcjMgZzAgZzEg ZzIgZzMKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJhICA9IHZlY19tZXJnZWwo XzAyLCBfMTMpOyAgLy8gYjAgYjEgYjIgYjMgYTAgYTEgYTIgYTMKKysgICAgICAgICpyID0gc2tf dW5hbGlnbmVkX2xvYWQ8VTE2PigoY29uc3QgdWludDE2X3QqKSZyZyArIDApOworKyAgICAgICAg KmcgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KChjb25zdCB1aW50MTZfdCopJnJnICsgNCk7Cisr ICAgICAgICAqYiA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQxNl90KikmYmEg KyAwKTsKKysgICAgICAgICphID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigoY29uc3QgdWludDE2 X3QqKSZiYSArIDQpOworKyAgICB9CisrCisrICAgIFNJIHZvaWQgc3RvcmU0KHVpbnQxNl90KiBw dHIsIFUxNiByLCBVMTYgZywgVTE2IGIsIFUxNiBhKSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCBydyA9IHdpZGVuX2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+KHIpOwor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ3cgPSB3aWRlbl9jYXN0PF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0PihnKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJ3 ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4oYik7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCBhdyA9IHdpZGVuX2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hv cnQ+KGEpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmcgPSB2ZWNfbWVyZ2Vo KHJ3LCBndyk7ICAvLyByMCBnMCByMSBnMSByMiBnMiByMyBnMworKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQgYmEgPSB2ZWNfbWVyZ2VoKGJ3LCBhdyk7ICAvLyBiMCBhMCBiMSBhMSBi MiBhMiBiMyBhMworKyAgICAgICAgLy8gTm93IGludGVybGVhdmUgMzItYml0IGxhbmVzIChlYWNo IHJnIHBhaXIgPSAxIGxhbmUsIGVhY2ggYmEgcGFpciA9IDEgbGFuZSkuCisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBpbnQgcmdiYV9sbyA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVk IGludClyZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGludCliYSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBpbnQgcmdiYV9oaSA9IHZlY19tZXJnZWwoKF9fdmVjdG9yIHVuc2lnbmVkIGludClyZywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9f dmVjdG9yIHVuc2lnbmVkIGludCliYSk7CisrICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXJnYmFfbG8sIDAsICh1bnNpZ25lZCBjaGFyKilwdHIpOworKyAgICAgICAgdmVj X3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyZ2JhX2hpLCAwLCAodW5zaWduZWQgY2hhciop KHB0ciArIDgpKTsKKysgICAgfQorKworKyAgICBTSSB2b2lkIGxvYWQyKGNvbnN0IGZsb2F0KiBw dHIsIEYqIHIsIEYqIGcpIHsKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IF8wMSA9IHZlY194bCgw LCBwdHIpOyAgICAgICAgICAvLyByMCBnMCByMSBnMQorKyAgICAgICAgX192ZWN0b3IgZmxvYXQg XzIzID0gdmVjX3hsKDAsIHB0ciArIDQpOyAgICAgIC8vIHIyIGcyIHIzIGczCisrICAgICAgICAv LyByID0gbGFuZXMge18wMVswXSwgXzAxWzJdLCBfMjNbMF0sIF8yM1syXX07IGcgPSB7XzAxWzFd LCBfMDFbM10sIF8yM1sxXSwgXzIzWzNdfS4KKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgcl9tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeworKyAgICAgICAgICAg IDAsMSwyLDMsIDgsOSwxMCwxMSwgMTYsMTcsMTgsMTksIDI0LDI1LDI2LDI3CisrICAgICAgICB9 OworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBnX21hc2sgPSAoX192ZWN0 b3IgdW5zaWduZWQgY2hhcil7CisrICAgICAgICAgICAgNCw1LDYsNywgMTIsMTMsMTQsMTUsIDIw LDIxLDIyLDIzLCAyOCwyOSwzMCwzMQorKyAgICAgICAgfTsKKysgICAgICAgICpyID0gKEYpdmVj X3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzAxLCAoX192ZWN0b3IgdW5zaWduZWQgY2hh cilfMjMsIHJfbWFzayk7CisrICAgICAgICAqZyA9IChGKXZlY19wZXJtKChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKV8wMSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzIzLCBnX21hc2spOworKyAg ICB9CisrCisrICAgIFNJIHZvaWQgc3RvcmUyKGZsb2F0KiBwdHIsIEYgciwgRiBnKSB7CisrICAg ICAgICBfX3ZlY3RvciBmbG9hdCBfMDEgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciBmbG9hdClyLCAo X192ZWN0b3IgZmxvYXQpZyk7ICAgLy8gcjAgZzAgcjEgZzEKKysgICAgICAgIF9fdmVjdG9yIGZs b2F0IF8yMyA9IHZlY19tZXJnZWwoKF9fdmVjdG9yIGZsb2F0KXIsIChfX3ZlY3RvciBmbG9hdCln KTsgICAvLyByMiBnMiByMyBnMworKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQg Y2hhcilfMDEsIDAsICh1bnNpZ25lZCBjaGFyKilwdHIpOworKyAgICAgICAgdmVjX3hzdCgoX192 ZWN0b3IgdW5zaWduZWQgY2hhcilfMjMsIDAsICh1bnNpZ25lZCBjaGFyKikocHRyICsgNCkpOwor KyAgICB9CisrCisrICAgIFNJIHZvaWQgbG9hZDQoY29uc3QgZmxvYXQqIHB0ciwgRiogciwgRiog ZywgRiogYiwgRiogYSkgeworKyAgICAgICAgLy8gNHg0IGZsb2F0IG1hdHJpeCB0cmFuc3Bvc2U6 IHJvd3MgLT4gY29sdW1ucy4KKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IHJvdzAgPSB2ZWNfeGwo MCwgcHRyICsgIDApOworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgcm93MSA9IHZlY194bCgwLCBw dHIgKyAgNCk7CisrICAgICAgICBfX3ZlY3RvciBmbG9hdCByb3cyID0gdmVjX3hsKDAsIHB0ciAr ICA4KTsKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IHJvdzMgPSB2ZWNfeGwoMCwgcHRyICsgMTIp OworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDAgPSB2ZWNfbWVyZ2VoKHJvdzAsIHJvdzIpOyAg Ly8ge3JvdzBbMF0sIHJvdzJbMF0sIHJvdzBbMV0sIHJvdzJbMV19CisrICAgICAgICBfX3ZlY3Rv ciBmbG9hdCBUMSA9IHZlY19tZXJnZWgocm93MSwgcm93Myk7CisrICAgICAgICBfX3ZlY3RvciBm bG9hdCBUMiA9IHZlY19tZXJnZWwocm93MCwgcm93Mik7CisrICAgICAgICBfX3ZlY3RvciBmbG9h dCBUMyA9IHZlY19tZXJnZWwocm93MSwgcm93Myk7CisrICAgICAgICAqciA9IChGKXZlY19tZXJn ZWgoVDAsIFQxKTsgIC8vIHtyb3cwWzBdLCByb3cxWzBdLCByb3cyWzBdLCByb3czWzBdfQorKyAg ICAgICAgKmcgPSAoRil2ZWNfbWVyZ2VsKFQwLCBUMSk7CisrICAgICAgICAqYiA9IChGKXZlY19t ZXJnZWgoVDIsIFQzKTsKKysgICAgICAgICphID0gKEYpdmVjX21lcmdlbChUMiwgVDMpOworKyAg ICB9CisrCisrICAgIFNJIHZvaWQgc3RvcmU0KGZsb2F0KiBwdHIsIEYgciwgRiBnLCBGIGIsIEYg YSkgeworKyAgICAgICAgLy8gNHg0IGZsb2F0IG1hdHJpeCB0cmFuc3Bvc2UsIHRoZW4gc3RvcmUg cm93cy4KKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQwID0gdmVjX21lcmdlaCgoX192ZWN0b3Ig ZmxvYXQpciwgKF9fdmVjdG9yIGZsb2F0KWIpOworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDEg PSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciBmbG9hdClnLCAoX192ZWN0b3IgZmxvYXQpYSk7CisrICAg ICAgICBfX3ZlY3RvciBmbG9hdCBUMiA9IHZlY19tZXJnZWwoKF9fdmVjdG9yIGZsb2F0KXIsIChf X3ZlY3RvciBmbG9hdCliKTsKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQzID0gdmVjX21lcmdl bCgoX192ZWN0b3IgZmxvYXQpZywgKF9fdmVjdG9yIGZsb2F0KWEpOworKyAgICAgICAgdmVjX3hz dCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VoKFQwLCBUMSksIDAsICh1bnNpZ25l ZCBjaGFyKikocHRyICsgIDApKTsKKysgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIpdmVjX21lcmdlbChUMCwgVDEpLCAwLCAodW5zaWduZWQgY2hhciopKHB0ciArICA0KSk7 CisrICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWgoVDIs IFQzKSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyAgOCkpOworKyAgICAgICAgdmVjX3hzdCgo X192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VsKFQyLCBUMyksIDAsICh1bnNpZ25lZCBj aGFyKikocHRyICsgMTIpKTsKKysgICAgfQorKworICNlbGlmIGRlZmluZWQoU0tSUF9DUFVfU0tY KQorICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgViA9IFZlYzwxNiwgVD47CisgICAg IHVzaW5nIEYgICA9IFY8ZmxvYXQgICA+OworZGlmZiAtLWdpdCBhL2dmeC9za2lhL3NraWEvc3Jj L29wdHMvU2tTd2l6emxlcl9vcHRzLmluYyBiL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tTd2l6 emxlcl9vcHRzLmluYworaW5kZXggNjcxZGIzZjA1ZjYxLi5jNTc4MjM4YTllNTggMTAwNjQ0Cist LS0gYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0cy5pbmMKKysrKyBiL2dm eC9za2lhL3NraWEvc3JjL29wdHMvU2tTd2l6emxlcl9vcHRzLmluYworQEAgLTg0LDYgKzg0LDI5 IEBAIFNJIGZsb2F0IHJlY2lwcm9jYWxfYWxwaGEoZmxvYXQgYSkgeworICAgICBhdXRvIHEgPSBG NHsxLjBmfSAvIHZBOworICAgICByZXR1cm4gX21tX2FuZF9wcyhza19iaXRfY2FzdDxfX20xMjg+ KHZBICE9IEY0ezAuMGZ9KSwgcSlbMF07CisgfQorKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykg JiYgZGVmaW5lZChfX1ZTWF9fKQorKy8vIC0tIFZTWCAtLSBIYXJkZW4gYWdhaW5zdCB0aW1pbmcg YXR0YWNrcy4KKysvLyB2ZWNfc3BsYXRzIC8gdmVjX2RpdiAvIHZlY19jbXBndCAvIHZlY19hbmQg ZWFjaCBtYXAgdG8gYSBzaW5nbGUgVlNYIG9wIG9uCisrLy8gYm90aCBHQ0MgYW5kIENsYW5nLiB2 ZWNfY21wZ3QodkEsIDApIGlzIGV4YWN0IGZvciB0aGUgbm9uLW5lZ2F0aXZlLWFscGhhCisrLy8g Y29udHJhY3QgKDAgPD0gYSkgYW5kIGF2b2lkcyBDbGFuZydzIHN0YXRpY19jYXN0PGZsb2F0Pih2 ZWN0b3IpIGV4dGVuc2lvbgorKy8vIHRoYXQgR0NDIGRvZXMgbm90IHN1cHBvcnQuCisrU0tfTk9f U0FOSVRJWkUoImZsb2F0LWRpdmlkZS1ieS16ZXJvIikKKytTSSBmbG9hdCByZWNpcHJvY2FsX2Fs cGhhX3RpbWVzXzI1NShmbG9hdCBhKSB7CisrICAgIFNrQVNTRVJUKDAgPD0gYSAmJiBhIDw9IDI1 NSk7CisrICAgIF9fdmVjdG9yIGZsb2F0IHZBID0gdmVjX3NwbGF0cyhhKTsKKysgICAgX192ZWN0 b3IgZmxvYXQgcSA9IHZlY19kaXYodmVjX3NwbGF0cygyNTUuMGYpLCB2QSk7CisrICAgIF9fdmVj dG9yIGZsb2F0IHZNYXNrID0gKF9fdmVjdG9yIGZsb2F0KXZlY19jbXBndCh2QSwgdmVjX3NwbGF0 cygwLjBmKSk7CisrICAgIHJldHVybiB2ZWNfYW5kKHZNYXNrLCBxKVswXTsKKyt9CisrCisrU0tf Tk9fU0FOSVRJWkUoImZsb2F0LWRpdmlkZS1ieS16ZXJvIikKKytTSSBmbG9hdCByZWNpcHJvY2Fs X2FscGhhKGZsb2F0IGEpIHsKKysgICAgU2tBU1NFUlQoMCA8PSBhICYmIGEgPD0gMSk7CisrICAg IF9fdmVjdG9yIGZsb2F0IHZBID0gdmVjX3NwbGF0cyhhKTsKKysgICAgX192ZWN0b3IgZmxvYXQg cSA9IHZlY19kaXYodmVjX3NwbGF0cygxLjBmKSwgdkEpOworKyAgICBfX3ZlY3RvciBmbG9hdCB2 TWFzayA9IChfX3ZlY3RvciBmbG9hdCl2ZWNfY21wZ3QodkEsIHZlY19zcGxhdHMoMC4wZikpOwor KyAgICByZXR1cm4gdmVjX2FuZCh2TWFzaywgcSlbMF07CisrfQorICNlbHNlCisgLy8gLS0gUG9y dGFibGUgLS0gKk5vdCogaGFyZGVuZWQgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcworIFNJIGZsb2F0 IHJlY2lwcm9jYWxfYWxwaGFfdGltZXNfMjU1KGZsb2F0IGEpIHsKK0BAIC0xMDg1LDYgKzExMDgs MjA4IEBAIHZvaWQgcmdiQV90b19CR1JBKHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBz cmMsIGludCBjb3VudCkgeworICAgICByZ2JBX3RvX0JHUkFfcG9ydGFibGUoZHN0LCBzcmMsIGNv dW50KTsKKyB9CisgCisrI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNY X18pCisrLy8gLS0gVlNYIC0tIE5hdGl2ZSBQb3dlciBWU1gvQWx0aVZlYyBwb3J0cyBvZiB0aGUg U1NTRTMgc3dpenpsZXJzIGJlbG93LgorKy8vIEVhY2ggX21tXyogb3BlcmF0aW9uIGlzIHJlcGxh Y2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHZlY18qIHNlcXVlbmNlIHBlcgorKy8vIHRoZSBHQ0Mg cHBjX3dyYXBwZXJzIHRyYW5zbGF0aW9uIHBhdHRlcm4gKHZlY19tZXJnZWgvbCwgdmVjX3Blcm0s IGFuZCB0aGUKKysvLyB2ZWNfdm11bGV1aC92bXVsb3VoICsgcGVybXV0ZSBpZGlvbSBmb3IgX21t X211bGhpX2VwdTE2KS4gVGhlIHBlcm11dGUKKysvLyBtYXNrcyBmb3IgYnl0ZS1zaHVmZmxlcyB1 c2UgdGhlIHNhbWUgYnl0ZS1vcmRlciBsYXlvdXQgYXMgdGhlIFNTRQorKy8vIF9tbV9zZXRyX2Vw aTggZm9ybXMgYmVjYXVzZSBQUEM2NCBMRSByZWdpc3Rlci10by1tZW1vcnkgYnl0ZSBvcmRlciBp cyB0aGUKKysvLyBzYW1lIGFzIHg4NiBMRS4KKysKKysvLyBTY2FsZTogKCh4KnkpICsgMTI4KSAq IDI1NyA+PiAxNiwgcGVyIDE2LWJpdCBsYW5lIChtYXRjaGVzIHRoZSBTU1NFMyBmb3JtKS4KKytz dGF0aWMgaW5saW5lIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNjYWxlKF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IHgsIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHkpIHsKKysgICAgY29uc3QgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjEyOCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEy OCk7CisrICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHYyNTcgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBzaG9ydCkyNTcpOworKyAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBzdW1t ID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KSgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpKHgg KiB5KSArIHYxMjgpOworKyAgICAvLyBfbW1fbXVsaGlfZXB1MTYgZXF1aXZhbGVudDogMTZ4MTYg LT4gaGlnaCAxNiBiaXRzLCB2aWEgbXVsZSttdWxvK3Blcm11dGUuCisrICAgIF9fdmVjdG9yIHVu c2lnbmVkIGludCBldmVuID0gdmVjX3ZtdWxldWgoc3VtbSwgdjI1Nyk7CisrICAgIF9fdmVjdG9y IHVuc2lnbmVkIGludCBvZGQgID0gdmVjX3ZtdWxvdWgoc3VtbSwgdjI1Nyk7CisrICAgIGNvbnN0 IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgeGZvcm0gPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7 CisrICAgICAgICAweDAyLCAweDAzLCAweDEyLCAweDEzLCAgMHgwNiwgMHgwNywgMHgxNiwgMHgx NywKKysgICAgICAgIDB4MEEsIDB4MEIsIDB4MUEsIDB4MUIsICAweDBFLCAweDBGLCAweDFFLCAw eDFGCisrICAgIH07CisrICAgIHJldHVybiAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3Bl cm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZXZlbiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilvZGQsIHhmb3Jt KTsKKyt9CisrCisrc3RhdGljIHZvaWQgcHJlbXVsX3Nob3VsZF9zd2FwUkIoYm9vbCBrU3dhcFJC LCB1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAg YXV0byBwcmVtdWw4ID0gWz1dKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIqIGxvLCBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKiBoaSkgeworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hh ciB6ZXJvcyA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXswfTsKKysgICAgICAgIGNvbnN0IF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgcGxhbmFyID0ga1N3YXBSQgorKyAgICAgICAgICAgID8gKF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIpezIsNiwxMCwxNCwgMSw1LDksMTMsIDAsNCw4LDEyLCAzLDcs MTEsMTV9CisrICAgICAgICAgICAgOiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MCw0LDgsMTIs IDEsNSw5LDEzLCAyLDYsMTAsMTQsIDMsNywxMSwxNX07CisrCisrICAgICAgICAvLyBTd2l6emxl IGVhY2ggMTYtYnl0ZSBjaHVuayBpbnRvIDgtYml0IHBsYW5hciBsYXlvdXQuCisrICAgICAgICAq bG8gPSB2ZWNfcGVybSgqbG8sICpsbywgcGxhbmFyKTsgICAgICAgICAgICAgICAgICAgICAgICAv LyBycnJyZ2dnZyBiYmJiYWFhYQorKyAgICAgICAgKmhpID0gdmVjX3Blcm0oKmhpLCAqaGksIHBs YW5hcik7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUlJSUkdHR0cgQkJCQkFBQUEKKysKKysg ICAgICAgIC8vIEludGVybGVhdmUgdGhlIHR3byBoYWx2ZXMgYXQgMzItYml0IGdyYW51bGFyaXR5 LgorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZyA9IChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKQorKyAgICAgICAgICAgIHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkq bG8sIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmhpKTsgIC8vIHJycnJSUlJSIGdnZ2dHR0dHCisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGJhID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpCisrICAgICAgICAgICAgdmVjX21lcmdlbCgoX192ZWN0b3IgdW5zaWduZWQgaW50KSpsbywg KF9fdmVjdG9yIHVuc2lnbmVkIGludCkqaGkpOyAgLy8gYmJiYkJCQkIgYWFhYUFBQUEKKysKKysg ICAgICAgIC8vIFVucGFjayB0byAxNi1iaXQgcGxhbmFyLgorKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgciA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VoKHJnLCB6 ZXJvcyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnID0gKF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0KXZlY19tZXJnZWwocmcsIHplcm9zKTsKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IGIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlaChiYSwg emVyb3MpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgYSA9IChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKGJhLCB6ZXJvcyk7CisrCisrICAgICAgICAvLyBQcmVt dWx0aXBseSBlYWNoIGNvbG91ciBjaGFubmVsIGJ5IGFscGhhLgorKyAgICAgICAgciA9IHNjYWxl KHIsIGEpOworKyAgICAgICAgZyA9IHNjYWxlKGcsIGEpOworKyAgICAgICAgYiA9IHNjYWxlKGIs IGEpOworKworKyAgICAgICAgLy8gUmVwYWNrIGludG8gaW50ZXJsYWNlZCBwaXhlbHMuCisrICAg ICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2OCA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIHNob3J0KTgpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmcyID0gdmVj X29yKHIsIHZlY19zbChnLCB2OCkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg YmEyID0gdmVjX29yKGIsIHZlY19zbChhLCB2OCkpOworKyAgICAgICAgKmxvID0gKF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlaChyZzIsIGJhMik7CisrICAgICAgICAqaGkgPSAoX192 ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VsKHJnMiwgYmEyKTsKKysgICAgfTsKKysKKysg ICAgd2hpbGUgKGNvdW50ID49IDgpIHsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg bG8gPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShzcmMgKyAwKSk7CisrICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGhpID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBj aGFyKikoc3JjICsgNCkpOworKyAgICAgICAgcHJlbXVsOCgmbG8sICZoaSk7CisrICAgICAgICB2 ZWNfeHN0KGxvLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDApKTsKKysgICAgICAgIHZlY194 c3QoaGksIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgNCkpOworKyAgICAgICAgc3JjICs9IDg7 IGRzdCArPSA4OyBjb3VudCAtPSA4OworKyAgICB9CisrCisrICAgIGlmIChjb3VudCA+PSA0KSB7 CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGxvID0gdmVjX3hsKDAsIChjb25zdCB1 bnNpZ25lZCBjaGFyKilzcmMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBoaSA9 IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXswfTsKKysgICAgICAgIHByZW11bDgoJmxvLCAmaGkp OworKyAgICAgICAgdmVjX3hzdChsbywgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAg ICBzcmMgKz0gNDsgZHN0ICs9IDQ7IGNvdW50IC09IDQ7CisrICAgIH0KKysKKysgICAgYXV0byBw cm9jID0ga1N3YXBSQiA/IFJHQkFfdG9fYmdyQV9wb3J0YWJsZSA6IFJHQkFfdG9fcmdiQV9wb3J0 YWJsZTsKKysgICAgcHJvYyhkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIFJHQkFfdG9f cmdiQSh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysg ICAgcHJlbXVsX3Nob3VsZF9zd2FwUkIoZmFsc2UsIGRzdCwgc3JjLCBjb3VudCk7CisrfQorKwor K3ZvaWQgUkdCQV90b19iZ3JBKHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGlu dCBjb3VudCkgeworKyAgICBwcmVtdWxfc2hvdWxkX3N3YXBSQih0cnVlLCBkc3QsIHNyYywgY291 bnQpOworK30KKysKKyt2b2lkIFJHQkFfdG9fQkdSQSh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50 MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBzd2FwUkIgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7CisrICAgICAgICAyLDEsMCwzLCA2 LDUsNCw3LCAxMCw5LDgsMTEsIDE0LDEzLDEyLDE1CisrICAgIH07CisrICAgIHdoaWxlIChjb3Vu dCA+PSA0KSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJnYmEgPSB2ZWNfeGwo MCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIGJncmEgPSB2ZWNfcGVybShyZ2JhLCByZ2JhLCBzd2FwUkIpOworKyAgICAgICAgdmVj X3hzdChiZ3JhLCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsKKysgICAgICAgIHNyYyArPSA0OyBk c3QgKz0gNDsgY291bnQgLT0gNDsKKysgICAgfQorKyAgICBSR0JBX3RvX0JHUkFfcG9ydGFibGUo ZHN0LCBzcmMsIGNvdW50KTsKKyt9CisrCisrdm9pZCBncmF5QV90b19SR0JBKHVpbnQzMl90IGRz dFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgeworKyAgICB3aGlsZSAoY291bnQg Pj0gOCkgeworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2EgPSAoX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQpdmVjX3hsKDAsIHNyYyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCBnZyA9IHZlY19vcigKKysgICAgICAgICAgICAgICAgdmVjX2FuZChnYSwgdmVjX3Nw bGF0cygodW5zaWduZWQgc2hvcnQpMHgwMEZGKSksCisrICAgICAgICAgICAgICAgIHZlY19zbCAo Z2EsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpKSk7CisrICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCBnZ2dhX2xvID0gdmVjX21lcmdlaChnZywgZ2EpOworKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYV9oaSA9IHZlY19tZXJnZWwoZ2csIGdhKTsKKysgICAg ICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYV9sbywgMCwgKHVuc2lnbmVk IGNoYXIqKShkc3QgKyAwKSk7CisrICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKWdnZ2FfaGksIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgNCkpOworKyAgICAgICAgc3Jj ICs9IDggKiAyOyBkc3QgKz0gODsgY291bnQgLT0gODsKKysgICAgfQorKyAgICBncmF5QV90b19S R0JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7CisrfQorKworK3ZvaWQgZ3JheUFfdG9fcmdi QSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAg d2hpbGUgKGNvdW50ID49IDgpIHsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdy YXlBID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY194bCgwLCBzcmMpOworKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZzAgPSB2ZWNfYW5kKGdyYXlBLCB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBzaG9ydCkweDAwRkYpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGEwID0gdmVjX3NyICAgKGdyYXlBLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KSk7Cisr ICAgICAgICBnMCA9IHNjYWxlKGcwLCBhMCk7CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCB2OCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpOworKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2cgPSB2ZWNfb3IoZzAsIHZlY19zbChnMCwgdjgpKTsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdhID0gdmVjX29yKGcwLCB2ZWNfc2wo YTAsIHY4KSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZ2dhX2xvID0gdmVj X21lcmdlaChnZywgZ2EpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYV9o aSA9IHZlY19tZXJnZWwoZ2csIGdhKTsKKysgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpZ2dnYV9sbywgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAwKSk7CisrICAgICAg ICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2FfaGksIDAsICh1bnNpZ25lZCBj aGFyKikoZHN0ICsgNCkpOworKyAgICAgICAgc3JjICs9IDggKiAyOyBkc3QgKz0gODsgY291bnQg LT0gODsKKysgICAgfQorKyAgICBncmF5QV90b19yZ2JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3Vu dCk7CisrfQorKworK2VudW0gRm9ybWF0IHsga1JHQjEsIGtCR1IxIH07Cisrc3RhdGljIHZvaWQg aW52ZXJ0ZWRfY215a190byhGb3JtYXQgZm9ybWF0LCB1aW50MzJfdCogZHN0LCBjb25zdCB1aW50 MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgYXV0byBjb252ZXJ0OCA9IFs9XShfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKiBsbywgX192ZWN0b3IgdW5zaWduZWQgY2hhciogaGkpIHsKKysgICAg ICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSAoX192ZWN0b3IgdW5zaWdu ZWQgY2hhcil7MH07CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBsYW5h ciA9IChrQkdSMSA9PSBmb3JtYXQpCisrICAgICAgICAgICAgPyAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcil7Miw2LDEwLDE0LCAxLDUsOSwxMywgMCw0LDgsMTIsIDMsNywxMSwxNX0KKysgICAgICAg ICAgICA6IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXswLDQsOCwxMiwgMSw1LDksMTMsIDIsNiwx MCwxNCwgMyw3LDExLDE1fTsKKysKKysgICAgICAgICpsbyA9IHZlY19wZXJtKCpsbywgKmxvLCBw bGFuYXIpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNjY2NtbW1tIHl5eXlra2trCisrICAg ICAgICAqaGkgPSB2ZWNfcGVybSgqaGksICpoaSwgcGxhbmFyKTsgICAgICAgICAgICAgICAgICAg ICAgICAvLyBDQ0NDTU1NTSBZWVlZS0tLSworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBjbSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKQorKyAgICAgICAgICAgIHZlY19tZXJnZWgo KF9fdmVjdG9yIHVuc2lnbmVkIGludCkqbG8sIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmhpKTsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgeWsgPSAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcikKKysgICAgICAgICAgICB2ZWNfbWVyZ2VsKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmxv LCAoX192ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7CisrCisrICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCBjID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWgoY20sIHpl cm9zKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IG0gPSAoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpdmVjX21lcmdlbChjbSwgemVyb3MpOworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgeSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VoKHlrLCB6 ZXJvcyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBrID0gKF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0KXZlY19tZXJnZWwoeWssIHplcm9zKTsKKysKKysgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHIgPSBzY2FsZShjLCBrKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGcgPSBzY2FsZShtLCBrKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0IGIgPSBzY2FsZSh5LCBrKTsKKysKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IHY4ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCByZyA9IHZlY19vcihyLCB2ZWNfc2woZywgdjgpKTsKKysgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJhID0gdmVjX29yKGIsIHZlY19zcGxhdHMoKHVu c2lnbmVkIHNob3J0KTB4RkYwMCkpOworKyAgICAgICAgKmxvID0gKF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIpdmVjX21lcmdlaChyZywgYmEpOworKyAgICAgICAgKmhpID0gKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpdmVjX21lcmdlbChyZywgYmEpOworKyAgICB9OworKworKyAgICB3aGlsZSAoY291 bnQgPj0gOCkgeworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBsbyA9IHZlY194bCgw LCAoY29uc3QgdW5zaWduZWQgY2hhciopKHNyYyArIDApKTsKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIgaGkgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShzcmMgKyA0 KSk7CisrICAgICAgICBjb252ZXJ0OCgmbG8sICZoaSk7CisrICAgICAgICB2ZWNfeHN0KGxvLCAw LCAodW5zaWduZWQgY2hhciopKGRzdCArIDApKTsKKysgICAgICAgIHZlY194c3QoaGksIDAsICh1 bnNpZ25lZCBjaGFyKikoZHN0ICsgNCkpOworKyAgICAgICAgc3JjICs9IDg7IGRzdCArPSA4OyBj b3VudCAtPSA4OworKyAgICB9CisrICAgIGlmIChjb3VudCA+PSA0KSB7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIGxvID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilz cmMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBoaSA9IChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXswfTsKKysgICAgICAgIGNvbnZlcnQ4KCZsbywgJmhpKTsKKysgICAgICAgIHZl Y194c3QobG8sIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAgc3JjICs9IDQ7IGRz dCArPSA0OyBjb3VudCAtPSA0OworKyAgICB9CisrICAgIGF1dG8gcHJvYyA9IChrQkdSMSA9PSBm b3JtYXQpID8gaW52ZXJ0ZWRfQ01ZS190b19CR1IxX3BvcnRhYmxlIDogaW52ZXJ0ZWRfQ01ZS190 b19SR0IxX3BvcnRhYmxlOworKyAgICBwcm9jKGRzdCwgc3JjLCBjb3VudCk7CisrfQorKworK3Zv aWQgaW52ZXJ0ZWRfQ01ZS190b19SR0IxKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50MzJfdCog c3JjLCBpbnQgY291bnQpIHsKKysgICAgaW52ZXJ0ZWRfY215a190byhrUkdCMSwgZHN0LCBzcmMs IGNvdW50KTsKKyt9CisrCisrdm9pZCBpbnZlcnRlZF9DTVlLX3RvX0JHUjEodWludDMyX3QgZHN0 W10sIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBjb3VudCkgeworKyAgICBpbnZlcnRlZF9jbXlr X3RvKGtCR1IxLCBkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIHJnYkFfdG9fUkdCQSh1 aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgcmdi QV90b19SR0JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7CisrfQorKworK3ZvaWQgcmdiQV90 b19CR1JBKHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBjb3VudCkgewor KyAgICByZ2JBX3RvX0JHUkFfcG9ydGFibGUoZHN0LCBzcmMsIGNvdW50KTsKKyt9CisrCisgI2Vs aWYgU0tfQ1BVX0xTWF9MRVZFTCA+PSBTS19DUFVfTFNYX0xFVkVMX0xBU1gKKyAvLyAtLSBMQVNY IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKK0BAIC0xNzM2LDYgKzE5NjEsMzkg QEAgc3RhdGljIHZvaWQgZ3JheV90b19SR0IxX3BvcnRhYmxlKHVpbnQzMl90IGRzdFtdLCBjb25z dCB1aW50OF90KiBzcmMsIGludCBjb3VudCkKKyAgICAgICAgIH0KKyAgICAgICAgIGdyYXlfdG9f UkdCMV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOworICAgICB9CisrI2VsaWYgZGVmaW5lZChT S19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrICAgIHZvaWQgZ3JheV90b19SR0IxKHVp bnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgeworKyAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBhbHBoYXMgPSB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBjaGFyKTB4RkYpOworKyAgICAgICAgd2hpbGUgKGNvdW50ID49IDE2KSB7CisrICAgICAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBncmF5cyA9IHZlY194bCgwLCBzcmMpOworKworKyAg ICAgICAgICAgIC8vIFJlcGxpY2F0ZSBncmF5IGJ5dGU6IGdnID0gdW5wYWNrKGdyYXksIGdyYXkp IHBlciA4LWJpdCBsYW5lLgorKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ2df bG8gPSB2ZWNfbWVyZ2VoKGdyYXlzLCBncmF5cyk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBnZ19oaSA9IHZlY19tZXJnZWwoZ3JheXMsIGdyYXlzKTsKKysgICAgICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdhX2xvID0gdmVjX21lcmdlaChncmF5cywgYWxwaGFz KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdhX2hpID0gdmVjX21lcmdl bChncmF5cywgYWxwaGFzKTsKKysKKysgICAgICAgICAgICAvLyBJbnRlcmxlYXZlIGctcGFpcnMg YW5kIGdhLXBhaXJzIGF0IDE2LWJpdCBncmFudWxhcml0eS4KKysgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCBnZ2dhMCA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KWdnX2xvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZ2FfbG8pOworKyAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2ExID0gdmVjX21lcmdlbCgoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpZ2dfbG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnYV9sbyk7CisrICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYTIgPSB2ZWNfbWVyZ2VoKChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydClnZ19oaSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdhX2hp KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZ2dhMyA9IHZlY19tZXJn ZWwoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdnX2hpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hv cnQpZ2FfaGkpOworKworKyAgICAgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpZ2dnYTAsIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgIDApKTsKKysgICAgICAgICAgICB2 ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2ExLCAwLCAodW5zaWduZWQgY2hhciop KGRzdCArICA0KSk7CisrICAgICAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hh cilnZ2dhMiwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAgOCkpOworKyAgICAgICAgICAgIHZl Y194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYTMsIDAsICh1bnNpZ25lZCBjaGFyKiko ZHN0ICsgMTIpKTsKKysKKysgICAgICAgICAgICBzcmMgKz0gMTY7CisrICAgICAgICAgICAgZHN0 ICs9IDE2OworKyAgICAgICAgICAgIGNvdW50IC09IDE2OworKyAgICAgICAgfQorKyAgICAgICAg Z3JheV90b19SR0IxX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7CisrICAgIH0KKyAjZWxpZiBT S19DUFVfTFNYX0xFVkVMID49IFNLX0NQVV9MU1hfTEVWRUxfTEFTWAorICAgICAvKm5vdCBzdGF0 aWMqLyBpbmxpbmUgdm9pZCBncmF5X3RvX1JHQjEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4 X3QqIHNyYywgaW50IGNvdW50KSB7CisgICAgICAgICBjb25zdCBfX20yNTZpIGFscGhhcyA9IF9f bGFzeF94dnJlcGxncjJ2cl9iKDB4RkYpOworQEAgLTE5MjAsNiArMjE3OCwzNyBAQCBzdGF0aWMg dm9pZCBSR0JfdG9fQkdSMV9wb3J0YWJsZSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCog c3JjLCBpbnQgY291bnQpCisgICAgICAgICBwcm9jKGRzdCwgc3JjLCBjb3VudCk7CisgICAgIH0K KyAKKysgICAgdm9pZCBSR0JfdG9fUkdCMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCog c3JjLCBpbnQgY291bnQpIHsKKysgICAgICAgIGluc2VydF9hbHBoYV9zaG91bGRfc3dhcHJiKGZh bHNlLCBkc3QsIHNyYywgY291bnQpOworKyAgICB9CisrICAgIHZvaWQgUkdCX3RvX0JHUjEodWlu dDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgICAgICBp bnNlcnRfYWxwaGFfc2hvdWxkX3N3YXByYih0cnVlLCBkc3QsIHNyYywgY291bnQpOworKyAgICB9 CisrI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrICAgIHN0 YXRpYyB2b2lkIGluc2VydF9hbHBoYV9zaG91bGRfc3dhcHJiKGJvb2wga1N3YXBSQiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0W10sIGNv bnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgICAgICAvLyBhbHBoYU1hc2sgPSAw eEZGMDAwMDAwIHBlciAzMi1iaXQgbGFuZSAtPiBieXRlcyAoaW4gTEUgbWVtb3J5IGxheW91dCkg YXJlCisrICAgICAgICAvLyB7MDAsMDAsMDAsRkYsIDAwLDAwLDAwLEZGLCAuLi59LgorKyAgICAg ICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBhbHBoYU1hc2sgPSAoX192ZWN0b3IgdW5z aWduZWQgY2hhcil7CisrICAgICAgICAgICAgMCwwLDAsMHhGRiwgMCwwLDAsMHhGRiwgMCwwLDAs MHhGRiwgMCwwLDAsMHhGRgorKyAgICAgICAgfTsKKysgICAgICAgIC8vICdYJyAoPSAwKSBpcyBp cnJlbGV2YW50OiB0aGUgYWxwaGFNYXNrIE9SIG92ZXJ3cml0ZXMgdGhvc2UgbGFuZXMgd2l0aCBG Ri4KKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZXhwYW5kID0ga1N3YXBS QgorKyAgICAgICAgICAgID8gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezIsMSwwLDAsIDUsNCwz LDAsIDgsNyw2LDAsIDExLDEwLDksMH0KKysgICAgICAgICAgICA6IChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKXswLDEsMiwwLCAzLDQsNSwwLCA2LDcsOCwwLCAgOSwxMCwxMSwwfTsKKysKKysgICAg ICAgIHdoaWxlIChjb3VudCA+PSA2KSB7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg Y2hhciByZ2IgPSB2ZWNfeGwoMCwgc3JjKTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIHJnYmEgPSB2ZWNfb3IodmVjX3Blcm0ocmdiLCByZ2IsIGV4cGFuZCksIGFscGhhTWFz ayk7CisrICAgICAgICAgICAgdmVjX3hzdChyZ2JhLCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsK KysgICAgICAgICAgICBzcmMgKz0gNCozOworKyAgICAgICAgICAgIGRzdCArPSA0OworKyAgICAg ICAgICAgIGNvdW50IC09IDQ7CisrICAgICAgICB9CisrICAgICAgICBhdXRvIHByb2MgPSBrU3dh cFJCID8gUkdCX3RvX0JHUjFfcG9ydGFibGUgOiBSR0JfdG9fUkdCMV9wb3J0YWJsZTsKKysgICAg ICAgIHByb2MoZHN0LCBzcmMsIGNvdW50KTsKKysgICAgfQorKworICAgICB2b2lkIFJHQl90b19S R0IxKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgeworICAg ICAgICAgaW5zZXJ0X2FscGhhX3Nob3VsZF9zd2FwcmIoZmFsc2UsIGRzdCwgc3JjLCBjb3VudCk7 CisgICAgIH0KKworYmFzZS1jb21taXQ6IGE4ZDUzMGFjMTNmMGNlN2U5MzdjMDQ3ZjAxZjBkMzY3 NjRmNWQzNGUKKy0tIAorMi41Mi4wCisKCmRpZmYgLS1naXQgYS8wMDAyLUFkZC1WU1gtaW5zdHJ1 Y3Rpb25zLWZvci1saWJ3ZWJwLnBhdGNoIGIvMDAwMi1BZGQtVlNYLWluc3RydWN0aW9ucy1mb3It bGlid2VicC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjg1N2E3 Ci0tLSAvZGV2L251bGwKKysrIGIvMDAwMi1BZGQtVlNYLWluc3RydWN0aW9ucy1mb3ItbGlid2Vi cC5wYXRjaApAQCAtMCwwICsxLDI1MjQgQEAKK0Zyb20gYjllMTE2ODk4ODMwYTBmOWVkZDFiMDU2 NjY1MWNlMmQ0OTg5NjE4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/ cT9UcnVuZz0yMEw9QzM9QUE/PSA8OEB0bGUuaWQuYXU+CitEYXRlOiBGcmksIDEyIEp1biAyMDI2 IDE1OjMwOjEzICsxMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBBZGQgVlNYIGluc3RydWN0aW9u cyBmb3IgbGlid2VicAorCitBc3Npc3RlZC1ieTogTGFuY2UgQWxiZXJ0c29uIDxsYW5jZUBvc3Vv c2wub3JnPgorQXNzaXN0ZWQtYnk6IFRodXNoYW4gRmVybmFuZG8gPHRodXNoYW5AdGh1c2hhbmZl cm5hbmRvLmNvbT4KKy0tLQorIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5n LmMgICAgIHwgICA2ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZ192 c3guYyB8IDI0NiArKysrKysrCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2NwdS5oICAgICAgICAg ICAgICAgICAgfCAgMTQgKy0KKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZGVjLmMgICAgICAgICAg ICAgICAgICB8ICAgNiArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlY192c3guYyAgICAgICAg ICAgICAgfCA3MzcgKysrKysrKysrKysrKysrKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9m aWx0ZXJzLmMgICAgICAgICAgICAgIHwgICA2ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmls dGVyc192c3guYyAgICAgICAgICB8IDE2MiArKysrCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2xv c3NsZXNzLmMgICAgICAgICAgICAgfCAgIDYgKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3Nz bGVzc192c3guYyAgICAgICAgIHwgNDQ5ICsrKysrKysrKysrCisgbWVkaWEvbGlid2VicC9zcmMv ZHNwL21vei5idWlsZCAgICAgICAgICAgICAgfCAgMTQgKworIG1lZGlhL2xpYndlYnAvc3JjL2Rz cC9yZXNjYWxlci5jICAgICAgICAgICAgIHwgICA2ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3Av cmVzY2FsZXJfdnN4LmMgICAgICAgICB8IDIwMSArKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2Rz cC91cHNhbXBsaW5nLmMgICAgICAgICAgIHwgIDEyICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3Av dXBzYW1wbGluZ192c3guYyAgICAgICB8IDE1MSArKysrCisgbWVkaWEvbGlid2VicC9zcmMvZHNw L3l1di5jICAgICAgICAgICAgICAgICAgfCAgIDYgKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC95 dXYuaCAgICAgICAgICAgICAgICAgIHwgIDIxICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2 X3ZzeC5jICAgICAgICAgICAgICB8IDIwNiArKysrKysKKyBtZWRpYS9saWJ3ZWJwL3NyYy9tb3ov Y3B1LmNwcCAgICAgICAgICAgICAgICB8ICAgNCArCisgMTggZmlsZXMgY2hhbmdlZCwgMjI1MiBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xp YndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3ZzeC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0 IG1lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWVk aWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnNfdnN4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWVk aWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3ZzeC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1l ZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlcl92c3guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBt ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3guYworIGNyZWF0ZSBtb2RlIDEwMDY0 NCBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jCisKK2RpZmYgLS1naXQgYS9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNw L2FscGhhX3Byb2Nlc3NpbmcuYworaW5kZXggNDkyN2U3M2U4MWJmLi41ZjkxNTJiZjcwMWEgMTAw NjQ0CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCisrKysg Yi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCitAQCAtNDM0LDYgKzQz NCw3IEBAIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nTUlQU2RzcFIyKHZvaWQp OworIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nU1NFMih2b2lkKTsKKyBleHRl cm4gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1NTRTQxKHZvaWQpOworIGV4dGVybiB2b2lk IFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nTkVPTih2b2lkKTsKKytleHRlcm4gdm9pZCBXZWJQSW5p dEFscGhhUHJvY2Vzc2luZ1ZTWCh2b2lkKTsKKyAKKyBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUElu aXRBbHBoYVByb2Nlc3NpbmcpIHsKKyAgIFdlYlBNdWx0QVJHQlJvdyA9IFdlYlBNdWx0QVJHQlJv d19DOworQEAgLTQ3Miw2ICs0NzMsMTEgQEAgV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0QWxw aGFQcm9jZXNzaW5nKSB7CisgICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNSVBTZHNwUjIpKSB7Cisg ICAgICAgV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdNSVBTZHNwUjIoKTsKKyAgICAgfQorKyNlbmRp ZgorKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRDUFVJbmZvKGtW U1gpKSB7CisrICAgICAgV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdWU1goKTsKKysgICAgfQorICNl bmRpZgorICAgfQorIAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9w cm9jZXNzaW5nX3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3Npbmdf dnN4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLjJhYWQxY2Q4 YjY0OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3By b2Nlc3NpbmdfdnN4LmMKK0BAIC0wLDAgKzEsMjQ2IEBACisrLy8gQ29weXJpZ2h0IDIwMTQgR29v Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysvLworKy8vIFVzZSBvZiB0aGlzIHNvdXJj ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKysvLyB0aGF0IGNhbiBi ZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKKysv LyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg Y2FuIGJlIGZvdW5kCisrLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBw cm9qZWN0IGF1dGhvcnMgbWF5CisrLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0 aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysv LworKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBhbHBoYSBwcm9jZXNzaW5nIGZ1bmN0aW9u cy4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKKysKKysjaWYgZGVmaW5lZChXRUJQX1VT RV9WU1gpCisrCisrI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr CisrI2luY2x1ZGUgInNyYy9kc3AvY3B1LmgiCisrI2luY2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgi CisrCisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHU4eDE2OworK3R5cGVkZWYgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgdTE2eDg7CisrdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hv cnQgaTE2eDg7CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgdTMyeDQ7CisrdHlwZWRl ZiBfX3ZlY3RvciBzaWduZWQgaW50IGkzMng0OworKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisrLy8gQWxwaGEgZGlzcGF0Y2ggLyBleHRyYWN0aW9uLgorKworK3N0YXRpYyBpbnQgRGlzcGF0 Y2hBbHBoYV9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBhbHBoYSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9zdHJpZGUsIGludCB3aWR0aCwgaW50IGhl aWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJ Q1QgZHN0LCBpbnQgZHN0X3N0cmlkZSkgeworKyAgdWludDMyX3QgYWxwaGFfYW5kID0gMHhmZjsK KysgIGludCBpLCBqLCBrOworKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIGNoYXIpMCk7CisrICBjb25zdCB1MTZ4OCB6MTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBz aG9ydCkwKTsKKysgIGNvbnN0IHUzMng0IGFfbWFzayA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTB4 ZmYpOyAgLy8gc2VsZWN0cyB0aGUgbG93IGJ5dGUKKysgIHU4eDE2IGFsbF9hbmQgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTB4ZmYpOworKyAgY29uc3QgaW50IGxpbWl0ID0gd2lkdGggJiB+ MTU7CisrCisrICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgdWludDhfdCog cHRyID0gZHN0OworKyAgICBmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gMTYpIHsKKysgICAg ICBjb25zdCB1OHgxNiBhMCA9IHZlY194bCgwLCAodW5zaWduZWQgY2hhciopJmFscGhhW2ldKTsK KysgICAgICAvLyBTcHJlYWQgdGhlIDE2IGFscGhhIGJ5dGVzIHRvIHRoZSBsb3cgYnl0ZSBvZiAx NiAzMi1iaXQgbGFuZXMuCisrICAgICAgY29uc3QgdTE2eDggYTFfbG8gPSAodTE2eDgpdmVjX21l cmdlaChhMCwgemVybyk7CisrICAgICAgY29uc3QgdTE2eDggYTFfaGkgPSAodTE2eDgpdmVjX21l cmdlbChhMCwgemVybyk7CisrICAgICAgY29uc3QgdTMyeDQgczAgPSAodTMyeDQpdmVjX21lcmdl aChhMV9sbywgejE2KTsKKysgICAgICBjb25zdCB1MzJ4NCBzMSA9ICh1MzJ4NCl2ZWNfbWVyZ2Vs KGExX2xvLCB6MTYpOworKyAgICAgIGNvbnN0IHUzMng0IHMyID0gKHUzMng0KXZlY19tZXJnZWgo YTFfaGksIHoxNik7CisrICAgICAgY29uc3QgdTMyeDQgczMgPSAodTMyeDQpdmVjX21lcmdlbChh MV9oaSwgejE2KTsKKysgICAgICBjb25zdCB1MzJ4NCogc3ByZWFkWzRdID0geyZzMCwgJnMxLCAm czIsICZzM307CisrICAgICAgZm9yIChrID0gMDsgayA8IDQ7ICsraykgeworKyAgICAgICAgY29u c3QgdTMyeDQgZCA9IHZlY194bCgwLCAodWludDMyX3QqKShwdHIgKyAxNiAqIGspKTsKKysgICAg ICAgIHZlY194c3QodmVjX3NlbChkLCAqc3ByZWFkW2tdLCBhX21hc2spLCAwLCAodWludDMyX3Qq KShwdHIgKyAxNiAqIGspKTsKKysgICAgICB9CisrICAgICAgYWxsX2FuZCA9IHZlY19hbmQoYWxs X2FuZCwgYTApOworKyAgICAgIHB0ciArPSA2NDsKKysgICAgfQorKyAgICBmb3IgKDsgaSA8IHdp ZHRoOyArK2kpIHsKKysgICAgICBjb25zdCB1aW50MzJfdCBhbHBoYV92YWx1ZSA9IGFscGhhW2ld OworKyAgICAgIGRzdFs0ICogaV0gPSBhbHBoYV92YWx1ZTsKKysgICAgICBhbHBoYV9hbmQgJj0g YWxwaGFfdmFsdWU7CisrICAgIH0KKysgICAgYWxwaGEgKz0gYWxwaGFfc3RyaWRlOworKyAgICBk c3QgKz0gZHN0X3N0cmlkZTsKKysgIH0KKysgIHsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbMTZd OworKyAgICBtZW1jcHkodG1wLCAmYWxsX2FuZCwgMTYpOworKyAgICBmb3IgKGsgPSAwOyBrIDwg MTY7ICsraykgYWxwaGFfYW5kICY9IHRtcFtrXTsKKysgIH0KKysgIHJldHVybiAoYWxwaGFfYW5k ICE9IDB4ZmYpOworK30KKysKKytzdGF0aWMgdm9pZCBEaXNwYXRjaEFscGhhVG9HcmVlbl9WU1go Y29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBhbHBoYSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogV0VCUF9S RVNUUklDVCBkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk c3Rfc3RyaWRlKSB7CisrICBpbnQgaSwgajsKKysgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTE2eDggejE2ID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpMCk7CisrICBjb25zdCBpbnQgbGltaXQgPSB3aWR0aCAmIH4xNTsKKysg IGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworKyAgICBmb3IgKGkgPSAwOyBpIDwgbGlt aXQ7IGkgKz0gMTYpIHsKKysgICAgICBjb25zdCB1OHgxNiBhMCA9IHZlY194bCgwLCAodW5zaWdu ZWQgY2hhciopJmFscGhhW2ldKTsKKysgICAgICAvLyBQbGFjZSBlYWNoIGFscGhhIGJ5dGUgaW50 byB0aGUgZ3JlZW4gc2xvdCAoPDwgOCkgb2YgYSAzMi1iaXQgbGFuZS4KKysgICAgICBjb25zdCB1 MTZ4OCBhMV9sbyA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHplcm8sIGEwKTsgIC8vIG5vdGUgdGhlICd6 ZXJvJyBmaXJzdAorKyAgICAgIGNvbnN0IHUxNng4IGExX2hpID0gKHUxNng4KXZlY19tZXJnZWwo emVybywgYTApOworKyAgICAgIGNvbnN0IHUzMng0IGcwID0gKHUzMng0KXZlY19tZXJnZWgoYTFf bG8sIHoxNik7CisrICAgICAgY29uc3QgdTMyeDQgZzEgPSAodTMyeDQpdmVjX21lcmdlbChhMV9s bywgejE2KTsKKysgICAgICBjb25zdCB1MzJ4NCBnMiA9ICh1MzJ4NCl2ZWNfbWVyZ2VoKGExX2hp LCB6MTYpOworKyAgICAgIGNvbnN0IHUzMng0IGczID0gKHUzMng0KXZlY19tZXJnZWwoYTFfaGks IHoxNik7CisrICAgICAgdmVjX3hzdChnMCwgMCwgJmRzdFtpICsgMF0pOworKyAgICAgIHZlY194 c3QoZzEsIDAsICZkc3RbaSArIDRdKTsKKysgICAgICB2ZWNfeHN0KGcyLCAwLCAmZHN0W2kgKyA4 XSk7CisrICAgICAgdmVjX3hzdChnMywgMCwgJmRzdFtpICsgMTJdKTsKKysgICAgfQorKyAgICBm b3IgKDsgaSA8IHdpZHRoOyArK2kpIGRzdFtpXSA9IGFscGhhW2ldIDw8IDg7CisrICAgIGFscGhh ICs9IGFscGhhX3N0cmlkZTsKKysgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisrICB9CisrfQorKwor K3N0YXRpYyBpbnQgRXh0cmFjdEFscGhhX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNU IGFyZ2IsIGludCBhcmdiX3N0cmlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGFscGhhLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfc3RyaWRlKSB7CisrICB1aW50MzJfdCBh bHBoYV9hbmQgPSAweGZmOworKyAgaW50IGksIGosIGs7CisrICBjb25zdCB1MzJ4NCBhX21hc2sg PSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkweGZmKTsgIC8vIGtlZXBzIHRoZSBsb3cgYnl0ZQorKyAg dTh4MTYgYWxsX2FuZCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhmZik7CisrICBjb25z dCBpbnQgbGltaXQgPSB3aWR0aCAmIH43OworKworKyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsg KytqKSB7CisrICAgIGNvbnN0IHVpbnQzMl90KiBzcmMgPSAoY29uc3QgdWludDMyX3QqKWFyZ2I7 CisrICAgIGZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSArPSA4KSB7CisrICAgICAgY29uc3QgdTMy eDQgYTAgPSB2ZWNfYW5kKHZlY194bCgwLCAodWludDMyX3QqKShzcmMgKyAwKSksIGFfbWFzayk7 CisrICAgICAgY29uc3QgdTMyeDQgYTEgPSB2ZWNfYW5kKHZlY194bCgwLCAodWludDMyX3QqKShz cmMgKyA0KSksIGFfbWFzayk7CisrICAgICAgY29uc3QgaTE2eDggYzAgPSB2ZWNfcGFja3MoKGkz Mng0KWEwLCAoaTMyeDQpYTEpOworKyAgICAgIGNvbnN0IHU4eDE2IGQwID0gdmVjX3BhY2tzdShj MCwgYzApOyAgLy8gOCBhbHBoYSBieXRlcyBpbiB0aGUgbG93IGhhbGYKKysgICAgICBtZW1jcHko JmFscGhhW2ldLCAmZDAsIDgpOworKyAgICAgIGFsbF9hbmQgPSB2ZWNfYW5kKGFsbF9hbmQsIGQw KTsKKysgICAgICBzcmMgKz0gODsKKysgICAgfQorKyAgICBmb3IgKDsgaSA8IHdpZHRoOyArK2kp IHsKKysgICAgICBjb25zdCB1aW50MzJfdCBhbHBoYV92YWx1ZSA9IGFyZ2JbNCAqIGldOworKyAg ICAgIGFscGhhW2ldID0gYWxwaGFfdmFsdWU7CisrICAgICAgYWxwaGFfYW5kICY9IGFscGhhX3Zh bHVlOworKyAgICB9CisrICAgIGFyZ2IgKz0gYXJnYl9zdHJpZGU7CisrICAgIGFscGhhICs9IGFs cGhhX3N0cmlkZTsKKysgIH0KKysgIHsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbMTZdOworKyAg ICBtZW1jcHkodG1wLCAmYWxsX2FuZCwgMTYpOworKyAgICBmb3IgKGsgPSAwOyBrIDwgODsgKytr KSBhbHBoYV9hbmQgJj0gdG1wW2tdOworKyAgfQorKyAgcmV0dXJuIChhbHBoYV9hbmQgPT0gMHhm Zik7CisrfQorKworK3N0YXRpYyB2b2lkIEV4dHJhY3RHcmVlbl9WU1goY29uc3QgdWludDMyX3Qq IFdFQlBfUkVTVFJJQ1QgYXJnYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QqIFdFQlBfUkVTVFJJQ1QgYWxwaGEsIGludCBzaXplKSB7CisrICBpbnQgaTsKKysgIGNvbnN0 IHUzMng0IG1hc2sgPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkweGZmKTsKKysgIGNvbnN0IHUzMng0 IHNoOCA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTgpOworKyAgZm9yIChpID0gMDsgaSArIDE2IDw9 IHNpemU7IGkgKz0gMTYpIHsKKysgICAgY29uc3QgdTMyeDQgYTAgPQorKyAgICAgICAgdmVjX2Fu ZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50MzJfdCopKGFyZ2IgKyBpICsgMCkpLCBzaDgpLCBtYXNr KTsKKysgICAgY29uc3QgdTMyeDQgYTEgPQorKyAgICAgICAgdmVjX2FuZCh2ZWNfc3IodmVjX3hs KDAsICh1aW50MzJfdCopKGFyZ2IgKyBpICsgNCkpLCBzaDgpLCBtYXNrKTsKKysgICAgY29uc3Qg dTMyeDQgYTIgPQorKyAgICAgICAgdmVjX2FuZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50MzJfdCop KGFyZ2IgKyBpICsgOCkpLCBzaDgpLCBtYXNrKTsKKysgICAgY29uc3QgdTMyeDQgYTMgPQorKyAg ICAgICAgdmVjX2FuZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50MzJfdCopKGFyZ2IgKyBpICsgMTIp KSwgc2g4KSwgbWFzayk7CisrICAgIGNvbnN0IGkxNng4IGQwID0gdmVjX3BhY2tzKChpMzJ4NClh MCwgKGkzMng0KWExKTsKKysgICAgY29uc3QgaTE2eDggZDEgPSB2ZWNfcGFja3MoKGkzMng0KWEy LCAoaTMyeDQpYTMpOworKyAgICBjb25zdCB1OHgxNiBlID0gdmVjX3BhY2tzdShkMCwgZDEpOwor KyAgICB2ZWNfeHN0KGUsIDAsICZhbHBoYVtpXSk7CisrICB9CisrICBmb3IgKDsgaSA8IHNpemU7 ICsraSkgYWxwaGFbaV0gPSBhcmdiW2ldID4+IDg7CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisrLy8gUHJlbXVsdGlwbHkuCisrCisrI2RlZmluZSBNVUxUSVBMSUVSKGEpICgoYSkg KiAzMjg5N1UpCisrI2RlZmluZSBQUkVNVUxUSVBMWSh4LCBtKSAoKCh4KSAqIChtKSkgPj4gMjMp CisrCisrLy8gU3ByZWFkcyB0aGUgYWxwaGEgbGFuZSBhY3Jvc3Mgci9nL2IgYW5kIGluc2VydHMg MHhmZiBpbiB0aGUgYWxwaGEgbGFuZSwgZm9yCisrLy8gdGhlIHR3byBwaXhlbHMgcGFja2VkIGlu IGEgMTYtYml0LXBlci1jaGFubmVsIHZlY3Rvci4gQnVpbHQgYWdhaW5zdCB0aGUKKysvLyBsaXR0 bGUtZW5kaWFuIGJ5dGUgb3JkZXI7IHNyYyBpcyB0aGUgY2hhbm5lbCB2ZWN0b3IsIHRoZSBzZWNv bmQgb3BlcmFuZCBpcworKy8vIGFuIGFsbC0weGZmIHZlY3Rvci4KKytzdGF0aWMgY29uc3QgdTh4 MTYga1NwcmVhZEFscGhhTGFzdCA9IHs2LCAgNywgIDYsICA3LCAgNiwgIDcsICAxNiwgNywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNCwgMTUsIDE0LCAxNSwgMTQs IDE1LCAxNiwgMTV9OworK3N0YXRpYyBjb25zdCB1OHgxNiBrU3ByZWFkQWxwaGFGaXJzdCA9IHsx NiwgMSwgMCwgMSwgMCwgMSwgMCwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTYsIDksIDgsIDksIDgsIDksIDgsIDl9OworKworK3N0YXRpYyBXRUJQX0lOTElO RSB1MTZ4OCBNdWxIaTE2KHUxNng4IGEsIHUxNng4IGIpIHsKKysgIGNvbnN0IHUzMng0IHNoID0g dmVjX3NwbGF0cygodW5zaWduZWQgaW50KTE2KTsKKysgIGNvbnN0IHUzMng0IGUgPSB2ZWNfc3Io dmVjX211bGUoYSwgYiksIHNoKTsKKysgIGNvbnN0IHUzMng0IG8gPSB2ZWNfc3IodmVjX211bG8o YSwgYiksIHNoKTsKKysgIHJldHVybiB2ZWNfcGFjayh2ZWNfbWVyZ2VoKGUsIG8pLCB2ZWNfbWVy Z2VsKGUsIG8pKTsKKyt9CisrCisrc3RhdGljIHZvaWQgQXBwbHlBbHBoYU11bHRpcGx5X1ZTWCh1 aW50OF90KiByZ2JhLCBpbnQgYWxwaGFfZmlyc3QsIGludCB3LCBpbnQgaCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUpIHsKKysgIGNvbnN0IHU4eDE2IHpl cm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYgYWxsZmYg PSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4ZmYpOworKyAgY29uc3QgdTE2eDggejE2ID0g dmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMCk7CisrICBjb25zdCB1MTZ4OCBrTXVsdCA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTB4ODA4MSk7CisrICBjb25zdCB1MTZ4OCBzaDcgPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk3KTsKKysgIGNvbnN0IHU4eDE2IGN0cmwgPSBhbHBo YV9maXJzdCA/IGtTcHJlYWRBbHBoYUZpcnN0IDoga1NwcmVhZEFscGhhTGFzdDsKKysgIGNvbnN0 IGludCBrU3BhbiA9IDQ7CisrICB3aGlsZSAoaC0tID4gMCkgeworKyAgICB1aW50OF90KiBjb25z dCByZ2J4ID0gcmdiYTsKKysgICAgaW50IGk7CisrICAgIGZvciAoaSA9IDA7IGkgKyBrU3BhbiA8 PSB3OyBpICs9IGtTcGFuKSB7CisrICAgICAgY29uc3QgdTh4MTYgYXJnYjAgPSB2ZWNfeGwoMCwg KHVuc2lnbmVkIGNoYXIqKShyZ2J4ICsgNCAqIGkpKTsKKysgICAgICBjb25zdCB1MTZ4OCBsbyA9 ICh1MTZ4OCl2ZWNfbWVyZ2VoKGFyZ2IwLCB6ZXJvKTsKKysgICAgICBjb25zdCB1MTZ4OCBoaSA9 ICh1MTZ4OCl2ZWNfbWVyZ2VsKGFyZ2IwLCB6ZXJvKTsKKysgICAgICBjb25zdCB1MTZ4OCBhX2xv ID0gKHUxNng4KXZlY19wZXJtKCh1OHgxNilsbywgYWxsZmYsIGN0cmwpOworKyAgICAgIGNvbnN0 IHUxNng4IGFfaGkgPSAodTE2eDgpdmVjX3Blcm0oKHU4eDE2KWhpLCBhbGxmZiwgY3RybCk7Cisr ICAgICAgY29uc3QgdTE2eDggQTBsbyA9IHZlY19tbGFkZChhX2xvLCBsbywgejE2KTsKKysgICAg ICBjb25zdCB1MTZ4OCBBMGhpID0gdmVjX21sYWRkKGFfaGksIGhpLCB6MTYpOworKyAgICAgIGNv bnN0IHUxNng4IEEybG8gPSB2ZWNfc3IoTXVsSGkxNihBMGxvLCBrTXVsdCksIHNoNyk7CisrICAg ICAgY29uc3QgdTE2eDggQTJoaSA9IHZlY19zcihNdWxIaTE2KEEwaGksIGtNdWx0KSwgc2g3KTsK KysgICAgICBjb25zdCB1OHgxNiBvdXQgPSB2ZWNfcGFja3N1KChpMTZ4OClBMmxvLCAoaTE2eDgp QTJoaSk7CisrICAgICAgdmVjX3hzdChvdXQsIDAsICh1bnNpZ25lZCBjaGFyKikocmdieCArIDQg KiBpKSk7CisrICAgIH0KKysgICAgLy8gRmluaXNoIHdpdGggbGVmdC1vdmVycy4KKysgICAgZm9y ICg7IGkgPCB3OyArK2kpIHsKKysgICAgICB1aW50OF90KiBjb25zdCByZ2IgPSByZ2JhICsgKGFs cGhhX2ZpcnN0ID8gMSA6IDApOworKyAgICAgIGNvbnN0IHVpbnQ4X3QqIGNvbnN0IGFscGhhID0g cmdiYSArIChhbHBoYV9maXJzdCA/IDAgOiAzKTsKKysgICAgICBjb25zdCB1aW50MzJfdCBhID0g YWxwaGFbNCAqIGldOworKyAgICAgIGlmIChhICE9IDB4ZmYpIHsKKysgICAgICAgIGNvbnN0IHVp bnQzMl90IG11bHQgPSBNVUxUSVBMSUVSKGEpOworKyAgICAgICAgcmdiWzQgKiBpICsgMF0gPSBQ UkVNVUxUSVBMWShyZ2JbNCAqIGkgKyAwXSwgbXVsdCk7CisrICAgICAgICByZ2JbNCAqIGkgKyAx XSA9IFBSRU1VTFRJUExZKHJnYls0ICogaSArIDFdLCBtdWx0KTsKKysgICAgICAgIHJnYls0ICog aSArIDJdID0gUFJFTVVMVElQTFkocmdiWzQgKiBpICsgMl0sIG11bHQpOworKyAgICAgIH0KKysg ICAgfQorKyAgICByZ2JhICs9IHN0cmlkZTsKKysgIH0KKyt9CisrCisrI3VuZGVmIE1VTFRJUExJ RVIKKysjdW5kZWYgUFJFTVVMVElQTFkKKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwor K2V4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nVlNYKHZvaWQpOworKworK1dFQlBf VFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1ZTWCh2b2lk KSB7CisrICBXZWJQQXBwbHlBbHBoYU11bHRpcGx5ID0gQXBwbHlBbHBoYU11bHRpcGx5X1ZTWDsK KysgIFdlYlBEaXNwYXRjaEFscGhhID0gRGlzcGF0Y2hBbHBoYV9WU1g7CisrICBXZWJQRGlzcGF0 Y2hBbHBoYVRvR3JlZW4gPSBEaXNwYXRjaEFscGhhVG9HcmVlbl9WU1g7CisrICBXZWJQRXh0cmFj dEFscGhhID0gRXh0cmFjdEFscGhhX1ZTWDsKKysgIFdlYlBFeHRyYWN0R3JlZW4gPSBFeHRyYWN0 R3JlZW5fVlNYOworK30KKysKKysjZWxzZSAgLy8gIVdFQlBfVVNFX1ZTWAorKworK1dFQlBfRFNQ X0lOSVRfU1RVQihXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1ZTWCkKKysKKysjZW5kaWYgIC8vIFdF QlBfVVNFX1ZTWAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9jcHUuaCBiL21l ZGlhL2xpYndlYnAvc3JjL2RzcC9jcHUuaAoraW5kZXggMTdjNGRiOTcxYzdmLi5kMWQ0YjMxMjdj ODQgMTAwNjQ0CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvY3B1LmgKKysrKyBiL21lZGlh L2xpYndlYnAvc3JjL2RzcC9jcHUuaAorQEAgLTE1NCw2ICsxNTQsMTcgQEAKKyAjZGVmaW5lIFdF QlBfVVNFX01TQQorICNlbmRpZgorIAorKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gUFBD NjQgLyBQb3dlciBWU1ggKElTQSAyLjA3IC8gUE9XRVI4IGJhc2VsaW5lKS4KKysKKysjaWYgZGVm aW5lZChfX3Bvd2VycGM2NF9fKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrI2RlZmluZSBXRUJQX1VT RV9WU1gKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpICYmICFkZWZpbmVk KFdFQlBfSEFWRV9WU1gpCisrI2RlZmluZSBXRUJQX0hBVkVfVlNYCisrI2VuZGlmCisrCisgLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyAjaWZuZGVmIFdFQlBfRFNQX09NSVRfQ19DT0RFCitA QCAtMzA4LDcgKzMxOSw4IEBAIHR5cGVkZWYgZW51bSB7CisgICBrTkVPTiwKKyAgIGtNSVBTMzIs CisgICBrTUlQU2RzcFIyLAorLSAga01TQQorKyAga01TQSwKKysgIGtWU1gKKyB9IENQVUZlYXR1 cmU7CisgCisgLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBDUFUgc3VwcG9ydHMgdGhlIGZlYXR1cmUu CitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlYy5jIGIvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL2RlYy5jCitpbmRleCA0ZjM4MzA5OTgwY2UuLmYzNDI3NmJhNzMxNiAxMDA2NDQK Ky0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWMuYworKysrIGIvbWVkaWEvbGlid2VicC9z cmMvZHNwL2RlYy5jCitAQCAtNzUyLDYgKzc1Miw3IEBAIGV4dGVybiB2b2lkIFZQOERzcEluaXRO RU9OKHZvaWQpOworIGV4dGVybiB2b2lkIFZQOERzcEluaXRNSVBTMzIodm9pZCk7CisgZXh0ZXJu IHZvaWQgVlA4RHNwSW5pdE1JUFNkc3BSMih2b2lkKTsKKyBleHRlcm4gdm9pZCBWUDhEc3BJbml0 TVNBKHZvaWQpOworK2V4dGVybiB2b2lkIFZQOERzcEluaXRWU1godm9pZCk7CisgCisgV0VCUF9E U1BfSU5JVF9GVU5DKFZQOERzcEluaXQpIHsKKyAgIFZQOEluaXRDbGlwVGFibGVzKCk7CitAQCAt ODQzLDYgKzg0NCwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4RHNwSW5pdCkgeworICAgICBp ZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgeworICAgICAgIFZQOERzcEluaXRNU0EoKTsKKyAgICAg fQorKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRD UFVJbmZvKGtWU1gpKSB7CisrICAgICAgVlA4RHNwSW5pdFZTWCgpOworKyAgICB9CisgI2VuZGlm CisgICB9CisgCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlY192c3guYyBi L21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAwMDAuLmUwYzFjYmMzYjcxYgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWVk aWEvbGlid2VicC9zcmMvZHNwL2RlY192c3guYworQEAgLTAsMCArMSw3MzcgQEAKKysvLyBDb3B5 cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKy8vCisrLy8gVXNl IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQor Ky8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg dGhlIHNvdXJjZQorKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5 IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKKysvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwg Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKKysvLyBiZSBmb3VuZCBpbiB0aGUgQVVU SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKysvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorKy8vCisrLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9mIGRlY29kaW5nIGZ1 bmN0aW9ucy4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKKysKKysjaWYgZGVmaW5lZChX RUJQX1VTRV9WU1gpCisrCisrI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrCisrdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hvcnQgICAgIGkxNng4OworK3R5cGVk ZWYgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgICB1MTZ4ODsKKyt0eXBlZGVmIF9fdmVjdG9yIHNp Z25lZCBpbnQgICAgICAgaTMyeDQ7CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgICAg IHUzMng0OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciAgICB1OHgxNjsKKyt0eXBl ZGVmIF9fdmVjdG9yIHNpZ25lZCBjaGFyICAgICAgaTh4MTY7CisrdHlwZWRlZiBfX3ZlY3RvciBz aWduZWQgbG9uZyBsb25nIGk2NHgyOworKworKy8vIFNpZ25lZCBtdWx0aXBseS1oaWdoIG9mIHBh Y2tlZCAxNi1iaXQgbGFuZXMgKFBPV0VSOCBoYXMgbm8gdm11bGhzaCkuCisrc3RhdGljIFdFQlBf SU5MSU5FIGkxNng4IE11bEhpMTZfUyhpMTZ4OCBhLCBpMTZ4OCBiKSB7CisrICBjb25zdCB1MzJ4 NCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkxNik7CisrICBjb25zdCBpMzJ4NCBlID0g dmVjX3NyYSh2ZWNfbXVsZShhLCBiKSwgc2gpOworKyAgY29uc3QgaTMyeDQgbyA9IHZlY19zcmEo dmVjX211bG8oYSwgYiksIHNoKTsKKysgIHJldHVybiAoaTE2eDgpdmVjX3BhY2sodmVjX21lcmdl aChlLCBvKSwgdmVjX21lcmdlbChlLCBvKSk7CisrfQorKworKy8vIFRyYW5zcG9zZSB0d28gaW50 ZXJsZWF2ZWQgNHg0IGJsb2NrcyBvZiAxNi1iaXQgdmFsdWVzLgorK3N0YXRpYyBXRUJQX0lOTElO RSB2b2lkIFRyYW5zcG9zZTJfNHg0KGkxNng4IGluMCwgaTE2eDggaW4xLCBpMTZ4OCBpbjIsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE2eDggaW4zLCBpMTZ4OCog b3V0MCwgaTE2eDgqIG91dDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTE2eDgqIG91dDIsIGkxNng4KiBvdXQzKSB7CisrICBjb25zdCBpMTZ4OCB0MCA9IChpMTZ4 OCl2ZWNfbWVyZ2VoKGluMCwgaW4xKTsKKysgIGNvbnN0IGkxNng4IHQxID0gKGkxNng4KXZlY19t ZXJnZWgoaW4yLCBpbjMpOworKyAgY29uc3QgaTE2eDggdDIgPSAoaTE2eDgpdmVjX21lcmdlbChp bjAsIGluMSk7CisrICBjb25zdCBpMTZ4OCB0MyA9IChpMTZ4OCl2ZWNfbWVyZ2VsKGluMiwgaW4z KTsKKysgIGNvbnN0IGkzMng0IHUwID0gdmVjX21lcmdlaCgoaTMyeDQpdDAsIChpMzJ4NCl0MSk7 CisrICBjb25zdCBpMzJ4NCB1MSA9IHZlY19tZXJnZWgoKGkzMng0KXQyLCAoaTMyeDQpdDMpOwor KyAgY29uc3QgaTMyeDQgdTIgPSB2ZWNfbWVyZ2VsKChpMzJ4NCl0MCwgKGkzMng0KXQxKTsKKysg IGNvbnN0IGkzMng0IHUzID0gdmVjX21lcmdlbCgoaTMyeDQpdDIsIChpMzJ4NCl0Myk7CisrICAq b3V0MCA9IChpMTZ4OCl2ZWNfbWVyZ2VoKChpNjR4Mil1MCwgKGk2NHgyKXUxKTsKKysgICpvdXQx ID0gKGkxNng4KXZlY19tZXJnZWwoKGk2NHgyKXUwLCAoaTY0eDIpdTEpOworKyAgKm91dDIgPSAo aTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpdTIsIChpNjR4Mil1Myk7CisrICAqb3V0MyA9IChpMTZ4 OCl2ZWNfbWVyZ2VsKChpNjR4Mil1MiwgKGk2NHgyKXUzKTsKKyt9CisrCisrLy8gQm91bmRlZCA0 LWNvZWZmaWNpZW50IGxvYWQgaW50byB0aGUgbG93IGhhbGYgb2YgYSAxNi1iaXQgdmVjdG9yLgor K3N0YXRpYyBXRUJQX0lOTElORSBpMTZ4OCBMb2FkNENvZWZmcyhjb25zdCBpbnQxNl90KiBXRUJQ X1JFU1RSSUNUIHApIHsKKysgIGludDE2X3QgdG1wWzhdID0gezB9OworKyAgbWVtY3B5KHRtcCwg cCwgNCAqIHNpemVvZihpbnQxNl90KSk7CisrICByZXR1cm4gKihjb25zdCBpMTZ4OCopdG1wOwor K30KKysKKysvLyBCb3VuZGVkIGxvYWQgb2YgbiBwaXhlbHMsIHplcm8tZXh0ZW5kZWQgdG8gMTYt Yml0IGxhbmVzLgorK3N0YXRpYyBXRUJQX0lOTElORSBpMTZ4OCBMb2FkRHN0KGNvbnN0IHVpbnQ4 X3QqIFdFQlBfUkVTVFJJQ1QgcCwgaW50IG4pIHsKKysgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XSA9 IHswfTsKKysgIG1lbWNweSh0bXAsIHAsIG4pOworKyAgcmV0dXJuIChpMTZ4OCl2ZWNfbWVyZ2Vo KHZlY194bCgwLCB0bXApLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApKTsKKyt9CisrCisr c3RhdGljIHZvaWQgVHJhbnNmb3JtX1ZTWChjb25zdCBpbnQxNl90KiBXRUJQX1JFU1RSSUNUIGlu LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3Qs IGludCBkb190d28pIHsKKysgIGNvbnN0IGkxNng4IGsxID0gdmVjX3NwbGF0cygoc2hvcnQpMjAw OTEpOworKyAgY29uc3QgaTE2eDggazIgPSB2ZWNfc3BsYXRzKChzaG9ydCktMzAwNjgpOworKyAg Y29uc3QgdTE2eDggdGhyZWUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkzKTsKKysgIGkx Nng4IGluMCA9IExvYWQ0Q29lZmZzKGluICsgMCksIGluMSA9IExvYWQ0Q29lZmZzKGluICsgNCk7 CisrICBpMTZ4OCBpbjIgPSBMb2FkNENvZWZmcyhpbiArIDgpLCBpbjMgPSBMb2FkNENvZWZmcyhp biArIDEyKTsKKysgIGkxNng4IFQwLCBUMSwgVDIsIFQzOworKworKyAgaWYgKGRvX3R3bykgewor KyAgICBpbjAgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpaW4wLCAoaTY0eDIpTG9hZDRDb2Vm ZnMoaW4gKyAxNikpOworKyAgICBpbjEgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpaW4xLCAo aTY0eDIpTG9hZDRDb2VmZnMoaW4gKyAyMCkpOworKyAgICBpbjIgPSAoaTE2eDgpdmVjX21lcmdl aCgoaTY0eDIpaW4yLCAoaTY0eDIpTG9hZDRDb2VmZnMoaW4gKyAyNCkpOworKyAgICBpbjMgPSAo aTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpaW4zLCAoaTY0eDIpTG9hZDRDb2VmZnMoaW4gKyAyOCkp OworKyAgfQorKworKyAgeyAgLy8gVmVydGljYWwgcGFzcyArIHRyYW5zcG9zZS4KKysgICAgY29u c3QgaTE2eDggYSA9IHZlY19hZGQoaW4wLCBpbjIpOworKyAgICBjb25zdCBpMTZ4OCBiID0gdmVj X3N1YihpbjAsIGluMik7CisrICAgIGNvbnN0IGkxNng4IGMgPSB2ZWNfYWRkKHZlY19zdWIoaW4x LCBpbjMpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3ViKE11bEhpMTZfUyhp bjEsIGsyKSwgTXVsSGkxNl9TKGluMywgazEpKSk7CisrICAgIGNvbnN0IGkxNng4IGQgPSB2ZWNf YWRkKHZlY19hZGQoaW4xLCBpbjMpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNf YWRkKE11bEhpMTZfUyhpbjEsIGsxKSwgTXVsSGkxNl9TKGluMywgazIpKSk7CisrICAgIFRyYW5z cG9zZTJfNHg0KHZlY19hZGQoYSwgZCksIHZlY19hZGQoYiwgYyksIHZlY19zdWIoYiwgYyksIHZl Y19zdWIoYSwgZCksCisrICAgICAgICAgICAgICAgICAgICZUMCwgJlQxLCAmVDIsICZUMyk7Cisr ICB9CisrICB7ICAvLyBIb3Jpem9udGFsIHBhc3MgKyB0cmFuc3Bvc2UuCisrICAgIGNvbnN0IGkx Nng4IGRjID0gdmVjX2FkZChUMCwgdmVjX3NwbGF0cygoc2hvcnQpNCkpOworKyAgICBjb25zdCBp MTZ4OCBhID0gdmVjX2FkZChkYywgVDIpOworKyAgICBjb25zdCBpMTZ4OCBiID0gdmVjX3N1Yihk YywgVDIpOworKyAgICBjb25zdCBpMTZ4OCBjID0gdmVjX2FkZCh2ZWNfc3ViKFQxLCBUMyksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zdWIoTXVsSGkxNl9TKFQxLCBrMiksIE11 bEhpMTZfUyhUMywgazEpKSk7CisrICAgIGNvbnN0IGkxNng4IGQgPSB2ZWNfYWRkKHZlY19hZGQo VDEsIFQzKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX2FkZChNdWxIaTE2X1Mo VDEsIGsxKSwgTXVsSGkxNl9TKFQzLCBrMikpKTsKKysgICAgY29uc3QgaTE2eDggczAgPSB2ZWNf c3JhKHZlY19hZGQoYSwgZCksIHRocmVlKTsKKysgICAgY29uc3QgaTE2eDggczEgPSB2ZWNfc3Jh KHZlY19hZGQoYiwgYyksIHRocmVlKTsKKysgICAgY29uc3QgaTE2eDggczIgPSB2ZWNfc3JhKHZl Y19zdWIoYiwgYyksIHRocmVlKTsKKysgICAgY29uc3QgaTE2eDggczMgPSB2ZWNfc3JhKHZlY19z dWIoYSwgZCksIHRocmVlKTsKKysgICAgVHJhbnNwb3NlMl80eDQoczAsIHMxLCBzMiwgczMsICZU MCwgJlQxLCAmVDIsICZUMyk7CisrICB9CisrICB7ICAvLyBBZGQgdG8gdGhlIHJlZmVyZW5jZSBw aXhlbHMgYW5kIHN0b3JlIHdpdGggc2F0dXJhdGlvbi4KKysgICAgY29uc3QgaW50IG4gPSBkb190 d28gPyA4IDogNDsKKysgICAgY29uc3QgaTE2eDggZDAgPSBMb2FkRHN0KGRzdCArIDAgKiBCUFMs IG4pOworKyAgICBjb25zdCBpMTZ4OCBkMSA9IExvYWREc3QoZHN0ICsgMSAqIEJQUywgbik7Cisr ICAgIGNvbnN0IGkxNng4IGQyID0gTG9hZERzdChkc3QgKyAyICogQlBTLCBuKTsKKysgICAgY29u c3QgaTE2eDggZDMgPSBMb2FkRHN0KGRzdCArIDMgKiBCUFMsIG4pOworKyAgICBjb25zdCB1OHgx NiByMCA9IHZlY19wYWNrc3UodmVjX2FkZChkMCwgVDApLCB2ZWNfYWRkKGQwLCBUMCkpOworKyAg ICBjb25zdCB1OHgxNiByMSA9IHZlY19wYWNrc3UodmVjX2FkZChkMSwgVDEpLCB2ZWNfYWRkKGQx LCBUMSkpOworKyAgICBjb25zdCB1OHgxNiByMiA9IHZlY19wYWNrc3UodmVjX2FkZChkMiwgVDIp LCB2ZWNfYWRkKGQyLCBUMikpOworKyAgICBjb25zdCB1OHgxNiByMyA9IHZlY19wYWNrc3UodmVj X2FkZChkMywgVDMpLCB2ZWNfYWRkKGQzLCBUMykpOworKyAgICB1bnNpZ25lZCBjaGFyIGIwWzE2 XSwgYjFbMTZdLCBiMlsxNl0sIGIzWzE2XTsKKysgICAgbWVtY3B5KGIwLCAmcjAsIDE2KTsgbWVt Y3B5KGIxLCAmcjEsIDE2KTsKKysgICAgbWVtY3B5KGIyLCAmcjIsIDE2KTsgbWVtY3B5KGIzLCAm cjMsIDE2KTsKKysgICAgbWVtY3B5KGRzdCArIDAgKiBCUFMsIGIwLCBuKTsgbWVtY3B5KGRzdCAr IDEgKiBCUFMsIGIxLCBuKTsKKysgICAgbWVtY3B5KGRzdCArIDIgKiBCUFMsIGIyLCBuKTsgbWVt Y3B5KGRzdCArIDMgKiBCUFMsIGIzLCBuKTsKKysgIH0KKyt9CisrCisrLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKysvLyBTaW1wbGUgaW4tbG9vcCBlZGdlIGZpbHRlcmluZy4KKysKKysjZGVmaW5l IEFCU1UocCwgcSkgdmVjX29yKHZlY19zdWJzKCh1OHgxNikocSksICh1OHgxNikocCkpLCBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3VicygodTh4MTYpKHApLCAodTh4MTYpKHEp KSkKKysKKysvLyBQZXItYnl0ZSBzaWduZWQgYXJpdGhtZXRpYyA+PjMsIHBhY2tlZCB3aXRoIHNh dHVyYXRpb24uCisrc3RhdGljIFdFQlBfSU5MSU5FIGk4eDE2IFNpZ25lZFNoaWZ0MyhpOHgxNiB4 KSB7CisrICBjb25zdCB1OHgxNiB6ID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysg IGNvbnN0IHUxNng4IHNoID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpKDMgKyA4KSk7Cisr ICBjb25zdCBpMTZ4OCBsbyA9IHZlY19zcmEoKGkxNng4KXZlY19tZXJnZWgoeiwgKHU4eDE2KXgp LCBzaCk7CisrICBjb25zdCBpMTZ4OCBoaSA9IHZlY19zcmEoKGkxNng4KXZlY19tZXJnZWwoeiwg KHU4eDE2KXgpLCBzaCk7CisrICByZXR1cm4gKGk4eDE2KXZlY19wYWNrcyhsbywgaGkpOworK30K KysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRlcjJfVlNYKHU4eDE2KiBXRUJQX1JF U1RSSUNUIHAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYq IFdFQlBfUkVTVFJJQ1QgcDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1OHgxNiogV0VCUF9SRVNUUklDVCBxMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHU4eDE2KiBXRUJQX1JFU1RSSUNUIHExLCBpbnQgdGhyZXNoKSB7CisrICBjb25z dCB1OHgxNiBzaWduID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikweDgwKTsKKysgIGNvbnN0 IHU4eDE2IHQxID0gQUJTVSgqcDEsICpxMSk7CisrICBjb25zdCB1OHgxNiB0MiA9IHZlY19hbmQo dDEsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhGRSkpOworKyAgY29uc3QgdTh4MTYgdDMg PSAodTh4MTYpdmVjX3NyKCh1MTZ4OCl0MiwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMSkp OworKyAgY29uc3QgdTh4MTYgdDQgPSBBQlNVKCpwMCwgKnEwKTsKKysgIGNvbnN0IHU4eDE2IHQ2 ID0gdmVjX2FkZHModmVjX2FkZHModDQsIHQ0KSwgdDMpOworKyAgY29uc3QgdTh4MTYgdDcgPSB2 ZWNfc3Vicyh0NiwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcil0aHJlc2gpKTsKKysgIGNvbnN0 IHU4eDE2IG1hc2sgPSAodTh4MTYpdmVjX2NtcGVxKHQ3LCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBj aGFyKTApKTsKKysKKysgIGNvbnN0IGk4eDE2IHAxcyA9IChpOHgxNil2ZWNfeG9yKCpwMSwgc2ln bik7CisrICBjb25zdCBpOHgxNiBxMXMgPSAoaTh4MTYpdmVjX3hvcigqcTEsIHNpZ24pOworKyAg aTh4MTYgUDAgPSAoaTh4MTYpdmVjX3hvcigqcDAsIHNpZ24pOworKyAgaTh4MTYgUTAgPSAoaTh4 MTYpdmVjX3hvcigqcTAsIHNpZ24pOworKworKyAgY29uc3QgaTh4MTYgZDAgPSB2ZWNfc3VicyhR MCwgUDApOworKyAgY29uc3QgaTh4MTYgczEgPSB2ZWNfYWRkcyh2ZWNfc3VicyhwMXMsIHExcyks IGQwKTsKKysgIGk4eDE2IGEgPSB2ZWNfYWRkcyhkMCwgdmVjX2FkZHMoZDAsIHMxKSk7CisrICBh ID0gdmVjX2FuZChhLCAoaTh4MTYpbWFzayk7CisrICBjb25zdCBpOHgxNiB2MyA9IFNpZ25lZFNo aWZ0Myh2ZWNfYWRkcyhhLCB2ZWNfc3BsYXRzKChzaWduZWQgY2hhcikzKSkpOworKyAgY29uc3Qg aTh4MTYgdjQgPSBTaWduZWRTaGlmdDModmVjX2FkZHMoYSwgdmVjX3NwbGF0cygoc2lnbmVkIGNo YXIpNCkpKTsKKysgIFEwID0gdmVjX3N1YnMoUTAsIHY0KTsKKysgIFAwID0gdmVjX2FkZHMoUDAs IHYzKTsKKysgICpwMCA9IHZlY194b3IoKHU4eDE2KVAwLCBzaWduKTsKKysgICpxMCA9IHZlY194 b3IoKHU4eDE2KVEwLCBzaWduKTsKKyt9CisrCisrc3RhdGljIHZvaWQgU2ltcGxlVkZpbHRlcjE2 X1ZTWCh1aW50OF90KiBwLCBpbnQgc3RyaWRlLCBpbnQgdGhyZXNoKSB7CisrICB1OHgxNiBwMSA9 IHZlY194bCgwLCBwIC0gMiAqIHN0cmlkZSk7CisrICB1OHgxNiBwMCA9IHZlY194bCgwLCBwIC0g c3RyaWRlKTsKKysgIHU4eDE2IHEwID0gdmVjX3hsKDAsIHApOworKyAgdTh4MTYgcTEgPSB2ZWNf eGwoMCwgcCArIHN0cmlkZSk7CisrICBEb0ZpbHRlcjJfVlNYKCZwMSwgJnAwLCAmcTAsICZxMSwg dGhyZXNoKTsKKysgIHZlY194c3QocDAsIDAsIHAgLSBzdHJpZGUpOworKyAgdmVjX3hzdChxMCwg MCwgcCk7CisrfQorKworK3N0YXRpYyB2b2lkIFNpbXBsZVZGaWx0ZXIxNmlfVlNYKHVpbnQ4X3Qq IHAsIGludCBzdHJpZGUsIGludCB0aHJlc2gpIHsKKysgIGludCBrOworKyAgZm9yIChrID0gMzsg ayA+IDA7IC0taykgeworKyAgICBwICs9IDQgKiBzdHJpZGU7CisrICAgIFNpbXBsZVZGaWx0ZXIx Nl9WU1gocCwgc3RyaWRlLCB0aHJlc2gpOworKyAgfQorK30KKysKKysvLyBUcmFuc3Bvc2UgZm91 ciBjb2x1bW5zIG91dCBvZiAvIGludG8gMTYgcm93cyBmb3IgaG9yaXpvbnRhbC1lZGdlIGZpbHRl cmluZy4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBMb2FkOHg0KGNvbnN0IHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgYiwgaW50IHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 OHgxNiogV0VCUF9SRVNUUklDVCBwLCB1OHgxNiogV0VCUF9SRVNUUklDVCBxKSB7CisrICB1aW50 MzJfdCBhMFs0XSwgYTFbNF07CisrICBtZW1jcHkoJmEwWzBdLCBiICsgMCAqIHMsIDQpOyBtZW1j cHkoJmEwWzFdLCBiICsgNCAqIHMsIDQpOworKyAgbWVtY3B5KCZhMFsyXSwgYiArIDIgKiBzLCA0 KTsgbWVtY3B5KCZhMFszXSwgYiArIDYgKiBzLCA0KTsKKysgIG1lbWNweSgmYTFbMF0sIGIgKyAx ICogcywgNCk7IG1lbWNweSgmYTFbMV0sIGIgKyA1ICogcywgNCk7CisrICBtZW1jcHkoJmExWzJd LCBiICsgMyAqIHMsIDQpOyBtZW1jcHkoJmExWzNdLCBiICsgNyAqIHMsIDQpOworKyAgY29uc3Qg dTh4MTYgQTAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKWEwKTsKKysgIGNvbnN0IHU4eDE2 IEExID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKilhMSk7CisrICBjb25zdCB1OHgxNiBCMCA9 IHZlY19tZXJnZWgoQTAsIEExKSwgQjEgPSB2ZWNfbWVyZ2VsKEEwLCBBMSk7CisrICBjb25zdCB1 MTZ4OCBDMCA9IHZlY19tZXJnZWgoKHUxNng4KUIwLCAodTE2eDgpQjEpOworKyAgY29uc3QgdTE2 eDggQzEgPSB2ZWNfbWVyZ2VsKCh1MTZ4OClCMCwgKHUxNng4KUIxKTsKKysgICpwID0gKHU4eDE2 KXZlY19tZXJnZWgoKHUzMng0KUMwLCAodTMyeDQpQzEpOworKyAgKnEgPSAodTh4MTYpdmVjX21l cmdlbCgodTMyeDQpQzAsICh1MzJ4NClDMSk7CisrfQorKworK3N0YXRpYyBXRUJQX0lOTElORSB2 b2lkIExvYWQxNng0KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcjAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCByOCwg aW50IHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYqIHAxLCB1OHgx NiogcDAsIHU4eDE2KiBxMCwgdTh4MTYqIHExKSB7CisrICBMb2FkOHg0KHIwLCBzLCBwMSwgcTAp OworKyAgTG9hZDh4NChyOCwgcywgcDAsIHExKTsKKysgIGNvbnN0IHU4eDE2IHQxID0gKnAxLCB0 MiA9ICpxMDsKKysgICpwMSA9ICh1OHgxNil2ZWNfbWVyZ2VoKChpNjR4Mil0MSwgKGk2NHgyKSpw MCk7CisrICAqcDAgPSAodTh4MTYpdmVjX21lcmdlbCgoaTY0eDIpdDEsIChpNjR4MikqcDApOwor KyAgKnEwID0gKHU4eDE2KXZlY19tZXJnZWgoKGk2NHgyKXQyLCAoaTY0eDIpKnExKTsKKysgICpx MSA9ICh1OHgxNil2ZWNfbWVyZ2VsKChpNjR4Mil0MiwgKGk2NHgyKSpxMSk7CisrfQorKworK3N0 YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0b3JlNHg0KHU4eDE2IHgsIHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgZHN0LCBpbnQgcykgeworKyAgdW5zaWduZWQgY2hhciBiWzE2XTsKKysgIGludCBpOwor KyAgbWVtY3B5KGIsICZ4LCAxNik7CisrICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSBtZW1jcHko ZHN0ICsgaSAqIHMsIGIgKyA0ICogaSwgNCk7CisrfQorKworK3N0YXRpYyBXRUJQX0lOTElORSB2 b2lkIFN0b3JlMTZ4NCh1OHgxNiBwMSwgdTh4MTYgcDAsIHU4eDE2IHEwLCB1OHgxNiBxMSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBy MCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNU UklDVCByOCwgaW50IHMpIHsKKysgIHU4eDE2IHQgPSBwMDsKKysgIHU4eDE2IHAwcyA9IHZlY19t ZXJnZWgocDEsIHQpLCBwMXMgPSB2ZWNfbWVyZ2VsKHAxLCB0KTsKKysgIHQgPSBxMDsKKysgIHU4 eDE2IHEwcyA9IHZlY19tZXJnZWgodCwgcTEpLCBxMXMgPSB2ZWNfbWVyZ2VsKHQsIHExKTsKKysg IHQgPSBwMHM7CisrICBwMHMgPSAodTh4MTYpdmVjX21lcmdlaCgodTE2eDgpdCwgKHUxNng4KXEw cyk7CisrICBxMHMgPSAodTh4MTYpdmVjX21lcmdlbCgodTE2eDgpdCwgKHUxNng4KXEwcyk7Cisr ICB0ID0gcDFzOworKyAgcDFzID0gKHU4eDE2KXZlY19tZXJnZWgoKHUxNng4KXQsICh1MTZ4OClx MXMpOworKyAgcTFzID0gKHU4eDE2KXZlY19tZXJnZWwoKHUxNng4KXQsICh1MTZ4OClxMXMpOwor KyAgU3RvcmU0eDQocDBzLCByMCwgcyk7IFN0b3JlNHg0KHEwcywgcjAgKyA0ICogcywgcyk7Cisr ICBTdG9yZTR4NChwMXMsIHI4LCBzKTsgU3RvcmU0eDQocTFzLCByOCArIDQgKiBzLCBzKTsKKyt9 CisrCisrc3RhdGljIHZvaWQgU2ltcGxlSEZpbHRlcjE2X1ZTWCh1aW50OF90KiBwLCBpbnQgc3Ry aWRlLCBpbnQgdGhyZXNoKSB7CisrICB1OHgxNiBwMSwgcDAsIHEwLCBxMTsKKysgIHAgLT0gMjsg IC8vIGJlZ2lubmluZyBvZiBwMQorKyAgTG9hZDE2eDQocCwgcCArIDggKiBzdHJpZGUsIHN0cmlk ZSwgJnAxLCAmcDAsICZxMCwgJnExKTsKKysgIERvRmlsdGVyMl9WU1goJnAxLCAmcDAsICZxMCwg JnExLCB0aHJlc2gpOworKyAgU3RvcmUxNng0KHAxLCBwMCwgcTAsIHExLCBwLCBwICsgOCAqIHN0 cmlkZSwgc3RyaWRlKTsKKyt9CisrCisrc3RhdGljIHZvaWQgU2ltcGxlSEZpbHRlcjE2aV9WU1go dWludDhfdCogcCwgaW50IHN0cmlkZSwgaW50IHRocmVzaCkgeworKyAgaW50IGs7CisrICBmb3Ig KGsgPSAzOyBrID4gMDsgLS1rKSB7CisrICAgIHAgKz0gNDsKKysgICAgU2ltcGxlSEZpbHRlcjE2 X1ZTWChwLCBzdHJpZGUsIHRocmVzaCk7CisrICB9CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisrLy8gQ29tcGxleCBpbi1sb29wIGVkZ2UgZmlsdGVyaW5nICh2ZXJ0aWNhbC9sdW1h KS4KKysKKytzdGF0aWMgY29uc3QgdTh4MTYga1NpZ25CaXQgPSB7CisrICAgIDB4ODAsIDB4ODAs IDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsCisrICAgIDB4ODAsIDB4ODAsIDB4 ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODB9OworKyNkZWZpbmUgRkxJUEIoeCkgKCh4 KSA9IChpOHgxNil2ZWNfeG9yKCh1OHgxNikoeCksIGtTaWduQml0KSkKKysKKytzdGF0aWMgV0VC UF9JTkxJTkUgdTh4MTYgR2V0Tm90SEVWKHU4eDE2IHAxLCB1OHgxNiBwMCwgdTh4MTYgcTAsIHU4 eDE2IHExLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJl c2gpIHsKKysgIGNvbnN0IHU4eDE2IGQgPSB2ZWNfc3Vicyh2ZWNfbWF4KEFCU1UocDEsIHAwKSwg QUJTVShxMSwgcTApKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBjaGFyKWhldl90aHJlc2gpKTsKKysgIHJldHVybiAodTh4MTYpdmVjX2NtcGVxKGQs IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCkpOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJ TkUgaTh4MTYgR2V0QmFzZURlbHRhKGk4eDE2IHAxLCBpOHgxNiBwMCwgaTh4MTYgcTAsIGk4eDE2 IHExKSB7CisrICBjb25zdCBpOHgxNiBkID0gdmVjX3N1YnMocTAsIHAwKTsKKysgIGNvbnN0IGk4 eDE2IHMxID0gdmVjX2FkZHModmVjX3N1YnMocDEsIHExKSwgZCk7CisrICByZXR1cm4gdmVjX2Fk ZHMoZCwgdmVjX2FkZHMoZCwgczEpKTsKKyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQg RG9TaW1wbGVGaWx0ZXJTKGk4eDE2KiBwMCwgaTh4MTYqIHEwLCBpOHgxNiBmKSB7CisrICAqcTAg PSB2ZWNfc3VicygqcTAsIFNpZ25lZFNoaWZ0Myh2ZWNfYWRkcyhmLCB2ZWNfc3BsYXRzKChzaWdu ZWQgY2hhcik0KSkpKTsKKysgICpwMCA9IHZlY19hZGRzKCpwMCwgU2lnbmVkU2hpZnQzKHZlY19h ZGRzKGYsIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTMpKSkpOworK30KKysKKytzdGF0aWMgV0VC UF9JTkxJTkUgdm9pZCBVcGRhdGUyUGl4ZWxzKGk4eDE2KiBwaSwgaTh4MTYqIHFpLCBpMTZ4OCBs bywgaTE2eDggaGkpIHsKKysgIGNvbnN0IHUxNng4IHM3ID0gdmVjX3NwbGF0cygodW5zaWduZWQg c2hvcnQpNyk7CisrICBjb25zdCBpOHgxNiBkID0gKGk4eDE2KXZlY19wYWNrcyh2ZWNfc3JhKGxv LCBzNyksIHZlY19zcmEoaGksIHM3KSk7CisrICAqcGkgPSB2ZWNfYWRkcygqcGksIGQpOworKyAg KnFpID0gdmVjX3N1YnMoKnFpLCBkKTsKKysgIEZMSVBCKCpwaSk7CisrICBGTElQQigqcWkpOwor K30KKysKKysvLyBtYXNrID0gKG1heCBpbm5lciBhYnMtZGlmZiA8PSBpdGhyZXNoKSAmJiBOZWVk c0ZpbHRlcih0aHJlc2gpLgorK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBDb21wbGV4TWFzayh1 OHgxNiBwMywgdTh4MTYgcDIsIHU4eDE2IHAxLCB1OHgxNiBwMCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdTh4MTYgcTAsIHU4eDE2IHExLCB1OHgxNiBxMiwgdTh4MTYg cTMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aHJlc2gsIGlu dCBpdGhyZXNoKSB7CisrICB1OHgxNiBtID0gQUJTVShwMSwgcDApOworKyAgbSA9IHZlY19tYXgo bSwgQUJTVShwMywgcDIpKTsKKysgIG0gPSB2ZWNfbWF4KG0sIEFCU1UocDIsIHAxKSk7CisrICBt ID0gdmVjX21heChtLCBBQlNVKHExLCBxMCkpOworKyAgbSA9IHZlY19tYXgobSwgQUJTVShxMywg cTIpKTsKKysgIG0gPSB2ZWNfbWF4KG0sIEFCU1UocTIsIHExKSk7CisrICBjb25zdCB1OHgxNiB0 bSA9ICh1OHgxNil2ZWNfY21wZXEoCisrICAgICAgdmVjX3N1YnMobSwgdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcilpdGhyZXNoKSksCisrICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikw KSk7CisrICBjb25zdCB1OHgxNiB0MiA9IHZlY19hbmQoQUJTVShwMSwgcTEpLCB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBjaGFyKTB4RkUpKTsKKysgIGNvbnN0IHU4eDE2IHQzID0gKHU4eDE2KXZlY19z cigodTE2eDgpdDIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpKTsKKysgIGNvbnN0IHU4 eDE2IHQ2ID0gdmVjX2FkZHModmVjX2FkZHMoQUJTVShwMCwgcTApLCBBQlNVKHAwLCBxMCkpLCB0 Myk7CisrICBjb25zdCB1OHgxNiBmbSA9ICh1OHgxNil2ZWNfY21wZXEoCisrICAgICAgdmVjX3N1 YnModDYsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpdGhyZXNoKSksCisrICAgICAgdmVjX3Nw bGF0cygodW5zaWduZWQgY2hhcikwKSk7CisrICByZXR1cm4gdmVjX2FuZCh0bSwgZm0pOworK30K KysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRlcjQodTh4MTYqIHAxdSwgdTh4MTYq IHAwdSwgdTh4MTYqIHEwdSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4 MTYqIHExdSwgdTh4MTYgbWFzaywgaW50IGhldl90aHJlc2gpIHsKKysgIGNvbnN0IHU4eDE2IHpl cm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYgbm90X2hl diA9IEdldE5vdEhFVigqcDF1LCAqcDB1LCAqcTB1LCAqcTF1LCBoZXZfdGhyZXNoKTsKKysgIGk4 eDE2IHAxID0gKGk4eDE2KXZlY194b3IoKnAxdSwga1NpZ25CaXQpLCBwMCA9IChpOHgxNil2ZWNf eG9yKCpwMHUsIGtTaWduQml0KTsKKysgIGk4eDE2IHEwID0gKGk4eDE2KXZlY194b3IoKnEwdSwg a1NpZ25CaXQpLCBxMSA9IChpOHgxNil2ZWNfeG9yKCpxMXUsIGtTaWduQml0KTsKKysgIGk4eDE2 IHQxID0gdmVjX2FuZGModmVjX3N1YnMocDEsIHExKSwgKGk4eDE2KW5vdF9oZXYpOworKyAgY29u c3QgaTh4MTYgdDIgPSB2ZWNfc3VicyhxMCwgcDApOworKyAgdDEgPSB2ZWNfYWRkcyh0MSwgdDIp OyB0MSA9IHZlY19hZGRzKHQxLCB0Mik7IHQxID0gdmVjX2FkZHModDEsIHQyKTsKKysgIHQxID0g dmVjX2FuZCh0MSwgKGk4eDE2KW1hc2spOworKyAgY29uc3QgaTh4MTYgYTMgPSBTaWduZWRTaGlm dDModmVjX2FkZHModDEsIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTQpKSk7CisrICBwMCA9IHZl Y19hZGRzKHAwLCBTaWduZWRTaGlmdDModmVjX2FkZHModDEsIHZlY19zcGxhdHMoKHNpZ25lZCBj aGFyKTMpKSkpOworKyAgcTAgPSB2ZWNfc3VicyhxMCwgYTMpOworKyAgRkxJUEIocDApOyBGTElQ QihxMCk7CisrICBjb25zdCBpOHgxNiB0ID0gdmVjX2FkZChhMywgKGk4eDE2KWtTaWduQml0KTsK KysgIGk4eDE2IHQzID0gdmVjX3N1YigoaTh4MTYpdmVjX2F2ZygodTh4MTYpdCwgemVybyksIHZl Y19zcGxhdHMoKHNpZ25lZCBjaGFyKTY0KSk7CisrICB0MyA9IHZlY19hbmQoKGk4eDE2KW5vdF9o ZXYsIHQzKTsKKysgIHExID0gdmVjX3N1YnMocTEsIHQzKTsgcDEgPSB2ZWNfYWRkcyhwMSwgdDMp OworKyAgRkxJUEIocDEpOyBGTElQQihxMSk7CisrICAqcDF1ID0gKHU4eDE2KXAxOyAqcDB1ID0g KHU4eDE2KXAwOyAqcTB1ID0gKHU4eDE2KXEwOyAqcTF1ID0gKHU4eDE2KXExOworK30KKysKKytz dGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRlcjYodTh4MTYqIHAydSwgdTh4MTYqIHAxdSwg dTh4MTYqIHAwdSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYqIHEw dSwgdTh4MTYqIHExdSwgdTh4MTYqIHEydSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdTh4MTYgbWFzaywgaW50IGhldl90aHJlc2gpIHsKKysgIGNvbnN0IHU4eDE2IHplcm8g PSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYgbm90X2hldiA9 IEdldE5vdEhFVigqcDF1LCAqcDB1LCAqcTB1LCAqcTF1LCBoZXZfdGhyZXNoKTsKKysgIGk4eDE2 IHAyID0gKGk4eDE2KXZlY194b3IoKnAydSwga1NpZ25CaXQpLCBwMSA9IChpOHgxNil2ZWNfeG9y KCpwMXUsIGtTaWduQml0KTsKKysgIGk4eDE2IHAwID0gKGk4eDE2KXZlY194b3IoKnAwdSwga1Np Z25CaXQpLCBxMCA9IChpOHgxNil2ZWNfeG9yKCpxMHUsIGtTaWduQml0KTsKKysgIGk4eDE2IHEx ID0gKGk4eDE2KXZlY194b3IoKnExdSwga1NpZ25CaXQpLCBxMiA9IChpOHgxNil2ZWNfeG9yKCpx MnUsIGtTaWduQml0KTsKKysgIGNvbnN0IGk4eDE2IGEgPSBHZXRCYXNlRGVsdGEocDEsIHAwLCBx MCwgcTEpOworKyAgeyAgLy8gaGV2IHBpeGVsczogc2ltcGxlIGZpbHRlcgorKyAgICBjb25zdCBp OHgxNiBmID0gdmVjX2FuZChhLCAoaTh4MTYpdmVjX2FuZGMobWFzaywgbm90X2hldikpOworKyAg ICBEb1NpbXBsZUZpbHRlclMoJnAwLCAmcTAsIGYpOworKyAgfQorKyAgeyAgLy8gbm9uLWhldiBw aXhlbHM6IHN0cm9uZyBmaWx0ZXIKKysgICAgY29uc3QgaTh4MTYgZiA9IHZlY19hbmQoYSwgdmVj X2FuZCgoaTh4MTYpbm90X2hldiwgKGk4eDE2KW1hc2spKTsKKysgICAgY29uc3QgaTE2eDggazkg PSB2ZWNfc3BsYXRzKChzaG9ydCkweDA5MDApLCBrNjMgPSB2ZWNfc3BsYXRzKChzaG9ydCk2Myk7 CisrICAgIGNvbnN0IGkxNng4IGY5bG8gPSBNdWxIaTE2X1MoKGkxNng4KXZlY19tZXJnZWgoemVy bywgKHU4eDE2KWYpLCBrOSk7CisrICAgIGNvbnN0IGkxNng4IGY5aGkgPSBNdWxIaTE2X1MoKGkx Nng4KXZlY19tZXJnZWwoemVybywgKHU4eDE2KWYpLCBrOSk7CisrICAgIGNvbnN0IGkxNng4IGEy bG8gPSB2ZWNfYWRkKGY5bG8sIGs2MyksIGEyaGkgPSB2ZWNfYWRkKGY5aGksIGs2Myk7CisrICAg IGNvbnN0IGkxNng4IGExbG8gPSB2ZWNfYWRkKGEybG8sIGY5bG8pLCBhMWhpID0gdmVjX2FkZChh MmhpLCBmOWhpKTsKKysgICAgY29uc3QgaTE2eDggYTBsbyA9IHZlY19hZGQoYTFsbywgZjlsbyks IGEwaGkgPSB2ZWNfYWRkKGExaGksIGY5aGkpOworKyAgICBVcGRhdGUyUGl4ZWxzKCZwMiwgJnEy LCBhMmxvLCBhMmhpKTsKKysgICAgVXBkYXRlMlBpeGVscygmcDEsICZxMSwgYTFsbywgYTFoaSk7 CisrICAgIFVwZGF0ZTJQaXhlbHMoJnAwLCAmcTAsIGEwbG8sIGEwaGkpOworKyAgfQorKyAgKnAy dSA9ICh1OHgxNilwMjsgKnAxdSA9ICh1OHgxNilwMTsgKnAwdSA9ICh1OHgxNilwMDsKKysgICpx MHUgPSAodTh4MTYpcTA7ICpxMXUgPSAodTh4MTYpcTE7ICpxMnUgPSAodTh4MTYpcTI7CisrfQor KworK3N0YXRpYyB2b2lkIFZGaWx0ZXIxNl9WU1godWludDhfdCogcCwgaW50IHMsIGludCB0aHJl c2gsIGludCBpdGhyZXNoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJl c2gpIHsKKysgIHU4eDE2IHAzID0gdmVjX3hsKDAsIHAgLSA0ICogcyksIHAyID0gdmVjX3hsKDAs IHAgLSAzICogcyk7CisrICB1OHgxNiBwMSA9IHZlY194bCgwLCBwIC0gMiAqIHMpLCBwMCA9IHZl Y194bCgwLCBwIC0gcyk7CisrICB1OHgxNiBxMCA9IHZlY194bCgwLCBwKSwgcTEgPSB2ZWNfeGwo MCwgcCArIHMpOworKyAgdTh4MTYgcTIgPSB2ZWNfeGwoMCwgcCArIDIgKiBzKSwgcTMgPSB2ZWNf eGwoMCwgcCArIDMgKiBzKTsKKysgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywgcDIs IHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7CisrICBEb0ZpbHRlcjYo JnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwgaGV2X3RocmVzaCk7CisrICB2ZWNfeHN0 KHAyLCAwLCBwIC0gMyAqIHMpOyB2ZWNfeHN0KHAxLCAwLCBwIC0gMiAqIHMpOyB2ZWNfeHN0KHAw LCAwLCBwIC0gcyk7CisrICB2ZWNfeHN0KHEwLCAwLCBwKTsgdmVjX3hzdChxMSwgMCwgcCArIHMp OyB2ZWNfeHN0KHEyLCAwLCBwICsgMiAqIHMpOworK30KKysKKytzdGF0aWMgdm9pZCBWRmlsdGVy MTZpX1ZTWCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVzaCwgaW50IGl0aHJlc2gsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJlc2gpIHsKKysgIGludCBrOworKyAg Zm9yIChrID0gMzsgayA+IDA7IC0taykgeworKyAgICBwICs9IDQgKiBzOworKyAgICB1OHgxNiBw MyA9IHZlY194bCgwLCBwIC0gNCAqIHMpLCBwMiA9IHZlY194bCgwLCBwIC0gMyAqIHMpOworKyAg ICB1OHgxNiBwMSA9IHZlY194bCgwLCBwIC0gMiAqIHMpLCBwMCA9IHZlY194bCgwLCBwIC0gcyk7 CisrICAgIHU4eDE2IHEwID0gdmVjX3hsKDAsIHApLCBxMSA9IHZlY194bCgwLCBwICsgcyk7Cisr ICAgIHU4eDE2IHEyID0gdmVjX3hsKDAsIHAgKyAyICogcyksIHEzID0gdmVjX3hsKDAsIHAgKyAz ICogcyk7CisrICAgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwg cTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7CisrICAgIERvRmlsdGVyNCgmcDEsICZw MCwgJnEwLCAmcTEsIG0sIGhldl90aHJlc2gpOworKyAgICB2ZWNfeHN0KHAxLCAwLCBwIC0gMiAq IHMpOyB2ZWNfeHN0KHAwLCAwLCBwIC0gcyk7CisrICAgIHZlY194c3QocTAsIDAsIHApOyB2ZWNf eHN0KHExLCAwLCBwICsgcyk7CisrICB9CisrfQorKworKy8vIENvbXBsZXggaG9yaXpvbnRhbCBs dW1hOiB0d28gMTZ4NCB0cmFuc3Bvc2VzIGFyb3VuZCB0aGUgdmVydGljYWwgZWRnZSBmZWVkCisr Ly8gdGhlIHNhbWUgRG9GaWx0ZXI0L0RvRmlsdGVyNiB1c2VkIGJ5IHRoZSB2ZXJ0aWNhbCB2YXJp YW50cy4KKytzdGF0aWMgdm9pZCBIRmlsdGVyMTZfVlNYKHVpbnQ4X3QqIHAsIGludCBzLCBpbnQg dGhyZXNoLCBpbnQgaXRocmVzaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZXZf dGhyZXNoKSB7CisrICB1aW50OF90KiBjb25zdCBiID0gcCAtIDQ7CisrICB1OHgxNiBwMywgcDIs IHAxLCBwMCwgcTAsIHExLCBxMiwgcTM7CisrICBMb2FkMTZ4NChiLCBiICsgOCAqIHMsIHMsICZw MywgJnAyLCAmcDEsICZwMCk7CisrICBMb2FkMTZ4NChwLCBwICsgOCAqIHMsIHMsICZxMCwgJnEx LCAmcTIsICZxMyk7CisrICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwg cDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgRG9GaWx0ZXI2KCZwMiwg JnAxLCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJlc2gpOworKyAgU3RvcmUxNng0KHAz LCBwMiwgcDEsIHAwLCBiLCBiICsgOCAqIHMsIHMpOworKyAgU3RvcmUxNng0KHEwLCBxMSwgcTIs IHEzLCBwLCBwICsgOCAqIHMsIHMpOworK30KKysKKytzdGF0aWMgdm9pZCBIRmlsdGVyMTZpX1ZT WCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVzaCwgaW50IGl0aHJlc2gsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJlc2gpIHsKKysgIGludCBrOworKyAgZm9yIChr ID0gMzsgayA+IDA7IC0taykgeworKyAgICBwICs9IDQ7CisrICAgIHU4eDE2IHAzLCBwMiwgcDEs IHAwLCBxMCwgcTEsIHEyLCBxMzsKKysgICAgTG9hZDE2eDQocCAtIDQsIHAgLSA0ICsgOCAqIHMs IHMsICZwMywgJnAyLCAmcDEsICZwMCk7CisrICAgIExvYWQxNng0KHAsIHAgKyA4ICogcywgcywg JnEwLCAmcTEsICZxMiwgJnEzKTsKKysgICAgY29uc3QgdTh4MTYgbSA9CisrICAgICAgICBDb21w bGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7 CisrICAgIERvRmlsdGVyNCgmcDEsICZwMCwgJnEwLCAmcTEsIG0sIGhldl90aHJlc2gpOworKyAg ICBTdG9yZTE2eDQocDEsIHAwLCBxMCwgcTEsIHAgLSAyLCBwIC0gMiArIDggKiBzLCBzKTsKKysg IH0KKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBDb21wbGV4IGNocm9tYSBm aWx0ZXJpbmc6IG9wZXJhdGUgb24gdGhlIHUgYW5kIHYgcGxhbmVzICg4IHdpZGUpIHRvZ2V0aGVy LgorKworKy8vIFBhY2sgOCB1LWJ5dGVzIGludG8gdGhlIGxvdyBoYWxmIGFuZCA4IHYtYnl0ZXMg aW50byB0aGUgaGlnaCBoYWxmLgorK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBMb2FkVVYoY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2KSB7CisrICB1bnNpZ25lZCBjaGFy IGJbMTZdOworKyAgbWVtY3B5KGIsIHUsIDgpOworKyAgbWVtY3B5KGIgKyA4LCB2LCA4KTsKKysg IHJldHVybiB2ZWNfeGwoMCwgYik7CisrfQorKworK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0 b3JlVVYodTh4MTYgeCwgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCB2KSB7CisrICB1bnNpZ25l ZCBjaGFyIGJbMTZdOworKyAgbWVtY3B5KGIsICZ4LCAxNik7CisrICBtZW1jcHkodSwgYiwgOCk7 CisrICBtZW1jcHkodiwgYiArIDgsIDgpOworK30KKysKKytzdGF0aWMgdm9pZCBWRmlsdGVyOF9W U1godWludDhfdCogV0VCUF9SRVNUUklDVCB1LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisr ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwg aW50IGhldl90aHJlc2gpIHsKKysgIHU4eDE2IHAzID0gTG9hZFVWKHUgLSA0ICogcywgdiAtIDQg KiBzKSwgcDIgPSBMb2FkVVYodSAtIDMgKiBzLCB2IC0gMyAqIHMpOworKyAgdTh4MTYgcDEgPSBM b2FkVVYodSAtIDIgKiBzLCB2IC0gMiAqIHMpLCBwMCA9IExvYWRVVih1IC0gcywgdiAtIHMpOwor KyAgdTh4MTYgcTAgPSBMb2FkVVYodSwgdiksIHExID0gTG9hZFVWKHUgKyBzLCB2ICsgcyk7Cisr ICB1OHgxNiBxMiA9IExvYWRVVih1ICsgMiAqIHMsIHYgKyAyICogcyksIHEzID0gTG9hZFVWKHUg KyAzICogcywgdiArIDMgKiBzKTsKKysgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywg cDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7CisrICBEb0ZpbHRl cjYoJnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwgaGV2X3RocmVzaCk7CisrICBTdG9y ZVVWKHAyLCB1IC0gMyAqIHMsIHYgLSAzICogcyk7IFN0b3JlVVYocDEsIHUgLSAyICogcywgdiAt IDIgKiBzKTsKKysgIFN0b3JlVVYocDAsIHUgLSBzLCB2IC0gcyk7IFN0b3JlVVYocTAsIHUsIHYp OworKyAgU3RvcmVVVihxMSwgdSArIHMsIHYgKyBzKTsgU3RvcmVVVihxMiwgdSArIDIgKiBzLCB2 ICsgMiAqIHMpOworK30KKysKKytzdGF0aWMgdm9pZCBWRmlsdGVyOGlfVlNYKHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgdSwgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLCBpbnQgaGV2X3RocmVz aCkgeworKyAgdSArPSA0ICogczsgdiArPSA0ICogczsKKysgIHU4eDE2IHAzID0gTG9hZFVWKHUg LSA0ICogcywgdiAtIDQgKiBzKSwgcDIgPSBMb2FkVVYodSAtIDMgKiBzLCB2IC0gMyAqIHMpOwor KyAgdTh4MTYgcDEgPSBMb2FkVVYodSAtIDIgKiBzLCB2IC0gMiAqIHMpLCBwMCA9IExvYWRVVih1 IC0gcywgdiAtIHMpOworKyAgdTh4MTYgcTAgPSBMb2FkVVYodSwgdiksIHExID0gTG9hZFVWKHUg KyBzLCB2ICsgcyk7CisrICB1OHgxNiBxMiA9IExvYWRVVih1ICsgMiAqIHMsIHYgKyAyICogcyks IHEzID0gTG9hZFVWKHUgKyAzICogcywgdiArIDMgKiBzKTsKKysgIGNvbnN0IHU4eDE2IG0gPSBD b21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVz aCk7CisrICBEb0ZpbHRlcjQoJnAxLCAmcDAsICZxMCwgJnExLCBtLCBoZXZfdGhyZXNoKTsKKysg IFN0b3JlVVYocDEsIHUgLSAyICogcywgdiAtIDIgKiBzKTsgU3RvcmVVVihwMCwgdSAtIHMsIHYg LSBzKTsKKysgIFN0b3JlVVYocTAsIHUsIHYpOyBTdG9yZVVWKHExLCB1ICsgcywgdiArIHMpOwor K30KKysKKytzdGF0aWMgdm9pZCBIRmlsdGVyOF9WU1godWludDhfdCogV0VCUF9SRVNUUklDVCB1 LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwgaW50IGhldl90aHJlc2gpIHsKKysgIHU4eDE2 IHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMzsKKysgIExvYWQxNng0KHUgLSA0LCB2IC0g NCwgcywgJnAzLCAmcDIsICZwMSwgJnAwKTsKKysgIExvYWQxNng0KHUsIHYsIHMsICZxMCwgJnEx LCAmcTIsICZxMyk7CisrICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwg cDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgRG9GaWx0ZXI2KCZwMiwg JnAxLCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJlc2gpOworKyAgU3RvcmUxNng0KHAz LCBwMiwgcDEsIHAwLCB1IC0gNCwgdiAtIDQsIHMpOworKyAgU3RvcmUxNng0KHEwLCBxMSwgcTIs IHEzLCB1LCB2LCBzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgSEZpbHRlcjhpX1ZTWCh1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHUsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwgaW50IGhldl90 aHJlc2gpIHsKKysgIHUgKz0gNDsgdiArPSA0OworKyAgdTh4MTYgcDMsIHAyLCBwMSwgcDAsIHEw LCBxMSwgcTIsIHEzOworKyAgTG9hZDE2eDQodSAtIDQsIHYgLSA0LCBzLCAmcDMsICZwMiwgJnAx LCAmcDApOworKyAgTG9hZDE2eDQodSwgdiwgcywgJnEwLCAmcTEsICZxMiwgJnEzKTsKKysgIGNv bnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMs IHRocmVzaCwgaXRocmVzaCk7CisrICBEb0ZpbHRlcjQoJnAxLCAmcDAsICZxMCwgJnExLCBtLCBo ZXZfdGhyZXNoKTsKKysgIFN0b3JlMTZ4NChwMSwgcDAsIHEwLCBxMSwgdSAtIDIsIHYgLSAyLCBz KTsKKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBJbnRyYSBwcmVkaWN0aW9u ICgxNngxNiBsdW1hLCA4eDggY2hyb21hKS4gREMgdG9wLXN1bXMgYXJlIHNjYWxhciAodGhlIFNJ TUQKKysvLyB3aW4gaXMgdGhlIGJsb2NrIGZpbGwpOyBUcnVlTW90aW9uL1ZFL0hFIGFyZSB2ZWN0 b3JpemVkLgorKworK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFB1dDE2KHVpbnQ4X3QgdiwgdWlu dDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB4ID0gdmVjX3NwbGF0cyh2KTsKKysgIGludCBq OworKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHZlY194c3QoeCwgMCwgZHN0ICsgaiAqIEJQ Uyk7CisrfQorK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFB1dDh4OHV2KHVpbnQ4X3QgdiwgdWlu dDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB4ID0gdmVjX3NwbGF0cyh2KTsKKysgIHVuc2ln bmVkIGNoYXIgYlsxNl07CisrICBpbnQgajsKKysgIG1lbWNweShiLCAmeCwgMTYpOworKyAgZm9y IChqID0gMDsgaiA8IDg7ICsraikgbWVtY3B5KGRzdCArIGogKiBCUFMsIGIsIDgpOworK30KKysK KytzdGF0aWMgdm9pZCBWRTE2X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IHU4eDE2IHRv cCA9IHZlY194bCgwLCBkc3QgLSBCUFMpOworKyAgaW50IGo7CisrICBmb3IgKGogPSAwOyBqIDwg MTY7ICsraikgdmVjX3hzdCh0b3AsIDAsIGRzdCArIGogKiBCUFMpOworK30KKytzdGF0aWMgdm9p ZCBIRTE2X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGludCBqOworKyAgZm9yIChqID0gMDsgaiA8 IDE2OyArK2opIHZlY194c3QodmVjX3NwbGF0cyhkc3RbLTEgKyBqICogQlBTXSksIDAsIGRzdCAr IGogKiBCUFMpOworK30KKytzdGF0aWMgdm9pZCBEQzE2X1ZTWCh1aW50OF90KiBkc3QpIHsKKysg IGludCBzID0gMTYsIGo7CisrICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgcyArPSBkc3RbLUJQ UyArIGpdICsgZHN0Wy0xICsgaiAqIEJQU107CisrICBQdXQxNihzID4+IDUsIGRzdCk7CisrfQor K3N0YXRpYyB2b2lkIERDMTZOb1RvcF9WU1godWludDhfdCogZHN0KSB7CisrICBpbnQgcyA9IDgs IGo7CisrICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgcyArPSBkc3RbLTEgKyBqICogQlBTXTsK KysgIFB1dDE2KHMgPj4gNCwgZHN0KTsKKyt9Cisrc3RhdGljIHZvaWQgREMxNk5vTGVmdF9WU1go dWludDhfdCogZHN0KSB7CisrICBpbnQgcyA9IDgsIGo7CisrICBmb3IgKGogPSAwOyBqIDwgMTY7 ICsraikgcyArPSBkc3RbLUJQUyArIGpdOworKyAgUHV0MTYocyA+PiA0LCBkc3QpOworK30KKytz dGF0aWMgdm9pZCBEQzE2Tm9Ub3BMZWZ0X1ZTWCh1aW50OF90KiBkc3QpIHsgUHV0MTYoMHg4MCwg ZHN0KTsgfQorK3N0YXRpYyB2b2lkIFRNMTZfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgY29uc3Qg dTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICBjb25zdCB1OHgx NiB0ID0gdmVjX3hsKDAsIGRzdCAtIEJQUyk7CisrICBjb25zdCBpMTZ4OCB0bCA9IChpMTZ4OCl2 ZWNfbWVyZ2VoKHQsIHplcm8pLCB0aCA9IChpMTZ4OCl2ZWNfbWVyZ2VsKHQsIHplcm8pOworKyAg Y29uc3QgaW50IGMgPSBkc3RbLUJQUyAtIDFdOworKyAgaW50IHk7CisrICBmb3IgKHkgPSAwOyB5 IDwgMTY7ICsreSkgeworKyAgICBjb25zdCBpMTZ4OCBiID0gdmVjX3NwbGF0cygoc2hvcnQpKGRz dFstMSArIHkgKiBCUFNdIC0gYykpOworKyAgICB2ZWNfeHN0KCh1OHgxNil2ZWNfcGFja3N1KHZl Y19hZGQoYiwgdGwpLCB2ZWNfYWRkKGIsIHRoKSksIDAsIGRzdCArIHkgKiBCUFMpOworKyAgfQor K30KKysKKytzdGF0aWMgdm9pZCBWRTh1dl9WU1godWludDhfdCogZHN0KSB7CisrICB1bnNpZ25l ZCBjaGFyIHRbOF07CisrICBpbnQgajsKKysgIG1lbWNweSh0LCBkc3QgLSBCUFMsIDgpOworKyAg Zm9yIChqID0gMDsgaiA8IDg7ICsraikgbWVtY3B5KGRzdCArIGogKiBCUFMsIHQsIDgpOworK30K KytzdGF0aWMgdm9pZCBEQzh1dl9WU1godWludDhfdCogZHN0KSB7CisrICBpbnQgcyA9IDgsIGo7 CisrICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBzICs9IGRzdFstQlBTICsgal0gKyBkc3RbLTEg KyBqICogQlBTXTsKKysgIFB1dDh4OHV2KHMgPj4gNCwgZHN0KTsKKyt9Cisrc3RhdGljIHZvaWQg REM4dXZOb1RvcF9WU1godWludDhfdCogZHN0KSB7CisrICBpbnQgcyA9IDQsIGo7CisrICBmb3Ig KGogPSAwOyBqIDwgODsgKytqKSBzICs9IGRzdFstMSArIGogKiBCUFNdOworKyAgUHV0OHg4dXYo cyA+PiAzLCBkc3QpOworK30KKytzdGF0aWMgdm9pZCBEQzh1dk5vTGVmdF9WU1godWludDhfdCog ZHN0KSB7CisrICBpbnQgcyA9IDQsIGo7CisrICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBzICs9 IGRzdFstQlBTICsgal07CisrICBQdXQ4eDh1dihzID4+IDMsIGRzdCk7CisrfQorK3N0YXRpYyB2 b2lkIERDOHV2Tm9Ub3BMZWZ0X1ZTWCh1aW50OF90KiBkc3QpIHsgUHV0OHg4dXYoMHg4MCwgZHN0 KTsgfQorK3N0YXRpYyB2b2lkIFRNOHV2X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IHU4 eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYg dCA9IHZlY194bCgwLCBkc3QgLSBCUFMpOworKyAgY29uc3QgaTE2eDggdGwgPSAoaTE2eDgpdmVj X21lcmdlaCh0LCB6ZXJvKTsKKysgIGNvbnN0IGludCBjID0gZHN0Wy1CUFMgLSAxXTsKKysgIGlu dCB5OworKyAgZm9yICh5ID0gMDsgeSA8IDg7ICsreSkgeworKyAgICBjb25zdCBpMTZ4OCBiID0g dmVjX3NwbGF0cygoc2hvcnQpKGRzdFstMSArIHkgKiBCUFNdIC0gYykpOworKyAgICBjb25zdCB1 OHgxNiBvID0gKHU4eDE2KXZlY19wYWNrc3UodmVjX2FkZChiLCB0bCksIHZlY19zcGxhdHMoKHNo b3J0KTApKTsKKysgICAgdW5zaWduZWQgY2hhciBiYlsxNl07CisrICAgIG1lbWNweShiYiwgJm8s IDE2KTsKKysgICAgbWVtY3B5KGRzdCArIHkgKiBCUFMsIGJiLCA4KTsKKysgIH0KKyt9CisrCisr Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyA0eDQgbHVtYSBpbnRyYSBwcmVkaWN0aW9uLiBX aG9sZS12ZWN0b3IgYnl0ZSBzaGlmdHMgd2luZG93IHRoZSBlZGdlIHNhbXBsZXM6CisrLy8gICBz cmxpX3NpMTI4KHgsbikgPT0gdmVjX3NsZCh6ZXJvLCB4LCAxNiAtIG4pCisrLy8gICBzbGxpX3Np MTI4KHgsbikgPT0gdmVjX3NsZCh4LCB6ZXJvLCBuKQorKworKyNkZWZpbmUgU1JMSSh4LCBuKSB2 ZWNfc2xkKHplcm8sICh4KSwgMTYgLSAobikpCisrI2RlZmluZSBTTExJKHgsIG4pIHZlY19zbGQo KHgpLCB6ZXJvLCAobikpCisrI2RlZmluZSBJTlMxNih2LCB2YWwsIGkpICgodTh4MTYpdmVjX2lu c2VydCgoc2hvcnQpKHZhbCksIChpMTZ4OCkodiksIChpKSkpCisrI2RlZmluZSBBVkczQyhhLCBi LCBjKSAoKHVpbnQ4X3QpKCgoYSkgKyAyICogKGIpICsgKGMpICsgMikgPj4gMikpCisrCisrc3Rh dGljIFdFQlBfSU5MSU5FIHU4eDE2IExvYWQ2NChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNU IHApIHsKKysgIHVuc2lnbmVkIGNoYXIgYlsxNl0gPSB7MH07CisrICBtZW1jcHkoYiwgcCwgOCk7 CisrICByZXR1cm4gdmVjX3hsKDAsIGIpOworK30KKytzdGF0aWMgV0VCUF9JTkxJTkUgdWludDMy X3QgR2V0V29yZCh1OHgxNiB2KSB7CisrICB1bnNpZ25lZCBjaGFyIGJbMTZdOworKyAgdWludDMy X3QgcjsKKysgIG1lbWNweShiLCAmdiwgMTYpOworKyAgbWVtY3B5KCZyLCBiLCA0KTsKKysgIHJl dHVybiByOworK30KKytzdGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgU2V0V29yZCh1aW50MzJfdCB2 KSB7CisrICB1bnNpZ25lZCBjaGFyIGJbMTZdID0gezB9OworKyAgbWVtY3B5KGIsICZ2LCA0KTsK KysgIHJldHVybiB2ZWNfeGwoMCwgYik7CisrfQorK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0 b3JlV29yZCh1aW50MzJfdCB2LCB1aW50OF90KiBkc3QpIHsKKysgIG1lbWNweShkc3QsICZ2LCA0 KTsKKyt9CisrCisrc3RhdGljIHZvaWQgVkU0X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0 IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApLCBvbmUgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTEpOworKyAgY29uc3QgdTh4MTYgQSA9IExvYWQ2NChkc3QgLSBC UFMgLSAxKSwgQiA9IFNSTEkoQSwgMSksIEMgPSBTUkxJKEEsIDIpOworKyAgY29uc3QgdTh4MTYg YSA9IHZlY19hdmcoQSwgQyksIGxzYiA9IHZlY19hbmQodmVjX3hvcihBLCBDKSwgb25lKTsKKysg IGNvbnN0IHU4eDE2IGF2ZyA9IHZlY19hdmcodmVjX3N1YnMoYSwgbHNiKSwgQik7CisrICBjb25z dCB1aW50MzJfdCB2ID0gR2V0V29yZChhdmcpOworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBp IDwgNDsgKytpKSBTdG9yZVdvcmQodiwgZHN0ICsgaSAqIEJQUyk7CisrfQorK3N0YXRpYyB2b2lk IExENF9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0 cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsK KysgIGNvbnN0IHU4eDE2IEEgPSBMb2FkNjQoZHN0IC0gQlBTKSwgQiA9IFNSTEkoQSwgMSksIEMg PSBTUkxJKEEsIDIpOworKyAgY29uc3QgdTh4MTYgQ0ggPSBJTlMxNihDLCBkc3RbLUJQUyArIDdd LCAzKTsKKysgIGNvbnN0IHU4eDE2IGExID0gdmVjX2F2ZyhBLCBDSCksIGxzYiA9IHZlY19hbmQo dmVjX3hvcihBLCBDSCksIG9uZSk7CisrICBjb25zdCB1OHgxNiByID0gdmVjX2F2Zyh2ZWNfc3Vi cyhhMSwgbHNiKSwgQik7CisrICBTdG9yZVdvcmQoR2V0V29yZChyKSwgZHN0ICsgMCAqIEJQUyk7 CisrICBTdG9yZVdvcmQoR2V0V29yZChTUkxJKHIsIDEpKSwgZHN0ICsgMSAqIEJQUyk7CisrICBT dG9yZVdvcmQoR2V0V29yZChTUkxJKHIsIDIpKSwgZHN0ICsgMiAqIEJQUyk7CisrICBTdG9yZVdv cmQoR2V0V29yZChTUkxJKHIsIDMpKSwgZHN0ICsgMyAqIEJQUyk7CisrfQorK3N0YXRpYyB2b2lk IFZSNF9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0 cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsK KysgIGNvbnN0IGludCBJID0gZHN0Wy0xICsgMCAqIEJQU10sIEogPSBkc3RbLTEgKyAxICogQlBT XSwgSyA9IGRzdFstMSArIDIgKiBCUFNdOworKyAgY29uc3QgaW50IFggPSBkc3RbLTEgLSBCUFNd OworKyAgY29uc3QgdTh4MTYgWEEgPSBMb2FkNjQoZHN0IC0gQlBTIC0gMSksIEEwID0gU1JMSShY QSwgMSk7CisrICBjb25zdCB1OHgxNiBhYmNkID0gdmVjX2F2ZyhYQSwgQTApOworKyAgY29uc3Qg dTh4MTYgSVggPSBJTlMxNihTTExJKFhBLCAxKSwgKEkgfCAoWCA8PCA4KSksIDApOworKyAgY29u c3QgdTh4MTYgYTEgPSB2ZWNfYXZnKElYLCBBMCksIGxzYiA9IHZlY19hbmQodmVjX3hvcihJWCwg QTApLCBvbmUpOworKyAgY29uc3QgdTh4MTYgZWZnaCA9IHZlY19hdmcodmVjX3N1YnMoYTEsIGxz YiksIFhBKTsKKysgIFN0b3JlV29yZChHZXRXb3JkKGFiY2QpLCBkc3QgKyAwICogQlBTKTsKKysg IFN0b3JlV29yZChHZXRXb3JkKGVmZ2gpLCBkc3QgKyAxICogQlBTKTsKKysgIFN0b3JlV29yZChH ZXRXb3JkKFNMTEkoYWJjZCwgMSkpLCBkc3QgKyAyICogQlBTKTsKKysgIFN0b3JlV29yZChHZXRX b3JkKFNMTEkoZWZnaCwgMSkpLCBkc3QgKyAzICogQlBTKTsKKysgIGRzdFswICsgMiAqIEJQU10g PSBBVkczQyhKLCBJLCBYKTsKKysgIGRzdFswICsgMyAqIEJQU10gPSBBVkczQyhLLCBKLCBJKTsK Kyt9Cisrc3RhdGljIHZvaWQgVkw0X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IHU4eDE2 IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApLCBvbmUgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBjaGFyKTEpOworKyAgY29uc3QgdTh4MTYgQSA9IExvYWQ2NChkc3QgLSBCUFMpLCBC ID0gU1JMSShBLCAxKSwgQyA9IFNSTEkoQSwgMik7CisrICBjb25zdCB1OHgxNiBhMSA9IHZlY19h dmcoQSwgQiksIGEyID0gdmVjX2F2ZyhDLCBCKSwgYTMgPSB2ZWNfYXZnKGExLCBhMik7CisrICBj b25zdCB1OHgxNiBsc2IxID0gdmVjX2FuZCh2ZWNfeG9yKGExLCBhMiksIG9uZSk7CisrICBjb25z dCB1OHgxNiBhYmJjID0gdmVjX29yKHZlY194b3IoQSwgQiksIHZlY194b3IoQywgQikpOworKyAg Y29uc3QgdTh4MTYgYTQgPSB2ZWNfc3VicyhhMywgdmVjX2FuZChhYmJjLCBsc2IxKSk7CisrICBj b25zdCB1aW50MzJfdCBleHRyYSA9IEdldFdvcmQoU1JMSShhNCwgNCkpOworKyAgU3RvcmVXb3Jk KEdldFdvcmQoYTEpLCBkc3QgKyAwICogQlBTKTsKKysgIFN0b3JlV29yZChHZXRXb3JkKGE0KSwg ZHN0ICsgMSAqIEJQUyk7CisrICBTdG9yZVdvcmQoR2V0V29yZChTUkxJKGExLCAxKSksIGRzdCAr IDIgKiBCUFMpOworKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShhNCwgMSkpLCBkc3QgKyAzICog QlBTKTsKKysgIGRzdFszICsgMiAqIEJQU10gPSAoZXh0cmEgPj4gMCkgJiAweGZmOworKyAgZHN0 WzMgKyAzICogQlBTXSA9IChleHRyYSA+PiA4KSAmIDB4ZmY7CisrfQorK3N0YXRpYyB2b2lkIFJE NF9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsKKysg IGNvbnN0IHVpbnQzMl90IEkgPSBkc3RbLTEgKyAwICogQlBTXSwgSiA9IGRzdFstMSArIDEgKiBC UFNdOworKyAgY29uc3QgdWludDMyX3QgSyA9IGRzdFstMSArIDIgKiBCUFNdLCBMID0gZHN0Wy0x ICsgMyAqIEJQU107CisrICBjb25zdCB1OHgxNiBYQSA9IExvYWQ2NChkc3QgLSBCUFMgLSAxKTsK KysgIGNvbnN0IHU4eDE2IGFsbCA9IHZlY19vcihTZXRXb3JkKCh1aW50MzJfdCkoTCB8IChLIDw8 IDgpIHwgKEogPDwgMTYpIHwgKEkgPDwgMjQpKSksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgU0xMSShYQSwgNCkpOworKyAgY29uc3QgdTh4MTYgazEgPSBTUkxJKGFsbCwgMSksIGoyID0g U1JMSShhbGwsIDIpOworKyAgY29uc3QgdTh4MTYgYTEgPSB2ZWNfYXZnKGoyLCBhbGwpLCBsc2Ig PSB2ZWNfYW5kKHZlY194b3IoajIsIGFsbCksIG9uZSk7CisrICBjb25zdCB1OHgxNiByID0gdmVj X2F2Zyh2ZWNfc3VicyhhMSwgbHNiKSwgazEpOworKyAgU3RvcmVXb3JkKEdldFdvcmQociksIGRz dCArIDMgKiBCUFMpOworKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShyLCAxKSksIGRzdCArIDIg KiBCUFMpOworKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShyLCAyKSksIGRzdCArIDEgKiBCUFMp OworKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShyLCAzKSksIGRzdCArIDAgKiBCUFMpOworK30K KytzdGF0aWMgdm9pZCBUTTRfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgY29uc3QgdTh4MTYgemVy byA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICBjb25zdCB1OHgxNiB0ID0gTG9h ZDY0KGRzdCAtIEJQUyk7CisrICBjb25zdCBpMTZ4OCB0YiA9IChpMTZ4OCl2ZWNfbWVyZ2VoKHQs IHplcm8pOworKyAgY29uc3QgaW50IGMgPSBkc3RbLUJQUyAtIDFdOworKyAgaW50IHk7CisrICBm b3IgKHkgPSAwOyB5IDwgNDsgKyt5KSB7CisrICAgIGNvbnN0IGkxNng4IGIgPSB2ZWNfc3BsYXRz KChzaG9ydCkoZHN0Wy0xICsgeSAqIEJQU10gLSBjKSk7CisrICAgIGNvbnN0IHU4eDE2IG8gPSAo dTh4MTYpdmVjX3BhY2tzdSh2ZWNfYWRkKGIsIHRiKSwgdmVjX3NwbGF0cygoc2hvcnQpMCkpOwor KyAgICBTdG9yZVdvcmQoR2V0V29yZChvKSwgZHN0ICsgeSAqIEJQUyk7CisrICB9CisrfQorKyN1 bmRlZiBTUkxJCisrI3VuZGVmIFNMTEkKKysjdW5kZWYgSU5TMTYKKysjdW5kZWYgQVZHM0MKKysK KytleHRlcm4gdm9pZCBWUDhEc3BJbml0VlNYKHZvaWQpOworKworK1dFQlBfVFNBTl9JR05PUkVf RlVOQ1RJT04gdm9pZCBWUDhEc3BJbml0VlNYKHZvaWQpIHsKKysgIFZQOFRyYW5zZm9ybSA9IFRy YW5zZm9ybV9WU1g7CisrICBWUDhTaW1wbGVWRmlsdGVyMTYgPSBTaW1wbGVWRmlsdGVyMTZfVlNY OworKyAgVlA4U2ltcGxlVkZpbHRlcjE2aSA9IFNpbXBsZVZGaWx0ZXIxNmlfVlNYOworKyAgVlA4 U2ltcGxlSEZpbHRlcjE2ID0gU2ltcGxlSEZpbHRlcjE2X1ZTWDsKKysgIFZQOFNpbXBsZUhGaWx0 ZXIxNmkgPSBTaW1wbGVIRmlsdGVyMTZpX1ZTWDsKKysgIFZQOFZGaWx0ZXIxNiA9IFZGaWx0ZXIx Nl9WU1g7CisrICBWUDhWRmlsdGVyMTZpID0gVkZpbHRlcjE2aV9WU1g7CisrICBWUDhIRmlsdGVy MTYgPSBIRmlsdGVyMTZfVlNYOworKyAgVlA4SEZpbHRlcjE2aSA9IEhGaWx0ZXIxNmlfVlNYOwor KyAgVlA4VkZpbHRlcjggPSBWRmlsdGVyOF9WU1g7CisrICBWUDhWRmlsdGVyOGkgPSBWRmlsdGVy OGlfVlNYOworKyAgVlA4SEZpbHRlcjggPSBIRmlsdGVyOF9WU1g7CisrICBWUDhIRmlsdGVyOGkg PSBIRmlsdGVyOGlfVlNYOworKworKyAgVlA4UHJlZEx1bWExNlswXSA9IERDMTZfVlNYOworKyAg VlA4UHJlZEx1bWExNlsxXSA9IFRNMTZfVlNYOworKyAgVlA4UHJlZEx1bWExNlsyXSA9IFZFMTZf VlNYOworKyAgVlA4UHJlZEx1bWExNlszXSA9IEhFMTZfVlNYOworKyAgVlA4UHJlZEx1bWExNls0 XSA9IERDMTZOb1RvcF9WU1g7CisrICBWUDhQcmVkTHVtYTE2WzVdID0gREMxNk5vTGVmdF9WU1g7 CisrICBWUDhQcmVkTHVtYTE2WzZdID0gREMxNk5vVG9wTGVmdF9WU1g7CisrICBWUDhQcmVkQ2hy b21hOFswXSA9IERDOHV2X1ZTWDsKKysgIFZQOFByZWRDaHJvbWE4WzFdID0gVE04dXZfVlNYOwor KyAgVlA4UHJlZENocm9tYThbMl0gPSBWRTh1dl9WU1g7CisrICBWUDhQcmVkQ2hyb21hOFs0XSA9 IERDOHV2Tm9Ub3BfVlNYOworKyAgVlA4UHJlZENocm9tYThbNV0gPSBEQzh1dk5vTGVmdF9WU1g7 CisrICBWUDhQcmVkQ2hyb21hOFs2XSA9IERDOHV2Tm9Ub3BMZWZ0X1ZTWDsKKysgIFZQOFByZWRM dW1hNFsxXSA9IFRNNF9WU1g7CisrICBWUDhQcmVkTHVtYTRbMl0gPSBWRTRfVlNYOworKyAgVlA4 UHJlZEx1bWE0WzRdID0gUkQ0X1ZTWDsKKysgIFZQOFByZWRMdW1hNFs1XSA9IFZSNF9WU1g7Cisr ICBWUDhQcmVkTHVtYTRbNl0gPSBMRDRfVlNYOworKyAgVlA4UHJlZEx1bWE0WzddID0gVkw0X1ZT WDsKKyt9CisrCisrI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKKysKKytXRUJQX0RTUF9JTklUX1NU VUIoVlA4RHNwSW5pdFZTWCkKKysKKysjZW5kaWYgIC8vIFdFQlBfVVNFX1ZTWAorZGlmZiAtLWdp dCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9k c3AvZmlsdGVycy5jCitpbmRleCAzOGRhNTI1MmRmM2EuLjk5NjJlMTI4NzQwMiAxMDA2NDQKKy0t LSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMKKysrKyBiL21lZGlhL2xpYndlYnAv c3JjL2RzcC9maWx0ZXJzLmMKK0BAIC0yMTcsNiArMjE3LDcgQEAgZXh0ZXJuIHZvaWQgVlA4Rmls dGVyc0luaXRNSVBTZHNwUjIodm9pZCk7CisgZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRNU0Eo dm9pZCk7CisgZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRORU9OKHZvaWQpOworIGV4dGVybiB2 b2lkIFZQOEZpbHRlcnNJbml0U1NFMih2b2lkKTsKKytleHRlcm4gdm9pZCBWUDhGaWx0ZXJzSW5p dFZTWCh2b2lkKTsKKyAKKyBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4RmlsdGVyc0luaXQpIHsKKyAg IFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJfTk9ORV0gPSBOb25lVW5maWx0ZXJfQzsKK0BAIC0y NDgsNiArMjQ5LDExIEBAIFdFQlBfRFNQX0lOSVRfRlVOQyhWUDhGaWx0ZXJzSW5pdCkgeworICAg ICBpZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgeworICAgICAgIFZQOEZpbHRlcnNJbml0TVNBKCk7 CisgICAgIH0KKysjZW5kaWYKKysjaWYgZGVmaW5lZChXRUJQX0hBVkVfVlNYKQorKyAgICBpZiAo VlA4R2V0Q1BVSW5mbyhrVlNYKSkgeworKyAgICAgIFZQOEZpbHRlcnNJbml0VlNYKCk7CisrICAg IH0KKyAjZW5kaWYKKyAgIH0KKyAKK2RpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3Av ZmlsdGVyc192c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzX3ZzeC5jCituZXcg ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi5hZThlNTdhYzY4NWMKKy0tLSAv ZGV2L251bGwKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzX3ZzeC5jCitAQCAt MCwwICsxLDE2MiBAQAorKy8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisrLy8KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi eSBhIEJTRC1zdHlsZSBsaWNlbnNlCisrLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENPUFlJ TkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCisrLy8gdHJlZS4gQW4gYWRkaXRpb25h bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorKy8vIGlu IHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQor Ky8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj ZSB0cmVlLgorKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8KKysvLyBWU1ggKFBvd2VyUEMp IHZlcnNpb24gb2YgZmlsdGVyaW5nIGZ1bmN0aW9ucy4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9k c3AuaCIKKysKKysjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCisrCisrI2luY2x1ZGUgPGFsdGl2 ZWMuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNp bmNsdWRlICJzcmMvZHNwL2NwdS5oIgorKyNpbmNsdWRlICJzcmMvd2VicC90eXBlcy5oIgorKwor K3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1OHgxNjsKKyt0eXBlZGVmIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHUxNng4OworK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIHNob3J0IGkx Nng4OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIHU2NHgyOworKworKy8v IEJ5dGUtd2lzZSBzaGlmdHMgb2YgdGhlIHdob2xlIDEyOC1iaXQgcmVnaXN0ZXIsIG1hdGNoaW5n IHRoZSBsaXR0bGUtZW5kaWFuCisrLy8gc2VtYW50aWNzIG9mIF9tbV9zbGxpX3NpMTI4IC8gX21t X3NybGlfc2kxMjguICduJyBtdXN0IGJlIGEgbGl0ZXJhbC4KKysjZGVmaW5lIFNMTEkoeCwgbikg dmVjX3NsZCgoeCksIHplcm8sIChuKSkKKysjZGVmaW5lIFNSTEkoeCwgbikgdmVjX3NsZCh6ZXJv LCAoeCksIDE2IC0gKG4pKQorKworKy8vIExvYWRzIDggYnl0ZXMgZnJvbSAncCcgaW50byB0aGUg bG93IGhhbGYgb2YgYSB2ZWN0b3IgKGhpZ2ggaGFsZiB1bmRlZmluZWQpLgorK3N0YXRpYyBXRUJQ X0lOTElORSB1OHgxNiBMb2FkOChjb25zdCB1aW50OF90KiBwKSB7CisrICB1aW50NjRfdCB2Owor KyAgbWVtY3B5KCZ2LCBwLCA4KTsKKysgIHJldHVybiAodTh4MTYpdmVjX3NwbGF0cyh2KTsKKyt9 CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBIb3Jpem9udGFsIHVuZmlsdGVyOiBv dXRbaV0gPSBpbltpXSArIG91dFtpIC0gMV0gKGEgcHJlZml4IHN1bSkuCisrCisrc3RhdGljIHZv aWQgSG9yaXpvbnRhbFVuZmlsdGVyX1ZTWChjb25zdCB1aW50OF90KiBwcmV2LCBjb25zdCB1aW50 OF90KiBpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIG91 dCwgaW50IHdpZHRoKSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWdu ZWQgY2hhcikwKTsKKysgIGNvbnN0IHU2NHgyIHNoNTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBs b25nIGxvbmcpNTYpOworKyAgdTh4MTYgbGFzdDsKKysgIGludCBpOworKyAgb3V0WzBdID0gKHVp bnQ4X3QpKGluWzBdICsgKHByZXYgPT0gTlVMTCA/IDAgOiBwcmV2WzBdKSk7CisrICBpZiAod2lk dGggPD0gMSkgcmV0dXJuOworKyAgbGFzdCA9IHZlY19pbnNlcnQob3V0WzBdLCB6ZXJvLCAwKTsK KysgIGZvciAoaSA9IDE7IGkgKyA4IDw9IHdpZHRoOyBpICs9IDgpIHsKKysgICAgY29uc3QgdTh4 MTYgQTAgPSBMb2FkOChpbiArIGkpOworKyAgICBjb25zdCB1OHgxNiBBMSA9IHZlY19hZGQoQTAs IGxhc3QpOworKyAgICBjb25zdCB1OHgxNiBBMiA9IFNMTEkoQTEsIDEpOworKyAgICBjb25zdCB1 OHgxNiBBMyA9IHZlY19hZGQoQTEsIEEyKTsKKysgICAgY29uc3QgdTh4MTYgQTQgPSBTTExJKEEz LCAyKTsKKysgICAgY29uc3QgdTh4MTYgQTUgPSB2ZWNfYWRkKEEzLCBBNCk7CisrICAgIGNvbnN0 IHU4eDE2IEE2ID0gU0xMSShBNSwgNCk7CisrICAgIGNvbnN0IHU4eDE2IEE3ID0gdmVjX2FkZChB NSwgQTYpOworKyAgICBtZW1jcHkob3V0ICsgaSwgJkE3LCA4KTsKKysgICAgbGFzdCA9ICh1OHgx Nil2ZWNfc3IoKHU2NHgyKUE3LCBzaDU2KTsgIC8vIGJyb2FkY2FzdCBvdXRbaSArIDddIHRvIGJ5 dGUgMAorKyAgfQorKyAgZm9yICg7IGkgPCB3aWR0aDsgKytpKSBvdXRbaV0gPSAodWludDhfdCko aW5baV0gKyBvdXRbaSAtIDFdKTsKKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysv LyBWZXJ0aWNhbCB1bmZpbHRlcjogb3V0W2ldID0gaW5baV0gKyBwcmV2W2ldLgorKworK3N0YXRp YyB2b2lkIFZlcnRpY2FsVW5maWx0ZXJfVlNYKGNvbnN0IHVpbnQ4X3QqIHByZXYsIGNvbnN0IHVp bnQ4X3QqIGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIG91 dCwgaW50IHdpZHRoKSB7CisrICBpZiAocHJldiA9PSBOVUxMKSB7CisrICAgIEhvcml6b250YWxV bmZpbHRlcl9WU1goTlVMTCwgaW4sIG91dCwgd2lkdGgpOworKyAgfSBlbHNlIHsKKysgICAgaW50 IGk7CisrICAgIGNvbnN0IGludCBtYXhfcG9zID0gd2lkdGggJiB+MzE7CisrICAgIGZvciAoaSA9 IDA7IGkgPCBtYXhfcG9zOyBpICs9IDMyKSB7CisrICAgICAgY29uc3QgdTh4MTYgQTAgPSB2ZWNf eGwoMCwgKHVuc2lnbmVkIGNoYXIqKSZpbltpICsgMF0pOworKyAgICAgIGNvbnN0IHU4eDE2IEEx ID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKikmaW5baSArIDE2XSk7CisrICAgICAgY29uc3Qg dTh4MTYgQjAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKSZwcmV2W2kgKyAwXSk7CisrICAg ICAgY29uc3QgdTh4MTYgQjEgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKSZwcmV2W2kgKyAx Nl0pOworKyAgICAgIHZlY194c3QodmVjX2FkZChBMCwgQjApLCAwLCAodW5zaWduZWQgY2hhciop Jm91dFtpICsgMF0pOworKyAgICAgIHZlY194c3QodmVjX2FkZChBMSwgQjEpLCAwLCAodW5zaWdu ZWQgY2hhciopJm91dFtpICsgMTZdKTsKKysgICAgfQorKyAgICBmb3IgKDsgaSA8IHdpZHRoOyAr K2kpIG91dFtpXSA9ICh1aW50OF90KShpbltpXSArIHByZXZbaV0pOworKyAgfQorK30KKysKKysv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIEdyYWRpZW50IHVuZmlsdGVyOiByb3dbaV0gPSBp bltpXSArIGNsaXAocm93W2ktMV0gKyB0b3BbaV0gLSB0b3BbaS0xXSkuCisrCisrc3RhdGljIFdF QlBfSU5MSU5FIGludCBHcmFkaWVudFByZWRpY3Rvcl9WU1godWludDhfdCBhLCB1aW50OF90IGIs IHVpbnQ4X3QgYykgeworKyAgY29uc3QgaW50IGcgPSBhICsgYiAtIGM7CisrICByZXR1cm4gKChn ICYgfjB4ZmYpID09IDApID8gZyA6IChnIDwgMCkgPyAwIDogMjU1OworK30KKysKKytzdGF0aWMg dm9pZCBHcmFkaWVudFByZWRpY3RJbnZlcnNlX1ZTWChjb25zdCB1aW50OF90KiBpbiwgY29uc3Qg dWludDhfdCogdG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QqIHJvdywgaW50IGxlbmd0aCkgeworKyAgaWYgKGxlbmd0aCA+IDApIHsKKysgICAgaW50 IGk7CisrICAgIGNvbnN0IGludCBtYXhfcG9zID0gbGVuZ3RoICYgfjc7CisrICAgIGNvbnN0IHU4 eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgICB1OHgxNiBBID0g dmVjX2luc2VydCgodW5zaWduZWQgY2hhcilyb3dbLTFdLCB6ZXJvLCAwKTsgIC8vIGxlZnQgc2Ft cGxlCisrICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfcG9zOyBpICs9IDgpIHsKKysgICAgICBjb25z dCB1OHgxNiB0MCA9IExvYWQ4KHRvcCArIGkpOworKyAgICAgIGNvbnN0IHU4eDE2IHQxID0gTG9h ZDgodG9wICsgaSAtIDEpOworKyAgICAgIGNvbnN0IHUxNng4IEIgPSAodTE2eDgpdmVjX21lcmdl aCh0MCwgemVybyk7CisrICAgICAgY29uc3QgdTE2eDggQyA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHQx LCB6ZXJvKTsKKysgICAgICBjb25zdCB1OHgxNiBEID0gTG9hZDgoaW4gKyBpKTsgIC8vIGJhc2Ug aW5wdXQKKysgICAgICBjb25zdCB1MTZ4OCBFID0gdmVjX3N1YihCLCBDKTsgIC8vIHVuY2xpcHBl ZCBncmFkaWVudCBiYXNpcyBiIC0gYworKyAgICAgIHU4eDE2IG91dCA9IHplcm87ICAgICAgICAg ICAgICAgLy8gYWNjdW11bGF0b3IgZm9yIG91dHB1dAorKyAgICAgIHU4eDE2IG1hc2tfaGkgPSB2 ZWNfaW5zZXJ0KCh1bnNpZ25lZCBjaGFyKTB4ZmYsIHplcm8sIDApOworKyAgICAgIGludCBrID0g ODsKKysgICAgICB3aGlsZSAoMSkgeworKyAgICAgICAgY29uc3QgdTE2eDggdG1wMyA9IHZlY19h ZGQoKHUxNng4KUEsIEUpOyAgLy8gZGVsdGEgPSBhICsgYiAtIGMKKysgICAgICAgIGNvbnN0IHU4 eDE2IHRtcDQgPSB2ZWNfcGFja3N1KChpMTZ4OCl0bXAzLCAoaTE2eDgpemVybyk7ICAvLyBzYXQu IGRlbHRhCisrICAgICAgICBjb25zdCB1OHgxNiB0bXA1ID0gdmVjX2FkZCh0bXA0LCBEKTsgICAg ICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGluW10KKysgICAgICAgIEEgPSB2ZWNfYW5kKHRt cDUsIG1hc2tfaGkpOyAgLy8ga2VlcCBuZXcgc2FtcGxlCisrICAgICAgICBvdXQgPSB2ZWNfb3Io b3V0LCBBKTsgICAgICAgIC8vIGFjY3VtdWxhdGUgb3V0cHV0CisrICAgICAgICBpZiAoLS1rID09 IDApIGJyZWFrOworKyAgICAgICAgQSA9IFNMTEkoQSwgMSk7ICAgICAgICAgICAgICAgICAgLy8g cm90YXRlIGxlZnQgc2FtcGxlCisrICAgICAgICBtYXNrX2hpID0gU0xMSShtYXNrX2hpLCAxKTsg ICAgICAvLyByb3RhdGUgbWFzaworKyAgICAgICAgQSA9ICh1OHgxNil2ZWNfbWVyZ2VoKEEsIHpl cm8pOyAgLy8gY29udmVydCA4YiAtPiAxNmIKKysgICAgICB9CisrICAgICAgQSA9IFNSTEkoQSwg Nyk7ICAvLyBwcmVwYXJlIGxlZnQgc2FtcGxlIGZvciBuZXh0IGl0ZXJhdGlvbgorKyAgICAgIG1l bWNweShyb3cgKyBpLCAmb3V0LCA4KTsKKysgICAgfQorKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsg KytpKSB7CisrICAgICAgY29uc3QgaW50IGRlbHRhID0gR3JhZGllbnRQcmVkaWN0b3JfVlNYKHJv d1tpIC0gMV0sIHRvcFtpXSwgdG9wW2kgLSAxXSk7CisrICAgICAgcm93W2ldID0gKHVpbnQ4X3Qp KGluW2ldICsgZGVsdGEpOworKyAgICB9CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIEdyYWRp ZW50VW5maWx0ZXJfVlNYKGNvbnN0IHVpbnQ4X3QqIHByZXYsIGNvbnN0IHVpbnQ4X3QqIGluLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIG91dCwgaW50IHdpZHRo KSB7CisrICBpZiAocHJldiA9PSBOVUxMKSB7CisrICAgIEhvcml6b250YWxVbmZpbHRlcl9WU1go TlVMTCwgaW4sIG91dCwgd2lkdGgpOworKyAgfSBlbHNlIHsKKysgICAgb3V0WzBdID0gKHVpbnQ4 X3QpKGluWzBdICsgcHJldlswXSk7ICAvLyBwcmVkaWN0IGZyb20gYWJvdmUKKysgICAgR3JhZGll bnRQcmVkaWN0SW52ZXJzZV9WU1goaW4gKyAxLCBwcmV2ICsgMSwgb3V0ICsgMSwgd2lkdGggLSAx KTsKKysgIH0KKyt9CisrCisrI3VuZGVmIFNMTEkKKysjdW5kZWYgU1JMSQorKworKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrCisrZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRWU1godm9pZCk7 CisrCisrV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFZQOEZpbHRlcnNJbml0VlNYKHZv aWQpIHsKKysgIFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJfSE9SSVpPTlRBTF0gPSBIb3Jpem9u dGFsVW5maWx0ZXJfVlNYOworKyAgV2ViUFVuZmlsdGVyc1tXRUJQX0ZJTFRFUl9WRVJUSUNBTF0g PSBWZXJ0aWNhbFVuZmlsdGVyX1ZTWDsKKysgIFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJfR1JB RElFTlRdID0gR3JhZGllbnRVbmZpbHRlcl9WU1g7CisrfQorKworKyNlbHNlICAvLyAhV0VCUF9V U0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFZQOEZpbHRlcnNJbml0VlNYKQorKworKyNl bmRpZiAgLy8gV0VCUF9VU0VfVlNYCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNw L2xvc3NsZXNzLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3MuYworaW5kZXggMWEz ZDgwMGMzZmJjLi40OGI1ZDRhM2FlZGMgMTAwNjQ0CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9k c3AvbG9zc2xlc3MuYworKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzLmMKK0BA IC02MDYsNiArNjA2LDcgQEAgZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRBVlgyKHZvaWQpOworIGV4 dGVybiB2b2lkIFZQOExEc3BJbml0TkVPTih2b2lkKTsKKyBleHRlcm4gdm9pZCBWUDhMRHNwSW5p dE1JUFNkc3BSMih2b2lkKTsKKyBleHRlcm4gdm9pZCBWUDhMRHNwSW5pdE1TQSh2b2lkKTsKKytl eHRlcm4gdm9pZCBWUDhMRHNwSW5pdFZTWCh2b2lkKTsKKyAKKyAjZGVmaW5lIENPUFlfUFJFRElD VE9SX0FSUkFZKElOLCBPVVQpIGRvIHsgICAgICAgICAgICAgICAgXAorICAgKE9VVClbMF0gPSBJ TiMjMF9DOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtNjczLDYg KzY3NCwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4TERzcEluaXQpIHsKKyAgICAgaWYgKFZQ OEdldENQVUluZm8oa01TQSkpIHsKKyAgICAgICBWUDhMRHNwSW5pdE1TQSgpOworICAgICB9Cisr I2VuZGlmCisrI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKKysgICAgaWYgKFZQOEdldENQVUlu Zm8oa1ZTWCkpIHsKKysgICAgICBWUDhMRHNwSW5pdFZTWCgpOworKyAgICB9CisgI2VuZGlmCisg ICB9CisgCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3ZzeC5j IGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3ZzeC5jCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi44OWRhMzBjOTU4OWMKKy0tLSAvZGV2L251bGwKKysr KyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzc192c3guYworQEAgLTAsMCArMSw0NDkg QEAKKysvLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor Ky8vCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5 bGUgbGljZW5zZQorKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4g dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0 dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKKysvLyBpbiB0aGUgZmlsZSBQ QVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKKysvLyBiZSBmb3Vu ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKysv LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vCisrLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9m IGxvc3NsZXNzIGZ1bmN0aW9ucy4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKKysKKysj aWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCisrCisrI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInNyYy9kc3AvY3B1LmgiCisrI2luY2x1ZGUg InNyYy9kc3AvbG9zc2xlc3MuaCIKKysjaW5jbHVkZSAic3JjL2RzcC9sb3NzbGVzc19jb21tb24u aCIKKysjaW5jbHVkZSAic3JjL3dlYnAvZm9ybWF0X2NvbnN0YW50cy5oIgorKyNpbmNsdWRlICJz cmMvd2VicC90eXBlcy5oIgorKworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1OHgx NjsKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHUxNng4OworK3R5cGVkZWYgX192 ZWN0b3Igc2lnbmVkIHNob3J0IGkxNng4OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgaW50 IHUzMng0OworK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIGludCBpMzJ4NDsKKysKKysvLyBTaWdu ZWQgbXVsdGlwbHktaGlnaCBvZiAxNi1iaXQgbGFuZXM6IChhICogYikgPj4gMTYsIG1hdGNoaW5n CisrLy8gX21tX211bGhpX2VwaTE2LgorK3N0YXRpYyBXRUJQX0lOTElORSBpMTZ4OCBNdWxIaVMx NihpMTZ4OCBhLCBpMTZ4OCBiKSB7CisrICBjb25zdCB1MzJ4NCBzaCA9IHZlY19zcGxhdHMoKHVu c2lnbmVkIGludCkxNik7CisrICBjb25zdCBpMzJ4NCBlID0gdmVjX3NyYSh2ZWNfbXVsZShhLCBi KSwgc2gpOworKyAgY29uc3QgaTMyeDQgbyA9IHZlY19zcmEodmVjX211bG8oYSwgYiksIHNoKTsK KysgIHJldHVybiAoaTE2eDgpdmVjX3BhY2sodmVjX21lcmdlaChlLCBvKSwgdmVjX21lcmdlbChl LCBvKSk7CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gQ29sb3IgdHJhbnNm b3Jtcy4KKysKKytzdGF0aWMgdm9pZCBBZGRHcmVlblRvQmx1ZUFuZFJlZF9WU1goY29uc3QgdWlu dDMyX3QqIHNyYywgaW50IG51bV9waXhlbHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90KiBkc3QpIHsKKysgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgLy8gUmVwbGljYXRlIHRoZSBncmVlbiBieXRlIChv ZmZzZXQgMSBvZiBlYWNoIHBpeGVsKSBpbnRvIHRoZSBibHVlL3JlZCBzbG90cy4KKysgIGNvbnN0 IHU4eDE2IGtTcHJlYWRHcmVlbiA9IHsxLCAxNiwgMSwgMTYsIDUsICAxNiwgNSwgIDE2LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDksIDE2LCA5LCAxNiwgMTMsIDE2LCAxMywgMTZ9 OworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQp IHsKKysgICAgY29uc3QgdTh4MTYgaW4gPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnNy Y1tpXSk7CisrICAgIGNvbnN0IHU4eDE2IGcgPSB2ZWNfcGVybShpbiwgemVybywga1NwcmVhZEdy ZWVuKTsgIC8vIDAgZyAwIGcgcGVyIHBpeGVsCisrICAgIHZlY194c3QoKHUzMng0KXZlY19hZGQo aW4sIGcpLCAwLCAmZHN0W2ldKTsKKysgIH0KKysgIGlmIChpICE9IG51bV9waXhlbHMpIHsKKysg ICAgVlA4TEFkZEdyZWVuVG9CbHVlQW5kUmVkX0Moc3JjICsgaSwgbnVtX3BpeGVscyAtIGksIGRz dCArIGkpOworKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBUcmFuc2Zvcm1Db2xvckludmVyc2Vf VlNYKGNvbnN0IFZQOExNdWx0aXBsaWVycyogY29uc3QgbSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBudW1fcGl4ZWxzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGRzdCkgewor Ky8vIHNpZ24tZXh0ZW5kZWQgbXVsdGlwbHlpbmcgY29uc3RhbnRzLCBwcmUtc2hpZnRlZCBieSA1 IChzZWUgbG9zc2xlc3Nfc3NlMi5jKS4KKysjZGVmaW5lIENTVChYKSAoKChpbnQxNl90KSgobS0+ WCkgPDwgOCkpID4+IDUpCisrICBjb25zdCBpMTZ4OCBtdWx0c19yYiA9CisrICAgICAgKGkxNng4 KXZlY19zcGxhdHMoKGludCkoKCh1aW50MzJfdCkodWludDE2X3QpQ1NUKGdyZWVuX3RvX3JlZCkg PDwgMTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KUNTVChn cmVlbl90b19ibHVlKSkpKTsKKysgIGNvbnN0IGkxNng4IG11bHRzX2IyID0KKysgICAgICAoaTE2 eDgpdmVjX3NwbGF0cygoaW50KSgodWludDMyX3QpKHVpbnQxNl90KUNTVChyZWRfdG9fYmx1ZSkg PDwgMTYpKTsKKysjdW5kZWYgQ1NUCisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHUzMng0IG1hc2tfYWcgPSB2ZWNfc3BsYXRzKCh1 aW50MzJfdCkweGZmMDBmZjAwKTsgIC8vIGFscGhhL2dyZWVuCisrICBjb25zdCB1MTZ4OCBzaDhf MTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsKKysgIGNvbnN0IHUzMng0IHNoOF8z MiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCk4KTsKKysgIC8vIEJyb2FkY2FzdCB0aGUgZ3Jl ZW4gYnl0ZSAob2Zmc2V0IDEpIGludG8gdGhlIGhpZ2ggYnl0ZSBvZiBib3RoIDE2LWJpdAorKyAg Ly8gaGFsdmVzIG9mIGVhY2ggcGl4ZWw6IHlpZWxkcyBnIDw8IDggaW4gZWFjaCBsYW5lLgorKyAg Y29uc3QgdTh4MTYga0dyZWVuSGkgPSB7MTYsIDEsIDE2LCAxLCAxNiwgNSwgIDE2LCA1LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDksIDE2LCA5LCAxNiwgMTMsIDE2LCAxM307Cisr ICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewor KyAgICBjb25zdCB1OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90Kikmc3JjW2ld KTsKKysgICAgY29uc3QgdTh4MTYgQSA9ICh1OHgxNil2ZWNfYW5kKCh1MzJ4NClpbiwgbWFza19h Zyk7ICAgLy8gYSAwIGcgMAorKyAgICBjb25zdCBpMTZ4OCBDID0gKGkxNng4KXZlY19wZXJtKEEs IHplcm8sIGtHcmVlbkhpKTsgICAvLyBnMGcwIChnIDw8IDgpCisrICAgIGNvbnN0IHU4eDE2IEQg PSAodTh4MTYpTXVsSGlTMTYoQywgbXVsdHNfcmIpOyAgICAgICAgIC8vIHggZHIgeCBkYjEKKysg ICAgY29uc3QgdTh4MTYgRSA9IHZlY19hZGQoaW4sIEQpOyAgICAgICAgICAgICAgICAgICAgICAg Ly8geCByJyB4IGInCisrICAgIGNvbnN0IHUxNng4IEYgPSB2ZWNfc2woKHUxNng4KUUsIHNoOF8x Nik7ICAgICAgICAgICAgIC8vIHInIDAgYicgMAorKyAgICBjb25zdCB1OHgxNiBHID0gKHU4eDE2 KU11bEhpUzE2KChpMTZ4OClGLCBtdWx0c19iMik7ICAvLyB4IGRiMiAwIDAKKysgICAgY29uc3Qg dTh4MTYgSCA9ICh1OHgxNil2ZWNfc3IoKHUzMng0KUcsIHNoOF8zMik7ICAgICAgLy8gMCB4IGRi MiAwCisrICAgIGNvbnN0IHUxNng4IEkgPSAodTE2eDgpdmVjX2FkZChILCAodTh4MTYpRik7ICAg ICAgICAgIC8vIHInIHggYicnIDAKKysgICAgY29uc3QgdTh4MTYgSiA9ICh1OHgxNil2ZWNfc3Io SSwgc2g4XzE2KTsgICAgICAgICAgICAgLy8gMCByJyAwIGInJworKyAgICB2ZWNfeHN0KHZlY19v cigodTMyeDQpSiwgKHUzMng0KUEpLCAwLCAmZHN0W2ldKTsKKysgIH0KKysgIGlmIChpICE9IG51 bV9waXhlbHMpIHsKKysgICAgVlA4TFRyYW5zZm9ybUNvbG9ySW52ZXJzZV9DKG0sIHNyYyArIGks IG51bV9waXhlbHMgLSBpLCBkc3QgKyBpKTsKKysgIH0KKyt9CisrCisrLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKysvLyBDb2xvci1zcGFjZSBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KKysKKytzdGF0 aWMgdm9pZCBDb252ZXJ0QkdSQVRvUkdCQV9WU1goY29uc3QgdWludDMyX3QqIFdFQlBfUkVTVFJJ Q1Qgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVs cywgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKKysgIC8vIFN3YXAgdGhlIGJsdWUgKG9m ZnNldCAwKSBhbmQgcmVkIChvZmZzZXQgMikgYnl0ZXMgb2YgZWFjaCBwaXhlbC4KKysgIGNvbnN0 IHU4eDE2IGtTd2FwQlIgPSB7MiwgMSwgMCwgMywgNiwgNSwgNCwgNywgMTAsIDksIDgsIDExLCAx NCwgMTMsIDEyLCAxNX07CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9w aXhlbHM7IGkgKz0gNCkgeworKyAgICBjb25zdCB1OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwoMCwg KHVpbnQzMl90Kikmc3JjW2ldKTsKKysgICAgdmVjX3hzdCh2ZWNfcGVybShpbiwgaW4sIGtTd2Fw QlIpLCAwLCAmZHN0WzQgKiBpXSk7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Cisr ICAgIFZQOExDb252ZXJ0QkdSQVRvUkdCQV9DKHNyYyArIGksIG51bV9waXhlbHMgLSBpLCBkc3Qg KyA0ICogaSk7CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIENvbnZlcnRCR1JBVG9SR0JfVlNY KGNvbnN0IHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIHNyYywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3Qp IHsKKysgIC8vIEJHUkEgLT4gUkdCOiBnYXRoZXIgUixHLEIgKG9mZnNldHMgMiwxLDApIG9mIGVh Y2ggcGl4ZWwsIGRyb3AgYWxwaGEuCisrICBjb25zdCB1OHgxNiBrVG9SR0IgPSB7MiwgMSwgMCwg NiwgNSwgNCwgMTAsIDksIDgsIDE0LCAxMywgMTIsIDAsIDAsIDAsIDB9OworKyAgaW50IGk7Cisr ICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKKysgICAgY29uc3Qg dTh4MTYgaW4gPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnNyY1tpXSk7CisrICAgIGNv bnN0IHU4eDE2IG91dCA9IHZlY19wZXJtKGluLCBpbiwga1RvUkdCKTsKKysgICAgbWVtY3B5KCZk c3RbMyAqIGldLCAmb3V0LCAxMik7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Cisr ICAgIFZQOExDb252ZXJ0QkdSQVRvUkdCX0Moc3JjICsgaSwgbnVtX3BpeGVscyAtIGksIGRzdCAr IDMgKiBpKTsKKysgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgQ29udmVydEJHUkFUb0JHUl9WU1go Y29uc3QgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCkg eworKyAgLy8gQkdSQSAtPiBCR1I6IGdhdGhlciBCLEcsUiAob2Zmc2V0cyAwLDEsMikgb2YgZWFj aCBwaXhlbCwgZHJvcCBhbHBoYS4KKysgIGNvbnN0IHU4eDE2IGtUb0JHUiA9IHswLCAxLCAyLCA0 LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDEzLCAxNCwgMCwgMCwgMCwgMH07CisrICBpbnQgaTsKKysg IGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgeworKyAgICBjb25zdCB1 OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90Kikmc3JjW2ldKTsKKysgICAgY29u c3QgdTh4MTYgb3V0ID0gdmVjX3Blcm0oaW4sIGluLCBrVG9CR1IpOworKyAgICBtZW1jcHkoJmRz dFszICogaV0sICZvdXQsIDEyKTsKKysgIH0KKysgIGlmIChpICE9IG51bV9waXhlbHMpIHsKKysg ICAgVlA4TENvbnZlcnRCR1JBVG9CR1JfQyhzcmMgKyBpLCBudW1fcGl4ZWxzIC0gaSwgZHN0ICsg MyAqIGkpOworKyAgfQorK30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFByZWRp Y3RvciB0cmFuc2Zvcm0uCisrCisrLy8gQnl0ZS13aXNlIHNoaWZ0cyBvZiB0aGUgd2hvbGUgcmVn aXN0ZXIgKGxpdHRsZS1lbmRpYW4gX21tX3N7bCxyfWxpX3NpMTI4KS4KKysjZGVmaW5lIFNMTEko eCwgbikgdmVjX3NsZCgoeCksIGtaZXJvLCAobikpCisrI2RlZmluZSBTUkxJKHgsIG4pIHZlY19z bGQoa1plcm8sICh4KSwgMTYgLSAobikpCisrc3RhdGljIGNvbnN0IHU4eDE2IGtaZXJvID0gezAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworKworKy8vIFBl ci1ieXRlIGZsb29yIGF2ZXJhZ2UgKGEgKyBiKSA+PiAxLCBtYXRjaGluZyB0aGUgQyBBdmVyYWdl MigpLgorK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBBdmVyYWdlMl91OCh1OHgxNiBhLCB1OHgx NiBiKSB7CisrICBjb25zdCB1OHgxNiBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEp OworKyAgY29uc3QgdTh4MTYgYXZnMSA9IHZlY19hdmcoYSwgYik7ICAvLyAoYSArIGIgKyAxKSA+ PiAxCisrICByZXR1cm4gdmVjX3N1YihhdmcxLCB2ZWNfYW5kKHZlY194b3IoYSwgYiksIG9uZSkp OworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdTMyeDQgTGFuZTAodWludDMyX3Qgdikgewor KyAgY29uc3QgdTMyeDQgciA9IHt2LCAwLCAwLCAwfTsKKysgIHJldHVybiByOworK30KKysKKysv LyBTaW5nbGUtcGl4ZWwgaGVscGVycyBvcGVyYXRpbmcgb24gdGhlIGxvdyAzMi1iaXQgbGFuZSBv bmx5LgorK3N0YXRpYyBXRUJQX0lOTElORSB1MTZ4OCBVbnBhY2sxNih1aW50MzJfdCBhKSB7Cisr ICByZXR1cm4gKHUxNng4KXZlY19tZXJnZWgoKHU4eDE2KUxhbmUwKGEpLCBrWmVybyk7CisrfQor KworK3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBBdmVyYWdlMl9WU1godWludDMyX3QgYTAs IHVpbnQzMl90IGExKSB7CisrICByZXR1cm4gdmVjX2V4dHJhY3QoKHUzMng0KUF2ZXJhZ2UyX3U4 KCh1OHgxNilMYW5lMChhMCksICh1OHgxNilMYW5lMChhMSkpLCAwKTsKKyt9CisrCisrc3RhdGlj IFdFQlBfSU5MSU5FIHUxNng4IEF2ZXJhZ2UyXzE2KHVpbnQzMl90IGEwLCB1aW50MzJfdCBhMSkg eworKyAgY29uc3QgdTE2eDggb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMSk7Cisr ICByZXR1cm4gdmVjX3NyKHZlY19hZGQoVW5wYWNrMTYoYTApLCBVbnBhY2sxNihhMSkpLCBvbmUp OworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdWludDMyX3QgQXZlcmFnZTNfVlNYKHVpbnQz Ml90IGEwLCB1aW50MzJfdCBhMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IGEyKSB7CisrICBjb25zdCB1MTZ4OCBvbmUgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBzaG9ydCkxKTsKKysgIGNvbnN0IHUxNng4IGF2ZzEgPSBBdmVyYWdlMl8xNihhMCwg YTIpOworKyAgY29uc3QgdTE2eDggYXZnMiA9IHZlY19zcih2ZWNfYWRkKGF2ZzEsIFVucGFjazE2 KGExKSksIG9uZSk7CisrICByZXR1cm4gdmVjX2V4dHJhY3QoKHUzMng0KXZlY19wYWNrc3UoKGkx Nng4KWF2ZzIsIChpMTZ4OClhdmcyKSwgMCk7CisrfQorKworK3N0YXRpYyBXRUJQX0lOTElORSB1 aW50MzJfdCBBdmVyYWdlNF9WU1godWludDMyX3QgYTAsIHVpbnQzMl90IGExLCB1aW50MzJfdCBh MiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGEz KSB7CisrICBjb25zdCB1MTZ4OCBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKTsK KysgIGNvbnN0IHUxNng4IGF2ZzEgPSBBdmVyYWdlMl8xNihhMCwgYTEpOworKyAgY29uc3QgdTE2 eDggYXZnMiA9IEF2ZXJhZ2UyXzE2KGEyLCBhMyk7CisrICBjb25zdCB1MTZ4OCBhdmczID0gdmVj X3NyKHZlY19hZGQoYXZnMSwgYXZnMiksIG9uZSk7CisrICByZXR1cm4gdmVjX2V4dHJhY3QoKHUz Mng0KXZlY19wYWNrc3UoKGkxNng4KWF2ZzMsIChpMTZ4OClhdmczKSwgMCk7CisrfQorKworK3N0 YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBDbGFtcGVkQWRkU3VidHJhY3RGdWxsX1ZTWCh1aW50 MzJfdCBjMCwgdWludDMyX3QgYzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGMyKSB7CisrICBjb25zdCBpMTZ4OCB2ID0K KysgICAgICB2ZWNfc3ViKChpMTZ4OCl2ZWNfYWRkKFVucGFjazE2KGMwKSwgVW5wYWNrMTYoYzEp KSwgKGkxNng4KVVucGFjazE2KGMyKSk7CisrICByZXR1cm4gdmVjX2V4dHJhY3QoKHUzMng0KXZl Y19wYWNrc3UodiwgdiksIDApOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdWludDMyX3Qg Q2xhbXBlZEFkZFN1YnRyYWN0SGFsZl9WU1godWludDMyX3QgYzAsIHVpbnQzMl90IGMxLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBjMikgeworKyAgY29uc3QgdTE2eDggb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hv cnQpMSk7CisrICBjb25zdCB1MTZ4OCBDMCA9IFVucGFjazE2KGMwKTsKKysgIGNvbnN0IHUxNng4 IEMxID0gVW5wYWNrMTYoYzEpOworKyAgY29uc3QgdTE2eDggQjAgPSBVbnBhY2sxNihjMik7Cisr ICBjb25zdCB1MTZ4OCBBMCA9IHZlY19zcih2ZWNfYWRkKEMxLCBDMCksIG9uZSk7ICAvLyBhdmUK KysgIGNvbnN0IGkxNng4IEExID0gdmVjX3N1YigoaTE2eDgpQTAsIChpMTZ4OClCMCk7CisrICBj b25zdCBpMTZ4OCBCZ3RBID0gKGkxNng4KXZlY19jbXBndChCMCwgQTApOyAgLy8gMCBvciAtMQor KyAgY29uc3QgaTE2eDggQTIgPSB2ZWNfc3ViKEExLCBCZ3RBKTsKKysgIGNvbnN0IGkxNng4IEEz ID0gdmVjX3NyYShBMiwgb25lKTsKKysgIGNvbnN0IGkxNng4IEE0ID0gdmVjX2FkZCgoaTE2eDgp QTAsIEEzKTsKKysgIHJldHVybiB2ZWNfZXh0cmFjdCgodTMyeDQpdmVjX3BhY2tzdShBNCwgQTQp LCAwKTsKKyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IFNlbGVjdF9WU1godWlu dDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYykgeworKyAgY29uc3QgdTh4MTYgQSA9ICh1 OHgxNilMYW5lMChhKTsKKysgIGNvbnN0IHU4eDE2IEIgPSAodTh4MTYpTGFuZTAoYik7CisrICBj b25zdCB1OHgxNiBDID0gKHU4eDE2KUxhbmUwKGMpOworKyAgY29uc3QgdTMyeDQgc2EgPSB2ZWNf c3VtNHModmVjX29yKHZlY19zdWJzKEEsIEMpLCB2ZWNfc3VicyhDLCBBKSksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMCkpOworKyAgY29u c3QgdTMyeDQgc2IgPSB2ZWNfc3VtNHModmVjX29yKHZlY19zdWJzKEIsIEMpLCB2ZWNfc3VicyhD LCBCKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBpbnQpMCkpOworKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1MzJ4NCl2ZWNfY21wZ3Qoc2IsIHNh KSwgMCkgPyBiIDogYTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IFByZWRpY3RvcjVfVlNYKGNv bnN0IHVpbnQzMl90KiBjb25zdCBsZWZ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1aW50MzJfdCogY29uc3QgdG9wKSB7CisrICByZXR1cm4gQXZlcmFnZTNfVlNYKCps ZWZ0LCB0b3BbMF0sIHRvcFsxXSk7CisrfQorK3N0YXRpYyB1aW50MzJfdCBQcmVkaWN0b3I2X1ZT WChjb25zdCB1aW50MzJfdCogY29uc3QgbGVmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHRvcCkgeworKyAgcmV0dXJuIEF2ZXJhZ2UyX1ZT WCgqbGVmdCwgdG9wWy0xXSk7CisrfQorK3N0YXRpYyB1aW50MzJfdCBQcmVkaWN0b3I3X1ZTWChj b25zdCB1aW50MzJfdCogY29uc3QgbGVmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHRvcCkgeworKyAgcmV0dXJuIEF2ZXJhZ2UyX1ZTWCgq bGVmdCwgdG9wWzBdKTsKKyt9Cisrc3RhdGljIHVpbnQzMl90IFByZWRpY3RvcjEzX1ZTWChjb25z dCB1aW50MzJfdCogY29uc3QgbGVmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVpbnQzMl90KiBjb25zdCB0b3ApIHsKKysgIHJldHVybiBDbGFtcGVkQWRkU3VidHJh Y3RIYWxmX1ZTWCgqbGVmdCwgdG9wWzBdLCB0b3BbLTFdKTsKKyt9CisrCisrc3RhdGljIHZvaWQg UHJlZGljdG9yQWRkMF9WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBw ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQz Ml90KiBXRUJQX1JFU1RSSUNUIG91dCkgeworKyAgY29uc3QgdTh4MTYgYmxhY2sgPSAodTh4MTYp dmVjX3NwbGF0cygodWludDMyX3QpQVJHQl9CTEFDSyk7CisrICBpbnQgaTsKKysgIGZvciAoaSA9 IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgeworKyAgICBjb25zdCB1OHgxNiBzcmMg PSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsKKysgICAgdmVjX3hzdCgodTMy eDQpdmVjX2FkZChzcmMsIGJsYWNrKSwgMCwgJm91dFtpXSk7CisrICB9CisrICBpZiAoaSAhPSBu dW1fcGl4ZWxzKSB7CisrICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbMF0oaW4gKyBpLCBOVUxMLCBu dW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7CisrICB9CisrICAodm9pZCl1cHBlcjsKKyt9CisrCisr c3RhdGljIHZvaWQgUHJlZGljdG9yQWRkMV9WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1 aW50MzJfdCogdXBwZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9w aXhlbHMsIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgeworKyAgdTMyeDQgcHJldiA9IHZl Y19zcGxhdHMob3V0Wy0xXSk7CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51 bV9waXhlbHM7IGkgKz0gNCkgeworKyAgICBjb25zdCB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hs KDAsICh1aW50MzJfdCopJmluW2ldKTsKKysgICAgY29uc3QgdTh4MTYgc3VtMCA9IHZlY19hZGQo c3JjLCBTTExJKHNyYywgNCkpOyAgICAvLyBhIHwgYStiIHwgYitjIHwgYytkCisrICAgIGNvbnN0 IHU4eDE2IHN1bTEgPSB2ZWNfYWRkKHN1bTAsIFNMTEkoc3VtMCwgOCkpOyAgLy8gcnVubmluZyBz dW0KKysgICAgY29uc3QgdTh4MTYgcmVzID0gdmVjX2FkZChzdW0xLCAodTh4MTYpcHJldik7Cisr ICAgIHZlY194c3QoKHUzMng0KXJlcywgMCwgJm91dFtpXSk7CisrICAgIHByZXYgPSB2ZWNfc3Bs YXQoKHUzMng0KXJlcywgMyk7ICAvLyByZXBsaWNhdGUgbGFzdCBwaXhlbAorKyAgfQorKyAgaWYg KGkgIT0gbnVtX3BpeGVscykgeworKyAgICBWUDhMUHJlZGljdG9yc0FkZF9DWzFdKGluICsgaSwg dXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7CisrICB9CisrfQorKworKyNkZWZp bmUgR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYKFgsIElOKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBzdGF0aWMgdm9pZCBQcmVkaWN0b3JBZGQjI1gjI19WU1go Y29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIsIFwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90KiBXRUJQX1JFU1RSSUNUIG91dCkgeyAgICAgICAgICAgICBcCisrICAgIGludCBpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGNvbnN0IHU4eDE2IHNy YyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5baV0pOyAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgY29uc3QgdTh4MTYgb3RoZXIgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJf dCopJihJTikpOyAgICAgICAgICAgICAgICAgIFwKKysgICAgICB2ZWNfeHN0KCh1MzJ4NCl2ZWNf YWRkKHNyYywgb3RoZXIpLCAwLCAmb3V0W2ldKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChpICE9IG51bV9waXhlbHMpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICBWUDhMUHJlZGljdG9yc0FkZF9DWyhYKV0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMg LSBpLCBvdXQgKyBpKTsgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9CisrR0VO RVJBVEVfUFJFRElDVE9SXzFfVlNYKDIsIHVwcGVyW2ldKSAgICAgIC8vIFRvcC4KKytHRU5FUkFU RV9QUkVESUNUT1JfMV9WU1goMywgdXBwZXJbaSArIDFdKSAgLy8gVG9wLXJpZ2h0LgorK0dFTkVS QVRFX1BSRURJQ1RPUl8xX1ZTWCg0LCB1cHBlcltpIC0gMV0pICAvLyBUb3AtbGVmdC4KKysjdW5k ZWYgR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYCisrCisrLy8gUHJlZGljdG9ycyA1LCA2LCA3LCAx MyB1c2UgaW50ZWdlciBhdmVyYWdlcyBhbmQgY2Fubm90IGJlIGFjY3VtdWxhdGVkIGluCisrLy8g cGFyYWxsZWwsIHNvIHVzZSB0aGUgZ2VuZXJpYyBvbmUtcGl4ZWwtYXQtYS10aW1lIGJhdGNoLgor K0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9yNV9WU1gsIFByZWRpY3RvckFkZDVfVlNY KQorK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9yNl9WU1gsIFByZWRpY3RvckFkZDZf VlNYKQorK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9yN19WU1gsIFByZWRpY3RvckFk ZDdfVlNYKQorK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9yMTNfVlNYLCBQcmVkaWN0 b3JBZGQxM19WU1gpCisrCisrI2RlZmluZSBHRU5FUkFURV9QUkVESUNUT1JfMl9WU1goWCwgSU4p ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHN0YXRpYyB2b2lk IFByZWRpY3RvckFkZCMjWCMjX1ZTWChjb25zdCB1aW50MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90 KiB1cHBlciwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1f cGl4ZWxzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgb3V0KSB7ICAgICAgICAg ICAgIFwKKysgICAgaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBmb3IgKGkgPSAwOyBpICsgNCA8 PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgY29uc3QgdTh4MTYgVG90aGVyID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3Qq KSYoSU4pKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICBjb25zdCB1OHgxNiBUID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpXSk7ICAgICAgICAgICAgICAgICAgXAorKyAg ICAgIGNvbnN0IHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5baV0p OyAgICAgICAgICAgICAgICAgICBcCisrICAgICAgdmVjX3hzdCgodTMyeDQpdmVjX2FkZChBdmVy YWdlMl91OChULCBUb3RoZXIpLCBzcmMpLCAwLCAmb3V0W2ldKTsgICAgICAgIFwKKysgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgVlA4TFBy ZWRpY3RvcnNBZGRfQ1soWCldKGluICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0 ICsgaSk7ICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfQorK0dFTkVSQVRFX1BS RURJQ1RPUl8yX1ZTWCg4LCB1cHBlcltpIC0gMV0pICAvLyBBdmVyYWdlIFRMLCBULgorK0dFTkVS QVRFX1BSRURJQ1RPUl8yX1ZTWCg5LCB1cHBlcltpICsgMV0pICAvLyBBdmVyYWdlIFQsIFRSLgor KyN1bmRlZiBHRU5FUkFURV9QUkVESUNUT1JfMl9WU1gKKysKKysvLyBQcmVkaWN0b3IxMDogYXZl cmFnZSBvZiAoYXZlcmFnZShMLCBUTCksIGF2ZXJhZ2UoVCwgVFIpKS4KKytzdGF0aWMgdm9pZCBQ cmVkaWN0b3JBZGQxMF9WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBw ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50 MzJfdCogV0VCUF9SRVNUUklDVCBvdXQpIHsKKysgIHU4eDE2IEwgPSAodTh4MTYpTGFuZTAob3V0 Wy0xXSk7CisrICBpbnQgaSwgazsKKysgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7 IGkgKz0gNCkgeworKyAgICB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCop JmluW2ldKTsKKysgICAgdTh4MTYgVEwgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVw cGVyW2kgLSAxXSk7CisrICAgIGNvbnN0IHU4eDE2IFQgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50 MzJfdCopJnVwcGVyW2ldKTsKKysgICAgY29uc3QgdTh4MTYgVFIgPSAodTh4MTYpdmVjX3hsKDAs ICh1aW50MzJfdCopJnVwcGVyW2kgKyAxXSk7CisrICAgIHU4eDE2IGF2Z1RUUiA9IEF2ZXJhZ2Uy X3U4KFQsIFRSKTsKKysgICAgZm9yIChrID0gMDsgayA8IDQ7ICsraykgeworKyAgICAgIGNvbnN0 IHU4eDE2IGF2ZyA9IEF2ZXJhZ2UyX3U4KGF2Z1RUUiwgQXZlcmFnZTJfdTgoTCwgVEwpKTsKKysg ICAgICBMID0gdmVjX2FkZChhdmcsIHNyYyk7CisrICAgICAgb3V0W2kgKyBrXSA9IHZlY19leHRy YWN0KCh1MzJ4NClMLCAwKTsKKysgICAgICBhdmdUVFIgPSBTUkxJKGF2Z1RUUiwgNCk7CisrICAg ICAgVEwgPSBTUkxJKFRMLCA0KTsKKysgICAgICBzcmMgPSBTUkxJKHNyYywgNCk7CisrICAgIH0K KysgIH0KKysgIGlmIChpICE9IG51bV9waXhlbHMpIHsKKysgICAgVlA4TFByZWRpY3RvcnNBZGRf Q1sxMF0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMgLSBpLCBvdXQgKyBpKTsKKysgIH0K Kyt9CisrCisrLy8gUHJlZGljdG9yMTE6IHNlbGVjdCBiZXR3ZWVuIFQgYW5kIEwgYmFzZWQgb24g fFQtVEx8IHZzIHxMLVRMfC4KKytzdGF0aWMgdm9pZCBQcmVkaWN0b3JBZGQxMV9WU1goY29uc3Qg dWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50MzJfdCogV0VCUF9SRVNUUklDVCBvdXQp IHsKKysgIGNvbnN0IHUzMng0IHozMiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkwKTsKKysg IHU4eDE2IEwgPSAodTh4MTYpTGFuZTAob3V0Wy0xXSk7CisrICBpbnQgaSwgazsKKysgIGZvciAo aSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgeworKyAgICB1OHgxNiBUID0gKHU4 eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpXSk7CisrICAgIHU4eDE2IFRMID0gKHU4 eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpIC0gMV0pOworKyAgICB1OHgxNiBzcmMg PSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsKKysgICAgdTh4MTYgcGEgPSAo dTh4MTYpdmVjX3N1bTRzKHZlY19vcih2ZWNfc3VicyhULCBUTCksIHZlY19zdWJzKFRMLCBUKSks IHozMik7CisrICAgIGZvciAoayA9IDA7IGsgPCA0OyArK2spIHsKKysgICAgICBjb25zdCB1MzJ4 NCBwYiA9IHZlY19zdW00cyh2ZWNfb3IodmVjX3N1YnMoTCwgVEwpLCB2ZWNfc3VicyhUTCwgTCkp LCB6MzIpOworKyAgICAgIGNvbnN0IHUzMng0IG1hc2sgPSAodTMyeDQpdmVjX2NtcGd0KHBiLCAo dTMyeDQpcGEpOyAgLy8gcGIgPiBwYSA/IEwgOiBUCisrICAgICAgY29uc3QgdTh4MTYgcHJlZCA9 IHZlY19zZWwoVCwgTCwgKHU4eDE2KW1hc2spOworKyAgICAgIEwgPSB2ZWNfYWRkKHNyYywgcHJl ZCk7CisrICAgICAgb3V0W2kgKyBrXSA9IHZlY19leHRyYWN0KCh1MzJ4NClMLCAwKTsKKysgICAg ICBUID0gU1JMSShULCA0KTsKKysgICAgICBUTCA9IFNSTEkoVEwsIDQpOworKyAgICAgIHNyYyA9 IFNSTEkoc3JjLCA0KTsKKysgICAgICBwYSA9IFNSTEkocGEsIDQpOworKyAgICB9CisrICB9Cisr ICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7CisrICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbMTFdKGlu ICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7CisrICB9CisrfQorKwor Ky8vIFByZWRpY3RvcjEyOiBDbGFtcGVkQWRkU3VidHJhY3RGdWxsLiAnTCcgaXMga2VwdCB1bnBh Y2tlZCB0byAxNiBiaXRzIGluIHRoZQorKy8vIGxvdyA0IGxhbmVzOyAnZGlmZicgKD0gVCAtIFRM KSBob2xkcyB0d28gcGl4ZWxzLCB0aGUgYWN0aXZlIG9uZSBpbiBsYW5lcyAwLTMuCisrI2RlZmlu ZSBET19QUkVEMTIoRElGRikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBjb25zdCBpMTZ4OCBhbGwgPSB2ZWNfYWRkKChpMTZ4OClMLCAoRElGRikpOyAgICAg ICAgICBcCisrICAgIGNvbnN0IHU4eDE2IHJlcyA9IHZlY19hZGQoc3JjLCB2ZWNfcGFja3N1KGFs bCwgYWxsKSk7IFwKKysgICAgb3V0W2kgKyBvdXRfaWR4KytdID0gdmVjX2V4dHJhY3QoKHUzMng0 KXJlcywgMCk7ICAgICAgXAorKyAgICBMID0gKHUxNng4KXZlY19tZXJnZWgocmVzLCBrWmVybyk7 ICAgICAgICAgICAgICAgICAgICBcCisrICB9IHdoaWxlICgwKQorKworK3N0YXRpYyB2b2lkIFBy ZWRpY3RvckFkZDEyX1ZTWChjb25zdCB1aW50MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90KiB1cHBl ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQz Ml90KiBXRUJQX1JFU1RSSUNUIG91dCkgeworKyAgdTE2eDggTCA9IFVucGFjazE2KG91dFstMV0p OworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQp IHsKKysgICAgaW50IG91dF9pZHggPSAwOworKyAgICB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hs KDAsICh1aW50MzJfdCopJmluW2ldKTsKKysgICAgY29uc3QgdTh4MTYgVCA9ICh1OHgxNil2ZWNf eGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaV0pOworKyAgICBjb25zdCB1OHgxNiBUTCA9ICh1OHgx Nil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaSAtIDFdKTsKKysgICAgLy8gMTYtYml0IGdy YWRpZW50IGJhc2lzIFQgLSBUTCBmb3IgdGhlIGZvdXIgcGl4ZWxzIChsb3cgYW5kIGhpZ2ggaGFs dmVzKS4KKysgICAgaTE2eDggZGlmZl9sbyA9CisrICAgICAgICB2ZWNfc3ViKChpMTZ4OCl2ZWNf bWVyZ2VoKFQsIGtaZXJvKSwgKGkxNng4KXZlY19tZXJnZWgoVEwsIGtaZXJvKSk7CisrICAgIGkx Nng4IGRpZmZfaGkgPQorKyAgICAgICAgdmVjX3N1YigoaTE2eDgpdmVjX21lcmdlbChULCBrWmVy byksIChpMTZ4OCl2ZWNfbWVyZ2VsKFRMLCBrWmVybykpOworKyAgICBET19QUkVEMTIoZGlmZl9s byk7CisrICAgIGRpZmZfbG8gPSAoaTE2eDgpU1JMSSgodTh4MTYpZGlmZl9sbywgOCk7CisrICAg IHNyYyA9IFNSTEkoc3JjLCA0KTsKKysgICAgRE9fUFJFRDEyKGRpZmZfbG8pOworKyAgICBzcmMg PSBTUkxJKHNyYywgNCk7CisrICAgIERPX1BSRUQxMihkaWZmX2hpKTsKKysgICAgZGlmZl9oaSA9 IChpMTZ4OClTUkxJKCh1OHgxNilkaWZmX2hpLCA4KTsKKysgICAgc3JjID0gU1JMSShzcmMsIDQp OworKyAgICBET19QUkVEMTIoZGlmZl9oaSk7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxz KSB7CisrICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbMTJdKGluICsgaSwgdXBwZXIgKyBpLCBudW1f cGl4ZWxzIC0gaSwgb3V0ICsgaSk7CisrICB9CisrfQorKyN1bmRlZiBET19QUkVEMTIKKysKKysj dW5kZWYgU0xMSQorKyN1bmRlZiBTUkxJCisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysK KytleHRlcm4gdm9pZCBWUDhMRHNwSW5pdFZTWCh2b2lkKTsKKysKKytXRUJQX1RTQU5fSUdOT1JF X0ZVTkNUSU9OIHZvaWQgVlA4TERzcEluaXRWU1godm9pZCkgeworKyAgVlA4TFByZWRpY3RvcnNB ZGRbMF0gPSBQcmVkaWN0b3JBZGQwX1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzFdID0gUHJl ZGljdG9yQWRkMV9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsyXSA9IFByZWRpY3RvckFkZDJf VlNYOworKyAgVlA4TFByZWRpY3RvcnNBZGRbM10gPSBQcmVkaWN0b3JBZGQzX1ZTWDsKKysgIFZQ OExQcmVkaWN0b3JzQWRkWzRdID0gUHJlZGljdG9yQWRkNF9WU1g7CisrICBWUDhMUHJlZGljdG9y c0FkZFs1XSA9IFByZWRpY3RvckFkZDVfVlNYOworKyAgVlA4TFByZWRpY3RvcnNBZGRbNl0gPSBQ cmVkaWN0b3JBZGQ2X1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzddID0gUHJlZGljdG9yQWRk N19WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFs4XSA9IFByZWRpY3RvckFkZDhfVlNYOworKyAg VlA4TFByZWRpY3RvcnNBZGRbOV0gPSBQcmVkaWN0b3JBZGQ5X1ZTWDsKKysgIFZQOExQcmVkaWN0 b3JzQWRkWzEwXSA9IFByZWRpY3RvckFkZDEwX1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzEx XSA9IFByZWRpY3RvckFkZDExX1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzEyXSA9IFByZWRp Y3RvckFkZDEyX1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzEzXSA9IFByZWRpY3RvckFkZDEz X1ZTWDsKKysKKysgIFZQOExBZGRHcmVlblRvQmx1ZUFuZFJlZCA9IEFkZEdyZWVuVG9CbHVlQW5k UmVkX1ZTWDsKKysgIFZQOExUcmFuc2Zvcm1Db2xvckludmVyc2UgPSBUcmFuc2Zvcm1Db2xvcklu dmVyc2VfVlNYOworKyAgVlA4TENvbnZlcnRCR1JBVG9SR0JBID0gQ29udmVydEJHUkFUb1JHQkFf VlNYOworKyAgVlA4TENvbnZlcnRCR1JBVG9SR0IgPSBDb252ZXJ0QkdSQVRvUkdCX1ZTWDsKKysg IFZQOExDb252ZXJ0QkdSQVRvQkdSID0gQ29udmVydEJHUkFUb0JHUl9WU1g7CisrfQorKworKyNl bHNlICAvLyAhV0VCUF9VU0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFZQOExEc3BJbml0 VlNYKQorKworKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGli d2VicC9zcmMvZHNwL21vei5idWlsZCBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9tb3ouYnVpbGQK K2luZGV4IDhkNmY4NDI3YzkwMC4uZjNlOWQxMjczMTEwIDEwMDY0NAorLS0tIGEvbWVkaWEvbGli d2VicC9zcmMvZHNwL21vei5idWlsZAorKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL21vei5i dWlsZAorQEAgLTExOCw2ICsxMTgsMjAgQEAgZWxpZiBDT05GSUdbJ1RBUkdFVF9DUFUnXS5zdGFy dHN3aXRoKCdtaXBzJyk6CisgICAgICAgICAneXV2X21pcHMzMi5jJywKKyAgICAgICAgICd5dXZf bWlwc19kc3BfcjIuYycsCisgICAgIF0KKytlbGlmIENPTkZJR1snVEFSR0VUX0NQVSddID09ICdw cGM2NCc6CisrICAgIFNPVVJDRVMgKz0gWworKyAgICAgICAgJ2FscGhhX3Byb2Nlc3NpbmdfdnN4 LmMnLAorKyAgICAgICAgJ2RlY192c3guYycsCisrICAgICAgICAnZmlsdGVyc192c3guYycsCisr ICAgICAgICAnbG9zc2xlc3NfdnN4LmMnLAorKyAgICAgICAgJ3Jlc2NhbGVyX3ZzeC5jJywKKysg ICAgICAgICd1cHNhbXBsaW5nX3ZzeC5jJywKKysgICAgICAgICd5dXZfdnN4LmMnLAorKyAgICBd CisrICAgIERFRklORVNbJ1dFQlBfSEFWRV9WU1gnXSA9IDE7CisrICAgIGZvciBmIGluIFNPVVJD RVM6CisrICAgICAgaWYgZi5lbmRzd2l0aCgndnN4LmMnKToKKysgICAgICAgIFNPVVJDRVNbZl0u ZmxhZ3MgKz0gWyctbXZzeCddCisgCisgaWYgQ09ORklHWydDQ19UWVBFJ10gaW4gKCdjbGFuZycs ICdjbGFuZy1jbCcpOgorICAgICBDRkxBR1MgKz0gWyctV25vLXVucmVhY2hhYmxlLWNvZGUnXQor ZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlci5jIGIvbWVkaWEvbGli d2VicC9zcmMvZHNwL3Jlc2NhbGVyLmMKK2luZGV4IGVhZmNjZDQ0MmYyNS4uMmMwYzhjNDdhN2Ez IDEwMDY0NAorLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyLmMKKysrKyBiL21l ZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlci5jCitAQCAtMjA3LDYgKzIwNyw3IEBAIGV4dGVy biB2b2lkIFdlYlBSZXNjYWxlckRzcEluaXRNSVBTMzIodm9pZCk7CisgZXh0ZXJuIHZvaWQgV2Vi UFJlc2NhbGVyRHNwSW5pdE1JUFNkc3BSMih2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQUmVzY2Fs ZXJEc3BJbml0TVNBKHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBSZXNjYWxlckRzcEluaXRORU9O KHZvaWQpOworK2V4dGVybiB2b2lkIFdlYlBSZXNjYWxlckRzcEluaXRWU1godm9pZCk7CisgCisg V0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBSZXNjYWxlckRzcEluaXQpIHsKKyAjaWYgIWRlZmluZWQo V0VCUF9SRURVQ0VfU0laRSkKK0BAIC0yMzgsNiArMjM5LDExIEBAIFdFQlBfRFNQX0lOSVRfRlVO QyhXZWJQUmVzY2FsZXJEc3BJbml0KSB7CisgICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNU0EpKSB7 CisgICAgICAgV2ViUFJlc2NhbGVyRHNwSW5pdE1TQSgpOworICAgICB9CisrI2VuZGlmCisrI2lm IGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKKysgICAgaWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsK KysgICAgICBXZWJQUmVzY2FsZXJEc3BJbml0VlNYKCk7CisrICAgIH0KKyAjZW5kaWYKKyAgIH0K KyAKK2RpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXJfdnN4LmMgYi9t ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXJfdnN4LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMDAuLjAwMmYyMzJkNjQ3YQorLS0tIC9kZXYvbnVsbAorKysrIGIv bWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyX3ZzeC5jCitAQCAtMCwwICsxLDIwMSBAQAor Ky8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrLy8K KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs aWNlbnNlCisrLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUg cm9vdCBvZiB0aGUgc291cmNlCisrLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorKy8vIGluIHRoZSBmaWxlIFBBVEVO VFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQorKy8vIGJlIGZvdW5kIGlu IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgorKy8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisrLy8KKysvLyBWU1ggKFBvd2VyUEMpIHZlcnNpb24gb2YgcmVz Y2FsaW5nIGZ1bmN0aW9ucy4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKKysKKysjaWYg ZGVmaW5lZChXRUJQX1VTRV9WU1gpICYmICFkZWZpbmVkKFdFQlBfUkVEVUNFX1NJWkUpCisrCisr I2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKworKyNpbmNsdWRlICJzcmMvZHNwL2NwdS5oIgorKyNpbmNsdWRlICJzcmMvdXRp bHMvcmVzY2FsZXJfdXRpbHMuaCIKKysjaW5jbHVkZSAic3JjL3dlYnAvdHlwZXMuaCIKKysKKyt0 eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdTh4MTY7CisrdHlwZWRlZiBfX3ZlY3RvciBz aWduZWQgc2hvcnQgaTE2eDg7CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgdTMyeDQ7 CisrdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgaW50IGkzMng0OworK3R5cGVkZWYgX192ZWN0b3Ig dW5zaWduZWQgbG9uZyBsb25nIHU2NHgyOworKworKyNkZWZpbmUgUk9VTkRFUiAoV0VCUF9SRVND QUxFUl9PTkUgPj4gMSkKKysjZGVmaW5lIE1VTFRfRklYX0MoeCwgeSkgKCgodWludDY0X3QpKHgp ICogKHkpICsgUk9VTkRFUikgPj4gV0VCUF9SRVNDQUxFUl9SRklYKQorKyNkZWZpbmUgTVVMVF9G SVhfRkxPT1JfQyh4LCB5KSAoKCh1aW50NjRfdCkoeCkgKiAoeSkpID4+IFdFQlBfUkVTQ0FMRVJf UkZJWCkKKysKKysjaWYgKFdFQlBfUkVTQ0FMRVJfUkZJWCAhPSAzMikKKysjZXJyb3IgIk1VTFRf RklYL1dFQlBfUkVTQ0FMRVJfUkZJWCBuZWVkIHNvbWUgbW9yZSB3b3JrIgorKyNlbmRpZgorKwor Ky8vIFJldHVybnMgKHggKiBzY2FsZSArIFJPVU5ERVIpID4+IDMyIGZvciBlYWNoIG9mIHRoZSBm b3VyIDMyLWJpdCBsYW5lcy4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdTMyeDQgTXVsdEZpeF9WU1go dTMyeDQgeCwgdWludDMyX3Qgc2NhbGUpIHsKKysgIGNvbnN0IHU2NHgyIHJvdW5kZXIgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpUk9VTkRFUik7CisrICBjb25zdCB1NjR4MiBzaGlm dCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylXRUJQX1JFU0NBTEVSX1JGSVgpOwor KyAgY29uc3QgdTMyeDQgcyA9IHZlY19zcGxhdHMoc2NhbGUpOworKyAgLy8gdmVjX211bGUvdmVj X211bG8gcHJvZHVjZSB0aGUgMzJ4MzItPjY0IHByb2R1Y3RzIG9mIHRoZSBldmVuICgwLCAyKSBh bmQKKysgIC8vIG9kZCAoMSwgMykgbGFuZXMgcmVzcGVjdGl2ZWx5LgorKyAgdTY0eDIgZSA9IHZl Y19hZGQodmVjX211bGUoeCwgcyksIHJvdW5kZXIpOworKyAgdTY0eDIgbyA9IHZlY19hZGQodmVj X211bG8oeCwgcyksIHJvdW5kZXIpOworKyAgZSA9IHZlY19zcihlLCBzaGlmdCk7CisrICBvID0g dmVjX3NyKG8sIHNoaWZ0KTsKKysgIHJldHVybiB2ZWNfbWVyZ2VlKCh1MzJ4NCllLCAodTMyeDQp byk7CisrfQorKworKy8vIFJldHVybnMgKHggKiBzY2FsZSkgPj4gMzIgZm9yIGVhY2ggbGFuZSAo bm8gcm91bmRpbmcpLgorK3N0YXRpYyBXRUJQX0lOTElORSB1MzJ4NCBNdWx0Rml4Rmxvb3JfVlNY KHUzMng0IHgsIHVpbnQzMl90IHNjYWxlKSB7CisrICBjb25zdCB1NjR4MiBzaGlmdCA9IHZlY19z cGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylXRUJQX1JFU0NBTEVSX1JGSVgpOworKyAgY29uc3Qg dTMyeDQgcyA9IHZlY19zcGxhdHMoc2NhbGUpOworKyAgdTY0eDIgZSA9IHZlY19zcih2ZWNfbXVs ZSh4LCBzKSwgc2hpZnQpOworKyAgdTY0eDIgbyA9IHZlY19zcih2ZWNfbXVsbyh4LCBzKSwgc2hp ZnQpOworKyAgcmV0dXJuIHZlY19tZXJnZWUoKHUzMng0KWUsICh1MzJ4NClvKTsKKyt9CisrCisr Ly8gUmV0dXJucyAoQSAqIGZyb3cgKyBCICogaXJvdyArIFJPVU5ERVIpID4+IDMyIGZvciBlYWNo IGxhbmUuCisrc3RhdGljIFdFQlBfSU5MSU5FIHUzMng0IEludGVycG9sYXRlX1ZTWChjb25zdCBy ZXNjYWxlcl90KiBXRUJQX1JFU1RSSUNUIGZyb3csCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCByZXNjYWxlcl90KiBXRUJQX1JFU1RSSUNUIGlyb3csCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBLCB1aW50 MzJfdCBCKSB7CisrICBjb25zdCB1NjR4MiByb3VuZGVyID0gdmVjX3NwbGF0cygodW5zaWduZWQg bG9uZyBsb25nKVJPVU5ERVIpOworKyAgY29uc3QgdTY0eDIgc2hpZnQgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBsb25nIGxvbmcpV0VCUF9SRVNDQUxFUl9SRklYKTsKKysgIGNvbnN0IHUzMng0IGYg PSB2ZWNfeGwoMCwgKHVpbnQzMl90Kilmcm93KTsKKysgIGNvbnN0IHUzMng0IGlyID0gdmVjX3hs KDAsICh1aW50MzJfdCopaXJvdyk7CisrICBjb25zdCB1MzJ4NCB2YSA9IHZlY19zcGxhdHMoQSk7 CisrICBjb25zdCB1MzJ4NCB2YiA9IHZlY19zcGxhdHMoQik7CisrICB1NjR4MiBlID0gdmVjX2Fk ZCh2ZWNfbXVsZShmLCB2YSksIHZlY19tdWxlKGlyLCB2YikpOworKyAgdTY0eDIgbyA9IHZlY19h ZGQodmVjX211bG8oZiwgdmEpLCB2ZWNfbXVsbyhpciwgdmIpKTsKKysgIGUgPSB2ZWNfc3IodmVj X2FkZChlLCByb3VuZGVyKSwgc2hpZnQpOworKyAgbyA9IHZlY19zcih2ZWNfYWRkKG8sIHJvdW5k ZXIpLCBzaGlmdCk7CisrICByZXR1cm4gdmVjX21lcmdlZSgodTMyeDQpZSwgKHUzMng0KW8pOwor K30KKysKKysvLyBTYXR1cmF0ZWQgcGFjayBvZiB0d28gMzItYml0IGxhbmUgdmVjdG9ycyAoOCB2 YWx1ZXMpIGludG8gOCBieXRlcyBhdCBkc3QuCisrc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgU3Rv cmU4X1ZTWCh1MzJ4NCBsbywgdTMyeDQgaGksIHVpbnQ4X3QqIGRzdCkgeworKyAgY29uc3QgaTE2 eDggczE2ID0gdmVjX3BhY2tzKChpMzJ4NClsbywgKGkzMng0KWhpKTsKKysgIGNvbnN0IHU4eDE2 IHM4ID0gdmVjX3BhY2tzdShzMTYsIHMxNik7CisrICBtZW1jcHkoZHN0LCAmczgsIDgpOworK30K KysKKytzdGF0aWMgdm9pZCBSZXNjYWxlckV4cG9ydFJvd0V4cGFuZF9WU1goV2ViUFJlc2NhbGVy KiBjb25zdCB3cmspIHsKKysgIGludCB4X291dDsKKysgIHVpbnQ4X3QqIGNvbnN0IGRzdCA9IHdy ay0+ZHN0OworKyAgcmVzY2FsZXJfdCogY29uc3QgaXJvdyA9IHdyay0+aXJvdzsKKysgIGNvbnN0 IGludCB4X291dF9tYXggPSB3cmstPmRzdF93aWR0aCAqIHdyay0+bnVtX2NoYW5uZWxzOworKyAg Y29uc3QgaW50IG1heF9zcGFuID0geF9vdXRfbWF4ICYgfjc7CisrICBjb25zdCByZXNjYWxlcl90 KiBjb25zdCBmcm93ID0gd3JrLT5mcm93OworKyAgY29uc3QgdWludDMyX3QgZnlfc2NhbGUgPSB3 cmstPmZ5X3NjYWxlOworKyAgYXNzZXJ0KCFXZWJQUmVzY2FsZXJPdXRwdXREb25lKHdyaykpOwor KyAgYXNzZXJ0KHdyay0+eV9hY2N1bSA8PSAwKTsKKysgIGFzc2VydCh3cmstPnlfZXhwYW5kKTsK KysgIGFzc2VydCh3cmstPnlfc3ViICE9IDApOworKyAgaWYgKHdyay0+eV9hY2N1bSA9PSAwKSB7 CisrICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9zcGFuOyB4X291dCArPSA4KSB7Cisr ICAgICAgY29uc3QgdTMyeDQgQTAgPSB2ZWNfeGwoMCwgKHVpbnQzMl90KikoZnJvdyArIHhfb3V0 ICsgMCkpOworKyAgICAgIGNvbnN0IHUzMng0IEExID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGZy b3cgKyB4X291dCArIDQpKTsKKysgICAgICBjb25zdCB1MzJ4NCBCMCA9IE11bHRGaXhfVlNYKEEw LCBmeV9zY2FsZSk7CisrICAgICAgY29uc3QgdTMyeDQgQjEgPSBNdWx0Rml4X1ZTWChBMSwgZnlf c2NhbGUpOworKyAgICAgIFN0b3JlOF9WU1goQjAsIEIxLCBkc3QgKyB4X291dCk7CisrICAgIH0K KysgICAgZm9yICg7IHhfb3V0IDwgeF9vdXRfbWF4OyArK3hfb3V0KSB7CisrICAgICAgY29uc3Qg dWludDMyX3QgSiA9IGZyb3dbeF9vdXRdOworKyAgICAgIGNvbnN0IGludCB2ID0gKGludClNVUxU X0ZJWF9DKEosIGZ5X3NjYWxlKTsKKysgICAgICBkc3RbeF9vdXRdID0gKHYgPiAyNTUpID8gMjU1 dSA6ICh1aW50OF90KXY7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIGNvbnN0IHVpbnQzMl90 IEIgPSBXRUJQX1JFU0NBTEVSX0ZSQUMoLXdyay0+eV9hY2N1bSwgd3JrLT55X3N1Yik7CisrICAg IGNvbnN0IHVpbnQzMl90IEEgPSAodWludDMyX3QpKFdFQlBfUkVTQ0FMRVJfT05FIC0gQik7Cisr ICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9zcGFuOyB4X291dCArPSA4KSB7CisrICAg ICAgY29uc3QgdTMyeDQgQzAgPQorKyAgICAgICAgICBJbnRlcnBvbGF0ZV9WU1goZnJvdyArIHhf b3V0ICsgMCwgaXJvdyArIHhfb3V0ICsgMCwgQSwgQik7CisrICAgICAgY29uc3QgdTMyeDQgQzEg PQorKyAgICAgICAgICBJbnRlcnBvbGF0ZV9WU1goZnJvdyArIHhfb3V0ICsgNCwgaXJvdyArIHhf b3V0ICsgNCwgQSwgQik7CisrICAgICAgY29uc3QgdTMyeDQgRDAgPSBNdWx0Rml4X1ZTWChDMCwg Znlfc2NhbGUpOworKyAgICAgIGNvbnN0IHUzMng0IEQxID0gTXVsdEZpeF9WU1goQzEsIGZ5X3Nj YWxlKTsKKysgICAgICBTdG9yZThfVlNYKEQwLCBEMSwgZHN0ICsgeF9vdXQpOworKyAgICB9Cisr ICAgIGZvciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291dCkgeworKyAgICAgIGNvbnN0IHVp bnQ2NF90IEkgPSAodWludDY0X3QpQSAqIGZyb3dbeF9vdXRdICsgKHVpbnQ2NF90KUIgKiBpcm93 W3hfb3V0XTsKKysgICAgICBjb25zdCB1aW50MzJfdCBKID0gKHVpbnQzMl90KSgoSSArIFJPVU5E RVIpID4+IFdFQlBfUkVTQ0FMRVJfUkZJWCk7CisrICAgICAgY29uc3QgaW50IHYgPSAoaW50KU1V TFRfRklYX0MoSiwgZnlfc2NhbGUpOworKyAgICAgIGRzdFt4X291dF0gPSAodiA+IDI1NSkgPyAy NTV1IDogKHVpbnQ4X3QpdjsKKysgICAgfQorKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBSZXNj YWxlckV4cG9ydFJvd1Nocmlua19WU1goV2ViUFJlc2NhbGVyKiBjb25zdCB3cmspIHsKKysgIGlu dCB4X291dDsKKysgIHVpbnQ4X3QqIGNvbnN0IGRzdCA9IHdyay0+ZHN0OworKyAgcmVzY2FsZXJf dCogY29uc3QgaXJvdyA9IHdyay0+aXJvdzsKKysgIGNvbnN0IGludCB4X291dF9tYXggPSB3cmst PmRzdF93aWR0aCAqIHdyay0+bnVtX2NoYW5uZWxzOworKyAgY29uc3QgaW50IG1heF9zcGFuID0g eF9vdXRfbWF4ICYgfjc7CisrICBjb25zdCByZXNjYWxlcl90KiBjb25zdCBmcm93ID0gd3JrLT5m cm93OworKyAgY29uc3QgdWludDMyX3QgeXNjYWxlID0gd3JrLT5meV9zY2FsZSAqICgtd3JrLT55 X2FjY3VtKTsKKysgIGNvbnN0IHVpbnQzMl90IGZ4eV9zY2FsZSA9IHdyay0+Znh5X3NjYWxlOwor KyAgYXNzZXJ0KCFXZWJQUmVzY2FsZXJPdXRwdXREb25lKHdyaykpOworKyAgYXNzZXJ0KHdyay0+ eV9hY2N1bSA8PSAwKTsKKysgIGFzc2VydCghd3JrLT55X2V4cGFuZCk7CisrICBpZiAoeXNjYWxl KSB7CisrICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9zcGFuOyB4X291dCArPSA4KSB7 CisrICAgICAgY29uc3QgdTMyeDQgaW4wID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGZyb3cgKyB4 X291dCArIDApKTsKKysgICAgICBjb25zdCB1MzJ4NCBpbjEgPSB2ZWNfeGwoMCwgKHVpbnQzMl90 KikoZnJvdyArIHhfb3V0ICsgNCkpOworKyAgICAgIGNvbnN0IHUzMng0IGluMiA9IHZlY194bCgw LCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyAwKSk7CisrICAgICAgY29uc3QgdTMyeDQgaW4z ID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291dCArIDQpKTsKKysgICAgICBjb25z dCB1MzJ4NCBBMCA9IE11bHRGaXhGbG9vcl9WU1goaW4wLCB5c2NhbGUpOworKyAgICAgIGNvbnN0 IHUzMng0IEExID0gTXVsdEZpeEZsb29yX1ZTWChpbjEsIHlzY2FsZSk7CisrICAgICAgY29uc3Qg dTMyeDQgQjAgPSB2ZWNfc3ViKGluMiwgQTApOworKyAgICAgIGNvbnN0IHUzMng0IEIxID0gdmVj X3N1YihpbjMsIEExKTsKKysgICAgICBjb25zdCB1MzJ4NCBDMCA9IE11bHRGaXhfVlNYKEIwLCBm eHlfc2NhbGUpOworKyAgICAgIGNvbnN0IHUzMng0IEMxID0gTXVsdEZpeF9WU1goQjEsIGZ4eV9z Y2FsZSk7CisrICAgICAgU3RvcmU4X1ZTWChDMCwgQzEsIGRzdCArIHhfb3V0KTsKKysgICAgICB2 ZWNfeHN0KEEwLCAwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyAwKSk7CisrICAgICAgdmVj X3hzdChBMSwgMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgNCkpOworKyAgICB9CisrICAg IGZvciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291dCkgeworKyAgICAgIGNvbnN0IHVpbnQz Ml90IGZyYWMgPSAodWludDMyX3QpTVVMVF9GSVhfRkxPT1JfQyhmcm93W3hfb3V0XSwgeXNjYWxl KTsKKysgICAgICBjb25zdCBpbnQgdiA9IChpbnQpTVVMVF9GSVhfQyhpcm93W3hfb3V0XSAtIGZy YWMsIGZ4eV9zY2FsZSk7CisrICAgICAgZHN0W3hfb3V0XSA9ICh2ID4gMjU1KSA/IDI1NXUgOiAo dWludDhfdCl2OworKyAgICAgIGlyb3dbeF9vdXRdID0gZnJhYzsgIC8vIG5ldyBmcmFjdGlvbmFs IHN0YXJ0CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIGNvbnN0IHUzMng0IHplcm8gPSB2ZWNf c3BsYXRzKCh1aW50MzJfdCkwKTsKKysgICAgZm9yICh4X291dCA9IDA7IHhfb3V0IDwgbWF4X3Nw YW47IHhfb3V0ICs9IDgpIHsKKysgICAgICBjb25zdCB1MzJ4NCBpbjAgPSB2ZWNfeGwoMCwgKHVp bnQzMl90KikoaXJvdyArIHhfb3V0ICsgMCkpOworKyAgICAgIGNvbnN0IHUzMng0IGluMSA9IHZl Y194bCgwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyA0KSk7CisrICAgICAgY29uc3QgdTMy eDQgQTAgPSBNdWx0Rml4X1ZTWChpbjAsIGZ4eV9zY2FsZSk7CisrICAgICAgY29uc3QgdTMyeDQg QTEgPSBNdWx0Rml4X1ZTWChpbjEsIGZ4eV9zY2FsZSk7CisrICAgICAgU3RvcmU4X1ZTWChBMCwg QTEsIGRzdCArIHhfb3V0KTsKKysgICAgICB2ZWNfeHN0KHplcm8sIDAsICh1aW50MzJfdCopKGly b3cgKyB4X291dCArIDApKTsKKysgICAgICB2ZWNfeHN0KHplcm8sIDAsICh1aW50MzJfdCopKGly b3cgKyB4X291dCArIDQpKTsKKysgICAgfQorKyAgICBmb3IgKDsgeF9vdXQgPCB4X291dF9tYXg7 ICsreF9vdXQpIHsKKysgICAgICBjb25zdCBpbnQgdiA9IChpbnQpTVVMVF9GSVhfQyhpcm93W3hf b3V0XSwgZnh5X3NjYWxlKTsKKysgICAgICBkc3RbeF9vdXRdID0gKHYgPiAyNTUpID8gMjU1dSA6 ICh1aW50OF90KXY7CisrICAgICAgaXJvd1t4X291dF0gPSAwOworKyAgICB9CisrICB9CisrfQor KworKyN1bmRlZiBNVUxUX0ZJWF9GTE9PUl9DCisrI3VuZGVmIE1VTFRfRklYX0MKKysjdW5kZWYg Uk9VTkRFUgorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrZXh0ZXJuIHZvaWQgV2Vi UFJlc2NhbGVyRHNwSW5pdFZTWCh2b2lkKTsKKysKKytXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9O IHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdFZTWCh2b2lkKSB7CisrICBXZWJQUmVzY2FsZXJFeHBv cnRSb3dFeHBhbmQgPSBSZXNjYWxlckV4cG9ydFJvd0V4cGFuZF9WU1g7CisrICBXZWJQUmVzY2Fs ZXJFeHBvcnRSb3dTaHJpbmsgPSBSZXNjYWxlckV4cG9ydFJvd1Nocmlua19WU1g7CisrfQorKwor KyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFdlYlBSZXNj YWxlckRzcEluaXRWU1gpCisrCisrI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gKK2RpZmYgLS1naXQg YS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5jIGIvbWVkaWEvbGlid2VicC9zcmMv ZHNwL3Vwc2FtcGxpbmcuYworaW5kZXggYzU3ZjY2YzM1NTNmLi5mYWVjZGYyNzczOTMgMTAwNjQ0 CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5jCisrKysgYi9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5jCitAQCAtMjM1LDYgKzIzNSw3IEBAIGV4dGVybiBW UDhDUFVJbmZvIFZQOEdldENQVUluZm87CisgZXh0ZXJuIHZvaWQgV2ViUEluaXRZVVY0NDRDb252 ZXJ0ZXJzTUlQU2RzcFIyKHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVy dGVyc1NTRTIodm9pZCk7CisgZXh0ZXJuIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzU1NF NDEodm9pZCk7CisrZXh0ZXJuIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzVlNYKHZvaWQp OworIAorIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnMpIHsKKyAg IFdlYlBZVVY0NDRDb252ZXJ0ZXJzW01PREVfUkdCQV0gICAgICA9IFdlYlBZdXY0NDRUb1JnYmFf QzsKK0BAIC0yNjQsNiArMjY1LDExIEBAIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdFlVVjQ0 NENvbnZlcnRlcnMpIHsKKyAgICAgaWYgKFZQOEdldENQVUluZm8oa01JUFNkc3BSMikpIHsKKyAg ICAgICBXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNNSVBTZHNwUjIoKTsKKyAgICAgfQorKyNlbmRp ZgorKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRDUFVJbmZvKGtW U1gpKSB7CisrICAgICAgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzVlNYKCk7CisrICAgIH0KKyAj ZW5kaWYKKyAgIH0KKyB9CitAQCAtMjc2LDYgKzI4Miw3IEBAIGV4dGVybiB2b2lkIFdlYlBJbml0 VXBzYW1wbGVyc1NTRTQxKHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc05F T04odm9pZCk7CisgZXh0ZXJuIHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzTUlQU2RzcFIyKHZvaWQp OworIGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc01TQSh2b2lkKTsKKytleHRlcm4gdm9p ZCBXZWJQSW5pdFVwc2FtcGxlcnNWU1godm9pZCk7CisgCisgV0VCUF9EU1BfSU5JVF9GVU5DKFdl YlBJbml0VXBzYW1wbGVycykgeworICNpZmRlZiBGQU5DWV9VUFNBTVBMSU5HCitAQCAtMzE0LDYg KzMyMSwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRVcHNhbXBsZXJzKSB7CisgICAg IGlmIChWUDhHZXRDUFVJbmZvKGtNU0EpKSB7CisgICAgICAgV2ViUEluaXRVcHNhbXBsZXJzTVNB KCk7CisgICAgIH0KKysjZW5kaWYKKysjaWYgZGVmaW5lZChXRUJQX0hBVkVfVlNYKQorKyAgICBp ZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgeworKyAgICAgIFdlYlBJbml0VXBzYW1wbGVyc1ZTWCgp OworKyAgICB9CisgI2VuZGlmCisgICB9CisgCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL3Vwc2FtcGxpbmdfdnN4LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGlu Z192c3guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uYTcxOTE5 NzJmYzZlCistLS0gL2Rldi9udWxsCisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1w bGluZ192c3guYworQEAgLTAsMCArMSwxNTEgQEAKKysvLyBDb3B5cmlnaHQgMjAxMSBHb29nbGUg SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKy8vCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQorKy8vIHRoYXQgY2FuIGJlIGZv dW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorKy8vIHRy ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g YmUgZm91bmQKKysvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2pl Y3QgYXV0aG9ycyBtYXkKKysvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vCisr Ly8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9mIFlVViB0byBSR0IgdXBzYW1wbGluZyBmdW5jdGlv bnMuCisrCisrI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmluZWQoV0VCUF9V U0VfVlNYKQorKworKyNpbmNsdWRlIDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAic3JjL2RzcC9jcHUuaCIKKysjaW5j bHVkZSAic3JjL2RzcC95dXYuaCIKKysjaW5jbHVkZSAic3JjL3dlYnAvZGVjb2RlLmgiCisrI2lu Y2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgiCisrCisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIHU4eDE2OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdTE2eDg7CisrCisr Ly8gVXBzYW1wbGUgMTYgY2hyb21hIHBhaXJzIGZyb20gcm93cyByMS9yMiAoMTcgcmVhZGFibGUg Ynl0ZXMgZWFjaCkgaW50byAzMgorKy8vICJ0b3AiIGJ5dGVzIGF0IG91dFswLi4zMV0gYW5kIDMy ICJib3R0b20iIGJ5dGVzIGF0IG91dFs2NC4uOTVdLCBtYXRjaGluZyB0aGUKKysvLyBmYW5jeS11 cHNhbXBsZXIgZGlhZ29uYWwgd2VpZ2h0cyAoYSArIDNiICsgM2MgKyBkKSAvIDggZXRjLgorKyNk ZWZpbmUgR0VUX00oaWosIGluKSBcCisrICB2ZWNfc3ViKHZlY19hdmcoaywgKGluKSksIFwKKysg ICAgICAgICAgdmVjX2FuZCh2ZWNfb3IodmVjX2FuZCgoaWopLCBzdCksIHZlY194b3IoaywgKGlu KSkpLCBvbmUpKQorKworK3N0YXRpYyB2b2lkIFVwc2FtcGxlMzJQaXhlbHMoY29uc3QgdWludDhf dCogV0VCUF9SRVNUUklDVCByMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcjIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIG91dCkgeworKyAgY29uc3QgdTh4MTYgb25lID0gdmVj X3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsKKysgIGNvbnN0IHU4eDE2IGEgPSB2ZWNfeGwoMCwg KGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIxKTsKKysgIGNvbnN0IHU4eDE2IGIgPSB2ZWNfeGwoMSwg KGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIxKTsKKysgIGNvbnN0IHU4eDE2IGMgPSB2ZWNfeGwoMCwg KGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIyKTsKKysgIGNvbnN0IHU4eDE2IGQgPSB2ZWNfeGwoMSwg KGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIyKTsKKysgIGNvbnN0IHU4eDE2IHMgPSB2ZWNfYXZnKGEs IGQpOworKyAgY29uc3QgdTh4MTYgdCA9IHZlY19hdmcoYiwgYyk7CisrICBjb25zdCB1OHgxNiBz dCA9IHZlY194b3IocywgdCk7CisrICBjb25zdCB1OHgxNiB0MyA9CisrICAgICAgdmVjX2FuZCh2 ZWNfb3IodmVjX29yKHZlY194b3IoYSwgZCksIHZlY194b3IoYiwgYykpLCBzdCksIG9uZSk7Cisr ICBjb25zdCB1OHgxNiBrID0gdmVjX3N1Yih2ZWNfYXZnKHMsIHQpLCB0Myk7CisrICBjb25zdCB1 OHgxNiBkaWFnMSA9IEdFVF9NKHZlY194b3IoYiwgYyksIHQpOworKyAgY29uc3QgdTh4MTYgZGlh ZzIgPSBHRVRfTSh2ZWNfeG9yKGEsIGQpLCBzKTsKKysgIGNvbnN0IHU4eDE2IHRhID0gdmVjX2F2 ZyhhLCBkaWFnMSksIHRiID0gdmVjX2F2ZyhiLCBkaWFnMik7CisrICBjb25zdCB1OHgxNiB0YyA9 IHZlY19hdmcoYywgZGlhZzIpLCB0ZCA9IHZlY19hdmcoZCwgZGlhZzEpOworKyAgdmVjX3hzdCh2 ZWNfbWVyZ2VoKHRhLCB0YiksIDAsIG91dCk7CisrICB2ZWNfeHN0KHZlY19tZXJnZWwodGEsIHRi KSwgMCwgb3V0ICsgMTYpOworKyAgdmVjX3hzdCh2ZWNfbWVyZ2VoKHRjLCB0ZCksIDAsIG91dCAr IDY0KTsKKysgIHZlY194c3QodmVjX21lcmdlbCh0YywgdGQpLCAwLCBvdXQgKyA4MCk7CisrfQor KworKyNkZWZpbmUgVVBTQU1QTEVfRlVOQyhGVU5DX05BTUUsIEZVTkMsIEZVTkMzMikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrc3RhdGljIHZvaWQgRlVOQ19OQU1FKGNvbnN0 IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdG9wX3ksICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBib3R0b21f eSwgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90KiBXRUJQX1JFU1RSSUNUIHRvcF91LCAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdG9wX3YsICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog V0VCUF9SRVNUUklDVCBjdXJfdSwgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGN1cl92LCAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJ Q1QgdG9wX2RzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBib3R0b21fZHN0LCBpbnQgbGVuKSB7ICAgICAg ICAgICAgXAorKyAgaW50IHV2X3BvcywgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVpbnQ4X3QgdXZfYnVmWzE0ICog MzIgKyAxNV0gPSB7MH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICB1aW50OF90KiBjb25zdCByX3UgPSAodWludDhfdCopKCgodWludHB0cl90KSh1dl9idWYg KyAxNSkpICYgfih1aW50cHRyX3QpMTUpO1wKKysgIHVpbnQ4X3QqIGNvbnN0IHJfdiA9IHJfdSAr IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBh c3NlcnQodG9wX3kgIT0gTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgY29uc3Qg aW50IHVfZGlhZyA9ICgodG9wX3VbMF0gKyBjdXJfdVswXSkgPj4gMSkgKyAxOyAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIGNvbnN0IGludCB2X2RpYWcgPSAoKHRvcF92WzBdICsgY3VyX3Zb MF0pID4+IDEpICsgMTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBGVU5DKHRvcF95WzBd LCAodG9wX3VbMF0gKyB1X2RpYWcpID4+IDEsICh0b3BfdlswXSArIHZfZGlhZykgPj4gMSwgICAg ICAgIFwKKysgICAgICAgICB0b3BfZHN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKGJvdHRvbV95ICE9IE5VTEwp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgRlVOQyhib3R0b21feVswXSwgKGN1cl91WzBdICsgdV9kaWFnKSA+PiAxLCAoY3VyX3Zb MF0gKyB2X2RpYWcpID4+IDEsICAgXAorKyAgICAgICAgICAgYm90dG9tX2RzdCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBmb3IgKHBvcyA9IDEs IHV2X3BvcyA9IDA7IHBvcyArIDMyICsgMSA8PSBsZW47IHBvcyArPSAzMiwgdXZfcG9zICs9IDE2 KSB7ICAgXAorKyAgICBVcHNhbXBsZTMyUGl4ZWxzKHRvcF91ICsgdXZfcG9zLCBjdXJfdSArIHV2 X3Bvcywgcl91KTsgICAgICAgICAgICAgICAgICAgIFwKKysgICAgVXBzYW1wbGUzMlBpeGVscyh0 b3BfdiArIHV2X3BvcywgY3VyX3YgKyB1dl9wb3MsIHJfdik7ICAgICAgICAgICAgICAgICAgICBc CisrICAgIEZVTkMzMih0b3BfeSArIHBvcywgcl91LCByX3YsIHRvcF9kc3QgKyBwb3MgKiA0KTsg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoYm90dG9tX3kgIT0gTlVMTCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICBGVU5DMzIoYm90dG9tX3kgKyBwb3MsIHJfdSArIDY0LCByX3YgKyA2NCwgYm90dG9tX2RzdCAr IHBvcyAqIDQpOyAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIGlmIChsZW4gPiAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGNvbnN0IGludCBsZWZ0 X292ZXIgPSAoKGxlbiArIDEpID4+IDEpIC0gKHBvcyA+PiAxKTsgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICB1aW50OF90KiBjb25zdCB0bXBfdG9wX2RzdCA9IHJfdSArIDQgKiAzMjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdWludDhfdCogY29uc3QgdG1wX2Jv dHRvbV9kc3QgPSB0bXBfdG9wX2RzdCArIDQgKiAzMjsgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIHVpbnQ4X3QqIGNvbnN0IHRtcF90b3AgPSB0bXBfYm90dG9tX2RzdCArIDQgKiAzMjsgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1aW50OF90KiBjb25zdCB0bXBfYm90dG9tID0g KGJvdHRvbV95ID09IE5VTEwpID8gTlVMTCA6IHRtcF90b3AgKyAzMjsgICAgIFwKKysgICAgdWlu dDhfdCByMVsxN10sIHIyWzE3XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIGFzc2VydChsZWZ0X292ZXIgPiAwKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBtZW1jcHkocjEs IHRvcF91ICsgdXZfcG9zLCBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgbWVtY3B5KHIyLCBjdXJfdSArIHV2X3BvcywgbGVmdF9vdmVyKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIG1lbXNldChyMSArIGxlZnRf b3ZlciwgcjFbbGVmdF9vdmVyIC0gMV0sIDE3IC0gbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAg XAorKyAgICBtZW1zZXQocjIgKyBsZWZ0X292ZXIsIHIyW2xlZnRfb3ZlciAtIDFdLCAxNyAtIGxl ZnRfb3Zlcik7ICAgICAgICAgICAgICAgIFwKKysgICAgVXBzYW1wbGUzMlBpeGVscyhyMSwgcjIs IHJfdSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IG1lbWNweShyMSwgdG9wX3YgKyB1dl9wb3MsIGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICBtZW1jcHkocjIsIGN1cl92ICsgdXZfcG9zLCBsZWZ0 X292ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgbWVtc2V0 KHIxICsgbGVmdF9vdmVyLCByMVtsZWZ0X292ZXIgLSAxXSwgMTcgLSBsZWZ0X292ZXIpOyAgICAg ICAgICAgICAgICBcCisrICAgIG1lbXNldChyMiArIGxlZnRfb3ZlciwgcjJbbGVmdF9vdmVyIC0g MV0sIDE3IC0gbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAgXAorKyAgICBVcHNhbXBsZTMyUGl4 ZWxzKHIxLCByMiwgcl92KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgbWVtY3B5KHRtcF90b3AsIHRvcF95ICsgcG9zLCBsZW4gLSBwb3MpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChib3R0b21feSAhPSBOVUxM KSBtZW1jcHkodG1wX2JvdHRvbSwgYm90dG9tX3kgKyBwb3MsIGxlbiAtIHBvcyk7ICAgICAgXAor KyAgICBGVU5DMzIodG1wX3RvcCwgcl91LCByX3YsIHRtcF90b3BfZHN0KTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKGJvdHRvbV95ICE9IE5VTEwpIEZVTkMz Mih0bXBfYm90dG9tLCByX3UgKyA2NCwgcl92ICsgNjQsICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfYm90dG9tX2RzdCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgbWVtY3B5KHRvcF9kc3QgKyBwb3MgKiA0LCB0bXBfdG9wX2Rz dCwgKGxlbiAtIHBvcykgKiA0KTsgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChib3R0b21f eSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgIG1lbWNweShib3R0b21fZHN0ICsgcG9zICogNCwgdG1wX2JvdHRvbV9k c3QsIChsZW4gLSBwb3MpICogNCk7ICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK30KKysKKytVUFNBTVBMRV9GVU5DKFVwc2FtcGxl UmdiYUxpbmVQYWlyX1ZTWCwgVlA4WXV2VG9SZ2JhLCBWUDhZdXZUb1JnYmEzMl9WU1gpCisrVVBT QU1QTEVfRlVOQyhVcHNhbXBsZUJncmFMaW5lUGFpcl9WU1gsIFZQOFl1dlRvQmdyYSwgVlA4WXV2 VG9CZ3JhMzJfVlNYKQorK1VQU0FNUExFX0ZVTkMoVXBzYW1wbGVBcmdiTGluZVBhaXJfVlNYLCBW UDhZdXZUb0FyZ2IsIFZQOFl1dlRvQXJnYjMyX1ZTWCkKKysKKytleHRlcm4gV2ViUFVwc2FtcGxl TGluZVBhaXJGdW5jIFdlYlBVcHNhbXBsZXJzWy8qIE1PREVfTEFTVCAqL107CisrCisrZXh0ZXJu IHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzVlNYKHZvaWQpOworKworK1dFQlBfVFNBTl9JR05PUkVf RlVOQ1RJT04gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNWU1godm9pZCkgeworKyAgV2ViUFVwc2Ft cGxlcnNbTU9ERV9SR0JBXSA9IFVwc2FtcGxlUmdiYUxpbmVQYWlyX1ZTWDsKKysgIFdlYlBVcHNh bXBsZXJzW01PREVfQkdSQV0gPSBVcHNhbXBsZUJncmFMaW5lUGFpcl9WU1g7CisrICBXZWJQVXBz YW1wbGVyc1tNT0RFX3JnYkFdID0gVXBzYW1wbGVSZ2JhTGluZVBhaXJfVlNYOworKyAgV2ViUFVw c2FtcGxlcnNbTU9ERV9iZ3JBXSA9IFVwc2FtcGxlQmdyYUxpbmVQYWlyX1ZTWDsKKysjaWYgIWRl ZmluZWQoV0VCUF9SRURVQ0VfQ1NQKQorKyAgV2ViUFVwc2FtcGxlcnNbTU9ERV9BUkdCXSA9IFVw c2FtcGxlQXJnYkxpbmVQYWlyX1ZTWDsKKysgIFdlYlBVcHNhbXBsZXJzW01PREVfQXJnYl0gPSBV cHNhbXBsZUFyZ2JMaW5lUGFpcl9WU1g7CisrI2VuZGlmCisrfQorKworK2V4dGVybiB2b2lkIFdl YlBJbml0WVVWNDQ0Q29udmVydGVyc1ZTWCh2b2lkKTsKKysKKysvLyBZVVY0NDQgcG9pbnQgY29u dmVydGVycyBzdGF5IG9uIHRoZSBDIHBhdGggZm9yIG5vdy4KKytXRUJQX1RTQU5fSUdOT1JFX0ZV TkNUSU9OIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzVlNYKHZvaWQpIHt9CisrCisrI2Vs c2UgIC8vICFXRUJQX1VTRV9WU1gKKysKKytXRUJQX0RTUF9JTklUX1NUVUIoV2ViUEluaXRZVVY0 NDRDb252ZXJ0ZXJzVlNYKQorKworK1dFQlBfRFNQX0lOSVRfU1RVQihXZWJQSW5pdFVwc2FtcGxl cnNWU1gpCisrCisrI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gKK2RpZmYgLS1naXQgYS9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AveXV2LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmMKK2luZGV4 IDYyZjFlY2MxNTY3ZC4uOWE5NWM1ZGUxZTIzIDEwMDY0NAorLS0tIGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL3l1di5jCisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmMKK0BAIC04MSw2 ICs4MSw3IEBAIGV4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNTU0UyKHZvaWQpOworIGV4dGVy biB2b2lkIFdlYlBJbml0U2FtcGxlcnNTU0U0MSh2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQSW5p dFNhbXBsZXJzTUlQUzMyKHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNNSVBT ZHNwUjIodm9pZCk7CisrZXh0ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVyc1ZTWCh2b2lkKTsKKyAK KyBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRTYW1wbGVycykgeworICAgV2ViUFNhbXBsZXJz W01PREVfUkdCXSAgICAgICA9IFl1dlRvUmdiUm93OworQEAgLTExNyw2ICsxMTgsMTEgQEAgV0VC UF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0U2FtcGxlcnMpIHsKKyAgICAgICBXZWJQSW5pdFNhbXBs ZXJzTUlQU2RzcFIyKCk7CisgICAgIH0KKyAjZW5kaWYgIC8vIFdFQlBfVVNFX01JUFNfRFNQX1Iy CisrI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKKysgICAgaWYgKFZQOEdldENQVUluZm8oa1ZT WCkpIHsKKysgICAgICBXZWJQSW5pdFNhbXBsZXJzVlNYKCk7CisrICAgIH0KKysjZW5kaWYKKyAg IH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5oIGIvbWVk aWEvbGlid2VicC9zcmMvZHNwL3l1di5oCitpbmRleCA2ZjIxOGNmN2UwN2YuLjk3OTg5MWQzMjMy ZCAxMDA2NDQKKy0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXYuaAorKysrIGIvbWVkaWEv bGlid2VicC9zcmMvZHNwL3l1di5oCitAQCAtMTgyLDYgKzE4MiwyNyBAQCB2b2lkIFZQOFl1dlRv UmdiNTY1MzJfU1NFMihjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisgCisgI2VuZGlm ICAgIC8vIFdFQlBfVVNFX1NTRTIKKyAKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gVlNY IGV4dHJhIGZ1bmN0aW9ucyAobW9zdGx5IGZvciB1cHNhbXBsaW5nX3ZzeC5jKQorKworKyNpZiBk ZWZpbmVkKFdFQlBfVVNFX1ZTWCkKKysKKysvLyBQcm9jZXNzIDMyIHBpeGVscyBhbmQgc3RvcmUg dGhlIDMyYi1wZXItcGl4ZWwgcmVzdWx0IGluICpkc3QuCisrdm9pZCBWUDhZdXZUb1JnYmEzMl9W U1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpOworK3ZvaWQgVlA4WXV2VG9CZ3JhMzJf VlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKKysgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KTsKKyt2b2lkIFZQOFl1dlRvQXJnYjMy X1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCk7CisrCisrI2VuZGlmICAgIC8vIFdF QlBfVVNFX1ZTWAorKworIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAvLyBTU0U0MSBleHRyYSBm dW5jdGlvbnMgKG1vc3RseSBmb3IgdXBzYW1wbGluZ19zc2U0MS5jKQorIAorZGlmZiAtLWdpdCBh L21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZfdnN4LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3Av eXV2X3ZzeC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi4xZmRj NWM4MGJhMTYKKy0tLSAvZGV2L251bGwKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZf dnN4LmMKK0BAIC0wLDAgKzEsMjA2IEBACisrLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4g QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysvLworKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKysvLyB0aGF0IGNhbiBiZSBmb3VuZCBp biB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKKysvLyB0cmVlLiBB biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv dW5kCisrLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1 dGhvcnMgbWF5CisrLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv ZiB0aGUgc291cmNlIHRyZWUuCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLworKy8vIFZT WCAoUG93ZXJQQykgdmVyc2lvbiBvZiBZVVYtPlJHQiBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KKysK KysjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKKysKKysjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gp CisrCisrI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lu Y2x1ZGUgInNyYy9kc3AveXV2LmgiCisrCisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy ICB1OHgxNjsKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHUxNng4OworK3R5cGVk ZWYgX192ZWN0b3Igc2lnbmVkICAgc2hvcnQgaTE2eDg7CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNp Z25lZCBpbnQgICB1MzJ4NDsKKysKKysvLyBQT1dFUjggaGFzIG5vICJtdWx0aXBseS1oaWdoIHVu c2lnbmVkIGhhbGZ3b3JkIiwgc28gZW11bGF0ZSBfbW1fbXVsaGlfZXB1MTYKKysvLyB2aWEgZXZl bi9vZGQgMTZ4MTYtPjMyIHByb2R1Y3RzLCA+PjE2LCB0aGVuIGludGVybGVhdmUgYmFjay4KKytz dGF0aWMgV0VCUF9JTkxJTkUgdTE2eDggTXVsSGkxNih1MTZ4OCBhLCB1MTZ4OCBiKSB7CisrICBj b25zdCB1MzJ4NCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkxNik7CisrICBjb25zdCB1 MzJ4NCBlID0gdmVjX3NyKHZlY19tdWxlKGEsIGIpLCBzaCk7CisrICBjb25zdCB1MzJ4NCBvID0g dmVjX3NyKHZlY19tdWxvKGEsIGIpLCBzaCk7CisrICByZXR1cm4gdmVjX3BhY2sodmVjX21lcmdl aChlLCBvKSwgdmVjX21lcmdlbChlLCBvKSk7CisrfQorKworKy8vIDE0YiBmaXhlZC1wb2ludCBJ VFUtUiBCVC42MDEgWVVWLT5SR0IsIG1hdGNoaW5nIHRoZSBTU0UyL3NjYWxhciBwYXRoLgorKy8v IElucHV0cyBhcmUgc2FtcGxlcyBwcmUtc2hpZnRlZCBpbnRvIHRoZSBoaWdoIGJ5dGUgKDw8IDgp LgorK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIENvbnZlcnRZVVY0NDRUb1JHQih1MTZ4OCBZMCwg dTE2eDggVTAsIHUxNng4IFYwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpMTZ4OCogY29uc3QgUiwgaTE2eDgqIGNvbnN0IEcsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNng4KiBjb25zdCBCKSB7CisrICBjb25zdCB1 MTZ4OCBrMTkwNzcgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxOTA3Nyk7CisrICBjb25z dCB1MTZ4OCBrMjYxNDkgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkyNjE0OSk7CisrICBj b25zdCB1MTZ4OCBrMTQyMzQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxNDIzNCk7Cisr ICBjb25zdCB1MTZ4OCBrMzMwNTAgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkzMzA1MCk7 CisrICBjb25zdCB1MTZ4OCBrMTc2ODUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxNzY4 NSk7CisrICBjb25zdCB1MTZ4OCBrNjQxOSAgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk2 NDE5KTsKKysgIGNvbnN0IHUxNng4IGsxMzMyMCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0 KTEzMzIwKTsKKysgIGNvbnN0IHUxNng4IGs4NzA4ICA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTg3MDgpOworKyAgY29uc3QgdTE2eDggc2l4ICAgID0gdmVjX3NwbGF0cygodW5zaWduZWQg c2hvcnQpNik7CisrCisrICBjb25zdCB1MTZ4OCBZMSA9IE11bEhpMTYoWTAsIGsxOTA3Nyk7Cisr ICBjb25zdCB1MTZ4OCBSMiA9IHZlY19hZGQodmVjX3N1YihZMSwgazE0MjM0KSwgTXVsSGkxNihW MCwgazI2MTQ5KSk7CisrICBjb25zdCB1MTZ4OCBHNCA9IHZlY19zdWIodmVjX2FkZChZMSwgazg3 MDgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19hZGQoTXVsSGkxNihVMCwgazY0 MTkpLCBNdWxIaTE2KFYwLCBrMTMzMjApKSk7CisrICAvLyAzMzA1MCBuZWVkcyB1bnNpZ25lZCBz YXR1cmF0aW5nIGFyaXRobWV0aWM7IEIgY2FuIGV4Y2VlZCAzMjc2Ny4KKysgIGNvbnN0IHUxNng4 IEIyID0gdmVjX3N1YnModmVjX2FkZHMoTXVsSGkxNihVMCwgazMzMDUwKSwgWTEpLCBrMTc2ODUp OworKworKyAgKlIgPSB2ZWNfc3JhKChpMTZ4OClSMiwgc2l4KTsKKysgICpHID0gdmVjX3NyYSgo aTE2eDgpRzQsIHNpeCk7CisrICAqQiA9IHZlY19zcihCMiwgc2l4KTsKKyt9CisrCisrLy8gTG9h ZCA4IGJ5dGVzIGludG8gdGhlIGhpZ2ggYnl0ZSBvZiA4IHUxNiBsYW5lcyAoaS5lLiBzYW1wbGUg PDwgOCkuCisrLy8gVXNlIGFuIDgtYnl0ZSBjb3B5IChub3QgYSAxNi1ieXRlIHZlY3RvciBsb2Fk KSB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlCisrLy8gZW5kIG9mIHRoZSBzb3VyY2Ugcm93LCBt YXRjaGluZyB0aGUgU1NFMiBfbW1fbG9hZGxfZXBpNjQgYmVoYXZpb3IuCisrc3RhdGljIFdFQlBf SU5MSU5FIHUxNng4IExvYWRIaTE2KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qgc3JjKSB7 CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysg IHVuc2lnbmVkIGNoYXIgdG1wWzE2XSA9IHswfTsKKysgIG1lbWNweSh0bXAsIHNyYywgOCk7Cisr ICByZXR1cm4gKHUxNng4KXZlY19tZXJnZWgoemVybywgdmVjX3hsKDAsIHRtcCkpOworK30KKysK KysvLyBMb2FkIDQgVS9WIGJ5dGVzLCBzaGlmdCBpbnRvIHRoZSBoaWdoIGJ5dGUsIGFuZCByZXBs aWNhdGUgZWFjaCBzYW1wbGUuCisrc3RhdGljIFdFQlBfSU5MSU5FIHUxNng4IExvYWRVVkhpOChj b25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHNyYykgeworKyAgY29uc3QgdTh4MTYgemVybyA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICB1bnNpZ25lZCBjaGFyIHRtcFsxNl0g PSB7MH07CisrICBtZW1jcHkodG1wLCBzcmMsIDQpOworKyAgY29uc3QgdTE2eDggdCA9ICh1MTZ4 OCl2ZWNfbWVyZ2VoKHplcm8sIHZlY194bCgwLCB0bXApKTsKKysgIHJldHVybiB2ZWNfbWVyZ2Vo KHQsIHQpOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBZVVY0MjBUb1JHQihjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMTZ4OCogY29uc3QgUiwgaTE2eDgq IGNvbnN0IEcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2eDgqIGNv bnN0IEIpIHsKKysgIENvbnZlcnRZVVY0NDRUb1JHQihMb2FkSGkxNih5KSwgTG9hZFVWSGk4KHUp LCBMb2FkVVZIaTgodiksIFIsIEcsIEIpOworK30KKysKKysvLyBQYWNrIGZvdXIgOC1sYW5lIGNo YW5uZWxzIGludG8gMzIgaW50ZXJsZWF2ZWQgYnl0ZXMgKGMwIGMxIGMyIGMzIHBlciBwaXhlbCku Cisrc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgUGFja0FuZFN0b3JlNChpMTZ4OCBjMCwgaTE2eDgg YzEsIGkxNng4IGMyLCBpMTZ4OCBjMywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7CisrICBjb25zdCB1OHgxNiBjMDIg PSB2ZWNfcGFja3N1KGMwLCBjMik7CisrICBjb25zdCB1OHgxNiBjMTMgPSB2ZWNfcGFja3N1KGMx LCBjMyk7CisrICBjb25zdCB1OHgxNiBsbzggPSB2ZWNfbWVyZ2VoKGMwMiwgYzEzKTsKKysgIGNv bnN0IHU4eDE2IGhpOCA9IHZlY19tZXJnZWwoYzAyLCBjMTMpOworKyAgdmVjX3hzdCgodTh4MTYp dmVjX21lcmdlaCgodTE2eDgpbG84LCAodTE2eDgpaGk4KSwgMCwgZHN0KTsKKysgIHZlY194c3Qo KHU4eDE2KXZlY19tZXJnZWwoKHUxNng4KWxvOCwgKHUxNng4KWhpOCksIDAsIGRzdCArIDE2KTsK Kyt9CisrCisrc3RhdGljIGNvbnN0IGkxNng4IGtBbHBoYSA9IHsyNTUsIDI1NSwgMjU1LCAyNTUs IDI1NSwgMjU1LCAyNTUsIDI1NX07CisrCisrc3RhdGljIHZvaWQgWXV2VG9SZ2JhUm93X1ZTWChj b25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwgaW50IGxlbikgewor KyAgaW50IG47CisrICBmb3IgKG4gPSAwOyBuICsgOCA8PSBsZW47IG4gKz0gOCwgZHN0ICs9IDMy KSB7CisrICAgIGkxNng4IFIsIEc7IHUxNng4IEI7CisrICAgIFlVVjQyMFRvUkdCKHksIHUsIHYs ICZSLCAmRywgJkIpOworKyAgICBQYWNrQW5kU3RvcmU0KFIsIEcsIChpMTZ4OClCLCBrQWxwaGEs IGRzdCk7CisrICAgIHkgKz0gODsgdSArPSA0OyB2ICs9IDQ7CisrICB9CisrICBmb3IgKDsgbiA8 IGxlbjsgKytuKSB7CisrICAgIFZQOFl1dlRvUmdiYSh5WzBdLCB1WzBdLCB2WzBdLCBkc3QpOwor KyAgICBkc3QgKz0gNDsgeSArPSAxOyB1ICs9IChuICYgMSk7IHYgKz0gKG4gJiAxKTsKKysgIH0K Kyt9CisrCisrc3RhdGljIHZvaWQgWXV2VG9CZ3JhUm93X1ZTWChjb25zdCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwgaW50IGxlbikgeworKyAgaW50IG47CisrICBmb3Ig KG4gPSAwOyBuICsgOCA8PSBsZW47IG4gKz0gOCwgZHN0ICs9IDMyKSB7CisrICAgIGkxNng4IFIs IEc7IHUxNng4IEI7CisrICAgIFlVVjQyMFRvUkdCKHksIHUsIHYsICZSLCAmRywgJkIpOworKyAg ICBQYWNrQW5kU3RvcmU0KChpMTZ4OClCLCBHLCBSLCBrQWxwaGEsIGRzdCk7CisrICAgIHkgKz0g ODsgdSArPSA0OyB2ICs9IDQ7CisrICB9CisrICBmb3IgKDsgbiA8IGxlbjsgKytuKSB7CisrICAg IFZQOFl1dlRvQmdyYSh5WzBdLCB1WzBdLCB2WzBdLCBkc3QpOworKyAgICBkc3QgKz0gNDsgeSAr PSAxOyB1ICs9IChuICYgMSk7IHYgKz0gKG4gJiAxKTsKKysgIH0KKyt9CisrCisrc3RhdGljIHZv aWQgWXV2VG9BcmdiUm93X1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIHYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RS SUNUIGRzdCwgaW50IGxlbikgeworKyAgaW50IG47CisrICBmb3IgKG4gPSAwOyBuICsgOCA8PSBs ZW47IG4gKz0gOCwgZHN0ICs9IDMyKSB7CisrICAgIGkxNng4IFIsIEc7IHUxNng4IEI7CisrICAg IFlVVjQyMFRvUkdCKHksIHUsIHYsICZSLCAmRywgJkIpOworKyAgICBQYWNrQW5kU3RvcmU0KGtB bHBoYSwgUiwgRywgKGkxNng4KUIsIGRzdCk7CisrICAgIHkgKz0gODsgdSArPSA0OyB2ICs9IDQ7 CisrICB9CisrICBmb3IgKDsgbiA8IGxlbjsgKytuKSB7CisrICAgIFZQOFl1dlRvQXJnYih5WzBd LCB1WzBdLCB2WzBdLCBkc3QpOworKyAgICBkc3QgKz0gNDsgeSArPSAxOyB1ICs9IChuICYgMSk7 IHYgKz0gKG4gJiAxKTsKKysgIH0KKyt9CisrCisrLy8gQ29udmVydCAzMiBZVVY0NDQgcGl4ZWxz IGFuZCBzdG9yZSB0aGUgMzJiLXBlci1waXhlbCByZXN1bHQuIFVzZWQgYnkgdGhlCisrLy8gZmFu Y3kgdXBzYW1wbGVyIGluIHVwc2FtcGxpbmdfdnN4LmMuCisrdm9pZCBWUDhZdXZUb1JnYmEzMl9W U1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKKysgIGludCBuOworKyAgZm9yIChu ID0gMDsgbiA8IDMyOyBuICs9IDgsIGRzdCArPSAzMikgeworKyAgICBpMTZ4OCBSLCBHOyB1MTZ4 OCBCOworKyAgICBDb252ZXJ0WVVWNDQ0VG9SR0IoTG9hZEhpMTYoeSArIG4pLCBMb2FkSGkxNih1 ICsgbiksIExvYWRIaTE2KHYgKyBuKSwKKysgICAgICAgICAgICAgICAgICAgICAgICZSLCAmRywg JkIpOworKyAgICBQYWNrQW5kU3RvcmU0KFIsIEcsIChpMTZ4OClCLCBrQWxwaGEsIGRzdCk7Cisr ICB9CisrfQorKworK3ZvaWQgVlA4WXV2VG9CZ3JhMzJfVlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBf UkVTVFJJQ1QgeSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VC UF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgZHN0KSB7CisrICBpbnQgbjsKKysgIGZvciAobiA9IDA7IG4gPCAzMjsgbiArPSA4LCBk c3QgKz0gMzIpIHsKKysgICAgaTE2eDggUiwgRzsgdTE2eDggQjsKKysgICAgQ29udmVydFlVVjQ0 NFRvUkdCKExvYWRIaTE2KHkgKyBuKSwgTG9hZEhpMTYodSArIG4pLCBMb2FkSGkxNih2ICsgbiks CisrICAgICAgICAgICAgICAgICAgICAgICAmUiwgJkcsICZCKTsKKysgICAgUGFja0FuZFN0b3Jl NCgoaTE2eDgpQiwgRywgUiwga0FscGhhLCBkc3QpOworKyAgfQorK30KKysKKyt2b2lkIFZQOFl1 dlRvQXJnYjMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCkgeworKyAgaW50IG47 CisrICBmb3IgKG4gPSAwOyBuIDwgMzI7IG4gKz0gOCwgZHN0ICs9IDMyKSB7CisrICAgIGkxNng4 IFIsIEc7IHUxNng4IEI7CisrICAgIENvbnZlcnRZVVY0NDRUb1JHQihMb2FkSGkxNih5ICsgbiks IExvYWRIaTE2KHUgKyBuKSwgTG9hZEhpMTYodiArIG4pLAorKyAgICAgICAgICAgICAgICAgICAg ICAgJlIsICZHLCAmQik7CisrICAgIFBhY2tBbmRTdG9yZTQoa0FscGhhLCBSLCBHLCAoaTE2eDgp QiwgZHN0KTsKKysgIH0KKyt9CisrCisrZXh0ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVyc1ZTWCh2 b2lkKTsKKysKKytXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9OIHZvaWQgV2ViUEluaXRTYW1wbGVy c1ZTWCh2b2lkKSB7CisrICBXZWJQU2FtcGxlcnNbTU9ERV9SR0JBXSA9IFl1dlRvUmdiYVJvd19W U1g7CisrICBXZWJQU2FtcGxlcnNbTU9ERV9CR1JBXSA9IFl1dlRvQmdyYVJvd19WU1g7CisrICBX ZWJQU2FtcGxlcnNbTU9ERV9BUkdCXSA9IFl1dlRvQXJnYlJvd19WU1g7CisrfQorKworKyNlbHNl ICAvLyAhV0VCUF9VU0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFdlYlBJbml0U2FtcGxl cnNWU1gpCisrCisrI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gKK2RpZmYgLS1naXQgYS9tZWRpYS9s aWJ3ZWJwL3NyYy9tb3ovY3B1LmNwcCBiL21lZGlhL2xpYndlYnAvc3JjL21vei9jcHUuY3BwCitp bmRleCBjNjYzMzE3MGM5MjMuLjgyOTg2ZDJmNjMxZSAxMDA2NDQKKy0tLSBhL21lZGlhL2xpYndl YnAvc3JjL21vei9jcHUuY3BwCisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9tb3ovY3B1LmNwcAor QEAgLTM1LDYgKzM1LDEwIEBAIHN0YXRpYyBpbnQgTW96Q1BVSW5mbyhDUFVGZWF0dXJlIGZlYXR1 cmUpCisgICAgIGNhc2Uga01JUFNkc3BSMjoKKyAgICAgY2FzZSBrTVNBOgorICAgICAgIHJldHVy biAxOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKKysgICAgY2FzZSBrVlNY OgorKyAgICAgIHJldHVybiAxOworICNlbmRpZgorICAgICBkZWZhdWx0OgorICAgICAgIHJldHVy biAwOworLS0gCisyLjUyLjAKKwoKZGlmZiAtLWdpdCBhLzAwMDMtQWRkLVBQQzY0TEUtSklULWJh Y2tlbmQucGF0Y2ggYi8wMDAzLUFkZC1QUEM2NExFLUpJVC1iYWNrZW5kLnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDhiMzMKLS0tIC9kZXYvbnVsbAorKysgYi8w MDAzLUFkZC1QUEM2NExFLUpJVC1iYWNrZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzgyMDUgQEAKK0Zy b20gYzc5OTI2ZTQxNzY0YzZhYTZhZTU5NjgxMmIyM2JjMzViNDcwMDI4YyBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9UcnVuZz0yMEw9QzM9QUE/PSA8OEB0bGUuaWQu YXU+CitEYXRlOiBGcmksIDEyIEp1biAyMDI2IDE2OjAyOjI4ICsxMDAwCitTdWJqZWN0OiBbUEFU Q0ggMy8zXSBBZGQgUFBDNjRMRSBKSVQgYmFja2VuZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogOGJpdAorCitCYXNlZCBvbiB0aGUgd29yayBkb25lIGJ5IENhbWVyb24gS2Fpc2VyIGFu ZCBKdXN0aW4gSGliYml0cworaHR0cHM6Ly9naXRodWIuY29tL2NobWVlZWRhbGYvZ2Vja28tZGV2 CisKK0NvLWF1dGhvcmVkLWJ5OiBDYW1lcm9uIEthaXNlciA8Y2xhc3NpbGxhQGZsb29kZ2FwLmNv bT4KK0NvLWF1dGhvcmVkLWJ5OiBKdXN0aW4gSGliYml0cyA8Y2htZWVlZGFsZkBnbWFpbC5jb20+ CitBc3Npc3RlZC1ieTogTGFuY2UgQWxiZXJ0c29uIDxsYW5jZUBvc3Vvc2wub3JnPgorQXNzaXN0 ZWQtYnk6IFRodXNoYW4gRmVybmFuZG8gPHRodXNoYW5AdGh1c2hhbmZlcm5hbmRvLmNvbT4KK0Fz c2lzdGVkLWJ5OiBUaW1vdGh5IFBlYXJzb24gPHRwZWFyc29uQHNvbGlkc2lsaWNvbi5jb20+CitB c3Npc3RlZC1ieTogRGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6PgorQXNzaXN0ZWQtYnk6IEhp4bq/ dSBMw6ogPG1vZG9sb2d5QGdtYWlsLmNvbT4KK0Fzc2lzdGVkLWJ5OiBDbGF1ZGUgRmFibGUgNSA8 bm9yZXBseUBhbnRocm9waWMuY29tPgorLS0tCisgY29uZmlnL2NoZWNrX21hY3JvYXNzZW1ibGVy X3N0eWxlLnB5ICAgICAgICAgIHwgICAgMiArCisganMvbW96LmNvbmZpZ3VyZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAzNCArLQorIGpzL3NyYy9idWlsdGluL1Rlc3RpbmdGdW5j dGlvbnMuY3BwICAgICAgICAgICB8ICAgMTggKworIGpzL3NyYy9pcnJlZ2V4cC9SZWdFeHBBUEku Y3BwICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyAuLi4vaXJyZWdleHAvUmVnRXhwTmF0aXZl TWFjcm9Bc3NlbWJsZXIuY3BwICAgfCAgIDI4ICsKKyAuLi4vdGVzdHMvYmFzZWxpbmUvcHBjNjQt YnJhbmNoOC0xNi1uYXJyb3cuanMgfCAgMTAzICsKKyBqcy9zcmMvaml0LXRlc3QvdGVzdHMvZ2Mv Z2NwYXJhbS5qcyAgICAgICAgICAgfCAgICAzICstCisgLi4uL3Rlc3RzL2lvbi9tb2QtY29uc3Rh bnQtcG93Mi1taW51cy1vbmUuanMgIHwgICA3OCArCisgLi4uL3Rlc3RzL2lvbi9tb2QtcG93Mi1u ZWdhdGl2ZS1kaXZpZGVuZC5qcyAgIHwgICA3MSArCisgLi4uL3Rlc3RzL21hdGgtbWluLW1heC1j b3JuZXItY2FzZXMuanMgICAgICAgIHwgICA1MCArCisganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dh c20vYXRvbWljaXR5LmpzICAgICAgIHwgICAgOCArLQorIC4uLi9qaXQtdGVzdC90ZXN0cy93YXNt L2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcyB8ICAgMTkgKy0KKyAuLi4vaml0LXRlc3QvdGVzdHMvd2Fz bS9tZW1vcnktb29iLW1lc3NhZ2UuanMgfCAgIDEwICstCisgLi4uL3Rlc3RzL3dhc20vcHBjNjQt YXJnb24yLXRpZXJpbmcuanMgICAgICAgIHwgIDEyNCArCisgLi4uL3Rlc3RzL3dhc20vcHBjNjQt Y29tcGFyZS1zZWxlY3QtYmVuY2guanMgIHwgICA3MCArCisgLi4uL2ppdC10ZXN0L3Rlc3RzL3dh c20vcHBjNjQtZXh0bXVsLWFsaWFzLmpzIHwgIDEwNyArCisgLi4uL3Rlc3RzL3dhc20vcHBjNjQt c2ltZC12ci1jbG9iYmVyLmpzICAgICAgIHwgIDE3OSArCisganMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vcHJvZmlsaW5nLmpzICAgICAgIHwgICAgNyArCisgLi4uL3dhc20vcmVncmVzcy1wcGM2 NC1leHRyYWN0LWxhbmUtY3R6LmpzICAgIHwgICA0OSArCisgLi4uL3dhc20vcmVncmVzcy1wcGM2 NC1zZWxlY3QtY29uZGl0aW9uLmpzICAgIHwgICAzMCArCisgLi4uL3dhc20vcmVncmVzcy1wcGM2 NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpzIHwgICA2NCArCisgLi4uL2J1Zy1wcGM2NC1zaW1kLXJl ZHVjZS1hbmQtYnJhbmNoLmpzICAgICAgIHwgICAgNyArCisgLi4uL2J1Zy1wcGM2NC1zaW1kLXJl ZHVjZS1hbmQtYnJhbmNoLndhc20gICAgIHwgIEJpbiAwIC0+IDExNDggYnl0ZXMKKyBqcy9zcmMv aml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1ZzE5NDY2MTguanMgfCAgICA3ICstCisgLi4uL2pp dC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9pb24tYW5hbHlzaXMuanMgIHwgICAgNyArLQorIGpzL3Ny Yy9qaXQvQXNzZW1ibGVyLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGpzL3Ny Yy9qaXQvQmFzZWxpbmVJQy5jcHAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGpzL3Ny Yy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNwcCAgICAgICAgICAgICAgICB8ICAgMTYgKworIGpzL3Ny Yy9qaXQvQ29kZUdlbmVyYXRvci5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDYgKworIGpzL3Ny Yy9qaXQvQ29kZUdlbmVyYXRvci5oICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGpzL3Ny Yy9qaXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcCAgICAgICB8ICAgIDIgKy0KKyBqcy9z cmMvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICAgICAgICAgICAgfCAgIDEwICstCisganMv c3JjL2ppdC9GbHVzaElDYWNoZS5jcHAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQorIGpz L3NyYy9qaXQvRmx1c2hJQ2FjaGUuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBq cy9zcmMvaml0L0dlbmVyYXRlQUJJRnVuY3Rpb25UeXBlLnB5ICAgICAgICAgfCAgMTAwICsKKyBq cy9zcmMvaml0L0ppdENvbnRleHQuY3BwICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKKyBq cy9zcmMvaml0L0ppdEZyYW1lcy5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKKyBq cy9zcmMvaml0L0ppdEZyYW1lcy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICstCisg anMvc3JjL2ppdC9MSVIuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQor IGpzL3NyYy9qaXQvTElSLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0K KyBqcy9zcmMvaml0L0xJUk9wcy55YW1sICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgyICst CisganMvc3JjL2ppdC9MYWJlbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr LQorIGpzL3NyYy9qaXQvTG93ZXJpbmcuY3BwICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KKyBqcy9zcmMvaml0L0xvd2VyaW5nLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy ICsKKyBqcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLWlubC5oICAgICAgICAgICAgICAgfCAgICAy ICsKKyBqcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcCAgICAgICAgICAgICAgICAgfCAgIDI1 ICstCisganMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5oICAgICAgICAgICAgICAgICAgIHwgIDY0 NyArLQorIGpzL3NyYy9qaXQvTW92ZUVtaXR0ZXIuaCAgICAgICAgICAgICAgICAgICAgICB8ICAg IDIgKworIGpzL3NyYy9qaXQvTW92ZVJlc29sdmVyLmNwcCAgICAgICAgICAgICAgICAgICB8ICAg MTYgKworIGpzL3NyYy9qaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaCAgICAgICAgICAgICAgICB8ICAg IDcgKy0KKyBqcy9zcmMvaml0L1JlZ2lzdGVycy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAyICsKKyBqcy9zcmMvaml0L1NhZmVwb2ludHMuY3BwICAgICAgICAgICAgICAgICAgICAgfCAg IDExICsKKyBqcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy1pbmwuaCAgICAgICAgICAgICAgfCAg ICAyICsKKyBqcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5oICAgICAgICAgICAgICAgICAgfCAg ICAyICsKKyBqcy9zcmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmggICAgICAgICAgICAgICAgfCAg ICAyICsKKyBqcy9zcmMvaml0L1NpbXVsYXRvci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAyICsKKyBqcy9zcmMvaml0L21vei5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEyICsKKyBqcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5jcHAgICAgICAgfCAg MjIxICsKKyBqcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oICAgICAgICAgfCAg NTgxICsrCisganMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwICAgICAgICAgIHwg MzAyOCArKysrKysrCisganMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCAgICAgICAg ICAgIHwgMjExNCArKysrKworIGpzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5j cHAgICAgICB8IDM2NDcgKysrKysrKysKKyBqcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3It cHBjNjQuaCAgICAgICAgfCAgMTAxICsKKyBqcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oICAg ICAgICAgICAgICAgICAgfCAgMTM1ICsKKyBqcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0 LmNwcCAgICAgICAgICAgfCAxMzI0ICsrKworIGpzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBj NjQuaCAgICAgICAgICAgICB8ICAxMDUgKworIGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJs ZXItcHBjNjQtaW5sLmggICB8IDYxNDIgKysrKysrKysrKysrKysKKyBqcy9zcmMvaml0L3BwYzY0 L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCAgICAgfCAzNDY3ICsrKysrKysrCisganMvc3JjL2pp dC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oICAgICAgIHwgMjAzMSArKysrKworIGpzL3Ny Yy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuY3BwICAgICAgICB8ICAzNTcgKworIGpzL3Ny Yy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuaCAgICAgICAgICB8ICAgNjQgKworIGpzL3Ny Yy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oICB8ICAgODMgKworIGpzL3Ny Yy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LmggICAgICB8ICAgOTcgKworIGpzL3Ny Yy9qaXQvcHBjNjQvU2hhcmVkSUNSZWdpc3RlcnMtcHBjNjQuaCAgICB8ICAgNDYgKworIGpzL3Ny Yy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNwcCAgICAgICAgICB8IDcyOTYgKysrKysrKysr KysrKysrKysKKyBqcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5oICAgICAgICAgICAg fCAgNTU2ICsrCisganMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcCAgICAgICAg IHwgIDY0OCArKworIGpzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaCAgICAgICAg ICB8ICAgIDUgKy0KKyAuLi4vQXRvbWljT3BlcmF0aW9ucy1mZWVsaW5nLWx1Y2t5LWdjYy5oICAg ICAgfCAgICAzICstCisganMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3Bw ICAgIHwgICAgNiArLQorIGpzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaCAg ICAgICB8ICAgIDIgKy0KKyBqcy9zcmMvanMtY29uZmlnLm1vemJ1aWxkICAgICAgICAgICAgICAg ICAgICAgfCAgICAxICsKKyBqcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcCAg ICAgICAgfCAgICAzICsKKyBqcy9zcmMvanNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxscy5j cHAgICAgfCAgIDEwICstCisganMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNwcCAgICAgICAg ICAgICAgIHwgICAyMCArCisganMvc3JjL3NoZWxsL2pzLmNwcCAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyNSArCisganMvc3JjL3NoZWxsL2pzc2hlbGwuaCAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgMyArLQorIGpzL3NyYy90ZXN0cy9zaGVsbC9vcy5qcyAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDggKy0KKyBqcy9zcmMvdXRpbC9Qb2lzb24uaCAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKKyBqcy9zcmMvd2FzbS9XYXNtQW55UmVmLmggICAgICAgICAgICAg ICAgICAgICAgfCAgICA3ICstCisganMvc3JjL3dhc20vV2FzbUJDRGVmcy5oICAgICAgICAgICAg ICAgICAgICAgIHwgICAgNyArCisganMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcCAgICAgICAg ICAgICAgICAgIHwgICA0NyArLQorIGpzL3NyYy93YXNtL1dhc21CQ1JlZ0RlZnMuaCAgICAgICAg ICAgICAgICAgICB8ICAgMTIgKy0KKyBqcy9zcmMvd2FzbS9XYXNtQmFzZWxpbmVDb21waWxlLmNw cCAgICAgICAgICAgfCAgMTQ4ICstCisganMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMu aCAgICAgICAgICAgIHwgICAgMyArLQorIGpzL3NyYy93YXNtL1dhc21Db2RlZ2VuVHlwZXMuY3Bw ICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBqcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAgICAg ICAgICAgICAgICAgICAgfCAgICA2ICstCisganMvc3JjL3dhc20vV2FzbUZyYW1lSXRlci5jcHAg ICAgICAgICAgICAgICAgIHwgIDExOCArCisganMvc3JjL3dhc20vV2FzbUdDLmNwcCAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgOCArCisganMvc3JjL3dhc20vV2FzbUdlbmVyYXRvci5jcHAg ICAgICAgICAgICAgICAgIHwgICAxOCArLQorIGpzL3NyYy93YXNtL1dhc21Jb25Db21waWxlLmNw cCAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBqcy9zcmMvd2FzbS9XYXNtTWVtb3J5LmNwcCAg ICAgICAgICAgICAgICAgICAgfCAgICA0ICstCisganMvc3JjL3dhc20vV2FzbVNpZ25hbEhhbmRs ZXJzLmNwcCAgICAgICAgICAgIHwgICAyMCArLQorIGpzL3NyYy93YXNtL1dhc21TdGFja3MuY3Bw ICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBqcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3Bw ICAgICAgICAgICAgICAgICAgICAgfCAgIDQzICstCisganMvc3JjL3dhc20vV2FzbVN1bW1hcml6 ZUluc24uY3BwICAgICAgICAgICAgIHwgIDE2MyArCisganMvc3JjL3dhc20vV2FzbVZhbHVlLmNw cCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIG1mYnQvQXNzZXJ0aW9ucy5oICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIDEwOCBmaWxlcyBjaGFuZ2VkLCAzNDQ0 MiBpbnNlcnRpb25zKCspLCA0MzggZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpz L3NyYy9qaXQtdGVzdC90ZXN0cy9iYXNlbGluZS9wcGM2NC1icmFuY2g4LTE2LW5hcnJvdy5qcwor IGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1jb25zdGFu dC1wb3cyLW1pbnVzLW9uZS5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3Qv dGVzdHMvaW9uL21vZC1wb3cyLW5lZ2F0aXZlLWRpdmlkZW5kLmpzCisgY3JlYXRlIG1vZGUgMTAw NjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy9tYXRoLW1pbi1tYXgtY29ybmVyLWNhc2VzLmpzCisg Y3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWFyZ29u Mi10aWVyaW5nLmpzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93 YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpz L3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1hbGlhcy5qcworIGNyZWF0ZSBt b2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1zaW1kLXZyLWNsb2Ji ZXIuanMKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVn cmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtc2VsZWN0LWNvbmRpdGlvbi5qcwor IGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBw YzY0LXRyYXAtZXhpdC1zaW1kLXNhdmUuanMKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2pp dC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5j aC5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdy ZXNzL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLndhc20KKyBjcmVhdGUgbW9kZSAx MDA2NDQganMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuY3BwCisgY3JlYXRlIG1v ZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgKKyBjcmVhdGUg bW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwCisgY3JlYXRl IG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgKKyBjcmVhdGUg bW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmNwcAorIGNy ZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaAor IGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oCisgY3JlYXRl IG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuY3BwCisgY3JlYXRl IG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaAorIGNyZWF0ZSBt b2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oCisg Y3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQu Y3BwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXIt cHBjNjQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVy LXBwYzY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0 dGVyLXBwYzY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJ Q0hlbHBlcnMtcHBjNjQtaW5sLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2 NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0 L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMv c3JjL2ppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuY3BwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpz L3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMv c3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcAorCitkaWZmIC0tZ2l0IGEvY29uZmln L2NoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlLnB5IGIvY29uZmlnL2NoZWNrX21hY3JvYXNzZW1i bGVyX3N0eWxlLnB5CitpbmRleCBhYTFhNTQxMDRlMjYuLmJhNzNkZTM4ODA5OSAxMDA2NDQKKy0t LSBhL2NvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5weQorKysrIGIvY29uZmlnL2No ZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlLnB5CitAQCAtMzMsNiArMzMsNyBAQCBhbGxfYXJjaGl0 ZWN0dXJlX25hbWVzID0gc2V0KFsKKyAgICAgImFybTY0IiwKKyAgICAgImxvb25nNjQiLAorICAg ICAicmlzY3Y2NCIsCisrICAgICJwcGM2NCIsCisgICAgICJ3YXNtMzIiLAorIF0pCisgYWxsX3No YXJlZF9hcmNoaXRlY3R1cmVfbmFtZXMgPSBzZXQoWworQEAgLTQxLDYgKzQyLDcgQEAgYWxsX3No YXJlZF9hcmNoaXRlY3R1cmVfbmFtZXMgPSBzZXQoWworICAgICAiYXJtNjQiLAorICAgICAibG9v bmc2NCIsCisgICAgICJyaXNjdjY0IiwKKysgICAgInBwYzY0IiwKKyAgICAgIndhc20zMiIsCisg XSkKKyAKK2RpZmYgLS1naXQgYS9qcy9tb3ouY29uZmlndXJlIGIvanMvbW96LmNvbmZpZ3VyZQor aW5kZXggMjZjYzg1NjIyNjU0Li41MzEwZGQwODUwNmYgMTAwNjQ0CistLS0gYS9qcy9tb3ouY29u ZmlndXJlCisrKysgYi9qcy9tb3ouY29uZmlndXJlCitAQCAtMjY0LDYgKzI2NCw3IEBAIGRlZiBq aXRfZGVmYXVsdCh0YXJnZXQsIGVuYWJsZV9wb3J0YWJsZV9iYXNlbGluZV9pbnRlcnApOgorICAg ICAgICAgImFhcmNoNjQiLAorICAgICAgICAgIm1pcHM2NCIsCisgICAgICAgICAibG9vbmdhcmNo NjQiLAorKyAgICAgICAgInBwYzY0IiwKKyAgICAgICAgICJyaXNjdjY0IiwKKyAgICAgKToKKyAg ICAgICAgIHJldHVybiBUcnVlCitAQCAtMjg1LDcgKzI4Niw3IEBAIGRlZiByZXBvcnRfZGVwcmVj YXRlZCh2YWx1ZSk6CisgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cisgb3B0aW9uKAorICAgICAiLS1lbmFibGUtc2ltdWxhdG9yIiwKKy0g ICAgY2hvaWNlcz0oImFybSIsICJhcm02NCIsICJtaXBzNjQiLCAibG9vbmc2NCIsICJyaXNjdjY0 IiksCisrICAgIGNob2ljZXM9KCJhcm0iLCAiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAi cmlzY3Y2NCIsICJwcGM2NCIpLAorICAgICBuYXJncz0xLAorICAgICBoZWxwPSJFbmFibGUgYSBK SVQgY29kZSBzaW11bGF0b3IgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlIiwKKyApCitA QCAtMzAyLDcgKzMwMyw3IEBAIGRlZiBzaW11bGF0b3Ioaml0X2VuYWJsZWQsIHNpbXVsYXRvcl9l bmFibGVkLCB0YXJnZXQpOgorICAgICAgICAgaWYgdGFyZ2V0LmNwdSAhPSAieDg2IjoKKyAgICAg ICAgICAgICBkaWUoIlRoZSAlcyBzaW11bGF0b3Igb25seSB3b3JrcyBvbiB4ODYuIiAlIHNpbV9j cHUpCisgCistICAgIGlmIHNpbV9jcHUgaW4gKCJhcm02NCIsICJtaXBzNjQiLCAibG9vbmc2NCIs ICJyaXNjdjY0Iik6CisrICAgIGlmIHNpbV9jcHUgaW4gKCJhcm02NCIsICJtaXBzNjQiLCAibG9v bmc2NCIsICJyaXNjdjY0IiwgInBwYzY0Iik6CisgICAgICAgICBpZiB0YXJnZXQuY3B1ICE9ICJ4 ODZfNjQiIGFuZCB0YXJnZXQuY3B1ICE9ICJhYXJjaDY0IjoKKyAgICAgICAgICAgICBkaWUoIlRo ZSAlcyBzaW11bGF0b3Igb25seSB3b3JrcyBvbiB4ODYtNjQgb3IgYXJtNjQuIiAlIHNpbV9jcHUp CisgCitAQCAtMzE1LDEyICszMTYsMTQgQEAgc2V0X2NvbmZpZygiSlNfU0lNVUxBVE9SX0FSTTY0 Iiwgc2ltdWxhdG9yLmFybTY0KQorIHNldF9jb25maWcoIkpTX1NJTVVMQVRPUl9NSVBTNjQiLCBz aW11bGF0b3IubWlwczY0KQorIHNldF9jb25maWcoIkpTX1NJTVVMQVRPUl9MT09ORzY0Iiwgc2lt dWxhdG9yLmxvb25nNjQpCisgc2V0X2NvbmZpZygiSlNfU0lNVUxBVE9SX1JJU0NWNjQiLCBzaW11 bGF0b3IucmlzY3Y2NCkKKytzZXRfY29uZmlnKCJKU19TSU1VTEFUT1JfUFBDNjQiLCBzaW11bGF0 b3IucHBjNjQpCisgc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SIiwgZGVwZW5kc19pZihzaW11bGF0 b3IpKGxhbWJkYSB4OiBUcnVlKSkKKyBzZXRfZGVmaW5lKCJKU19TSU1VTEFUT1JfQVJNIiwgc2lt dWxhdG9yLmFybSkKKyBzZXRfZGVmaW5lKCJKU19TSU1VTEFUT1JfQVJNNjQiLCBzaW11bGF0b3Iu YXJtNjQpCisgc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SX01JUFM2NCIsIHNpbXVsYXRvci5taXBz NjQpCisgc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SX0xPT05HNjQiLCBzaW11bGF0b3IubG9vbmc2 NCkKKyBzZXRfZGVmaW5lKCJKU19TSU1VTEFUT1JfUklTQ1Y2NCIsIHNpbXVsYXRvci5yaXNjdjY0 KQorK3NldF9kZWZpbmUoIkpTX1NJTVVMQVRPUl9QUEM2NCIsIHNpbXVsYXRvci5wcGM2NCkKKyAK KyAKKyBAZGVwZW5kcygiLS1lbmFibGUtaml0Iiwgc2ltdWxhdG9yLCB0YXJnZXQpCitAQCAtMzM3 LDYgKzM0MCw4IEBAIGRlZiBqaXRfY29kZWdlbihqaXRfZW5hYmxlZCwgc2ltdWxhdG9yLCB0YXJn ZXQpOgorICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZSh4NjQ9VHJ1ZSkKKyAgICAgZWxpZiB0YXJn ZXQuY3B1ID09ICJsb29uZ2FyY2g2NCI6CisgICAgICAgICByZXR1cm4gbmFtZXNwYWNlKGxvb25n NjQ9VHJ1ZSkKKysgICAgZWxpZiB0YXJnZXQuY3B1ID09ICJwcGM2NCI6CisrICAgICAgICByZXR1 cm4gbmFtZXNwYWNlKHBwYzY0PVRydWUpCisgICAgIGVsaWYgdGFyZ2V0LmNwdSA9PSAicmlzY3Y2 NCI6CisgICAgICAgICByZXR1cm4gbmFtZXNwYWNlKHJpc2N2NjQ9VHJ1ZSkKKyAKK0BAIC0zNDgs NiArMzUzLDcgQEAgc2V0X2NvbmZpZygiSlNfQ09ERUdFTl9BUk0iLCBqaXRfY29kZWdlbi5hcm0p Cisgc2V0X2NvbmZpZygiSlNfQ09ERUdFTl9BUk02NCIsIGppdF9jb2RlZ2VuLmFybTY0KQorIHNl dF9jb25maWcoIkpTX0NPREVHRU5fTUlQUzY0Iiwgaml0X2NvZGVnZW4ubWlwczY0KQorIHNldF9j b25maWcoIkpTX0NPREVHRU5fTE9PTkc2NCIsIGppdF9jb2RlZ2VuLmxvb25nNjQpCisrc2V0X2Nv bmZpZygiSlNfQ09ERUdFTl9QUEM2NCIsIGppdF9jb2RlZ2VuLnBwYzY0KQorIHNldF9jb25maWco IkpTX0NPREVHRU5fUklTQ1Y2NCIsIGppdF9jb2RlZ2VuLnJpc2N2NjQpCisgc2V0X2NvbmZpZygi SlNfQ09ERUdFTl9YODYiLCBqaXRfY29kZWdlbi54ODYpCisgc2V0X2NvbmZpZygiSlNfQ09ERUdF Tl9YNjQiLCBqaXRfY29kZWdlbi54NjQpCitAQCAtMzU4LDYgKzM2NCw3IEBAIHNldF9kZWZpbmUo IkpTX0NPREVHRU5fQVJNIiwgaml0X2NvZGVnZW4uYXJtKQorIHNldF9kZWZpbmUoIkpTX0NPREVH RU5fQVJNNjQiLCBqaXRfY29kZWdlbi5hcm02NCkKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX01J UFM2NCIsIGppdF9jb2RlZ2VuLm1pcHM2NCkKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX0xPT05H NjQiLCBqaXRfY29kZWdlbi5sb29uZzY0KQorK3NldF9kZWZpbmUoIkpTX0NPREVHRU5fUFBDNjQi LCBqaXRfY29kZWdlbi5wcGM2NCkKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX1JJU0NWNjQiLCBq aXRfY29kZWdlbi5yaXNjdjY0KQorIHNldF9kZWZpbmUoIkpTX0NPREVHRU5fWDg2Iiwgaml0X2Nv ZGVnZW4ueDg2KQorIHNldF9kZWZpbmUoIkpTX0NPREVHRU5fWDY0Iiwgaml0X2NvZGVnZW4ueDY0 KQorQEAgLTcyOCw3ICs3MzUsNyBAQCBkZWYgZGVmYXVsdF93YXNtX2pzcGkoCisgICAgICAgICBy ZXR1cm4KKyAKKyAgICAgaWYgc2ltdWxhdG9yOgorLSAgICAgICAgcmV0dXJuIHNpbXVsYXRvclsw XSBpbiAoImFybTY0IiwgImFybSIsICJsb29uZzY0IiwgIm1pcHM2NCIsICJyaXNjdjY0IikKKysg ICAgICAgIHJldHVybiBzaW11bGF0b3JbMF0gaW4gKCJhcm02NCIsICJhcm0iLCAibG9vbmc2NCIs ICJtaXBzNjQiLCAicHBjNjQiLCAicmlzY3Y2NCIpCisgCisgICAgIGlmIHRhcmdldC5jcHUgaW4g KAorICAgICAgICAgIng4Nl82NCIsCitAQCAtNzM3LDYgKzc0NCw3IEBAIGRlZiBkZWZhdWx0X3dh c21fanNwaSgKKyAgICAgICAgICJhcm0iLAorICAgICAgICAgImxvb25nYXJjaDY0IiwKKyAgICAg ICAgICJtaXBzNjQiLAorKyAgICAgICAgInBwYzY0IiwKKyAgICAgICAgICJyaXNjdjY0IiwKKyAg ICAgKToKKyAgICAgICAgIHJldHVybiBUcnVlCitAQCAtNzY4LDEwICs3NzYsMTEgQEAgZGVmIHdh c21fanNwaSh2YWx1ZSwgaml0X2VuYWJsZWQsIHNpbXVsYXRvciwgbm9fZXhwZXJpbWVudGFsLCB0 YXJnZXQpOgorICAgICAgICAgImFybSIsCisgICAgICAgICAibG9vbmc2NCIsCisgICAgICAgICAi bWlwczY0IiwKKysgICAgICAgICJwcGM2NCIsCisgICAgICAgICAicmlzY3Y2NCIsCisgICAgICk6 CisgICAgICAgICBkaWUoCistICAgICAgICAgICAgIi0tZW5hYmxlLXdhc20tanNwaSBpcyBvbmx5 IHN1cHBvcnRlZCBmb3IgYXJtNjQvYXJtL2xvb25nNjQvbWlwczY0L3Jpc2N2NjQgc2ltdWxhdG9y cyIKKysgICAgICAgICAgICAiLS1lbmFibGUtd2FzbS1qc3BpIGlzIG9ubHkgc3VwcG9ydGVkIGZv ciBhcm02NC9hcm0vbG9vbmc2NC9taXBzNjQvcHBjNjQvcmlzY3Y2NCBzaW11bGF0b3JzIgorICAg ICAgICAgKQorIAorICAgICBpZiB0YXJnZXQuY3B1IGluICgKK0BAIC03ODEsMTIgKzc5MCwxMyBA QCBkZWYgd2FzbV9qc3BpKHZhbHVlLCBqaXRfZW5hYmxlZCwgc2ltdWxhdG9yLCBub19leHBlcmlt ZW50YWwsIHRhcmdldCk6CisgICAgICAgICAiYXJtIiwKKyAgICAgICAgICJsb29uZ2FyY2g2NCIs CisgICAgICAgICAibWlwczY0IiwKKysgICAgICAgICJwcGM2NCIsCisgICAgICAgICAicmlzY3Y2 NCIsCisgICAgICk6CisgICAgICAgICByZXR1cm4gVHJ1ZQorIAorICAgICBkaWUoCistICAgICAg ICAiLS1lbmFibGUtd2FzbS1qc3BpIG9ubHkgcG9zc2libGUgd2hlbiB0YXJnZXRpbmcgdGhlIHg4 Nl82NC94ODYvYXJtNjQvYXJtL2xvb25nYXJjaDY0L21pcHM2NC9yaXNjdjY0IGppdHMiCisrICAg ICAgICAiLS1lbmFibGUtd2FzbS1qc3BpIG9ubHkgcG9zc2libGUgd2hlbiB0YXJnZXRpbmcgdGhl IHg4Nl82NC94ODYvYXJtNjQvYXJtL2xvb25nYXJjaDY0L21pcHM2NC9wcGM2NC9yaXNjdjY0IGpp dHMiCisgICAgICkKKyAKKyAKK0BAIC04MjEsMTAgKzgzMSwxMCBAQCBkZWYgZGVmYXVsdF93YXNt X3NpbWQoaml0X2VuYWJsZWQsIHNpbXVsYXRvciwgdGFyZ2V0KToKKyAgICAgaWYgbm90IGppdF9l bmFibGVkOgorICAgICAgICAgcmV0dXJuCisgCistICAgIGlmIHNpbXVsYXRvciBhbmQgKHNpbXVs YXRvclswXSAhPSAiYXJtNjQiKToKKysgICAgaWYgc2ltdWxhdG9yIGFuZCBzaW11bGF0b3JbMF0g bm90IGluICgiYXJtNjQiLCAicHBjNjQiKToKKyAgICAgICAgIHJldHVybgorIAorLSAgICBpZiB0 YXJnZXQuY3B1IGluICgieDg2XzY0IiwgIng4NiIsICJhYXJjaDY0Iik6CisrICAgIGlmIHRhcmdl dC5jcHUgaW4gKCJ4ODZfNjQiLCAieDg2IiwgImFhcmNoNjQiLCAicHBjNjQiKToKKyAgICAgICAg IHJldHVybiBUcnVlCisgCisgCitAQCAtODQ5LDEzICs4NTksMTUgQEAgZGVmIHdhc21fc2ltZCh2 YWx1ZSwgaml0X2VuYWJsZWQsIHNpbXVsYXRvciwgdGFyZ2V0LCBub19leHBlcmltZW50YWwpOgor ICAgICBpZiBub3Qgaml0X2VuYWJsZWQ6CisgICAgICAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2lt ZCByZXF1aXJlcyAtLWVuYWJsZS1qaXQiKQorIAorLSAgICBpZiBzaW11bGF0b3IgYW5kIChzaW11 bGF0b3JbMF0gIT0gImFybTY0Iik6CistICAgICAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2ltZCBp cyBub3Qgc3VwcG9ydGVkIGZvciBzaW11bGF0b3JzLCBleGNlcHQgYXJtNjQiKQorKyAgICBpZiBz aW11bGF0b3IgYW5kIHNpbXVsYXRvclswXSBub3QgaW4gKCJhcm02NCIsICJwcGM2NCIpOgorKyAg ICAgICAgZGllKAorKyAgICAgICAgICAgICItLWVuYWJsZS13YXNtLXNpbWQgaXMgbm90IHN1cHBv cnRlZCBmb3Igc2ltdWxhdG9ycywgZXhjZXB0IGFybTY0IGFuZCBwcGM2NCIKKysgICAgICAgICkK KyAKKy0gICAgaWYgdGFyZ2V0LmNwdSBpbiAoIng4Nl82NCIsICJ4ODYiLCAiYWFyY2g2NCIpOgor KyAgICBpZiB0YXJnZXQuY3B1IGluICgieDg2XzY0IiwgIng4NiIsICJhYXJjaDY0IiwgInBwYzY0 Iik6CisgICAgICAgICByZXR1cm4gVHJ1ZQorIAorLSAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2lt ZCBvbmx5IHBvc3NpYmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0IGppdHMi KQorKyAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2ltZCBvbmx5IHBvc3NpYmxlIHdoZW4gdGFyZ2V0 aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0L3BwYzY0IGppdHMiKQorIAorIAorIHNldF9jb25maWco IkVOQUJMRV9XQVNNX1NJTUQiLCB3YXNtX3NpbWQpCitkaWZmIC0tZ2l0IGEvanMvc3JjL2J1aWx0 aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAgYi9qcy9zcmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rpb25z LmNwcAoraW5kZXggYmU4YjNkMGUxNmI2Li4yMjkxZDU4ZGMwYTEgMTAwNjQ0CistLS0gYS9qcy9z cmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rpb25zLmNwcAorKysrIGIvanMvc3JjL2J1aWx0aW4vVGVz dGluZ0Z1bmN0aW9ucy5jcHAKK0BAIC00NDcsNiArNDQ3LDE1IEBAIHN0YXRpYyBib29sIEdldEJ1 aWxkQ29uZmlndXJhdGlvbihKU0NvbnRleHQqIGN4LCB1bnNpZ25lZCBhcmdjLCBWYWx1ZSogdnAp IHsKKyAgICAgcmV0dXJuIGZhbHNlOworICAgfQorIAorKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0 CisrICB2YWx1ZSA9IEJvb2xlYW5WYWx1ZSh0cnVlKTsKKysjZWxzZQorKyAgdmFsdWUgPSBCb29s ZWFuVmFsdWUoZmFsc2UpOworKyNlbmRpZgorKyAgaWYgKCFKU19TZXRQcm9wZXJ0eShjeCwgaW5m bywgInBwYzY0IiwgdmFsdWUpKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKyAjaWZk ZWYgSlNfQ09ERUdFTl9MT09ORzY0CisgICB2YWx1ZSA9IEJvb2xlYW5WYWx1ZSh0cnVlKTsKKyAj ZWxzZQorQEAgLTQ4Myw2ICs0OTIsMTUgQEAgc3RhdGljIGJvb2wgR2V0QnVpbGRDb25maWd1cmF0 aW9uKEpTQ29udGV4dCogY3gsIHVuc2lnbmVkIGFyZ2MsIFZhbHVlKiB2cCkgeworICAgICByZXR1 cm4gZmFsc2U7CisgICB9CisgCisrI2lmZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAorKyAgdmFsdWUg PSBCb29sZWFuVmFsdWUodHJ1ZSk7CisrI2Vsc2UKKysgIHZhbHVlID0gQm9vbGVhblZhbHVlKGZh bHNlKTsKKysjZW5kaWYKKysgIGlmICghSlNfU2V0UHJvcGVydHkoY3gsIGluZm8sICJwcGM2NC1z aW11bGF0b3IiLCB2YWx1ZSkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworICNpZmRl ZiBNT1pfQVNBTgorICAgdmFsdWUgPSBCb29sZWFuVmFsdWUodHJ1ZSk7CisgI2Vsc2UKK2RpZmYg LS1naXQgYS9qcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcCBiL2pzL3NyYy9pcnJlZ2V4cC9S ZWdFeHBBUEkuY3BwCitpbmRleCAzMTBjZDg1YzZhMjAuLjM3NzUwOTU3NGYyOCAxMDA2NDQKKy0t LSBhL2pzL3NyYy9pcnJlZ2V4cC9SZWdFeHBBUEkuY3BwCisrKysgYi9qcy9zcmMvaXJyZWdleHAv UmVnRXhwQVBJLmNwcAorQEAgLTQ5NSw3ICs0OTUsMTAgQEAgY2xhc3MgUmVnRXhwRGVwdGhDaGVj ayBmaW5hbCA6IHB1YmxpYyB2ODo6aW50ZXJuYWw6OnJlZ2V4cDo6VmlzaXRvciB7CisgCisgICAv LyBUaGlzIHNpemUgaXMgcGlja2VkIHRvIGJlIGNvbWZvcnRhYmx5IGxhcmdlciB0aGFuIGFueQor ICAgLy8gUmVnRXhwKjo6VG9Ob2RlIHN0YWNrIGZyYW1lLgorLSNpZiAhZGVmaW5lZChERUJVRykg JiYgIWRlZmluZWQoTU9aX0NPREVfQ09WRVJBR0UpCisrI2lmIGRlZmluZWQoX19wb3dlcnBjNjRf XykKKysgIC8vIFBQQzY0IEVMRnYyIGhhcyBsYXJnZXIgbWluaW11bSBzdGFjayBmcmFtZXMuCisr ICBzdGF0aWMgY29uc3Qgc2l6ZV90IEZSQU1FX1BBRERJTkcgPSAyNTYgKiA0OworKyNlbGlmICFk ZWZpbmVkKERFQlVHKSAmJiAhZGVmaW5lZChNT1pfQ09ERV9DT1ZFUkFHRSkKKyAgIHN0YXRpYyBj b25zdCBzaXplX3QgRlJBTUVfUEFERElORyA9IDI1NjsKKyAjZWxzZQorICAgLy8gVXNlIGEgc2xp Z2h0bHkgbGFyZ2VyIHBhZGRpbmcgZm9yIGRlYnVnIGFuZCBjb2RlIGNvdmVyYWdlIGJ1aWxkcy4K K2RpZmYgLS1naXQgYS9qcy9zcmMvaXJyZWdleHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJsZXIu Y3BwIGIvanMvc3JjL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcAoraW5k ZXggYWUzNTEyMjY3OTdiLi5hMzk2YWViM2M3MzEgMTAwNjQ0CistLS0gYS9qcy9zcmMvaXJyZWdl eHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJsZXIuY3BwCisrKysgYi9qcy9zcmMvaXJyZWdleHAv UmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJsZXIuY3BwCitAQCAtOTkwLDggKzk5MCwyMSBAQCB2b2lk IFNNUmVnRXhwTWFjcm9Bc3NlbWJsZXI6OkNoZWNrQmFja3RyYWNrU3RhY2tMaW1pdCgpIHsKKyAg ICAgICBBYnNvbHV0ZUFkZHJlc3MoaXNvbGF0ZSgpLT5yZWdleHBfc3RhY2soKS0+bGltaXRfYWRk cmVzc19hZGRyZXNzKCkpLAorICAgICAgIGJhY2t0cmFja19zdGFja19wb2ludGVyXywgJm5vX3N0 YWNrX292ZXJmbG93KTsKKyAKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgLy8gTFIgb24g UG93ZXJQQyBpc24ndCBhIEdQUiwgc28gd2UgaGF2ZSB0byBleHBsaWNpdGx5IHNhdmUgaXQgYmVm b3JlCisrICAvLyBjYWxsaW5nIG9yIHRoZSByZWdleHAncyByZXR1cm4gYWRkcmVzcyB3aWxsIGJl IGNsb2JiZXJlZC4KKysgIG1hc21fLnhzX21mbHIodGVtcDFfKTsKKysgIG1hc21fLmFzX3N0ZHUo dGVtcDFfLCBtYXNtXy5nZXRTdGFja1BvaW50ZXIoKSwgLTgpOworKyNlbmRpZgorKworICAgbWFz bV8uY2FsbCgmc3RhY2tfb3ZlcmZsb3dfbGFiZWxfKTsKKyAKKysjaWZkZWYgSlNfQ09ERUdFTl9Q UEM2NAorKyAgbWFzbV8uYXNfbGQodGVtcDFfLCBtYXNtXy5nZXRTdGFja1BvaW50ZXIoKSwgMCk7 CisrICBtYXNtXy54c19tdGxyKHRlbXAxXyk7CisrICBtYXNtXy5hc19hZGRpKG1hc21fLmdldFN0 YWNrUG9pbnRlcigpLCBtYXNtXy5nZXRTdGFja1BvaW50ZXIoKSwgOCk7CisrI2VuZGlmCisrCisg ICAvLyBFeGl0IHdpdGggYW4gZXhjZXB0aW9uIGlmIHRoZSBjYWxsIGZhaWxlZAorICAgbWFzbV8u YnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgdGVtcDBfLCB0ZW1wMF8sCisgICAgICAgICAg ICAgICAgICAgICAgJmV4aXRfd2l0aF9leGNlcHRpb25fbGFiZWxfKTsKK0BAIC0xMDgwLDYgKzEw OTMsMTMgQEAgdm9pZCBTTVJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpjcmVhdGVTdGFja0ZyYW1lKCkg eworICAgbWFzbV8uaW5pdFBzZXVkb1N0YWNrUHRyKCk7CisgI2VuZGlmCisgCisrI2lmZGVmIEpT X0NPREVHRU5fUFBDNjQKKysgIC8vIFBQQzY0J3MgbGluayByZWdpc3RlciBpcyBhbiBTUFIsIG5v dCBhIEdQUiwgc28gaXQgY2Fubm90IGJlIGluY2x1ZGVkIGluCisrICAvLyBTYXZlZE5vblZvbGF0 aWxlUmVnaXN0ZXJzLiBTYXZlIGl0IGV4cGxpY2l0bHkgYmVmb3JlIHRoZSBmcmFtZSBwb2ludGVy CisrICAvLyBzbyB0aGF0IGFiaXJldCgpJ3MgYmxyIGNhbiByZXR1cm4gdG8gdGhlIGNhbGxlciBh ZnRlciB3ZSByZXN0b3JlIGl0LgorKyAgbWFzbV8ucHVzaFJldHVybkFkZHJlc3MoKTsKKysjZW5k aWYKKysKKyAgIG1hc21fLlB1c2goanM6OmppdDo6RnJhbWVQb2ludGVyKTsKKyAgIG1hc21fLm1v dmVTdGFja1B0clRvKGpzOjpqaXQ6OkZyYW1lUG9pbnRlcik7CisgCitAQCAtMTMwOCw2ICsxMzI4 LDkgQEAgdm9pZCBTTVJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpleGl0SGFuZGxlcigpIHsKKyAgIC8v IFBlcmZvcm0gYSBwbGFpbiBSZXQoKSwgYXMgYWJpcmV0KCkgd2lsbCBtb3ZlIFNQIDwtIFBTUCBh bmQgdGhhdCBpcyB3cm9uZy4KKyAgIG1hc21fLlJldCh2aXhsOjpscik7CisgI2Vsc2UKKysjICBp ZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICBtYXNtXy5wb3BSZXR1cm5BZGRyZXNzKCk7CisrIyAg ZW5kaWYKKyAgIG1hc21fLmFiaXJldCgpOworICNlbmRpZgorIAorQEAgLTEzNTEsNiArMTM3NCwx MSBAQCB2b2lkIFNNUmVnRXhwTWFjcm9Bc3NlbWJsZXI6OnN0YWNrT3ZlcmZsb3dIYW5kbGVyKCkg eworIAorICAgLy8gQWRqdXN0IGZvciB0aGUgcmV0dXJuIGFkZHJlc3Mgb24gdGhlIHN0YWNrLgor ICAgc2l6ZV90IGZyYW1lT2Zmc2V0ID0gc2l6ZW9mKHZvaWQqKTsKKysjaWZkZWYgSlNfQ09ERUdF Tl9QUEM2NAorKyAgLy8gQ2hlY2tCYWNrdHJhY2tTdGFja0xpbWl0IHB1c2hlcyBMUiBiZWZvcmUg Y2FsbGluZyB1cywgc28gdGhlcmUncyBhCisrICAvLyBzZWNvbmQgcmV0dXJuIGFkZHJlc3Mgb24g dGhlIHN0YWNrLgorKyAgZnJhbWVPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKysjZW5kaWYKKyAK KyAgIHZvbGF0aWxlUmVncy50YWtlVW5jaGVja2VkKHRlbXAwXyk7CisgICB2b2xhdGlsZVJlZ3Mu dGFrZVVuY2hlY2tlZCh0ZW1wMV8pOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy9iYXNlbGluZS9wcGM2NC1icmFuY2g4LTE2LW5hcnJvdy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy9iYXNlbGluZS9wcGM2NC1icmFuY2g4LTE2LW5hcnJvdy5qcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uZmMxMDc0YTllZjhiCistLS0gL2Rldi9udWxsCisr KysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJy b3cuanMKK0BAIC0wLDAgKzEsMTAzIEBACisrLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBQUEM2NCBi cmFuY2g4L2JyYW5jaDE2IHdpZHRoLW5hcnJvd2luZyB1bmRlciBFcXVhbCAvCisrLy8gTm90RXF1 YWwgLyB1bnNpZ25lZCBjb21wYXJpc29ucy4gVHdvIHByaW9yIGJ1Z3M6CisrLy8KKysvLyAgIDEu IFNpZ24tZXh0ZW5kaW5nIHRoZSBsb2FkIHdoaWxlIG1vdmUzMihJbW0zMikgemVyby1leHRlbmRl ZCB0aGUgaW1tCisrLy8gICAgICBjYXVzZWQgc3B1cmlvdXMgbWlzbWF0Y2ggd2hlbiB0aGUgbG9h ZGVkIGJ5dGUvaGFsZndvcmQgaGFkIGl0cyBoaWdoCisrLy8gICAgICBiaXQgc2V0IChlLmcuICLD gMOBw4IiLnN0YXJ0c1dpdGgoIsOAw4HDgiIpIHJldHVybmVkIGZhbHNlIGJlY2F1c2UgYnl0ZSAw eEMwCisrLy8gICAgICBzaWduLWV4dGVuZGVkIHRvIDB4RkYuLi5DMCBidXQgdGhlIGltbSAweEMw IHplcm8tZXh0ZW5kZWQgdG8gMHgwMEMwLAorKy8vICAgICAgc28gY21wdyBvbiB0aGUgbG93IDMy IGJpdHMgc2F3IGEgbmVnYXRpdmUgdnMgcG9zaXRpdmUgdmFsdWUpLgorKy8vCisrLy8gICAyLiBB bHdheXMgemVyby1leHRlbmRpbmcgdGhlIGxvYWQgYnJva2UgYGJ5dGUgPT0gSW1tMzIoLTEpYCBi ZWNhdXNlIC0xCisrLy8gICAgICBzaWduLWV4dGVuZHMgaW4gdGhlIGltbSBwYXRoOiB0aGUgbG9h ZGVkIDB4MDAwMDAwRkYgZGlkbid0IG1hdGNoIHRoZQorKy8vICAgICAgbWF0ZXJpYWxpemVkIDB4 RkZGRkZGRkYuCisrLy8KKysvLyBGaXg6IGNhc3QgdGhlIGltbWVkaWF0ZSB0byB1aW50OC91aW50 MTYgKGVxdWFsaXR5ICsgdW5zaWduZWQpIG9yIGludDgvaW50MTYKKysvLyAoc2lnbmVkIHJlbGF0 aW9uYWwpIHNvIGJvdGggc2lkZXMgaGF2ZSBtYXRjaGluZyBiaXQgcGF0dGVybnMgcmVnYXJkbGVz cyBvZgorKy8vIGhvdyBtb3ZlMzIoSW1tMzIpIGNob3NlIHRvIG1hdGVyaWFsaXplIGl0LiBNYXRj aCBBUk02NC9Mb29uZ0FyY2g2NC9SSVNDLVYuCisrLy8KKysvLyBXZSBleGVyY2lzZSBib3RoIGJ5 dGUgYW5kIGhhbGZ3b3JkIGJyYW5jaCBwYXRocyB2aWEgVHlwZWRBcnJheSBsb2FkcyBhbmQKKysv LyBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggd2l0aCBhIGNvbnN0YW50IHNlYXJjaCBzdHJp bmcgKHRoZSBvcmlnaW5hbAorKy8vIGZhaWxpbmcgc2l0ZSBsb3dlcmVkIHRvIGJyYW5jaDE2KE5v dEVxdWFsLCBhZGRyLCBJbW0zMigweEMxQzApKSkuCisrCisrLy8gLS0tIERpcmVjdCBieXRlL2hh bGZ3b3JkIGVxdWFsaXR5IHRocm91Z2ggVHlwZWRBcnJheSAtLS0KKyt7CisrICBsZXQgdTggPSBu ZXcgVWludDhBcnJheShbMCwgMSwgMHg3RiwgMHg4MCwgMHhDMCwgMHhDMSwgMHhGRSwgMHhGRl0p OworKyAgbGV0IGk4ID0gbmV3IEludDhBcnJheSh1OC5idWZmZXIpOworKyAgbGV0IHUxNiA9IG5l dyBVaW50MTZBcnJheShbMHgwMDAwLCAweDdGRkYsIDB4ODAwMCwgMHhDMUMwLCAweEZGRkUsIDB4 RkZGRl0pOworKyAgbGV0IGkxNiA9IG5ldyBJbnQxNkFycmF5KHUxNi5idWZmZXIpOworKworKyAg Ly8gRm9yY2UgYmFzZWxpbmUgKyBJb24gdG8gc3BlY2lhbGl6ZSB0aGUgY29tcGFyaXNvbnMuCisr ICBmdW5jdGlvbiBlcVU4KGFyciwgaWR4LCB2YWwpIHsKKysgICAgcmV0dXJuIGFycltpZHhdID09 PSB2YWw7CisrICB9CisrICBmdW5jdGlvbiBlcUk4KGFyciwgaWR4LCB2YWwpIHsKKysgICAgcmV0 dXJuIGFycltpZHhdID09PSB2YWw7CisrICB9CisrICBmdW5jdGlvbiBlcVUxNihhcnIsIGlkeCwg dmFsKSB7CisrICAgIHJldHVybiBhcnJbaWR4XSA9PT0gdmFsOworKyAgfQorKyAgZnVuY3Rpb24g ZXFJMTYoYXJyLCBpZHgsIHZhbCkgeworKyAgICByZXR1cm4gYXJyW2lkeF0gPT09IHZhbDsKKysg IH0KKysKKysgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKKysgICAgLy8gSGlnaC1i aXQtc2V0IGJ5dGVzOiBiaXQgcGF0dGVybiBlcXVhbGl0eSBtdXN0IGhvbGQgYm90aCBzaWduZWQg YW5kCisrICAgIC8vIHVuc2lnbmVkIGludGVycHJldGF0aW9ucyBvZiB0aGUgaW1tZWRpYXRlLgor KyAgICBhc3NlcnRFcShlcVU4KHU4LCA0LCAweEMwKSwgdHJ1ZSk7ICAgLy8gdW5zaWduZWQgY29t cGFyZSAweEMwID09IDB4QzAKKysgICAgYXNzZXJ0RXEoZXFVOCh1OCwgNCwgMHhDMSksIGZhbHNl KTsKKysgICAgYXNzZXJ0RXEoZXFVOCh1OCwgNywgMHhGRiksIHRydWUpOworKyAgICBhc3NlcnRF cShlcVU4KHU4LCA3LCAtMSAmIDB4RkYpLCB0cnVlKTsgICAvLyAweEZGIHdyaXR0ZW4gYXMgLTEm MHhGRgorKworKyAgICAvLyBTaWduZWQgSW50OCB2aWV3OiAweEZGIGlzIC0xLCAweEMwIGlzIC02 NC4KKysgICAgYXNzZXJ0RXEoZXFJOChpOCwgNCwgLTY0KSwgdHJ1ZSk7CisrICAgIGFzc2VydEVx KGVxSTgoaTgsIDcsIC0xKSwgdHJ1ZSk7CisrICAgIGFzc2VydEVxKGVxSTgoaTgsIDQsIC02Myks IGZhbHNlKTsKKysKKysgICAgLy8gSGFsZndvcmQgdmFyaWFudHM6IHRoZSBvcmlnaW5hbCBzdGFy dHN3aXRoIGZhaWx1cmUgcGF0dGVybiB3YXMKKysgICAgLy8gKExhdGluLTEgY2hhciAweEMxQzAp IOKAlCBhIDE2LWJpdCB2YWx1ZSB3aXRoIGJpdCAxNSBzZXQuCisrICAgIGFzc2VydEVxKGVxVTE2 KHUxNiwgMywgMHhDMUMwKSwgdHJ1ZSk7CisrICAgIGFzc2VydEVxKGVxVTE2KHUxNiwgMywgMHhD MUMxKSwgZmFsc2UpOworKyAgICBhc3NlcnRFcShlcVUxNih1MTYsIDUsIDB4RkZGRiksIHRydWUp OworKyAgICBhc3NlcnRFcShlcVUxNih1MTYsIDUsIC0xICYgMHhGRkZGKSwgdHJ1ZSk7CisrCisr ICAgIGFzc2VydEVxKGVxSTE2KGkxNiwgMywgLTE1OTM2KSwgdHJ1ZSk7ICAvLyAweEMxQzAgYXMg aTE2ID0gLTE1OTM2CisrICAgIGFzc2VydEVxKGVxSTE2KGkxNiwgNSwgLTEpLCB0cnVlKTsKKysg ICAgYXNzZXJ0RXEoZXFJMTYoaTE2LCA1LCAtMiksIGZhbHNlKTsKKysgIH0KKyt9CisrCisrLy8g LS0tIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCB3aXRoIGEgTGF0aW4tMSBjb25zdGFudCBz ZWFyY2ggLS0tCisrLy8gVGhpcyB3YXMgdGhlIG9yaWdpbmFsIGZhaWxpbmcgc2l0ZSDigJQgSW9u IGxvd2VycyBhIGNvbnN0YW50IHNlYXJjaCBzdHJpbmcKKysvLyBvZiBsZW5ndGggMS4uMzIgaW50 byBhIHNlcXVlbmNlIG9mIGJ5dGUtd2lzZSBjb21wYXJpc29ucy4KKyt7CisrICBsZXQgcyA9ICLD gMOBw4IiOyAgLy8gTGF0aW4tMSBsZW5ndGggMywgYnl0ZXMgMHhDMCAweEMxIDB4QzIgKGFsbCBo aWdoLWJpdCBzZXQpCisrICBmdW5jdGlvbiBjaGVjaygpIHsKKysgICAgcmV0dXJuIHMuc3RhcnRz V2l0aCgiw4DDgcOCIik7CisrICB9CisrICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7 CisrICAgIGFzc2VydEVxKGNoZWNrKCksIHRydWUpOworKyAgfQorKworKyAgLy8gTWlzbWF0Y2gg b24gYSBzaW5nbGUgaGlnaC1iaXQgYnl0ZSBtdXN0IHJlcG9ydCBub3QtZXF1YWwuCisrICBsZXQg czIgPSAiw4DDgcODIjsgIC8vIGxhc3QgYnl0ZSAweEMzIGluc3RlYWQgb2YgMHhDMgorKyAgZnVu Y3Rpb24gY2hlY2syKCkgeworKyAgICByZXR1cm4gczIuc3RhcnRzV2l0aCgiw4DDgcOCIik7Cisr ICB9CisrICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisrICAgIGFzc2VydEVxKGNo ZWNrMigpLCBmYWxzZSk7CisrICB9CisrfQorKworKy8vIC0tLSBTaWduZWQgcmVsYXRpb25hbCBj b21wYXJpc29ucyBzdGlsbCB3b3JrICh3ZSBrZXB0IHRoZSBzaWduLWV4dGVuZCBwYXRoKSAtLS0K Kyt7CisrICBsZXQgaTggPSBuZXcgSW50OEFycmF5KFsweDdGLCAtMSwgLTEyOCwgMSwgMF0pOwor KyAgZnVuY3Rpb24gbHRaZXJvKGlkeCkgeworKyAgICByZXR1cm4gaThbaWR4XSA8IDA7CisrICB9 CisrICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisrICAgIGFzc2VydEVxKGx0WmVy bygwKSwgZmFsc2UpOyAgLy8gMHg3RiA9ICsxMjcKKysgICAgYXNzZXJ0RXEobHRaZXJvKDEpLCB0 cnVlKTsgICAvLyAtMQorKyAgICBhc3NlcnRFcShsdFplcm8oMiksIHRydWUpOyAgIC8vIC0xMjgK KysgICAgYXNzZXJ0RXEobHRaZXJvKDMpLCBmYWxzZSk7ICAvLyAxCisrICB9CisrfQorZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9nYy9nY3BhcmFtLmpzIGIvanMvc3JjL2ppdC10 ZXN0L3Rlc3RzL2djL2djcGFyYW0uanMKK2luZGV4IDUxZDU4NjYyMTkzZi4uNDhlNWE5N2MxMzVm IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2djL2djcGFyYW0uanMKKysrKyBi L2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9nYy9nY3BhcmFtLmpzCitAQCAtMzAsNyArMzAsOCBAQCB0 ZXN0R2V0UGFyYW0oImNodW5rQnl0ZXMiKTsKKyB0ZXN0R2V0UGFyYW0oImhlbHBlclRocmVhZENv dW50Iik7CisgCisgdGVzdENoYW5nZVBhcmFtKCJtYXhCeXRlcyIpOworLXRlc3RDaGFuZ2VQYXJh bSgibWluTnVyc2VyeUJ5dGVzIiwgMTYgKiAxMDI0KTsKKyt2YXIgcGFnZVNpemUgPSBnY3BhcmFt KCJzeXN0ZW1QYWdlU2l6ZUtCIikgKiAxMDI0OworK3Rlc3RDaGFuZ2VQYXJhbSgibWluTnVyc2Vy eUJ5dGVzIiwgcGFnZVNpemUpOworIHRlc3RDaGFuZ2VQYXJhbSgibWF4TnVyc2VyeUJ5dGVzIiwg MTAyNCAqIDEwMjQpOworIHRlc3RDaGFuZ2VQYXJhbSgiaW5jcmVtZW50YWxHQ0VuYWJsZWQiKTsK KyB0ZXN0Q2hhbmdlUGFyYW0oInBlclpvbmVHQ0VuYWJsZWQiKTsKK2RpZmYgLS1naXQgYS9qcy9z cmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1jb25zdGFudC1wb3cyLW1pbnVzLW9uZS5qcyBiL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLWNvbnN0YW50LXBvdzItbWludXMtb25lLmpzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi45MDI4ZjU1ODdjNjUKKy0t LSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLWNvbnN0YW50 LXBvdzItbWludXMtb25lLmpzCitAQCAtMCwwICsxLDc4IEBACisrLy8gUmVncmVzc2lvbiB0ZXN0 IGZvciBhIFBQQzY0IElvbiBtaXNjb21waWxlIG9mIGludGVnZXIgbW9kdWxvIGJ5IGEKKysvLyBj b25zdGFudCBvZiB0aGUgZm9ybSAyXm4gLSAxIChlLmcuIDY1NTM1KS4KKysvLworKy8vIGxvd2Vy TW9kSSByb3V0ZXMgYHggJSAoMl5uIC0gMSlgIHRvIExNb2RNYXNrSSwgd2hvc2UgY29kZWdlbgor Ky8vIChtYV9tb2RfbWFzaykgbWF0ZXJpYWxpemVkIHRoZSBtYXNrIDJebiAtIDEgd2l0aCB4c19s aSgpLiB4c19saSB0YWtlcyBhCisrLy8gc2lnbmVkIGludDE2X3QsIHNvIGEgbWFzayBvZiAweEZG RkYgd2FzIHRydW5jYXRlZCB0byAtMSwgY29ycnVwdGluZyB0aGUKKysvLyBkaWdpdC1zdW1taW5n IHJlZHVjdGlvbi4gVGhlIGJ1ZyBvbmx5IGFmZmVjdGVkIG1hc2tzIHRoYXQgZG8gbm90IGZpdCBp biBhCisrLy8gc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUsIGkuZS4gZGl2aXNvcnMgPj0gNjU1MzUg KG4gPj0gMTYpOyBzbWFsbGVyCisrLy8gMl5uIC0gMSBkaXZpc29ycyBzdWNoIGFzIDI1NSB3ZXJl IHVuYWZmZWN0ZWQuCisrLy8KKysvLyBUaGUgcmVmZXJlbmNlIHVzZXMgYSBub24tY29uc3RhbnQg ZGl2aXNvciwgd2hpY2ggbG93ZXJzIHRvIHRoZQorKy8vIGhhcmR3YXJlLWRpdmlkZSBtb2R1bG8g cGF0aCAoTE1vZEkpIGFuZCBpcyB0aGVyZWZvcmUgaW5kZXBlbmRlbnQgb2YgdGhlCisrLy8gTE1v ZE1hc2tJIGNvZGVnZW4gdW5kZXIgdGVzdC4KKysKKytmdW5jdGlvbiByZWZtb2QoeCwgZCkgewor KyAgLy8gZCBpcyBub3QgYSBjb25zdGFudCBoZXJlIC0+IGRpdmlkZS1iYXNlZCBtb2R1bG8sIG5v dCBMTW9kTWFza0kuCisrICByZXR1cm4gKHggJSBkKSB8IDA7CisrfQorKworKy8vIE9uZSBmdW5j dGlvbiBwZXIgY29uc3RhbnQgZGl2aXNvciBzbyB0aGUgZGl2aXNvciBpcyBhIGxpdGVyYWwgYW5k IHRoZQorKy8vIExNb2RNYXNrSSBwYXRoIGlzIHNlbGVjdGVkLgorK2Z1bmN0aW9uIG1vZDI1NSh4 KSB7IHJldHVybiAoeCAlIDI1NSkgfCAwOyB9CisrZnVuY3Rpb24gbW9kMzI3NjcoeCkgeyByZXR1 cm4gKHggJSAzMjc2NykgfCAwOyB9CisrZnVuY3Rpb24gbW9kNjU1MzUoeCkgeyByZXR1cm4gKHgg JSA2NTUzNSkgfCAwOyB9CisrZnVuY3Rpb24gbW9kMTMxMDcxKHgpIHsgcmV0dXJuICh4ICUgMTMx MDcxKSB8IDA7IH0KKytmdW5jdGlvbiBtb2QxMDQ4NTc1KHgpIHsgcmV0dXJuICh4ICUgMTA0ODU3 NSkgfCAwOyB9CisrCisrY29uc3QgY2FzZXMgPSBbCisrICBbbW9kMjU1LCAyNTVdLAorKyAgW21v ZDMyNzY3LCAzMjc2N10sCisrICBbbW9kNjU1MzUsIDY1NTM1XSwKKysgIFttb2QxMzEwNzEsIDEz MTA3MV0sCisrICBbbW9kMTA0ODU3NSwgMTA0ODU3NV0sCisrXTsKKysKKysvLyBJbnB1dHMgc3Bh bm5pbmcgc21hbGwgdmFsdWVzLCB2YWx1ZXMgd2l0aCBiaXRzIGFib3ZlIHRoZSBtYXNrIHdpZHRo CisrLy8gKHNvIHRoZSBtdWx0aS1kaWdpdCByZWR1Y3Rpb24gaXMgZXhlcmNpc2VkKSwgYW5kIG5l Z2F0aXZlcy4KKytjb25zdCBpbnB1dHMgPSBbXTsKKytmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBp KyspIHsKKysgIGlucHV0cy5wdXNoKE1hdGguaW11bChpLCAyNjU0NDM1NzYxKSB8IDApOworKyAg aW5wdXRzLnB1c2goKGkgKiA2NTUzNSArIGkpIHwgMCk7CisrICBpbnB1dHMucHVzaCgoaSAqIDEz MTA3MSAtIDcpIHwgMCk7CisrICBpbnB1dHMucHVzaCgtTWF0aC5pbXVsKGksIDQwNTAzKSB8IDAp OworK30KKytpbnB1dHMucHVzaCgwLCAxLCAtMSwgNjU1MzQsIDY1NTM1LCA2NTUzNiwgMHg3ZmZm ZmZmZiwgLTB4ODAwMDAwMDApOworKworKy8vIFdhcm0gdXAgdGhyb3VnaCB0aGUgdGllcnMsIHRo ZW4gYXNzZXJ0IGVhY2ggY29uc3RhbnQtZGl2aXNvciByZXN1bHQKKysvLyBtYXRjaGVzIHRoZSBk aXZpZGUtYmFzZWQgcmVmZXJlbmNlLgorK2ZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgMjAwMDsg aXRlcisrKSB7CisrICBmb3IgKGNvbnN0IFtmbiwgZF0gb2YgY2FzZXMpIHsKKysgICAgZm9yIChj b25zdCB4IG9mIGlucHV0cykgeworKyAgICAgIGFzc2VydEVxKGZuKHgpLCByZWZtb2QoeCwgZCkp OworKyAgICB9CisrICB9CisrfQorKworKy8vIFJlZ2lzdGVyLXByZXNzdXJlIHZhcmlhbnQ6IG1p cnJvcnMgdGhlIHNoYXBlIHRoYXQgZXhwb3NlZCB0aGUgYnVnIChtYW55CisrLy8gbGl2ZSBsb2Nh bHMgZm9yY2luZyB0aGUgbWFzayBtYXRlcmlhbGl6YXRpb24gdG8gaW50ZXJhY3Qgd2l0aCBzcGls bHMpLgorK2Z1bmN0aW9uIHByZXNzdXJlKGJ1ZiwgaSkgeworKyAgbGV0IHYwID0gaSwgdjEgPSBp ICsgMSwgdjIgPSBpICsgMiwgdjMgPSBpICsgMywgdjQgPSBpICsgNCwgdjUgPSBpICsgNTsKKysg IGxldCB2NiA9IGkgKyA2LCB2NyA9IGkgKyA3LCB2OCA9IGkgKyA4LCB2OSA9IGkgKyA5LCB2MTAg PSBpICsgMTAsIHYxMSA9IGkgKyAxMTsKKysgIGxldCB2MTIgPSBpICsgMTIsIHYxMyA9IGkgKyAx MywgdjE0ID0gaSArIDE0LCB2MTUgPSBpICsgMTU7CisrICBjb25zdCByID0gKGJ1ZltpICYgNjNd ICUgNjU1MzUpIHwgMDsKKysgIC8vIEtlZXAgZXZlcnkgbG9jYWwgbGl2ZSB0byB0aGUgcmV0dXJu IHdpdGhvdXQgYWx0ZXJpbmcgci4KKysgIGNvbnN0IGxpdmUgPSAodjAgXiB2MSBeIHYyIF4gdjMg XiB2NCBeIHY1IF4gdjYgXiB2NyBeCisrICAgICAgICAgICAgICAgIHY4IF4gdjkgXiB2MTAgXiB2 MTEgXiB2MTIgXiB2MTMgXiB2MTQgXiB2MTUpICYgMDsKKysgIHJldHVybiByICsgbGl2ZTsKKyt9 CisrCisrY29uc3QgYnVmID0gbmV3IEludDMyQXJyYXkoNjQpOworK2ZvciAobGV0IGkgPSAwOyBp IDwgYnVmLmxlbmd0aDsgaSsrKSB7CisrICBidWZbaV0gPSBNYXRoLmltdWwoaSwgMjY1NDQzNTc2 MSkgfCAwOworK30KKytmb3IgKGxldCBpdGVyID0gMDsgaXRlciA8IDUwMDA7IGl0ZXIrKykgewor KyAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisrICAgIGFzc2VydEVxKHByZXNzdXJl KGJ1ZiwgaSksIHJlZm1vZChidWZbaSAmIDYzXSwgNjU1MzUpKTsKKysgIH0KKyt9CitkaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZpZGVu ZC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUtZGl2aWRl bmQuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLjk5MDVjYzRh OGYzNgorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2Qt cG93Mi1uZWdhdGl2ZS1kaXZpZGVuZC5qcworQEAgLTAsMCArMSw3MSBAQAorKy8vIFJlZ3Jlc3Np b24gdGVzdCBmb3IgYSBQUEM2NCBJb24gbWlzY29tcGlsZSBvZiBpbnRlZ2VyIG1vZHVsbyBieSBh IGNvbnN0YW50CisrLy8gcG93ZXIgb2YgdHdvIChlLmcuIDY1NTM2KSB3aXRoIGEgbmVnYXRpdmUg ZGl2aWRlbmQuCisrLy8KKysvLyBsb3dlck1vZEkgcm91dGVzIGB4ICUgMl5uYCB0byBMTW9kUG93 VHdvSSwgd2hvc2UgY29kZWdlbiB0ZXN0ZWQgdGhlIHNpZ24gb2YKKysvLyB0aGUgZGl2aWRlbmQg d2l0aCBicmFuY2hQdHIgKGEgNjQtYml0IGNvbXBhcmUpLiBXaGVuIHRoZSBpbnQzMiBkaXZpZGVu ZCB3YXMKKysvLyBoZWxkIHplcm8tZXh0ZW5kZWQgaW4gaXRzIHJlZ2lzdGVyLCB0aGUgNjQtYml0 IHRlc3QgbWlzY2xhc3NpZmllZCBhIG5lZ2F0aXZlCisrLy8gdmFsdWUgYXMgbm9uLW5lZ2F0aXZl IGFuZCB0b29rIHRoZSB1bm1hc2tlZCBwb3NpdGl2ZSBwYXRoLCByZXR1cm5pbmcKKysvLyBgeCAm ICgyXm4gLSAxKWAgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCAobmVnYXRpdmUpIGB4ICUgMl5uYC4g Rml4ZWQgYnkgdXNpbmcgYQorKy8vIDMyLWJpdCBzaWduIHRlc3QgKGJyYW5jaDMyKS4KKysvLwor Ky8vIFRoZSByZWZlcmVuY2UgdXNlcyBhIG5vbi1jb25zdGFudCBkaXZpc29yLCB3aGljaCBsb3dl cnMgdG8gdGhlIGRpdmlkZS1iYXNlZAorKy8vIG1vZHVsbyBwYXRoIChMTW9kSSksIGluZGVwZW5k ZW50IG9mIExNb2RQb3dUd29JLgorKworK2Z1bmN0aW9uIHJlZm1vZCh4LCBkKSB7CisrICByZXR1 cm4gKHggJSBkKSB8IDA7CisrfQorKworK2Z1bmN0aW9uIG1vZDI1Nih4KSB7IHJldHVybiAoeCAl IDI1NikgfCAwOyB9CisrZnVuY3Rpb24gbW9kMTAyNCh4KSB7IHJldHVybiAoeCAlIDEwMjQpIHwg MDsgfQorK2Z1bmN0aW9uIG1vZDQwOTYoeCkgeyByZXR1cm4gKHggJSA0MDk2KSB8IDA7IH0KKytm dW5jdGlvbiBtb2Q2NTUzNih4KSB7IHJldHVybiAoeCAlIDY1NTM2KSB8IDA7IH0KKytmdW5jdGlv biBtb2QxMDQ4NTc2KHgpIHsgcmV0dXJuICh4ICUgMTA0ODU3NikgfCAwOyB9CisrZnVuY3Rpb24g bW9kMTA3Mzc0MTgyNCh4KSB7IHJldHVybiAoeCAlIDEwNzM3NDE4MjQpIHwgMDsgfQorKworK2Nv bnN0IGNhc2VzID0gWworKyAgW21vZDI1NiwgMjU2XSwKKysgIFttb2QxMDI0LCAxMDI0XSwKKysg IFttb2Q0MDk2LCA0MDk2XSwKKysgIFttb2Q2NTUzNiwgNjU1MzZdLAorKyAgW21vZDEwNDg1NzYs IDEwNDg1NzZdLAorKyAgW21vZDEwNzM3NDE4MjQsIDEwNzM3NDE4MjRdLAorK107CisrCisrLy8g SGVhdnkgb24gbmVnYXRpdmUgZGl2aWRlbmRzICh0aGUgYnJva2VuIHBhdGgpLCBwbHVzIGJvdW5k YXJ5IHZhbHVlcy4KKytjb25zdCBpbnB1dHMgPSBbXTsKKytmb3IgKGxldCBpID0gMTsgaSA8PSA2 NDsgaSsrKSB7CisrICBpbnB1dHMucHVzaCgtTWF0aC5pbXVsKGksIDI2NTQ0MzU3NjEpIHwgMCk7 CisrICBpbnB1dHMucHVzaCgtKGkgKiAxNjgpKTsKKysgIGlucHV0cy5wdXNoKC0oaSAqIDcwMDAx KSk7CisrICBpbnB1dHMucHVzaChNYXRoLmltdWwoaSwgNDA1MDMpIHwgMCk7CisrfQorK2lucHV0 cy5wdXNoKDAsIC0xLCAxLCAtMTY4LCAtNjU1MzUsIC02NTUzNiwgLTY1NTM3LCAxNjgsCisrICAg ICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0weDdmZmZmZmZmKTsKKysKKytmb3Ig KGxldCBpdGVyID0gMDsgaXRlciA8IDMwMDA7IGl0ZXIrKykgeworKyAgZm9yIChjb25zdCBbZm4s IGRdIG9mIGNhc2VzKSB7CisrICAgIGZvciAoY29uc3QgeCBvZiBpbnB1dHMpIHsKKysgICAgICBh c3NlcnRFcShmbih4KSwgcmVmbW9kKHgsIGQpKTsKKysgICAgfQorKyAgfQorK30KKysKKysvLyBS ZWdpc3Rlci1wcmVzc3VyZSB2YXJpYW50OiBhIG5lZ2F0aXZlIGRpdmlkZW5kIHByb2R1Y2VkIGF0 IHJ1bnRpbWUKKysvLyAoZmxvYXQtPmludCkgd2l0aCBtYW55IGxpdmUgbG9jYWxzLCBtaXJyb3Jp bmcgdGhlIHNoYXBlIHRoYXQgZXhwb3NlZCB0aGUgYnVnLgorK2Z1bmN0aW9uIHByZXNzdXJlKHNl ZWQpIHsKKysgIGxldCB2MCA9IHNlZWQsIHYxID0gc2VlZCArIDEsIHYyID0gc2VlZCArIDIsIHYz ID0gc2VlZCArIDMsIHY0ID0gc2VlZCArIDQ7CisrICBsZXQgdjUgPSBzZWVkICsgNSwgdjYgPSBz ZWVkICsgNiwgdjcgPSBzZWVkICsgNywgdjggPSBzZWVkICsgOCwgdjkgPSBzZWVkICsgOTsKKysg IGxldCB2MTAgPSBzZWVkICsgMTAsIHYxMSA9IHNlZWQgKyAxMSwgdjEyID0gc2VlZCArIDEyLCB2 MTMgPSBzZWVkICsgMTM7CisrICBsZXQgZDAgPSBzZWVkICogMC41LCBkMSA9IHNlZWQgKiAxLjUs IGQyID0gLXNlZWQgKiAyLjU7CisrICBjb25zdCBuZWcgPSAoTWF0aC5mcm91bmQoLShNYXRoLmFi cyhzZWVkKSArIDAuNykpIHwgMCk7CisrICBjb25zdCByID0gKG5lZyAlIDY1NTM2KSB8IDA7Cisr ICBjb25zdCBsaXZlID0gKHYwIF4gdjEgXiB2MiBeIHYzIF4gdjQgXiB2NSBeIHY2IF4gdjcgXiB2 OCBeIHY5IF4KKysgICAgICAgICAgICAgICAgdjEwIF4gdjExIF4gdjEyIF4gdjEzIF4gKGQwIHwg MCkgXiAoZDEgfCAwKSBeIChkMiB8IDApKSAmIDA7CisrICByZXR1cm4gciArIGxpdmU7CisrfQor K2ZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgNTAwMDsgaXRlcisrKSB7CisrICBmb3IgKGxldCBz ID0gMTsgcyA8PSAyMDA7IHMrKykgeworKyAgICBjb25zdCBleHBlY3QgPSAoKE1hdGguZnJvdW5k KC0ocyArIDAuNykpIHwgMCkgJSA2NTUzNikgfCAwOworKyAgICBhc3NlcnRFcShwcmVzc3VyZShz KSwgZXhwZWN0KTsKKysgIH0KKyt9CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3Rz L21hdGgtbWluLW1heC1jb3JuZXItY2FzZXMuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvbWF0 aC1taW4tbWF4LWNvcm5lci1jYXNlcy5qcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwMC4uN2FjMmM1OWNhZWZmCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvbWF0aC1taW4tbWF4LWNvcm5lci1jYXNlcy5qcworQEAgLTAsMCArMSw1MCBA QAorKy8vIE1hdGgubWluIC8gTWF0aC5tYXggY29ybmVyIGNhc2VzLiBFeGVyY2lzZXMgdGhlIFBP V0VSOSB4c21pbmpkcCAvCisrLy8geHNtYXhqZHAgSi1mb3JtIGZhc3QgcGF0aCBvbiBQUEM2NCAo YW5kIHRoZSBmY21wdS9icmFuY2ggZmFsbGJhY2sgb24KKysvLyBQT1dFUjggZm9yY2VkKTsgb3Ro ZXIgYmFja2VuZHMgYWxyZWFkeSBjb3ZlciB0aGlzIHZpYSBzaGFyZWQgZnAgdGVzdHMKKysvLyBi dXQgdGhlIHRydXRoIHRhYmxlIGlzIHNtYWxsIGFuZCB3b3J0aCBwaW5uaW5nIGV4cGxpY2l0bHku CisrLy8KKysvLyBKUyBzZW1hbnRpY3MgKEVDTUEtMjYyKToKKysvLyAgIC0gTWF0aC5tYXgoLTAs ICswKSA9PT0gKzA7IE1hdGgubWluKC0wLCArMCkgPT09IC0wCisrLy8gICAtIE1hdGgubWF4KC0w LCAtMCkgPT09IC0wOyBNYXRoLm1pbigrMCwgKzApID09PSArMAorKy8vICAgLSBBbnkgTmFOIG9w ZXJhbmQg4oaSIE5hTgorKy8vICAgLSDCsUluZiBhbmQgb3JkaW5hcnkgbnVtZXJpY3MgYnkgdmFs dWUKKysKKytmdW5jdGlvbiBvYmplY3RJc1Bvc2l0aXZlWmVybyh2KSB7CisrICByZXR1cm4gdiA9 PT0gMCAmJiBPYmplY3QuaXModiwgMCk7CisrfQorK2Z1bmN0aW9uIG9iamVjdElzTmVnYXRpdmVa ZXJvKHYpIHsKKysgIHJldHVybiB2ID09PSAwICYmIE9iamVjdC5pcyh2LCAtMCk7CisrfQorKwor Ky8vIERpcmVjdCBjYWxscyDigJQgdGhlc2UgZ2V0IGlubGluZWQgYnkgSW9uIGFzIE1NaW5NYXgg aW50cmluc2ljcywgd2hpY2gKKysvLyBlbWl0IHRoZSByZWxldmFudCBtaW4vbWF4IGhlbHBlci4K KytmdW5jdGlvbiBjaGVjaygpIHsKKysgIC8vIE1heCBjb3JuZXIgY2FzZXMuCisrICBhc3NlcnRF cShvYmplY3RJc1Bvc2l0aXZlWmVybyhNYXRoLm1heCgtMCwgKzApKSwgdHJ1ZSk7CisrICBhc3Nl cnRFcShvYmplY3RJc1Bvc2l0aXZlWmVybyhNYXRoLm1heCgrMCwgLTApKSwgdHJ1ZSk7CisrICBh c3NlcnRFcShvYmplY3RJc05lZ2F0aXZlWmVybyhNYXRoLm1heCgtMCwgLTApKSwgdHJ1ZSk7Cisr ICBhc3NlcnRFcShvYmplY3RJc1Bvc2l0aXZlWmVybyhNYXRoLm1heCgrMCwgKzApKSwgdHJ1ZSk7 CisrICBhc3NlcnRFcShOdW1iZXIuaXNOYU4oTWF0aC5tYXgoTmFOLCA1KSksIHRydWUpOworKyAg YXNzZXJ0RXEoTnVtYmVyLmlzTmFOKE1hdGgubWF4KDUsIE5hTikpLCB0cnVlKTsKKysgIGFzc2Vy dEVxKE51bWJlci5pc05hTihNYXRoLm1heChOYU4sIE5hTikpLCB0cnVlKTsKKysgIGFzc2VydEVx KE1hdGgubWF4KC1JbmZpbml0eSwgNSksIDUpOworKyAgYXNzZXJ0RXEoTWF0aC5tYXgoSW5maW5p dHksIDUpLCBJbmZpbml0eSk7CisrICBhc3NlcnRFcShNYXRoLm1heCgxLCAyKSwgMik7CisrICBh c3NlcnRFcShNYXRoLm1heCgtMSwgLTIpLCAtMSk7CisrICBhc3NlcnRFcShNYXRoLm1heCgxLjUs IDIuNSksIDIuNSk7CisrCisrICAvLyBNaW4gY29ybmVyIGNhc2VzLgorKyAgYXNzZXJ0RXEob2Jq ZWN0SXNOZWdhdGl2ZVplcm8oTWF0aC5taW4oLTAsICswKSksIHRydWUpOworKyAgYXNzZXJ0RXEo b2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0aC5taW4oKzAsIC0wKSksIHRydWUpOworKyAgYXNzZXJ0 RXEob2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0aC5taW4oLTAsIC0wKSksIHRydWUpOworKyAgYXNz ZXJ0RXEob2JqZWN0SXNQb3NpdGl2ZVplcm8oTWF0aC5taW4oKzAsICswKSksIHRydWUpOworKyAg YXNzZXJ0RXEoTnVtYmVyLmlzTmFOKE1hdGgubWluKE5hTiwgNSkpLCB0cnVlKTsKKysgIGFzc2Vy dEVxKE51bWJlci5pc05hTihNYXRoLm1pbig1LCBOYU4pKSwgdHJ1ZSk7CisrICBhc3NlcnRFcShN YXRoLm1pbigtSW5maW5pdHksIDUpLCAtSW5maW5pdHkpOworKyAgYXNzZXJ0RXEoTWF0aC5taW4o SW5maW5pdHksIDUpLCA1KTsKKysgIGFzc2VydEVxKE1hdGgubWluKDEsIDIpLCAxKTsKKyt9Cisr CisrLy8gUnVuIGNvbGQgKEJhc2VsaW5lKSBhbmQgaG90IChJb24pLgorK2NoZWNrKCk7CisrZm9y IChsZXQgaSA9IDA7IGkgPCA1MDAwMDsgaSsrKSBjaGVjaygpOworZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0b21pY2l0eS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL2F0b21pY2l0eS5qcworaW5kZXggMzQzMjdlYzk1NzQxLi5hYzE1MTYwODMzMjUgMTAw NjQ0CistLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9hdG9taWNpdHkuanMKKysrKyBi L2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0b21pY2l0eS5qcworQEAgLTgsNyArOCwxMSBA QAorIGNvbnN0IERFQlVHID0gMDsKKyAKKyAvLyBUaGUgbG9uZ2VyIHdlIHJ1biwgdGhlIGJldHRl ciwgcmVhbGx5LCBidXQgd2UgZG9uJ3Qgd2FudCB0byB0aW1lIG91dC4KKy1jb25zdCBJVEVSQVRJ T05TID0gMTAwMDAwOworKy8vIFJlYWwgUFBDNjQgaGFyZHdhcmUgcmV0cmllcyBsd2FyeC9zdHdj eC4gcmVzZXJ2YXRpb24gbG9vcHMgdW5kZXIKKysvLyBjb250ZW50aW9uLCB3aGljaCBtYWtlcyB0 aGUgZGVmYXVsdCBjb3VudCBleGNlZWQgaml0LXRlc3QncyAxNTAgcworKy8vIGJ1ZGdldCBvbiBQ T1dFUjggYW5kIChsZXNzIHNvKSBQT1dFUjkvUE9XRVIxMC4gUXVhcnRlciB0aGUgY291bnQKKysv LyB0aGVyZSB0byBrZWVwIGNvdmVyYWdlIHdoaWxlIGZpdHRpbmcgdGhlIGRlZmF1bHQgYnVkZ2V0 LgorK2NvbnN0IElURVJBVElPTlMgPSBnZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0IikgPyAy NTAwMCA6IDEwMDAwMDsKKyAKKyAvLyBJZiB5b3UgY2hhbmdlIE5VTVdPUktFUlMgeW91IG11c3Qg YWxzbyBjaGFuZ2UgdGhlIHRhYmxlcyBmb3IgSU5JVCwgVkFMLCBhbmQKKyAvLyBSRVNVTFQgZm9y IGFsbCB0aGUgb3BlcmF0aW9ucywgYmVsb3csIGJ5IGFkZGluZyBvciByZW1vdmluZyBiaXRzLgor QEAgLTM5LDcgKzQzLDcgQEAgaWYgKGdldENvcmVDb3VudCgpIDwgTlVNQUdFTlRTKSB7CisgCisg aWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtLXNpbXVsYXRvciIpIHx8IGdldEJ1aWxkQ29u ZmlndXJhdGlvbigiYXJtNjQtc2ltdWxhdG9yIikgfHwKKyAgICAgZ2V0QnVpbGRDb25maWd1cmF0 aW9uKCJtaXBzNjQtc2ltdWxhdG9yIikgfHwgZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJyaXNjdjY0 LXNpbXVsYXRvciIpIHx8CistICAgIGdldEJ1aWxkQ29uZmlndXJhdGlvbigibG9vbmc2NC1zaW11 bGF0b3IiKSkKKysgICAgZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJsb29uZzY0LXNpbXVsYXRvciIp IHx8IGdldEJ1aWxkQ29uZmlndXJhdGlvbigicHBjNjQtc2ltdWxhdG9yIikpCisgeworICAgICBp ZiAoREVCVUcgPiAwKQorICAgICAgICAgcHJpbnQoIkF0b21pY2l0eSB0ZXN0IGRpc2FibGVkIG9u IHNpbXVsYXRvciIpOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2V4 Y2Vzc2l2ZS1pbmxpbmluZy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2V4Y2Vzc2l2 ZS1pbmxpbmluZy5qcworaW5kZXggOTFlYzcxMGU0ZTQ2Li5hN2QzYjMyMTE1MTUgMTAwNjQ0Cist LS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMKKysr KyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcworQEAg LTc0LDIzICs3NCwyNiBAQCBhc3NlcnRFcSh0aWVyMmNvZGVCeXRlc1VzZWQgPiAyMDAwLCB0cnVl KTsKKyAKKyAvLyBCdXQgbm90IGFuIGV4Y2Vzc2l2ZSBhbW91bnQuICBUaGlzIGlzIHRoZSBhc3Nl cnRpb24gdGhhdCBjaGVja3MgdGhhdAorIC8vIHRoZSBpbmxpbmluZy1idWRnZXQgY3V0b2ZmIG1l Y2hhbmlzbSBpcyB3b3JraW5nLgorLWFzc2VydEVxKHRpZXIyY29kZUJ5dGVzVXNlZCA8IDE1MDAw LCB0cnVlKTsKKysvLyBQUEM2NCBnZW5lcmF0ZXMgbGFyZ2VyIGNvZGUgZHVlIHRvIGZpeGVkLXdp ZHRoIDQtYnl0ZSBpbnN0cnVjdGlvbnMsCisrLy8gbXVsdGktaW5zdHJ1Y3Rpb24gYnJhbmNoIHN0 YW56YXMsIGFuZCBsb25nZXIgY29uc3RhbnQtbG9hZGluZyBzZXF1ZW5jZXMuCisrbGV0IHRpZXIy bGltaXQgPSBnZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0IikgPyAyNTAwMCA6IDE1MDAwOwor K2Fzc2VydEVxKHRpZXIyY29kZUJ5dGVzVXNlZCA8IHRpZXIybGltaXQsIHRydWUpOworIAorIC8v IFRoZSB0aHJlc2hvbGRzIGFib3ZlIGFyZSBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIG1lYXN1cmVt ZW50cy4KKyAvLworIC8vIHRpZXIxY29kZUJ5dGVzVXNlZCAoYmFzZWxpbmUgc2l6ZSkKKyAvLwor LS8vICAgICB4NjQgICAgICB4MzIgICAgYXJtNjQgICAgYXJtMzIKKysvLyAgICAgeDY0ICAgICAg eDMyICAgIGFybTY0ICAgIGFybTMyICAgIHBwYzY0CisgLy8KKy0vLyAgICAxMzc4ICAgICAxMDEw ICAgICAxNDA4ICAgICAxMDA4ICAgIC0tZW5hYmxlLWRlYnVnIGJ1aWxkCistLy8gICAgMTIxOCAg ICAgIDg2NiAgICAgMTI0OCAgICAgIDg1NiAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKKysvLyAg ICAxMzc4ICAgICAxMDEwICAgICAxNDA4ICAgICAxMDA4ICAgICAyNzM2ICAgIC0tZW5hYmxlLWRl YnVnIGJ1aWxkCisrLy8gICAgMTIxOCAgICAgIDg2NiAgICAgMTI0OCAgICAgIDg1NiAgICAgICAg ICAgIC0tZGlzYWJsZS1kZWJ1ZyBidWlsZAorIC8vCisgLy8gdGllcjJjb2RlQnl0ZXNVc2VkIChv cHRpbWl6ZWQgc2l6ZSksIHdpdGggaW5saW5lLXNpemUgYnVkZ2V0aW5nIGVuYWJsZWQKKyAvLwor LS8vICAgICB4NjQgICAgICB4MzIgICAgYXJtNjQgICAgYXJtMzIKKysvLyAgICAgeDY0ICAgICAg eDMyICAgIGFybTY0ICAgIGFybTMyICAgIHBwYzY0CisgLy8KKy0vLyAgICA1MTg2ICAgICA2OTk0 ICAgICA3MTM2ICAgICA1NDcyICAgIC0tZW5hYmxlLWRlYnVnIGJ1aWxkCistLy8gICAgMzY5OCAg ICAgMzczMCAgICAgNTQ3MiAgICAgMzg4OCAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKKysvLyAg ICA1MTg2ICAgICA2OTk0ICAgICA3MTM2ICAgICA1NDcyICAgIDE3NDA4ICAgIC0tZW5hYmxlLWRl YnVnIGJ1aWxkCisrLy8gICAgMzY5OCAgICAgMzczMCAgICAgNTQ3MiAgICAgMzg4OCAgICAgICAg ICAgIC0tZGlzYWJsZS1kZWJ1ZyBidWlsZAorIC8vCisgLy8gdGllcjJjb2RlQnl0ZXNVc2VkIChv cHRpbWl6ZWQgc2l6ZSksIHdpdGggaW5saW5lLXNpemUgYnVkZ2V0aW5nIGRpc2FibGVkCisgLy8K K0BAIC0xMDgsNyArMTExLDcgQEAgYXNzZXJ0RXEodGllcjJjb2RlQnl0ZXNVc2VkIDwgMTUwMDAs IHRydWUpOworIC8vICgyKSB0aGUgb3B0aW1pemVkIHNpemUgd2lsbCBiZSBhdCBsZWFzdCAyMDAw IGJ5dGVzCisgLy8KKyAvLyAoMykgaWYgdGhlIGlubGluZS1idWRnZXQgbWVjaGFuaXNtIGlzIHdv cmtpbmcgYXMgaW50ZW5kZWQsIHRoZSBvcHRpbWl6ZWQKKy0vLyAgICAgc2l6ZSB3aWxsIGJlIGxl c3MgdGhhbiAxNTAwMCBieXRlcworKy8vICAgICBzaXplIHdpbGwgYmUgbGVzcyB0aGFuIDE1MDAw IGJ5dGVzICgyNTAwMCBvbiBQUEM2NCkKKyAvLworIC8vCisgLy8gTm90ZSAoZm9yIGZ1dHVyZSB0 ZXN0aW5nKTogaW5saW5lLXNpemUgYnVkZ2V0aW5nIHdhcyBkaXNhYmxlZCBieSBjaGFuZ2luZwor ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL21lbW9yeS1vb2ItbWVzc2Fn ZS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL21lbW9yeS1vb2ItbWVzc2FnZS5qcwor aW5kZXggNzUyNDhjNmU2YTU2Li5jMDhlNDliY2M2ZTQgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMKKysrKyBiL2pzL3NyYy9qaXQt dGVzdC90ZXN0cy93YXNtL21lbW9yeS1vb2ItbWVzc2FnZS5qcworQEAgLTgsOCArOCwxNiBAQCBj b25zdCBoYXNPZmZzZXRNZXNzYWdlID0gd2FzbUh1Z2VNZW1vcnlFbmFibGVkKCk7CisgCisgZnVu Y3Rpb24gb29iUGF0dGVybihtZW1JZHgsIGJ5dGVPZmZzZXQpIHsKKyAgICAgaWYgKGhhc09mZnNl dE1lc3NhZ2UpIHsKKysgICAgICAgIC8vIFRoZSByZXBvcnRlZCBhZGRyZXNzIGlzIHdoYXRldmVy IHRoZSBrZXJuZWwgcmV0dXJuZWQgaW4KKysgICAgICAgIC8vIHNpZ2luZm8uc2lfYWRkciBmb3Ig dGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLiBNb3N0IGJhY2tlbmRzIGVtaXQKKysgICAgICAgIC8v IHRoZSB3YXNtIGFjY2VzcyBkaXJlY3RseSBzbyBzaV9hZGRyIGVxdWFscyBieXRlT2Zmc2V0LiBQ UEM2NCBlbWl0cworKyAgICAgICAgLy8gYSAxLWJ5dGUgcHJvYmluZyBsb2FkIGF0IGJ5dGVPZmZz ZXQgKyAoc2l6ZSAtIDEpIGJlZm9yZSBlYWNoCisrICAgICAgICAvLyBtdWx0aS1ieXRlIGFjY2Vz cyAodG8gZW5mb3JjZSB3YXNtLXNwZWMgYXRvbWljaXR5IG9uIFBPV0VSIElTQSksCisrICAgICAg ICAvLyBzbyBzaV9hZGRyIHRoZXJlIGNhbiBiZSB1cCB0byAxNSBieXRlcyBwYXN0IGJ5dGVPZmZz ZXQuCisrICAgICAgICBjb25zdCBvZmZzZXRzID0gW107CisrICAgICAgICBmb3IgKGxldCBpID0g MDsgaSA8IDE2OyArK2kpIG9mZnNldHMucHVzaChgJHtieXRlT2Zmc2V0ICsgaX1gKTsKKyAgICAg ICAgIHJldHVybiBuZXcgUmVnRXhwKAorLSAgICAgICAgICAgIGBvdXQgb2YgYm91bmRzOiBtZW1v cnkgJHttZW1JZHh9IGFjY2VzcyBhdCBtZW1vcnkgYWRkcmVzcyAke2J5dGVPZmZzZXR9YAorKyAg ICAgICAgICAgIGBvdXQgb2YgYm91bmRzOiBtZW1vcnkgJHttZW1JZHh9IGFjY2VzcyBhdCBtZW1v cnkgYWRkcmVzcyAoPzoke29mZnNldHMuam9pbignfCcpfSlgCisgICAgICAgICApOworICAgICB9 CisgICAgIHJldHVybiAvaW5kZXggb3V0IG9mIGJvdW5kcy87CitkaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtYXJnb24yLXRpZXJpbmcuanMgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1hcmdvbjItdGllcmluZy5qcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMDRkYWQ5MjQwNTM5CistLS0gL2Rldi9udWxsCisr KysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1hcmdvbjItdGllcmluZy5qcwor QEAgLTAsMCArMSwxMjQgQEAKKysvLyBUZXN0IGZvciB3YXNtIHRpZXJpbmcgY29ycmVjdG5lc3Mg d2l0aCBhcmdvbjItc3R5bGUgU0lNRCBjb21wdXRhdGlvbi4KKysvLyBUaGUgYXJnb24yIGZCbGFN a2EgZnVuY3Rpb24gdXNlcyBpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UsIGk2NHgyLnNobCwKKysv LyBpNjR4Mi5hZGQsIHYxMjgueG9yLCB2MTI4Lm9yLCBpNjR4Mi5zaHJfdSwgYW5kIGk4eDE2LnNo dWZmbGUuCisrLy8gQSB0aWVyaW5nIGJ1ZyBjYW4gY2F1c2UgaGFzaCBhbmQgdmVyaWZ5IHRvIHBy b2R1Y2UgZGlmZmVyZW50IHJlc3VsdHMKKysvLyB3aGVuIHRpZXItdXAgaGFwcGVucyBiZXR3ZWVu IHRoZW0uCisrLy8KKysvLyBUaGlzIHRlc3QgcnVucyB0aGUgY29tcHV0YXRpb24gdW5kZXIgYm90 aCBiYXNlbGluZSBhbmQgb3B0aW1pemluZworKy8vIGNvbXBpbGVycyBhbmQgdmVyaWZpZXMgdGhl eSBwcm9kdWNlIGlkZW50aWNhbCByZXN1bHRzLgorKworK3ZhciBtb2QgPSBuZXcgV2ViQXNzZW1i bHkuTW9kdWxlKHdhc21UZXh0VG9CaW5hcnkoYAorKyAgKG1vZHVsZQorKyAgICAobWVtb3J5IChl eHBvcnQgIm1lbSIpIDEwKQorKyAgICA7OyBBcmdvbjIgZkJsYU1rYTogYSArIGIgKyAyICogdHJ1 bmMzMihhKSAqIHRydW5jMzIoYikKKysgICAgOzsgdGhlbiByb3RhdGlvbnMgYnkgMzIsIDI0LCAx NiwgNjMKKysgICAgKGZ1bmMgJEdfcm91bmQgKHBhcmFtIGkzMikKKysgICAgICAobG9jYWwgdjEy OCB2MTI4IHYxMjggdjEyOCB2MTI4IHYxMjggdjEyOCB2MTI4IHYxMjgpCisrICAgICAgKGxvY2Fs LnNldCAxICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDApKSkp CisrICAgICAgKGxvY2FsLnNldCAyICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAo aTMyLmNvbnN0IDE2KSkpKQorKyAgICAgIChsb2NhbC5zZXQgMyAodjEyOC5sb2FkIChpMzIuYWRk IChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAzMikpKSkKKysgICAgICAobG9jYWwuc2V0IDQgKHYx MjgubG9hZCAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgNDgpKSkpCisrICAgICAg KGxvY2FsLnNldCA1ICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0 IDY0KSkpKQorKyAgICAgIChsb2NhbC5zZXQgNiAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5n ZXQgMCkgKGkzMi5jb25zdCA4MCkpKSkKKysgICAgICAobG9jYWwuc2V0IDcgKHYxMjgubG9hZCAo aTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgOTYpKSkpCisrICAgICAgKGxvY2FsLnNl dCA4ICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDExMikpKSkK KysKKysgICAgICA7OyBmQmxhTWthKHYwLCB2MikgKyByb3RyMzIKKysgICAgICAobG9jYWwuc2V0 IDEgKGk2NHgyLmFkZCAoaTY0eDIuYWRkIChsb2NhbC5nZXQgMSkgKGxvY2FsLmdldCAzKSkKKysg ICAgICAgIChpNjR4Mi5zaGwgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfdQorKyAgICAgICAgICAo aTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwu Z2V0IDEpIChsb2NhbC5nZXQgMSkpCisrICAgICAgICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMg OCA5IDEwIDExIDAgMSAyIDMgOCA5IDEwIDExIChsb2NhbC5nZXQgMykgKGxvY2FsLmdldCAzKSkp CisrICAgICAgICAgIChpMzIuY29uc3QgMSkpKSkKKysgICAgICAobG9jYWwuc2V0IDkgKHYxMjgu eG9yIChsb2NhbC5nZXQgNykgKGxvY2FsLmdldCAxKSkpCisrICAgICAgKGxvY2FsLnNldCA3ICh2 MTI4Lm9yIChpNjR4Mi5zaGwgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0IDMyKSkgKGk2NHgyLnNo cl91IChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCAzMikpKSkKKysKKysgICAgICA7OyBmQmxhTWth KHY0LCB2NikgKyByb3RyMjQKKysgICAgICAobG9jYWwuc2V0IDUgKGk2NHgyLmFkZCAoaTY0eDIu YWRkIChsb2NhbC5nZXQgNSkgKGxvY2FsLmdldCA3KSkKKysgICAgICAgIChpNjR4Mi5zaGwgKGk2 NHgyLmV4dG11bF9sb3dfaTMyeDRfdQorKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAz IDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDUpIChsb2NhbC5nZXQgNSkp CisrICAgICAgICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMgOCA5IDEwIDExIDAgMSAyIDMgOCA5 IDEwIDExIChsb2NhbC5nZXQgNykgKGxvY2FsLmdldCA3KSkpCisrICAgICAgICAgIChpMzIuY29u c3QgMSkpKSkKKysgICAgICAobG9jYWwuc2V0IDkgKHYxMjgueG9yIChsb2NhbC5nZXQgMykgKGxv Y2FsLmdldCA1KSkpCisrICAgICAgKGxvY2FsLnNldCAzICh2MTI4Lm9yIChpNjR4Mi5zaGwgKGxv Y2FsLmdldCA5KSAoaTMyLmNvbnN0IDQwKSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQgOSkgKGkz Mi5jb25zdCAyNCkpKSkKKysKKysgICAgICA7OyBmQmxhTWthKHYwLCB2MikgKyByb3RyMTYKKysg ICAgICAobG9jYWwuc2V0IDEgKGk2NHgyLmFkZCAoaTY0eDIuYWRkIChsb2NhbC5nZXQgMSkgKGxv Y2FsLmdldCAzKSkKKysgICAgICAgIChpNjR4Mi5zaGwgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRf dQorKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDgg OSAxMCAxMSAobG9jYWwuZ2V0IDEpIChsb2NhbC5nZXQgMSkpCisrICAgICAgICAgIChpOHgxNi5z aHVmZmxlIDAgMSAyIDMgOCA5IDEwIDExIDAgMSAyIDMgOCA5IDEwIDExIChsb2NhbC5nZXQgMykg KGxvY2FsLmdldCAzKSkpCisrICAgICAgICAgIChpMzIuY29uc3QgMSkpKSkKKysgICAgICAobG9j YWwuc2V0IDkgKHYxMjgueG9yIChsb2NhbC5nZXQgNykgKGxvY2FsLmdldCAxKSkpCisrICAgICAg KGxvY2FsLnNldCA3ICh2MTI4Lm9yIChpNjR4Mi5zaGwgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0 IDQ4KSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCAxNikpKSkKKysKKysg ICAgICA7OyBmQmxhTWthKHY0LCB2NikgKyByb3RyNjMKKysgICAgICAobG9jYWwuc2V0IDUgKGk2 NHgyLmFkZCAoaTY0eDIuYWRkIChsb2NhbC5nZXQgNSkgKGxvY2FsLmdldCA3KSkKKysgICAgICAg IChpNjR4Mi5zaGwgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfdQorKyAgICAgICAgICAoaTh4MTYu c2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDUp IChsb2NhbC5nZXQgNSkpCisrICAgICAgICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMgOCA5IDEw IDExIDAgMSAyIDMgOCA5IDEwIDExIChsb2NhbC5nZXQgNykgKGxvY2FsLmdldCA3KSkpCisrICAg ICAgICAgIChpMzIuY29uc3QgMSkpKSkKKysgICAgICAobG9jYWwuc2V0IDkgKHYxMjgueG9yIChs b2NhbC5nZXQgMykgKGxvY2FsLmdldCA1KSkpCisrICAgICAgKGxvY2FsLnNldCAzICh2MTI4Lm9y IChpNjR4Mi5zaGwgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0IDEpKSAoaTY0eDIuc2hyX3UgKGxv Y2FsLmdldCA5KSAoaTMyLmNvbnN0IDYzKSkpKQorKworKyAgICAgICh2MTI4LnN0b3JlIChpMzIu YWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAwKSkgKGxvY2FsLmdldCAxKSkKKysgICAgICAo djEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMTYpKSAobG9jYWwu Z2V0IDIpKQorKyAgICAgICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5j b25zdCAzMikpIChsb2NhbC5nZXQgMykpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxv Y2FsLmdldCAwKSAoaTMyLmNvbnN0IDQ4KSkgKGxvY2FsLmdldCA0KSkKKysgICAgICAodjEyOC5z dG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgNjQpKSAobG9jYWwuZ2V0IDUp KQorKyAgICAgICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA4 MCkpIChsb2NhbC5nZXQgNikpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdl dCAwKSAoaTMyLmNvbnN0IDk2KSkgKGxvY2FsLmdldCA3KSkKKysgICAgICAodjEyOC5zdG9yZSAo aTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMTEyKSkgKGxvY2FsLmdldCA4KSkpCisr CisrICAgIChmdW5jIChleHBvcnQgImhhc2giKSAocGFyYW0gaTMyKSAocmVzdWx0IGk2NCkKKysg ICAgICAobG9jYWwgaTMyKQorKyAgICAgIDs7IEluaXQgd2l0aCBCbGFrZTJiIElWCisrICAgICAg KHYxMjguc3RvcmUgKGkzMi5jb25zdCAwKSAodjEyOC5jb25zdCBpNjR4MiAweDZhMDllNjY3ZjNi Y2M5MDggMHhiYjY3YWU4NTg0Y2FhNzNiKSkKKysgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0 IDE2KSAodjEyOC5jb25zdCBpNjR4MiAweDNjNmVmMzcyZmU5NGY4MmIgMHhhNTRmZjUzYTVmMWQz NmYxKSkKKysgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDMyKSAodjEyOC5jb25zdCBpNjR4 MiAweDUxMGU1MjdmYWRlNjgyZDEgMHg5YjA1Njg4YzJiM2U2YzFmKSkKKysgICAgICAodjEyOC5z dG9yZSAoaTMyLmNvbnN0IDQ4KSAodjEyOC5jb25zdCBpNjR4MiAweDFmODNkOWFiZmI0MWJkNmIg MHg1YmUwY2QxOTEzN2UyMTc5KSkKKysgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDY0KSAo djEyOC5jb25zdCBpNjR4MiAweDAxMjM0NTY3ODlhYmNkZWYgMHhmZWRjYmE5ODc2NTQzMjEwKSkK KysgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDgwKSAodjEyOC5jb25zdCBpNjR4MiAweGRl YWRiZWVmY2FmZWJhYmUgMHgxMTIyMzM0NDU1NjY3Nzg4KSkKKysgICAgICAodjEyOC5zdG9yZSAo aTMyLmNvbnN0IDk2KSAodjEyOC5jb25zdCBpNjR4MiAweGFhYmJjY2RkMTEyMjMzNDQgMHg1NTY2 Nzc4ODk5YWFiYmNjKSkKKysgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDExMikgKHYxMjgu Y29uc3QgaTY0eDIgMHhkZGVlZmYwMDExMjIzMzQ0IDB4NTU2Njc3ODg5OWFhYmJjYykpCisrICAg ICAgKGxvY2FsLnNldCAxIChpMzIuY29uc3QgMCkpCisrICAgICAgKGJsb2NrIChsb29wCisrICAg ICAgICAoY2FsbCAkR19yb3VuZCAoaTMyLmNvbnN0IDApKQorKyAgICAgICAgKGxvY2FsLnNldCAx IChpMzIuYWRkIChsb2NhbC5nZXQgMSkgKGkzMi5jb25zdCAxKSkpCisrICAgICAgICAoYnJfaWYg MSAoaTMyLmdlX3UgKGxvY2FsLmdldCAxKSAobG9jYWwuZ2V0IDApKSkKKysgICAgICAgIChiciAw KSkpCisrICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgMCkpCisrICAgICAgICAo aTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA4KSkKKysgICAgICAgICAgKGk2NC54b3IgKGk2 NC5sb2FkIChpMzIuY29uc3QgMTYpKQorKyAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAo aTMyLmNvbnN0IDI0KSkKKysgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNv bnN0IDMyKSkKKysgICAgICAgICAgICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3Qg NDApKQorKyAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDQ4 KSkKKysgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDU2 KSkKKysgICAgICAgICAgICAgICAgICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3Qg NjQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNv bnN0IDcyKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAo aTMyLmNvbnN0IDgwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGk2NC54b3IgKGk2 NC5sb2FkIChpMzIuY29uc3QgODgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp NjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDk2KSkKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDEwNCkpCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDEx MikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGk2NC5sb2FkIChpMzIu Y29uc3QgMTIwKSkpKSkpKSkpKSkpKSkpKSkpCisrICApCisrYCkpOworKworK3ZhciBpbnN0ID0g bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZCk7CisrCisrLy8gR2V0IGEgcmVmZXJlbmNlIHJl c3VsdCBmcm9tIHRoZSBmaXJzdCBjYWxsLgorK3ZhciByZWZlcmVuY2UgPSBpbnN0LmV4cG9ydHMu aGFzaCgxMDApOworKworKy8vIFJ1biBtYW55IHRpbWVzIHRvIHRyaWdnZXIgdGllci11cCwgdGhl biB2ZXJpZnkgcmVzdWx0IHN0YXlzIHRoZSBzYW1lLgorK3ZhciBwYXNzID0gdHJ1ZTsKKytmb3Ig KHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworKyAgICB2YXIgciA9IGluc3QuZXhwb3J0cy5o YXNoKDEwMCk7CisrICAgIGlmIChyICE9PSByZWZlcmVuY2UpIHsKKysgICAgICAgIHBhc3MgPSBm YWxzZTsKKysgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGllcmluZyBtaXNtYXRjaCBhdCBpdGVy YXRpb24gIiArIGkgKworKyAgICAgICAgICAgICI6IGdvdCAweCIgKyBCaWdJbnQuYXNVaW50Tig2 NCwgcikudG9TdHJpbmcoMTYpICsKKysgICAgICAgICAgICAiLCBleHBlY3RlZCAweCIgKyBCaWdJ bnQuYXNVaW50Tig2NCwgcmVmZXJlbmNlKS50b1N0cmluZygxNikpOworKyAgICB9CisrfQorKwor K2Fzc2VydEVxKHBhc3MsIHRydWUpOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL3dhc20vcHBjNjQtY29tcGFyZS1zZWxlY3QtYmVuY2guanMKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmMxMWNlNzEzZjUxNAorLS0tIC9kZXYvbnVsbAorKysr IGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtY29tcGFyZS1zZWxlY3QtYmVuY2gu anMKK0BAIC0wLDAgKzEsNzAgQEAKKysvLyB8aml0LXRlc3R8IHNraXAtaWY6IHRydWUKKysvLwor Ky8vIEJlbmNobWFyayBvbmx5LCBub3QgYSBjb3JyZWN0bmVzcyB0ZXN0LiBJbnZva2UgbWFudWFs bHkgYXMgc2hvd24gYmVsb3cuCisrLy8KKysvLyBNaWNyb2JlbmNobWFyayBmb3Igd2FzbSBjb21w YXJlK3NlbGVjdCBmdXNpb24gb24gUFBDNjQuCisrLy8KKysvLyBSdW4gd2l0aDoKKysvLyAgICRK UyAtLXdhc20tY29tcGlsZXI9b3B0aW1pemluZyBcCisrLy8gICAgICAganMvc3JjL2ppdC10ZXN0 L3Rlc3RzL3dhc20vcHBjNjQtY29tcGFyZS1zZWxlY3QtYmVuY2guanMKKysvLworKy8vIFByaW50 cyB0aW1pbmdzIGZvciBmb3VyIHZhcmlhbnRzIChpMzIsIGk2NCwgZjMyLCBmNjQpIHRoYXQgZXhl cmNpc2UgYQorKy8vIHRpZ2h0IGxvb3Agb2YgTiBzZWxlY3Qtb24tY29tcGFyZSBvcGVyYXRpb25z LiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVyCisrLy8gc3BlY2lhbGl6aW5nIGxvd2VyV2FzbUNvbXBh cmVBbmRTZWxlY3QgYmV5b25kIEludDMyIGlzIHdvcnRoIHRoZSBjb2RlLgorKy8vCisrLy8gVGhl IGtlcm5lbCBpcyBhIDEwLXN0YWdlIHNlbGVjdCBjaGFpbiBzbyB0aGUgcGVyLW9wIG92ZXJoZWFk IGRvbWluYXRlcworKy8vIHRoZSBsb29wIGZyYW1lLiBFYWNoIGl0ZXJhdGlvbiB0b3VjaGVzIDEw IGNvbXBhcmUrc2VsZWN0IG9wcyBwbHVzCisrLy8gfnRyaXZpYWwgYWRkcmVzcyBtYXRoLgorKwor K2NvbnN0IE5fSVRFUlMgPSAxXzAwMF8wMDA7CisrCisrZnVuY3Rpb24gYnVpbGRNb2R1bGUoa2lu ZCkgeworKyAgY29uc3QgdHlwZXMgPSB7aTMyOiBbJ2kzMicsICdpMzInLCAnaTMyLmx0X3MnXSwK KysgICAgICAgICAgICAgICAgIHUzMjogWydpMzInLCAnaTMyJywgJ2kzMi5sdF91J10sCisrICAg ICAgICAgICAgICAgICBpNjQ6IFsnaTY0JywgJ2k2NCcsICdpNjQubHRfcyddLAorKyAgICAgICAg ICAgICAgICAgZjMyOiBbJ2YzMicsICdpMzInLCAnZjMyLmx0J10sCisrICAgICAgICAgICAgICAg ICBmNjQ6IFsnZjY0JywgJ2kzMicsICdmNjQubHQnXX1ba2luZF07CisrICBjb25zdCBbdHksIGl0 ZXJUeSwgY21wT3BdID0gdHlwZXM7CisrICAvLyBMb2FkIGEsIGI7IGNvbXB1dGUgY2hhaW4gb2Yg KGIgPCBhID8gYiA6IGEpIDEwIHRpbWVzIHBlciBpdGVyLgorKyAgY29uc3Qgc3RhZ2UgPSBgCisr ICAgIChsb2NhbC5zZXQgJGEKKysgICAgICAoc2VsZWN0IChyZXN1bHQgJHt0eX0pCisrICAgICAg ICAobG9jYWwuZ2V0ICRiKSAobG9jYWwuZ2V0ICRhKQorKyAgICAgICAgKCR7Y21wT3B9IChsb2Nh bC5nZXQgJGIpIChsb2NhbC5nZXQgJGEpKSkpYDsKKysgIGNvbnN0IGJvZHkgPSBBcnJheSgxMCku ZmlsbChzdGFnZSkuam9pbignXG4nKTsKKysgIGNvbnN0IHRleHQgPSBgCisrICAgIChtb2R1bGUK KysgICAgICAoZnVuYyAoZXhwb3J0ICJydW4iKSAocGFyYW0gJG4gaTMyKSAocmVzdWx0ICR7dHl9 KQorKyAgICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICRhICR7dHl9KSAobG9jYWwgJGIgJHt0 eX0pCisrICAgICAgICAobG9jYWwuc2V0ICRhICgke3R5fS5jb25zdCAke2tpbmQgPT09ICdmMzIn IHx8IGtpbmQgPT09ICdmNjQnID8gJzMuMTQnIDogJzEyMzQ1J30pKQorKyAgICAgICAgKGxvY2Fs LnNldCAkYiAoJHt0eX0uY29uc3QgJHtraW5kID09PSAnZjMyJyB8fCBraW5kID09PSAnZjY0JyA/ ICcyLjcxJyA6ICc2Nzg5MCd9KSkKKysgICAgICAgIChsb29wICRMCisrICAgICAgICAgICR7Ym9k eX0KKysgICAgICAgICAgKGxvY2FsLnNldCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAoaTMy LmNvbnN0IDEpKSkKKysgICAgICAgICAgKGJyX2lmICRMIChpMzIubHRfcyAobG9jYWwuZ2V0ICRp KSAobG9jYWwuZ2V0ICRuKSkpKQorKyAgICAgICAgKGxvY2FsLmdldCAkYSkpKWA7CisrICByZXR1 cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh3YXNtVGV4dFRvQmluYXJ5KHRleHQpKTsKKyt9Cisr CisrZnVuY3Rpb24gYmVuY2goa2luZCkgeworKyAgY29uc3QgaW5zdCA9IG5ldyBXZWJBc3NlbWJs eS5JbnN0YW5jZShidWlsZE1vZHVsZShraW5kKSk7CisrICAvLyBXYXJtdXAg4oCUIGVuc3VyZSBJ b24gY29tcGlsZXMuCisrICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykgaW5zdC5leHBvcnRz LnJ1bihOX0lURVJTKTsKKysgIGNvbnN0IHQwID0gZGF0ZU5vdygpOworKyAgY29uc3QgcmVzID0g aW5zdC5leHBvcnRzLnJ1bihOX0lURVJTKTsKKysgIGNvbnN0IHQxID0gZGF0ZU5vdygpOworKyAg cmV0dXJuIHttczogdDEgLSB0MCwgcmVzdWx0OiByZXN9OworK30KKysKKytjb25zdCBraW5kcyA9 IFsnaTMyJywgJ3UzMicsICdpNjQnLCAnZjMyJywgJ2Y2NCddOworK2NvbnN0IHJ1bnMgPSA1Owor K3ByaW50KGBcbndhc20gY29tcGFyZStzZWxlY3QgbWljcm9iZW5jaCAoJHtOX0lURVJTLnRvTG9j YWxlU3RyaW5nKCl9IGl0ZXJzLCAxMCBvcHMvaXRlcik6YCk7CisrcHJpbnQoYCAgRWFjaCB0aW1p bmcgaXMgdGhlIGJlc3Qgb2YgJHtydW5zfSBydW5zLlxuYCk7CisrZm9yIChjb25zdCBraW5kIG9m IGtpbmRzKSB7CisrICBjb25zdCBzYW1wbGVzID0gW107CisrICBmb3IgKGxldCBpID0gMDsgaSA8 IHJ1bnM7IGkrKykgc2FtcGxlcy5wdXNoKGJlbmNoKGtpbmQpLm1zKTsKKysgIHNhbXBsZXMuc29y dCgoYSwgYikgPT4gYSAtIGIpOworKyAgY29uc3QgYmVzdCA9IHNhbXBsZXNbMF07CisrICBjb25z dCBtZWRpYW4gPSBzYW1wbGVzWyhydW5zIC8gMikgfCAwXTsKKysgIHByaW50KGAgICR7a2luZC5w YWRFbmQoNCl9IGJlc3Q9JHtiZXN0LnRvRml4ZWQoMSl9bXMgIG1lZGlhbj0ke21lZGlhbi50b0Zp eGVkKDEpfW1zICAoc2FtcGxlczogJHtzYW1wbGVzLm1hcChzID0+IHMudG9GaXhlZCgwKSkuam9p bignLCcpfSlgKTsKKyt9CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20v cHBjNjQtZXh0bXVsLWFsaWFzLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQt ZXh0bXVsLWFsaWFzLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAw Li4yYWE5NTA3NzUxYjYKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL3BwYzY0LWV4dG11bC1hbGlhcy5qcworQEAgLTAsMCArMSwxMDcgQEAKKysvLyBSZWdy ZXNzaW9uIHRlc3QgZm9yIFBQQzY0IGk2NHgyLmV4dG11bF97bG93LGhpZ2h9X2kzMng0X3tzLHV9 IHdoZW4gdGhlCisrLy8gSW9uIHJlZ2lzdGVyIGFsbG9jYXRvciBwaWNrcyBkZXN0ID09IHJocy4K KysvLworKy8vIE9uIFBQQzY0IExFLCB0aGUgb2xkIGltcGxlbWVudGF0aW9uIGV4dHJhY3RlZCBs YW5lcyB2aWEgbXR2c3JkL21mdnNyZCBhbmQKKysvLyB3cm90ZSB0aGUgbG93LWxhbmUgcHJvZHVj dCB0byBkZXN0IGJlZm9yZSByZWFkaW5nIHJocyBmb3IgdGhlIGhpZ2ggbGFuZS4KKysvLyBgbXR2 c3JkIFhULCBSQWAgbGVhdmVzIERXMSBvZiBYVCB1bmRlZmluZWQgKFBPV0VSOSB6ZXJvcyBpdCks IHNvIHdoZW4KKysvLyBkZXN0IGFsaWFzZWQgcmhzIHRoZSBoaWdoLWxhbmUgZXh0cmFjdCBmcm9t IHJocyByZWFkIGdhcmJhZ2UsIHByb2R1Y2luZworKy8vIHplcm8gaW4gdGhlIGhpZ2ggaTY0IGxh bmUuIE9uIFBPV0VSOCB0aGUgRXh0cmFjdExhbmVUb0dQUiBmYWxsYmFjaworKy8vIGFkZGl0aW9u YWxseSBjbG9iYmVyZWQgU2NyYXRjaFNpbWQxMjhSZWcgYmV0d2VlbiB0aGUgdHdvIGV4dHJhY3Rz LgorKy8vCisrLy8gVGhlIGxvb3AgYmVsb3csIGRpc2NvdmVyZWQgdmlhIHdhc20tcmVkdWNlIGZy b20gYXJnb24yLndhc20sIHJlbGlhYmx5CisrLy8gcmVwcm9kdWNlZCB0aGUgbWlzY29tcGlsZTog dGhlIHJlc3VsdCdzIGhpZ2ggaTY0IGxhbmUgd2VudCB0byAwIG9uCisrLy8gUE9XRVI5IElvbiAv IGdhcmJhZ2Ugb24gUE9XRVI4IElvbiwgd2hpbGUgYmFzZWxpbmUga2VwdCB0aGUgY29ycmVjdAor Ky8vIHZhbHVlIChsYW5lMSA9IDQ4KjQ4ID0gMjMwNCBpbiB0aGUgZmluYWwgaXRlcmF0aW9uKS4K KysKKyt2YXIgbW9kID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh3YXNtVGV4dFRvQmluYXJ5KGAK KysgIChtb2R1bGUKKysgICAgKG1lbW9yeSAoZXhwb3J0ICJtZW0iKSAxKQorKyAgICAoZnVuYyAo ZXhwb3J0ICJydW5fdSIpIChwYXJhbSAkb3V0IGkzMikKKysgICAgICAobG9jYWwgJGkgaTMyKSAo bG9jYWwgJHY0IHYxMjgpIChsb2NhbCAkdjUgdjEyOCkgKGxvY2FsICR2OSB2MTI4KQorKyAgICAg IChsb29wCisrICAgICAgICAobG9jYWwuc2V0ICR2OQorKyAgICAgICAgICAoaTY0eDIuYWRkCisr ICAgICAgICAgICAgKHYxMjguY29uc3QgaTMyeDQgMSAwIDAgMCkKKysgICAgICAgICAgICAoaTY0 eDIuZXh0bXVsX2xvd19pMzJ4NF91IChsb2NhbC5nZXQgJHY1KSAobG9jYWwuZ2V0ICR2OSkpKSkK KysgICAgICAgIChsb2NhbC5zZXQgJHY0IChsb2NhbC5nZXQgJHY5KSkKKysgICAgICAgIChsb2Nh bC5zZXQgJHY1IChsb2NhbC5nZXQgJHY0KSkKKysgICAgICAgICh2MTI4LnN0b3JlIChpMzIuY29u c3QgMCkgKGxvY2FsLmdldCAkdjUpKQorKyAgICAgICAgKGxvY2FsLnNldCAkaSAoaTMyLmFkZCAo bG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDEpKSkKKysgICAgICAgIChicl9pZiAwIChpMzIubmUg KGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCA4KSkpKQorKyAgICAgICh2MTI4LnN0b3JlIChsb2Nh bC5nZXQgJG91dCkgKGxvY2FsLmdldCAkdjkpKSkKKysKKysgICAgKGZ1bmMgKGV4cG9ydCAicnVu X3MiKSAocGFyYW0gJG91dCBpMzIpCisrICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICR2IHYx MjgpCisrICAgICAgKGxvY2FsLnNldCAkdiAodjEyOC5jb25zdCBpMzJ4NCAyIDMgNSA3KSkKKysg ICAgICAobG9vcAorKyAgICAgICAgOzsgRm9yY2UgZGVzdD09cmhzIGFsaWFzaW5nOiB2ID0gZXh0 bXVsX2xvd19pMzJ4NF9zKGNvbnN0LCB2KS4KKysgICAgICAgIChsb2NhbC5zZXQgJHYKKysgICAg ICAgICAgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfcworKyAgICAgICAgICAgICh2MTI4LmNvbnN0 IGkzMng0IDIgMyA1IDcpCisrICAgICAgICAgICAgKGxvY2FsLmdldCAkdikpKQorKyAgICAgICAg KGxvY2FsLnNldCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDEpKSkKKysg ICAgICAgIChicl9pZiAwIChpMzIubmUgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAyKSkpKQor KyAgICAgICh2MTI4LnN0b3JlIChsb2NhbC5nZXQgJG91dCkgKGxvY2FsLmdldCAkdikpKQorKwor KyAgICAoZnVuYyAoZXhwb3J0ICJydW5faGlnaF91IikgKHBhcmFtICRvdXQgaTMyKQorKyAgICAg IChsb2NhbCAkaSBpMzIpIChsb2NhbCAkdiB2MTI4KQorKyAgICAgIChsb2NhbC5zZXQgJHYgKHYx MjguY29uc3QgaTMyeDQgMCAwIDIgMykpCisrICAgICAgKGxvb3AKKysgICAgICAgIChsb2NhbC5z ZXQgJHYKKysgICAgICAgICAgKGk2NHgyLmV4dG11bF9oaWdoX2kzMng0X3UKKysgICAgICAgICAg ICAodjEyOC5jb25zdCBpMzJ4NCAwIDAgMiAzKQorKyAgICAgICAgICAgIChsb2NhbC5nZXQgJHYp KSkKKysgICAgICAgIChsb2NhbC5zZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5j b25zdCAxKSkpCisrICAgICAgICAoYnJfaWYgMCAoaTMyLm5lIChsb2NhbC5nZXQgJGkpIChpMzIu Y29uc3QgMikpKSkKKysgICAgICAodjEyOC5zdG9yZSAobG9jYWwuZ2V0ICRvdXQpIChsb2NhbC5n ZXQgJHYpKSkKKysKKysgICAgKGZ1bmMgKGV4cG9ydCAicnVuX2hpZ2hfcyIpIChwYXJhbSAkb3V0 IGkzMikKKysgICAgICAobG9jYWwgJGkgaTMyKSAobG9jYWwgJHYgdjEyOCkKKysgICAgICAobG9j YWwuc2V0ICR2ICh2MTI4LmNvbnN0IGkzMng0IDAgMCAyIDMpKQorKyAgICAgIChsb29wCisrICAg ICAgICAobG9jYWwuc2V0ICR2CisrICAgICAgICAgIChpNjR4Mi5leHRtdWxfaGlnaF9pMzJ4NF9z CisrICAgICAgICAgICAgKHYxMjguY29uc3QgaTMyeDQgMCAwIDIgMykKKysgICAgICAgICAgICAo bG9jYWwuZ2V0ICR2KSkpCisrICAgICAgICAobG9jYWwuc2V0ICRpIChpMzIuYWRkIChsb2NhbC5n ZXQgJGkpIChpMzIuY29uc3QgMSkpKQorKyAgICAgICAgKGJyX2lmIDAgKGkzMi5uZSAobG9jYWwu Z2V0ICRpKSAoaTMyLmNvbnN0IDIpKSkpCisrICAgICAgKHYxMjguc3RvcmUgKGxvY2FsLmdldCAk b3V0KSAobG9jYWwuZ2V0ICR2KSkpKQorK2ApKTsKKysKKytmdW5jdGlvbiBydW5BbmRDaGVjayhp bnN0KSB7CisrICBpbnN0LmV4cG9ydHMucnVuX3UoMCk7CisrICAvLyBBZnRlciA4IGl0ZXJhdGlv bnMsIHRoZSB2YWx1ZSBpbiBtZW1vcnkgc2hvdWxkIGhhdmUgbGFuZTEgPT0gMjMwNCA9IDB4OTAw LgorKyAgLy8gQnl0ZXMgOC0xNSAoaTY0IGxhbmUgMSwgbGl0dGxlLWVuZGlhbikgPSAweDAwMDAw MDAwMDAwMDA5MDAuCisrICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1l bS5idWZmZXIsIDAsIDE2KTsKKysgIHZhciBoZXggPSBBcnJheS5mcm9tKGJ1ZikubWFwKGIgPT4g Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwnMCcpKS5qb2luKCcnKTsKKysgIC8vIEV4cGVjdCBi eXRlcyA4LTkgPSAiMDAgMDkiIGFuZCBieXRlcyAxMC0xNSA9ICIwMCAwMCAwMCAwMCAwMCAwMCIu CisrICBhc3NlcnRFcShoZXguc2xpY2UoMTYsIDMyKSwgIjAwMDkwMDAwMDAwMDAwMDAiKTsKKysK KysgIGluc3QuZXhwb3J0cy5ydW5fcygxNik7CisrICAvLyBBZnRlciAyIGl0ZXJhdGlvbnMgb2Yg diA9IGV4dG11bF9sb3dfcyhjb25zdCgyLDMsNSw3KSwgdikgc3RhcnRpbmcgdj0oMiwzLDUsNyk6 CisrICAvLyAgIGl0ZXIgMTogaTY0eDIgbGFuZTAgPSAyKjIgPSA0LCBsYW5lMSA9IDMqMyA9IDku CisrICAvLyAgICAgICAgICAgdiBiZWNvbWVzIGkzMng0IFs0LCAwLCA5LCAwXSAoZWFjaCBpNjQg bGFuZSBvY2N1cGllcyB0d28gaTMyIGxhbmVzKS4KKysgIC8vICAgaXRlciAyOiBleHRtdWxfbG93 X3MgcmVhZHMgaTMyIGxhbmVzIDAsIDEgb2YgdiA9ICg0LCAwKS4KKysgIC8vICAgICAgICAgICBp NjQgbGFuZTAgPSAyKjQgPSA4OyBpNjQgbGFuZTEgPSAzKjAgPSAwLgorKyAgdmFyIGJ1ZjIgPSBu ZXcgVWludDhBcnJheShpbnN0LmV4cG9ydHMubWVtLmJ1ZmZlciwgMTYsIDE2KTsKKysgIHZhciBo ZXgyID0gQXJyYXkuZnJvbShidWYyKS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgy LCcwJykpLmpvaW4oJycpOworKyAgYXNzZXJ0RXEoaGV4MiwgIjA4MDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwIik7CisrCisrICBpbnN0LmV4cG9ydHMucnVuX2hpZ2hfdSgzMik7CisrICAv LyB2ID0gKDAsIDAsIDIsIDMpLiBleHRtdWxfaGlnaCBwaWNrcyBsYW5lcyAyIGFuZCAzLgorKyAg Ly8gICBpdGVyIDE6IGxhbmUyX3Byb2QgPSAyKjIgPSA0OyBsYW5lM19wcm9kID0gMyozID0gOS4g UmVzdWx0IHN0b3JlZCBhdCBieXRlcyAwLTcgKGxhbmUyX3Byb2QpIGFuZCA4LTE1IChsYW5lM19w cm9kKS4KKysgIC8vICAgaXRlciAyOiB2IG5vdyBoYXMgaTY0eDIgbGFuZTAgPSA0LCBsYW5lMSA9 IDksIGkuZS4gaTMyeDQgbGFuZXMgWzQsIDAsIDksIDBdLgorKyAgLy8gICAgICAgICAgIGV4dG11 bF9oaWdoX3UoY29uc3QoMCwwLDIsMyksIHYpIHJlYWRzIGxhbmVzIDIsIDMgb2YgYm90aDoKKysg IC8vICAgICAgICAgICBjb25zdCBsYW5lMiA9IDIsIGxhbmUzID0gMzsgdiBsYW5lMiA9IDksIGxh bmUzID0gMC4KKysgIC8vICAgICAgICAgICByZXN1bHQ6IGxhbmUyX3Byb2QgPSAyKjkgPSAxOCBh dCBieXRlcyAwLTc7IGxhbmUzX3Byb2QgPSAzKjAgPSAwIGF0IGJ5dGVzIDgtMTUuCisrICB2YXIg YnVmMyA9IG5ldyBVaW50OEFycmF5KGluc3QuZXhwb3J0cy5tZW0uYnVmZmVyLCAzMiwgMTYpOwor KyAgdmFyIGhleDMgPSBBcnJheS5mcm9tKGJ1ZjMpLm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBh ZFN0YXJ0KDIsJzAnKSkuam9pbignJyk7CisrICBhc3NlcnRFcShoZXgzLCAiMTIwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKysKKysgIGluc3QuZXhwb3J0cy5ydW5faGlnaF9zKDQ4 KTsKKysgIHZhciBidWY0ID0gbmV3IFVpbnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIs IDQ4LCAxNik7CisrICB2YXIgaGV4NCA9IEFycmF5LmZyb20oYnVmNCkubWFwKGIgPT4gYi50b1N0 cmluZygxNikucGFkU3RhcnQoMiwnMCcpKS5qb2luKCcnKTsKKysgIGFzc2VydEVxKGhleDQsICIx MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOworK30KKysKKytydW5BbmRDaGVjayhu ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kKSk7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10 ZXN0L3Rlc3RzL3dhc20vcHBjNjQtc2ltZC12ci1jbG9iYmVyLmpzIGIvanMvc3JjL2ppdC10ZXN0 L3Rlc3RzL3dhc20vcHBjNjQtc2ltZC12ci1jbG9iYmVyLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0 NAoraW5kZXggMDAwMDAwMDAwMDAwLi5kNWY3OWExODQwYTYKKy0tLSAvZGV2L251bGwKKysrKyBi L2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJlci5qcworQEAg LTAsMCArMSwxNzkgQEAKKysvLyB8aml0LXRlc3R8IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJsZWQo KQorKy8vCisrLy8gUmVncmVzc2lvbiB0ZXN0cyBmb3IgUFBDNjQgU0lNRCBoZWxwZXJzIHRoYXQg dXNlIFZSMS4uVlI1IGFzIHVuZGVjbGFyZWQKKysvLyBzY3JhdGNoIGFuZCBzaWxlbnRseSBjb3Jy dXB0IGxpdmUgd2FzbSB2MTI4IHZhbHVlcyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yCisrLy8gaGFz IHBsYWNlZCBpbiB0aG9zZSBWUnMuCisrLy8KKysvLyBCYWNrZ3JvdW5kOiBQUEM2NCBTaW1kMTI4 IGxpdmVzIGluIFZSMC4uVlIzMS4gVlIwIGlzIG5vbi1hbGxvY2F0YWJsZQorKy8vICg9IFNjcmF0 Y2hTaW1kMTI4UmVnKTsgVlIxLi5WUjMxIGFyZSBhbGxvY2F0YWJsZS4gVGhlIGhlbHBlcnMgYmVs b3cKKysvLyBoaXN0b3JpY2FsbHkgdXNlZCBWUjEuLlZSNSBhcyB1bmRlY2xhcmVkIHNjcmF0Y2g6 CisrLy8KKysvLyAgIG5lZ0ludDh4MTYsIG5lZ0ludDE2eDggICAgICAgICAgICAgICAgICAgIDog Y2xvYmJlciBWUjEgKGFsbCBDUFVzKQorKy8vICAgbmVnSW50MzJ4NCwgbmVnSW50NjR4MiAoUE9X RVI4IGZhbGxiYWNrKSAgOiBjbG9iYmVyIFZSMSAoUE9XRVI4IG9ubHkpCisrLy8gICBleHRBZGRQ YWlyd2lzZUludDh4MTYgIChzaWduZWQvdW5zaWduZWQpICA6IGNsb2JiZXIgVlIxLCBWUjIsIFZS MworKy8vICAgZXh0QWRkUGFpcndpc2VJbnQxNng4ICAoc2lnbmVkL3Vuc2lnbmVkKSAgOiBjbG9i YmVyIFZSMSwgVlIyLCBWUjMKKysvLyAgIHVuc2lnbmVkV2lkZW5IaWdoSW50MzJ4NCAgICAgICAg ICAgICAgICAgIDogY2xvYmJlciBWUjEKKysvLworKy8vIEVhY2ggdGVzdDoKKysvLyAgIC0gbG9h ZHMgYG5MaXZlYCAicHJlc2VydmUiIHYxMjggdmFsdWVzIGZyb20gbWVtb3J5IGF0IG9mZnNldHMg MTYuLjE2KzE2Km5MaXZlCisrLy8gICAtIGxvYWRzIE9ORSBhZGRpdGlvbmFsICJpbnB1dCIgdjEy OCA9IHJlcGVhdCgweDE4KSBhdCBvZmZzZXQgMTI4CisrLy8gICAtIGFwcGxpZXMgdGhlIHN1c3Bl Y3QgaGVscGVyIHRvIHRoZSBpbnB1dAorKy8vICAgLSBzdG9yZXMgdGhlIG5MaXZlIHByZXNlcnZl ZCB2YWx1ZXMgYmFjayB0byBtZW1vcnkgYXQgb2Zmc2V0cyAwLi4xNipuTGl2ZQorKy8vICAgLSBz dG9yZXMgdGhlIGhlbHBlciByZXN1bHQgYXQgb2Zmc2V0IDE2Km5MaXZlCisrLy8KKysvLyBXaXRo b3V0IHRoZSBmaXgsIG9uZSBvZiB0aGUgcHJlc2VydmVkIGxvY2FscyAod2hpY2hldmVyIHRoZSBh bGxvY2F0b3IKKysvLyBwbGFjZWQgaW4gdGhlIGNsb2JiZXJlZCBWUikgcmVhZHMgYmFjayBhcyB0 aGUgc3RhZ2VkIGlucHV0IHZhbHVlICgweDE4KQorKy8vIGluc3RlYWQgb2YgaXRzIG9yaWdpbmFs LiBXaXRoIHRoZSBmaXggKHRoZSBoZWxwZXIgdXNpbmcgU2NyYXRjaFNpbWQxMjhTY29wZQorKy8v IG9yIHByb3BlciBWUi1uYW1lc3BhY2UgZW1pdCksIGFsbCBwcmVzZXJ2ZWQgbG9jYWxzIHJldGFp biB0aGVpciB2YWx1ZXMuCisrCisrY29uc3QgUFJFU0VSVkVfUEFUVEVSTlMgPSBbMHhBMSwgMHhC MiwgMHhDMywgMHhENCwgMHhFNSwgMHhGNiwgMHgwNywgMHgyOV07CisrY29uc3QgSU5QVVRfQllU RSA9IDB4MTg7CisrCisrZnVuY3Rpb24gaW5pdChtZW0pIHsKKysgIC8vIFNsb3RzIGF0IG9mZnNl dCAxNiwgMzIsIC4uLiwgMTYrMTYqNyBob2xkIHRoZSBwcmVzZXJ2ZSBwYXR0ZXJucy4KKysgIGZv ciAobGV0IHNsb3QgPSAwOyBzbG90IDwgUFJFU0VSVkVfUEFUVEVSTlMubGVuZ3RoOyBzbG90Kysp IHsKKysgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgbWVtWzE2ICsg c2xvdCAqIDE2ICsgaV0gPSBQUkVTRVJWRV9QQVRURVJOU1tzbG90XTsKKysgICAgfQorKyAgfQor KyAgLy8gVGhlIGhlbHBlciBpbnB1dCBpcyBhdCBvZmZzZXQgMTI4ICg9IDE2ICsgMTYqNyArIDE2 ID0gMTQ0PyBubywgMTYgKyAxNio4ID0gMTQ0KS4KKysgIC8vIFVzZSBhIGZpeGVkIG9mZnNldCBQ QVNUIHRoZSBwcmVzZXJ2ZSBhcmVhLiBXaXRoIG5MaXZlIG1heCA3LCBwcmVzZXJ2ZSB1c2VzCisr ICAvLyAxNi4uKDE2KzE2KjctMSkgPSAxNi4uMTI3LiBJbnB1dCBnb2VzIGF0IDE0NCB0byBsZWF2 ZSBhIDE2LWJ5dGUgZ2FwLgorKyAgY29uc3QgSU5QVVRfT0ZGU0VUID0gMTQ0OworKyAgZm9yIChs ZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBtZW1bSU5QVVRfT0ZGU0VUICsgaV0gPSBJTlBVVF9CWVRF OworK30KKysKKytmdW5jdGlvbiByZXBlYXQoYnl0ZSkgeworKyAgY29uc3QgYSA9IG5ldyBBcnJh eSgxNik7CisrICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGFbaV0gPSBieXRlOworKyAg cmV0dXJuIGE7CisrfQorKworKy8vIFZlcmlmeSBuTGl2ZSBwcmVzZXJ2ZWQgc2xvdHMgbWF0Y2gg UFJFU0VSVkVfUEFUVEVSTlMgYXQgb3V0cHV0IG9mZnNldHMKKysvLyAwLi4xNipuTGl2ZSwgYW5k IHRoYXQgdGhlIHJlc3VsdCBzbG90IGF0IDE2Km5MaXZlIG1hdGNoZXMgYGV4cGVjdGVkUmVzdWx0 YC4KKytmdW5jdGlvbiBjaGVjayhvcE5hbWUsIG1lbSwgbkxpdmUsIGV4cGVjdGVkUmVzdWx0KSB7 CisrICBmb3IgKGxldCBzbG90ID0gMDsgc2xvdCA8IG5MaXZlOyBzbG90KyspIHsKKysgICAgZm9y IChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgY29uc3QgZ290ID0gbWVtW3Nsb3Qg KiAxNiArIGldOworKyAgICAgIGNvbnN0IHdhbnQgPSBQUkVTRVJWRV9QQVRURVJOU1tzbG90XTsK KysgICAgICBhc3NlcnRFcShnb3QsIHdhbnQsCisrICAgICAgICAgICAgICAgYCR7b3BOYW1lfTog bGl2ZSBzbG90ICR7c2xvdH0gYnl0ZSAke2l9OiBnb3QgMHgke2dvdC50b1N0cmluZygxNil9LCBl eHBlY3RlZCAweCR7d2FudC50b1N0cmluZygxNil9IChhbGxvY2F0b3ItY2xvYmJlcmVkIFZSPylg KTsKKysgICAgfQorKyAgfQorKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAg IGNvbnN0IGdvdCA9IG1lbVtuTGl2ZSAqIDE2ICsgaV07CisrICAgIGNvbnN0IHdhbnQgPSBleHBl Y3RlZFJlc3VsdFtpXTsKKysgICAgYXNzZXJ0RXEoZ290LCB3YW50LAorKyAgICAgICAgICAgICBg JHtvcE5hbWV9OiByZXN1bHQgYnl0ZSAke2l9OiBnb3QgMHgke2dvdC50b1N0cmluZygxNil9LCBl eHBlY3RlZCAweCR7d2FudC50b1N0cmluZygxNil9YCk7CisrICB9CisrfQorKworKy8vIEJ1aWxk IGEgd2FzbSBtb2R1bGUgdGhhdDoKKysvLyAgLSBsb2FkcyBgbkxpdmVgIHByZXNlcnZlIHYxMjgg bG9jYWxzIGZyb20gbWVtb3J5IGF0IG9mZnNldHMgMTYuLjE2Km5MaXZlCisrLy8gIC0gbG9hZHMg T05FIGlucHV0IHYxMjggZnJvbSBvZmZzZXQgMTQ0CisrLy8gIC0gYXBwbGllcyBgb3BgIHRvIHRo ZSBpbnB1dAorKy8vICAtIHN0b3JlcyBhbGwgYG5MaXZlICsgMWAgdjEyOCB2YWx1ZXMgYmFjayB0 byBtZW1vcnkgYXQgb2Zmc2V0cyAwLi4xNipuTGl2ZQorK2Z1bmN0aW9uIGJ1aWxkTW9kdWxlKG9w LCBuTGl2ZSkgeworKyAgY29uc3QgbG9jYWxEZWNscyA9IFtdOworKyAgY29uc3QgaW5pdExvYWRz ID0gW107CisrICBjb25zdCBmaW5hbFN0b3JlcyA9IFtdOworKyAgZm9yIChsZXQgaSA9IDA7IGkg PCBuTGl2ZTsgaSsrKSB7CisrICAgIGxvY2FsRGVjbHMucHVzaChgKGxvY2FsICR2JHtpfSB2MTI4 KWApOworKyAgICBpbml0TG9hZHMucHVzaChgKGxvY2FsLnNldCAkdiR7aX0gKHYxMjgubG9hZCAo aTMyLmNvbnN0ICR7MTYgKyBpICogMTZ9KSkpYCk7CisrICAgIGZpbmFsU3RvcmVzLnB1c2goYCh2 MTI4LnN0b3JlIChpMzIuY29uc3QgJHtpICogMTZ9KSAobG9jYWwuZ2V0ICR2JHtpfSkpYCk7Cisr ICB9CisrICAvLyBUaGUgaGVscGVyIGlucHV0ICsgcmVzdWx0LgorKyAgbG9jYWxEZWNscy5wdXNo KGAobG9jYWwgJGlucHV0IHYxMjgpYCk7CisrICBpbml0TG9hZHMucHVzaChgKGxvY2FsLnNldCAk aW5wdXQgKHYxMjgubG9hZCAoaTMyLmNvbnN0IDE0NCkpKWApOworKyAgZmluYWxTdG9yZXMucHVz aChgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAke25MaXZlICogMTZ9KSAobG9jYWwuZ2V0ICRpbnB1 dCkpYCk7CisrCisrICBjb25zdCB0ZXh0ID0gYAorKyAgICAobW9kdWxlCisrICAgICAgKG1lbW9y eSAoZXhwb3J0ICJtZW0iKSAxKQorKyAgICAgIChmdW5jIChleHBvcnQgInJ1biIpCisrICAgICAg ICAke2xvY2FsRGVjbHMuam9pbignXG4gICAgICAgICcpfQorKyAgICAgICAgJHtpbml0TG9hZHMu am9pbignXG4gICAgICAgICcpfQorKyAgICAgICAgKGxvY2FsLnNldCAkaW5wdXQgKCR7b3B9IChs b2NhbC5nZXQgJGlucHV0KSkpCisrICAgICAgICAke2ZpbmFsU3RvcmVzLmpvaW4oJ1xuICAgICAg ICAnKX0KKysgICAgICApCisrICAgIClgOworKyAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1 bGUod2FzbVRleHRUb0JpbmFyeSh0ZXh0KSk7CisrfQorKworK2Z1bmN0aW9uIHJ1bk9uZShvcE5h bWUsIG9wLCBuTGl2ZSwgZXhwZWN0ZWRSZXN1bHQpIHsKKysgIGNvbnN0IG1vZCA9IGJ1aWxkTW9k dWxlKG9wLCBuTGl2ZSk7CisrICBjb25zdCBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl KG1vZCk7CisrICBjb25zdCBtZW0gPSBuZXcgVWludDhBcnJheShpbnN0LmV4cG9ydHMubWVtLmJ1 ZmZlcik7CisrICAvLyBSdW4gbWFueSB0aW1lcyBzbyBCYXNlbGluZSArIElvbiBib3RoIHNlZSBp dC4KKysgIGZvciAobGV0IHdhcm0gPSAwOyB3YXJtIDwgNTA7IHdhcm0rKykgeworKyAgICBpbml0 KG1lbSk7CisrICAgIGluc3QuZXhwb3J0cy5ydW4oKTsKKysgICAgY2hlY2sob3BOYW1lLCBtZW0s IG5MaXZlLCBleHBlY3RlZFJlc3VsdCk7CisrICB9CisrfQorKworKy8vIC0tLS0gTmVnYXRlIGhl bHBlcnMgLS0tLQorKy8vCisrLy8gSW5wdXQgbGFuZSA9IDB4MTggPSAyNC4gbmVnKDI0KSA9IC0y NC4KKysvLyBpOHgxNi5uZWcgOiAtMjQgbW9kIDI1NiA9IDIzMiA9IDB4RTggcGVyIGJ5dGUuCisr Ly8gaTE2eDgubmVnIDogbGFuZSA9IDB4MTgxOCA9IDYxNjgsIG5lZyA9IC02MTY4IG1vZCA2NTUz NiA9IDB4RTdFOC4KKysvLyAgICAgICAgICAgICBNZW1vcnkgTEU6IHBlciBpMTYgbGFuZSBieXRl cyAweEU4IDB4RTcuCisrLy8gaTMyeDQubmVnIDogbGFuZSA9IDB4MTgxODE4MTggPSA0MDQyMzIy MTYsIG5lZyA9IDB4RTdFN0U3RTguCisrLy8gICAgICAgICAgICAgTWVtb3J5IExFOiBwZXIgaTMy IGxhbmUgYnl0ZXMgMHhFOCAweEU3IDB4RTcgMHhFNy4KKysvLyBpNjR4Mi5uZWcgOiBsYW5lID0g MHgxODE4MTgxODE4MTgxODE4LCBuZWcgPSAweEU3RTdFN0U3RTdFN0U3RTguCisrLy8gICAgICAg ICAgICAgTWVtb3J5IExFOiBwZXIgaTY0IGxhbmUgYnl0ZXMgMHhFOCAweEU3IDB4RTcgMHhFNyAw eEU3IDB4RTcgMHhFNyAweEU3LgorKworK3J1bk9uZSgiaTh4MTYubmVnIiwgImk4eDE2Lm5lZyIs IDQsIHJlcGVhdCgweEU4KSk7CisrcnVuT25lKCJpMTZ4OC5uZWciLCAiaTE2eDgubmVnIiwgNCwK KysgICAgICAgWzB4RTgsMHhFNywgMHhFOCwweEU3LCAweEU4LDB4RTcsIDB4RTgsMHhFNywKKysg ICAgICAgIDB4RTgsMHhFNywgMHhFOCwweEU3LCAweEU4LDB4RTcsIDB4RTgsMHhFN10pOworK3J1 bk9uZSgiaTMyeDQubmVnIiwgImkzMng0Lm5lZyIsIDQsCisrICAgICAgIFsweEU4LDB4RTcsMHhF NywweEU3LCAweEU4LDB4RTcsMHhFNywweEU3LAorKyAgICAgICAgMHhFOCwweEU3LDB4RTcsMHhF NywgMHhFOCwweEU3LDB4RTcsMHhFN10pOworK3J1bk9uZSgiaTY0eDIubmVnIiwgImk2NHgyLm5l ZyIsIDQsCisrICAgICAgIFsweEU4LDB4RTcsMHhFNywweEU3LDB4RTcsMHhFNywweEU3LDB4RTcs CisrICAgICAgICAweEU4LDB4RTcsMHhFNywweEU3LDB4RTcsMHhFNywweEU3LDB4RTddKTsKKysK KysvLyAtLS0tIGV4dEFkZFBhaXJ3aXNlIGhlbHBlcnMgLS0tLQorKy8vCisrLy8gZXh0YWRkX3Bh aXJ3aXNlIHJlYWRzIGFkamFjZW50IHBhaXJzIGFuZCB3aWRlbnMtdGhlbi1zdW1zIHRoZW0uCisr Ly8gSW5wdXQgPSByZXBlYXQoMHgxOCkgPSAyNC4KKysvLyBpMTZ4OC5leHRhZGRfcGFpcndpc2Vf aTh4MTZfcyA6IDI0ICsgMjQgPSA0OCA9IDB4MDAzMCBwZXIgaTE2IGxhbmUuCisrLy8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IExFOiAweDMwIDB4MDAgcGVyIGxhbmUg w5cgOCBsYW5lcy4KKysvLyBpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfdSA6IHNhbWUgc2lu Y2UgaW5wdXQgaXMgcG9zaXRpdmUuCisrLy8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3Mg OiBpMTYgbGFuZSA9IDB4MTgxOCA9IDYxNjgsIHN1bSA9IDEyMzM2ID0gMHgwMDAwMzAzMC4KKysv LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnkgTEU6IDB4MzAgMHgzMCAw eDAwIDB4MDAgcGVyIGxhbmUgw5cgNCBsYW5lcy4KKysvLyBpMzJ4NC5leHRhZGRfcGFpcndpc2Vf aTE2eDhfdSA6IHNhbWUgc2luY2UgaW5wdXQgaXMgcG9zaXRpdmUuCisrCisrcnVuT25lKCJpMTZ4 OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfcyIsCisrICAgICAgICJpMTZ4OC5leHRhZGRfcGFpcndp c2VfaTh4MTZfcyIsIDQsCisrICAgICAgIFsweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAw LCAweDMwLDB4MDAsCisrICAgICAgICAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAw eDMwLDB4MDBdKTsKKysKKytydW5PbmUoImkxNng4LmV4dGFkZF9wYWlyd2lzZV9pOHgxNl91IiwK KysgICAgICAgImkxNng4LmV4dGFkZF9wYWlyd2lzZV9pOHgxNl91IiwgNCwKKysgICAgICAgWzB4 MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDAsIDB4MzAsMHgwMCwKKysgICAgICAgIDB4MzAs MHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDAsIDB4MzAsMHgwMF0pOworKworK3J1bk9uZSgiaTMy eDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3MiLAorKyAgICAgICAiaTMyeDQuZXh0YWRkX3BhaXJ3 aXNlX2kxNng4X3MiLCA0LAorKyAgICAgICBbMHgzMCwweDMwLDB4MDAsMHgwMCwgMHgzMCwweDMw LDB4MDAsMHgwMCwKKysgICAgICAgIDB4MzAsMHgzMCwweDAwLDB4MDAsIDB4MzAsMHgzMCwweDAw LDB4MDBdKTsKKysKKytydW5PbmUoImkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF91IiwKKysg ICAgICAgImkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF91IiwgNCwKKysgICAgICAgWzB4MzAs MHgzMCwweDAwLDB4MDAsIDB4MzAsMHgzMCwweDAwLDB4MDAsCisrICAgICAgICAweDMwLDB4MzAs MHgwMCwweDAwLCAweDMwLDB4MzAsMHgwMCwweDAwXSk7CisrCisrLy8gLS0tLSB1bnNpZ25lZFdp ZGVuSGlnaEludDMyeDQgLS0tLQorKy8vCisrLy8gaTY0eDIuZXh0ZW5kX2hpZ2hfaTMyeDRfdTog dGFrZSB0aGUgaGlnaCB0d28gaTMyIGxhbmVzIChsYW5lcyAyIGFuZCAzKSBvZgorKy8vIHRoZSBp bnB1dCwgemVyby1leHRlbmQgZWFjaCB0byBpNjQsIGxheSB0aGVtIG91dCBhcyBpNjR4Mi4KKysv LyBJbnB1dCBsYW5lID0gMHgxODE4MTgxOCAocG9zaXRpdmUsID00MDQyMzIyMTYpLgorKy8vIFJl c3VsdDogdHdvIGk2NCBsYW5lcywgZWFjaCA9IDB4MDAwMDAwMDAxODE4MTgxOC4KKysvLyBNZW1v cnkgTEU6IHBlciBpNjQgbGFuZSBieXRlcyAweDE4IDB4MTggMHgxOCAweDE4IDB4MDAgMHgwMCAw eDAwIDB4MDAuCisrCisrcnVuT25lKCJpNjR4Mi5leHRlbmRfaGlnaF9pMzJ4NF91IiwKKysgICAg ICAgImk2NHgyLmV4dGVuZF9oaWdoX2kzMng0X3UiLCA0LAorKyAgICAgICBbMHgxOCwweDE4LDB4 MTgsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLAorKyAgICAgICAgMHgxOCwweDE4LDB4MTgsMHgx OCwweDAwLDB4MDAsMHgwMCwweDAwXSk7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL3dhc20vcHJvZmlsaW5nLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHJvZmls aW5nLmpzCitpbmRleCBmNDg3MmIwN2NkZTguLmNjZDk2OTBhMjYyZiAxMDA2NDQKKy0tLSBhL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcworKysrIGIvanMvc3JjL2ppdC10 ZXN0L3Rlc3RzL3dhc20vcHJvZmlsaW5nLmpzCitAQCAtMTE3LDYgKzExNywxMyBAQCBmb3IgKGxl dCB0eXBlIG9mIFsnZjMyJywgJ2Y2NCddKSB7CisgICAgICAgICBpZiAoZ2V0QnVpbGRDb25maWd1 cmF0aW9uKCJhcm02NCIpKSB7CisgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICB9Cisr ICAgICAgICAvLyBQUEM2NCBpbmxpbmVzIGNlaWwvZmxvb3IvdHJ1bmMgYXMgZnJpcC9mcmltL2Zy aXogKHNlZQorKyAgICAgICAgLy8gQXNzZW1ibGVyLXBwYzY0LmggSGFzUm91bmRJbnN0cnVjdGlv biksIHNvIG5vIGJ1aWx0aW4gdGh1bmsKKysgICAgICAgIC8vIGZyYW1lcyBleGlzdCB0byBwcm9m aWxlLiBgbmVhcmVzdGAgc3RpbGwgZ29lcyB0aHJvdWdoIHRoZQorKyAgICAgICAgLy8gdGh1bmsg YmVjYXVzZSBQUEM2NCdzIGZyaW4gaXMgbm90IElFRUUgcm91bmQtdG8tZXZlbi4KKysgICAgICAg IGlmIChnZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0IikgJiYgZnVuYyAhPT0gJ25lYXJlc3Qn KSB7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisgICAgICAgICB0ZXN0KGAo bW9kdWxlCisgICAgICAgICAgICAgKGZ1bmMgKGV4cG9ydCAiIikgKHBhcmFtICR7dHlwZX0pIChy ZXN1bHQgJHt0eXBlfSkKKyAgICAgICAgICAgICAgICAgbG9jYWwuZ2V0IDAKK2RpZmYgLS1naXQg YS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LWV4dHJhY3QtbGFuZS1j dHouanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LWV4dHJhY3Qt bGFuZS1jdHouanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmUy Y2Y1ZGVmNTQxZQorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dh c20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzCitAQCAtMCwwICsxLDQ5IEBACisr Ly8gfGppdC10ZXN0fCAtLXdhc20tY29tcGlsZXI9b3B0aW1pemluZzsgc2tpcC1pZjogIXdhc21T aW1kRW5hYmxlZCgpCisrLy8KKysvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgUFBDNjQgaTMyeDQu ZXh0cmFjdF9sYW5lIGNhbm9uaWNhbGl6YXRpb24gYnVnLgorKy8vCisrLy8gRXh0cmFjdExhbmVU b0dQUiBsZWF2ZXMgdGhlIGFkamFjZW50IGxhbmUgaW4gdGhlIGhpZ2ggMzIgYml0cyBvZiB0aGUg R1BSIGZvcgorKy8vIHRoZSB1bnNoaWZ0ZWQgbGFuZXMgKDAgYW5kIDIpLCBzbyBleHRyYWN0TGFu ZUludDMyeDQgbXVzdCBzaWduLWV4dGVuZCBpdHMgaTMyCisrLy8gcmVzdWx0IChhcyB0aGUgaTh4 MTYvaTE2eDggZXh0cmFjdHMgZG8pLiBXaXRob3V0IHRoYXQsIGEgY29uc3VtZXIgdGhhdCByZWFk cworKy8vIHRoZSBmdWxsIDY0LWJpdCByZWdpc3RlciBzZWVzIGdhcmJhZ2UgaW4gdGhlIGhpZ2gg aGFsZi4gVGhlIFBPV0VSOCBpMzIuY3R6CisrLy8gZW11bGF0aW9uIGlzIHN1Y2ggYSBjb25zdW1l cjogaXRzIDY0LWJpdCBuZWcvYW5kLiB6ZXJvLWNoZWNrIGRpc2FncmVlcyB3aXRoCisrLy8gaXRz IDMyLWJpdCBjbnRsencsIHNvIGN0eiBvZiBhIHplcm8gbGFuZSBzaXR0aW5nIG5leHQgdG8gYSBu b256ZXJvIG5laWdoYm91cgorKy8vIHJldHVybmVkIC0xIGluc3RlYWQgb2YgMzIuCisrLy8KKysv LyBUaGUgdmVjdG9yIGNvbWVzIGZyb20gbWVtb3J5IChydW50aW1lLCBub3QgY29uc3RhbnQtZm9s ZGFibGUpIGFuZCBpcyBwYXNzZWQKKysvLyB0aHJvdWdoIGEgU0lNRCBvcCBzbyB0aGUgZXh0cmFj dCBpcyBhIGdlbnVpbmUgdmVjdG9yLXJlZ2lzdGVyIGV4dHJhY3QuIFJ1bgorKy8vIHVuZGVyIE1P Wl9QUEM2NF9GT1JDRV9QT1dFUjg9MSB0byBleGVyY2lzZSB0aGUgZW11bGF0ZWQgY3R6IHBhdGg7 IGluIGV2ZXJ5CisrLy8gb3RoZXIgbW9kZSB0aGlzIGlzIHNpbXBseSBhIGNvcnJlY3RuZXNzIGNo ZWNrLgorKworK2NvbnN0IGlucyA9IHdhc21FdmFsVGV4dChgKG1vZHVsZQorKyAgKG1lbW9yeSAo ZXhwb3J0ICJtZW0iKSAxKQorKyAgKGZ1bmMgJHYgKHJlc3VsdCB2MTI4KQorKyAgICA7OyBpZGVu dGl0eSBBTkQga2VlcHMgdGhlIHZhbHVlIGluIGEgdmVjdG9yIHJlZ2lzdGVyIGFuZCBmb3JjZXMg YSByZWFsCisrICAgIDs7IGV4dHJhY3RMYW5lSW50MzJ4NCByYXRoZXIgdGhhbiBhbiBleHRyYWN0 LW9mLWxvYWQgZm9sZC4KKysgICAgKHYxMjguYW5kICh2MTI4LmxvYWQgKGkzMi5jb25zdCAwKSkg KHYxMjguY29uc3QgaTMyeDQgLTEgLTEgLTEgLTEpKSkKKysgIChmdW5jIChleHBvcnQgImN0ejAi KSAocmVzdWx0IGkzMikgKGkzMi5jdHogKGkzMng0LmV4dHJhY3RfbGFuZSAwIChjYWxsICR2KSkp KQorKyAgKGZ1bmMgKGV4cG9ydCAiY3R6MSIpIChyZXN1bHQgaTMyKSAoaTMyLmN0eiAoaTMyeDQu ZXh0cmFjdF9sYW5lIDEgKGNhbGwgJHYpKSkpCisrICAoZnVuYyAoZXhwb3J0ICJjdHoyIikgKHJl c3VsdCBpMzIpIChpMzIuY3R6IChpMzJ4NC5leHRyYWN0X2xhbmUgMiAoY2FsbCAkdikpKSkKKysg IChmdW5jIChleHBvcnQgImN0ejMiKSAocmVzdWx0IGkzMikgKGkzMi5jdHogKGkzMng0LmV4dHJh Y3RfbGFuZSAzIChjYWxsICR2KSkpKQorKyAgKGZ1bmMgKGV4cG9ydCAic2V4dDAiKSAocmVzdWx0 IGk2NCkgKGk2NC5leHRlbmRfaTMyX3MgKGkzMng0LmV4dHJhY3RfbGFuZSAwIChjYWxsICR2KSkp KQorKyAgKGZ1bmMgKGV4cG9ydCAic2V4dDIiKSAocmVzdWx0IGk2NCkgKGk2NC5leHRlbmRfaTMy X3MgKGkzMng0LmV4dHJhY3RfbGFuZSAyIChjYWxsICR2KSkpKQorKylgKS5leHBvcnRzOworKwor K2NvbnN0IG1lbSA9IG5ldyBJbnQzMkFycmF5KGlucy5tZW0uYnVmZmVyKTsKKytmdW5jdGlvbiBz ZXRMYW5lcyhhLCBiLCBjLCBkKSB7IG1lbVswXSA9IGE7IG1lbVsxXSA9IGI7IG1lbVsyXSA9IGM7 IG1lbVszXSA9IGQ7IH0KKysKKysvLyBFYWNoIGxhbmUgPSAwIHN1cnJvdW5kZWQgYnkgbm9uemVy byBuZWlnaGJvdXJzOiBjdHogbXVzdCBiZSAzMiwgbmV2ZXIgLTEuCisrc2V0TGFuZXMoMCwgLTEs IC0xLCAtMSk7IGFzc2VydEVxKGlucy5jdHowKCksIDMyKTsKKytzZXRMYW5lcygtMSwgMCwgLTEs IC0xKTsgYXNzZXJ0RXEoaW5zLmN0ejEoKSwgMzIpOworK3NldExhbmVzKC0xLCAtMSwgMCwgLTEp OyBhc3NlcnRFcShpbnMuY3R6MigpLCAzMik7Cisrc2V0TGFuZXMoLTEsIC0xLCAtMSwgMCk7IGFz c2VydEVxKGlucy5jdHozKCksIDMyKTsKKysKKysvLyBOb256ZXJvIGxhbmVzOiBjdHogb2YgdGhl IGxhbmUgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgbmVpZ2hib3Vycy4KKytzZXRMYW5lcygweDEwLCAt MSwgMHgxMDAwMDAsIC0xKTsKKythc3NlcnRFcShpbnMuY3R6MCgpLCA0KTsKKythc3NlcnRFcShp bnMuY3R6MigpLCAyMCk7CisrCisrLy8gQSBuZWdhdGl2ZSBsYW5lIG11c3Qgc2lnbi1leHRlbmQg Y29ycmVjdGx5ICh0aGUgY2Fub25pY2FsaXphdGlvbiBpcyBleHRzdykuCisrc2V0TGFuZXMoLTIs IDcsIC0zLCA3KTsKKythc3NlcnRFcShpbnMuc2V4dDAoKSwgLTJuKTsKKythc3NlcnRFcShpbnMu c2V4dDIoKSwgLTNuKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9y ZWdyZXNzLXBwYzY0LXNlbGVjdC1jb25kaXRpb24uanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMv d2FzbS9yZWdyZXNzLXBwYzY0LXNlbGVjdC1jb25kaXRpb24uanMKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmMzODk3NWRjZTg1OQorLS0tIC9kZXYvbnVsbAorKysr IGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0 aW9uLmpzCitAQCAtMCwwICsxLDMwIEBACisrLy8gfGppdC10ZXN0fCAtLXdhc20tY29tcGlsZXI9 b3B0aW1pemluZzsgc2tpcC1pZjogIXdhc21TaW1kRW5hYmxlZCgpCisrLy8KKysvLyBSZWdyZXNz aW9uIHRlc3QgZm9yIGEgUFBDNjQgd2FzbSBJb24gbWlzY29tcGlsZSBvZiBgc2VsZWN0YCB3aXRo IGEgMzItYml0CisrLy8gY29uZGl0aW9uLiB2aXNpdFdhc21TZWxlY3QgdGVzdGVkIHRoZSBpMzIg Y29uZGl0aW9uIHdpdGggYSA2NC1iaXQgY29tcGFyZQorKy8vIChjbXBkaSAvIGJyYW5jaFRlc3RQ dHIpLiBXaGVuIHRoZSBjb25kaXRpb24gd2FzIHplcm8gaW4gaXRzIGxvdyAzMiBiaXRzIGJ1dAor Ky8vIGhhZCBnYXJiYWdlIGluIHRoZSBoaWdoIDMyIGJpdHMgKGFzIGNhbiBoYXBwZW4gdW5kZXIg cmVnaXN0ZXIgcHJlc3N1cmUpLCB0aGUKKysvLyA2NC1iaXQgdGVzdCByZWFkIGl0IGFzIG5vbi16 ZXJvIGFuZCBzZWxlY3QgcmV0dXJuZWQgdGhlIHdyb25nIG9wZXJhbmQuCisrLy8KKysvLyBIZXJl IHRoZSBjb25kaXRpb24gYCR4M2AgaXMgMDsgYHNlbGVjdCgkeDgsIC05NTI4MDk4MjgsICR4Mylg IG11c3QgdGhlcmVmb3JlCisrLy8gcmV0dXJuIC05NTI4MDk4MjguIFRoZSBzdXJyb3VuZGluZyBT SU1EIHNodWZmbGUvYml0c2VsZWN0L3N3aXp6bGUgY2hhaW4KKysvLyBzdXBwbGllcyB0aGUgdjEy OCByZWdpc3RlciBwcmVzc3VyZSB0aGF0IGV4cG9zZWQgdGhlIGJ1Zy4KKysKKytjb25zdCB3YXQg PSBgKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJmIikgKHJlc3VsdCBpNjQpCisrICAobG9jYWwgJHgz IGkzMikobG9jYWwgJHg3IGkzMikobG9jYWwgJHg4IGkzMikKKysgIChsb2NhbCAkdzAgdjEyOCko bG9jYWwgJHcxIHYxMjgpKGxvY2FsICR3MiB2MTI4KShsb2NhbCAkdzMgdjEyOCkKKysgIChsb2Nh bCAkdzQgdjEyOCkobG9jYWwgJHc1IHYxMjgpKGxvY2FsICR3NiB2MTI4KShsb2NhbCAkdzcgdjEy OCkKKysgIChsb2NhbC5zZXQgJHcwICh2MTI4LmNvbnN0IGkzMng0IDE3MDg0NDM0NTQgMTUzMjIx ODY5NSAyMTA3NDIzNjEwIC0xMjY1Nzc1MDA1KSkKKysgIChsb2NhbC5zZXQgJHcyICh2MTI4LmNv bnN0IGkzMng0IC03NTIzMTIzNTUgLTYyNTUzMDU3MiAtODQ0NjY2NTAwIDgzMjAzNjQwOCkpCisr ICAobG9jYWwuc2V0ICR3NyAodjEyOC5jb25zdCBpMzJ4NCAxMTUwMDM0OTYgLTk3MDQ0MTExNyAt NDMyMjU5MzUgMTg3NDEyODIwNCkpCisrICAobG9jYWwuc2V0ICR3NCAoaTh4MTYuc2h1ZmZsZSAx NSAxOCAxMyAyIDYgMjIgMjAgOCAxOSAxMCAxMiA4IDExIDUgNiAyOCAobG9jYWwuZ2V0ICR3Nykg KGxvY2FsLmdldCAkdzMpKSkKKysgIChsb2NhbC5zZXQgJHc2ICh2MTI4LmJpdHNlbGVjdCAobG9j YWwuZ2V0ICR3NCkgKGxvY2FsLmdldCAkdzApIChsb2NhbC5nZXQgJHc3KSkpCisrICAobG9jYWwu c2V0ICR3MSAodjEyOC5jb25zdCBpMzJ4NCAtMTYzNTAyNTI2NCAtNjI5Nzg0MTMyIDE1MTc4Njk4 NTIgMTY1MTc3MTgyNSkpCisrICAobG9jYWwuc2V0ICR3NyAodjEyOC5iaXRzZWxlY3QgKGxvY2Fs LmdldCAkdzYpIChsb2NhbC5nZXQgJHcyKSAobG9jYWwuZ2V0ICR3MikpKQorKyAgKGxvY2FsLnNl dCAkdzYgKGk4eDE2LnN3aXp6bGUgKGxvY2FsLmdldCAkdzEpIChsb2NhbC5nZXQgJHc3KSkpCisr ICAobG9jYWwuc2V0ICR4MyAoaTMyeDQuZXh0cmFjdF9sYW5lIDIgKGxvY2FsLmdldCAkdzYpKSkK KysgIChsb2NhbC5zZXQgJHg3IChzZWxlY3QgKGxvY2FsLmdldCAkeDgpIChpMzIuY29uc3QgLTk1 MjgwOTgyOCkgKGxvY2FsLmdldCAkeDMpKSkKKysgIChpNjQuZXh0ZW5kX2kzMl9zIChsb2NhbC5n ZXQgJHg3KSkpKWA7CisrCisrY29uc3QgaW5zID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5l dyBXZWJBc3NlbWJseS5Nb2R1bGUod2FzbVRleHRUb0JpbmFyeSh3YXQpKSk7CisrYXNzZXJ0RXEo aW5zLmV4cG9ydHMuZigpLCAtOTUyODA5ODI4bik7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10 ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpzIGIvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC10cmFwLWV4aXQtc2ltZC1zYXZl LmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi40ODg3ZjhkZjEx OWMKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jl c3MtcHBjNjQtdHJhcC1leGl0LXNpbWQtc2F2ZS5qcworQEAgLTAsMCArMSw2NCBAQAorKy8vIHxq aXQtdGVzdHwgZXhpdHN0YXR1czogMDsgc2tpcC1pZjogIXdhc21TaW1kRW5hYmxlZCgpCisrLy8K KysvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBQUEM2NCB3YXNtIHRyYXAgZXhpdCBsb3Npbmcg bGl2ZSB2MTI4IHN0YXRlLgorKy8vCisrLy8gT24gUFBDNjQsIGRvdWJsZXMgbGl2ZSBpbiB0aGUg RlBScyAoVlNSMC0zMSkgd2hpbGUgd2FzbSB2MTI4IHZhbHVlcyBsaXZlIGluCisrLy8gdGhlIFZS cyAoVlNSMzItNjMpIC0tIGRpc2pvaW50IHBoeXNpY2FsIHBvb2xzLiBUaGUgdHJhcCBleGl0J3MK KysvLyBSZWdzVG9QcmVzZXJ2ZSB1c2VkIEFsbERvdWJsZU1hc2sgb25seSwgc28gYSB0cmFwIGZp cmluZyB3aGlsZSBhIHYxMjggd2FzCisrLy8gbGl2ZSByZXN1bWVkIHdpdGggd2hhdGV2ZXIgdGhl IEMrKyBpbnRlcnJ1cHQgcGF0aCdzIGxpYmMgbGVmdCBpbiB0aGUgVlJzCisrLy8gKGdsaWJjJ3Mg bWlzYWxpZ25lZCB2ZWN0b3IgbWVtY3B5IGxlYXZlcyBsdnNsIGFsaWdubWVudC1jb250cm9sIGJ5 dGUKKysvLyBwYXR0ZXJucyB0aGVyZSkuIEludGVycnVwdCBjaGVja3MgZmlyZSB2aWEgdHJhcHMg YXQgbG9vcCBiYWNrLWVkZ2VzLCB3aGVyZQorKy8vIGEgbG9vcC1jYXJyaWVkIHYxMjggYWNjdW11 bGF0b3IgaXMgZXhhY3RseSB3aGF0IGlzIGxpdmUuCisrLy8KKysvLyBUaGUgbG9vcCBiZWxvdyBr ZWVwcyBhbiBpMzJ4NCBhY2N1bXVsYXRvciBsaXZlIGFjcm9zcyBldmVyeSBiYWNrLWVkZ2Ugd2hp bGUKKysvLyBpbnRlcnJ1cHRzIGZpcmUgcmVwZWF0ZWRseTsgdGhlIGNhbGxiYWNrIGRvZXMgbGFy Z2UgbWlzYWxpZ25lZCBjb3BpZXMgdG8KKysvLyBwdWxsIGxpYmMncyB2ZWN0b3IgbWVtY3B5IHRo cm91Z2ggdGhlIFZScy4gT24gYW4gdW5maXhlZCBidWlsZCAocmVhbAorKy8vIHNpbGljb247IHRo ZSBzaW11bGF0b3IncyBWUnMgYXJlIGluc3VsYXRlZCBmcm9tIG5hdGl2ZSBsaWJjKSB0aGUKKysv LyBhY2N1bXVsYXRvciBjb21lcyBiYWNrIGhvbGRpbmcgZ2FyYmFnZSBhbmQgdGhlIGZpbmFsIGxh bmUgdmFsdWVzIGFyZSB3cm9uZy4KKysKKytjb25zdCBpbnMgPSB3YXNtRXZhbFRleHQoYChtb2R1 bGUKKysgIChmdW5jIChleHBvcnQgInJ1biIpIChwYXJhbSAkbiBpMzIpIChyZXN1bHQgaTMyKQor KyAgICAobG9jYWwgJGFjYyB2MTI4KQorKyAgICAoYmxvY2sgJGRvbmUKKysgICAgICAobG9vcCAk dG9wCisrICAgICAgICAoYnJfaWYgJGRvbmUgKGkzMi5lcXogKGxvY2FsLmdldCAkbikpKQorKyAg ICAgICAgKGxvY2FsLnNldCAkYWNjIChpMzJ4NC5hZGQgKGxvY2FsLmdldCAkYWNjKSAodjEyOC5j b25zdCBpMzJ4NCAxIDIgMyA0KSkpCisrICAgICAgICAobG9jYWwuc2V0ICRuIChpMzIuc3ViIChs b2NhbC5nZXQgJG4pIChpMzIuY29uc3QgMSkpKQorKyAgICAgICAgKGJyICR0b3ApKSkKKysgICAg OzsgRm9sZCB0aGUgZm91ciBsYW5lcyBzbyBhbnkgbGFuZSBjb3JydXB0aW9uIHNob3dzIHVwLgor KyAgICAoaTMyLnhvcgorKyAgICAgIChpMzIueG9yIChpMzJ4NC5leHRyYWN0X2xhbmUgMCAobG9j YWwuZ2V0ICRhY2MpKQorKyAgICAgICAgICAgICAgIChpMzIucm90bCAoaTMyeDQuZXh0cmFjdF9s YW5lIDEgKGxvY2FsLmdldCAkYWNjKSkgKGkzMi5jb25zdCA4KSkpCisrICAgICAgKGkzMi54b3Ig KGkzMi5yb3RsIChpMzJ4NC5leHRyYWN0X2xhbmUgMiAobG9jYWwuZ2V0ICRhY2MpKSAoaTMyLmNv bnN0IDE2KSkKKysgICAgICAgICAgICAgICAoaTMyLnJvdGwgKGkzMng0LmV4dHJhY3RfbGFuZSAz IChsb2NhbC5nZXQgJGFjYykpIChpMzIuY29uc3QgMjQpKSkpKQorKylgKS5leHBvcnRzOworKwor Ky8vIE1pc2FsaWduZWQgYmlnIGNvcGllcyBkcml2ZSBnbGliYydzIGx2c2wvdnBlcm0gbWVtY3B5 IHBhdGggb24gUFBDLgorK2NvbnN0IGJpZyA9IG5ldyBVaW50OEFycmF5KDEgPDwgMjApOworK2Nv bnN0IHNyYyA9IGJpZy5zdWJhcnJheSgxLCAoMSA8PCAxOSkgKyAxKTsKKytjb25zdCBkc3QgPSBu ZXcgVWludDhBcnJheSgxIDw8IDE5KTsKKysKKytsZXQgZmlyZXMgPSAwOworK2Z1bmN0aW9uIG9u SW50ZXJydXB0KCkgeworKyAgZmlyZXMrKzsKKysgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsr KSB7CisrICAgIGRzdC5zZXQoc3JjKTsKKysgIH0KKysgIGlmIChmaXJlcyA8IDI1KSB7CisrICAg IHRpbWVvdXQoMC4wMiwgb25JbnRlcnJ1cHQpOworKyAgfQorKyAgcmV0dXJuIHRydWU7CisrfQor KworK2Z1bmN0aW9uIGV4cGVjdGVkKG4pIHsKKysgIGNvbnN0IHIgPSAoeCwgaykgPT4gKCh4IDw8 IGspIHwgKHggPj4+ICgzMiAtIGspKSkgfCAwOworKyAgY29uc3QgbCA9IFtuIHwgMCwgKDIgKiBu KSB8IDAsICgzICogbikgfCAwLCAoNCAqIG4pIHwgMF07CisrICByZXR1cm4gKChsWzBdIF4gcihs WzFdLCA4KSkgXiAocihsWzJdLCAxNikgXiByKGxbM10sIDI0KSkpIHwgMDsKKyt9CisrCisrY29u c3QgTiA9IDEgPDwgMjY7CisrdGltZW91dCgwLjAyLCBvbkludGVycnVwdCk7CisrY29uc3QgZ290 ID0gaW5zLnJ1bihOKTsKKysvLyBDYW5jZWwgYW55IHBlbmRpbmcgd2F0Y2hkb2cgYmVmb3JlIGZp bmlzaGluZy4KKyt0aW1lb3V0KC0xKTsKKythc3NlcnRFcShnb3QsIGV4cGVjdGVkKE4pKTsKK2Rp ZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzL2J1Zy1wcGM2NC1z aW1kLXJlZHVjZS1hbmQtYnJhbmNoLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVn cmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC5qcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uYjdlYzBkOTU0OGJiCistLS0gL2Rldi9udWxsCisr KysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzL2J1Zy1wcGM2NC1zaW1kLXJl ZHVjZS1hbmQtYnJhbmNoLmpzCitAQCAtMCwwICsxLDcgQEAKKysvLyBSZWdyZXNzaW9uIHRlc3Qg Zm9yIGEgUFBDNjQtc3BlY2lmaWMgd2FzbSBJb24gY3Jhc2ggaW4KKysvLyBDb2RlR2VuZXJhdG9y Ojp2aXNpdFdhc21SZWR1Y2VBbmRCcmFuY2hTaW1kMTI4IOKAlCBpdCBjYWxsZWQKKysvLyBMQmxv Y2s6OmxhYmVsKCkgZGlyZWN0bHkgb24gdGhlIGJyYW5jaCB0YXJnZXRzIHdpdGhvdXQgZ29pbmcg dGhyb3VnaAorKy8vIHNraXBUcml2aWFsQmxvY2tzKCksIHNvIGEgdHJpdmlhbCBnb3RvLW9ubHkg c3VjY2Vzc29yIHRyaXBwZWQKKysvLyBMQmxvY2s6OmxhYmVsKCkncyAhaXNUcml2aWFsKCkgYXNz ZXJ0aW9uLiBSZWR1Y2VkIGZyb20gZ3JhbnRrb3QuY29tL3BvbHkKKysvLyB3aXRoIHdhc20tcmVk dWNlLiBUcmlnZ2VycyB0aGUgYnVnIHVuZGVyIC0td2FzbS1jb21waWxlcj1vcHRpbWl6aW5nLgor K25ldyBXZWJBc3NlbWJseS5Nb2R1bGUob3MuZmlsZS5yZWFkRmlsZShzY3JpcHRkaXIgKyAiL2J1 Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLndhc20iLCAiYmluYXJ5IikpOworZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvYnVnMTk0NjYxOC5qcyBiL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvYnVnMTk0NjYxOC5qcworaW5kZXggY2MwMmQw ZDhkZmQ3Li5mY2YzYTJhMzVlODIgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMv d2FzbS9zaW1kL2J1ZzE5NDY2MTguanMKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3NpbWQvYnVnMTk0NjYxOC5qcworQEAgLTQ4LDcgKzQ4LDEyIEBAIGZvciAobGV0IG9wIG9mIFsi ZjMyeDQucmVsYXhlZF9taW4iLCAiZjMyeDQucmVsYXhlZF9tYXgiLAorICAgICAvLyBiYXNlbGlu ZS4KKyAgICAgbGV0IHJlc3VsdDEgPSBpLmV4cG9ydHMudmFyaWFudDEoKTsKKyAgICAgbGV0IHJl c3VsdDIgPSBpLmV4cG9ydHMudmFyaWFudDIoKTsKKy0gICAgaWYgKGdldEJ1aWxkQ29uZmlndXJh dGlvbigiYXJtNjQiKSkgeworKyAgICBpZiAoZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2NCIp KSB7CisrICAgICAgLy8gUFBDNjQ6IHh2bWluc3AveHZtYXhzcCBhbHdheXMgcmV0dXJucyB0aGUg bm9uLU5hTiBvcGVyYW5kLAorKyAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygb3BlcmFuZCBvcmRlci4g Qm90aCB2YXJpYW50cyBnaXZlIHplcm8gKG5vbi1OYU4pLgorKyAgICAgIGFzc2VydEVxKHJlc3Vs dDEsIDApOworKyAgICAgIGFzc2VydEVxKHJlc3VsdDIsIDApOworKyAgICB9IGVsc2UgaWYgKGdl dEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtNjQiKSkgeworICAgICAgIC8vIFRoZSByZWxheGVkX21p bi9tYXggb3BlcmF0aW9uIGFwcGVhcnMgdG8gcHJvcGFnYXRlIE5hTnMgc3ltbWV0cmljYWxseQor ICAgICAgIC8vIGZyb20gZWl0aGVyIGFyZworICAgICAgIGFzc2VydEVxKHJlc3VsdDEsIDY1NTM1 KTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFs eXNpcy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvaW9uLWFuYWx5c2lzLmpz CitpbmRleCBkMTJhZjZlNmZiYzkuLjMzNWY4MzFmZjZhOSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9q aXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvaW9uLWFuYWx5c2lzLmpzCisrKysgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFseXNpcy5qcworQEAgLTEyLDYgKzEyLDcgQEAK KyAvLyBnZW5lcmF0ZXMgdGhlIGV4cGVjdGVkIHJlc3VsdC4KKyAKKyB2YXIgaXNBcm02NCA9IGdl dEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtNjQiKTsKKyt2YXIgaXNQUEM2NCA9IGdldEJ1aWxkQ29u ZmlndXJhdGlvbigicHBjNjQiKTsKKyAKKyAvLyAzMi1iaXQgcGVybXV0YXRpb24gdGhhdCBpcyBu b3QgYSByb3RhdGlvbi4KKyBsZXQgcGVybTMyeDRfcGF0dGVybiA9IFs0LCA1LCA2LCA3LCAxMiwg MTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExLCAwLCAxLCAyLCAzXTsKK0BAIC04NDYsNyArODQ3LDcg QEAgZm9yICggbGV0IFt0eTEyOCxzaXplXSBvZiBbWydpOHgxNicsMV0sIFsnaTE2eDgnLDJdLCBb J2kzMng0Jyw0XV0gKSB7CisgICAgIGxldCBvcHMgPSB7IGFsbF90cnVlOiBhbGxUcnVlLCBhbnlf dHJ1ZTogYW55VHJ1ZSwgYml0bWFzayB9OworIAorICAgICBmb3IgKCBsZXQgb3Agb2YgWydhbnlf dHJ1ZScsICdhbGxfdHJ1ZScsICdiaXRtYXNrJ10gKSB7CistICAgICAgICBsZXQgZm9sZGVkID0g b3AgIT0gJ2JpdG1hc2snIHx8IChzaXplID09IDIgJiYgIWlzQXJtNjQpOworKyAgICAgICAgbGV0 IGZvbGRlZCA9IG9wICE9ICdiaXRtYXNrJyB8fCAoc2l6ZSA9PSAyICYmICFpc0FybTY0ICYmICFp c1BQQzY0KTsKKyAgICAgICAgIGxldCBvcGVyYXRpb24gPSBvcCA9PSAnYW55X3RydWUnID8gJ3Yx MjguYW55X3RydWUnIDogYCR7dHkxMjh9LiR7b3B9YDsKKyAgICAgICAgIGxldCBwb3NpdGl2ZSA9 CisgICAgICAgICAgICAgd2FzbUNvbXBpbGUoCitAQCAtODk4LDEyICs4OTksMTIgQEAgZm9yICgg bGV0IFt0eTEyOCxzaXplXSBvZiBbWydpOHgxNicsMV0sIFsnaTE2eDgnLDJdLCBbJ2kzMng0Jyw0 XV0gKSB7CisgCisgLy8gQml0c2VsZWN0IHdpdGggY29uc3RhbnQgbWFzayBmb2xkZWQgaW50byBz aHVmZmxlIG9wZXJhdGlvbgorIAorLWlmICghaXNBcm02NCkgeworK2lmICghaXNBcm02NCAmJiAh aXNQUEM2NCkgeworICAgd2FzbUNvbXBpbGUoYAorICAgKG1vZHVsZSAoZnVuYyAocGFyYW0gdjEy OCkgKHBhcmFtIHYxMjgpIChyZXN1bHQgdjEyOCkKKyAgICAgKHYxMjguYml0c2VsZWN0IChsb2Nh bC5nZXQgMCkgKGxvY2FsLmdldCAxKSAodjEyOC5jb25zdCBpOHgxNiAwIC0xIC0xIDAgMCAwIDAg MCAtMSAtMSAtMSAtMSAtMSAtMSAwIDApKSkpCisgICBgKTsKKy0gICAgICBhc3NlcnRFcSh3YXNt U2ltZEFuYWx5c2lzKCksICJzaHVmZmxlIC0+IGJsZW5kIDh4MTYiKTsgIAorKyAgICAgIGFzc2Vy dEVxKHdhc21TaW1kQW5hbHlzaXMoKSwgInNodWZmbGUgLT4gYmxlbmQgOHgxNiIpOworIH0KKyAK KyAvLyBMaWJyYXJ5CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9Bc3NlbWJsZXIuaCBiL2pzL3Ny Yy9qaXQvQXNzZW1ibGVyLmgKK2luZGV4IDk3YzJlMzM3NjI1Yi4uY2I3MjQ0Nzc2NjA1IDEwMDY0 NAorLS0tIGEvanMvc3JjL2ppdC9Bc3NlbWJsZXIuaAorKysrIGIvanMvc3JjL2ppdC9Bc3NlbWJs ZXIuaAorQEAgLTE5LDYgKzE5LDggQEAKKyAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9Bc3NlbWJs ZXItbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGlu Y2x1ZGUgImppdC9yaXNjdjY0L0Fzc2VtYmxlci1yaXNjdjY0LmgiCisrI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQu aCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQorICMgIGluY2x1ZGUgImppdC93 YXNtMzIvQXNzZW1ibGVyLXdhc20zMi5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05F KQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQmFzZWxpbmVJQy5jcHAgYi9qcy9zcmMvaml0L0Jh c2VsaW5lSUMuY3BwCitpbmRleCBjMzU2NTM4YTAyNGUuLjVhYjYzMTgzOGYwZSAxMDA2NDQKKy0t LSBhL2pzL3NyYy9qaXQvQmFzZWxpbmVJQy5jcHAKKysrKyBiL2pzL3NyYy9qaXQvQmFzZWxpbmVJ Qy5jcHAKK0BAIC0xMjAsNiArMTIwLDggQEAgQWxsb2NhdGFibGVHZW5lcmFsUmVnaXN0ZXJTZXQg QmFzZWxpbmVJQ0F2YWlsYWJsZUdlbmVyYWxSZWdzKHNpemVfdCBudW1JbnB1dHMpIHsKKyAgIE1P Wl9BU1NFUlQoIXJlZ3MuaGFzKFBzZXVkb1N0YWNrUG9pbnRlcikpOworICAgTU9aX0FTU0VSVCgh cmVncy5oYXMoUmVhbFN0YWNrUG9pbnRlcikpOworICAgTU9aX0FTU0VSVCghcmVncy5oYXMoSUNU YWlsQ2FsbFJlZykpOworKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIHJlZ3Mu dGFrZShJQ1RhaWxDYWxsUmVnKTsKKyAjZW5kaWYKKyAgIHJlZ3MudGFrZShJQ1N0dWJSZWcpOwor IAorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNwcCBiL2pzL3NyYy9q aXQvQ2FjaGVJUkNvbXBpbGVyLmNwcAoraW5kZXggNGViOTUyZTQ5N2UzLi5lZTQ4ODg0OTUxMDMg MTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0NhY2hlSVJDb21waWxlci5jcHAKKysrKyBiL2pzL3Ny Yy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNwcAorQEAgLTEwMzAyLDYgKzEwMzAyLDE0IEBAIGJvb2wg Q2FjaGVJUkNvbXBpbGVyOjplbWl0Q29uY2F0U3RyaW5nc1Jlc3VsdChTdHJpbmdPcGVyYW5kSWQg bGhzSWQsCisgICAgIGxpdmVSZWdzLmFkZChJQ1RhaWxDYWxsUmVnKTsKKyAjZW5kaWYKKyAgICAg bGl2ZVJlZ3MudGFrZVVuY2hlY2tlZChvdXRwdXQudmFsdWVSZWcoKSk7CisrCisrI2lmZGVmIEpT X0NPREVHRU5fUFBDNjQKKysgICAgLy8gT24gUFBDNjQsIExSIGlzIGFuIFNQUiwgbm90IGEgR1BS LCBzbyBJQ1RhaWxDYWxsUmVnIGlzIGEgcmVndWxhcgorKyAgICAvLyBHUFIgdGhhdCBkb2VzIG5v dCBzaGFkb3cgTFIuIFRoZSBpbm5lciBiY3RybCB3aWxsIGNsb2JiZXIgTFIsIHNvCisrICAgIC8v IHNhdmUvcmVzdG9yZSBpdCBleHBsaWNpdGx5LgorKyAgICBtYXNtLnhzX21mbHIocjApOworKyAg ICBtYXNtLnB1c2gocjApOworKyNlbmRpZgorICAgICBtYXNtLlB1c2hSZWdzSW5NYXNrKGxpdmVS ZWdzKTsKKyAKKyAgICAgLy8gVGhlIHN0dWIgZXhwZWN0cyBsaHMgaW4gQ2FsbFRlbXBSZWcwIGFu ZCByaHMgaW4gQ2FsbFRlbXBSZWcxLgorQEAgLTEwMzIyLDExICsxMDMzMCwxOSBAQCBib29sIENh Y2hlSVJDb21waWxlcjo6ZW1pdENvbmNhdFN0cmluZ3NSZXN1bHQoU3RyaW5nT3BlcmFuZElkIGxo c0lkLAorICAgICBtYXNtLmJyYW5jaFRlc3RQdHIoQXNzZW1ibGVyOjpaZXJvLCBDYWxsVGVtcFJl ZzUsIENhbGxUZW1wUmVnNSwgJnZtQ2FsbCk7CisgICAgIG1hc20udGFnVmFsdWUoSlNWQUxfVFlQ RV9TVFJJTkcsIENhbGxUZW1wUmVnNSwgb3V0cHV0LnZhbHVlUmVnKCkpOworICAgICBtYXNtLlBv cFJlZ3NJbk1hc2sobGl2ZVJlZ3MpOworKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAgIG1h c20ucG9wKHIwKTsKKysgICAgbWFzbS54c19tdGxyKHIwKTsKKysjZW5kaWYKKyAgICAgbWFzbS5q dW1wKCZkb25lKTsKKyAKKyAgICAgbWFzbS5iaW5kKCZ2bUNhbGwpOworICAgICBtYXNtLnNldEZy YW1lUHVzaGVkKGZyYW1lUHVzaGVkKTsKKyAgICAgbWFzbS5Qb3BSZWdzSW5NYXNrKGxpdmVSZWdz KTsKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgICBtYXNtLnBvcChyMCk7CisrICAgIG1h c20ueHNfbXRscihyMCk7CisrI2VuZGlmCisgICB9CisgCisgICB7CitkaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9Db2RlR2VuZXJhdG9yLmNwcCBiL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAK K2luZGV4IGExYzAxNDA5ZTlmNy4uMmEyYzYwMDdhZWMwIDEwMDY0NAorLS0tIGEvanMvc3JjL2pp dC9Db2RlR2VuZXJhdG9yLmNwcAorKysrIGIvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmNwcAor QEAgLTI1MTksNiArMjUxOSwxMiBAQCBzdGF0aWMgYm9vbCBQcmVwYXJlQW5kRXhlY3V0ZVJlZ0V4 cChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnaXN0ZXIgcmVnZXhwLAorICAgbWFzbS5jb21wdXRl RWZmZWN0aXZlQWRkcmVzcyhBZGRyZXNzKEZyYW1lUG9pbnRlciwgaW9PZmZzZXQpLCB0ZW1wMik7 CisgICBtYXNtLlB1c2hSZWdzSW5NYXNrKHZvbGF0aWxlUmVncyk7CisgICBtYXNtLnNldHVwVW5h bGlnbmVkQUJJQ2FsbCh0ZW1wMyk7CisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysg IC8vIHRlbXAxIGFsaWFzZXMgYXJncmVncyBvbiB0aGlzIHBsYXRmb3JtLCBzbyB3ZSBuZWVkIHRv IHJldXNlIHRlbXAzCisrICAvLyBvciB3ZSdsbCBzdG9tcCBvbiB0aGUgY29kZSBwb2ludGVyIHdo ZW4gd2UgcGFzcyB0aGUgZmlyc3QgQUJJIGFyZ3VtZW50LgorKyAgbWFzbS5tb3ZlUHRyKGNvZGVQ b2ludGVyLCB0ZW1wMyk7CisrICBjb2RlUG9pbnRlciA9IHRlbXAzOworKyNlbmRpZgorICAgbWFz bS5wYXNzQUJJQXJnKHRlbXAyKTsKKyAgIG1hc20uY2FsbFdpdGhBQkkoY29kZVBvaW50ZXIpOwor ICAgbWFzbS5zdG9yZUNhbGxJbnQzMlJlc3VsdCh0ZW1wMSk7CitkaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9Db2RlR2VuZXJhdG9yLmggYi9qcy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuaAoraW5kZXgg NThjMDQ3ZGVhNDFiLi4zNzgxYjk1OTVkZmQgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0NvZGVH ZW5lcmF0b3IuaAorKysrIGIvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmgKK0BAIC0yMyw2ICsy Myw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvQ29kZUdlbmVyYXRvci1sb29uZzY0Lmgi CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgIyAgaW5jbHVkZSAiaml0L3Jp c2N2NjQvQ29kZUdlbmVyYXRvci1yaXNjdjY0LmgiCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmgiCisg I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKKyAjICBpbmNsdWRlICJqaXQvd2FzbTMy L0NvZGVHZW5lcmF0b3Itd2FzbTMyLmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUp CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9FZmZlY3RpdmVBZGRyZXNzQW5hbHlzaXMuY3BwIGIv anMvc3JjL2ppdC9FZmZlY3RpdmVBZGRyZXNzQW5hbHlzaXMuY3BwCitpbmRleCBlMWJkMWJkMDQ1 ZWYuLjg4Njk3YzA2OTA3YyAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVz c0FuYWx5c2lzLmNwcAorKysrIGIvanMvc3JjL2ppdC9FZmZlY3RpdmVBZGRyZXNzQW5hbHlzaXMu Y3BwCitAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgYm9vbCBPZmZzZXRJc1NtYWxsRW5vdWdoKGlu dDMyX3QgaW1tKSB7CisgICAvLyBgbW92biAjaW1tYC4gIGFybTMyIGlzIHNpbWlsYXIuCisgICBy ZXR1cm4gaW1tID49IC0weEZGRkYgJiYgaW1tIDw9IDB4RkZGRjsKKyAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0g ICAgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX01J UFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgcmV0dXJuIGltbSA+PSAtMHhG RkYgJiYgaW1tIDw9IDB4RkZGOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorICAgcmV0dXJuIHRydWU7CitkaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL2pzL3NyYy9qaXQvRXhlY3V0YWJs ZUFsbG9jYXRvci5jcHAKK2luZGV4IDM0MGE2Mzk2NGI1Mi4uYzkzMzZmZThlYzRlIDEwMDY0NAor LS0tIGEvanMvc3JjL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAorKysrIGIvanMvc3JjL2pp dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAorQEAgLTMwNiwxMyArMzA2LDE5IEBAIHZvaWQgRXhl Y3V0YWJsZUFsbG9jYXRvcjo6cG9pc29uQ29kZShKU1J1bnRpbWUqIHJ0LAorICAgICB9CisgICB9 CisgCistICAvLyBNYWtlIHRoZSBwb29scyBleGVjdXRhYmxlIGFnYWluIGFuZCBkcm9wIHJlZmVy ZW5jZXMuIFdlIGRvbid0IGZsdXNoIHRoZQorLSAgLy8gSUNhY2hlIGhlcmUgdG8gbm90IGFkZCBl eHRyYSBvdmVyaGVhZC4KKysgIC8vIE1ha2UgdGhlIHBvb2xzIGV4ZWN1dGFibGUgYWdhaW4gYW5k IGRyb3AgcmVmZXJlbmNlcy4gT24gYXJjaGl0ZWN0dXJlcyB3aXRoCisrICAvLyBpbmNvaGVyZW50 IElDYWNoZSAoUFBDNjQpLCB3ZSBtdXN0IGZsdXNoIHRvIHByZXZlbnQgc3RhbGUgaW5zdHJ1Y3Rp b24KKysgIC8vIGV4ZWN1dGlvbiB3aGVuIGNvZGUgcmVnaW9ucyBhcmUgcmV1c2VkIGFmdGVyIHN3 ZWVwaW5nLgorICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoKCk7IGkrKykg eworICAgICBFeGVjdXRhYmxlUG9vbCogcG9vbCA9IHJhbmdlc1tpXS5wb29sOworICAgICBpZiAo cG9vbC0+aXNNYXJrZWQoKSkgeworKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAgICAgcmVw cm90ZWN0UG9vbChydCwgcG9vbCwgUHJvdGVjdGlvblNldHRpbmc6OkV4ZWN1dGFibGUsCisrICAg ICAgICAgICAgICAgICAgICBNdXN0Rmx1c2hJQ2FjaGU6Olllcyk7CisrI2Vsc2UKKyAgICAgICBy ZXByb3RlY3RQb29sKHJ0LCBwb29sLCBQcm90ZWN0aW9uU2V0dGluZzo6RXhlY3V0YWJsZSwKKyAg ICAgICAgICAgICAgICAgICAgIE11c3RGbHVzaElDYWNoZTo6Tm8pOworKyNlbmRpZgorICAgICAg IHBvb2wtPnVubWFyaygpOworICAgICB9CisgICAgIHBvb2wtPnJlbGVhc2UoKTsKK2RpZmYgLS1n aXQgYS9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcCBiL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUu Y3BwCitpbmRleCBkM2IxNjU3YTZiZTIuLjk1OTA2ODdjOTgwMyAxMDA2NDQKKy0tLSBhL2pzL3Ny Yy9qaXQvRmx1c2hJQ2FjaGUuY3BwCisrKysgYi9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcAor QEAgLTEzLDcgKzEzLDggQEAKKyAjICBpbmNsdWRlICJqaXQvYXJtNjQvdml4bC9TaW11bGF0b3It dml4bC5oIgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCisgCisgIyAgaWZkZWYgX19saW51eF9fCisgIyAgICBpbmNsdWRlIDxsaW51eC92ZXJzaW9u Lmg+CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9GbHVzaElDYWNoZS5oIGIvanMvc3JjL2ppdC9G bHVzaElDYWNoZS5oCitpbmRleCBhZjc5ZGEzNTZlZTUuLjU4Mzk2ZjYyYWUwZCAxMDA2NDQKKy0t LSBhL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaAorKysrIGIvanMvc3JjL2ppdC9GbHVzaElDYWNo ZS5oCitAQCAtMjEsNyArMjEsNyBAQCBpbmxpbmUgdm9pZCBGbHVzaElDYWNoZSh2b2lkKiBjb2Rl LCBzaXplX3Qgc2l6ZSkgeworIH0KKyAjZWxpZiAoZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSkgfHwgIFwKKyAgICAgZGVmaW5lZChKU19DT0RFR0VO X01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0gICAgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgCisgLy8gSW52YWxpZGF0ZSB0aGUgZ2l2ZW4g Y29kZSByYW5nZSBmcm9tIHRoZSBpY2FjaGUuIFRoaXMgd2lsbCBhbHNvIGZsdXNoIHRoZQorIC8v IGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGlzIGNvcmUuIElmIHRoaXMgY29kZSBpcyB0byBiZSBl eGVjdXRlZCBvbiBhbm90aGVyCitAQCAtMzcsNyArMzcsNyBAQCBpbmxpbmUgdm9pZCBGbHVzaElD YWNoZSh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkgeyBNT1pfQ1JBU0goKTsgfQorICMgIGVycm9y ICJVbmtub3duIGFyY2hpdGVjdHVyZSEiCisgI2VuZGlmCisgCistI2lmIChkZWZpbmVkKEpTX0NP REVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSkgfHwgICAgICBcCisrI2lmIChk ZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSkgfHwgICAg XAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f TE9PTkc2NCkgfHwgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAKK0BAIC01 NSwxMCArNTUsMTEgQEAgaW5saW5lIHZvaWQgRmx1c2hFeGVjdXRpb25Db250ZXh0KCkgeyBNT1pf Q1JBU0goKTsgfQorIGlubGluZSBib29sIENhbkZsdXNoRXhlY3V0aW9uQ29udGV4dEZvckFsbFRo cmVhZHMoKSB7IE1PWl9DUkFTSCgpOyB9CisgaW5saW5lIHZvaWQgRmx1c2hFeGVjdXRpb25Db250 ZXh0Rm9yQWxsVGhyZWFkcygpIHsgTU9aX0NSQVNIKCk7IH0KKyAKKy0jZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCisrI2VsaWYgZGVmaW5l ZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBcCisrICAg IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAKKy0vLyBBUk0gYW5kIEFSTTY0IG11c3QgZmx1 c2ggdGhlIGluc3RydWN0aW9uIHBpcGVsaW5lIG9mIHRoZSBjdXJyZW50IGNvcmUKKy0vLyBiZWZv cmUgZXhlY3V0aW5nIG5ld2x5IEpJVCdlZCBjb2RlLiBUaGlzIHdpbGwgcmVtb3ZlIGFueSBzdGFs ZSBkYXRhIGZyb20KKysvLyBBUk0sIEFSTTY0LCBhbmQgUFBDNjQgbXVzdCBmbHVzaCB0aGUgaW5z dHJ1Y3Rpb24gcGlwZWxpbmUgb2YgdGhlIGN1cnJlbnQKKysvLyBjb3JlIGJlZm9yZSBleGVjdXRp bmcgbmV3bHkgSklUJ2VkIGNvZGUuIFRoaXMgd2lsbCByZW1vdmUgYW55IHN0YWxlIGRhdGEgZnJv bQorIC8vIHRoZSBwaXBlbGluZSB0aGF0IG1heSBoYXZlIHJlZmVyZW5jZWQgaW52YWxpZGF0ZWQg aW5zdHJ1Y3Rpb25zLgorIC8vCisgLy8gYEZsdXNoSUNhY2hlYCB3aWxsIHBlcmZvcm0gdGhpcyBm b3IgdGhlIHRocmVhZCB0aGF0IGNvbXBpbGVzIHRoZSBjb2RlLCBidXQKK2RpZmYgLS1naXQgYS9q cy9zcmMvaml0L0dlbmVyYXRlQUJJRnVuY3Rpb25UeXBlLnB5IGIvanMvc3JjL2ppdC9HZW5lcmF0 ZUFCSUZ1bmN0aW9uVHlwZS5weQoraW5kZXggMDRiZTEwZDFkZTJhLi44MTU0MjdlYzY3NzEgMTAw NjQ0CistLS0gYS9qcy9zcmMvaml0L0dlbmVyYXRlQUJJRnVuY3Rpb25UeXBlLnB5CisrKysgYi9q cy9zcmMvaml0L0dlbmVyYXRlQUJJRnVuY3Rpb25UeXBlLnB5CitAQCAtNTM4LDYgKzUzOCwxMDIg QEAgZGVmIHJpc2N2NjRfc2ltdWxhdG9yX2Rpc3BhdGNoKGZ1bmNfdHlwZXMpOgorICAgICByZXR1 cm4gY29udGVudHMKKyAKKyAKKysjIFBQQzY0IEVMRnYyIEFCSTogOCBpbnQgYXJnIHJlZ3MgKHIz LXIxMCksIDEzIEZQIGFyZyByZWdzIChmMS1mMTMpLgorKyMgRWFjaCBmbG9hdGluZy1wb2ludCBh cmd1bWVudCBjb25zdW1lcyBCT1RIIGEgZmxvYXQtYXJnIHNsb3QgQU5EIGEKKysjIGdlbmVyYWwt cHVycG9zZS1yZWdpc3RlciBzaGFkb3cgc2xvdCAoY2FwcGVkIGF0IDggR1BSIHNsb3RzKSwgbWF0 Y2hpbmcKKysjIHdoYXQgR0NDIGFuZCB0aGUgSklUJ3MgQUJJQXJnR2VuZXJhdG9yIGRvIGZvciBF TEZ2MiBQUEM2NExFLiBXaXRob3V0CisrIyB0aGUgc2hhZG93LCBpbnRlZ2VyIGFyZ3MgZm9sbG93 aW5nIGEgZmxvYXQgZ28gdG8gdGhlIHdyb25nIHJlZ2lzdGVyCisrIyBhdCB0aGUgY2FsbCBib3Vu ZGFyeSwgcHJvZHVjaW5nIGEgdXNlLWFmdGVyLWZyZWUgLyB3cm9uZy1wb2ludGVyIGNyYXNoCisr IyBpbiB0aGUgQyBjYWxsZWUuIChWZXJpZmllZCBlbXBpcmljYWxseSBieSBkaXNhc3NlbWJsaW5n CisrIyBOdW1iZXJCaWdJbnRDb21wYXJlKGRvdWJsZSwgQmlnSW50Kikgb24gcmVhbCBQUEM2NDog QmlnSW50KiBpcyByZWFkCisrIyBmcm9tIHI0LCBub3QgcjMuKQorK2RlZiBwcGM2NF9hcmdzKGZ1 bmNfdHlwZSk6CisrICAgIGNvbnRlbnRzID0gIiIKKysgICAgbnVtSW50QXJnUmVncyA9IDgKKysg ICAgbnVtRmxvYXRBcmdSZWdzID0gMTMKKysgICAgaW50UmVnSW5kZXggPSAwCisrICAgIGZsb2F0 UmVnSW5kZXggPSAwCisrICAgIHN0YWNrT2Zmc2V0ID0gMAorKyAgICBmb3IgaSwgYXJnIGluIGVu dW1lcmF0ZShmdW5jX3R5cGVbImFyZ3MiXSk6CisrICAgICAgICBpZiBpICE9IDA6CisrICAgICAg ICAgICAgY29udGVudHMgKz0gIiwgIgorKworKyAgICAgICAgaWYgYXJnID09ICJHZW5lcmFsIjoK KysgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA9PSBudW1JbnRBcmdSZWdzOgorKyAgICAgICAg ICAgICAgICBjb250ZW50cyArPSBmInNwX1t7c3RhY2tPZmZzZXR9XSIKKysgICAgICAgICAgICAg ICAgc3RhY2tPZmZzZXQgKz0gMQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAg IGNvbnRlbnRzICs9IGYiYXtpbnRSZWdJbmRleH1fIgorKyAgICAgICAgICAgICAgICBpbnRSZWdJ bmRleCArPSAxCisrICAgICAgICBlbGlmIGFyZyA9PSAiSW50MzIiOgorKyAgICAgICAgICAgIGlm IGludFJlZ0luZGV4ID09IG51bUludEFyZ1JlZ3M6CisrICAgICAgICAgICAgICAgIGNvbnRlbnRz ICs9IGYiSTMyKHNwX1t7c3RhY2tPZmZzZXR9XSkiCisrICAgICAgICAgICAgICAgIHN0YWNrT2Zm c2V0ICs9IDEKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBjb250ZW50cyAr PSBmIkkzMihhe2ludFJlZ0luZGV4fV8pIgorKyAgICAgICAgICAgICAgICBpbnRSZWdJbmRleCAr PSAxCisrICAgICAgICBlbGlmIGFyZyA9PSAiSW50NjQiOgorKyAgICAgICAgICAgIGlmIGludFJl Z0luZGV4ID09IG51bUludEFyZ1JlZ3M6CisrICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYi c3BfW3tzdGFja09mZnNldH1dIgorKyAgICAgICAgICAgICAgICBzdGFja09mZnNldCArPSAxCisr ICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJhe2ludFJl Z0luZGV4fV8iCisrICAgICAgICAgICAgICAgIGludFJlZ0luZGV4ICs9IDEKKysgICAgICAgIGVs aWYgYXJnID09ICJGbG9hdDMyIjoKKysgICAgICAgICAgICBpZiBmbG9hdFJlZ0luZGV4ID09IG51 bUZsb2F0QXJnUmVnczoKKysgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiIqbW96aWxsYTo6 Qml0d2lzZUNhc3Q8ZmxvYXQqPihzcF9be3N0YWNrT2Zmc2V0fV0pIgorKyAgICAgICAgICAgICAg ICBzdGFja09mZnNldCArPSAxCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAg Y29udGVudHMgKz0gZiJme2Zsb2F0UmVnSW5kZXh9X3MiCisrICAgICAgICAgICAgICAgIGZsb2F0 UmVnSW5kZXggKz0gMQorKyAgICAgICAgICAgICMgRUxGdjI6IEZQIGFyZyBhbHNvIGNvbnN1bWVz IGEgR1BSIHNoYWRvdyBzbG90LgorKyAgICAgICAgICAgIGlmIGludFJlZ0luZGV4IDwgbnVtSW50 QXJnUmVnczoKKysgICAgICAgICAgICAgICAgaW50UmVnSW5kZXggKz0gMQorKyAgICAgICAgZWxp ZiBhcmcgPT0gIkZsb2F0NjQiOgorKyAgICAgICAgICAgIGlmIGZsb2F0UmVnSW5kZXggPT0gbnVt RmxvYXRBcmdSZWdzOgorKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmIm1vemlsbGE6OkJp dHdpc2VDYXN0PGRvdWJsZT4oc3BfW3tzdGFja09mZnNldH1dKSIKKysgICAgICAgICAgICAgICAg c3RhY2tPZmZzZXQgKz0gMQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIGNv bnRlbnRzICs9IGYiZntmbG9hdFJlZ0luZGV4fV9kIgorKyAgICAgICAgICAgICAgICBmbG9hdFJl Z0luZGV4ICs9IDEKKysgICAgICAgICAgICAjIEVMRnYyOiBGUCBhcmcgYWxzbyBjb25zdW1lcyBh IEdQUiBzaGFkb3cgc2xvdC4KKysgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA8IG51bUludEFy Z1JlZ3M6CisrICAgICAgICAgICAgICAgIGludFJlZ0luZGV4ICs9IDEKKysgICAgYXNzZXJ0IGlu dFJlZ0luZGV4IDw9IG51bUludEFyZ1JlZ3MKKysgICAgYXNzZXJ0IGZsb2F0UmVnSW5kZXggPD0g bnVtRmxvYXRBcmdSZWdzCisrICAgIHJldHVybiBjb250ZW50cworKworKworK2RlZiBwcGM2NF9z aW11bGF0b3JfZGlzcGF0Y2goZnVuY190eXBlcyk6CisrICAgIGNvbnRlbnRzID0gIiIKKysgICAg Zm9yIGZ1bmNfdHlwZSBpbiBmdW5jX3R5cGVzOgorKyAgICAgICAgYXJncyA9IHBwYzY0X2FyZ3Mo ZnVuY190eXBlKQorKyAgICAgICAgY29udGVudHMgKz0gZiJjYXNlIGpzOjpqaXQ6OkFyZ3Nfe2Z1 bmNfdHlwZV9uYW1lKGZ1bmNfdHlwZSl9OiB7e1xcXG4iCisrICAgICAgICBjb250ZW50cyArPSBm IiAgYXV0byB0YXJnZXQgPSByZWludGVycHJldF9jYXN0PFByb3RvdHlwZV97ZnVuY190eXBlX25h bWUoZnVuY190eXBlKX0+KG5hdGl2ZUZuKTtcXFxuIgorKyAgICAgICAgcmV0ID0gZnVuY190eXBl WyJyZXQiXQorKyAgICAgICAgaWYgcmV0ID09ICJWb2lkIjoKKysgICAgICAgICAgICBjb250ZW50 cyArPSBmIiAgdGFyZ2V0KHthcmdzfSk7XFxcbiIKKysgICAgICAgIGVsc2U6CisrICAgICAgICAg ICAgY29udGVudHMgKz0gZiIgIGF1dG8gcmV0ID0gdGFyZ2V0KHthcmdzfSk7XFxcbiIKKysgICAg ICAgIGlmIHJldCA9PSAiVm9pZCI6CisrICAgICAgICAgICAgcGFzcworKyAgICAgICAgZWxpZiBy ZXQgPT0gIkdlbmVyYWwiOgorKyAgICAgICAgICAgIGNvbnRlbnRzICs9ICIgIHNldENhbGxSZXN1 bHQocmV0KTtcXFxuIgorKyAgICAgICAgZWxpZiByZXQgPT0gIkludDMyIjoKKysgICAgICAgICAg ICBjb250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0KEk2NChyZXQpKTtcXFxuIgorKyAgICAgICAg ZWxpZiByZXQgPT0gIkludDY0IjoKKysgICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxs UmVzdWx0KHJldCk7XFxcbiIKKysgICAgICAgIGVsaWYgcmV0ID09ICJGbG9hdDMyIjoKKysgICAg ICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0RmxvYXQocmV0KTtcXFxuIgorKyAg ICAgICAgZWxpZiByZXQgPT0gIkZsb2F0NjQiOgorKyAgICAgICAgICAgIGNvbnRlbnRzICs9ICIg IHNldENhbGxSZXN1bHREb3VibGUocmV0KTtcXFxuIgorKyAgICAgICAgZWxzZToKKysgICAgICAg ICAgICByYWlzZSBWYWx1ZUVycm9yKGYiVW5rbm93biByZXQgdHlwZToge3JldH0iKQorKyAgICAg ICAgY29udGVudHMgKz0gIiAgYnJlYWs7XFxcbiIKKysgICAgICAgIGNvbnRlbnRzICs9ICJ9XFxc biIKKysgICAgcmV0dXJuIGNvbnRlbnRzCisrCisrCisgZGVmIG1haW4oY19vdXQsIHlhbWxfcGF0 aCk6CisgICAgIGZ1bmNfdHlwZXMgPSBsb2FkX3lhbWwoeWFtbF9wYXRoKQorIAorQEAgLTU4MSw0 ICs2NzcsOCBAQCBkZWYgbWFpbihjX291dCwgeWFtbF9wYXRoKToKKyAgICAgY29udGVudHMgKz0g cmlzY3Y2NF9zaW11bGF0b3JfZGlzcGF0Y2goZnVuY190eXBlcykKKyAgICAgY29udGVudHMgKz0g IlxuIgorIAorKyAgICBjb250ZW50cyArPSAiI2RlZmluZSBBQklfRlVOQ1RJT05fVFlQRV9QUEM2 NF9TSU1fRElTUEFUQ0ggXFxcbiIKKysgICAgY29udGVudHMgKz0gcHBjNjRfc2ltdWxhdG9yX2Rp c3BhdGNoKGZ1bmNfdHlwZXMpCisrICAgIGNvbnRlbnRzICs9ICJcbiIKKysKKyAgICAgZ2VuZXJh dGVfaGVhZGVyKGNfb3V0LCAiaml0X0FCSUZ1bmN0aW9uVHlwZUdlbmVyYXRlZF9oIiwgY29udGVu dHMpCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9KaXRDb250ZXh0LmNwcCBiL2pzL3NyYy9qaXQv Sml0Q29udGV4dC5jcHAKK2luZGV4IDc5YjIyZDlmMjQ5Zi4uZDM5OWRkZDM2ZmQ0IDEwMDY0NAor LS0tIGEvanMvc3JjL2ppdC9KaXRDb250ZXh0LmNwcAorKysrIGIvanMvc3JjL2ppdC9KaXRDb250 ZXh0LmNwcAorQEAgLTEyMSw2ICsxMjEsMTAgQEAgYm9vbCBqaXQ6OkluaXRpYWxpemVKaXQoKSB7 CisgICBSVkZsYWdzOjpJbml0KCk7CisgI2VuZGlmCisgCisrI2lmZGVmIEpTX0NPREVHRU5fUFBD NjQKKysgIFBQQzY0RmxhZ3M6OkluaXQoKTsKKysjZW5kaWYKKysKKyAjaWZuZGVmIEpTX0NPREVH RU5fTk9ORQorICAgTU9aX0FTU0VSVChqczo6aml0OjpDUFVGbGFnc0hhdmVCZWVuQ29tcHV0ZWQo KSk7CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9KaXRGcmFtZXMuY3BwIGIvanMv c3JjL2ppdC9KaXRGcmFtZXMuY3BwCitpbmRleCAzNjUzYWYzYTIxZjQuLmJiZDEzNzZkZWM2OSAx MDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvSml0RnJhbWVzLmNwcAorKysrIGIvanMvc3JjL2ppdC9K aXRGcmFtZXMuY3BwCitAQCAtMTgyNCw3ICsxODI0LDEyIEBAIFZhbHVlIFNuYXBzaG90SXRlcmF0 b3I6OmFsbG9jYXRpb25WYWx1ZShjb25zdCBSVmFsdWVBbGxvY2F0aW9uJiBhbGxvYywKKyAgICAg ICByZXR1cm4gRG91YmxlVmFsdWUoZnJvbVJlZ2lzdGVyPGRvdWJsZT4oYWxsb2MuZnB1UmVnKCkp KTsKKyAKKyAgICAgY2FzZSBSVmFsdWVBbGxvY2F0aW9uOjpGTE9BVDMyX1JFRzoKKysjaWYgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysg ICAgICByZXR1cm4gRmxvYXQzMlZhbHVlKAorKyAgICAgICAgICBmbG9hdChmcm9tUmVnaXN0ZXI8 ZG91YmxlPihhbGxvYy5mcHVSZWcoKS5hc0RvdWJsZSgpKSkpOworKyNlbHNlCisgICAgICAgcmV0 dXJuIEZsb2F0MzJWYWx1ZShmcm9tUmVnaXN0ZXI8ZmxvYXQ+KGFsbG9jLmZwdVJlZygpKSk7Cisr I2VuZGlmCisgCisgICAgIGNhc2UgUlZhbHVlQWxsb2NhdGlvbjo6RkxPQVQzMl9TVEFDSzoKKyAg ICAgICByZXR1cm4gRmxvYXQzMlZhbHVlKFJlYWRGcmFtZUZsb2F0MzJTbG90KGZwXywgYWxsb2Mu c3RhY2tPZmZzZXQoKSkpOworQEAgLTI2MjUsNyArMjYzMCwxMiBAQCB1aW50cHRyX3QgTWFjaGlu ZVN0YXRlOjpyZWFkKFJlZ2lzdGVyIHJlZykgY29uc3QgeworIAorIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgorIFQgTWFjaGluZVN0YXRlOjpyZWFkKEZsb2F0UmVnaXN0ZXIgcmVnKSBjb25zdCB7Cisr I2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCisrICAvLyBQUEM2NC9SSVNDVjY0IGFsd2F5cyBzdG9yZSBGbG9hdFJlZ2lzdGVycyBhcyA2 NC1iaXQgZG91Ymxlcy4KKysgIE1PWl9BU1NFUlQocmVnLnNpemUoKSA+PSBzaXplb2YoVCkpOwor KyNlbHNlCisgICBNT1pfQVNTRVJUKHJlZy5zaXplKCkgPT0gc2l6ZW9mKFQpKTsKKysjZW5kaWYK KyAKKyAjaWYgIWRlZmluZWQoSlNfQ09ERUdFTl9OT05FKSAmJiAhZGVmaW5lZChKU19DT0RFR0VO X1dBU00zMikKKyAgIGlmIChzdGF0ZV8uaXM8QmFpbG91dFN0YXRlPigpKSB7CitkaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9KaXRGcmFtZXMuaCBiL2pzL3NyYy9qaXQvSml0RnJhbWVzLmgKK2luZGV4 IGFjNzAwNWE1ZmNmYy4uNDkwODM0ZTYyZmVjIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9KaXRG cmFtZXMuaAorKysrIGIvanMvc3JjL2ppdC9KaXRGcmFtZXMuaAorQEAgLTMyMiw2ICszMjIsMTYg QEAgZW51bSBjbGFzcyBFeGNlcHRpb25SZXN1bWVLaW5kIDogaW50MzJfdCB7CisgCisgLy8gRGF0 YSBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIGFuIGV4Y2VwdGlvbi4KKyBzdHJ1Y3QgUmVzdW1lRnJv bUV4Y2VwdGlvbiB7CisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8vIFRoaXMg c3RydWN0IGlzIGJ1aWx0IG9uIHRoZSBzdGFjayBhcyBwYXJ0IG9mIGV4Y2VwdGlvbiByZXR1cm5z LiBCZWNhdXNlCisrICAvLyBpdCBnb2VzIHJpZ2h0IG9uIHRvcCBvZiB0aGUgc3RhY2ssIGFuIEFC SS1jb21wbGlhbnQgcm91dGluZSBjYW4gd3JlY2sKKysgIC8vIGl0LCBzbyB3ZSBpbXBsZW1lbnQg YSBtaW5pbXVtIFBvd2VyIElTQSBsaW5rYWdlIGFyZWEgKGZvdXIgZG91Ymxld29yZHMpLgorKyAg dm9pZCogX3BwY19zcF87CisrICB2b2lkKiBfcHBjX2NyXzsKKysgIHZvaWQqIF9wcGNfbHJfOwor KyAgdm9pZCogX3BwY190b2NfOworKyNlbmRpZgorKworICAgdWludDhfdCogZnJhbWVQb2ludGVy OworICAgdWludDhfdCogc3RhY2tQb2ludGVyOworICAgdWludDhfdCogdGFyZ2V0OworQEAgLTM3 Myw3ICszODMsNyBAQCBzdHJ1Y3QgUmVzdW1lRnJvbUV4Y2VwdGlvbiB7CisgICB9CisgfTsKKyAK Ky0jaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5f QVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyBzdGF0aWNfYXNzZXJ0KHNpemVv ZihSZXN1bWVGcm9tRXhjZXB0aW9uKSAlIDE2ID09IDAsCisgICAgICAgICAgICAgICAiUmVzdW1l RnJvbUV4Y2VwdGlvbiBzaG91bGQgYmUgYWxpZ25lZCIpOworICNlbmRpZgorZGlmZiAtLWdpdCBh L2pzL3NyYy9qaXQvTElSLmNwcCBiL2pzL3NyYy9qaXQvTElSLmNwcAoraW5kZXggMmY4OWZiNDA3 MzQ5Li5hOWY2MzRiN2ZjYzEgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0xJUi5jcHAKKysrKyBi L2pzL3NyYy9qaXQvTElSLmNwcAorQEAgLTc3OSw4ICs3NzksOCBAQCBib29sIExNb3ZlR3JvdXA6 OmFkZChMQWxsb2NhdGlvbiBmcm9tLCBMQWxsb2NhdGlvbiB0bywgTERlZmluaXRpb246OlR5cGUg dHlwZSkgeworICAgICAvLyBDb2RlR2VuZXJhdG9yU2hhcmVkOjpDb2RlR2VuZXJhdG9yU2hhcmVk IGFuZCBpbiBnZW5lcmFsIGV2ZXJ5d2hlcmUKKyAgICAgLy8gU2ltZE1lbW9yeUFpZ25tZW50IGlz IHVzZWQuICBMaWtlbHksIGFsaWdubWVudCByZXF1aXJlbWVudHMgd2lsbCByZXR1cm4uCisgIyAg IGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8 IFwKKy0gICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorLSAgICAgIC8vIE5vIG5lZWQg Zm9yIGFueSBjaGVjayBvbiB4ODYveDY0L2FybTY0LgorKyAgICAgICBkZWZpbmVkKEpTX0NPREVH RU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgICAvLyBObyBuZWVk IGZvciBhbnkgY2hlY2sgb24geDg2L3g2NC9hcm02NC9wcGM2NC4KKyAjICAgZWxzZQorICMgICAg IGVycm9yICJOZWVkIHRvIGNvbnNpZGVyIFNJTUQgYWxpZ25tZW50IG9uIHRoaXMgdGFyZ2V0LiIK KyAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgbWF5IGJlIG9mIHVzZSBpZiB3ZSBuZWVkIGFs aWdubWVudCBjaGVja3Mgb24KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xJUi5oIGIvanMvc3Jj L2ppdC9MSVIuaAoraW5kZXggM2Y0ZWZlZGE3OTU1Li4zMzU0Y2I5NmIwY2IgMTAwNjQ0CistLS0g YS9qcy9zcmMvaml0L0xJUi5oCisrKysgYi9qcy9zcmMvaml0L0xJUi5oCitAQCAtMjAwLDcgKzIw MCw3IEBAIGNsYXNzIExVc2UgOiBwdWJsaWMgTEFsbG9jYXRpb24geworICAgc3RhdGljIGNvbnN0 IHVpbnQzMl90IFBPTElDWV9CSVRTID0gMzsKKyAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBQT0xJ Q1lfU0hJRlQgPSAwOworICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IFBPTElDWV9NQVNLID0gKDEg PDwgUE9MSUNZX0JJVFMpIC0gMTsKKy0jaWZkZWYgSlNfQ09ERUdFTl9BUk02NAorKyNpZiBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIHN0 YXRpYyBjb25zdCB1aW50MzJfdCBSRUdfQklUUyA9IDc7CisgI2Vsc2UKKyAgIHN0YXRpYyBjb25z dCB1aW50MzJfdCBSRUdfQklUUyA9IDY7CitAQCAtNjE5LDEyICs2MTksMTggQEAgY2xhc3MgTERl ZmluaXRpb24geworICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gKFR5cGUpKChiaXRzXyA+ PiBUWVBFX1NISUZUKSAmIFRZUEVfTUFTSyk7IH0KKyAKKyAgIHN0YXRpYyBib29sIGlzRmxvYXRS ZWdDb21wYXRpYmxlKFR5cGUgdHlwZSwgRmxvYXRSZWdpc3RlciByZWcpIHsKKysjaWYgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysgICAg aWYgKHR5cGUgPT0gRkxPQVQzMiB8fCB0eXBlID09IERPVUJMRSkgeworKyAgICAgIHJldHVybiBy ZWcuaXNTaW5nbGUoKSB8fCByZWcuaXNEb3VibGUoKTsKKysgICAgfQorKyNlbHNlCisgICAgIGlm ICh0eXBlID09IEZMT0FUMzIpIHsKKyAgICAgICByZXR1cm4gcmVnLmlzU2luZ2xlKCk7CisgICAg IH0KKyAgICAgaWYgKHR5cGUgPT0gRE9VQkxFKSB7CisgICAgICAgcmV0dXJuIHJlZy5pc0RvdWJs ZSgpOworICAgICB9CisrI2VuZGlmCisgICAgIE1PWl9BU1NFUlQodHlwZSA9PSBTSU1EMTI4KTsK KyAgICAgcmV0dXJuIHJlZy5pc1NpbWQxMjgoKTsKKyAgIH0KK0BAIC0yMjkyLDYgKzIyOTgsOCBA QCBBbnlSZWdpc3RlciBMQWxsb2NhdGlvbjo6dG9BbnlSZWdpc3RlcigpIGNvbnN0IHsKKyAjICBp bmNsdWRlICJqaXQvbG9vbmc2NC9MSVItbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0xJUi1yaXNjdjY0LmgiCisr I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9M SVItcHBjNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KQorICMgIGluY2x1 ZGUgImppdC9taXBzLXNoYXJlZC9MSVItbWlwcy1zaGFyZWQuaCIKKyAjICBpbmNsdWRlICJqaXQv bWlwczY0L0xJUi1taXBzNjQuaCIKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xJUk9wcy55YW1s IGIvanMvc3JjL2ppdC9MSVJPcHMueWFtbAoraW5kZXggMzE1ZmY1ZmQ1MzQ4Li43ZmJlYTllMmVi ZWMgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0xJUk9wcy55YW1sCisrKysgYi9qcy9zcmMvaml0 L0xJUk9wcy55YW1sCitAQCAtMjIxMCw3ICsyMjEwLDcgQEAKKyAgICAgb2xkdmFsOiBXb3JkU2l6 ZWQKKyAgICAgbmV3dmFsOiBXb3JkU2l6ZWQKKyAgICMgTmVlZHMgYWRkaXRpb25hbCB0ZW1wcyBv biBMTC9TQyBwbGF0Zm9ybXMgdG8gZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgorLSNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgbnVtX3RlbXBzOiA0 CisgI2Vsc2UKKyAgIG51bV90ZW1wczogMQorQEAgLTIyMjQsNyArMjIyNCw3IEBACisgICAgIGlu ZGV4OiBXb3JkU2l6ZWQKKyAgICAgdmFsdWU6IFdvcmRTaXplZAorICAgIyBOZWVkcyBhZGRpdGlv bmFsIHRlbXBzIG9uIExML1NDIHBsYXRmb3JtcyB0byBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdv cmQuCistI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjaWYgZGVmaW5lZChK U19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICBu dW1fdGVtcHM6IDQKKyAjZWxzZQorICAgbnVtX3RlbXBzOiAxCitAQCAtMjIzOCw3ICsyMjM4LDcg QEAKKyAgICAgaW5kZXg6IFdvcmRTaXplZAorICAgICB2YWx1ZTogV29yZFNpemVkCisgICAjIE5l ZWRzIGFkZGl0aW9uYWwgdGVtcHMgb24gTEwvU0MgcGxhdGZvcm1zIHRvIGV4dHJhY3QvaW5zZXJ0 IGJpdHMgb2Ygd29yZC4KKy0jaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkKKyAgIG51bV90ZW1wczogNAorICNlbHNlCisgICBudW1fdGVtcHM6IDIKK0BAIC0yMjU1 LDcgKzIyNTUsNyBAQAorICAgIyBOZWVkcyBhZGRpdGlvbmFsIHRlbXBzIG9uIExML1NDIHBsYXRm b3JtcyB0byBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCisgI2lmIGRlZmluZWQoSlNfQ09E RUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKyAgIG51bV90ZW1wczogMQor LSNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIG51 bV90ZW1wczogMworICNlbmRpZgorICAgbWlyX29wOiBBdG9taWNUeXBlZEFycmF5RWxlbWVudEJp bm9wCitAQCAtMzA2Niw3ICszMDY2LDcgQEAKKyAgIG9wZXJhbmRzOgorICAgICBwdHI6IFdvcmRT aXplZAorICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKKy0jaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyNpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIG51bV90ZW1wczogMQorICNlbmRpZgorICAgbWlyX29w OiB0cnVlCitAQCAtMzA3OCw3ICszMDc4LDcgQEAKKyAgICAgbWVtb3J5QmFzZTogV29yZFNpemVk CisgI2lmZGVmIEpTX0NPREVHRU5fQVJNCisgICBudW1fdGVtcHM6IDIKKy0jZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICBudW1fdGVtcHM6IDEKKyAj ZW5kaWYKKyAgIG1pcl9vcDogV2FzbUxvYWQKK0BAIC0zMDg4LDcgKzMwODgsNyBAQAorICAgICBw dHI6IFdvcmRTaXplZAorICAgICB2YWx1ZTogV29yZFNpemVkCisgICAgIG1lbW9yeUJhc2U6IFdv cmRTaXplZAorLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAg bnVtX3RlbXBzOiAxCisgI2VuZGlmCisgICBtaXJfb3A6IHRydWUKK0BAIC0zMDk4LDcgKzMwOTgs NyBAQAorICAgICBwdHI6IFdvcmRTaXplZAorICAgICB2YWx1ZTogSW50NjQKKyAgICAgbWVtb3J5 QmFzZTogV29yZFNpemVkCistI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCisgICBudW1fdGVtcHM6IDEKKyAjZW5kaWYKKyAgIG1pcl9vcDogV2FzbVN0b3JlCitAQCAt MzEyOCw3ICszMTI4LDcgQEAKKyAgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCisgI2lmZGVmIEpT X0NPREVHRU5fWDg2CisgICBudW1fdGVtcHM6IDEKKy0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f TUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICAjIFRlbXAgdGhhdCBtYXkgYmUgdXNlZCBvbiBM TC9TQyBwbGF0Zm9ybXMgZm9yIGV4dHJhY3QvaW5zZXJ0IGJpdHMgb2Ygd29yZC4KKyAgIG51bV90 ZW1wczogMworICNlbmRpZgorQEAgLTMxNDIsNyArMzE0Miw3IEBACisgICAgIG1lbW9yeUJhc2U6 IFdvcmRTaXplZAorICNpZmRlZiBKU19DT0RFR0VOX1g4NgorICAgbnVtX3RlbXBzOiAxCistI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05H NjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgIyBUZW1w IHRoYXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxhdGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBi aXRzIG9mIHdvcmQuCisgICBudW1fdGVtcHM6IDMKKyAjZW5kaWYKK0BAIC0zMTU0LDcgKzMxNTQs NyBAQAorICAgICBwdHI6IFdvcmRTaXplZAorICAgICB2YWx1ZTogV29yZFNpemVkCisgICAgIG1l bW9yeUJhc2U6IFdvcmRTaXplZAorLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp CisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQorICAgIyBUZW1wIHRoYXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxhdGZvcm1z IGZvciBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCisgICBudW1fdGVtcHM6IDMKKyAjZWxp ZmRlZiBKU19DT0RFR0VOX1g4NgorQEAgLTMxNzEsNyArMzE3MSw3IEBACisgICAgIHB0cjogV29y ZFNpemVkCisgICAgIHZhbHVlOiBXb3JkU2l6ZWQKKyAgICAgbWVtb3J5QmFzZTogV29yZFNpemVk CistI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjaWYgZGVmaW5lZChKU19D T0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICAjIFRl bXAgdGhhdCBtYXkgYmUgdXNlZCBvbiBMTC9TQyBwbGF0Zm9ybXMgZm9yIGV4dHJhY3QvaW5zZXJ0 IGJpdHMgb2Ygd29yZC4KKyAgIG51bV90ZW1wczogMworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9YODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9B Uk02NCkKK0BAIC00NDI0LDYgKzQ0MjQsNjQgQEAKKyAgIG1pcl9vcDogV2FzbUF0b21pY0V4Y2hh bmdlSGVhcAorICNlbmRpZgorIAorKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrLSBuYW1lOiBE aXZPck1vZEk2NAorKyAgZ2VuX2JvaWxlcnBsYXRlOiBmYWxzZQorKworKy0gbmFtZTogVURpdk9y TW9kCisrICBnZW5fYm9pbGVycGxhdGU6IGZhbHNlCisrCisrLSBuYW1lOiBVRGl2T3JNb2RJNjQK KysgIGdlbl9ib2lsZXJwbGF0ZTogZmFsc2UKKysKKystIG5hbWU6IE1vZE1hc2tJCisrICByZXN1 bHRfdHlwZTogV29yZFNpemVkCisrICBvcGVyYW5kczoKKysgICAgaW5wdXQ6IFdvcmRTaXplZAor KyAgYXJndW1lbnRzOgorKyAgICBzaGlmdDogaW50MzJfdAorKyAgbnVtX3RlbXBzOiAyCisrICBt aXJfb3A6IE1vZAorKworKy0gbmFtZTogV2FzbVRydW5jYXRlVG9JbnQ2NAorKyAgcmVzdWx0X3R5 cGU6IEludDY0CisrICBvcGVyYW5kczoKKysgICAgaW5wdXQ6IFdvcmRTaXplZAorKyAgbWlyX29w OiB0cnVlCisrCisrLSBuYW1lOiBJbnQ2NFRvRmxvYXRpbmdQb2ludAorKyAgcmVzdWx0X3R5cGU6 IFdvcmRTaXplZAorKyAgb3BlcmFuZHM6CisrICAgIGlucHV0OiBJbnQ2NAorKyAgbWlyX29wOiB0 cnVlCisrCisrLSBuYW1lOiBXYXNtQ29tcGFyZUV4Y2hhbmdlSTY0CisrICByZXN1bHRfdHlwZTog SW50NjQKKysgIG9wZXJhbmRzOgorKyAgICBwdHI6IFdvcmRTaXplZAorKyAgICBvbGRWYWx1ZTog SW50NjQKKysgICAgbmV3VmFsdWU6IEludDY0CisrICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAor KyAgbWlyX29wOiBXYXNtQ29tcGFyZUV4Y2hhbmdlSGVhcAorKworKy0gbmFtZTogV2FzbUF0b21p Y0Jpbm9wSTY0CisrICByZXN1bHRfdHlwZTogSW50NjQKKysgIG9wZXJhbmRzOgorKyAgICBwdHI6 IFdvcmRTaXplZAorKyAgICB2YWx1ZTogSW50NjQKKysgICAgbWVtb3J5QmFzZTogV29yZFNpemVk CisrICBudW1fdGVtcHM2NDogMQorKyAgbWlyX29wOiBXYXNtQXRvbWljQmlub3BIZWFwCisrCisr LSBuYW1lOiBXYXNtQXRvbWljRXhjaGFuZ2VJNjQKKysgIHJlc3VsdF90eXBlOiBJbnQ2NAorKyAg b3BlcmFuZHM6CisrICAgIHB0cjogV29yZFNpemVkCisrICAgIHZhbHVlOiBJbnQ2NAorKyAgICBt ZW1vcnlCYXNlOiBXb3JkU2l6ZWQKKysgIG1pcl9vcDogV2FzbUF0b21pY0V4Y2hhbmdlSGVhcAor KyNlbmRpZgorKworICNpZmRlZiBKU19DT0RFR0VOX1JJU0NWNjQKKyAtIG5hbWU6IFVEaXYKKyAg IHJlc3VsdF90eXBlOiBXb3JkU2l6ZWQKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xhYmVsLmgg Yi9qcy9zcmMvaml0L0xhYmVsLmgKK2luZGV4IDA2MWJmOTc4ZDI2Zi4uMmE0OWRlZDljOTY3IDEw MDY0NAorLS0tIGEvanMvc3JjL2ppdC9MYWJlbC5oCisrKysgYi9qcy9zcmMvaml0L0xhYmVsLmgK K0BAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCBMYWJlbEJhc2UgeworICAgdWludDMyX3Qgb2Zmc2V0 XyA6IDMxOworIAorICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK KysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkKKyAgcHVibGljOgorICNlbmRpZgorICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IElOVkFM SURfT0ZGU0VUID0gMHg3ZmZmZmZmZjsgIC8vIFVJTlQzMV9NQVguCitkaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9Mb3dlcmluZy5jcHAgYi9qcy9zcmMvaml0L0xvd2VyaW5nLmNwcAoraW5kZXggOWMx YzRiMGRmNDkxLi5lM2ZlNzFlYTljODMgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0xvd2VyaW5n LmNwcAorKysrIGIvanMvc3JjL2ppdC9Mb3dlcmluZy5jcHAKK0BAIC0xMTc0LDcgKzExNzQsNyBA QCB2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRUZXN0KE1UZXN0KiB0ZXN0KSB7CisgCisgI2lmIGRl ZmluZWQoRU5BQkxFX1dBU01fU0lNRCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgIChkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8 fCBcCistICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpKQorKyAgICAgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpKQorICAgLy8gQ2hlY2sg aWYgdGhlIG9wZXJhbmQgZm9yIHRoaXMgdGVzdCBpcyBhbiBhbnlfdHJ1ZS9hbGxfdHJ1ZSBTSU1E IG9wZXJhdGlvbi4KKyAgIC8vIElmIGl0IGlzLCB3ZSB3YW50IHRvIGVtaXQgYW4gTFdhc21SZWR1 Y2VBbmRCcmFuY2hTaW1kMTI4IG5vZGUgdG8gYXZvaWQKKyAgIC8vIGdlbmVyYXRpbmcgYW4gaW50 ZXJtZWRpYXRlIGJvb2xlYW4gcmVzdWx0LgorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTG93ZXJp bmcuaCBiL2pzL3NyYy9qaXQvTG93ZXJpbmcuaAoraW5kZXggYjRmMTMzNzU4ZWI2Li5kOTczYTY4 OTg5YjUgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0xvd2VyaW5nLmgKKysrKyBiL2pzL3NyYy9q aXQvTG93ZXJpbmcuaAorQEAgLTIzLDYgKzIzLDggQEAKKyAjICBpbmNsdWRlICJqaXQvbG9vbmc2 NC9Mb3dlcmluZy1sb29uZzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp CisgIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQvTG93ZXJpbmctcmlzY3Y2NC5oIgorKyNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysjICBpbmNsdWRlICJqaXQvcHBjNjQvTG93ZXJpbmct cHBjNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQorICMgIGluY2x1ZGUg ImppdC93YXNtMzIvTG93ZXJpbmctd2FzbTMyLmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X05PTkUpCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCBiL2pz L3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgKK2luZGV4IDQ3NDdhMjJlMTcxYi4uZDczODVk Zjg5NWQ1IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaAorKysr IGIvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaAorQEAgLTM5LDYgKzM5LDggQEAKKyAj ICBpbmNsdWRlICJqaXQvbG9vbmc2NC9NYWNyb0Fzc2VtYmxlci1sb29uZzY0LWlubC5oIgorICNl bGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0 L01hY3JvQXNzZW1ibGVyLXJpc2N2NjQtaW5sLmgiCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwu aCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQorICMgIGluY2x1ZGUgImppdC93 YXNtMzIvTWFjcm9Bc3NlbWJsZXItd2FzbTMyLWlubC5oIgorICNlbGlmICFkZWZpbmVkKEpTX0NP REVHRU5fTk9ORSkKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcCBi L2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIuY3BwCitpbmRleCBlYjk1ZDZjOWUyYzQuLjViMjhl ODExYzg4ZCAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIuY3BwCisrKysg Yi9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcAorQEAgLTYxMjgsNyArNjEyOCw3IEBAIHN0 YXRpYyB2b2lkIE1vdmVEYXRhQmxvY2soTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ2lzdGVyIGJh c2UsIGludDMyX3QgZnJvbSwKKyAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgc2NyYXRjaCA9 IEFCSU5vbkFyZ1JlZzA7CisgICBtYXNtLnB1c2goc2NyYXRjaCk7CisgI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0g ICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKyAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisgI2VsaWYgIWRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorQEAgLTYzMTUsNiArNjMxNSwx MiBAQCBzdGF0aWMgdm9pZCBDb2xsYXBzZVdhc21GcmFtZUZhc3QoTWFjcm9Bc3NlbWJsZXImIG1h c20sCisgCisgI2lmZGVmIEpTX1VTRV9MSU5LX1JFR0lTVEVSCisgICAvLyBSQSBpcyBhbHJlYWR5 IGluIGl0cyBwbGFjZSwganVzdCBtb3ZlIHN0YWNrLgorKyMgIGlmZGVmIEpTX0NPREVHRU5fUFBD NjQKKysgIC8vIFBQQzY0J3MgTFIgaXMgbm90IGEgR1BSLCBzbyBXYXNtVGFpbENhbGxSQVNjcmF0 Y2hSZWcgaXMgYSBub3JtYWwgR1BSCisrICAvLyAocjE0KS4gV2UgbXVzdCBleHBsaWNpdGx5IG1v dmUgaXQgdG8gTFIgc28gdGhlIGNhbGxlZSdzIHByb2xvZ3VlCisrICAvLyAocHVzaFJldHVybkFk ZHJlc3MpIHNhdmVzIHRoZSBjb3JyZWN0IHJldHVybiBhZGRyZXNzLgorKyAgbWFzbS54c19tdGxy KHRlbXBGb3JSQSk7CisrIyAgZW5kaWYKKyAgIG1hc20uYWRkVG9TdGFja1B0cihJbW0zMihmcmFt ZVB1c2hlZEF0U3RhcnQgKyBuZXdBcmdEZXN0KSk7CisgI2Vsc2UKKyAgIC8vIFB1c2ggUkEgdG8g bmV3IGZyYW1lOiBzdG9yZSBSQSwgcmVzdG9yZSB0ZW1wLCBhbmQgbW92ZSBzdGFjay4KK0BAIC02 NDYzLDYgKzY0NjksMTIgQEAgc3RhdGljIHZvaWQgQ29sbGFwc2VXYXNtRnJhbWVTbG93KE1hY3Jv QXNzZW1ibGVyJiBtYXNtLAorICNpZmRlZiBKU19VU0VfTElOS19SRUdJU1RFUgorICAgbWFzbS5m cmVlU3RhY2socmVzZXJ2ZWQpOworICAgLy8gUkEgaXMgYWxyZWFkeSBpbiBpdHMgcGxhY2UsIGp1 c3QgbW92ZSBzdGFjay4KKysjICBpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAvLyBQUEM2NCdz IExSIGlzIG5vdCBhIEdQUiwgc28gV2FzbVRhaWxDYWxsUkFTY3JhdGNoUmVnIGlzIGEgbm9ybWFs IEdQUgorKyAgLy8gKHIxNCkuIFdlIG11c3QgZXhwbGljaXRseSBtb3ZlIHRoZSB0cmFtcG9saW5l IGFkZHJlc3MgdG8gTFIgc28gdGhlCisrICAvLyBjYWxsZWUgcmV0dXJucyB0byB0aGUgdHJhbXBv bGluZS4KKysgIG1hc20ueHNfbXRscih0ZW1wRm9yUkEpOworKyMgIGVuZGlmCisgICBtYXNtLmFk ZFRvU3RhY2tQdHIoSW1tMzIoZnJhbWVQdXNoZWRBdFN0YXJ0ICsgbmV3QXJnRGVzdCkpOworICNl bHNlCisgICAvLyBQdXNoIFJBIHRvIG5ldyBmcmFtZTogc3RvcmUgUkEsIHJlc3RvcmUgdGVtcCwg YW5kIG1vdmUgc3RhY2suCitAQCAtODUyNyw3ICs4NTM5LDcgQEAgdm9pZCBNYWNyb0Fzc2VtYmxl cjo6ZGVidWdBc3NlcnRDYW5vbmljYWxJbnQzMihSZWdpc3RlciByKSB7CisgICAgIGJyZWFrcG9p bnQoKTsKKyAgICAgYmluZCgmb2spOworICMgICAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICAgICAgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgICBMYWJlbCBvazsKKyAgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworICAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworQEAgLTEwNTY3LDYgKzEwNTc5LDE1IEBAIHZvaWQgTWFjcm9B c3NlbWJsZXI6Om9yZGVyZWRIYXNoVGFibGVMb29rdXAoUmVnaXN0ZXIgc2V0T3JNYXBPYmosCisg ICB1bmJveEludDMyKEFkZHJlc3Moc2V0T3JNYXBPYmosIFRhYmxlT2JqZWN0OjpvZmZzZXRPZkxp dmVDb3VudCgpKSwgdGVtcDEpOworICAgYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgdGVt cDEsIHRlbXAxLCAmbm90Rm91bmQpOworIAorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp CisrICAvLyBJZiB0aGlzIHdhcyBwcmVjZWRlZCBieSBhIE1vdmVHcm91cCBpbnN0cnVjdGlvbiwg dGhlIGhhc2ggbWF5IGhhdmUgYmVlbgorKyAgLy8gbG9hZGVkIGFsZ2VicmFpY2FsbHkgc2luY2Ug aXQncyBhbiBJbnQzMiAoYW5kIHRodXMgc2lnbi1leHRlbmRlZCk7IHRoZQorKyAgLy8gb3BlcmF0 aW9uIGRvZXNuJ3Qga25vdyB0byBrZWVwIHRoZSB1cHBlciBiaXRzIGNsZWFyLCBmYWlsaW5nIHRo ZSBhc3NlcnQuCisrICBpZiAoaXNCaWdJbnQgPT0gSXNCaWdJbnQ6Ok5vKSB7CisrICAgIGFzX3Js ZGljbChoYXNoLCBoYXNoLCAwLCAzMik7CisrICB9CisrI2VuZGlmCisrCisgI2lmZGVmIERFQlVH CisgICBQdXNoUmVnc0luTWFzayhMaXZlUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OlZvbGF0aWxl KCkpKTsKKyAKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmggYi9qcy9z cmMvaml0L01hY3JvQXNzZW1ibGVyLmgKK2luZGV4IDZjMDhiYjU1NGNhOC4uNzU0ZTg2NDJiYjU3 IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5oCisrKysgYi9qcy9zcmMv aml0L01hY3JvQXNzZW1ibGVyLmgKK0BAIC0yMyw2ICsyMyw4IEBACisgIyAgaW5jbHVkZSAiaml0 L2xvb25nNjQvTWFjcm9Bc3NlbWJsZXItbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L01hY3JvQXNzZW1ibGVyLXJp c2N2NjQuaCIKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAi aml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1dBU00zMikKKyAjICBpbmNsdWRlICJqaXQvd2FzbTMyL01hY3JvQXNzZW1ibGVyLXdhc20z Mi5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorQEAgLTkzLDggKzk1LDkgQEAK KyAvLyAgIH0KKyAvLyAgIC8vLy99fX0gY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUKKyAKKy0j ZGVmaW5lIEFMTF9BUkNIIG1pcHM2NCwgYXJtLCBhcm02NCwgeDg2LCB4NjQsIGxvb25nNjQsIHJp c2N2NjQsIHdhc20zMgorLSNkZWZpbmUgQUxMX1NIQVJFRF9BUkNIIGFybSwgYXJtNjQsIGxvb25n NjQsIG1pcHM2NCwgcmlzY3Y2NCwgeDg2X3NoYXJlZCwgd2FzbTMyCisrI2RlZmluZSBBTExfQVJD SCBtaXBzNjQsIGFybSwgYXJtNjQsIHg4NiwgeDY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwg d2FzbTMyCisrI2RlZmluZSBBTExfU0hBUkVEX0FSQ0ggXAorKyAgYXJtLCBhcm02NCwgbG9vbmc2 NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2NCwgeDg2X3NoYXJlZCwgd2FzbTMyCisgCisgLy8gKiBI b3cgdGhpcyBtYWNybyB3b3JrczoKKyAvLworQEAgLTE0MCw2ICsxNDMsNyBAQAorICNkZWZpbmUg REVGSU5FRF9PTl9taXBzNjQKKyAjZGVmaW5lIERFRklORURfT05fbG9vbmc2NAorICNkZWZpbmUg REVGSU5FRF9PTl9yaXNjdjY0CisrI2RlZmluZSBERUZJTkVEX09OX3BwYzY0CisgI2RlZmluZSBE RUZJTkVEX09OX3dhc20zMgorICNkZWZpbmUgREVGSU5FRF9PTl9ub25lCisgCitAQCAtMTY5LDYg KzE3Myw5IEBACisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgIyAgdW5kZWYg REVGSU5FRF9PTl9yaXNjdjY0CisgIyAgZGVmaW5lIERFRklORURfT05fcmlzY3Y2NCBkZWZpbmUK KysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgdW5kZWYgREVGSU5FRF9PTl9w cGM2NAorKyMgIGRlZmluZSBERUZJTkVEX09OX3BwYzY0IGRlZmluZQorICNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgdW5kZWYgREVGSU5FRF9PTl93YXNtMzIKKyAjICBkZWZp bmUgREVGSU5FRF9PTl93YXNtMzIgZGVmaW5lCitAQCAtNTYyLDcgKzU2OSw3IEBAIGNsYXNzIE1h Y3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCBQ b3AoY29uc3QgUmVnaXN0ZXI2NCByZWcpOworICAgdm9pZCBQb3BGbGFncygpIERFRklORURfT04o eDg2X3NoYXJlZCk7CisgICB2b2lkIFBvcFN0YWNrUHRyKCkKKy0gICAgICBERUZJTkVEX09OKGFy bSwgbWlwczY0LCB4ODZfc2hhcmVkLCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOworKyAgICAg IERFRklORURfT04oYXJtLCBtaXBzNjQsIHg4Nl9zaGFyZWQsIGxvb25nNjQsIHJpc2N2NjQsIHBw YzY0LCB3YXNtMzIpOworIAorICAgLy8gTW92ZSB0aGUgc3RhY2sgcG9pbnRlciBiYXNlZCBvbiB0 aGUgcmVxdWVzdGVkIGFtb3VudC4KKyAgIHZvaWQgYWRqdXN0U3RhY2soaW50IGFtb3VudCk7CitA QCAtNjIwLDkgKzYyNyw5IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgeworIAorICAgLy8gVGhlc2UgZG8gbm90IGFkanVzdCBmcmFtZVB1c2hl ZCgpLgorICAgdm9pZCBwdXNoUmV0dXJuQWRkcmVzcygpCistICAgICAgREVGSU5FRF9PTihtaXBz NjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7CisrICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0LCB3YXNtMzIp OworICAgdm9pZCBwb3BSZXR1cm5BZGRyZXNzKCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwg YXJtLCBhcm02NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKKysgICAgICBERUZJTkVEX09O KG1pcHM2NCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHdhc20zMik7Cisg CisgICAvLyBVc2VmdWwgZm9yIGRlYWxpbmcgd2l0aCB0d28tdmFsdWVkIHJldHVybnMuCisgICB2 b2lkIG1vdmVSZWdQYWlyKFJlZ2lzdGVyIHNyYzAsIFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVyIGRz dDAsIFJlZ2lzdGVyIGRzdDEsCitAQCAtNjQxLDcgKzY0OCw3IEBAIGNsYXNzIE1hY3JvQXNzZW1i bGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgQ29kZU9mZnNldCBmYXJK dW1wV2l0aFBhdGNoKCkgUEVSX1NIQVJFRF9BUkNIOworICAgdm9pZCBwYXRjaEZhckp1bXAoQ29k ZU9mZnNldCBmYXJKdW1wLCB1aW50MzJfdCB0YXJnZXRPZmZzZXQpIFBFUl9TSEFSRURfQVJDSDsK KyAgIHN0YXRpYyB2b2lkIHBhdGNoRmFySnVtcCh1aW50OF90KiBmYXJKdW1wLCB1aW50OF90KiB0 YXJnZXQpCistICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4ODZfc2hhcmVkLCBsb29uZzY0 LCBtaXBzNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDg2X3No YXJlZCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyBFbWl0IGEg bm9wIHRoYXQgY2FuIGJlIHBhdGNoZWQgdG8gYW5kIGZyb20gYSBub3AgYW5kIGEgY2FsbCB3aXRo IGludDMyCisgICAvLyByZWxhdGl2ZSBkaXNwbGFjZW1lbnQuCitAQCAtNjY3LDkgKzY3NCw5IEBA IGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewor ICAgLy8gdGFyZ2V0IGJlaGF2aW91ciBpcyBvbmx5IHByb3ZpZGVkIGZvciBgbmAgaW4gdGhlIHJh bmdlIDAgLi4gMl4zMS0xCisgICAvLyBpbmNsdXNpdmUuCisgICBDb2RlT2Zmc2V0IG1vdmUzMldp dGhQYXRjaChSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt LCBhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwgcHBjNjQpOwor ICAgdm9pZCBwYXRjaE1vdmUzMihDb2RlT2Zmc2V0IG9mZnNldCwgSW1tMzIgbikKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2 NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm0sIGFybTY0LCBsb29uZzY0LCBt aXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgcHVibGljOgorICAgLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAt MTE3NCwxMyArMTE4MSwxMyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fz c2VtYmxlclNwZWNpZmljIHsKKyAgIGlubGluZSB2b2lkIG11bFB0cihJbW1Xb3JkIHJocywgUmVn aXN0ZXIgc3JjRGVzdCkgUEVSX0FSQ0g7CisgCisgICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBS ZWdpc3RlcjY0JiByaHMsIGNvbnN0IFJlZ2lzdGVyNjQmIHNyY0Rlc3QpCistICAgICAgREVGSU5F RF9PTih4NjQsIGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklO RURfT04oeDY0LCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgICBp bmxpbmUgdm9pZCBtdWw2NChjb25zdCBPcGVyYW5kJiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQmIGRl c3QpIERFRklORURfT04oeDY0KTsKKyAgIGlubGluZSB2b2lkIG11bDY0KGNvbnN0IE9wZXJhbmQm IHNyYywgY29uc3QgUmVnaXN0ZXI2NCYgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oeDY0KTsKKyAgIGlubGluZSB2b2lkIG11bDY0KElt bTY0IGltbSwgY29uc3QgUmVnaXN0ZXI2NCYgZGVzdCkgUEVSX0FSQ0g7CisgICBpbmxpbmUgdm9p ZCBtdWw2NChJbW02NCBpbW0sIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QsIGNvbnN0IFJlZ2lzdGVy IHRlbXApCistICAgICAgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtLCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybSwgbWlwczY0LCBsb29u ZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBSZWdpc3Rl cjY0JiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICBj b25zdCBSZWdpc3RlciB0ZW1wKSBQRVJfQVJDSDsKKyAgIGlubGluZSB2b2lkIG11bDY0KGNvbnN0 IFJlZ2lzdGVyNjQmIHNyYzEsIGNvbnN0IFJlZ2lzdGVyNjQmIHNyYzIsCitAQCAtMTIwMiwxMSAr MTIwOSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKKyAgIC8vIE9uIEFSTSwgdGhlIGNoaXAgbXVzdCBoYXZlIGhhcmR3YXJlIGRpdmlz aW9uIGluc3RydWN0aW9ucy4KKyAgIGlubGluZSB2b2lkIHF1b3RpZW50MzIoUmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgaXNVbnNpZ25lZCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgYXJtLCBhcm02NCwg bG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgYXJt LCBhcm02NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBxdW90aWVudDY0KFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpCistICAgICAgREVG SU5FRF9PTihhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVE X09OKGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIEFz IGFib3ZlLCBidXQgbGhzIGFuZCBkZXN0IG11c3QgYmUgZWF4IGFuZCB0ZW1wRWR4IG11c3QgYmUg ZWR4LgorICAgaW5saW5lIHZvaWQgcXVvdGllbnQzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJo cywgUmVnaXN0ZXIgZGVzdCwKK0BAIC0xMjE5LDExICsxMjI2LDExIEBAIGNsYXNzIE1hY3JvQXNz ZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gT24gQVJNLCB0 aGUgY2hpcCBtdXN0IGhhdmUgaGFyZHdhcmUgZGl2aXNpb24gaW5zdHJ1Y3Rpb25zLgorICAgaW5s aW5lIHZvaWQgcmVtYWluZGVyMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVy IGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpCistICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20z Mik7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHdhc20zMiwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmVtYWluZGVyNjQoUmVnaXN0 ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGlzVW5zaWduZWQpCistICAgICAgREVGSU5FRF9PTihhcm02NCwgbG9vbmc2 NCwgbWlwczY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybTY0LCBsb29uZzY0LCBt aXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIEFzIGFib3ZlLCBidXQgbGhzIGFuZCBk ZXN0IG11c3QgYmUgZWF4IGFuZCB0ZW1wRWR4IG11c3QgYmUgZWR4LgorICAgaW5saW5lIHZvaWQg cmVtYWluZGVyMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCitA QCAtMjA4MCw3ICsyMDg3LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7CisgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgIHZvaWQgYnJh bmNoVmFsdWVJc051cnNlcnlDZWxsSW1wbChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgdmFsdWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgTGFi ZWwqIGxhYmVsKQorLSAgICAgIERFRklORURfT04oYXJtNjQsIHg2NCwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICBpbmxp bmUgdm9pZCBicmFuY2hUZXN0VW5kZWZpbmVkSW1wbChDb25kaXRpb24gY29uZCwgY29uc3QgVCYg dCwgTGFiZWwqIGxhYmVsKQorQEAgLTIyNDUsNyArMjI1Miw3IEBAIGNsYXNzIE1hY3JvQXNzZW1i bGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gZnJvbSBhbGwgdGhl IG90aGVyIHJlZ2lzdGVycywgb24gYWxsIHN1cHBvcnRlZCB0YXJnZXRzLgorICAgaW5saW5lIHZv aWQgd2FzbUFkZFN1YkkxMjhISTY0KFJlZ2lzdGVyIGxoc0xvLCBSZWdpc3RlciBsaHNIaSwgUmVn aXN0ZXIgcmhzTG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg cmhzSGksIFJlZ2lzdGVyIG91dHB1dCwgYm9vbCBpc0FkZCkKKy0gICAgICBERUZJTkVEX09OKHg2 NCwgYXJtNjQsIHJpc2N2NjQsIGxvb25nNjQsIG1pcHM2NCk7CisrICAgICAgREVGSU5FRF9PTih4 NjQsIGFybTY0LCByaXNjdjY0LCBsb29uZzY0LCBtaXBzNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFBy b2R1Y2VzIHRoZSB0b3AgNjQgYml0cyBvZiB0aGUgMTI4LWJpdCB2YWx1ZSBgUkFYICp3aWRlbiBy aHNgLiAgVGhlIHJlc3VsdAorICAgLy8gd2lsbCBiZSBpbiBSQVguICBSRFggaXMgdHJhc2hlZC4g IGByaHNgIG1heSBub3QgYmUgUkFYIG9yIFJEWC4gIENhbGxlcnMKK0BAIC0yMjU2LDcgKzIyNjMs NyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKKyAgIC8vIHdoYXQgdGhlIHJlZ2lzdGVycyBtYXkgYmUuCisgICBpbmxpbmUgdm9pZCB3YXNt TXVsSTY0V2lkZUhJNjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIG91dHB1 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2lnbmVkKQorLSAg ICAgIERFRklORURfT04oYXJtNjQsIHJpc2N2NjQsIGxvb25nNjQsIG1pcHM2NCk7CisrICAgICAg REVGSU5FRF9PTihhcm02NCwgcmlzY3Y2NCwgbG9vbmc2NCwgbWlwczY0LCBwcGM2NCk7CisgCisg ICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyAgIC8vIENhbm9uaWNhbGl6YXRpb24gcHJpbWl0aXZlcy4K K0BAIC0yMzU1LDY4ICsyMzYyLDY4IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1h Y3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gTW92ZXMKKyAKKyAgIGlubGluZSB2b2lkIG1v dmVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gQ29uc3RhbnRzCisgCisgICBpbmxpbmUgdm9p ZCBsb2FkQ29uc3RhbnRTaW1kMTI4KGNvbnN0IFNpbWRDb25zdGFudCYgdiwgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFNwbGF0CisgCisg ICBpbmxpbmUgdm9pZCBzcGxhdFgxNihSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzcGxhdFgxNih1 aW50MzJfdCBzcmNMYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQor ICAgICAgIERFRklORURfT04oYXJtNjQpOworIAorICAgaW5saW5lIHZvaWQgc3BsYXRYOChSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBzcGxhdFg4KHVpbnQzMl90IHNyY0xhbmUsIEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCisgICAgICAgREVGSU5FRF9PTihhcm02NCk7Cisg CisgICBpbmxpbmUgdm9pZCBzcGxhdFg0KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHNwbGF0WDQo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzcGxhdFgyKFJlZ2lzdGVyNjQgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQpOworKyAg ICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9p ZCBzcGxhdFgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gRXh0cmFjdCBsYW5lIGFzIHNjYWxhci4gIEZs b2F0IGV4dHJhY3Rpb24gZG9lcyBub3QgY2Fub25pY2FsaXplIHRoZSB2YWx1ZS4KKyAKKyAgIGlu bGluZSB2b2lkIGV4dHJhY3RMYW5lSW50OHgxNih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVy IHNyYywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dHJhY3RMYW5lSW50OHgxNih1aW50MzJf dCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgZXh0cmFjdExhbmVJbnQxNng4KHVpbnQzMl90IGxhbmUsIEZsb2F0 UmVnaXN0ZXIgc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0cmFjdExhbmVJbnQxNng4 KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBleHRyYWN0TGFuZUludDMyeDQodWludDMyX3QgbGFu ZSwgRmxvYXRSZWdpc3RlciBzcmMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZXh0cmFjdExhbmVJbnQ2NHgy KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCkgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCkgREVG SU5FRF9PTih4ODYsIHg2NCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dHJh Y3RMYW5lRmxvYXQzMng0KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lRmxvYXQ2 NHgyKHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIC8vIFJlcGxhY2UgbGFuZSB2YWx1ZQorIAorQEAgLTI0MjUsMjEgKzI0 MzIsMjEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDh4MTYodW5zaWduZWQgbGFu ZSwgUmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCByZXBsYWNlTGFuZUludDE2eDgodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBs aHMsIFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9p ZCByZXBsYWNlTGFuZUludDE2eDgodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDMy eDQodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDMyeDQodW5z aWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Cisg CisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDY0eDIodW5zaWduZWQgbGFuZSwgRmxvYXRS ZWdpc3RlciBsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKK0BAIC0yNDQ3LDcgKzI0NTQsNyBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAKKyAgIGlu bGluZSB2b2lkIHJlcGxhY2VMYW5lSW50NjR4Mih1bnNpZ25lZCBsYW5lLCBSZWdpc3RlcjY0IHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rl c3QpCistICAgICAgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQpOworKyAgICAgIERFRklORURf T04oeDg2LCB4NjQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFu ZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIGxocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCitAQCAtMjQ1NSw3ICsyNDYyLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJs aWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFu ZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0NjR4 Mih1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIGxocywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCitA QCAtMjQ2Myw3ICsyNDcwLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0NjR4 Mih1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICAvLyBTaHVmZmxlIC0gYmxlbmQgYW5kIHBlcm11dGUgd2l0aCBpbW1l ZGlhdGUgaW5kaWNlcywgYW5kIGl0cyBtYW55CisgICAvLyBzcGVjaWFsaXphdGlvbnMuICBMYW5l IHZhbHVlcyBvdGhlciB0aGFuIHRob3NlIG1lbnRpb25lZCBhcmUgaWxsZWdhbC4KK0BAIC0yNDcx LDExICsyNDc4LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1i bGVyU3BlY2lmaWMgeworICAgLy8gbGFuZSB2YWx1ZXMgMC4uMzEKKyAgIGlubGluZSB2b2lkIHNo dWZmbGVJbnQ4eDE2KGNvbnN0IHVpbnQ4X3QgbGFuZXNbMTZdLCBGbG9hdFJlZ2lzdGVyIHJocywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzaHVmZmxlSW50OHgx Nihjb25zdCB1aW50OF90IGxhbmVzWzE2XSwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0 KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIExhbmUgdmFsdWVzIG11c3Qg YmUgMCAoc2VsZWN0IGZyb20gbGhzKSBvciBGRiAoc2VsZWN0IGZyb20gcmhzKS4KKyAgIC8vIFRo ZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgZm9yIGxhbmUgdmFsdWVzIHRoYXQgYXJlIG5laXRoZXIg MCBub3IgRkYuCitAQCAtMjUwMiwzOSArMjUwOSwzOSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv biB3b3JrcyBlZmZlY3RpdmVseSBmb3IgSTh4MTYsIEkxNng4LCBJMzJ4NCwgYW5kIEk2NHgyLgor ICAgaW5saW5lIHZvaWQgbGFuZVNlbGVjdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBtYXNrLCBGbG9h dFJlZ2lzdGVyIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUhpZ2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgaW50ZXJsZWF2ZUhpZ2hJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgaW50ZXJsZWF2ZUhpZ2hJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgaW50 ZXJsZWF2ZUxvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGludGVybGVhdmVM b3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBpbnRlcmxlYXZlTG93SW50MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUxvd0ludDY0eDIoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIC8vIFBlcm11dGUgLSBwZXJtdXRlIHdpdGggaW1tZWRpYXRlIGluZGljZXMuCisg CitAQCAtMjU0NCw3ICsyNTUxLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFj cm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICAvLyBsYW5lIHZhbHVlcyAwLi43CisgICBpbmxp bmUgdm9pZCBwZXJtdXRlSW50MTZ4OChjb25zdCB1aW50MTZfdCBsYW5lc1s4XSwgRmxvYXRSZWdp c3RlciBzcmMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBsYW5l IHZhbHVlcyAwLi4zIFtzaWNdLgorICAgaW5saW5lIHZvaWQgcGVybXV0ZUhpZ2hJbnQxNng4KGNv bnN0IHVpbnQxNl90IGxhbmVzWzRdLCBGbG9hdFJlZ2lzdGVyIHNyYywKK0BAIC0yNTYyLDgwICsy NTY5LDgwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgeworICAgLy8gICBsb3dfMTZfYnl0ZXNfb2YoKGxocyArKyByaHMpID4+IHNoaWZ0Kjgp LCBzaGlmdCBtdXN0IGJlIDwgMTYKKyAgIGlubGluZSB2b2lkIGNvbmNhdEFuZFJpZ2h0U2hpZnRT aW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgdWludDMy X3Qgc2hpZnQpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gUm90YXRlIHJp Z2h0IGJ5IGltbWVkaWF0ZSBjb3VudDoKKyAgIC8vICAgbG93XzE2X2J5dGVzX29mKChzcmMgKysg c3JjKSA+PiBzaGlmdCo4KSwgc2hpZnQgbXVzdCBiZSA8IDE2CisgICBpbmxpbmUgdm9pZCByb3Rh dGVSaWdodFNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaGlmdCkgREVGSU5FRF9P Tihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hp ZnQpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFNoaWZ0IGJ5dGVzIHdpdGgg aW1tZWRpYXRlIGNvdW50LCBzaGlmdGluZyBpbiB6ZXJvZXMuICBTaGlmdCBjb3VudCAwLi4xNS4K KyAKKyAgIGlubGluZSB2b2lkIGxlZnRTaGlmdFNpbWQxMjgoSW1tMzIgY291bnQsIEZsb2F0UmVn aXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmln aHRTaGlmdFNpbWQxMjgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFplcm8gZXh0ZW5kIGludCB2YWx1ZXMuCisgCisgICBp bmxpbmUgdm9pZCB6ZXJvRXh0ZW5kOHgxNlRvMTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAgIGlubGluZSB2b2lk IHplcm9FeHRlbmQ4eDE2VG8zMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworICAgaW5saW5lIHZvaWQgemVyb0V4dGVu ZDh4MTZUbzY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgICBpbmxpbmUgdm9pZCB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4 NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAgIGlubGluZSB2b2lkIHplcm9FeHRlbmQxNng4VG82NHgyKEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworICAgaW5saW5lIHZvaWQgemVyb0V4dGVuZDMyeDRUbzY0eDIoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAv LyBSZXZlcnNlIGJ5dGVzIGluIGxhbmVzLgorIAorICAgaW5saW5lIHZvaWQgcmV2ZXJzZUludDE2 eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByZXZlcnNlSW50MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIHJldmVyc2VJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gU3dp enpsZSAtIHBlcm11dGUgd2l0aCB2YXJpYWJsZSBpbmRpY2VzLiAgYHJoc2AgaG9sZHMgdGhlIGxh bmVzIHBhcmFtZXRlci4KKyAKKyAgIGlubGluZSB2b2lkIHN3aXp6bGVJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHN3aXp6bGVJ bnQ4eDE2UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEludGVnZXIgQWRkCisgCisgICBpbmxp bmUgdm9pZCBhZGRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCBhZGRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3Rh bnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgYWRkSW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYWRkSW50MTZ4OChG bG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsK KyAKKyAgIGlubGluZSB2b2lkIGFkZEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIGFkZEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0 IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBhZGRJ bnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBh ZGRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOworQEAgLTI2NDMsMTMgKzI2NTAsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIg OiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBJbnRlZ2VyIFN1YnRyYWN0 CisgCisgICBpbmxpbmUgdm9pZCBzdWJJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCBzdWJJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25z dCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgc3Vi SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg c3ViSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkKTsKK0BAIC0yNjU4LDI0ICsyNjY1LDI0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVy IDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBp bmxpbmUgdm9pZCBzdWJJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCBzdWJJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29u c3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgc3ViSW50NjR4MihG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gSW50ZWdlciBNdWx0aXBseQor IAorICAgaW5saW5lIHZvaWQgbXVsSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgbXVsSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3Qg U2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIG11bElu dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG11 bEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCk7CitAQCAtMjY5MSwxMDAgKzI2OTgsMTAwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVy IDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworIAorICAgaW5saW5lIHZvaWQgbXVs SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9P Tihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIp IERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIE5vdGUgZm9yIHRoZSBleHRNdWwg b3Bjb2RlcywgdGhlIE54TSBkZXNpZ25hdGlvbiBpcyBmb3IgdGhlIGlucHV0IGxhbmVzOworICAg Ly8gdGhlIG91dHB1dCBsYW5lcyBhcmUgdHdpY2UgYXMgd2lkZS4KKyAgIGlubGluZSB2b2lkIGV4 dE11bExvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZXh0TXVsSGlnaEludDh4MTYo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0TXVsTG93SW50OHgxNihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0TXVsSGlnaEludDh4MTYoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZXh0TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCBleHRNdWxIaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5z aWduZWRFeHRNdWxMb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5z aWduZWRFeHRNdWxIaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBl eHRNdWxMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dE11bEhpZ2hJbnQzMng0 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dE11bExvd0ludDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dE11bEhpZ2hJbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHExNU11bHJTYXRJbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICAvLyBJbnRlZ2VyIE5lZ2F0ZQorIAorICAgaW5saW5lIHZvaWQgbmVnSW50OHgxNihGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIG5lZ0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBuZWdJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCist ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbmVnSW50NjR4MihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIC8vIFNhdHVyYXRpbmcgaW50ZWdlciBhZGQKKyAKKyAgIGlubGluZSB2 b2lkIGFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIGFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNp bWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNp Z25lZEFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEFk ZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGFkZFNhdEludDE2eDgo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGFk ZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEFkZFNhdEludDE2eDgo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEFkZFNhdEludDE2eDgoRmxvYXRS ZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKK0BAIC0yNzkyLDI3ICsyNzk5LDI3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi bGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gU2F0dXJhdGluZyBpbnRlZ2VyIHN1 YnRyYWN0CisgCisgICBpbmxpbmUgdm9pZCBzdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzdWJTYXRJbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwor IAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRTdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAg aW5saW5lIHZvaWQgdW5zaWduZWRTdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25z dCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxp bmUgdm9pZCBzdWJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBzdWJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25z dCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQg dW5zaWduZWRTdWJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWdu ZWRTdWJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CitAQCAtMjgyMCw0MCArMjgyNyw0MCBAQCBjbGFz cyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8v IExhbmUtd2lzZSBpbnRlZ2VyIG1pbmltdW0KKyAKKyAgIGlubGluZSB2b2lkIG1pbkludDh4MTYo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1pbkludDh4 MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNp bWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lk IG1pbkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2 b2lkIG1pbkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhz LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDE2eDgoRmxvYXRSZWdpc3RlciBs aHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAg IGlubGluZSB2b2lkIG1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIG1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRD b25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1p bkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDMyeDQoRmxv YXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKK0BAIC0yODYxLDQwICsyODY4LDQwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi bGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gTGFuZS13aXNlIGludGVnZXIgbWF4 aW11bQorIAorICAgaW5saW5lIHZvaWQgbWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywg Y29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lk IHVuc2lnbmVkTWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4 SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgbWF4SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4SW50MTZ4OChGbG9hdFJl Z2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAg IGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IHVuc2lnbmVkTWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50 JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgbWF4SW50MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4SW50 MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3Qg U2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworQEAgLTI5MDMsMjUgKzI5 MTAsMjUgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEF2ZXJhZ2VJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkQXZlcmFnZUludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgLy8gTGFuZS13aXNlIGludGVnZXIgYWJzb2x1dGUgdmFsdWUKKyAKKyAgIGlubGluZSB2 b2lkIGFic0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBhYnNJbnQxNng4KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYWJzSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlu bGluZSB2b2lkIGFic0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBMZWZ0IHNoaWZ0IGJ5IHNj YWxhci4gSW1tZWRpYXRlcyBhbmQgdmFyaWFibGUgc2hpZnRzIG11c3QgaGF2ZSBiZWVuCisgICAv LyBtYXNrZWQ7IHNoaWZ0cyBvZiB6ZXJvIHdpbGwgd29yayBidXQgbWF5IG9yIG1heSBub3QgZ2Vu ZXJhdGUgY29kZS4KK0BAIC0yOTMwLDQxICsyOTM3LDQxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVy IDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCk7Cisg CisgICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdp c3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgbGVmdFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQx Nng4KFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorICAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQxNng4KEZsb2F0 UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwg RmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBsZWZ0U2hpZnRJbnQzMng0KFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0 KQorICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBsZWZ0 U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02 NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50 MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQ2NHgyKFJlZ2lzdGVyIHJocywgRmxv YXRSZWdpc3RlciBsaHNEZXN0KQorICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisg ICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5l IHZvaWQgbGVmdFNoaWZ0SW50NjR4MihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBSaWdodCBzaGlmdCBieSBzY2FsYXIuIElt bWVkaWF0ZXMgYW5kIHZhcmlhYmxlIHNoaWZ0cyBtdXN0IGhhdmUgYmVlbgorICAgLy8gbWFza2Vk OyBzaGlmdHMgb2YgemVybyB3aWxsIHdvcmsgYnV0IG1heSBvciBtYXkgbm90IGdlbmVyYXRlIGNv ZGUuCitAQCAtMjk3Myw4MiArMjk4MCw4MiBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlu bGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciBy aHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCByaWdodFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNo aWZ0SW50OHgxNihSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKQorICAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJp Z2h0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdp c3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCByaWdodFNoaWZ0SW50MTZ4OChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgcmln aHRTaGlmdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihh cm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHJpZ2h0U2hp ZnRJbnQxNng4KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQxNng4KFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorICAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRS aWdodFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50 MzJ4NChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKyAgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDMyeDQoRmxv YXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQzMng0KEltbTMyIGNv dW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0KFJlZ2lzdGVyIHJocywgRmxvYXRS ZWdpc3RlciBsaHNEZXN0KQorICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBp bmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBS ZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50NjR4MihSZWdpc3RlciByaHMs IEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGlu ZSB2b2lkIHJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50 NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0 SW50NjR4MihSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKyAgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0 SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IHVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3Jj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gU2lnbiByZXBsaWNh dGlvbiBvcGVyYXRpb24KKyAKK0BAIC0zMDY3LDQ3ICszMDc0LDQ3IEBAIGNsYXNzIE1hY3JvQXNz ZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gQml0d2lzZSBh bmQsIG9yLCB4b3IsIG5vdAorIAorICAgaW5saW5lIHZvaWQgYml0d2lzZUFuZFNpbWQxMjgoRmxv YXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXR3aXNlQW5kU2ltZDEyOChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgYml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0 IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZv aWQgYml0d2lzZU9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNE ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdp c2VPclNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYml0d2lzZU9yU2ltZDEyOChGbG9h dFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdpc2VYb3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgcmhz LCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgYml0d2lzZVhvclNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IGJpdHdpc2VYb3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQm IHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdpc2VOb3RT aW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gQml0d2lzZSBBTkQgd2l0aCBjb21wbGltZW50OiBk ZXN0ID0gbGhzICYgfnJocywgbm90ZSBvbmx5IGFybTY0IGNhbiBkbyBpdC4KKyAgIGlubGluZSB2 b2lkIGJpdHdpc2VBbmROb3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg bGhzRGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsK KyAKKyAgIC8vIEJpdHdpc2UgQU5EIHdpdGggY29tcGxlbWVudDogZGVzdCA9IH5saHMgJiByaHMs IG5vdGUgdGhpcyBpcyBub3Qgd2hhdCBXYXNtCisgICAvLyB3YW50cyBidXQgd2hhdCB0aGUgeDg2 IGhhcmR3YXJlIG9mZmVycy4gIEhlbmNlIHRoZSBuYW1lLgorIAorICAgaW5saW5lIHZvaWQgYml0 d2lzZU5vdEFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXR3aXNl Tm90QW5kU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCitA QCAtMzEyMCwzNCArMzEyNywzNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNy b0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGlu ZSB2b2lkIGJpdHdpc2VTZWxlY3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgb25UcnVlLCBGbG9hdFJl Z2lzdGVyIG9uRmFsc2UsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIG1hc2tEZXN0KSBERUZJTkVEX09OKGFybTY0KTsKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbWFza0Rlc3QpIERFRklORURfT04oYXJt NjQsIHBwYzY0KTsKKyAKKyAgIC8vIFBvcHVsYXRpb24gY291bnQKKyAKKyAgIGlubGluZSB2b2lk IHBvcGNudEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg cG9wY250SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oYXJtNjQpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsK KyAKKyAgIC8vIEFueSBsYW5lIHRydWUsIGllLCBhbnkgYml0IHNldAorIAorICAgaW5saW5lIHZv aWQgYW55VHJ1ZVNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gQWxsIGxhbmVzIHRydWUKKyAKKyAgIGlu bGluZSB2b2lkIGFsbFRydWVJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGFsbFRydWVJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGFsbFRydWVJbnQzMng0KEZsb2F0UmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIGFsbFRydWVJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEJpdG1hc2ssIGllIGV4 dHJhY3QgYW5kIGNvbXByZXNzIGhpZ2ggYml0cyBvZiBhbGwgbGFuZXMKKyAKK0BAIC0zMTU1LDMx ICszMTYyLDMxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgeworICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUg dm9pZCBiaXRtYXNrSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9P Tihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRl bXApIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdG1hc2tJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQorICAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50MTZ4OChGbG9hdFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdG1hc2tJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KQorICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxp bmUgdm9pZCBiaXRtYXNrSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5F RF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHRlbXApIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdG1h c2tJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQorICAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50NjR4MihGbG9h dFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKKyAKKyAgIC8vIENvbXBhcmlzb25zIChpbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCkK KyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNv bmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8v IE9uIHg4Nl9zaGFyZWQsIGxpbWl0ZWQgdG8gIT0sID09LCA8PSwgPgorICAgaW5saW5lIHZvaWQg Y29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBs aHMsCitAQCAtMzE4OSwxNSArMzE5NiwxNSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIE9uIGFybTY0LCB1c2UgYW55IGludGVn ZXIgY29tcGFyaXNvbiBjb25kaXRpb24uCisgICBpbmxpbmUgdm9pZCBjb21wYXJlSW50OHgxNihB c3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgY29tcGFyZUlu dDE2eDgoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgY29tcGFyZUludDE2eDgoQXNz ZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIE9uIHg4Nl9zaGFyZWQsIGxpbWl0 ZWQgdG8gIT0sID09LCA8PSwgPgorICAgaW5saW5lIHZvaWQgY29tcGFyZUludDE2eDgoQXNzZW1i bGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCitAQCAtMzIwNyw3ICszMjE0 LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZp YyB7CisgICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvICE9LCA9PSwgPD0sID4KKyAgIGlu bGluZSB2b2lkIGNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IGNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIg bGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltZENvbnN0YW50JiBy aHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKK0BAIC0zMjE2LDcgKzMyMjMsNyBAQCBjbGFzcyBNYWNy b0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIE9uIGFy bTY0LCB1c2UgYW55IGludGVnZXIgY29tcGFyaXNvbiBjb25kaXRpb24uCisgICBpbmxpbmUgdm9p ZCBjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVy IGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBG bG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgY29tcGFyZUZvckVxdWFsaXR5SW50NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBj b25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCitAQCAtMzIzMCwxNSArMzIzNywxNSBAQCBjbGFz cyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgY29tcGFyZUludDY0 eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIERFRklORURfT04o YXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNE ZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBjb21wYXJl SW50NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lz dGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgREVGSU5FRF9PTihh cm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJs ZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIC8vIE9uIHg4Nl9zaGFyZWQsIGxpbWl0ZWQgdG8gPT0sICE9LCA8LCA8 PQorICAgaW5saW5lIHZvaWQgY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBj b25kLCBGbG9hdFJlZ2lzdGVyIGxocywKK0BAIC0zMjQ5LDExICszMjU2LDExIEBAIGNsYXNzIE1h Y3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gT24g YXJtNjQsIHVzZSBhbnkgZmxvYXQtcG9pbnQgY29tcGFyaXNvbiBjb25kaXRpb24uCisgICBpbmxp bmUgdm9pZCBjb21wYXJlRmxvYXQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0 UmVnaXN0ZXIgbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24g Y29uZCwgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvID09LCAhPSwgPCwgPD0KKyAgIGlubGluZSB2 b2lkIGNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdp c3RlciBsaHMsCitAQCAtMzI2NCw3ICszMjcxLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBw dWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBPbiBhcm02NCwgdXNlIGFueSBm bG9hdC1wb2ludCBjb21wYXJpc29uIGNvbmRpdGlvbi4KKyAgIGlubGluZSB2b2lkIGNvbXBhcmVG bG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gTG9hZAor IAorQEAgLTMyNzMsOTIgKzMyODAsOTIgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg TWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICBpbmxpbmUgRmF1bHRpbmdDb2RlT2Zmc2V0 IGxvYWRVbmFsaWduZWRTaW1kMTI4KGNvbnN0IEFkZHJlc3MmIHNyYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSBGYXVsdGluZ0NvZGVPZmZz ZXQgbG9hZFVuYWxpZ25lZFNpbWQxMjgoY29uc3QgQmFzZUluZGV4JiBzcmMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBTdG9yZQorIAorICAgaW5s aW5lIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZVVuYWxpZ25lZFNpbWQxMjgoRmxvYXRSZWdpc3Rl ciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBZGRyZXNzJiBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmVVbmFsaWduZWRTaW1kMTI4KEZsb2F0UmVn aXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQmFzZUluZGV4JiBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIC8vIEZsb2F0aW5nIHBvaW50IG5lZ2F0aW9uCisgCisgICBpbmxpbmUgdm9pZCBuZWdG bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBuZWdGbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICAvLyBGbG9hdGluZyBwb2ludCBhYnNvbHV0ZSB2YWx1ZQorIAorICAgaW5saW5l IHZvaWQgYWJzRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYWJzRmxvYXQ2 NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworIAorICAgLy8gTmFOLXByb3BhZ2F0aW5nIG1pbmltdW0KKyAKKyAgIGlu bGluZSB2b2lkIG1pbkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9h dFJlZ2lzdGVyIHRlbXAxLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0 UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0KTsKKysgICAgICBERUZJ TkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDQoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2 X3NoYXJlZCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWluRmxvYXQ2NHgyKEZsb2F0UmVn aXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTihhcm02 NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg bWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJt NjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgLy8gTmFOLXByb3BhZ2F0aW5nIG1heGltdW0K KyAKKyAgIGlubGluZSB2b2lkIG1heEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBy aHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9h dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklO RURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5F RF9PTihhcm02NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgbWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgLy8gRmxvYXRpbmcgYWRkCisg CisgICBpbmxpbmUgdm9pZCBhZGRGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBhZGRGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2 b2lkIGFkZEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIGFkZEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworQEAgLTMzNjYsMTMgKzMzNzMsMTMgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAv LyBGbG9hdGluZyBzdWJ0cmFjdAorIAorICAgaW5saW5lIHZvaWQgc3ViRmxvYXQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3ViRmxvYXQz Mng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBzdWJGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzdWJGbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKK0BAIC0z MzgwLDEzICszMzg3LDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgeworICAgLy8gRmxvYXRpbmcgZGl2aXNpb24KKyAKKyAgIGlubGluZSB2 b2lkIGRpdkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIGRpdkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgZGl2RmxvYXQ2 NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg ZGl2RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7CitAQCAtMzM5NCwxMyArMzQwMSwxMyBAQCBjbGFzcyBNYWNyb0Fzc2Vt YmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIEZsb2F0aW5nIE11 bHRpcGx5CisgCisgICBpbmxpbmUgdm9pZCBtdWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtdWxGbG9hdDMyeDQoRmxvYXRSZWdp c3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAg IGlubGluZSB2b2lkIG11bEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIG11bEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29u c3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworQEAgLTM0MDgsOTEgKzM0MTUs OTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZp YyB7CisgICAvLyBQYWlyd2lzZSBhZGQKKyAKKyAgIGlubGluZSB2b2lkIGV4dEFkZFBhaXJ3aXNl SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0QWRkUGFpcndp c2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQxNng4KEZsb2F0 UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IC8vIEZsb2F0aW5nIHNxdWFyZSByb290CisgCisgICBpbmxpbmUgdm9pZCBzcXJ0RmxvYXQzMng0 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3FydEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIC8vIEludGVnZXIgdG8gZmxvYXRpbmcgcG9pbnQgd2l0aCByb3VuZGluZworIAorICAgaW5s aW5lIHZvaWQgY29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGlu ZSB2b2lkIHVuc2lnbmVkQ29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNy YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5l IHZvaWQgY29udmVydEludDMyeDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2 b2lkIHVuc2lnbmVkQ29udmVydEludDMyeDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gRmxvYXRp bmcgcG9pbnQgdG8gaW50ZWdlciB3aXRoIHNhdHVyYXRpb24KKyAKKyAgIGlubGluZSB2b2lkIHRy dW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5z aWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHRlbXApCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVu c2lnbmVkVHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKGFy bTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4 NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKQorLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNTYXRGbG9h dDY0eDJUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0 ZW1wKQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHRydW5j RmxvYXQzMng0VG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCist ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRUcnVu Y0Zsb2F0MzJ4NFRvSW50MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdHJ1 bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFRy dW5jRmxvYXQ2NHgyVG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBGbG9hdGluZyBw b2ludCBuYXJyb3dpbmcKKyAKKyAgIGlubGluZSB2b2lkIGNvbnZlcnRGbG9hdDY0eDJUb0Zsb2F0 MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEZsb2F0aW5nIHBvaW50IHdpZGVuaW5nCisgCisgICBp bmxpbmUgdm9pZCBjb252ZXJ0RmxvYXQzMng0VG9GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAv LyBJbnRlZ2VyIHRvIGludGVnZXIgbmFycm93aW5nCisgCitAQCAtMzUwMCw2NSArMzUwNyw2NSBA QCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgbmFycm93SW50MTZ4OChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRO YXJyb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE5hcnJv d0ludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBuYXJyb3dJbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwor IAorICAgaW5saW5lIHZvaWQgbmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWROYXJyb3dJbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE5hcnJvd0ludDMyeDQoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICAvLyBJbnRlZ2VyIHRvIGludGVnZXIgd2lkZW5pbmcKKyAKKyAgIGlubGluZSB2b2lk IHdpZGVuTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHdpZGVuSGlnaElu dDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuTG93SW50OHgx NihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkV2lkZW5IaWdoSW50OHgxNihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHdpZGVuTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIHdpZGVuSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCB1bnNpZ25lZFdpZGVuTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IHVuc2lnbmVkV2lkZW5IaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHdp ZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkV2lkZW5M b3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgd2lkZW5IaWdoSW50MzJ4NChG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkV2lkZW5IaWdoSW50MzJ4NChGbG9h dFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIC8vIENvbXBhcmUtYmFzZWQgbWluaW11bS9tYXhpbXVtCisgICAvLworQEAg LTM1NzAsNDcgKzM1NzcsNDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICBpbmxpbmUgdm9pZCBwc2V1ZG9NaW5GbG9hdDMyeDQo RmxvYXRSZWdpc3RlciByaHNPclJoc0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOworIAorICAgaW5saW5lIHZvaWQgcHNldWRvTWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAg aW5saW5lIHZvaWQgcHNldWRvTWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JM aHNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHBz ZXVkb01pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHBzZXVkb01heEZsb2F0 MzJ4NChGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBwc2V1ZG9NYXhGbG9hdDMyeDQoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Cisg CisgICBpbmxpbmUgdm9pZCBwc2V1ZG9NYXhGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciByaHNPclJo c0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBs aHNPckxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgcHNldWRvTWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gV2lkZW5pbmcvcGFpcndpc2Ug aW50ZWdlciBkb3QgcHJvZHVjdAorIAorICAgaW5saW5lIHZvaWQgd2lkZW5Eb3RJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg d2lkZW5Eb3RJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJo cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBkb3RJbnQ4eDE2SW50N3gx NihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZG90SW50OHgxNkludDd4MTZUaGVuQWRkKEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCitAQCAtMzYxOCw4MSArMzYyNSw4 MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKKyAKKyAgIGlubGluZSB2b2lkIGRvdEludDh4MTZJbnQ3eDE2VGhlbkFkZChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXApCistICAg ICAgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwor IAorICAgLy8gRmxvYXRpbmcgcG9pbnQgcm91bmRpbmcKKyAKKyAgIGlubGluZSB2b2lkIGNlaWxG bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBjZWlsRmxvYXQ2NHgyKEZsb2F0 UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOworIAorICAgaW5saW5lIHZvaWQgZmxvb3JGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCBmbG9vckZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHRy dW5jRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdHJ1bmNGbG9hdDY0eDIo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBuZWFyZXN0RmxvYXQzMng0KEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgbmVhcmVzdEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEZs b2F0aW5nIG11bHRpcGx5LWFjY3VtdWxhdGU6IHNyY0Rlc3QgWystXT0gc3JjMSAqIHNyYzIKKyAK KyAgIGlubGluZSB2b2lkIGZtYUZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVn aXN0ZXIgc3JjMiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNy Y0Rlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZm5tYUZsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIGZtYUZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVn aXN0ZXIgc3JjMiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNy Y0Rlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZm5tYUZsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIG1pbkZsb2F0MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgc3JjRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCBtaW5GbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IG1heEZsb2F0MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgc3Jj RGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhG bG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1pbkZsb2F0NjR4MlJl bGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5GbG9hdDY0eDJSZWxheGVk KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIHExNU11bHJJbnQxNng4UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgcHVibGlj OgorICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtMzcxNywxMCArMzcyNCwxMCBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAKKyAgIC8v IHRlbXAgcmVxdWlyZWQgb24geDg2IGFuZCB4NjQ7IG11c3QgYmUgdW5kZWZpbmVkIG9uIG1pcHM2 NCBhbmQgbG9vbmc2NC4KKyAgIHZvaWQgY29udmVydFVJbnQ2NFRvRmxvYXQzMihSZWdpc3RlcjY0 IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0LCBSZWdpc3RlciB0ZW1wKQorLSAgICAgIERFRklORURf T04oYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCB4NjQsIHg4Nik7Cisr ICAgICAgREVGSU5FRF9PTihhcm02NCwgbWlwczY0LCBsb29uZzY0LCBwcGM2NCwgcmlzY3Y2NCwg d2FzbTMyLCB4NjQsIHg4Nik7CisgCisgICB2b2lkIGNvbnZlcnRJbnQ2NFRvRmxvYXQzMihSZWdp c3RlcjY0IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oYXJtNjQs IG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCB4NjQsIHg4Nik7CisrICAgICAgREVG SU5FRF9PTihhcm02NCwgbWlwczY0LCBsb29uZzY0LCBwcGM2NCwgcmlzY3Y2NCwgd2FzbTMyLCB4 NjQsIHg4Nik7CisgCisgICBib29sIGNvbnZlcnRVSW50NjRUb0RvdWJsZU5lZWRzVGVtcCgpIFBF Ul9BUkNIOworIAorQEAgLTM4MDEsMTYgKzM4MDgsMTYgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIg OiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBTY2FsYXI6OkludDY0Lgor ICAgdm9pZCB3YXNtTG9hZChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJl Z2lzdGVyIG1lbW9yeUJhc2UsCisgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0 ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURfT04oYXJt LCBsb29uZzY0LCByaXNjdjY0LCBtaXBzNjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBsb29u ZzY0LCByaXNjdjY0LCBtaXBzNjQsIHBwYzY0KTsKKyAgIHZvaWQgd2FzbUxvYWRJNjQoY29uc3Qg d2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBtZW1vcnlCYXNlLAorICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIFJlZ2lz dGVyNjQgb3V0cHV0KQorLSAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQs IHBwYzY0KTsKKyAgIHZvaWQgd2FzbVN0b3JlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2Mm IGFjY2VzcywgQW55UmVnaXN0ZXIgdmFsdWUsCisgICAgICAgICAgICAgICAgICBSZWdpc3RlciBt ZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gpCistICAgICAgREVG SU5FRF9PTihhcm0sIGxvb25nNjQsIHJpc2N2NjQsIG1pcHM2NCk7CisrICAgICAgREVGSU5FRF9P Tihhcm0sIGxvb25nNjQsIHJpc2N2NjQsIG1pcHM2NCwgcHBjNjQpOworICAgdm9pZCB3YXNtU3Rv cmVJNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlcjY0IHZh bHVlLAorICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIg cHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKQorLSAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQsIGxvb25n NjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIFRoZXNlIGFjY2VwdCBnZW5lcmFsIG1lbW9y eUJhc2UgKyBwdHIgKyBvZmZzZXQgKGluIGBhY2Nlc3NgKTsgdGhlIG9mZnNldCBpcworICAgLy8g YWx3YXlzIHNtYWxsZXIgdGhhbiB0aGUgZ3VhcmQgcmVnaW9uLiAgVGhleSB3aWxsIGluc2VydCBh biBhZGRpdGlvbmFsIGFkZAorQEAgLTM4ODksMTEgKzM4OTYsMTEgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lkIHdhc21UcnVu Y2F0ZURvdWJsZVRvSW50NjQoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsIExh YmVsKiBvb2xFbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog b29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpCistICAgICAgREVGSU5FRF9PTihh cm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKKysgICAg ICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3 YXNtMzIsIHBwYzY0KTsKKyAgIHZvaWQgd2FzbVRydW5jYXRlRG91YmxlVG9VSW50NjQoRmxvYXRS ZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0 ZXIgdGVtcERvdWJsZSkKKy0gICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHg4 NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOworICAgdm9p ZCBvb2xXYXNtVHJ1bmNhdGVDaGVja0Y2NFRvSTY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lz dGVyNjQgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydW5j RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg d2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsCitAQCAtMzkwMiwxMSArMzkwOSwxMSBA QCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsK KyAgIHZvaWQgd2FzbVRydW5jYXRlRmxvYXQzMlRvSW50NjQoRmxvYXRSZWdpc3RlciBpbnB1dCwg UmVnaXN0ZXI2NCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkK Ky0gICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNj djY0LCB3YXNtMzIpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOworICAgdm9pZCB3YXNtVHJ1bmNhdGVG bG9hdDMyVG9VSW50NjQoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywgTGFi ZWwqIG9vbEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IG9vbFJlam9pbiwgRmxvYXRSZWdpc3RlciB0ZW1wRG91YmxlKQorLSAgICAgIERFRklORURfT04o YXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7CisrICAg ICAgREVGSU5FRF9PTihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwg d2FzbTMyLCBwcGM2NCk7CisgICB2b2lkIG9vbFdhc21UcnVuY2F0ZUNoZWNrRjMyVG9JNjQoRmxv YXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVHJ1bmNGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpUcmFwU2l0ZURlc2MmIHRyYXBTaXRlRGVzYywK K0BAIC00MjIwLDcgKzQyMjcsOCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNy b0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIGNvbnZlbnRpb24sIHdoaWNoIHJlcXVpcmVzIHBy ZWRpY3RhYmxlIGhpZ2ggYml0cy4gIEluIHByYWN0aWNlLCB0aGlzIG1lYW5zCisgICAvLyB0aGF0 IHRoZSAzMi1iaXQgdmFsdWUgd2lsbCBiZSB6ZXJvLWV4dGVuZGVkIG9yIHNpZ24tZXh0ZW5kZWQg dG8gNjQgYml0cyBhcworICAgLy8gYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybS4KKy0gIHZv aWQgd2lkZW5JbnQzMihSZWdpc3RlciByKSBERUZJTkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCk7CisrICB2b2lkIHdpZGVuSW50MzIoUmVnaXN0ZXIgcikKKysgICAg ICBERUZJTkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQp OworIAorICAgLy8gQXMgZW50ZXJGYWtlRXhpdEZyYW1lKCksIGJ1dCB1c2luZyByZWdpc3RlciBj b252ZW50aW9ucyBhcHByb3ByaWF0ZSBmb3IKKyAgIC8vIHdhc20gc3R1YnMuCitAQCAtNDI4Nywx MyArNDI5NSwxMyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxl clNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwg UmVnaXN0ZXIgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByZXBs YWNlbWVudCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0g ICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgY29tcGFy ZUV4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBleHBlY3Rl ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3Rl ciB2YWx1ZVRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1w LCBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURfT04o bWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8geDg2OiBgZXhwZWN0ZWRgIGFuZCBgb3V0 cHV0YCBtdXN0IGJlIGVkeDplYXg7IGByZXBsYWNlbWVudGAgaXMgZWN4OmVieC4KKyAgIC8vIHg2 NDogYG91dHB1dGAgbXVzdCBiZSByYXguCitAQCAtNDMwMywxMiArNDMxMSwxMiBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIHZvaWQg Y29tcGFyZUV4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1l bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBleHBlY3RlZCwgUmVnaXN0 ZXI2NCByZXBsYWNlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBv dXRwdXQpCistICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBs b29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2 LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgY29tcGFyZUV4 Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGV4cGVjdGVkLCBSZWdpc3RlcjY0IHJl cGxhY2VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkK Ky0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8gRXhjaGFuZ2Ugd2l0aCBtZW1v cnkuICBSZXR1cm4gdGhlIHZhbHVlIGluaXRpYWxseSBpbiBtZW1vcnkuCisgICAvLyBNSVBTOiBg dmFsdWVUZW1wYCwgYG9mZnNldFRlbXBgIGFuZCBgbWFza1RlbXBgIG11c3QgYmUgZGVmaW5lZCBm b3IgOC1iaXQKK0BAIC00MzI1LDEyICs0MzMzLDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCBhdG9taWNFeGNoYW5nZShT Y2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVl VGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5 cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC YXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAs IFJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlz Y3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0 KTsKKyAKKyAgIC8vIHg4NjogYHZhbHVlYCBtdXN0IGJlIGVjeDplYng7IGBvdXRwdXRgIG11c3Qg YmUgZWR4OmVheC4KKyAgIC8vIEFSTTogYHZhbHVlYCBhbmQgYG91dHB1dGAgbXVzdCBiZSBkaXN0 aW5jdCBhbmQgKGV2ZW4sb2RkKSBwYWlycy4KK0BAIC00MzM4LDExICs0MzQ2LDExIEBAIGNsYXNz IE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworIAorICAg dm9pZCBhdG9taWNFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBBZGRyZXNz JiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0 ZXI2NCBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlw czY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2 NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRv bWljRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgQmFzZUluZGV4JiBtZW0s CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0ZXI2NCBv dXRwdXQpCistICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBs b29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2 LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIFJlYWQtbW9kaWZ5 LXdyaXRlIHdpdGggbWVtb3J5LiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBtZW1vcnkgYmVmb3JlIHRo ZQorICAgLy8gb3BlcmF0aW9uLgorQEAgLTQzNzYsMTIgKzQzODQsMTIgQEAgY2xhc3MgTWFjcm9B c3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lkIGF0b21p Y0ZldGNoT3AoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNP cCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVz cyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0gICAg ICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9P TihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRmV0 Y2hPcChTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9w LAorICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgm IG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCistICAgICAg REVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04o bWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyB4ODY6CisgICAvLyAg IGB0ZW1wYCBtdXN0IGJlIGVjeDplYng7IGBvdXRwdXRgIG11c3QgYmUgZWR4OmVheC4KK0BAIC00 Mzk1LDcgKzQ0MDMsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKKyAKKyAgIHZvaWQgYXRvbWljRmV0Y2hPcDY0KFN5bmNocm9uaXphdGlv biBzeW5jLCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91 dHB1dCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgbWlwczY0LCBs b29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0ZldGNoT3A2NChTeW5j aHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIGNvbnN0IEFkZHJlc3MmIHZhbHVlLAorICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlcjY0IHRlbXAs IFJlZ2lzdGVyNjQgb3V0cHV0KQorQEAgLTQ0MDMsNyArNDQxMSw3IEBAIGNsYXNzIE1hY3JvQXNz ZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworIAorICAgdm9pZCBhdG9t aWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3RlcjY0 IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJl Z2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihhcm0s IGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9P Tihhcm0sIGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAor ICAgdm9pZCBhdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9w LCBjb25zdCBBZGRyZXNzJiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJh c2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KQorQEAgLTQ0 MjEsMTQgKzQ0MjksMTQgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7CisgCisgICB2b2lkIGF0b21pY0VmZmVjdE9wNjQoU3luY2hyb25pemF0 aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3RlcjY0IHZhbHVlLAorICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wKQorLSAgICAgIERF RklORURfT04oYXJtLCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBE RUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwor IAorICAgdm9pZCBhdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNP cCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC YXNlSW5kZXgmIG1lbSkgREVGSU5FRF9PTih4NjQpOworIAorICAgdm9pZCBhdG9taWNFZmZlY3RP cDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXI2 NCB0ZW1wKQorLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCBy aXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwg cmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8gNjQtYml0IGF0b21pYyBsb2FkLiBPbiA2NC1iaXQg c3lzdGVtcywgdXNlIHJlZ3VsYXIgbG9hZCB3aXRoCisgICAvLyBTeW5jaHJvbml6YXRpb246Okxv YWQsIG5vdCB0aGlzIG1ldGhvZC4KK0BAIC00NDgxLDE0ICs0NDg5LDE0IEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0 KQorLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBE RUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCB3 YXNtQ29tcGFyZUV4Y2hhbmdlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0 ZXIgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFj ZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxv b25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0LCBwcGM2NCk7CisgCisgICB2b2lkIHdhc21BdG9taWNFeGNoYW5nZShjb25zdCB3YXNtOjpN ZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciBvdXRwdXQpCitAQCAtNDUw MiwxMyArNDUxMCwxMyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3Mm IG1lbSwgUmVnaXN0ZXIgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCB3YXNtQXRvbWljRXhjaGFuZ2Uo Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1w LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVy IG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Cisr ICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAg IHZvaWQgd2FzbUF0b21pY0ZldGNoT3AoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNj ZXNzLCBBdG9taWNPcCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFs dWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdGVtcCwKK0BAIC00NTI5LDEzICs0NTM3 LDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lm aWMgeworICAgdm9pZCB3YXNtQXRvbWljRmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NE ZXNjJiBhY2Nlc3MsIEF0b21pY09wIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KQorKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0LCBwcGM2NCk7CisgCisgICB2b2lkIHdhc21BdG9taWNGZXRjaE9wKGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Agb3AsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0 cHV0KQorLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAg ICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8g UmVhZC1tb2RpZnktd3JpdGUgd2l0aCBtZW1vcnkuICBSZXR1cm4gbm8gdmFsdWUuCisgICAvLwor QEAgLTQ1NjIsMTMgKzQ1NzEsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFj cm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApCistICAgICAgREVGSU5FRF9PTihtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCBy aXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIHdhc21BdG9taWNFZmZlY3RPcChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEF0b21pY09wIG9wLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRU ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApCistICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyA2NC1iaXQgd2lk ZSBvcGVyYXRpb25zLgorIAorQEAgLTQ2MjYsMTIgKzQ2MzUsMTIgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lkIHdhc21BdG9t aWNGZXRjaE9wNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNP cCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25z dCBBZGRyZXNzJiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0 ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1p cHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgeDY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJt NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHg2NCk7CisgCisgICB2b2lkIHdh c21BdG9taWNGZXRjaE9wNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBB dG9taWNPcCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVl LCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KQorLSAgICAgIERFRklORURfT04oYXJtLCBh cm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB4NjQpOworKyAgICAgIERFRklORURfT04o YXJtLCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgeDY0KTsKKyAKKyAg IHZvaWQgd2FzbUF0b21pY0ZldGNoT3A2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBh Y2Nlc3MsIEF0b21pY09wIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFk ZHJlc3MmIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCitAQCAtNDY4NCwxNCArNDY5MywxNCBA QCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQsIFJlZ2lzdGVy IHZhbHVlVGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgY29tcGFyZUV4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFy cmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBleHBlY3RlZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFz a1RlbXAsIFJlZ2lzdGVyIHRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lz dGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7 CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAK KyAgIHZvaWQgYXRvbWljRXhjaGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJv bml6YXRpb24gc3luYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBt ZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB0ZW1wLAorQEAgLTQ3MDUsMTMgKzQ3MTQsMTMg QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2 YWx1ZSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAorICAgICAg ICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09O KG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxv b25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRXhjaGFuZ2VKUyhTY2Fs YXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1w LAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0 ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25n NjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0 LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlU eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0b21p Y09wIG9wLCBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAorQEAgLTQ3MzcsMTMg KzQ3NDYsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJT cGVjaWZpYyB7CisgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIg dmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQp CistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERF RklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0 b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3lu YywKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwg Y29uc3QgQmFzZUluZGV4JiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2 YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KQorLSAg ICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVE X09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCBhdG9taWNF ZmZlY3RPcEpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAor ICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwgY29u c3QgQWRkcmVzcyYgbWVtLAorQEAgLTQ3NjQsMTIgKzQ3NzMsMTQgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lkIGF0b21pY0Vm ZmVjdE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLCBjb25z dCBBZGRyZXNzJiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVU ZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIG1hc2tUZW1wKSBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApCisrICAgICAgREVGSU5FRF9P TihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRWZm ZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0 IEJhc2VJbmRleCYgbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVl VGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKy0gICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBtYXNrVGVtcCkgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKQorKyAgICAgIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0lz TG9ja0ZyZWVKUyhSZWdpc3RlciB2YWx1ZSwgUmVnaXN0ZXIgb3V0cHV0KTsKKyAKK0BAIC01OTI4 LDcgKzU5MzksNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxl clNwZWNpZmljIHsKKyAgIGlubGluZSB2b2lkIGFkZFN0YWNrUHRyVG8oVCB0KTsKKyAKKyAgIHZv aWQgc3ViRnJvbVN0YWNrUHRyKEltbTMyIGltbTMyKQorLSAgICAgIERFRklORURfT04obWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIsIGFybSwgeDg2LCB4NjQpOworKyAgICAgIERFRklO RURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgd2FzbTMyLCBhcm0sIHg4Niwg eDY0KTsKKyAgIHZvaWQgc3ViRnJvbVN0YWNrUHRyKFJlZ2lzdGVyIHJlZyk7CisgCisgICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L01vdmVFbWl0dGVyLmgg Yi9qcy9zcmMvaml0L01vdmVFbWl0dGVyLmgKK2luZGV4IDY0MjgyOWMwNzBkNi4uM2E4ODNjNTk2 Y2EwIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9Nb3ZlRW1pdHRlci5oCisrKysgYi9qcy9zcmMv aml0L01vdmVFbWl0dGVyLmgKK0BAIC0xNyw2ICsxNyw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xv b25nNjQvTW92ZUVtaXR0ZXItbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L01vdmVFbWl0dGVyLXJpc2N2NjQuaCIK KysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3BwYzY0 L01vdmVFbWl0dGVyLXBwYzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikK KyAjICBpbmNsdWRlICJqaXQvd2FzbTMyL01vdmVFbWl0dGVyLXdhc20zMi5oIgorICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTW92ZVJlc29s dmVyLmNwcCBiL2pzL3NyYy9qaXQvTW92ZVJlc29sdmVyLmNwcAoraW5kZXggZDJlMWYxMjcwMGJk Li44ZTYyMjQwN2EwYTggMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAK KysrKyBiL2pzL3NyYy9qaXQvTW92ZVJlc29sdmVyLmNwcAorQEAgLTU3LDYgKzU3LDIyIEBAIGJv b2wgTW92ZVJlc29sdmVyOjphZGRNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBN b3ZlT3BlcmFuZCYgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZU9wOjpUeXBl IHR5cGUpIHsKKyAgIC8vIEFzc2VydCB0aGF0IHdlJ3JlIG5vdCBkb2luZyBuby1vcCBtb3Zlcy4K KyAgIE1PWl9BU1NFUlQoIShmcm9tID09IHRvKSk7CisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQK KysgIC8vIFBQQzY0IEZsb2F0UmVnaXN0ZXJzIGV4cG9zZSBTaW5nbGUvRG91YmxlIGtpbmRzIHRo YXQgaGF2ZSBkaXN0aW5jdCBjb2RlKCkKKysgIC8vIHZhbHVlcyBidXQgc2hhcmUgb25lIHBoeXNp Y2FsIHJlZ2lzdGVyLiBUaGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbiBlbWl0IGEKKysgIC8vIG1v dmUgYmV0d2VlbiB0d28gc3VjaCBraW5kLXZpZXdzIG9mIHRoZSBzYW1lIEZQUiAoZS5nLiBmMi1E b3VibGUgdG8KKysgIC8vIGYyLVNpbmdsZSk7IHRoZXNlIGFyZSBuby1vcHMgb24gdGhlIGhhcmR3 YXJlLCBhcmUgbm90IGNhdWdodCBieSB0aGUKKysgIC8vIChmcm9tID09IHRvKSBhc3NlcnQgYWJv dmUsIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpcCB0aGUKKysgIC8vICFmcm9tKCkuYWxpYXNlcyh0 bygpKSBpbnZhcmlhbnQgdGhlIHJlc29sdmVyIHJlbGllcyBvbiBsYXRlci4gRHJvcCB0aGVtLgor KyAgLy8KKysgIC8vIFRoaXMgd291bGQgYmUgY29ycmVjdCBmb3IgYW55IGJhY2tlbmQgd2hvc2Ug RmxvYXRSZWdpc3RlciBoYXMgbXVsdGlwbGUKKysgIC8vIGtpbmRzIGFsaWFzaW5nIG9uZSBwaHlz aWNhbCByZWdpc3RlciwgYW5kIGNvdWxkIGJlIHVuLWdhdGVkIGlmIGFub3RoZXIKKysgIC8vIHN1 Y2ggYmFja2VuZCBuZWVkcyBpdCwgYnV0IGl0IGlzIHNjb3BlZCB0byBQUEM2NCBzbyBtb3ZlIHJl c29sdXRpb24gb24KKysgIC8vIHRpZXItMSBwbGF0Zm9ybXMgaXMgbGVmdCB1bmNoYW5nZWQuCisr ICBpZiAoZnJvbS5hbGlhc2VzKHRvKSkgeworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysjZW5k aWYKKyAgIFBlbmRpbmdNb3ZlKiBwbSA9IG1vdmVQb29sXy5hbGxvY2F0ZShmcm9tLCB0bywgdHlw ZSk7CisgICBpZiAoIXBtKSB7CisgICAgIHJldHVybiBmYWxzZTsKK2RpZmYgLS1naXQgYS9qcy9z cmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmggYi9qcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9y LmgKK2luZGV4IGVkYTk5MzNmNjMyMi4uNDJlNDgxMTEwNDZhIDEwMDY0NAorLS0tIGEvanMvc3Jj L2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCisrKysgYi9qcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2Nh dG9yLmgKK0BAIC0yNjIsOSArMjYyLDEwIEBAIGNsYXNzIFJlZ2lzdGVyQWxsb2NhdG9yIHsKKyAg cHVibGljOgorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRha2VhYmxlU2V0PgorICAgc3RhdGljIHZv aWQgdGFrZVdhc21SZWdpc3RlcnMoVGFrZWFibGVTZXQmIHJlZ3MpIHsKKy0jaWYgZGVmaW5lZChK U19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgICAgICBcCistICAg IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkg fHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk0pIHx8ICAgICAgICAgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAgIFwKKysgICAgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCisrICAg IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgICAgcmVncy50YWtlKEhlYXBSZWcpOworICNl bmRpZgorICAgICBNT1pfQVNTRVJUKCFyZWdzLmhhcyhGcmFtZVBvaW50ZXIpKTsKK2RpZmYgLS1n aXQgYS9qcy9zcmMvaml0L1JlZ2lzdGVycy5oIGIvanMvc3JjL2ppdC9SZWdpc3RlcnMuaAoraW5k ZXggZTBkMDJlMmZiNjBkLi40MjM3NzdjZTM4Y2QgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L1Jl Z2lzdGVycy5oCisrKysgYi9qcy9zcmMvaml0L1JlZ2lzdGVycy5oCitAQCAtMjAsNiArMjAsOCBA QAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0L0FyY2hpdGVjdHVyZS1sb29uZzY0LmgiCisgI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQv QXJjaGl0ZWN0dXJlLXJpc2N2NjQuaCIKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp CisrIyAgaW5jbHVkZSAiaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oIgorICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgaW5jbHVkZSAiaml0L3dhc20zMi9BcmNoaXRl Y3R1cmUtd2FzbTMyLmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCitkaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC9TYWZlcG9pbnRzLmNwcCBiL2pzL3NyYy9qaXQvU2FmZXBvaW50cy5j cHAKK2luZGV4IDQyZTMwNWYwNTNhZi4uOGUzYTI1YzNjNWZmIDEwMDY0NAorLS0tIGEvanMvc3Jj L2ppdC9TYWZlcG9pbnRzLmNwcAorKysrIGIvanMvc3JjL2ppdC9TYWZlcG9pbnRzLmNwcAorQEAg LTYzLDYgKzYzLDExIEBAIHN0YXRpYyB2b2lkIFdyaXRlRmxvYXRSZWdpc3Rlck1hc2soQ29tcGFj dEJ1ZmZlcldyaXRlciYgc3RyZWFtLAorICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkNjQoYml0 cy5sb3coKSk7CisgICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWQ2NChiaXRzLmhpZ2goKSk7Cisg ICAgICAgYnJlYWs7CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgICBjYXNl IDE2OgorKyAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkNjQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+ KGJpdHMpKTsKKysgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZDY0KHN0YXRpY19jYXN0PHVpbnQ2 NF90PihiaXRzID4+IDY0KSk7CisrICAgICAgYnJlYWs7CisgI2Vsc2UKKyAgICAgY2FzZSAxOgor ICAgICAgIHN0cmVhbS53cml0ZUJ5dGUoYml0cyk7CitAQCAtODgsNiArOTMsMTIgQEAgc3RhdGlj IEZsb2F0UmVnaXN0ZXJzOjpTZXRUeXBlIFJlYWRGbG9hdFJlZ2lzdGVyTWFzaygKKyAgICAgICB1 aW50NjRfdCBoaWdoID0gc3RyZWFtLnJlYWRVbnNpZ25lZDY0KCk7CisgICAgICAgcmV0dXJuIEJp dHNldDEyOChoaWdoLCBsb3cpOworICAgICB9CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQorKyAgICBjYXNlIDE2OiB7CisrICAgICAgdWludDY0X3QgbG93ID0gc3RyZWFtLnJlYWRV bnNpZ25lZDY0KCk7CisrICAgICAgdWludDY0X3QgaGlnaCA9IHN0cmVhbS5yZWFkVW5zaWduZWQ2 NCgpOworKyAgICAgIHJldHVybiBGbG9hdFJlZ2lzdGVyczo6U2V0VHlwZShoaWdoKSA8PCA2NCB8 IEZsb2F0UmVnaXN0ZXJzOjpTZXRUeXBlKGxvdyk7CisrICAgIH0KKyAjZWxzZQorICAgICBjYXNl IDE6CisgICAgICAgcmV0dXJuIHN0cmVhbS5yZWFkQnl0ZSgpOworZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlubC5oIGIvanMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMt aW5sLmgKK2luZGV4IGVlZGNjYzgzMTczMi4uMTAwNWIxNDBmMWRmIDEwMDY0NAorLS0tIGEvanMv c3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMtaW5sLmgKKysrKyBiL2pzL3NyYy9qaXQvU2hhcmVkSUNI ZWxwZXJzLWlubC5oCitAQCAtMTksNiArMTksOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0 L1NoYXJlZElDSGVscGVycy1sb29uZzY0LWlubC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L1NoYXJlZElDSGVscGVycy1yaXNj djY0LWlubC5oIgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysjICBpbmNsdWRl ICJqaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oIgorICNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgaW5jbHVkZSAiaml0L3dhc20zMi9TaGFyZWRJQ0hlbHBl cnMtd2FzbTMyLWlubC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLmggYi9qcy9zcmMvaml0L1NoYXJlZElD SGVscGVycy5oCitpbmRleCAxZWJkNjFlNDQ1MDkuLmYyNzAzYzZmOTg2YyAxMDA2NDQKKy0tLSBh L2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLmgKKysrKyBiL2pzL3NyYy9qaXQvU2hhcmVkSUNI ZWxwZXJzLmgKK0BAIC0xOSw2ICsxOSw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvU2hh cmVkSUNIZWxwZXJzLWxvb25nNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2 NCkKKyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9TaGFyZWRJQ0hlbHBlcnMtcmlzY3Y2NC5oIgor KyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysjICBpbmNsdWRlICJqaXQvcHBjNjQv U2hhcmVkSUNIZWxwZXJzLXBwYzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00z MikKKyAjICBpbmNsdWRlICJqaXQvd2FzbTMyL1NoYXJlZElDSGVscGVycy13YXNtMzIuaCIKKyAj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L1No YXJlZElDUmVnaXN0ZXJzLmggYi9qcy9zcmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgKK2luZGV4 IGMzYWI4NmJmMGE4Mi4uNWIyNzBkMGMxNjZhIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9TaGFy ZWRJQ1JlZ2lzdGVycy5oCisrKysgYi9qcy9zcmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgKK0BA IC0xOSw2ICsxOSw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvU2hhcmVkSUNSZWdpc3Rl cnMtbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGlu Y2x1ZGUgImppdC9yaXNjdjY0L1NoYXJlZElDUmVnaXN0ZXJzLXJpc2N2NjQuaCIKKysjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElD UmVnaXN0ZXJzLXBwYzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKKyAj ICBpbmNsdWRlICJqaXQvd2FzbTMyL1NoYXJlZElDUmVnaXN0ZXJzLXdhc20zMi5oIgorICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvU2ltdWxh dG9yLmggYi9qcy9zcmMvaml0L1NpbXVsYXRvci5oCitpbmRleCAzOTUwMzcxNmYxMGQuLjlmNjBi YWY1MzE5OCAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvU2ltdWxhdG9yLmgKKysrKyBiL2pzL3Ny Yy9qaXQvU2ltdWxhdG9yLmgKK0BAIC0xNSw2ICsxNSw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xv b25nNjQvU2ltdWxhdG9yLWxvb25nNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9S SVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L1NpbXVsYXRvci1yaXNjdjY0LmgiCisr I2VsaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3BwYzY0 L1NpbXVsYXRvci1wcGM2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfU0lNVUxBVE9SKQorICMgIGVy cm9yICJVbmV4cGVjdGVkIHNpbXVsYXRvciBwbGF0Zm9ybSIKKyAjZW5kaWYKK2RpZmYgLS1naXQg YS9qcy9zcmMvaml0L21vei5idWlsZCBiL2pzL3NyYy9qaXQvbW96LmJ1aWxkCitpbmRleCA1YjVk ZjNlNWI3YjIuLjM2ZWY2NWQ2MjIxYSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvbW96LmJ1aWxk CisrKysgYi9qcy9zcmMvaml0L21vei5idWlsZAorQEAgLTIyOCw2ICsyMjgsMTggQEAgZWxpZiBD T05GSUdbIkpTX0NPREVHRU5fTE9PTkc2NCJdOgorICAgICBdCisgICAgIGlmIENPTkZJR1siSlNf U0lNVUxBVE9SX0xPT05HNjQiXToKKyAgICAgICAgIFVOSUZJRURfU09VUkNFUyArPSBbImxvb25n NjQvU2ltdWxhdG9yLWxvb25nNjQuY3BwIl0KKytlbGlmIENPTkZJR1siSlNfQ09ERUdFTl9QUEM2 NCJdOgorKyAgICBVTklGSUVEX1NPVVJDRVMgKz0gWworKyAgICAgICAgInBwYzY0L0FyY2hpdGVj dHVyZS1wcGM2NC5jcHAiLAorKyAgICAgICAgInBwYzY0L0Fzc2VtYmxlci1wcGM2NC5jcHAiLAor KyAgICAgICAgInBwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwIiwKKysgICAgICAgICJwcGM2 NC9Mb3dlcmluZy1wcGM2NC5jcHAiLAorKyAgICAgICAgInBwYzY0L01hY3JvQXNzZW1ibGVyLXBw YzY0LmNwcCIsCisrICAgICAgICAicHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuY3BwIiwKKysgICAg ICAgICJwcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcCIsCisrICAgIF0KKysgICAgaWYgQ09ORklH WyJKU19TSU1VTEFUT1JfUFBDNjQiXToKKysgICAgICAgIFVOSUZJRURfU09VUkNFUyArPSBbInBw YzY0L1NpbXVsYXRvci1wcGM2NC5jcHAiXQorIGVsaWYgQ09ORklHWyJKU19DT0RFR0VOX1JJU0NW NjQiXToKKyAgICAgVU5JRklFRF9TT1VSQ0VTICs9IFsKKyAgICAgICAgICJyaXNjdjY0L0FyY2hp dGVjdHVyZS1yaXNjdjY0LmNwcCIsCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9BcmNo aXRlY3R1cmUtcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQu Y3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi41NjMyODY1NTU2 YWMKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBw YzY0LmNwcAorQEAgLTAsMCArMSwyMjEgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6 IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmlt OiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9y bSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNl bnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0 aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9y Zy9NUEwvMi4wLy4gKi8KKysKKysjaW5jbHVkZSAiaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2 NC5oIgorKworKyNpZm5kZWYgSlNfU0lNVUxBVE9SCisrIyAgaW5jbHVkZSA8c3lzL2F1eHYuaD4K KysjZW5kaWYKKysKKysjaW5jbHVkZSAiaml0L0ZsdXNoSUNhY2hlLmgiICAvLyBqczo6aml0OjpG bHVzaElDYWNoZQorKyNpbmNsdWRlICJqaXQvUmVnaXN0ZXJTZXRzLmgiCisrCisrbmFtZXNwYWNl IGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKytSZWdpc3RlcnM6OkNvZGUgUmVnaXN0ZXJzOjpG cm9tTmFtZShjb25zdCBjaGFyKiBuYW1lKSB7CisrICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFRv dGFsOyBpKyspIHsKKysgICAgaWYgKHN0cmNtcChHZXROYW1lKGkpLCBuYW1lKSA9PSAwKSB7Cisr ICAgICAgcmV0dXJuIENvZGUoaSk7CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybiBJbnZhbGlk OworK30KKysKKytGbG9hdFJlZ2lzdGVyczo6Q29kZSBGbG9hdFJlZ2lzdGVyczo6RnJvbU5hbWUo Y29uc3QgY2hhciogbmFtZSkgeworKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBUb3RhbDsgaSsr KSB7CisrICAgIGlmIChzdHJjbXAoR2V0TmFtZShpKSwgbmFtZSkgPT0gMCkgeworKyAgICAgIHJl dHVybiBDb2RlKGkpOworKyAgICB9CisrICB9CisrCisrICByZXR1cm4gSW52YWxpZDsKKyt9Cisr CisrRmxvYXRSZWdpc3RlclNldCBGbG9hdFJlZ2lzdGVyOjpSZWR1Y2VTZXRGb3JQdXNoKGNvbnN0 IEZsb2F0UmVnaXN0ZXJTZXQmIHMpIHsKKysgIFNldFR5cGUgYWxsID0gcy5iaXRzKCk7CisrICBT ZXRUeXBlIHNpbWQxMjhTZXQgPQorKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0 ZXJzOjpTaW1kMTI4KSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpKSAmCisrICAgICAgRmxv YXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrOworKyAgU2V0VHlwZSBkb3VibGVTZXQgPQorKyAgICAg IChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3Rl cnM6OlRvdGFsUGh5cykpICYKKysgICAgICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Cisr ICBTZXRUeXBlIHNpbmdsZVNldCA9CisrICAgICAgKGFsbCA+PiAodWludDMyX3QoRmxvYXRSZWdp c3RlcnM6OlNpbmdsZSkgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgJgorKyAgICAgIEZs b2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzazsKKysKKysgIC8vIFNpbmdsZStEb3VibGUgc2hhcmUg cGh5c2ljYWwgRlBScyAocHVzaCBhcyBEb3VibGUsIDgtYnl0ZSBzbG90KTsKKysgIC8vIFNpbWQx MjggbGl2ZXMgaW4gaXRzIG93biBwaHlzaWNhbCBWUnMgKHB1c2ggYXMgU2ltZDEyOCwgMTYtYnl0 ZQorKyAgLy8gc2xvdCkuIERpZmZlcmVudCBwaHlzaWNhbCBwb29scyDigJQgbm8gZGVkdXAuIE5v dGUgdGhhdAorKyAgLy8gc2l6ZW9mKEZsb2F0UmVnaXN0ZXJzOjpSZWdpc3RlckNvbnRlbnQpIGlz IDggYnl0ZXMgKG5vIHYxMjggaW4gdGhlCisrICAvLyB1bmlvbiksIHNvIFJlZ2lzdGVyRHVtcDo6 RlBVQXJyYXkgaXMgMzIgw5cgOCA9IDI1NiBieXRlcywgbWF0Y2hpbmcKKysgIC8vIHRoZSBGbG9h dC1vbmx5IGxheW91dCBQdXNoUmVnc0luTWFzayBwcm9kdWNlcy4KKysgIFNldFR5cGUgc2V0NjQg PSBzaW5nbGVTZXQgfCBkb3VibGVTZXQ7CisrCisrICBTZXRUeXBlIHJlZHVjZWQgPQorKyAgICAg IChzaW1kMTI4U2V0IDw8ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgKgorKyAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgfAorKyAgICAg IChzZXQ2NCA8PCAodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OkRvdWJsZSkgKiBGbG9hdFJlZ2lz dGVyczo6VG90YWxQaHlzKSk7CisrICByZXR1cm4gRmxvYXRSZWdpc3RlclNldChyZWR1Y2VkKTsK Kyt9CisrCisrdWludDMyX3QgRmxvYXRSZWdpc3Rlcjo6R2V0UHVzaFNpemVJbkJ5dGVzKGNvbnN0 IEZsb2F0UmVnaXN0ZXJTZXQmIHMpIHsKKysgIFNldFR5cGUgYWxsID0gcy5iaXRzKCk7CisrICBT ZXRUeXBlIHNpbWQxMjhTZXQgPQorKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0 ZXJzOjpTaW1kMTI4KSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpKSAmCisrICAgICAgRmxv YXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrOworKyAgU2V0VHlwZSBkb3VibGVTZXQgPQorKyAgICAg IChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3Rl cnM6OlRvdGFsUGh5cykpICYKKysgICAgICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Cisr ICBTZXRUeXBlIHNpbmdsZVNldCA9CisrICAgICAgKGFsbCA+PiAodWludDMyX3QoRmxvYXRSZWdp c3RlcnM6OlNpbmdsZSkgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgJgorKyAgICAgIEZs b2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzazsKKysKKysgIC8vIE5hdHVyYWwgcGVyLWtpbmQgc2xv dCBzaXplcy4gU2VlIFJlZHVjZVNldEZvclB1c2ggY29tbWVudC4KKysgIFNldFR5cGUgc2V0NjQg PSBzaW5nbGVTZXQgfCBkb3VibGVTZXQ7CisrCisrICB1aW50MzJfdCBjb3VudDY0ID0gc3RkOjpw b3Bjb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2V0NjQpKTsKKysgIHVpbnQzMl90IGNvdW50 MTI4ID0gc3RkOjpwb3Bjb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2ltZDEyOFNldCkpOwor KworKyAgcmV0dXJuIGNvdW50NjQgKiBzaXplb2YoZG91YmxlKSArIGNvdW50MTI4ICogMTY7Cisr fQorKworK3VpbnQzMl90IEZsb2F0UmVnaXN0ZXI6OmdldFJlZ2lzdGVyRHVtcE9mZnNldEluQnl0 ZXMoKSB7CisrICAvLyBTaW1kMTI4IGVuY29kaW5nIGlzIDMyLTYzIOKAlCBtYXNrIGJhY2sgdG8g MC0zMSBmb3IgdGhlIEZQVUFycmF5LQorKyAgLy8gcmVsYXRpdmUgb2Zmc2V0LiAoRlBVQXJyYXkg aGFzIDMyIHNsb3RzOyBTaW1kMTI4IHNob3VsZCBuZXZlciBiZSBpbgorKyAgLy8gYSBTYWZlcG9p bnRTdGF0ZS9CYWlsb3V0U3RhdGUgYW55d2F5LikKKysgIHJldHVybiAoZW5jb2RpbmcoKSAmIDMx KSAqIHNpemVvZihGbG9hdFJlZ2lzdGVyczo6UmVnaXN0ZXJDb250ZW50KTsKKyt9CisrCisrc3Rh dGljIGJvb2wgc1BPV0VSOURldGVjdGVkID0gZmFsc2U7Cisrc3RhdGljIGJvb2wgc1BPV0VSMTBE ZXRlY3RlZCA9IGZhbHNlOworK3N0YXRpYyBib29sIHNDUFVGbGFnc0NvbXB1dGVkID0gZmFsc2U7 CisrCisrI2lmbmRlZiBKU19TSU1VTEFUT1IKKysvLyBDYWNoZSBsaW5lIHNpemVzLCBkZXRlY3Rl ZCBhdCBzdGFydHVwIGZyb20gRUxGIGF1eGlsaWFyeSB2ZWN0b3IuCisrLy8gRmFsbGJhY2sgdG8g MzIgYnl0ZXMgKHNhZmUgbWluaW11bSBwZXIgTHVhSklUL0xMVk0gY29tcGlsZXItcnQpLgorK3N0 YXRpYyBzaXplX3Qgc0RDYWNoZUxpbmVTaXplID0gMDsKKytzdGF0aWMgc2l6ZV90IHNJQ2FjaGVM aW5lU2l6ZSA9IDA7CisrI2VuZGlmCisrCisrdm9pZCBQUEM2NEZsYWdzOjpJbml0KCkgeworKyAg aWYgKHNDUFVGbGFnc0NvbXB1dGVkKSB7CisrICAgIHJldHVybjsKKysgIH0KKysjaWZuZGVmIEpT X1NJTVVMQVRPUgorKyAgdW5zaWduZWQgbG9uZyBod2NhcDIgPSBnZXRhdXh2YWwoQVRfSFdDQVAy KTsKKysgIC8vIFBQQ19GRUFUVVJFMl9BUkNIXzNfMDAgPSAweDAwODAwMDAwIChJU0EgMy4wIC8g UE9XRVI5KQorKyAgc1BPV0VSOURldGVjdGVkID0gKGh3Y2FwMiAmIDB4MDA4MDAwMDApICE9IDA7 CisrICAvLyBQUENfRkVBVFVSRTJfQVJDSF8zXzEgPSAweDAwMDQwMDAwIChJU0EgMy4xIC8gUE9X RVIxMCkKKysgIHNQT1dFUjEwRGV0ZWN0ZWQgPSAoaHdjYXAyICYgMHgwMDA0MDAwMCkgIT0gMDsK KysgIC8vIEFsbG93IGZvcmNpbmcgUE9XRVI4IG1vZGUgZm9yIHRlc3Rpbmc6IE1PWl9QUEM2NF9G T1JDRV9QT1dFUjg9MS4KKysgIC8vIFAxMCBpbXBsaWVzIFA5OyBkb3duZ3JhZGUgY2xlYXJzIGJv dGguCisrICBjb25zdCBjaGFyKiBmb3JjZVA4ID0gZ2V0ZW52KCJNT1pfUFBDNjRfRk9SQ0VfUE9X RVI4Iik7CisrICBpZiAoZm9yY2VQOCAmJiBmb3JjZVA4WzBdID09ICcxJykgeworKyAgICBzUE9X RVI5RGV0ZWN0ZWQgPSBmYWxzZTsKKysgICAgc1BPV0VSMTBEZXRlY3RlZCA9IGZhbHNlOworKyAg fQorKworKyAgc2l6ZV90IGRjYWNoZSA9IGdldGF1eHZhbChBVF9EQ0FDSEVCU0laRSk7CisrICBz aXplX3QgaWNhY2hlID0gZ2V0YXV4dmFsKEFUX0lDQUNIRUJTSVpFKTsKKysgIHNEQ2FjaGVMaW5l U2l6ZSA9IGRjYWNoZSA/IGRjYWNoZSA6IDMyOworKyAgc0lDYWNoZUxpbmVTaXplID0gaWNhY2hl ID8gaWNhY2hlIDogMzI7CisrI2VuZGlmCisrICAvLyBGT1JDRV9QT1dFUjkvMTAgb3B0IGludG8g dGhlIGNvcnJlc3BvbmRpbmcgSVNBIGZhc3QgcGF0aHMuIFVzZWZ1bCB1bmRlcgorKyAgLy8gdGhl IHNpbXVsYXRvcjsgb24gcmVhbCBzaWxpY29uIGJlbG93IHRoZSBnYXRlZCBsZXZlbCB0aGV5IGFy ZSBmb290LWd1bnMKKysgIC8vIGJlY2F1c2UgdGhlIENQVSB3aWxsIHRyYXAgb24gdW5kZWZpbmVk IG9wcy4gT3V0c2lkZSB0aGUgSlNfU0lNVUxBVE9SCisrICAvLyBndWFyZCBzbyB0aGUgc2ltIGNh biBvcHQgaW4gdmlhIGVudi4KKysgIC8vCisrICAvLyBGT1JDRV9QT1dFUjEwIGFsc28gaW1wbGll cyBGT1JDRV9QT1dFUjkg4oCUIHRoaXMgbWF0Y2hlcyB3aGF0IHJlYWwtUDEwCisrICAvLyBzaWxp Y29uIGFkdmVydGlzZXMgaW4gaHdjYXAyIChib3RoIEFSQ0hfM18wMCBhbmQgQVJDSF8zXzEgYml0 cyBzZXQpLCBzbworKyAgLy8gd2UgZG9uJ3QgYXNrIHNpbSB1c2VycyB0byBwYXNzIGJvdGggdmFy cyBzZXBhcmF0ZWx5LgorKyAgY29uc3QgY2hhciogZm9yY2VQOSA9IGdldGVudigiTU9aX1BQQzY0 X0ZPUkNFX1BPV0VSOSIpOworKyAgaWYgKGZvcmNlUDkgJiYgZm9yY2VQOVswXSA9PSAnMScpIHsK KysgICAgc1BPV0VSOURldGVjdGVkID0gdHJ1ZTsKKysgIH0KKysgIGNvbnN0IGNoYXIqIGZvcmNl UDEwID0gZ2V0ZW52KCJNT1pfUFBDNjRfRk9SQ0VfUE9XRVIxMCIpOworKyAgaWYgKGZvcmNlUDEw ICYmIGZvcmNlUDEwWzBdID09ICcxJykgeworKyAgICBzUE9XRVIxMERldGVjdGVkID0gdHJ1ZTsK KysgICAgc1BPV0VSOURldGVjdGVkID0gdHJ1ZTsKKysgIH0KKysgIHNDUFVGbGFnc0NvbXB1dGVk ID0gdHJ1ZTsKKyt9CisrCisrYm9vbCBIYXNQT1dFUjkoKSB7CisrICBNT1pfQVNTRVJUKHNDUFVG bGFnc0NvbXB1dGVkKTsKKysgIHJldHVybiBzUE9XRVI5RGV0ZWN0ZWQ7CisrfQorKworK2Jvb2wg SGFzUE9XRVIxMCgpIHsKKysgIE1PWl9BU1NFUlQoc0NQVUZsYWdzQ29tcHV0ZWQpOworKyAgcmV0 dXJuIHNQT1dFUjEwRGV0ZWN0ZWQ7CisrfQorKworK2Jvb2wgQ1BVRmxhZ3NIYXZlQmVlbkNvbXB1 dGVkKCkgeyByZXR1cm4gc0NQVUZsYWdzQ29tcHV0ZWQ7IH0KKysKKysvLyBQZXItYml0IGZlYXR1 cmUgZmxhZ3MgcGFja2VkIGludG8gdGhlIHdhc20gY29kZSBzaWduYXR1cmUuIEFkZGluZyBhCisr Ly8gbmV3IGJpdCAoZS5nLiwgUE9XRVIxMCwgVlNYNCkgc2hvdWxkIGJlIGEgMS1saW5lIGNoYW5n ZSBoZXJlIHBsdXMgYQorKy8vIGNvcnJlc3BvbmRpbmcgSGFzUE9XRVIxMCgpL0lzVlNYNEF2YWls YWJsZSgpIHByb2JlIGFib3ZlLiBUaGUgdmFsdWUKKysvLyBpcyBhbHNvIGFzc2VydC1jaGVja2Vk IGludG8gYSBmaXhlZC13aWR0aCBmaWVsZCBpbgorKy8vIGpzL3NyYy93YXNtL1dhc21Db21waWxl LmNwcCDigJQgaWYgdGhhdCBmaWVsZCBldmVyIG92ZXJmbG93cywgd2lkZW4KKysvLyBpdCB0aGVy ZSBiZWZvcmUgbGFuZGluZyBtb3JlIGJpdHMgaGVyZS4KKyt1aW50MzJfdCBHZXRQUEM2NEZsYWdz KCkgeworKyAgdWludDMyX3QgZmxhZ3MgPSAwOworKyAgaWYgKHNQT1dFUjlEZXRlY3RlZCkgewor KyAgICBmbGFncyB8PSBQUEM2NEZsYWdfUE9XRVI5OworKyAgfQorKyAgcmV0dXJuIGZsYWdzOwor K30KKysKKyt2b2lkIEZsdXNoSUNhY2hlKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKSB7CisrI2lm IGRlZmluZWQoSlNfU0lNVUxBVE9SKQorKyAganM6OmppdDo6U2ltdWxhdG9yUHJvY2Vzczo6Rmx1 c2hJQ2FjaGUoY29kZSwgc2l6ZSk7CisrI2Vsc2UKKysgIC8vIFBQQzY0IGhhcyBpbmNvaGVyZW50 IEkvRCBjYWNoZXMuIEdDQydzIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlIGlzIGEKKysgIC8vIG5v LW9wIG9uIFBQQzY0IExpbnV4LCBzbyB3ZSBpbXBsZW1lbnQgdGhlIGZsdXNoIGV4cGxpY2l0bHku CisrICAvLyBUaGlzIGZvbGxvd3MgdGhlIHNhbWUgYXBwcm9hY2ggYXMgUUVNVSAodXRpbC9jYWNo ZWZsdXNoLmMpIGFuZCB0aGUKKysgIC8vIExpbnV4IGtlcm5lbCAoYXJjaC9wb3dlcnBjL21tL2Nh Y2hlZmx1c2guYyk6CisrICAvLyAgIGRjYnN0IGxvb3AgLT4gc3luYyAtPiBpY2JpIGxvb3AgLT4g c3luYyAtPiBpc3luYworKyAgaWYgKCFzaXplKSB7CisrICAgIHJldHVybjsKKysgIH0KKysgIE1P Wl9BU1NFUlQoc0NQVUZsYWdzQ29tcHV0ZWQsCisrICAgICAgICAgICAgICJQUEM2NEZsYWdzOjpJ bml0IG11c3QgcnVuIGJlZm9yZSBhbnkgRmx1c2hJQ2FjaGUgY2FsbCIpOworKworKyAgdWludHB0 cl90IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGUpOworKyAgdWludHB0 cl90IGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKysKKysgIC8vIFN0ZXAgMTogV3JpdGUgYmFjayBkYXRh IGNhY2hlIHRvIG1lbW9yeS4KKysgIGZvciAodWludHB0cl90IGFkZHIgPSBzdGFydCAmIH4oc0RD YWNoZUxpbmVTaXplIC0gMSk7IGFkZHIgPCBlbmQ7CisrICAgICAgIGFkZHIgKz0gc0RDYWNoZUxp bmVTaXplKSB7CisrICAgIGFzbSB2b2xhdGlsZSgiZGNic3QgMCwgJTAiIDogOiAiciIoYWRkcikg OiAibWVtb3J5Iik7CisrICB9CisrICBhc20gdm9sYXRpbGUoInN5bmMiIDo6OiAibWVtb3J5Iik7 CisrCisrICAvLyBTdGVwIDI6IEludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCisrICBmb3Ig KHVpbnRwdHJfdCBhZGRyID0gc3RhcnQgJiB+KHNJQ2FjaGVMaW5lU2l6ZSAtIDEpOyBhZGRyIDwg ZW5kOworKyAgICAgICBhZGRyICs9IHNJQ2FjaGVMaW5lU2l6ZSkgeworKyAgICBhc20gdm9sYXRp bGUoImljYmkgMCwgJTAiIDogOiAiciIoYWRkcikgOiAibWVtb3J5Iik7CisrICB9CisrICAvLyBU aGUgZXh0cmEgc3luYyBiZWZvcmUgaXN5bmMgbWF0Y2hlcyB0aGUgTGludXgga2VybmVsIGFuZCBR RU1VLgorKyAgLy8gSXQgZW5zdXJlcyBhbGwgaWNiaSBvcGVyYXRpb25zIGNvbXBsZXRlIGJlZm9y ZSB0aGUgcGlwZWxpbmUgZmx1c2guCisrICBhc20gdm9sYXRpbGUoInN5bmMiIDo6OiAibWVtb3J5 Iik7CisrICBhc20gdm9sYXRpbGUoImlzeW5jIiA6OjogIm1lbW9yeSIpOworKyNlbmRpZgorK30K KysKKyt2b2lkIEZsdXNoRXhlY3V0aW9uQ29udGV4dCgpIHsKKysjaWYgIWRlZmluZWQoSlNfU0lN VUxBVE9SKQorKyAgLy8gUFBDNjQncyBpc3luYyBmbHVzaGVzIHRoZSBpbnN0cnVjdGlvbiBwaXBl bGluZSBvbiB0aGUgY3VycmVudCBjb3JlLAorKyAgLy8gZW5zdXJpbmcgYW55IHByZXZpb3VzbHkg aW52YWxpZGF0ZWQgaWNhY2hlIGVudHJpZXMgYXJlIGRpc2NhcmRlZCBhbmQKKysgIC8vIGluc3Ry dWN0aW9ucyBhcmUgcmUtZmV0Y2hlZCBmcm9tIGNvaGVyZW50IG1lbW9yeS4KKysgIGFzbSB2b2xh dGlsZSgiaXN5bmMiIDo6OiAibWVtb3J5Iik7CisrI2VuZGlmCisrfQorKworK30gIC8vIG5hbWVz cGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3Bw YzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUt cHBjNjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uZWZhYWIw YjBjODU0CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVy ZS1wcGM2NC5oCitAQCAtMCwwICsxLDU4MSBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0 aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2 aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBG b3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExp Y2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3 aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEu b3JnL01QTC8yLjAvLiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X0FyY2hpdGVjdHVyZV9wcGM2 NF9oCisrI2RlZmluZSBqaXRfcHBjNjRfQXJjaGl0ZWN0dXJlX3BwYzY0X2gKKysKKysjaW5jbHVk ZSA8YWxnb3JpdGhtPgorKyNpbmNsdWRlIDxiaXQ+CisrCisrI2luY2x1ZGUgImppdC9zaGFyZWQv QXJjaGl0ZWN0dXJlLXNoYXJlZC5oIgorKworKyNpbmNsdWRlICJqcy9VdGlsaXR5LmgiCisrCisr bmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKysvLyBQUEM2NCBoYXMgMzIgNjQt Yml0IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMsIHIwIHRocm91Z2ggcjMxLgorKy8vIFRoZSBw cm9ncmFtIGNvdW50ZXIgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgYXMgYSByZWdpc3Rlci4K KysvLyBUaGUgbGluayByZWdpc3RlciAoTFIpIGFuZCBjb3VudCByZWdpc3RlciAoQ1RSKSBhcmUg U1BScy4KKysKKysvLyBQUEM2NCBFTEZ2MiBHUFIgQ29udmVudGlvbjoKKysvLyAgTmFtZSAgICBV c2FnZQorKy8vICByMCAgICAgIFZvbGF0aWxlLCBjYW5ub3QgYmUgYmFzZSByZWdpc3RlciBpbiBs b2FkL3N0b3JlCisrLy8gIHIxICAgICAgU3RhY2sgcG9pbnRlciAoY2FsbGVlLXNhdmVkKQorKy8v ICByMiAgICAgIFRPQyBwb2ludGVyIChyZXNlcnZlZCkKKysvLyAgcjMgICAgICBSZXR1cm4gdmFs dWUgLyBmaXJzdCBhcmd1bWVudAorKy8vICByNC1yMTAgIEFyZ3VtZW50cyAyLTgKKysvLyAgcjEx ICAgICBFbnZpcm9ubWVudCBwb2ludGVyIC8gc2NyYXRjaAorKy8vICByMTIgICAgIEJyYW5jaCB0 YXJnZXQgLyBzY3JhdGNoCisrLy8gIHIxMyAgICAgVGhyZWFkIHBvaW50ZXIgKHJlc2VydmVkLCBU TFMpCisrLy8gIHIxNC1yMzEgQ2FsbGVlLXNhdmVkCisrCisrLy8gUFBDNjQgRUxGdjIgRlBSIENv bnZlbnRpb246CisrLy8gIGYwICAgICAgU2NyYXRjaAorKy8vICBmMS1mMTMgIEFyZ3VtZW50cyAv IHZvbGF0aWxlCisrLy8gIGYxNC1mMzEgQ2FsbGVlLXNhdmVkCisrCisrY2xhc3MgUmVnaXN0ZXJz IHsKKysgcHVibGljOgorKyAgZW51bSBSZWdpc3RlcklEIHsKKysgICAgcjAgPSAwLAorKyAgICBy MSwKKysgICAgcjIsCisrICAgIHIzLAorKyAgICByNCwKKysgICAgcjUsCisrICAgIHI2LAorKyAg ICByNywKKysgICAgcjgsCisrICAgIHI5LAorKyAgICByMTAsCisrICAgIHIxMSwKKysgICAgcjEy LAorKyAgICByMTMsCisrICAgIHIxNCwKKysgICAgcjE1LAorKyAgICByMTYsCisrICAgIHIxNywK KysgICAgcjE4LAorKyAgICByMTksCisrICAgIHIyMCwKKysgICAgcjIxLAorKyAgICByMjIsCisr ICAgIHIyMywKKysgICAgcjI0LAorKyAgICByMjUsCisrICAgIHIyNiwKKysgICAgcjI3LAorKyAg ICByMjgsCisrICAgIHIyOSwKKysgICAgcjMwLAorKyAgICByMzEsCisrICAgIHNwID0gcjEsCisr ICAgIGludmFsaWRfcmVnLAorKyAgfTsKKysgIHR5cGVkZWYgdWludDhfdCBDb2RlOworKyAgdHlw ZWRlZiBSZWdpc3RlcklEIEVuY29kaW5nOworKyAgdHlwZWRlZiB1aW50MzJfdCBTZXRUeXBlOwor KworKyAgc3RhdGljIGNvbnN0IEVuY29kaW5nIFN0YWNrUG9pbnRlciA9IHNwOworKyAgc3RhdGlj IGNvbnN0IEVuY29kaW5nIEludmFsaWQgPSBpbnZhbGlkX3JlZzsKKysKKysgIHVuaW9uIFJlZ2lz dGVyQ29udGVudCB7CisrICAgIHVpbnRwdHJfdCByOworKyAgfTsKKysKKysgIHN0YXRpYyB1aW50 MzJfdCBTZXRTaXplKFNldFR5cGUgeCkgeyByZXR1cm4gc3RkOjpwb3Bjb3VudCh4KTsgfQorKyAg c3RhdGljIHVpbnQzMl90IEZpcnN0Qml0KFNldFR5cGUgeCkgeworKyAgICBNT1pfQVNTRVJUKHgp OworKyAgICByZXR1cm4gc3RkOjpjb3VudHJfemVybyh4KTsKKysgIH0KKysgIHN0YXRpYyB1aW50 MzJfdCBMYXN0Qml0KFNldFR5cGUgeCkgeworKyAgICBNT1pfQVNTRVJUKHgpOworKyAgICByZXR1 cm4gc3RkOjpiaXRfd2lkdGgoeCkgLSAxOworKyAgfQorKworKyAgc3RhdGljIGNvbnN0IGNoYXIq IEdldE5hbWUodWludDMyX3QgY29kZSkgeworKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg TmFtZXNbXSA9IHsKKysgICAgICAgICJyMCIsICAic3AiLCAgInIyIiwgICJyMyIsICAicjQiLCAg InI1IiwgICJyNiIsICAicjciLAorKyAgICAgICAgInI4IiwgICJyOSIsICAicjEwIiwgInIxMSIs ICJyMTIiLCAicjEzIiwgInIxNCIsICJyMTUiLAorKyAgICAgICAgInIxNiIsICJyMTciLCAicjE4 IiwgInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJyMjMiLAorKyAgICAgICAgInIyNCIsICJy MjUiLCAicjI2IiwgInIyNyIsICJyMjgiLCAicjI5IiwgInIzMCIsICJyMzEifTsKKysgICAgc3Rh dGljX2Fzc2VydChUb3RhbCA9PSBzdGQ6OnNpemUoTmFtZXMpLCAiVGFibGUgaXMgdGhlIGNvcnJl Y3Qgc2l6ZSIpOworKyAgICBpZiAoY29kZSA+PSBUb3RhbCkgeworKyAgICAgIHJldHVybiAiaW52 YWxpZCI7CisrICAgIH0KKysgICAgcmV0dXJuIE5hbWVzW2NvZGVdOworKyAgfQorKworKyAgc3Rh dGljIENvZGUgRnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSk7CisrCisrICBzdGF0aWMgY29uc3Qg dWludDMyX3QgVG90YWwgPSAzMjsKKysgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBUb3RhbFBoeXMg PSAzMjsKKysgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBBbGxvY2F0YWJsZSA9IDI0OworKworKyAg c3RhdGljIGNvbnN0IFNldFR5cGUgQWxsTWFzayA9IDB4RkZGRkZGRkY7CisrICBzdGF0aWMgY29u c3QgU2V0VHlwZSBOb25lTWFzayA9IDB4MDsKKysKKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFy Z1JlZ01hc2sgPQorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIzKSB8ICgxVSA8PCBSZWdpc3Rl cnM6OnI0KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnI1KSB8CisrICAgICAgKDFVIDw8IFJlZ2lzdGVy czo6cjYpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjcpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjgpIHwK KysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyOSkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMTApOwor KworKyAgLy8gcjAsIHIxMSwgcjEyIGFyZSBhbHNvIHZvbGF0aWxlIGJ1dCBoYW5kbGVkIHNlcGFy YXRlbHkuCisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBWb2xhdGlsZU1hc2sgPSBBcmdSZWdNYXNr OworKworKyAgLy8gRUxGdjIgY2FsbGVlLXNhdmVkIEdQUnMgYXJlIHIxNC4ucjMxLiByMiAoVE9D KSBhbmQgcjEzIChUTFMpIGFyZQorKyAgLy8gZGVkaWNhdGVkIHJlZ2lzdGVycywgTk9UIGdlbmVy YWwgY2FsbGVlLXNhdmVkOiByMiBpcyByZXN0b3JlZCBieSB0aGUKKysgIC8vIFBMVC1jYWxsIGxp bmthZ2UgY29udmVudGlvbiAoYGxkIHIyLCAyNChyMSlgIGFmdGVyIGV2ZXJ5IGNyb3NzLW1vZHVs ZQorKyAgLy8gY2FsbCk7IHIxMyBpcyB0aGUgdGhyZWFkIHBvaW50ZXIgYW5kIG11c3QgTkVWRVIg YmUgd3JpdHRlbi4gSW5jbHVkaW5nCisrICAvLyB0aGVtIGhlcmUgcHJldmlvdXNseSBtYWRlIGBQ dXNoUmVnc0luTWFzayhOb25Wb2xhdGlsZU1hc2spYCBzYXZlIGFuZAorKyAgLy8gcmVzdG9yZSB0 aGVtIOKAlCB3YXN0ZWQgMTYgYnl0ZXMgcGVyIHdhc20tc3R1YiBmcmFtZSBhdCBiZXN0LCBsYXRl bnQKKysgIC8vIFRMUyBjb3JydXB0aW9uIGlmIHNhdmUvcmVzdG9yZSB3ZXJlIGV2ZXIgbWlzb3Jk ZXJlZC4gVmVyaWZpZWQgdGhhdAorKyAgLy8gbm8gSklULWVtaXR0ZWQgY29kZSB3cml0ZXMgcjIg b3IgcjEzIChib3RoIGFyZSBOb25BbGxvY2F0YWJsZSwgYW5kCisrICAvLyBncmVwIGFjcm9zcyBq cy9zcmMvaml0L3BwYzY0LyBmaW5kcyBubyBgYXNfKmAgc2l0ZSBhc3NpZ25pbmcgdG8KKysgIC8v IHRoZW0pLCBzbyB0aGV5J3JlIHByZXNlcnZlZCBhY3Jvc3MgdGhlIEpJVCBib2R5IGZvciBmcmVl LgorKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uVm9sYXRpbGVNYXNrID0KKysgICAgICAoMVUg PDwgUmVnaXN0ZXJzOjpyMTQpIHwKKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTUpIHwgKDFV IDw8IFJlZ2lzdGVyczo6cjE2KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIxNykgfAorKyAgICAgICgx VSA8PCBSZWdpc3RlcnM6OnIxOCkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMTkpIHwgKDFVIDw8IFJl Z2lzdGVyczo6cjIwKSB8CisrICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjIxKSB8ICgxVSA8PCBS ZWdpc3RlcnM6OnIyMikgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMjMpIHwKKysgICAgICAoMVUgPDwg UmVnaXN0ZXJzOjpyMjQpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjI1KSB8ICgxVSA8PCBSZWdpc3Rl cnM6OnIyNikgfAorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIyNykgfCAoMVUgPDwgUmVnaXN0 ZXJzOjpyMjgpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjI5KSB8CisrICAgICAgKDFVIDw8IFJlZ2lz dGVyczo6cjMwKSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIzMSk7CisrCisrICBzdGF0aWMgY29uc3Qg U2V0VHlwZSBOb25BbGxvY2F0YWJsZU1hc2sgPQorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIw KSB8ICAgLy8gQ2Fubm90IGJlIGJhc2UgaW4gbG9hZC9zdG9yZS4KKysgICAgICAoMVUgPDwgUmVn aXN0ZXJzOjpzcCkgfCAgIC8vIFN0YWNrIHBvaW50ZXIuCisrICAgICAgKDFVIDw8IFJlZ2lzdGVy czo6cjIpIHwgICAvLyBUT0MgcG9pbnRlciAoRUxGdjIpLgorKyAgICAgICgxVSA8PCBSZWdpc3Rl cnM6OnIxMSkgfCAgLy8gVGhpcmQgc2NyYXRjaC4KKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpy MTIpIHwgIC8vIFNlY29uZCBzY3JhdGNoIC8gYWRkcmVzc1RlbXBSZWdpc3Rlci4KKysgICAgICAo MVUgPDwgUmVnaXN0ZXJzOjpyMTMpIHwgIC8vIFRocmVhZC1sb2NhbCBzdG9yYWdlIChFTEZ2Miku CisrICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjE2KSB8ICAvLyBTYXZlZCBzY3JhdGNoIHJlZ2lz dGVyLgorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIzMSk7ICAgLy8gRnJhbWUgcG9pbnRlci4K KysKKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIFdyYXBwZXJNYXNrID0gVm9sYXRpbGVNYXNrOwor KworKyAgLy8gUmVnaXN0ZXJzIHJldHVybmVkIGZyb20gYSBKUyAtPiBKUyBjYWxsLgorKyAgc3Rh dGljIGNvbnN0IFNldFR5cGUgSlNDYWxsTWFzayA9ICgxVSA8PCBSZWdpc3RlcnM6OnI1KTsKKysK KysgIC8vIFJlZ2lzdGVycyByZXR1cm5lZCBmcm9tIGEgSlMgLT4gQyBjYWxsLgorKyAgc3RhdGlj IGNvbnN0IFNldFR5cGUgQ2FsbE1hc2sgPSAoMVUgPDwgUmVnaXN0ZXJzOjpyMyk7CisrCisrICBz dGF0aWMgY29uc3QgU2V0VHlwZSBBbGxvY2F0YWJsZU1hc2sgPSBBbGxNYXNrICYgfk5vbkFsbG9j YXRhYmxlTWFzazsKKyt9OworKworK3R5cGVkZWYgdWludDMyX3QgUGFja2VkUmVnaXN0ZXJNYXNr OworKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK2NsYXNzIFR5cGVkUmVnaXN0ZXJTZXQ7Cisr CisrY2xhc3MgRmxvYXRSZWdpc3RlcnMgeworKyBwdWJsaWM6CisrICBlbnVtIEZQUmVnaXN0ZXJJ RCB7CisrICAgIGYwID0gMCwKKysgICAgZjEsCisrICAgIGYyLAorKyAgICBmMywKKysgICAgZjQs CisrICAgIGY1LAorKyAgICBmNiwKKysgICAgZjcsCisrICAgIGY4LAorKyAgICBmOSwKKysgICAg ZjEwLAorKyAgICBmMTEsCisrICAgIGYxMiwKKysgICAgZjEzLAorKyAgICBmMTQsCisrICAgIGYx NSwKKysgICAgZjE2LAorKyAgICBmMTcsCisrICAgIGYxOCwKKysgICAgZjE5LAorKyAgICBmMjAs CisrICAgIGYyMSwKKysgICAgZjIyLAorKyAgICBmMjMsCisrICAgIGYyNCwKKysgICAgZjI1LAor KyAgICBmMjYsCisrICAgIGYyNywKKysgICAgZjI4LAorKyAgICBmMjksCisrICAgIGYzMCwKKysg ICAgZjMxLAorKyAgfTsKKysKKysgIC8vIEVpZ2h0IGJpdHM6IChpbnZhbGlkIDw8IDcpIHwgKGtp bmQgPDwgNSkgfCBlbmNvZGluZworKyAgdHlwZWRlZiB1aW50OF90IENvZGU7CisrICB0eXBlZGVm IEZQUmVnaXN0ZXJJRCBFbmNvZGluZzsKKysgIC8vIDMga2luZHMgw5cgMzIgcmVncyA9IDk2IGJp dHMgbmVlZGVkLiBVc2UgX191aW50MTI4X3QuCisrICB0eXBlZGVmIF9fdWludDEyOF90IFNldFR5 cGU7CisrCisrICBlbnVtIEtpbmQgOiB1aW50OF90IHsgRG91YmxlLCBTaW5nbGUsIFNpbWQxMjgs IE51bVR5cGVzIH07CisrCisrICBzdGF0aWMgY29uc3RleHByIENvZGUgSW52YWxpZCA9IDB4ODA7 CisrCisrICBzdGF0aWMgY29uc3QgY2hhciogR2V0TmFtZSh1aW50MzJfdCBjb2RlKSB7CisrICAg IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBOYW1lc1tdID0geworKyAgICAgICAgImYwIiwgICJm MSIsICAiZjIiLCAgImYzIiwgICJmNCIsICAiZjUiLCAgImY2IiwgICJmNyIsCisrICAgICAgICAi ZjgiLCAgImY5IiwgICJmMTAiLCAiZjExIiwgImYxMiIsICJmMTMiLCAiZjE0IiwgImYxNSIsCisr ICAgICAgICAiZjE2IiwgImYxNyIsICJmMTgiLCAiZjE5IiwgImYyMCIsICJmMjEiLCAiZjIyIiwg ImYyMyIsCisrICAgICAgICAiZjI0IiwgImYyNSIsICJmMjYiLCAiZjI3IiwgImYyOCIsICJmMjki LCAiZjMwIiwgImYzMSJ9OworKyAgICBzdGF0aWNfYXNzZXJ0KFRvdGFsUGh5cyA9PSBzdGQ6OnNp emUoTmFtZXMpLCAiVGFibGUgaXMgdGhlIGNvcnJlY3Qgc2l6ZSIpOworKyAgICBpZiAoY29kZSA+ PSBUb3RhbCkgeworKyAgICAgIHJldHVybiAiaW52YWxpZCI7CisrICAgIH0KKysgICAgcmV0dXJu IE5hbWVzW2NvZGUgJSBUb3RhbFBoeXNdOworKyAgfQorKworKyAgc3RhdGljIENvZGUgRnJvbU5h bWUoY29uc3QgY2hhciogbmFtZSk7CisrCisrICBzdGF0aWMgY29uc3QgdWludDMyX3QgVG90YWxQ aHlzID0gMzI7CisrICBzdGF0aWMgY29uc3QgdWludDMyX3QgVG90YWwgPSBUb3RhbFBoeXMgKiBO dW1UeXBlczsKKysgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBBbGxvY2F0YWJsZSA9IDMxOyAgLy8g V2l0aG91dCBmMCwgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIuCisrCisrICBzdGF0aWNfYXNzZXJ0KHNp emVvZihTZXRUeXBlKSAqIDggPj0gVG90YWwsCisrICAgICAgICAgICAgICAgICJTZXRUeXBlIHNo b3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gZW51bWVyYXRlIGFsbCByZWdpc3RlcnMuIik7CisrCisr ICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTcHJlYWRTaW5nbGUgPSBTZXRUeXBlKDEpCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAodWludDMyX3QoU2luZ2xlKSAqIFRv dGFsUGh5cyk7CisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTcHJlYWREb3VibGUgPSBTZXRUeXBl KDEpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAodWludDMyX3Qo RG91YmxlKSAqIFRvdGFsUGh5cyk7CisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTcHJlYWRTaW1k MTI4ID0gU2V0VHlwZSgxKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDw8ICh1aW50MzJfdChTaW1kMTI4KSAqIFRvdGFsUGh5cyk7CisrICBzdGF0aWMgY29uc3QgU2V0 VHlwZSBTcHJlYWQgPSBTcHJlYWRTaW5nbGUgfCBTcHJlYWREb3VibGUgfCBTcHJlYWRTaW1kMTI4 OworKworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsUGh5c01hc2sgPSAoKFNldFR5cGUoMSkg PDwgVG90YWxQaHlzKSAtIDEpOworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsTWFzayA9IEFs bFBoeXNNYXNrICogU3ByZWFkOworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsU2luZ2xlTWFz ayA9IEFsbFBoeXNNYXNrICogU3ByZWFkU2luZ2xlOworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUg QWxsRG91YmxlTWFzayA9IEFsbFBoeXNNYXNrICogU3ByZWFkRG91YmxlOworKyAgc3RhdGljIGNv bnN0IFNldFR5cGUgQWxsU2ltZDEyOE1hc2sgPSBBbGxQaHlzTWFzayAqIFNwcmVhZFNpbWQxMjg7 CisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBOb25lTWFzayA9IFNldFR5cGUoMCk7CisrCisrICAv LyBFTEZ2MjogZjE0LWYzMSBhcmUgbm9uLXZvbGF0aWxlIChjYWxsZWUtc2F2ZWQpIGZvciBzY2Fs YXIgRlAuCisrICAvLyBUaGUgdXBwZXIgNjQgYml0cyBvZiBWU1IgMC0zMSBhcmUgdm9sYXRpbGUs IHNvIFNpbWQxMjggdmlldyBpcyBhbGwtdm9sYXRpbGUuCisrICBzdGF0aWMgY29uc3QgU2V0VHlw ZSBOb25Wb2xhdGlsZVBoeXNNYXNrID0KKysgICAgICBTZXRUeXBlKCgxVSA8PCBGbG9hdFJlZ2lz dGVyczo6ZjE0KSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjE1KSB8CisrICAgICAgICAgICAg ICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYxNikgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYx NykgfAorKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTgpIHwgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMTkpIHwKKysgICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lz dGVyczo6ZjIwKSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjIxKSB8CisrICAgICAgICAgICAg ICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyMikgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYy MykgfAorKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjQpIHwgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMjUpIHwKKysgICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lz dGVyczo6ZjI2KSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjI3KSB8CisrICAgICAgICAgICAg ICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyOCkgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYy OSkgfAorKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMzApIHwgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMzEpKTsKKysgIC8vIFNpbWQxMjggbGl2ZXMgaW4gVlItbmFtZXNw YWNlIChWU1IzMi02MyA9IFZSMC1WUjMxKS4gUGVyIEVMRnYyIEFCSSwKKysgIC8vIFZSMjAtVlIz MSBhcmUgbm9uLXZvbGF0aWxlIChjYWxsZWUtc2F2ZWQpLiBFbmNvZGluZyBzdG9yYWdlIGlzIDIw LTMxCisrICAvLyB3aXRoIGtpbmQ9U2ltZDEyOC4KKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIFNp bWROb25Wb2xhdGlsZVBoeXNNYXNrID0KKysgICAgICBTZXRUeXBlKCgxVSA8PCAyMCkgfCAoMVUg PDwgMjEpIHwgKDFVIDw8IDIyKSB8ICgxVSA8PCAyMykgfAorKyAgICAgICAgICAgICAgKDFVIDw8 IDI0KSB8ICgxVSA8PCAyNSkgfCAoMVUgPDwgMjYpIHwgKDFVIDw8IDI3KSB8CisrICAgICAgICAg ICAgICAoMVUgPDwgMjgpIHwgKDFVIDw8IDI5KSB8ICgxVSA8PCAzMCkgfCAoMVUgPDwgMzEpKTsK KysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIE5vblZvbGF0aWxlTWFzayA9CisrICAgICAgTm9uVm9s YXRpbGVQaHlzTWFzayAqIChTcHJlYWRTaW5nbGUgfCBTcHJlYWREb3VibGUpIHwKKysgICAgICBT aW1kTm9uVm9sYXRpbGVQaHlzTWFzayAqIFNwcmVhZFNpbWQxMjg7CisrCisrICBzdGF0aWMgY29u c3QgU2V0VHlwZSBWb2xhdGlsZU1hc2sgPSBBbGxNYXNrICYgfk5vblZvbGF0aWxlTWFzazsKKysK KysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIFdyYXBwZXJNYXNrID0gVm9sYXRpbGVNYXNrOworKwor KyAgLy8gZjAgaXMgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgKGFsbCB0aHJlZSB2aWV3czogc2luZ2xl LCBkb3VibGUsIHNpbWQxMjgpLgorKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uQWxsb2NhdGFi bGVNYXNrID0KKysgICAgICAoU2V0VHlwZSgxKSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjApICogU3By ZWFkOworKworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsb2NhdGFibGVNYXNrID0gQWxsTWFz ayAmIH5Ob25BbGxvY2F0YWJsZU1hc2s7CisrCisrICB1bmlvbiBSZWdpc3RlckNvbnRlbnQgewor KyAgICBmbG9hdCBzOworKyAgICBkb3VibGUgZDsKKysgICAgLy8gTm8gdjEyOCBoZXJlLiBTaW1k MTI4IGxpdmVzIGluIHBoeXNpY2FsbHktZGlzdGluY3QgVlJzIChWU1IzMi02MykKKysgICAgLy8g YW5kIG5ldmVyIHJlYWNoZXMgUmVnaXN0ZXJEdW1wIChhc3NlcnRlZCBieSBTYWZlcG9pbnRTdGF0 ZTsgYmFpbG91dAorKyAgICAvLyBBbGxSZWdzIGV4Y2x1ZGVzIFNpbWQxMjgpLiBXaXRoIHYxMjgg aW4gdGhlIHVuaW9uLCBzaXplb2Ygd2FzIDE2LAorKyAgICAvLyBmb3JjaW5nIFB1c2hSZWdzSW5N YXNrIHRvIGEgMTYtYnl0ZSBzdHJpZGUgdGhhdCBtaXNtYXRjaGVkCisrICAgIC8vIGFkZHJlc3NP ZlJlZ2lzdGVyJ3MgOC1ieXRlIHdhbGsgdmlhICgqaXRlcikuc2l6ZSgpLgorKyAgfTsKKysKKysg IHN0YXRpYyBjb25zdGV4cHIgRW5jb2RpbmcgZW5jb2RpbmcoQ29kZSBjKSB7IHJldHVybiBFbmNv ZGluZyhjICYgMzEpOyB9CisrCisrICBzdGF0aWMgY29uc3RleHByIEtpbmQga2luZChDb2RlIGMp IHsgcmV0dXJuIEtpbmQoKGMgPj4gNSkgJiAzKTsgfQorKworKyAgc3RhdGljIGNvbnN0ZXhwciBD b2RlIGZyb21QYXJ0cyh1aW50MzJfdCBlbmNvZGluZywgdWludDMyX3Qga2luZCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW52YWxpZCkgeworKyAgICByZXR1 cm4gQ29kZSgoaW52YWxpZCA8PCA3KSB8IChraW5kIDw8IDUpIHwgZW5jb2RpbmcpOworKyAgfQor K307CisrCisrLy8gU3BpbGxTbG90U2l6ZSBtdXN0IGZpdCB0aGUgd2lkZXN0IHJlZ2lzdGVyIGNs YXNzIChTaW1kMTI4ID0gMTYgYnl0ZXMpLgorKy8vIFdlIGNhbid0IGRlcml2ZSBmcm9tIHNpemVv ZihGbG9hdFJlZ2lzdGVyczo6UmVnaXN0ZXJDb250ZW50KSDigJQgdGhhdAorKy8vIHVuaW9uIGlz IHNpemVkIGZvciBGUFJzIG9ubHkgKDggYnl0ZXMgc2luY2UgdjEyOCBsaXZlcyBpbiBkaXN0aW5j dAorKy8vIFZScywgbm90IGluIHRoZSBGUFIgdW5pb24pLCBzbyBkZXJpdmluZyB3b3VsZCB1bmRl ci1yZXNlcnZlIGZvcgorKy8vIFNpbWQxMjggY3ljbGUgYnJlYWtzLiBTcGlsbFNsb3RTaXplIGlz IGNvbnN1bWVkIG9ubHkgYnkgTW92ZUVtaXR0ZXIKKysvLyBhbmQgaXMgbm90IHBhcnQgb2YgdGhl IEpJVCBmcmFtZSBsYXlvdXQuCisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFNwaWxsU2xvdFNpemUg PSAxNjsKKysKKysvLyBQUEM2NCBFTEZ2MiBBQkk6IHRoZSBjYWxsZWUgc2F2ZXMgTFIgYXQgW2Nh bGxlcl9TUCsxNl0sIENSIGF0CisrLy8gW2NhbGxlcl9TUCs4XSwgYW5kIG1heSBzYXZlIFRPQyBh dCBbY2FsbGVyX1NQKzI0XS4gUmVzZXJ2ZSAzMiBieXRlcworKy8vICh0aGUgbWluaW11bSBFTEZ2 MiBzdGFjayBmcmFtZSkgYXMgYSBzaGFkb3cgYXJlYSBmb3IgZXZlcnkgQUJJIGNhbGwuCisrc3Rh dGljIGNvbnN0ZXhwciB1aW50MzJfdCBTaGFkb3dTdGFja1NwYWNlID0gMzI7Cisrc3RhdGljIGNv bnN0IHVpbnQzMl90IFNpemVPZlJldHVybkFkZHJlc3NBZnRlckNhbGwgPSAwOworKworKy8vIFBQ QzY0IGJyYW5jaCBpbnN0cnVjdGlvbnMgaGF2ZSBhIDI2LWJpdCBzaWduZWQgb2Zmc2V0IGZpZWxk LCBnaXZpbmcgYQorKy8vIHJhbmdlIG9mICsvLSAzMk1CLiBXZSByZWR1Y2UgdGhpcyB0byBsZWF2 ZSByb29tIGZvciBqdW1wIGlzbGFuZCBpbnNlcnRpb24uCisrc3RhdGljIGNvbnN0ZXhwciB1aW50 MzJfdCBKdW1wSW1tZWRpYXRlUmFuZ2UgPSAoMzIgKiAxMDI0ICogMTAyNCkgLSAzMjsKKysKKysv LyBTaXplIG9mIGVhY2ggYmFpbG91dCB0YWJsZSBlbnRyeSAoYSBzaW5nbGUgYmwgaW5zdHJ1Y3Rp b24pLgorK3N0YXRpYyBjb25zdCB1aW50MzJfdCBCQUlMT1VUX1RBQkxFX0VOVFJZX1NJWkUgPSA0 OworKworKy8vIFBQQzY0IHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMgKG5vdCBleHBvc2VkIHRv IHRoZSBhbGxvY2F0b3IpLgorK2VudW0gU1BSZWdpc3RlcklEIHsKKysgIHNwcl94ZXIgPSAxLAor KyAgc3ByX2xyID0gOCwKKysgIHNwcl9jdHIgPSA5LAorKyAgc3ByX3Zyc2F2ZSA9IDI1NiwKKysg IGludmFsaWRfc3ByZWcKKyt9OworKworKy8vIFBQQzY0IGNvbmRpdGlvbiByZWdpc3RlcnMuCisr ZW51bSBDUmVnaXN0ZXJJRCB7IGNyMCA9IDAsIGNyMSwgY3I1ID0gNSwgY3I2LCBjcjcsIGludmFs aWRfY3JlZyB9OworKworK3N0cnVjdCBGbG9hdFJlZ2lzdGVyIHsKKysgIHR5cGVkZWYgRmxvYXRS ZWdpc3RlcnMgQ29kZXM7CisrICB0eXBlZGVmIHNpemVfdCBDb2RlOworKyAgdHlwZWRlZiBDb2Rl czo6RW5jb2RpbmcgRW5jb2Rpbmc7CisrICB0eXBlZGVmIENvZGVzOjpTZXRUeXBlIFNldFR5cGU7 CisrCisrICBzdGF0aWMgdWludDMyX3QgU2V0U2l6ZShTZXRUeXBlIHgpIHsKKysgICAgLy8gRm9s ZCBhbGwgMyBraW5kcyAoU2luZ2xlLCBEb3VibGUsIFNpbWQxMjgpIGRvd24gdG8gcGh5c2ljYWwg bWFzay4KKysgICAgU2V0VHlwZSBwaHlzID0gKHggJiBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01h c2spIHwKKysgICAgICAgICAgICAgICAgICAgKCh4ID4+IEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBo eXMpICYgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrKSB8CisrICAgICAgICAgICAgICAgICAg ICgoeCA+PiAoMiAqIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpKSAmIEZsb2F0UmVnaXN0ZXJz OjpBbGxQaHlzTWFzayk7CisrICAgIHJldHVybiBzdGQ6OnBvcGNvdW50KHN0YXRpY19jYXN0PHVp bnQ2NF90PihwaHlzKSk7CisrICB9CisrCisrICAvLyBfX3VpbnQxMjhfdCBoZWxwZXJzIGZvciBG aXJzdEJpdC9MYXN0Qml0LgorKyAgc3RhdGljIHVpbnQzMl90IEZpcnN0Qml0KFNldFR5cGUgeCkg eworKyAgICBNT1pfQVNTRVJUKHgpOworKyAgICB1aW50NjRfdCBsbyA9IHN0YXRpY19jYXN0PHVp bnQ2NF90Pih4KTsKKysgICAgaWYgKGxvKSB7CisrICAgICAgcmV0dXJuIHN0ZDo6Y291bnRyX3pl cm8obG8pOworKyAgICB9CisrICAgIHJldHVybiA2NCArIHN0ZDo6Y291bnRyX3plcm8oc3RhdGlj X2Nhc3Q8dWludDY0X3Q+KHggPj4gNjQpKTsKKysgIH0KKysgIHN0YXRpYyB1aW50MzJfdCBMYXN0 Qml0KFNldFR5cGUgeCkgeworKyAgICBNT1pfQVNTRVJUKHgpOworKyAgICB1aW50NjRfdCBoaSA9 IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih4ID4+IDY0KTsKKysgICAgaWYgKGhpKSB7CisrICAgICAg cmV0dXJuIDY0ICsgKHN0ZDo6Yml0X3dpZHRoKGhpKSAtIDEpOworKyAgICB9CisrICAgIHJldHVy biBzdGQ6OmJpdF93aWR0aChzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCkpIC0gMTsKKysgIH0KKysK KysgcHJpdmF0ZToKKysgIHVpbnQ4X3QgZW5jb2RpbmdfOworKyAgdWludDhfdCBraW5kXzsKKysg IGJvb2wgaW52YWxpZF87CisrCisrICB0eXBlZGVmIENvZGVzOjpLaW5kIEtpbmQ7CisrCisrIHB1 YmxpYzoKKysgIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyKEVuY29kaW5nIGVuY29kaW5nLCBLaW5k IGtpbmQpCisrICAgICAgOiBlbmNvZGluZ18oZW5jb2RpbmcpLCBraW5kXyhraW5kKSwgaW52YWxp ZF8oZmFsc2UpIHt9CisrCisrICBjb25zdGV4cHIgRmxvYXRSZWdpc3RlcigpCisrICAgICAgOiBl bmNvZGluZ18oMCksIGtpbmRfKEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpLCBpbnZhbGlkXyh0cnVl KSB7fQorKworKyAgc3RhdGljIEZsb2F0UmVnaXN0ZXIgRnJvbUNvZGUodWludDMyX3QgaSkgewor KyAgICBNT1pfQVNTRVJUKGkgPCBDb2Rlczo6VG90YWwpOworKyAgICByZXR1cm4gRmxvYXRSZWdp c3RlcihGbG9hdFJlZ2lzdGVyczo6ZW5jb2RpbmcoaSksIEZsb2F0UmVnaXN0ZXJzOjpraW5kKGkp KTsKKysgIH0KKysKKysgIGJvb2wgaXNTaW5nbGUoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQo IWludmFsaWRfKTsKKysgICAgcmV0dXJuIGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGU7 CisrICB9CisrICBib29sIGlzRG91YmxlKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpbnZh bGlkXyk7CisrICAgIHJldHVybiBraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6RG91YmxlOworKyAg fQorKyAgYm9vbCBpc1NpbWQxMjgoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRf KTsKKysgICAgcmV0dXJuIGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4OworKyAgfQor KyAgYm9vbCBpc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBpbnZhbGlkXzsgfQorKworKyAgRmxv YXRSZWdpc3RlciBhc1NpbmdsZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaW52YWxpZF8p OworKyAgICByZXR1cm4gRmxvYXRSZWdpc3RlcihFbmNvZGluZyhlbmNvZGluZ18pLCBGbG9hdFJl Z2lzdGVyczo6U2luZ2xlKTsKKysgIH0KKysgIEZsb2F0UmVnaXN0ZXIgYXNEb3VibGUoKSBjb25z dCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAgcmV0dXJuIEZsb2F0UmVnaXN0 ZXIoRW5jb2RpbmcoZW5jb2RpbmdfKSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZSk7CisrICB9Cisr ICBGbG9hdFJlZ2lzdGVyIGFzU2ltZDEyOCgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaW52 YWxpZF8pOworKyAgICByZXR1cm4gRmxvYXRSZWdpc3RlcihFbmNvZGluZyhlbmNvZGluZ18pLCBG bG9hdFJlZ2lzdGVyczo6U2ltZDEyOCk7CisrICB9CisrCisrICBjb25zdGV4cHIgdWludDMyX3Qg c2l6ZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOworKyAgICBpZiAoa2lu ZF8gPT0gRmxvYXRSZWdpc3RlcnM6OkRvdWJsZSkgeworKyAgICAgIHJldHVybiBzaXplb2YoZG91 YmxlKTsKKysgICAgfQorKyAgICBpZiAoa2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSkg eworKyAgICAgIHJldHVybiBzaXplb2YoZmxvYXQpOworKyAgICB9CisrICAgIE1PWl9BU1NFUlQo a2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpOworKyAgICByZXR1cm4gMTY7CisrICB9 CisrCisrICBjb25zdGV4cHIgQ29kZSBjb2RlKCkgY29uc3QgeworKyAgICByZXR1cm4gQ29kZXM6 OmZyb21QYXJ0cyhlbmNvZGluZ18sIGtpbmRfLCBpbnZhbGlkXyk7CisrICB9CisrCisrICBjb25z dGV4cHIgRW5jb2RpbmcgZW5jb2RpbmcoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFs aWRfKTsKKysgICAgLy8gU2ltZDEyOCBsaXZlcyBpbiBWUi1uYW1lc3BhY2UgYXQgVlNSMzItNjMg KD0gVlIwLTMxKS4gU2luZ2xlL0RvdWJsZQorKyAgICAvLyBzaGFyZSBGUFIgbmFtZXNwYWNlIGF0 IFZTUjAtMzEuIFRoZSB1bmlmaWVkIFhYLWZvcm0gZW5jb2RlcnMgc3BsaXQKKysgICAgLy8gdGhl IHJlc3VsdCBpbnRvIGxvdy01LWJpdCBWUlQvVlJBL1ZSQiArIFRYL0FYL0JYIGJpdHM7IFZNWAor KyAgICAvLyBGbG9hdFJlZ2lzdGVyLXRha2luZyBlbmNvZGVycyBtYXNrIHdpdGggYCYgMzFgIGZv ciB0aGUgcmF3IFZSCisrICAgIC8vIGZpZWxkLiBTbyAzMitFIGZsb3dzIGNvcnJlY3RseSB0aHJv dWdoIGJvdGggcGF0aHMuCisrICAgIHJldHVybiBFbmNvZGluZyhlbmNvZGluZ18gKworKyAgICAg ICAgICAgICAgICAgICAgKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4ID8gMzIgOiAw KSk7CisrICB9CisrCisrICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gRmxvYXRS ZWdpc3RlcnM6OkdldE5hbWUoY29kZSgpKTsgfQorKyAgYm9vbCB2b2xhdGlsZV8oKSBjb25zdCB7 CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAgcmV0dXJuICEhKChTZXRUeXBlKDEp IDw8IGNvZGUoKSkgJiBGbG9hdFJlZ2lzdGVyczo6Vm9sYXRpbGVNYXNrKTsKKysgIH0KKysgIGNv bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oRmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3QgeworKyAg ICByZXR1cm4gY29kZSgpICE9IG90aGVyLmNvZGUoKTsKKysgIH0KKysgIGNvbnN0ZXhwciBib29s IG9wZXJhdG9yPT0oRmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3QgeworKyAgICByZXR1cm4gY29k ZSgpID09IG90aGVyLmNvZGUoKTsKKysgIH0KKysKKysgIGJvb2wgYWxpYXNlcyhGbG9hdFJlZ2lz dGVyIG90aGVyKSBjb25zdCB7CisrICAgIC8vIFJlZ2lzdGVyLWNsYXNzIHBhcnRpdGlvbjoge1Np bmdsZSwgRG91YmxlfSBzaGFyZSBGUFJzIChWU1IwLTMxKTsKKysgICAgLy8gU2ltZDEyOCBsaXZl cyBpbiBWUi1uYW1lc3BhY2UgKFZTUjMyLTYzKS4gRlBSIGY1IChTaW5nbGUvRG91YmxlCisrICAg IC8vIGVuY29kaW5nIDUpIGFuZCBWUiB2NSAoU2ltZDEyOCBlbmNvZGluZyA1KSBhcmUgZGlzdGlu Y3QgcGh5c2ljYWwKKysgICAgLy8gcmVnaXN0ZXJzLgorKyAgICBpZiAoZW5jb2RpbmdfICE9IG90 aGVyLmVuY29kaW5nXykgcmV0dXJuIGZhbHNlOworKyAgICBib29sIHNlbGZTaW1kID0gKGtpbmRf ID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KTsKKysgICAgYm9vbCBvdGhlclNpbWQgPSAob3Ro ZXIua2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpOworKyAgICByZXR1cm4gc2VsZlNp bWQgPT0gb3RoZXJTaW1kOworKyAgfQorKyAgYm9vbCBlcXVpdihGbG9hdFJlZ2lzdGVyIG90aGVy KSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAgcmV0dXJuIGtpbmRf ID09IG90aGVyLmtpbmRfOworKyAgfQorKworKyAgdWludDMyX3QgbnVtQWxpYXNlZCgpIGNvbnN0 IHsKKysgICAgcmV0dXJuIChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgPyAxIDog MjsKKysgIH0KKysgIHVpbnQzMl90IG51bUFsaWduZWRBbGlhc2VkKCkgeyByZXR1cm4gbnVtQWxp YXNlZCgpOyB9CisrCisrICBGbG9hdFJlZ2lzdGVyIGFsaWFzZWQodWludDMyX3QgYWxpYXNJZHgp IHsKKysgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOworKyAgICBNT1pfQVNTRVJUKGFsaWFzSWR4 IDwgbnVtQWxpYXNlZCgpKTsKKysgICAgaWYgKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1k MTI4KSB7CisrICAgICAgcmV0dXJuICp0aGlzOworKyAgICB9CisrICAgIEtpbmQgb3RoZXJLaW5k ID0gKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGUpCisrICAgICAgICAgICAgICAgICAg ICAgICAgID8gRmxvYXRSZWdpc3RlcnM6OkRvdWJsZQorKyAgICAgICAgICAgICAgICAgICAgICAg ICA6IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGU7CisrICAgIEtpbmQgc2VsZWN0ZWRLaW5kID0gKGFs aWFzSWR4ID09IDApID8gS2luZChraW5kXykgOiBvdGhlcktpbmQ7CisrICAgIHJldHVybiBGbG9h dFJlZ2lzdGVyKEVuY29kaW5nKGVuY29kaW5nXyksIHNlbGVjdGVkS2luZCk7CisrICB9CisrICBG bG9hdFJlZ2lzdGVyIGFsaWduZWRBbGlhc2VkKHVpbnQzMl90IGFsaWFzSWR4KSB7CisrICAgIE1P Wl9BU1NFUlQoYWxpYXNJZHggPCBudW1BbGlhc2VkKCkpOworKyAgICByZXR1cm4gYWxpYXNlZChh bGlhc0lkeCk7CisrICB9CisrICBTZXRUeXBlIGFsaWduZWRPckRvbWluYXRlZEFsaWFzZWRTZXQo KSBjb25zdCB7CisrICAgIGlmIChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgewor KyAgICAgIHJldHVybiBTZXRUeXBlKDEpIDw8ICgodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OlNp bWQxMjgpICoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpU b3RhbFBoeXMpICsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdfKTsKKysg ICAgfQorKyAgICByZXR1cm4gKENvZGVzOjpTcHJlYWRTaW5nbGUgfCBDb2Rlczo6U3ByZWFkRG91 YmxlKSA8PCBlbmNvZGluZ187CisrICB9CisrCisrICBzdGF0aWMgY29uc3RleHByIFJlZ1R5cGVO YW1lIERlZmF1bHRUeXBlID0gUmVnVHlwZU5hbWU6OkZsb2F0NjQ7CisrCisrICB0ZW1wbGF0ZSA8 UmVnVHlwZU5hbWUgTmFtZSA9IERlZmF1bHRUeXBlPgorKyAgc3RhdGljIFNldFR5cGUgTGl2ZUFz SW5kZXhhYmxlU2V0KFNldFR5cGUgcykgeworKyAgICByZXR1cm4gU2V0VHlwZSgwKTsKKysgIH0K KysKKysgIHRlbXBsYXRlIDxSZWdUeXBlTmFtZSBOYW1lID0gRGVmYXVsdFR5cGU+CisrICBzdGF0 aWMgU2V0VHlwZSBBbGxvY2F0YWJsZUFzSW5kZXhhYmxlU2V0KFNldFR5cGUgcykgeworKyAgICBz dGF0aWNfYXNzZXJ0KE5hbWUgIT0gUmVnVHlwZU5hbWU6OkFueSwgIkFsbG9jYXRhYmxlIHNldCBh cmUgbm90IGl0ZXJhYmxlIik7CisrICAgIHJldHVybiBMaXZlQXNJbmRleGFibGVTZXQ8TmFtZT4o cyk7CisrICB9CisrCisrICBzdGF0aWMgVHlwZWRSZWdpc3RlclNldDxGbG9hdFJlZ2lzdGVyPiBS ZWR1Y2VTZXRGb3JQdXNoKAorKyAgICAgIGNvbnN0IFR5cGVkUmVnaXN0ZXJTZXQ8RmxvYXRSZWdp c3Rlcj4mIHMpOworKyAgc3RhdGljIHVpbnQzMl90IEdldFB1c2hTaXplSW5CeXRlcyhjb25zdCBU eXBlZFJlZ2lzdGVyU2V0PEZsb2F0UmVnaXN0ZXI+JiBzKTsKKysgIHVpbnQzMl90IGdldFJlZ2lz dGVyRHVtcE9mZnNldEluQnl0ZXMoKTsKKyt9OworKworK3RlbXBsYXRlIDw+CisraW5saW5lIEZs b2F0UmVnaXN0ZXI6OlNldFR5cGUKKytGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVTZXQ8 UmVnVHlwZU5hbWU6OkZsb2F0MzI+KFNldFR5cGUgc2V0KSB7CisrICByZXR1cm4gc2V0ICYgRmxv YXRSZWdpc3RlcnM6OkFsbFNpbmdsZU1hc2s7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5l IEZsb2F0UmVnaXN0ZXI6OlNldFR5cGUKKytGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVT ZXQ8UmVnVHlwZU5hbWU6OkZsb2F0NjQ+KFNldFR5cGUgc2V0KSB7CisrICByZXR1cm4gc2V0ICYg RmxvYXRSZWdpc3RlcnM6OkFsbERvdWJsZU1hc2s7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5s aW5lIEZsb2F0UmVnaXN0ZXI6OlNldFR5cGUKKytGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFi bGVTZXQ8UmVnVHlwZU5hbWU6OlZlY3RvcjEyOD4oU2V0VHlwZSBzZXQpIHsKKysgIHJldHVybiBz ZXQgJiBGbG9hdFJlZ2lzdGVyczo6QWxsU2ltZDEyOE1hc2s7CisrfQorKworK3RlbXBsYXRlIDw+ CisraW5saW5lIEZsb2F0UmVnaXN0ZXI6OlNldFR5cGUKKytGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJ bmRleGFibGVTZXQ8UmVnVHlwZU5hbWU6OkFueT4oU2V0VHlwZSBzZXQpIHsKKysgIHJldHVybiBz ZXQ7CisrfQorKworK2lubGluZSBib29sIGhhc1VuYWxpYXNlZERvdWJsZSgpIHsgcmV0dXJuIGZh bHNlOyB9CisraW5saW5lIGJvb2wgaGFzTXVsdGlBbGlhcygpIHsgcmV0dXJuIGZhbHNlOyB9Cisr CisrLy8gUFBDNjQgZmVhdHVyZSBiaXRzIHBhY2tlZCBpbnRvIHRoZSB2YWx1ZSBHZXRQUEM2NEZs YWdzKCkgcmV0dXJucywKKysvLyB3aGljaCBmZWVkcyB3YXNtL1dhc21Db21waWxlLmNwcCdzIHBl ci1hcmNoaXRlY3R1cmUgY29kZSBzaWduYXR1cmUuCisrLy8gRGVmaW5lZCBhcyBlbnVtIGNvbnN0 YW50cyAobm90IGVudW0gY2xhc3MpIHNvIGNhbGxlcnMgY2FuIE9SL0FORAorKy8vIGZyZWVseS4g TmV3IGJpdHMgc2hvdWxkIHJlbWFpbiBiYWNrd2FyZC1jb21wYXRpYmxlIOKAlCBvbGRlciBzaWdu YXR1cmVzCisrLy8gbXVzdCBrZWVwIG1lYW5pbmcgdGhlIHNhbWUgc2V0IG9mIGZlYXR1cmVzLgor K2VudW0gUFBDNjRGZWF0dXJlRmxhZ3MgOiB1aW50MzJfdCB7CisrICBQUEM2NEZsYWdfUE9XRVI5 ID0gMXUgPDwgMCwKKysgIC8vIEZ1dHVyZTogUFBDNjRGbGFnX1BPV0VSMTAgPSAxdSA8PCAxLCBQ UEM2NEZsYWdfVlNYNCA9IDF1IDw8IDIsIC4uLgorK307CisrCisrdWludDMyX3QgR2V0UFBDNjRG bGFncygpOworKworK2NsYXNzIFBQQzY0RmxhZ3MgZmluYWwgeworKyBwdWJsaWM6CisrICBQUEM2 NEZsYWdzKCkgPSBkZWxldGU7CisrCisrICAvLyBQUEM2NEZsYWdzOjpJbml0IGlzIGNhbGxlZCBm cm9tIHRoZSBKaXRDb250ZXh0IGNvbnN0cnVjdG9yIHRvIHJlYWQgdGhlCisrICAvLyBoYXJkd2Fy ZSBjYXBhYmlsaXRpZXMgKHZpYSBnZXRhdXh2YWwoQVRfSFdDQVAyKSkuIEl0IG11c3QgYmUgY2Fs bGVkCisrICAvLyBleGFjdGx5IG9uY2UsIGJlZm9yZSBIYXNQT1dFUjkoKS9IYXNQT1dFUjEwKCkg YXJlIHVzZWQuCisrICBzdGF0aWMgdm9pZCBJbml0KCk7CisrfTsKKysKKytib29sIEhhc1BPV0VS OSgpOworK2Jvb2wgSGFzUE9XRVIxMCgpOworKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAv LyBuYW1lc3BhY2UganMKKysKKysjZW5kaWYgLyogaml0X3BwYzY0X0FyY2hpdGVjdHVyZV9wcGM2 NF9oICovCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3Bw IGIvanMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi40ODEwNzBjNGM2ZDUKKy0tLSAvZGV2L251bGwKKysr KyBiL2pzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcAorQEAgLTAsMCArMSwzMDI4 IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBu aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9 MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVy bXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkg b2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBj YW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2lu Y2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKKysKKysjaW5jbHVkZSAibW96aWxs YS9EZWJ1Z09ubHkuaCIKKysjaW5jbHVkZSAibW96aWxsYS9NYXliZS5oIgorKworKyNpbmNsdWRl ICJnYy9NYXJraW5nLmgiCisrI2luY2x1ZGUgImppdC9BdXRvV3JpdGFibGVKaXRDb2RlLmgiCisr I2luY2x1ZGUgImppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisrI2luY2x1ZGUgImppdC9GbHVz aElDYWNoZS5oIgorKworK3VzaW5nIG1vemlsbGE6OkRlYnVnT25seTsKKysKKyt1c2luZyBuYW1l c3BhY2UganM7CisrdXNpbmcgbmFtZXNwYWNlIGpzOjpqaXQ7CisrCisrLy8gRUxGdjIgQUJJOiA4 IEdQUnMgKHIzLXIxMCksIDEzIEZQUnMgKGYxLWYxMykuCisrLy8gRlAgYXJndW1lbnRzIGFsc28g Y29uc3VtZSBhIEdQUiBzbG90IHBlciBFTEZ2MiBjb252ZW50aW9uLgorK0FCSUFyZyBBQklBcmdH ZW5lcmF0b3I6Om5leHQoTUlSVHlwZSB0eXBlKSB7CisrICBzd2l0Y2ggKHR5cGUpIHsKKysgICAg Y2FzZSBNSVJUeXBlOjpJbnQzMjoKKysgICAgY2FzZSBNSVJUeXBlOjpJbnQ2NDoKKysgICAgY2Fz ZSBNSVJUeXBlOjpQb2ludGVyOgorKyAgICBjYXNlIE1JUlR5cGU6Oldhc21BbnlSZWY6CisrICAg IGNhc2UgTUlSVHlwZTo6V2FzbUFycmF5RGF0YToKKysgICAgY2FzZSBNSVJUeXBlOjpTdGFja1Jl c3VsdHM6IHsKKysgICAgICBpZiAoaW50UmVnSW5kZXhfID49IE51bUludEFyZ1JlZ3MpIHsKKysg ICAgICAgIGN1cnJlbnRfID0gQUJJQXJnKHN0YWNrT2Zmc2V0Xyk7CisrICAgICAgICBzdGFja09m ZnNldF8gKz0gc2l6ZW9mKHVpbnRwdHJfdCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY3VycmVudF8gPSBBQklBcmcoUmVnaXN0ZXI6OkZyb21Db2RlKFJlZ2lzdGVyczo6cjMg KyBpbnRSZWdJbmRleF8pKTsKKysgICAgICBpbnRSZWdJbmRleF8rKzsKKysgICAgICBicmVhazsK KysgICAgfQorKyAgICBjYXNlIE1JUlR5cGU6OkZsb2F0MzI6CisrICAgIGNhc2UgTUlSVHlwZTo6 RG91YmxlOiB7CisrICAgICAgaWYgKGZsb2F0UmVnSW5kZXhfID09IE51bUZsb2F0QXJnUmVncykg eworKyAgICAgICAgY3VycmVudF8gPSBBQklBcmcoc3RhY2tPZmZzZXRfKTsKKysgICAgICAgIHN0 YWNrT2Zmc2V0XyArPSBzaXplb2YoZG91YmxlKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0K KysgICAgICBjdXJyZW50XyA9IEFCSUFyZyhGbG9hdFJlZ2lzdGVyKAorKyAgICAgICAgICBGbG9h dFJlZ2lzdGVyczo6RW5jb2RpbmcoRmxvYXRSZWdpc3RlcnM6OmYxICsgZmxvYXRSZWdJbmRleF8p LAorKyAgICAgICAgICB0eXBlID09IE1JUlR5cGU6OkRvdWJsZSA/IEZsb2F0UmVnaXN0ZXJzOjpE b3VibGUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBGbG9hdFJlZ2lzdGVy czo6U2luZ2xlKSk7CisrICAgICAgZmxvYXRSZWdJbmRleF8rKzsKKysgICAgICAvLyBFTEZ2MiBB Qkk6IGVhY2ggRlAgYXJnIGFsc28gY29uc3VtZXMgYSBHUFIgc2xvdCAoc2hhZG93KS4KKysgICAg ICAvLyBDYXAgYXQgTnVtSW50QXJnUmVncyBzbyBzdWJzZXF1ZW50IGludCBhcmdzIGdvIHRvIHRo ZSBzdGFjay4KKysgICAgICBpZiAoaW50UmVnSW5kZXhfIDwgTnVtSW50QXJnUmVncykgeworKyAg ICAgICAgaW50UmVnSW5kZXhfKys7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgTUlSVHlwZTo6U2ltZDEyODogeworKyAgICAgIC8vIFBhc3MgdjEyOCBpbiBGUCBy ZWdpc3RlcnMgKFNpbWQxMjgga2luZCkuIE9uIFBQQzY0IEVMRnYyLCBTSU1ECisrICAgICAgLy8g dmFsdWVzIHVzZSB0aGUgc2FtZSBWU1IgcmVnaXN0ZXIgZmlsZSBhcyBGUCBhcmdzLgorKyAgICAg IGlmIChmbG9hdFJlZ0luZGV4XyA9PSBOdW1GbG9hdEFyZ1JlZ3MpIHsKKysgICAgICAgIGN1cnJl bnRfID0gQUJJQXJnKHN0YWNrT2Zmc2V0Xyk7CisrICAgICAgICBzdGFja09mZnNldF8gKz0gMTY7 CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY3VycmVudF8gPSBBQklBcmcoRmxv YXRSZWdpc3RlcigKKysgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkVuY29kaW5nKEZsb2F0UmVn aXN0ZXJzOjpmMSArIGZsb2F0UmVnSW5kZXhfKSwKKysgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6 OlNpbWQxMjgpKTsKKysgICAgICBmbG9hdFJlZ0luZGV4XysrOworKyAgICAgIGlmIChpbnRSZWdJ bmRleF8gPCBOdW1JbnRBcmdSZWdzKSB7CisrICAgICAgICBpbnRSZWdJbmRleF8rKzsKKysgICAg ICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JB U0goIlVuZXhwZWN0ZWQgYXJndW1lbnQgdHlwZSIpOworKyAgfQorKyAgcmV0dXJuIGN1cnJlbnRf OworK30KKysKKysvLyBDb25kaXRpb24gaW52ZXJzaW9uIHRhYmxlcy4KKytBc3NlbWJsZXI6OkNv bmRpdGlvbiBBc3NlbWJsZXI6OkludmVydENvbmRpdGlvbihDb25kaXRpb24gY29uZCkgeworKyAg c3dpdGNoIChjb25kKSB7CisrICAgIGNhc2UgRXF1YWw6CisrICAgICAgcmV0dXJuIE5vdEVxdWFs OworKyAgICBjYXNlIE5vdEVxdWFsOgorKyAgICAgIHJldHVybiBFcXVhbDsKKysgICAgY2FzZSBM ZXNzVGhhbjoKKysgICAgICByZXR1cm4gR3JlYXRlclRoYW5PckVxdWFsOworKyAgICBjYXNlIExl c3NUaGFuT3JFcXVhbDoKKysgICAgICByZXR1cm4gR3JlYXRlclRoYW47CisrICAgIGNhc2UgR3Jl YXRlclRoYW46CisrICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDsKKysgICAgY2FzZSBHcmVh dGVyVGhhbk9yRXF1YWw6CisrICAgICAgcmV0dXJuIExlc3NUaGFuOworKyAgICBjYXNlIEFib3Zl OgorKyAgICAgIHJldHVybiBCZWxvd09yRXF1YWw7CisrICAgIGNhc2UgQWJvdmVPckVxdWFsOgor KyAgICAgIHJldHVybiBCZWxvdzsKKysgICAgY2FzZSBCZWxvdzoKKysgICAgICByZXR1cm4gQWJv dmVPckVxdWFsOworKyAgICBjYXNlIEJlbG93T3JFcXVhbDoKKysgICAgICByZXR1cm4gQWJvdmU7 CisrICAgIGNhc2UgWmVybzoKKysgICAgICByZXR1cm4gTm9uWmVybzsKKysgICAgY2FzZSBOb25a ZXJvOgorKyAgICAgIHJldHVybiBaZXJvOworKyAgICBjYXNlIFNpZ25lZDoKKysgICAgICByZXR1 cm4gTm90U2lnbmVkOworKyAgICBjYXNlIE5vdFNpZ25lZDoKKysgICAgICByZXR1cm4gU2lnbmVk OworKyAgICBjYXNlIFNPQml0OgorKyAgICAgIHJldHVybiBOU09CaXQ7CisrICAgIGNhc2UgTlNP Qml0OgorKyAgICAgIHJldHVybiBTT0JpdDsKKysgICAgY2FzZSBPdmVyZmxvdzoKKysgICAgICBy ZXR1cm4gTm90T3ZlcmZsb3c7CisrICAgIGNhc2UgTm90T3ZlcmZsb3c6CisrICAgICAgcmV0dXJu IE92ZXJmbG93OworKyAgICBjYXNlIENhcnJ5U2V0OgorKyAgICAgIHJldHVybiBDYXJyeUNsZWFy OworKyAgICBjYXNlIENhcnJ5Q2xlYXI6CisrICAgICAgcmV0dXJuIENhcnJ5U2V0OworKyAgICBk ZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBjb25kaXRpb24iKTsKKysgIH0K Kyt9CisrCisrQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gQXNzZW1ibGVyOjpJbnZlcnRDb25k aXRpb24oRG91YmxlQ29uZGl0aW9uIGNvbmQpIHsKKysgIHN3aXRjaCAoY29uZCkgeworKyAgICBj YXNlIERvdWJsZU9yZGVyZWQ6CisrICAgICAgcmV0dXJuIERvdWJsZVVub3JkZXJlZDsKKysgICAg Y2FzZSBEb3VibGVFcXVhbDoKKysgICAgICByZXR1cm4gRG91YmxlTm90RXF1YWxPclVub3JkZXJl ZDsKKysgICAgY2FzZSBEb3VibGVOb3RFcXVhbDoKKysgICAgICByZXR1cm4gRG91YmxlRXF1YWxP clVub3JkZXJlZDsKKysgICAgY2FzZSBEb3VibGVHcmVhdGVyVGhhbjoKKysgICAgICByZXR1cm4g RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQ7CisrICAgIGNhc2UgRG91YmxlR3JlYXRl clRoYW5PckVxdWFsOgorKyAgICAgIHJldHVybiBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkOwor KyAgICBjYXNlIERvdWJsZUxlc3NUaGFuOgorKyAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhh bk9yRXF1YWxPclVub3JkZXJlZDsKKysgICAgY2FzZSBEb3VibGVMZXNzVGhhbk9yRXF1YWw6Cisr ICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQ7CisrICAgIGNhc2UgRG91 YmxlVW5vcmRlcmVkOgorKyAgICAgIHJldHVybiBEb3VibGVPcmRlcmVkOworKyAgICBjYXNlIERv dWJsZUVxdWFsT3JVbm9yZGVyZWQ6CisrICAgICAgcmV0dXJuIERvdWJsZU5vdEVxdWFsOworKyAg ICBjYXNlIERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ6CisrICAgICAgcmV0dXJuIERvdWJsZUVx dWFsOworKyAgICBjYXNlIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQ6CisrICAgICAgcmV0 dXJuIERvdWJsZUxlc3NUaGFuT3JFcXVhbDsKKysgICAgY2FzZSBEb3VibGVHcmVhdGVyVGhhbk9y RXF1YWxPclVub3JkZXJlZDoKKysgICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW47CisrICAgIGNh c2UgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDoKKysgICAgICByZXR1cm4gRG91YmxlR3JlYXRl clRoYW5PckVxdWFsOworKyAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVk OgorKyAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhhbjsKKysgICAgZGVmYXVsdDoKKysgICAg ICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgY29uZGl0aW9uIik7CisrICB9CisrfQorKworKy8vIElu c3RJbW0gaGVscGVyLgorK3VpbnQ4X3QgSW5zdEltbTo6dHJhcHRhZygpIHsKKysgIHVpbnQ4X3Qg ciA9ICgoZGF0YSAmIDB4MDAxZjAwMDApID4+IDE2KTsKKysgIE1PWl9BU1NFUlQoaXNPcGNvZGUo UFBDX3R3KSk7CisrICBNT1pfQVNTRVJUKHIgPT0gKChkYXRhICYgMHgwMDAwZjgwMCkgPj4gMTEp KTsKKysgIHJldHVybiByICYgMHhmZTsKKyt9CisrCisrQk9mZkltbTE2OjpCT2ZmSW1tMTYoSW5z dEltbSBpbnN0KSA6IGRhdGEoaW5zdC5leHRyYWN0SW1tMTZWYWx1ZSgpICYgMHhGRkZDKSB7Cisr ICAvLyBTaWduLWV4dGVuZCB0aGUgMTYtYml0IGZpZWxkLgorKyAgaWYgKGRhdGEgJiAweDgwMDAp IHsKKysgICAgZGF0YSB8PSB+MHhGRkZGOworKyAgfQorK30KKysKKytJbnN0cnVjdGlvbiogQk9m ZkltbTE2OjpnZXREZXN0KEluc3RydWN0aW9uKiBzcmMpIGNvbnN0IHsKKysgIHJldHVybiAoSW5z dHJ1Y3Rpb24qKSgodWludDhfdCopc3JjICsgZGF0YSk7CisrfQorKworK0luc3RydWN0aW9uKiBK T2ZmSW1tMjY6OmdldERlc3QoSW5zdHJ1Y3Rpb24qIHNyYykgY29uc3QgeworKyAgcmV0dXJuIChJ bnN0cnVjdGlvbiopKCh1aW50OF90KilzcmMgKyBkYXRhKTsKKyt9CisrCisrSW1tMTY6OkltbTE2 KCkgOiB2YWx1ZSgwKSB7fQorKworK0ltbTg6OkltbTgoKSA6IHZhbHVlKDApIHt9CisrCisrLy8g QnVmZmVyIG1hbmFnZW1lbnQuCisrYm9vbCBBc3NlbWJsZXI6Om9vbSgpIGNvbnN0IHsKKysgIHJl dHVybiBBc3NlbWJsZXJTaGFyZWQ6Om9vbSgpIHx8IG1fYnVmZmVyLm9vbSgpIHx8IGp1bXBSZWxv Y2F0aW9uc18ub29tKCkgfHwKKysgICAgICAgICBkYXRhUmVsb2NhdGlvbnNfLm9vbSgpOworK30K KysKKyt2b2lkIEFzc2VtYmxlcjo6ZmluaXNoKCkgeworKyAgTU9aX0FTU0VSVCghaXNGaW5pc2hl ZCk7CisrICBpc0ZpbmlzaGVkID0gdHJ1ZTsKKysgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOworK30K KysKKytib29sIEFzc2VtYmxlcjo6YXBwZW5kUmF3Q29kZShjb25zdCB1aW50OF90KiBjb2RlLCBz aXplX3QgbnVtQnl0ZXMpIHsKKysgIHJldHVybiBtX2J1ZmZlci5hcHBlbmRSYXdDb2RlKGNvZGUs IG51bUJ5dGVzKTsKKyt9CisrCisrYm9vbCBBc3NlbWJsZXI6OnJlc2VydmUoc2l6ZV90IHNpemUp IHsKKysgIC8vIEZpeGVkLXNpemUgY2h1bmsgYnVmZmVyOyBubyBwb2ludCBpbiByZXNlcnZpbmcg bm93IHZzLiBvbi1kZW1hbmQuCisrICByZXR1cm4gIW9vbSgpOworK30KKysKKytib29sIEFzc2Vt Ymxlcjo6c3dhcEJ1ZmZlcih3YXNtOjpCeXRlcyYgYnl0ZXMpIHsKKysgIE1PWl9BU1NFUlQoYnl0 ZXMuZW1wdHkoKSk7CisrICBpZiAoIWJ5dGVzLnJlc2l6ZShieXRlc05lZWRlZCgpKSkgeworKyAg ICByZXR1cm4gZmFsc2U7CisrICB9CisrICBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShieXRlcy5i ZWdpbigpKTsKKysgIHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6Y29weUp1 bXBSZWxvY2F0aW9uVGFibGUodWludDhfdCogZGVzdCkgeworKyAgaWYgKGp1bXBSZWxvY2F0aW9u c18ubGVuZ3RoKCkpIHsKKysgICAgbWVtY3B5KGRlc3QsIGp1bXBSZWxvY2F0aW9uc18uYnVmZmVy KCksIGp1bXBSZWxvY2F0aW9uc18ubGVuZ3RoKCkpOworKyAgfQorK30KKysKKyt2b2lkIEFzc2Vt Ymxlcjo6Y29weURhdGFSZWxvY2F0aW9uVGFibGUodWludDhfdCogZGVzdCkgeworKyAgaWYgKGRh dGFSZWxvY2F0aW9uc18ubGVuZ3RoKCkpIHsKKysgICAgbWVtY3B5KGRlc3QsIGRhdGFSZWxvY2F0 aW9uc18uYnVmZmVyKCksIGRhdGFSZWxvY2F0aW9uc18ubGVuZ3RoKCkpOworKyAgfQorK30KKysK Kyt2b2lkIEFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkodm9pZCogYnVmZmVyKSB7CisrICBNT1pf QVNTRVJUKGlzRmluaXNoZWQpOworKyAgbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoc3RhdGljX2Nh c3Q8dWludDhfdCo+KGJ1ZmZlcikpOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6ZXhlY3V0YWJs ZUNvcHkodWludDhfdCogYnVmZmVyKSB7CisrICBNT1pfQVNTRVJUKGlzRmluaXNoZWQpOworKyAg bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYnVmZmVyKTsKKyt9CisrCisrc2l6ZV90IEFzc2VtYmxl cjo6c2l6ZSgpIGNvbnN0IHsKKysgIC8vIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xz OjpzaXplKCkgYXNzZXJ0cyBwb29sIGlzIGVtcHR5LgorKyAgLy8gRmx1c2ggcGVuZGluZyBwb29s IGVudHJpZXMgZmlyc3QuCisrICBjb25zdF9jYXN0PFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29w eSY+KG1fYnVmZmVyKS5mbHVzaFBvb2woKTsKKysgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7Cisr fQorKworK3NpemVfdCBBc3NlbWJsZXI6Omp1bXBSZWxvY2F0aW9uVGFibGVCeXRlcygpIGNvbnN0 IHsKKysgIHJldHVybiBqdW1wUmVsb2NhdGlvbnNfLmxlbmd0aCgpOworK30KKysKKytzaXplX3Qg QXNzZW1ibGVyOjpkYXRhUmVsb2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdCB7CisrICByZXR1cm4g ZGF0YVJlbG9jYXRpb25zXy5sZW5ndGgoKTsKKyt9CisrCisrc2l6ZV90IEFzc2VtYmxlcjo6Ynl0 ZXNOZWVkZWQoKSBjb25zdCB7CisrICByZXR1cm4gc2l6ZSgpICsganVtcFJlbG9jYXRpb25UYWJs ZUJ5dGVzKCkgKyBkYXRhUmVsb2NhdGlvblRhYmxlQnl0ZXMoKTsKKyt9CisrCisrLy8gV3JpdGUg YW4gaW5zdHJ1Y3Rpb24gaW50byB0aGUgYnVmZmVyIG9yIHRvIGFuIGV4dGVybmFsIGRlc3RpbmF0 aW9uLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OndyaXRlSW5zdCh1aW50MzJfdCB4LCB1aW50 MzJfdCogZGVzdCkgeworKyAgTU9aX0FTU0VSVChoYXNDcmVhdG9yKCkpOworKyAgaWYgKGRlc3Qg PT0gbnVsbHB0cikgeworKyAgICByZXR1cm4gbV9idWZmZXIucHV0SW50KHgpOworKyAgfQorKwor KyAgV3JpdGVJbnN0U3RhdGljKHgsIGRlc3QpOworKyAgcmV0dXJuIEJ1ZmZlck9mZnNldCgpOwor K30KKysKKyt2b2lkIEFzc2VtYmxlcjo6V3JpdGVJbnN0U3RhdGljKHVpbnQzMl90IHgsIHVpbnQz Ml90KiBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGRlc3QgIT0gbnVsbHB0cik7CisrICAqZGVzdCA9 IHg7CisrfQorKworKy8vIEFsaWdubWVudC4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjpoYWx0 aW5nQWxpZ24oaW50IGFsaWdubWVudCkgeworKyAgQnVmZmVyT2Zmc2V0IHJldDsKKysgIE1PWl9B U1NFUlQobV9idWZmZXIuaXNBbGlnbmVkKDQpKTsKKysgIGlmIChhbGlnbm1lbnQgPT0gOCkgewor KyAgICBpZiAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7CisrICAgICAgQnVmZmVy T2Zmc2V0IHRtcCA9IHhzX3RyYXAoKTsKKysgICAgICBpZiAoIXJldC5hc3NpZ25lZCgpKSB7Cisr ICAgICAgICByZXQgPSB0bXA7CisrICAgICAgfQorKyAgICB9CisrICB9IGVsc2UgeworKyAgICBN T1pfQVNTRVJUKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50IC0gMSkpID09IDApOworKyAgICB3aGls ZSAoc2l6ZSgpICYgKGFsaWdubWVudCAtIDEpKSB7CisrICAgICAgQnVmZmVyT2Zmc2V0IHRtcCA9 IHhzX3RyYXAoKTsKKysgICAgICBpZiAoIXJldC5hc3NpZ25lZCgpKSB7CisrICAgICAgICByZXQg PSB0bXA7CisrICAgICAgfQorKyAgICB9CisrICB9CisrICByZXR1cm4gcmV0OworK30KKysKKytC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjpub3BBbGlnbihpbnQgYWxpZ25tZW50KSB7CisrICBCdWZm ZXJPZmZzZXQgcmV0OworKyAgTU9aX0FTU0VSVChtX2J1ZmZlci5pc0FsaWduZWQoNCkpOworKyAg aWYgKGFsaWdubWVudCA9PSA4KSB7CisrICAgIGlmICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdu bWVudCkpIHsKKysgICAgICBCdWZmZXJPZmZzZXQgdG1wID0gYXNfbm9wKCk7CisrICAgICAgaWYg KCFyZXQuYXNzaWduZWQoKSkgeworKyAgICAgICAgcmV0ID0gdG1wOworKyAgICAgIH0KKysgICAg fQorKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VSVCgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAt IDEpKSA9PSAwKTsKKysgICAgd2hpbGUgKHNpemUoKSAmIChhbGlnbm1lbnQgLSAxKSkgeworKyAg ICAgIEJ1ZmZlck9mZnNldCB0bXAgPSBhc19ub3AoKTsKKysgICAgICBpZiAoIXJldC5hc3NpZ25l ZCgpKSB7CisrICAgICAgICByZXQgPSB0bXA7CisrICAgICAgfQorKyAgICB9CisrICB9CisrICBy ZXR1cm4gcmV0OworK30KKysKKysvLyBQcmltaXRpdmUgaW5zdHJ1Y3Rpb25zLgorK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX25vcCgpIHsKKysgIHNwZXcoIm5vcCIpOworKyAgcmV0dXJuIHdy aXRlSW5zdChQUENfbm9wKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHdz eW5jKCkgeworKyAgc3BldygibHdzeW5jIik7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19sd3N5 bmMpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zeW5jKCkgeworKyAgc3Bl dygic3luYyIpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfc3luYyk7CisrfQorKworK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX2lzeW5jKCkgeworKyAgc3BldygiaXN5bmMiKTsKKysgIHJl dHVybiB3cml0ZUluc3QoUFBDX2lzeW5jKTsKKyt9CisrCisrLy8gQnJhbmNoIGFuZCBqdW1wIGlu c3RydWN0aW9ucy4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iKEpPZmZJbW0yNiBvZmYs IEJyYW5jaEFkZHJlc3NUeXBlIGJhdCwgTGlua0JpdCBsYikgeworKyAgcmV0dXJuIGFzX2Iob2Zm LmVuY29kZSgpLCBiYXQsIGxiKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf YihpbnQzMl90IG9mZiwgQnJhbmNoQWRkcmVzc1R5cGUgYmF0LCBMaW5rQml0IGxiKSB7CisrICBz cGV3KCJiJXMlc1x0JXgiLCBiYXQgPT0gQWJzb2x1dGVCcmFuY2ggPyAiYSIgOiAiIiwgbGIgPyAi bCIgOiAiIiwgb2ZmKTsKKysgIE1PWl9BU1NFUlQoIShvZmYgJiAweDAzKSk7CisrICByZXR1cm4g d3JpdGVJbnN0KFBQQ19iIHwgKCh1aW50MzJfdClvZmYgJiAweDNmZmZmZmMpIHwgYmF0IHwgbGIp OworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19ibHIoTGlua0JpdCBsYikgewor KyAgc3BldygiYmxyJXMiLCBsYiA/ICJsIiA6ICIiKTsKKysgIHJldHVybiB3cml0ZUluc3QodWlu dDMyX3QoUFBDX2JscikgfCB1aW50MzJfdChsYikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc19iY3RyKExpbmtCaXQgbGIpIHsKKysgIHNwZXcoImJjdHIlcyIsIGxiID8gImwi IDogIiIpOworKyAgcmV0dXJuIHdyaXRlSW5zdCh1aW50MzJfdChQUENfYmN0cikgfCB1aW50MzJf dChsYikpOworK30KKysKKysvLyBDb25kaXRpb25hbCBicmFuY2hlcy4KKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19iYyhCT2ZmSW1tMTYgb2ZmLCBDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVy SUQgY3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiwgTGlu a0JpdCBsYikgeworKyAgcmV0dXJuIGFzX2JjKG9mZi5lbmNvZGUoKSwgY29uZCwgY3IsIGxrYiwg bGIpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhpbnQxNl90IG9mZiwg Q29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKKysgIHJldHVybiBhc19iYyhvZmYs IGNvbXB1dGVDb25kaXRpb25Db2RlKGNvbmQsIGNyKSwgbGtiLCBsYik7CisrfQorKworK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX2JjKEJPZmZJbW0xNiBvZmYsIERvdWJsZUNvbmRpdGlvbiBj b25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSZWdpc3RlcklEIGNyLCBMaWtl bHlCaXQgbGtiLCBMaW5rQml0IGxiKSB7CisrICByZXR1cm4gYXNfYmMob2ZmLmVuY29kZSgpLCBj b25kLCBjciwgbGtiLCBsYik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2Jj KGludDE2X3Qgb2ZmLCBEb3VibGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiwgTGlua0JpdCBsYikgewor KyAgcmV0dXJuIGFzX2JjKG9mZiwgY29tcHV0ZUNvbmRpdGlvbkNvZGUoY29uZCwgY3IpLCBsa2Is IGxiKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmNjdHIoQ29uZGl0aW9u IGNvbmQsIENSZWdpc3RlcklEIGNyLCBMaWtlbHlCaXQgbGtiLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpbmtCaXQgbGIpIHsKKysgIHJldHVybiBhc19iY2N0cihjb21wdXRl Q29uZGl0aW9uQ29kZShjb25kLCBjciksIGxrYiwgbGIpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19iY2N0cihEb3VibGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3Is CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiwgTGlua0Jp dCBsYikgeworKyAgcmV0dXJuIGFzX2JjY3RyKGNvbXB1dGVDb25kaXRpb25Db2RlKGNvbmQsIGNy KSwgbGtiLCBsYik7CisrfQorKworKy8vIENvbmRpdGlvbiBjb2RlIGNvbXB1dGF0aW9uOiB0dXJu IERvdWJsZUNvbmRpdGlvbiArIENSIGludG8gQk98QkkuCisrLy8gTWF5IGVtaXQgQ1IgbG9naWMg aW5zdHJ1Y3Rpb25zIGZvciBzeW50aGV0aWMgY29uZGl0aW9ucyBpbnZvbHZpbmcgRlUgYml0Lgor K3VpbnQxNl90IEFzc2VtYmxlcjo6Y29tcHV0ZUNvbmRpdGlvbkNvZGUoRG91YmxlQ29uZGl0aW9u IG9wLCBDUmVnaXN0ZXJJRCBjcikgeworKyAgY29uc3QgdWludDhfdCBjb25kQml0ID0gY3JCaXQo Y3IsIG9wKTsKKysgIGNvbnN0IHVpbnQ4X3QgZnVCaXQgPSBjckJpdChjciwgRG91YmxlVW5vcmRl cmVkKTsKKysgIHVpbnQzMl90IG5ld29wID0gKHVpbnQzMl90KW9wICYgMjU1OworKworKyAgaWYg KG9wICYgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkKSB7CisrICAgIGlmICgodWludDMyX3Qob3Ap ICYgQnJhbmNoT3B0aW9uTWFzaykgPT0gQnJhbmNoT25DbGVhcikgeworKyAgICAgIGFzX2Nyb3Jj KGNvbmRCaXQsIGZ1Qml0LCBjb25kQml0KTsKKysgICAgICBuZXdvcCB8PSBCcmFuY2hPblNldDsK KysgICAgfSBlbHNlIHsKKysgICAgICBpZiAoY29uZEJpdCAhPSBmdUJpdCkgeworKyAgICAgICAg YXNfY3Jvcihjb25kQml0LCBmdUJpdCwgY29uZEJpdCk7CisrICAgICAgfQorKyAgICB9CisrICB9 IGVsc2UgeworKyAgICBpZiAoKHVpbnQzMl90KG9wKSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJy YW5jaE9uQ2xlYXIpIHsKKysgICAgICBpZiAoY29uZEJpdCAhPSBmdUJpdCkgeworKyAgICAgICAg YXNfY3Jvcihjb25kQml0LCBmdUJpdCwgY29uZEJpdCk7CisrICAgICAgfQorKyAgICB9IGVsc2Ug eworKyAgICAgIGlmIChjb25kQml0ICE9IGZ1Qml0KSB7CisrICAgICAgICBhc19jcmFuZGMoY29u ZEJpdCwgY29uZEJpdCwgZnVCaXQpOworKyAgICAgIH0KKysgICAgfQorKyAgfQorKworKyAgcmV0 dXJuIChuZXdvcCArICgodWludDhfdCljciA8PCA2KSk7CisrfQorKworKy8vIENvbmRpdGlvbiBj b2RlIGNvbXB1dGF0aW9uOiB0dXJuIENvbmRpdGlvbiArIENSIGludG8gQk98QkkuCisrLy8gTWF5 IGVtaXQgbWNyeHJ4IGZvciBYRVItbWVkaWF0ZWQgY29uZGl0aW9ucy4KKyt1aW50MTZfdCBBc3Nl bWJsZXI6OmNvbXB1dGVDb25kaXRpb25Db2RlKENvbmRpdGlvbiBvcCwgQ1JlZ2lzdGVySUQgY3Ip IHsKKysgIHVpbnQzMl90IG5ld29wID0gKHVpbnQzMl90KW9wICYgMjU1OworKworKyAgaWYgKG9w ICYgQ29uZGl0aW9uT25seVhFUikgeworKyAgICBNT1pfQVNTRVJUKG9wID09IE92ZXJmbG93IHx8 IG9wID09IE5vdE92ZXJmbG93KTsKKysgICAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgICAgYXNf bWNyeHJ4KGNyKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAvLyBQT1dFUjg6IHJlYWQgWEVSLCBw bGFjZSBPViBpbnRvIHRoZSBHVCBwb3NpdGlvbiBvZiB0aGUgdGFyZ2V0CisrICAgICAgLy8gQ1Ig ZmllbGQuIE92ZXJmbG93IGNvbmRpdGlvbiAoMHgxYyA9IEdyZWF0ZXJUaGFuKSB0ZXN0cyBHVCBi aXQsCisrICAgICAgLy8gd2hpY2ggbWNyeHJ4IHBvcHVsYXRlcyB3aXRoIE9WMzIuIEZvciA2NC1i aXQgb3BzIE9WID09IE9WMzIuCisrICAgICAgLy8gWEVSIGxheW91dCBpbiBHUFIgbG93IDMyIGJp dHMgKElCTSk6IGJpdCAwPVNPLCAxPU9WLCAyPUNBLgorKyAgICAgIC8vIFRhcmdldDogR1QgcG9z aXRpb24gPSBJQk0gYml0IDQqY3IrMS4KKysgICAgICB4c19tZnhlcihyMCk7CisrICAgICAgaW50 IGd0Qml0ID0gNCAqIChpbnQpY3IgKyAxOyAgICAgICAgICAvLyBHVCBwb3NpdGlvbiBpbiBDUiBm aWVsZAorKyAgICAgIGludCBzaCA9ICgxIC0gZ3RCaXQpICYgMzE7ICAgICAgICAgICAgLy8gcm90 YXRlIE9WIGZyb20gYml0IDEgdG8gZ3RCaXQKKysgICAgICBhc19ybHdpbm0ocjAsIHIwLCBzaCwg Z3RCaXQsIGd0Qml0KTsgIC8vIGlzb2xhdGUgT1YgYXQgR1Qgb25seQorKyAgICAgIGFzX210Y3Jm KDEgPDwgKDcgLSAoaW50KWNyKSwgcjApOworKyAgICB9CisrICAgIG5ld29wID0gKHVpbnQzMl90 KW9wICYgMjU1OworKyAgfQorKworKyAgcmV0dXJuIChuZXdvcCArICgodWludDhfdCljciA8PCA2 KSk7CisrfQorKworKy8vIEdpdmVuIEJPfEJJIGluIGEgMTYtYml0IHF1YW50aXR5LCBzcGxpdCBp bnRvIGJpdCBmaWVsZHMgZm9yIGluc3RydWN0aW9uLgorK3N0YXRpYyB1aW50MzJfdCBtYWtlT3BN YXNrKHVpbnQxNl90IG9wKSB7CisrICBNT1pfQVNTRVJUKCEob3AgJiAweGZjMDApKTsKKysgIHJl dHVybiAoKG9wICYgMHgwZikgPDwgMjEpIHwgKChvcCAmIDB4ZmZmMCkgPDwgMTIpOworK30KKysK KytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhpbnQxNl90IG9mZiwgdWludDE2X3Qgb3As IExpa2VseUJpdCBsa2IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0JpdCBs YikgeworKyAgc3BldygiYmMlcyVzXHRCT19CST0weCUwNHgsJWQiLCBsYiA/ICJsIiA6ICIiLCBs a2IgPyAiKyIgOiAiIiwgb3AsIG9mZik7CisrICBNT1pfQVNTRVJUKCEob2ZmICYgMHgwMykpOwor KyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0cnVjdGlvbihQUENfYmMgfCBtYWtlT3BNYXNrKG9wKSB8 IGxrYiA8PCAyMSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3Qp b2ZmICYgMHhmZmZjKSB8IGxiKQorKyAgICAgICAgICAgICAgICAgICAgICAgLmVuY29kZSgpKTsK Kyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmNjdHIodWludDE2X3Qgb3AsIExp a2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKKysgIHNwZXcoImJjY3RyJXMlcyIsIGxiID8gImwi IDogIiIsIGxrYiA/ICIrIiA6ICIiKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2JjY3RyIHwg bWFrZU9wTWFzayhvcCkgfCBsa2IgPDwgMjEgfCBsYik7CisrfQorKworKy8vIFNQUiBvcGVyYXRp b25zLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210c3ByKFNQUmVnaXN0ZXJJRCBzcHIs IFJlZ2lzdGVyIHJhKSB7CisrICBzcGV3KCJtdHNwclx0JWQsJTNzIiwgc3ByLCByYS5uYW1lKCkp OworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbXRzcHIgfCByYS5jb2RlKCkgPDwgMjEgfCBQUENf U1BSKHNwcikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tZnNwcihSZWdp c3RlciByZCwgU1BSZWdpc3RlcklEIHNwcikgeworKyAgc3BldygibWZzcHJcdCUzcywlZCIsIHJk Lm5hbWUoKSwgc3ByKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX21mc3ByIHwgcmQuY29kZSgp IDw8IDIxIHwgUFBDX1NQUihzcHIpKTsKKyt9CisrCisrLy8gQ1Igb3BlcmF0aW9ucy4KKysjZGVm aW5lIERFRl9DUkNSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3QgdCwg dWludDhfdCBhLCB1aW50OF90IGIpIHsgXAorKyAgICBzcGV3KCNvcCAiXHQlZCwlZCwlZCIsIHQs IGEsIGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdy aXRlSW5zdChQUENfIyNvcCB8IHQgPDwgMjEgfCBhIDw8IDE2IHwgYiA8PCAxMSk7ICAgICAgICBc CisrICB9CisrREVGX0NSQ1IoY3JhbmRjKQorK0RFRl9DUkNSKGNyb3IpCisrREVGX0NSQ1IoY3Jv cmMpCisrI3VuZGVmIERFRl9DUkNSCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXRj cmYodWludDMyX3QgbWFzaywgUmVnaXN0ZXIgcnMpIHsKKysgIHNwZXcoIm10Y3JmXHQlZCwlM3Mi LCBtYXNrLCBycy5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbXRjcmYgfCBycy5j b2RlKCkgPDwgMjEgfCBtYXNrIDw8IDEyKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfbWZvY3JmKFJlZ2lzdGVyIHJkLCBDUmVnaXN0ZXJJRCBjcmZzKSB7CisrICBzcGV3KCJt Zm9jcmZcdCUzcyxjciVkIiwgcmQubmFtZSgpLCBjcmZzKTsKKysgIC8vIEZYTSBpcyBhIG9uZS1o b3QgOC1iaXQgbWFzayBhdCBiaXRzIDEyLTE5LiBCaXQgKDctY3Jmcykgc2VsZWN0cyB0aGUgQ1Iu CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19tZm9jcmYgfCByZC5jb2RlKCkgPDwgMjEgfCAoMSA8 PCAoNyAtIGNyZnMpKSA8PCAxMik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X21jcnhyeChDUmVnaXN0ZXJJRCBjcikgeworKyAgc3BldygibWNyeHJ4XHRjciVkIiwgY3IpOwor KyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbWNyeHJ4IHwgY3IgPDwgMjMpOworK30KKysKKysvLyBH UFIgbmVnLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX25lZyhSZWdpc3RlciByZCwgUmVn aXN0ZXIgcnMpIHsKKysgIHNwZXcoIm5lZ1x0JTNzLCUzcyIsIHJkLm5hbWUoKSwgcnMubmFtZSgp KTsKKysgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfbmVnLCByZCwgcnMsIHIwKS5lbmNv ZGUoKSk7CisrfQorKworKy8vIENvbXBhcmUgaW5zdHJ1Y3Rpb25zLgorK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX2NtcGQoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy YikgeworKyAgc3BldygiY21wZFx0Y3IlZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUoKSwgcmIubmFt ZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGQgfCBjciA8PCAyMyB8IHJhLmNvZGUo KSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX2NtcGRpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgewor KyAgc3BldygiY21wZGlcdGNyJWQsJTNzLCVkIiwgY3IsIHJhLm5hbWUoKSwgaW0pOworKyAgcmV0 dXJuIHdyaXRlSW5zdChQUENfY21wZGkgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8Cisr ICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKKyt9CisrCisrQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbGQoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJh LCBSZWdpc3RlciByYikgeworKyAgc3BldygiY21wbGRcdGNyJWQsJTNzLCUzcyIsIGNyLCByYS5u YW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsZCB8IGNyIDw8 IDIzIHwgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKKyt9CisrCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbGRpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwg aW50MTZfdCBpbSkgeworKyAgc3BldygiY21wbGRpXHRjciVkLCUzcywlZCIsIGNyLCByYS5uYW1l KCksIGltKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGxkaSB8IGNyIDw8IDIzIHwgcmEu Y29kZSgpIDw8IDE2IHwKKysgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdClpbSAmIDB4ZmZm ZikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXB3KENSZWdpc3RlcklE IGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoImNtcHdcdGNyJWQsJTNz LCUzcyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQ Q19jbXB3IHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOwor K30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXB3aShDUmVnaXN0ZXJJRCBjciwg UmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIHNwZXcoImNtcHdpXHRjciVkLCUzcywlZCIs IGNyLCByYS5uYW1lKCksIGltKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcHdpIHwgY3Ig PDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90 KWltICYgMHhmZmZmKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3 KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoImNt cGx3XHRjciVkLCUzcywlM3MiLCBjciwgcmEubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0dXJu IHdyaXRlSW5zdChQUENfY21wbHcgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNv ZGUoKSA8PCAxMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3aShD UmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIHNwZXcoImNtcGx3 aVx0Y3IlZCwlM3MsJWQiLCBjciwgcmEubmFtZSgpLCBpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KFBQQ19jbXBsd2kgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8CisrICAgICAgICAgICAg ICAgICAgICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKKyt9CisrCisrLy8gQ29tcGFyZSBpbnN0 cnVjdGlvbnMgKGNyMCBpbXBsaWNpdCkuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21w ZChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoImNtcGRcdCUzcywlM3MiLCBy YS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBkIHwgcmEu Y29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfY21wZGkoUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIHNwZXcoImNt cGRpXHQlM3MsJWQiLCByYS5uYW1lKCksIGltKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2Nt cGRpIHwgcmEuY29kZSgpIDw8IDE2IHwgKCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOworK30KKysK KytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsZChSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpIHsKKysgIHNwZXcoImNtcGxkXHQlM3MsJTNzIiwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwor KyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbGQgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2Rl KCkgPDwgMTEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsZGkoUmVn aXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIHNwZXcoImNtcGxkaVx0JTNzLCVkIiwgcmEubmFt ZSgpLCBpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsZGkgfCByYS5jb2RlKCkgPDwg MTYgfCAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX2NtcHcoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJjbXB3 XHQlM3MsJTNzIiwgcmEubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQ UENfY21wdyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7CisrfQorKworK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcHdpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7 CisrICBzcGV3KCJjbXB3aVx0JTNzLCVkIiwgcmEubmFtZSgpLCBpbSk7CisrICByZXR1cm4gd3Jp dGVJbnN0KFBQQ19jbXB3aSB8IHJhLmNvZGUoKSA8PCAxNiB8ICgodWludDE2X3QpaW0gJiAweGZm ZmYpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbHcoUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJjbXBsd1x0JTNzLCUzcyIsIHJhLm5hbWUoKSwg cmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGx3IHwgcmEuY29kZSgpIDw8 IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfY21wbHdpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7CisrICBzcGV3KCJjbXBsd2lcdCUz cywlZCIsIHJhLm5hbWUoKSwgaW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbHdpIHwg cmEuY29kZSgpIDw8IDE2IHwgKCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOworK30KKysKKysvLyBG UCBlbmNvZGluZyBoZWxwZXJzLgorK3N0YXRpYyB1aW50MzJfdCBBRm9ybSh1aW50MzJfdCBvcCwg RmxvYXRSZWdpc3RlciBmcnQsIEZsb2F0UmVnaXN0ZXIgZnJhLAorKyAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGZyYiwgRmxvYXRSZWdpc3RlciBmcmMsIGJvb2wgcmMpIHsKKysg IHJldHVybiAob3AgfCAoZnJ0LmVuY29kaW5nKCkgPDwgMjEpIHwgKGZyYS5lbmNvZGluZygpIDw8 IDE2KSB8CisrICAgICAgICAgIChmcmIuZW5jb2RpbmcoKSA8PCAxMSkgfCAoZnJjLmVuY29kaW5n KCkgPDwgNikgfCByYyk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCBYRm9ybSh1aW50MzJfdCBv cCwgRmxvYXRSZWdpc3RlciBmcnQsIEZsb2F0UmVnaXN0ZXIgZnJhLAorKyAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGZyYiwgYm9vbCByYykgeworKyAgcmV0dXJuIChvcCB8IChm cnQuZW5jb2RpbmcoKSA8PCAyMSkgfCAoZnJhLmVuY29kaW5nKCkgPDwgMTYpIHwKKysgICAgICAg ICAgKGZyYi5lbmNvZGluZygpIDw8IDExKSB8IHJjKTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90 IFhGb3JtKHVpbnQzMl90IG9wLCBGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIFJlZ2lz dGVyIHJiLAorKyAgICAgICAgICAgICAgICAgICAgICBib29sIHJjKSB7CisrICByZXR1cm4gKG9w IHwgKGZydC5lbmNvZGluZygpIDw8IDIxKSB8IChyYS5jb2RlKCkgPDwgMTYpIHwgKHJiLmNvZGUo KSA8PCAxMSkgfAorKyAgICAgICAgICByYyk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCBERm9y bSh1aW50MzJfdCBvcCwgRmxvYXRSZWdpc3RlciBmcnQsIFJlZ2lzdGVyIHJhLAorKyAgICAgICAg ICAgICAgICAgICAgICBpbnQxNl90IGltbSkgeworKyAgcmV0dXJuIChvcCB8IChmcnQuZW5jb2Rp bmcoKSA8PCAyMSkgfCAocmEuY29kZSgpIDw8IDE2KSB8CisrICAgICAgICAgICgodWludDE2X3Qp aW1tICYgMHhmZmZmKSk7CisrfQorKworKy8vIFhYLWZvcm0gZW5jb2RlcnMuIEVhY2ggZm9ybSBo YXMgaXRzIG93biBYLWJpdCBwb3NpdGlvbnMuCisrLy8gQWxsIHRha2UgdWludDMyX3QgZW5jb2Rp bmdzICgwLTYzKSBzbyB0aGV5IGNvcnJlY3RseQorKy8vIGVtaXQgdGhlIGhpZ2ggYml0IGZvciBW U1IzMi02My4gRmxvYXRSZWdpc3Rlci5lbmNvZGluZygpIHJldHVybnMgMC0zMQorKy8vIGZvciBT aW5nbGUvRG91YmxlICg9IFZTUjAtMzEgPSBGUFIgbmFtZXNwYWNlKSBhbmQgMzItNjMgZm9yIFNp bWQxMjgKKysvLyAoPSBWU1IzMi02MyA9IFZSIG5hbWVzcGFjZSkg4oCUIHNvIGEgc2luZ2xlIFhY LWZvcm0gZW5jb2RlciBhZGRyZXNzZXMKKysvLyB0aGUgZnVsbCBWU1Igc3BhY2UuCisrCisrLy8g WFgxLWZvcm06IFQgKyBHUFIgKFJBKSArIEdQUiAoUkIpLiBUWCBiaXQgYXQgaW5zdHJ1Y3Rpb24g Yml0IDAuCisrLy8gVXNlZCBieSBseHZ4LCBzdHh2eCwgbHh2ZDJ4LCBzdHh2ZDJ4LCBtdHZzcmRk LCBtdHZzcmQsIG10dnNyd3MsIG10dnNyd3ouCisrc3RhdGljIHVpbnQzMl90IFhYMUZvcm0odWlu dDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1aW50MzJfdCByYSwgdWludDMyX3QgcmIpIHsKKysgIHJl dHVybiBvcCB8ICh4dCAmIDMxKSA8PCAyMSB8IChyYSAmIDMxKSA8PCAxNiB8IChyYiAmIDMxKSA8 PCAxMSB8CisrICAgICAgICAgKCh4dCA+PiA1KSAmIDEpOworK30KKysKKysvLyBYWDEtZm9ybSBm b3IgbWZ2c3JYOiBHUFIgKFJUKSArIFZTUiAoWFMpLiBUWCBiaXQgKCJTWCIpIGF0IGluc3RydWN0 aW9uCisrLy8gYml0IDA7IHRoZSBYIHNwZWMgY2FsbHMgdGhpcyBTWCBzaW5jZSB0aGUgc291cmNl IHJlZ2lzdGVyIGlzIHRoZSBWU1IuCisrLy8gVXNlZCBieSBtZnZzcmQsIG1mdnNybGQuCisrc3Rh dGljIHVpbnQzMl90IFhYMUZvcm1NZnZzcih1aW50MzJfdCBvcCwgdWludDMyX3QgcnQsIHVpbnQz Ml90IHhzKSB7CisrICByZXR1cm4gb3AgfCAoeHMgJiAzMSkgPDwgMjEgfCAocnQgJiAzMSkgPDwg MTYgfCAoKHhzID4+IDUpICYgMSk7CisrfQorKworKy8vIFhYMi1mb3JtOiBUICsgQiAobm8gQSBm aWVsZDsgYml0cyAxNi0yMCB1bnVzZWQgb3IgaG9sZCBhIFVJTSkuIEJYIGJpdAorKy8vIGF0IGlu c3RydWN0aW9uIGJpdCAxLCBUWCBiaXQgYXQgaW5zdHJ1Y3Rpb24gYml0IDAuIFRoZSBiaXRzMTYt MjAgc2xvdAorKy8vIGlzIHNldCBieSBjYWxsZXJzIOKAlCBmb3IgcGxhaW4gWFgyIGl0IG11c3Qg YmUgMCwgZm9yIFhYMiB3aXRoIFVJTSBpdAorKy8vIGhvbGRzIHRoZSBpbW1lZGlhdGUuCisrLy8g VXNlZCBieSB4eGJyZCwgeHhicmgsIHh4YnJ3LCB4eGJycSwgeHNjdmRwc3AsIHhzY3ZzcGRwLCB4 c2N2ZHBzcG4sCisrLy8geHNjdnNwZHBuLCB4eHNwbHR3IChVSU09MiBiaXRzKSwgeHhpbnNlcnR3 IChVSU09NCBiaXRzKSwKKysvLyB4eGV4dHJhY3R1dyAoVUlNPTQgYml0cyksIHh2YWJzKi94dm5l ZyoveHZzcXJ0Ki94dnIqIGV0Yy4gdmlhCisrLy8gREVGX1ZTWF9VTi4KKytzdGF0aWMgdWludDMy X3QgWFgyRm9ybSh1aW50MzJfdCBvcCwgdWludDMyX3QgeHQsIHVpbnQzMl90IHhiLAorKyAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJpdHMxNnRvMjAgPSAwKSB7CisrICByZXR1cm4g b3AgfCAoeHQgJiAzMSkgPDwgMjEgfCAoYml0czE2dG8yMCAmIDMxKSA8PCAxNiB8ICh4YiAmIDMx KSA8PCAxMSB8CisrICAgICAgICAgKCh4YiA+PiA1KSAmIDEpIDw8IDEgfCAoKHh0ID4+IDUpICYg MSk7CisrfQorKworKy8vIFhYMy1mb3JtOiBUICsgQSArIEIuIEFYL0JYL1RYIGJpdHMgYXQgaW5z dHJ1Y3Rpb24gYml0cyAyLzEvMC4KKysvLyBVc2VkIGJ5IHh4bG9yLCB4eGxhbmQsIHh4bHhvciwg eHhsbm9yLCB4eGxhbmRjLCB4eHBlcm1kaSwgeHNtYXhqZHAsCisrLy8geHNtaW5qZHAsIHh2YWRk KiwgeHZjbXAqLCBldGMuCisrc3RhdGljIHVpbnQzMl90IFhYM0Zvcm0odWludDMyX3Qgb3AsIHVp bnQzMl90IHh0LCB1aW50MzJfdCB4YSwgdWludDMyX3QgeGIpIHsKKysgIHJldHVybiBvcCB8ICh4 dCAmIDMxKSA8PCAyMSB8ICh4YSAmIDMxKSA8PCAxNiB8ICh4YiAmIDMxKSA8PCAxMSB8CisrICAg ICAgICAgKCh4YSA+PiA1KSAmIDEpIDw8IDIgfCAoKHhiID4+IDUpICYgMSkgPDwgMSB8ICgoeHQg Pj4gNSkgJiAxKTsKKyt9CisrCisrLy8gWFg0LWZvcm06IFQgKyBBICsgQiArIEMuIENYL0FYL0JY L1RYIGJpdHMgYXQgaW5zdHJ1Y3Rpb24gYml0cyAzLzIvMS8wLgorKy8vIFVzZWQgYnkgeHhzZWwu Cisrc3RhdGljIHVpbnQzMl90IFhYNEZvcm0odWludDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1aW50 MzJfdCB4YSwgdWludDMyX3QgeGIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg eGMpIHsKKysgIHJldHVybiBvcCB8ICh4dCAmIDMxKSA8PCAyMSB8ICh4YSAmIDMxKSA8PCAxNiB8 ICh4YiAmIDMxKSA8PCAxMSB8CisrICAgICAgICAgKHhjICYgMzEpIDw8IDYgfCAoKHhjID4+IDUp ICYgMSkgPDwgMyB8ICgoeGEgPj4gNSkgJiAxKSA8PCAyIHwKKysgICAgICAgICAoKHhiID4+IDUp ICYgMSkgPDwgMSB8ICgoeHQgPj4gNSkgJiAxKTsKKyt9CisrCisrLy8gRmxvYXRSZWdpc3RlciBj b252ZW5pZW5jZSBvdmVybG9hZCBmb3IgWFgzRm9ybSAodGhlIG1vc3QgY29tbW9uIGZvcm0pLgor K3N0YXRpYyB1aW50MzJfdCBYWDNGb3JtKHVpbnQzMl90IG9wLCBGbG9hdFJlZ2lzdGVyIHh0LCBG bG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg eGIpIHsKKysgIHJldHVybiBYWDNGb3JtKG9wLCB1aW50MzJfdCh4dC5lbmNvZGluZygpKSwgdWlu dDMyX3QoeGEuZW5jb2RpbmcoKSksCisrICAgICAgICAgICAgICAgICB1aW50MzJfdCh4Yi5lbmNv ZGluZygpKSk7CisrfQorKworKy8vIC0tLSBNYWNyby1kZWZpbmVkIGluc3RydWN0aW9uIGVtaXR0 ZXJzIC0tLQorKworKy8vIFgtZm9ybTogcmQgaW4gYml0cyAyMS0yNSwgcmEgaW4gMTYtMjAsIHJi IGluIDExLTE1LgorKyNkZWZpbmUgREVGX1hGT1JNKG9wKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeyBcCisr ICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5h bWUoKSk7ICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMj b3AsIHJkLCByYSwgcmIpLmVuY29kZSgpKTsgICAgICAgICAgICAgIFwKKysgIH0KKysKKysjZGVm aW5lIERFRl9YRk9STV9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmEsICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciByYikgeyAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIi5c dCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7ICAgIFwKKysg ICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByZCwgcmEsIHJiKS5lbmNvZGUo KSB8IDB4MSk7IFwKKysgIH0KKysKKysvLyBYLWZvcm0gd2l0aCBzd2FwcGVkIFJTL1JBIGVuY29k aW5nOiBycyBpbiBiaXRzIDIxLTI1LCByYSBpbiAxNi0yMC4KKysjZGVmaW5lIERFRl9YRk9STVMo b3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpIHsgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCUzcyIsIHJk Lm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAgICAgICAgICAgIFwKKysgICAgcmV0dXJu IHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByYSwgcmQsIHJiKS5lbmNvZGUoKSk7ICAgICAg ICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBERUZfWEZPUk1TX1JDKG9wKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCAgICBcCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmIpIHsgICAgICAgICAg ICAgICBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFt ZSgpLCByYi5uYW1lKCkpOyAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENf IyNvcCwgcmEsIHJkLCByYikuZW5jb2RlKCkgfCAweDEpOyBcCisrICB9CisrCisrLy8gWC1mb3Jt IHNoaWZ0IGltbWVkaWF0ZSB3aXRoIHN3YXBwZWQgZW5jb2RpbmcuCisrI2RlZmluZSBERUZfWEZP Uk1TX0kob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCB1aW50OF90IHNoKSB7ICAgICAgXAorKyAgICBzcGV3KCNvcCAiXHQlM3Ms JTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHNoKTsgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIE1PWl9BU1NFUlQoc2ggPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChQUENf IyNvcCB8IHJhLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUoKSA8PCAxNiB8IHNoIDw8IDExKTsgXAor KyAgfQorKworKy8vIDItcmVnIFgtZm9ybTogcmQgaW4gYml0cyAyMS0yNSwgcmEgaW4gMTYtMjAs IHJiPXIwLgorKyNkZWZpbmUgREVGX1hGT1JNMihvcCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEpIHsgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzIiwgcmQu bmFtZSgpLCByYS5uYW1lKCkpOyAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0 KEluc3RSZWcoUFBDXyMjb3AsIHJkLCByYSwgcjApLmVuY29kZSgpKTsgXAorKyAgfQorKworKyNk ZWZpbmUgREVGX1hGT1JNMl9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSkgeyAgXAorKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcyIsIHJk Lm5hbWUoKSwgcmEubmFtZSgpKTsgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3Jp dGVJbnN0KEluc3RSZWcoUFBDXyMjb3AsIHJkLCByYSwgcjApLmVuY29kZSgpIHwgMHgxKTsgXAor KyAgfQorKworKy8vIDItcmVnIFgtZm9ybSBzd2FwcGVkOiByYSBpbiBiaXRzIDIxLTI1LCByZCBp biAxNi0yMC4KKysjZGVmaW5lIERFRl9YRk9STTJTKG9wKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7IFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcyIsIHJk Lm5hbWUoKSwgcmEubmFtZSgpKTsgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5z dChJbnN0UmVnKFBQQ18jI29wLCByYSwgcmQsIHIwKS5lbmNvZGUoKSk7IFwKKysgIH0KKysKKysj ZGVmaW5lIERFRl9YRk9STTJTX1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEpIHsgIFwKKysgICAgc3Bldygjb3AgIi5cdCUzcywlM3MiLCBy ZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdy aXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByYSwgcmQsIHIwKS5lbmNvZGUoKSB8IDB4MSk7IFwK KysgIH0KKysKKysvLyBELWZvcm0gbG9hZC9zdG9yZTogcmQ9UlQsIHJiPVJBIChiYXNlIHJlZ2lz dGVyKSwgb2ZmPWRpc3BsYWNlbWVudC4KKysvLyByMCBjYW5ub3QgYmUgdXNlZCBhcyBiYXNlIHJl Z2lzdGVyIGZvciBELWZvcm0gbG9hZHMvc3RvcmVzLgorKyNkZWZpbmUgREVGX0RGT1JNKG9wKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJi LCBpbnQxNl90IG9mZikgeyBcCisrICAgIHNwZXcoI29wICJcdCUzcywlZCglM3MpIiwgcmQubmFt ZSgpLCBvZmYsIHJiLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJU KHJiICE9IHIwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ18jI29wLCByZCwgcmIsIG9m ZikuZW5jb2RlKCkpOyAgICAgICAgICAgICBcCisrICB9CisrCisrLy8gRC1mb3JtIHdpdGggc3dh cHBlZCBSUy9SQSBlbmNvZGluZyBmb3IgbG9naWNhbCBpbW1lZGlhdGVzLgorKyNkZWZpbmUgREVG X0RGT1JNUyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSkgeyBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3Ms JWQiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgaW0pOyAgICAgICAgICAgICAgICAgICAgXAorKyAg ICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDXyMjb3AsIHJhLCByZCwgaW0pLmVuY29kZSgp KTsgICAgICAgICAgICAgIFwKKysgIH0KKysKKysvLyBNLWZvcm06IHJvdGF0ZSB3aXRoIDMgcmVn aXN0ZXJzICsgbWIgKyBtZS4KKysjZGVmaW5lIERFRl9NRk9STShvcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIg cmIsICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1i LCB1aW50OF90IG1lKSB7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNz LCUzcywlM3MsJWQsJWQiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgcmIubmFtZSgpLCBtYiwgbWUp OyBcCisrICAgIE1PWl9BU1NFUlQobWIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKG1lIDwgMzIpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUo KSA8PCAxNiB8ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgcmIuY29kZSgpIDw8 IDExIHwgbWIgPDwgNiB8IG1lIDw8IDEpOyAgICAgICAgICAgICAgICAgICAgXAorKyAgfQorKwor Ky8vIE0tZm9ybSB3aXRoIGltbWVkaWF0ZSBzaGlmdC4KKysjZGVmaW5lIERFRl9NRk9STV9JKG9w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcnMsIHVpbnQ4X3Qgc2gsICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QgbWIsIHVpbnQ4X3QgbWUpIHsgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgc3Bldygjb3AgIlx0JTNzLCUzcywlZCwlZCwlZCIsIHJkLm5hbWUoKSwgcnMubmFtZSgpLCBz aCwgbWIsIG1lKTsgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKHNoIDwgMzIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1P Wl9BU1NFUlQobWIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChtZSA8IDMyKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4g d3JpdGVJbnN0KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmQuY29kZSgpIDw8IDE2IHwg c2ggPDwgMTEgfCBcCisrICAgICAgICAgICAgICAgICAgICAgbWIgPDwgNiB8IG1lIDw8IDEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKysKKysjZGVmaW5l IERFRl9NRk9STV9JX1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3Jj KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgICBcCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtYiwgdWludDhfdCBtZSkgeyAgICAg ICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIi5cdCUzcywlM3MsJWQsJWQsJWQiLCByZC5uYW1l KCksIHJzLm5hbWUoKSwgc2gsIG1iLCBtZSk7ICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKHNo IDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIE1PWl9BU1NFUlQobWIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChtZSA8IDMy KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmQu Y29kZSgpIDw8IDE2IHwgc2ggPDwgMTEgfCBcCisrICAgICAgICAgICAgICAgICAgICAgbWIgPDwg NiB8IG1lIDw8IDEgfCAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0KKysKKysvLyBNRFMtZm9ybTogcm90YXRlIHdpdGggcmVnaXN0ZXIgKyBtYiAoNjQtYml0KS4K KysjZGVmaW5lIERFRl9NRFNGT1JNKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3Ao UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYiwgIFwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtYikgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MsJWQiLCByYS5uYW1lKCksIHJzLm5h bWUoKSwgcmIubmFtZSgpLCBtYik7ICAgIFwKKysgICAgTU9aX0FTU0VSVChtYiA8IDY0KTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0 dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAx NiB8ICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEgfCAoKG1i ICYgMHgxZikgPDwgNikgfCAobWIgJiAweDIwKSk7IFwKKysgIH0KKysKKysjZGVmaW5lIERFRl9N RFNGT1JNX1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYiwgXAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgc3Bldygjb3AgIi5cdCUzcywlM3MsJTNzLCVkIiwgcmEubmFtZSgpLCBycy5uYW1l KCksIHJiLm5hbWUoKSwgbWIpOyAgICAgICBcCisrICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgp IDw8IDE2IHwgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwg MTEgfCAoKG1iICYgMHgxZikgPDwgNikgfCAobWIgJiAweDIwKSB8IDEpOyBcCisrICB9CisrCisr Ly8gTUQtZm9ybTogcm90YXRlL3NoaWZ0IHdpdGggaW1tZWRpYXRlIHNoICsgbWIgKDY0LWJpdCku CisrLy8gc2ggYW5kIG1iIGFyZSA2LWJpdCBmaWVsZHMgc3BsaXQgYWNyb3NzIHRoZSBpbnN0cnVj dGlvbiB3b3JkLgorKyNkZWZpbmUgREVGX01ERk9STShvcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCAgICAg ICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVk LCVkIiwgcmEubmFtZSgpLCBycy5uYW1lKCksIHNoLCBtYik7ICAgICAgICAgICAgICAgIFwKKysg ICAgTU9aX0FTU0VSVChzaCA8IDY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1 cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgpIDw8IDE2 IHwgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAoKHNoICYgMHgxZikgPDwgMTEp IHwgKChtYiAmIDB4MWYpIDw8IDYpIHwgKG1iICYgMHgyMCkgfCBcCisrICAgICAgICAgICAgICAg ICAgICAgKChzaCAmIDB4MjApID4+IDQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgfQorKworKyNkZWZpbmUgREVGX01ERk9STV9SQyhvcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMsIHVpbnQ4 X3Qgc2gsICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCBtYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiLlx0JTNz LCUzcywlZCwlZCIsIHJhLm5hbWUoKSwgcnMubmFtZSgpLCBzaCwgbWIpOyAgICAgICAgICAgICAg IFwKKysgICAgTU9aX0FTU0VSVChzaCA8IDY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgp IDw8IDE2IHwgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAoKHNoICYgMHgxZikg PDwgMTEpIHwgKChtYiAmIDB4MWYpIDw8IDYpIHwgKG1iICYgMHgyMCkgfCBcCisrICAgICAgICAg ICAgICAgICAgICAgKChzaCAmIDB4MjApID4+IDQpIHwgMHgwMSk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgfQorKworKy8vIEZQIDItcmVnIFgtZm9ybTogZnJ0IGluIGJpdHMg MjEtMjUsIGZyYT1mMCwgZnJiIGluIDExLTE1LgorKyNkZWZpbmUgREVGX1hGT1JNMl9GKG9wKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3Rl ciByYSkgeyBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUo KSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFhGb3Jt KFBQQ18jI29wLCByZCwgZjAsIHJhLCBmYWxzZSkpOyAgICAgICAgICAgICAgIFwKKysgIH0KKysK KysjZGVmaW5lIERFRl9YRk9STTJfRl9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMj b3AjI19yYyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhKSB7IFwKKysgICAgc3Bl dygjb3AgIi5cdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChYRm9ybShQUENfIyNvcCwgcmQs IGYwLCByYSwgdHJ1ZSkpOyAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKysKKysvLyBGUCBB LWZvcm0gd2l0aCBmcmMgKGZtdWwtdHlwZSk6IGZydCwgZnJhLCBmcmM7IGZyYj1mMC4KKysjZGVm aW5lIERFRl9BRk9STV9DKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lz dGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgcmMpIHsgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygj b3AgIlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmMubmFtZSgpKTsgICAg ICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIGYwLCBy YywgZmFsc2UpKTsgICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBERUZfQUZPUk1fQ19SQyhv cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKEZsb2F0UmVnaXN0ZXIgcmQsIEZs b2F0UmVnaXN0ZXIgcmEsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHJjKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICIu XHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYy5uYW1lKCkpOyAgICAgICAg ICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIGYwLCBy YywgdHJ1ZSkpOyAgICAgICAgICAgICAgIFwKKysgIH0KKysKKysvLyBGUCBBLWZvcm0gd2l0aCBm cmIgKGZhZGQtdHlwZSk6IGZydCwgZnJhLCBmcmI7IGZyYz1mMC4KKysjZGVmaW5lIERFRl9BRk9S TV9CKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9h dFJlZ2lzdGVyIHJhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgcmIpIHsgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUz cywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsgICAgICAgXAorKyAgICBy ZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIHJiLCBmMCwgZmFsc2UpKTsg ICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBERUZfQUZPUk1fQl9SQyhvcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIg cmEsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHJiKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUz cyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAgICAgICAgICAgXAorKyAgICBy ZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIHJiLCBmMCwgdHJ1ZSkpOyAg ICAgICAgICAgICAgIFwKKysgIH0KKysKKysvLyBGdWxsIEZQIEEtZm9ybTogZnJ0LCBmcmEsIGZy YywgZnJiIChmbWFkZC10eXBlKS4KKysjZGVmaW5lIERFRl9BRk9STShvcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVy IHJhLCAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgcmMsIEZsb2F0UmVnaXN0ZXIgcmIpIHsgICAgICAgIFwKKysgICAgc3Bldygjb3Ag Ilx0JTNzLCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJjLm5hbWUoKSwgcmIu bmFtZSgpKTsgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEs IHJiLCByYywgZmFsc2UpKTsgICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBE RUZfQUZPUk1fUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoRmxv YXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgICBcCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByYywgRmxvYXRSZWdpc3RlciByYikg eyBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5h bWUoKSwgcmMubmFtZSgpLCAgICAgICAgICBcCisrICAgICAgICAgcmIubmFtZSgpKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IHJldHVybiB3cml0ZUluc3QoQUZvcm0oUFBDXyMjb3AsIHJkLCByYSwgcmIsIHJjLCB0cnVlKSk7 ICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrLy8gRlAgRC1mb3JtIGxvYWQvc3RvcmUuCisr I2RlZmluZSBERUZfREZPUk1fRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJiLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludDE2X3Qgb2ZmKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywl ZCglM3MpIiwgcmQubmFtZSgpLCBvZmYsIHJiLm5hbWUoKSk7ICAgICAgICBcCisrICAgIE1PWl9B U1NFUlQocmIgIT0gcjApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIHJldHVybiB3cml0ZUluc3QoREZvcm0oUFBDXyMjb3AsIHJkLCByYiwgb2ZmKSk7ICAg ICAgICAgICAgICBcCisrICB9CisrCisrLy8gRlAgWC1mb3JtIGluZGV4ZWQgbG9hZC9zdG9yZS4K KysjZGVmaW5lIERFRl9GTUVNeChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcmIpIHsgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNz LCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsgIFwKKysgICAgcmV0 dXJuIHdyaXRlSW5zdChYRm9ybShQUENfIyNvcCwgcmQsIHJhLCByYiwgZmFsc2UpKTsgICAgICAg IFwKKysgIH0KKysKKysvLyAtLS0gUm90YXRlL3NoaWZ0IGluc3RydWN0aW9ucyAtLS0KKysKKytE RUZfTUZPUk0ocmx3bm0pCisrREVGX01GT1JNX0kocmx3aW5tKQorK0RFRl9NRk9STV9JX1JDKHJs d2lubSkKKytERUZfTUZPUk1fSShybHdpbWkpCisrREVGX1hGT1JNU19JKHNyYXdpKQorKworK0RF Rl9NRFNGT1JNKHJsZGNsKQorK0RFRl9NREZPUk0ocmxkaWNsKQorK0RFRl9NREZPUk1fUkMocmxk aWNsKQorK0RFRl9NREZPUk0ocmxkaWNyKQorK0RFRl9NREZPUk1fUkMocmxkaWNyKQorK0RFRl9N REZPUk0ocmxkaW1pKQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3NyYWRpKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciBycywgaW50IHNoKSB7CisrICBzcGV3KCJzcmFkaVx0JTNzLCUzcywl ZCIsIHJkLm5hbWUoKSwgcnMubmFtZSgpLCBzaCk7CisrICBNT1pfQVNTRVJUKHNoID49IDAgJiYg c2ggPCA2NCk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zcmFkaSB8IHJkLmNvZGUoKSA8PCAx NiB8IHJzLmNvZGUoKSA8PCAyMSB8CisrICAgICAgICAgICAgICAgICAgIChzaCAmIDB4MWYpIDw8 IDExIHwgKHNoICYgMHgyMCkgPj4gNCk7CisrfQorKworKy8vIC0tLSBBTFUgdGhyZWUtcmVnaXN0 ZXIgLS0tCisrCisrI2RlZmluZSBERUZfQUxVMihvcCkgREVGX1hGT1JNKG9wKQorKworK0RFRl9B TFUyKGFkZCkKKytERUZfQUxVMihhZGRjKQorK0RFRl9BTFUyKGFkZGUpCisrREVGX0FMVTIoc3Vi ZikKKytERUZfQUxVMihzdWJmYykKKytERUZfQUxVMihzdWJmZSkKKytERUZfQUxVMihkaXZkKQor K0RFRl9BTFUyKGRpdmR1KQorK0RFRl9BTFUyKGRpdncpCisrREVGX0FMVTIoZGl2d3UpCisrLy8g UE9XRVI5IG1vZHVsbyAoWE8tZm9ybSwgc2FtZSBlbmNvZGluZyBwYXR0ZXJuIGFzIGRpdikuCisr REVGX1hGT1JNKG1vZHNkKQorK0RFRl9YRk9STShtb2RzdykKKytERUZfWEZPUk0obW9kdWQpCisr REVGX1hGT1JNKG1vZHV3KQorK0RFRl9BTFUyKG11bGxkKQorK0RFRl9BTFUyKG11bGhkKQorK0RF Rl9BTFUyKG11bGhkdSkKKytERUZfQUxVMihtdWxsZG8pCisrREVGX0FMVTIobXVsbHcpCisrREVG X0FMVTIobXVsaHd1KQorKyN1bmRlZiBERUZfQUxVMgorKworKy8vIC0tLSBBTFUgaW1tZWRpYXRl IC0tLQorKworKy8vIEQtZm9ybSBBTFUtaW1tZWRpYXRlIG9wcyBoYXZlIG5vIFJjIGJpdCBhdCBp bnN0cnVjdGlvbiBMU0IgKHRoYXQgYml0CisrLy8gaXMgcGFydCBvZiB0aGUgMTYtYml0IGltbWVk aWF0ZSkuIFRoZSBvbmx5IHZhbGlkIHJlY29yZC1mb3JtIHZhcmlhbnQKKysvLyBpbiB0aGlzIGdy b3VwIGlzIGBhZGRpYy5gLCB3aGljaCBpcyBhIHNlcGFyYXRlIHByaW1hcnkgb3Bjb2RlICgxMykK KysvLyBoYW5kLXdyaXR0ZW4gYmVsb3c7IHN1YmZpYyBhbmQgbXVsbGkgaGF2ZSBubyByZWNvcmQg Zm9ybSBhdCBhbGwuCisrI2RlZmluZSBERUZfQUxVSShvcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgeyBcCisr ICAgIHNwZXcoI29wICJcdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgaW0pOyAg ICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfIyNv cCwgcmQsIHJhLCBpbSkuZW5jb2RlKCkpOyAgICAgICAgICAgICBcCisrICB9CisrCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfYWRkaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2 X3QgaW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdHVhbGx5X2xp KSB7CisrI2lmZGVmIERFQlVHCisrICBpZiAoYWN0dWFsbHlfbGkpIHsKKysgICAgc3BldygibGlc dCUzcywlZCIsIHJkLm5hbWUoKSwgaW0pOworKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VSVChy YSAhPSByMCk7CisrICAgIHNwZXcoImFkZGlcdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJhLm5h bWUoKSwgaW0pOworKyAgfQorKyNlbmRpZgorKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQ Q19hZGRpLCByZCwgcmEsIGltKS5lbmNvZGUoKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX2FkZGlzKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdHVhbGx5X2xpcykgeworKyNp ZmRlZiBERUJVRworKyAgaWYgKGFjdHVhbGx5X2xpcykgeworKyAgICBzcGV3KCJsaXNcdCUzcywl ZCIsIHJkLm5hbWUoKSwgaW0pOworKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VSVChyYSAhPSBy MCk7CisrICAgIHNwZXcoImFkZGlzXHQlM3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCks IGltKTsKKysgIH0KKysjZW5kaWYKKysgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfYWRk aXMsIHJkLCByYSwgaW0pLmVuY29kZSgpKTsKKyt9CisrCisrREVGX0FMVUkobXVsbGkpCisrREVG X0FMVUkoc3ViZmljKQorKyN1bmRlZiBERUZfQUxVSQorKworKy8vIC0tLSBBTFUgdW5hcnkvZXh0 ZW5kZWQgLS0tCisrCisrCisrI2RlZmluZSBERUZfQUxVRV9TKG9wKSBERUZfWEZPUk0yUyhvcCkK KytERUZfQUxVRV9TKGNudGx6dykKKytERUZfQUxVRV9TKGNudGx6ZCkKKytERUZfQUxVRV9TKGNu dHR6ZCkKKytERUZfQUxVRV9TKGNudHR6dykKKysjdW5kZWYgREVGX0FMVUVfUworKworK0RFRl9Y Rk9STTJTKHBvcGNudGQpCisrREVGX1hGT1JNMlMocG9wY250dykKKytERUZfWEZPUk0yUyhicmQp ICAvLyBQT1dFUjEwCisrREVGX1hGT1JNMlMoYnJoKSAgLy8gUE9XRVIxMAorK0RFRl9YRk9STTJT KGJydykgIC8vIFBPV0VSMTAKKysKKysvLyAtLS0gQml0d2lzZSBsb2dpY2FsICh0aHJlZS1yZWdp c3RlcikgLS0tCisrCisrI2RlZmluZSBERUZfQklUQUxVMihvcCkgREVGX1hGT1JNUyhvcCkKKytE RUZfQklUQUxVMihub3IpCisrREVGX0JJVEFMVTIoc2x3KQorK0RFRl9CSVRBTFUyKHNydykKKytE RUZfQklUQUxVMihzcmF3KQorK0RFRl9CSVRBTFUyKHNsZCkKKytERUZfQklUQUxVMihzcmQpCisr REVGX0JJVEFMVTIoc3JhZCkKKysjdW5kZWYgREVGX0JJVEFMVTIKKysKKysvLyBhbmRfLCBvcl8s IHhvcl8gYXJlIG1hbnVhbGx5IGRlZmluZWQgKHRyYWlsaW5nIHVuZGVyc2NvcmUgdG8gYXZvaWQg QysrCisrLy8ga2V5d29yZCBjb25mbGljdHMpLiB4c19tciBkZWxlZ2F0ZXMgdG8gYXNfb3JfIHNv IHdlIG11c3Qgbm90IGFzc2VydAorKy8vIHJkPT1ycz09cmIgaW4gYXNfb3JfICh3aGljaCB3b3Vs ZCBiZSBhIHZhbGlkIG1yKS4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19vcl8oUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYikgeworKyAgc3Bldygib3JcdCUzcywlM3Ms JTNzIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJ bnN0KEluc3RSZWcoUFBDX29yXywgcnMsIHJkLCByYikuZW5jb2RlKCkpOworK30KKysKKytCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc194b3JfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVn aXN0ZXIgcmIpIHsKKysgIHNwZXcoInhvclx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJzLm5h bWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfeG9yXywg cnMsIHJkLCByYikuZW5jb2RlKCkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19hbmRfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXco ImFuZFx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgcmIubmFtZSgpKTsKKysg IHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfYW5kXywgcnMsIHJkLCByYikuZW5jb2RlKCkp OworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19hbmRfX3JjKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoImFuZC5cdCUzcywlM3MsJTNz IiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KEluc3RSZWcoUFBDX2FuZF8sIHJzLCByZCwgcmIpLmVuY29kZSgpIHwgMHgxKTsKKyt9CisrCisr Ly8gLS0tIEJpdHdpc2UgbG9naWNhbCAoaW1tZWRpYXRlKSAtLS0KKysKKytERUZfREZPUk1TKG9y aSkKKytERUZfREZPUk1TKG9yaXMpCisrREVGX0RGT1JNUyh4b3JpKQorK0RFRl9ERk9STVMoeG9y aXMpCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYW5kaV9yYyhSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIHVpbnQxNl90IGltKSB7CisrICBzcGV3KCJhbmRpLlx0JTNzLCUzcywlZCIs IHJkLm5hbWUoKSwgcmEubmFtZSgpLCBpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0o UFBDX2FuZGlfZG90LCByYSwgcmQsIGltKS5lbmNvZGUoKSk7CisrfQorKworKy8vIC0tLSBTaWdu IGV4dGVuc2lvbiAtLS0KKysKKysjZGVmaW5lIERFRl9BTFVFWFQob3ApIERFRl9YRk9STTJTKG9w KSBERUZfWEZPUk0yU19SQyhvcCkKKytERUZfWEZPUk0yUyhleHRzYikKKytERUZfWEZPUk0yUyhl eHRzaCkKKytERUZfQUxVRVhUKGV4dHN3KQorKyN1bmRlZiBERUZfQUxVRVhUCisrCisrLy8gLS0t IEludGVnZXIgbG9hZHMgKEQtZm9ybSkgLS0tCisrCisrREVGX0RGT1JNKGxieikKKytERUZfREZP Uk0obGhhKQorK0RFRl9ERk9STShsaHopCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf bHdhKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpIHsKKysgIHNwZXcoImx3 YVx0JTNzLCVkKCUzcykiLCByZC5uYW1lKCksIG9mZiwgcmIubmFtZSgpKTsKKysgIE1PWl9BU1NF UlQocmIgIT0gcjApOworKyAgTU9aX0FTU0VSVCghKG9mZiAmIDB4MDMpKTsKKysgIHJldHVybiB3 cml0ZUluc3QoSW5zdEltbShQUENfbHdhLCByZCwgcmIsIG9mZikuZW5jb2RlKCkpOworK30KKysK KytERUZfREZPUk0obHd6KQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2xkKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpIHsKKysgIHNwZXcoImxkXHQlM3MsJWQo JTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCByYi5uYW1lKCkpOworKyAgTU9aX0FTU0VSVChyYiAhPSBy MCk7CisrICBNT1pfQVNTRVJUKCEob2ZmICYgMHgwMykpOworKyAgcmV0dXJuIHdyaXRlSW5zdChJ bnN0SW1tKFBQQ19sZCwgcmQsIHJiLCBvZmYpLmVuY29kZSgpKTsKKyt9CisrCisrLy8gLS0tIElu dGVnZXIgc3RvcmVzIChELWZvcm0pIC0tLQorKworK0RFRl9ERk9STShzdGIpCisrREVGX0RGT1JN KHN0aCkKKytERUZfREZPUk0oc3R3KQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3N0 ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKSB7CisrICBzcGV3KCJzdGRc dCUzcywlZCglM3MpIiwgcmQubmFtZSgpLCBvZmYsIHJiLm5hbWUoKSk7CisrICBNT1pfQVNTRVJU KHJiICE9IHIwKTsKKysgIE1PWl9BU1NFUlQoIShvZmYgJiAweDAzKSk7CisrICByZXR1cm4gd3Jp dGVJbnN0KEluc3RJbW0oUFBDX3N0ZCwgcmQsIHJiLCBvZmYpLmVuY29kZSgpKTsKKyt9CisrCisr REVGX0RGT1JNKHN0ZHUpCisrCisrI3VuZGVmIERFRl9ERk9STQorKyN1bmRlZiBERUZfREZPUk1T CisrCisrLy8gLS0tIEludGVnZXIgbG9hZHMvc3RvcmVzIChYLWZvcm0sIGluZGV4ZWQpIC0tLQor KworKyNkZWZpbmUgREVGX01FTXgob3ApIERFRl9YRk9STShvcCkKKytERUZfTUVNeChsYnp4KSBE RUZfTUVNeChsaGF4KSBERUZfTUVNeChsaHp4KSBERUZfTUVNeChsd2F4KQorKyAgICBERUZfTUVN eChsd3p4KSBERUZfTUVNeChsd2FyeCkgREVGX01FTXgobGJhcngpCisrICAgICAgICBERUZfTUVN eChsaGFyeCkgREVGX01FTXgobGR4KSBERUZfTUVNeChsZGFyeCkgREVGX01FTXgoc3RieCkKKysg ICAgICAgICAgICBERUZfTUVNeChzdGJjeCkgREVGX01FTXgoc3R3eCkgREVGX01FTXgoc3R3YnJ4 KSBERUZfTUVNeChzdGh4KQorKyAgICAgICAgICAgICAgICBERUZfTUVNeChzdGhjeCkgREVGX01F TXgoc3RkeCkgREVGX01FTXgoc3RkY3gpCisrICAgICAgICAgICAgICAgICAgICBERUZfTUVNeChz dHdjeCkKKysjdW5kZWYgREVGX01FTXgKKysKKysvLyAtLS0gSW50ZWdlciBzZWxlY3QgLS0tCisr CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfaXNlbChSZWdpc3RlciBydCwgUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2 X3QgYmMsIENSZWdpc3RlcklEIGNyKSB7CisrICBNT1pfQVNTRVJUKHJhICE9IHIwKTsKKysgIHJl dHVybiBhc19pc2VsMChydCwgcmEsIHJiLCBiYywgY3IpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19pc2VsMChSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGJjLCBDUmVnaXN0 ZXJJRCBjcikgeworKyAgc3BldygiaXNlbFx0JTNzLCUzcywlM3MsY3IlZDoweCUwMngiLCBydC5u YW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpLCBjciwKKysgICAgICAgYmMpOworKyAgTU9aX0FT U0VSVCgoYmMgPCAweDQwKSAmJiAoKGJjICYgMHgwZikgPT0gMHgwYykpOworKyAgdWludDE2X3Qg bmJjID0gKGJjID4+IDQpICsgKGNyIDw8IDIpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfaXNl bCB8IHJ0LmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8CisrICAgICAgICAgICAgICAg ICAgIHJiLmNvZGUoKSA8PCAxMSB8IG5iYyA8PCA2KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfc2V0YmMoUmVnaXN0ZXIgcnQsIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBj cikgeworKyAgc3Bldygic2V0YmNcdCUzcyxjciVkOjB4JTAyeCIsIHJ0Lm5hbWUoKSwgY3IsIGJj KTsKKysgIE1PWl9BU1NFUlQoKGJjIDwgMHg0MCkgJiYgKChiYyAmIDB4MGYpID09IDB4MGMpKTsK KysgIHVpbnQxNl90IG5iYyA9IChiYyA+PiA0KSArIChjciA8PCAyKTsKKysgIHJldHVybiB3cml0 ZUluc3QoUFBDX3NldGJjIHwgKHJ0LmNvZGUoKSA8PCAyMSkgfCAobmJjIDw8IDE2KSk7CisrfQor KworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3NldGJjcihSZWdpc3RlciBydCwgdWludDE2 X3QgYmMsIENSZWdpc3RlcklEIGNyKSB7CisrICBzcGV3KCJzZXRiY3JcdCUzcyxjciVkOjB4JTAy eCIsIHJ0Lm5hbWUoKSwgY3IsIGJjKTsKKysgIE1PWl9BU1NFUlQoKGJjIDwgMHg0MCkgJiYgKChi YyAmIDB4MGYpID09IDB4MGMpKTsKKysgIHVpbnQxNl90IG5iYyA9IChiYyA+PiA0KSArIChjciA8 PCAyKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3NldGJjciB8IChydC5jb2RlKCkgPDwgMjEp IHwgKG5iYyA8PCAxNikpOworK30KKysKKysvLyAtLS0gRlAgY29tcGFyZSAtLS0KKysKKytCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19mY21wdShDUmVnaXN0ZXJJRCBjciwgRmxvYXRSZWdpc3Rl ciByYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJi KSB7CisrICBzcGV3KCJmY21wdVx0Y3IlZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUoKSwgcmIubmFt ZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2ZjbXB1IHwgY3IgPDwgMjMgfCByYS5lbmNv ZGluZygpIDw8IDE2IHwKKysgICAgICAgICAgICAgICAgICAgcmIuZW5jb2RpbmcoKSA8PCAxMSk7 CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2ZjbXB1KEZsb2F0UmVnaXN0ZXIg cmEsIEZsb2F0UmVnaXN0ZXIgcmIpIHsKKysgIHJldHVybiBhc19mY21wdShjcjAsIHJhLCByYik7 CisrfQorKworKy8vIC0tLSBGUCBhcml0aG1ldGljIC0tLQorKworKyNkZWZpbmUgREVGX0ZQVUFD KG9wKSBERUZfQUZPUk1fQyhvcCkKKytERUZfRlBVQUMoZm11bCkKKytERUZfRlBVQUMoZm11bHMp CisrI3VuZGVmIERFRl9GUFVBQworKworKyNkZWZpbmUgREVGX0ZQVUFCKG9wKSBERUZfQUZPUk1f QihvcCkKKytERUZfRlBVQUIoZmFkZCkKKytERUZfRlBVQUIoZmRpdikKKytERUZfRlBVQUIoZnN1 YikKKytERUZfRlBVQUIoZmFkZHMpCisrREVGX0ZQVUFCKGZkaXZzKQorK0RFRl9GUFVBQihmc3Vi cykKKytERUZfRlBVQUIoZmNwc2duKQorKyN1bmRlZiBERUZfRlBVQUIKKysKKysvLyAtLS0gRlAg dW5hcnkvY29udmVyc2lvbi9yb3VuZGluZyAtLS0KKysKKysjZGVmaW5lIERFRl9GUFVEUyhvcCkg REVGX1hGT1JNMl9GKG9wKQorK0RFRl9GUFVEUyhmYWJzKQorK0RFRl9GUFVEUyhmbmVnKQorK0RF Rl9GUFVEUyhmbXIpCisrREVGX0ZQVURTKGZjZmlkKQorK0RFRl9GUFVEUyhmY2ZpZHMpCisrREVG X0ZQVURTKGZjZmlkdSkKKytERUZfRlBVRFMoZmNmaWR1cykKKytERUZfRlBVRFMoZmN0aWQpCisr REVGX0ZQVURTKGZjdGlkeikKKytERUZfRlBVRFMoZmN0aWR1eikKKytERUZfRlBVRFMoZmN0aXd6 KQorK0RFRl9GUFVEUyhmcmltKQorK0RFRl9GUFVEUyhmcmlwKQorK0RFRl9GUFVEUyhmcml6KQor K0RFRl9GUFVEUyhmcnNwKQorK0RFRl9GUFVEUyhmc3FydCkKKytERUZfRlBVRFMoZnNxcnRzKQor KyN1bmRlZiBERUZfRlBVRFMKKysKKysvLyAtLS0gRlAgbG9hZHMvc3RvcmVzIChELWZvcm0pIC0t LQorKworK0RFRl9ERk9STV9GKGxmZCkKKytERUZfREZPUk1fRihsZnMpCisrREVGX0RGT1JNX0Yo c3RmZCkKKytERUZfREZPUk1fRihzdGZzKQorK0RFRl9ERk9STV9GKHN0ZmR1KQorK0RFRl9ERk9S TV9GKHN0ZnN1KQorKworKy8vIC0tLSBGUCBsb2Fkcy9zdG9yZXMgKFgtZm9ybSwgaW5kZXhlZCkg LS0tCisrCisrREVGX0ZNRU14KGxmZHgpIERFRl9GTUVNeChsZnN4KSBERUZfRk1FTXgobGZpd2F4 KQorKyAgICBERUZfRk1FTXgoc3RmZHgpIERFRl9GTUVNeChzdGZzeCkKKysvLyBDbGVhbiB1cCBt YWNyb3MuCisrI3VuZGVmIERFRl9YRk9STQorKyN1bmRlZiBERUZfWEZPUk1fUkMKKysjdW5kZWYg REVGX1hGT1JNUworKyN1bmRlZiBERUZfWEZPUk1TX1JDCisrI3VuZGVmIERFRl9YRk9STVNfSQor KyN1bmRlZiBERUZfWEZPUk0yCisrI3VuZGVmIERFRl9YRk9STTJfUkMKKysjdW5kZWYgREVGX1hG T1JNMlMKKysjdW5kZWYgREVGX1hGT1JNMlNfUkMKKysjdW5kZWYgREVGX1hGT1JNMl9GCisrI3Vu ZGVmIERFRl9YRk9STTJfRl9SQworKyN1bmRlZiBERUZfTUZPUk0KKysjdW5kZWYgREVGX01GT1JN X0kKKysjdW5kZWYgREVGX01GT1JNX0lfUkMKKysjdW5kZWYgREVGX01EU0ZPUk0KKysjdW5kZWYg REVGX01EU0ZPUk1fUkMKKysjdW5kZWYgREVGX01ERk9STQorKyN1bmRlZiBERUZfTURGT1JNX1JD CisrI3VuZGVmIERFRl9ERk9STV9GCisrI3VuZGVmIERFRl9GTUVNeAorKyN1bmRlZiBERUZfQUZP Uk1fQworKyN1bmRlZiBERUZfQUZPUk1fQ19SQworKyN1bmRlZiBERUZfQUZPUk1fQgorKyN1bmRl ZiBERUZfQUZPUk1fQl9SQworKyN1bmRlZiBERUZfQUZPUk0KKysjdW5kZWYgREVGX0FGT1JNX1JD CisrCisrICAgIC8vIC0tLSBGUFNDUiBvcGVyYXRpb25zIC0tLQorKworKyAgICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19tdGZzYjAodWludDhfdCBidCkgeworKyAgc3BldygibXRmc2IwXHQl ZCIsIGJ0KTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX210ZnNiMCB8ICh1aW50MzJfdClidCA8 PCAyMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX21jcmZzKENSZWdpc3Rl cklEIGJmLCB1aW50OF90IGJmYSkgeworKyAgc3BldygibWNyZnNcdGNyJWQsJWQiLCBiZiwgYmZh KTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX21jcmZzIHwgKHVpbnQzMl90KWJmIDw8IDIzIHwg KHVpbnQzMl90KWJmYSA8PCAxOCk7CisrfQorKworKy8vIC0tLSBWU1ggKEZQUi1vbmx5IHN1YnNl dCkgLS0tCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbWZ2c3JkKFJlZ2lzdGVyIHJh LCBGbG9hdFJlZ2lzdGVyIHhzKSB7CisrICBzcGV3KCJtZnZzcmRcdCUzcywlM3MiLCByYS5uYW1l KCksIHhzLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm1NZnZzcihQUENfbWZ2 c3JkLCByYS5jb2RlKCksIHhzLmVuY29kaW5nKCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfbXR2c3JkKEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhKSB7CisrICBz cGV3KCJtdHZzcmRcdCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSk7CisrICByZXR1cm4g d3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNyZCwgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCAw KSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210dnNyd2EoRmxvYXRSZWdp c3RlciB4dCwgUmVnaXN0ZXIgcmEpIHsKKysgIHNwZXcoIm10dnNyd2FcdCUzcywlM3MiLCB4dC5u YW1lKCksIHJhLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNy d2EsIHh0LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgMCkpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19tdHZzcndzKEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhKSB7Cisr ICBzcGV3KCJtdHZzcndzXHQlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCkpOworKyAgcmV0 dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQQ19tdHZzcndzLCB4dC5lbmNvZGluZygpLCByYS5jb2Rl KCksIDApKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3J3eihGbG9h dFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSkgeworKyAgc3BldygibXR2c3J3elx0JTNzLCUzcyIs IHh0Lm5hbWUoKSwgcmEubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENf bXR2c3J3eiwgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCAwKSk7CisrfQorKworK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX3h4YnJkKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIg eGIpIHsKKysgIHNwZXcoInh4YnJkXHQlM3MsJTNzIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkpOwor KyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194eGJyZCwgeHQuZW5jb2RpbmcoKSwgeGIu ZW5jb2RpbmcoKSkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c2N2ZHBz cG4oRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YikgeworKyAgc3BldygieHNjdmRw c3BuXHQlM3MsJTNzIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5z dChYWDJGb3JtKFBQQ194c2N2ZHBzcG4sIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsK Kyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHNjdnNwZHBuKEZsb2F0UmVnaXN0 ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInhzY3ZzcGRwblx0JTNzLCUzcyIs IHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENf eHNjdnNwZHBuLCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygpKSk7CisrfQorKworKy8vIFBP V0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgY29udmVyc2lvbnMuIFRoZSBVSU0gZGlzYW1iaWd1 YXRvciBpcworKy8vIGFscmVhZHkgaW4gUFBDX3hzY3ZkcGhwIC8gUFBDX3hzY3ZocGRwOyBYWDJG b3JtJ3MgYml0czE2dG8yMCBkZWZhdWx0CisrLy8gb2YgMCBsZWF2ZXMgaXQgaW50YWN0LgorK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3hzY3ZkcGhwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0 UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInhzY3ZkcGhwXHQlM3MsJTNzIiwgeHQubmFtZSgpLCB4 Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194c2N2ZHBocCwgeHQu ZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc194c2N2aHBkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Cisr ICBzcGV3KCJ4c2N2aHBkcFx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJl dHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHNjdmhwZHAsIHh0LmVuY29kaW5nKCksIHhiLmVu Y29kaW5nKCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHN4ZXhwZHAo RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YikgeworKyAgc3BldygieHN4ZXhwZHBc dCUzcywlM3MiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhY MkZvcm0oUFBDX3hzeGV4cGRwLCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygpKSk7CisrfQor KworKy8vIFBPV0VSOSAoSVNBIDMuMCkgRlAxNiBsb2FkL3N0b3JlLCBYLWZvcm0gaW5kZXhlZC4g bHhzaWh6eCBsb2FkcworKy8vIDE2IGJpdHMgaW50byBWU1IgZHdvcmQgMCB3b3JkIDEncyBsb3cg aGFsZndvcmQgKHplcm9pbmcgdGhlIHJlc3QpOworKy8vIHN0eHNpaHggc3RvcmVzIGZyb20gdGhl cmUuIFRoZSBYVFs1XS9YU1s1XSBiaXQgdHJhdmVscyB2aWEgdGhlCisrLy8gWC1mb3JtJ3MgVFgv U1ggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X2x4c2loengoRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Cisr ICBzcGV3KCJseHNpaHp4XHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgcmEubmFtZSgpLCByYi5u YW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbHhzaWh6eCB8ICh4dC5lbmNvZGluZygp ICYgMzEpIDw8IDIxIHwKKysgICAgICAgICAgICAgICAgICAgcmEuY29kZSgpIDw8IDE2IHwgcmIu Y29kZSgpIDw8IDExIHwKKysgICAgICAgICAgICAgICAgICAgKCh4dC5lbmNvZGluZygpID4+IDUp ICYgMSkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zdHhzaWh4KEZsb2F0 UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeworKyAgc3Bldygic3R4c2lo eFx0JTNzLCUzcywlM3MiLCB4cy5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJl dHVybiB3cml0ZUluc3QoUFBDX3N0eHNpaHggfCAoeHMuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8 CisrICAgICAgICAgICAgICAgICAgIHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSB8 CisrICAgICAgICAgICAgICAgICAgICgoeHMuZW5jb2RpbmcoKSA+PiA1KSAmIDEpKTsKKyt9Cisr CisrLy8gWFgzLWZvcm0sIEZQUi1zcGFjZSBvbmx5IChlbmNvZGluZyAwLi4zMSDihpIgVlNSMC4u MzEsIGFsbCBBWC9CWC9UWCA9IDApLgorKy8vIEphdmEvSmF2YVNjcmlwdC1zdHlsZSBzY2FsYXIg bWF4L21pbiDigJQgc2VtYW50aWNzIHZlcmlmaWVkIHRvIG1hdGNoCisrLy8gRUNNQS0yNjIgTWF0 aC5tYXgvTWF0aC5taW4gaW5jbHVkaW5nIMKxMCBhbmQgTmFOIHByb3BhZ2F0aW9uLiBQT1dFUjkt b25seS4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c21heGpkcChGbG9hdFJlZ2lzdGVy IHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInhzbWF4amRwXHQlM3MsJTNzLCUzcyIs IHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChY WDNGb3JtKFBQQ194c21heGpkcCwgeHQsIHhhLCB4YikpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc194c21pbmpkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhh LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIp IHsKKysgIHNwZXcoInhzbWluamRwXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgp LCB4Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ194c21pbmpkcCwg eHQsIHhhLCB4YikpOworK30KKysKKysvLyAtLS0gVlNYIFNJTUQgbG9hZC9zdG9yZSAtLS0KKysK KysvLyBGb3IgVlNYMC0zMSAoRlBSKSwgdGhlIDZ0aCByZWdpc3RlciBiaXQgKFRYL1NYL0JYKSBp cyAwLgorKy8vIFgtZm9ybTogb3Bjb2RlIHwgVCA8PCAyMSB8IEEgPDwgMTYgfCBCIDw8IDExIHwg eG8gfCBUWAorKy8vIGx4dngvc3R4dnggYXJlIFBPV0VSOSAoSVNBIDMuMCkuIGx4dmQyeC9zdHh2 ZDJ4IGFyZSBQT1dFUjggKElTQSAyLjA3KS4KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19seHZ4KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeworKyAg c3BldygibHh2eFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgp KTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfbHh2eCwgeHQuZW5jb2RpbmcoKSwg cmEuY29kZSgpLCByYi5jb2RlKCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfc3R4dngoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Cisr ICBzcGV3KCJzdHh2eFx0JTNzLCUzcywlM3MiLCB4cy5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFt ZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfc3R4dngsIHhzLmVuY29kaW5n KCksIHJhLmNvZGUoKSwgcmIuY29kZSgpKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX2x4dmQyeChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp IHsKKysgIHNwZXcoImx4dmQyeFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSwg cmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfbHh2ZDJ4LCB4dC5l bmNvZGluZygpLCByYS5jb2RlKCksIHJiLmNvZGUoKSkpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19zdHh2ZDJ4KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYikgeworKyAgc3Bldygic3R4dmQyeFx0JTNzLCUzcywlM3MiLCB4cy5uYW1lKCksIHJh Lm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfc3R4 dmQyeCwgeHMuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCByYi5jb2RlKCkpKTsKKyt9CisrCisrLy8g Vk1YIHJlZ2lzdGVyIGxvYWQvc3RvcmUuIFNlZSBQUENfbHZ4L1BQQ19zdHZ4IGluIEFzc2VtYmxl ci1wcGM2NC5oIGZvcgorKy8vIHRoZSBlbmNvZGluZyByYXRpb25hbGUuCisrQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfbHZ4KHVpbnQ4X3QgdnJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp IHsKKysgIE1PWl9BU1NFUlQodnJ0IDwgMzIpOworKyAgc3BldygibHZ4XHR2ciVkLCUzcywlM3Mi LCB2cnQsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2x2 eCB8IHVpbnQzMl90KHZydCkgPDwgMjEgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAgICAg ICAgICAgICByYi5jb2RlKCkgPDwgMTEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19zdHZ4KHVpbnQ4X3QgdnJzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIE1P Wl9BU1NFUlQodnJzIDwgMzIpOworKyAgc3Bldygic3R2eFx0dnIlZCwlM3MsJTNzIiwgdnJzLCBy YS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zdHZ4IHwgdWlu dDMyX3QodnJzKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8CisrICAgICAgICAgICAgICAgICAg IHJiLmNvZGUoKSA8PCAxMSk7CisrfQorKworKy8vIC0tLSBWU1ggU0lNRCByZWdpc3RlciBvcGVy YXRpb25zIC0tLQorKworKy8vIFhYMy1mb3JtOiBvcGNvZGUgfCBUWzA6NF08PDIxIHwgQVswOjRd PDwxNiB8IEJbMDo0XTw8MTEgfCB4byB8IEFYIHwgQlggfCBUWAorKy8vIHdoZXJlIEFYL0JYL1RY IChiaXRzIDIvMS8wKSBjYXJyeSBiaXQgNSBvZiBlYWNoIDYtYml0IFZTUiBpbmRleC4KKysvLyBF bmNvZGVkIGJ5IHRoZSBYWDNGb3JtIGhlbHBlciBhYm92ZSBmb3IgYm90aCBWU1IwLTMxIChTaW5n bGUvRG91YmxlKSBhbmQKKysvLyBWU1IzMi02MyAoU2ltZDEyOCkgb3BlcmFuZHMuCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhsb3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhi KSB7CisrICBzcGV3KCJ4eGxvclx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwg eGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHhsb3IsIHh0LCB4 YSwgeGIpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhsYW5kKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInh4bGFuZFx0JTNzLCUzcywl M3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUlu c3QoWFgzRm9ybShQUENfeHhsYW5kLCB4dCwgeGEsIHhiKSk7CisrfQorKworK0J1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzX3h4bHhvcihGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhh LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7 CisrICBzcGV3KCJ4eGx4b3JcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhi Lm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDX3h4bHhvciwgeHQsIHhh LCB4YikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eGxub3IoRmxvYXRS ZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgeworKyAgc3BldygieHhsbm9yXHQlM3MsJTNzLCUz cyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5z dChYWDNGb3JtKFBQQ194eGxub3IsIHh0LCB4YSwgeGIpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfeHhsYW5kYyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhh LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yikg eworKyAgc3BldygieHhsYW5kY1x0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwg eGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHhsYW5kYywgeHQs IHhhLCB4YikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eHNlbChGbG9h dFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIsIEZsb2F0UmVnaXN0ZXIgeGMpIHsKKysgIHNwZXco Inh4c2VsXHQlM3MsJTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgp LCB4Yy5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDRGb3JtKFBQQ194eHNlbCwgeHQu ZW5jb2RpbmcoKSwgeGEuZW5jb2RpbmcoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB4 Yi5lbmNvZGluZygpLCB4Yy5lbmNvZGluZygpKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX3h4cGVybWRpKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YiwgdWlu dDhfdCBkbSkgeworKyAgTU9aX0FTU0VSVChkbSA8IDQpOworKyAgc3BldygieHhwZXJtZGlcdCUz cywlM3MsJTNzLCVkIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSwgZG0pOworKyAg cmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ194eHBlcm1kaSB8ICh1aW50MzJfdChkbSkgPDwg OCksIHh0LCB4YSwgeGIpKTsKKyt9CisrCisrLy8gUE9XRVI5IChJU0EgMy4wKS4gWFgxLWZvcm0g d2l0aCB0d28gR1BSIHNvdXJjZXMuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3Jk ZChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXco Im10dnNyZGRcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7 CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNyZGQsIHh0LmVuY29kaW5nKCks IHJhLmNvZGUoKSwgcmIuY29kZSgpKSk7CisrfQorKworKy8vIFBPV0VSOSAoSVNBIDMuMCkuIFhY MS1mb3JtOiBtb3ZlIGxvd2VyIGRvdWJsZXdvcmQgb2YgVlNSIHRvIEdQUi4KKytCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19tZnZzcmxkKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHhzKSB7 CisrICBzcGV3KCJtZnZzcmxkXHQlM3MsJTNzIiwgcnQubmFtZSgpLCB4cy5uYW1lKCkpOworKyAg cmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtTWZ2c3IoUFBDX21mdnNybGQsIHJ0LmNvZGUoKSwgeHMu ZW5jb2RpbmcoKSkpOworK30KKysKKysvLyAtLS0gWFgyLWZvcm0gVlNYIGluc3RydWN0aW9ucyAt LS0KKysKKysvLyBYWDItZm9ybTogb3Bjb2RlIHwgVDw8MjEgfCBVSU08PDE2X2FyZWEgfCBCPDwx MV9hcmVhIHwgWE88PDIgfCBCWCB8IFRYCisrLy8gRm9yIFZTUjAtMzEsIEJYPVRYPTAuCisrCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhzcGx0dyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9h dFJlZ2lzdGVyIHhiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCB1aW0pIHsKKysgIE1PWl9BU1NFUlQodWltIDwgNCk7CisrICBzcGV3KCJ4eHNwbHR3XHQlM3Ms JTNzLCVkIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCksIHVpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KFhYMkZvcm0oUFBDX3h4c3BsdHcsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCksIHVpbSkp OworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eGluc2VydHcoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCB1aW0pIHsKKysgIE1PWl9BU1NFUlQodWltIDw9IDEyICYmICh1aW0g JiAzKSA9PSAwKTsKKysgIHNwZXcoInh4aW5zZXJ0d1x0JTNzLCUzcywlZCIsIHh0Lm5hbWUoKSwg eGIubmFtZSgpLCB1aW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194eGluc2Vy dHcsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCksIHVpbSkpOworK30KKysKKytCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc194eGV4dHJhY3R1dyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJl Z2lzdGVyIHhiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgdWltKSB7CisrICBNT1pfQVNTRVJUKHVpbSA8PSAxMiAmJiAodWltICYgMykgPT0gMCk7Cisr ICBzcGV3KCJ4eGV4dHJhY3R1d1x0JTNzLCUzcywlZCIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpLCB1 aW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194eGV4dHJhY3R1dywgeHQuZW5j b2RpbmcoKSwgeGIuZW5jb2RpbmcoKSwgdWltKSk7CisrfQorKworKy8vIFBPV0VSOSAoSVNBIDMu MCkuIFhYMS1mb3JtLWlzaDogVCg1KSArIFVJTTgoOCkgKyBYTyArIFRYLiBVSU04IG9jY3VwaWVz CisrLy8gYml0cyAxOC4uMTEgKGEgbm9uLXN0YW5kYXJkIHNsb3QgdGhhdCBYWDFGb3JtIGRvZXNu J3QgZml0KSwgc28gZW5jb2RlCisrLy8gaW5saW5lLiBUWCBiaXQgYXQgaW5zdHJ1Y3Rpb24gYml0 IDAgc2VsZWN0cyB0aGUgdXBwZXIgaGFsZiBvZiBWU1IKKysvLyBzcGFjZSB3aGVuIHh0LmVuY29k aW5nKCkgaXMgaW4gMzItNjMgKFNpbWQxMjgpLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X3h4c3BsdGliKEZsb2F0UmVnaXN0ZXIgeHQsIHVpbnQ4X3QgaW1tOCkgeworKyAgc3BldygieHhz cGx0aWJcdCUzcywldSIsIHh0Lm5hbWUoKSwgaW1tOCk7CisrICB1aW50MzJfdCBlbmMgPSB1aW50 MzJfdCh4dC5lbmNvZGluZygpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3h4c3BsdGliIHwg KGVuYyAmIDMxKSA8PCAyMSB8ICh1aW50MzJfdClpbW04IDw8IDExIHwKKysgICAgICAgICAgICAg ICAgICAgKChlbmMgPj4gNSkgJiAxKSk7CisrfQorKworKy8vIC0tLSBWTVggaW5zdHJ1Y3Rpb25z IC0tLQorKworKy8vIFZYLWZvcm06ICg0PDwyNikgfCBWUlQ8PDIxIHwgVUlNTTw8MTYgfCBWUkI8 PDExIHwgWE8KKysvLyBWUlQvVlJCIGFyZSA1LWJpdCByYXcgVlIgbnVtYmVycyAoMC0zMSkuIFNp bWQxMjggRmxvYXRSZWdpc3Rlci5lbmNvZGluZygpCisrLy8gcmV0dXJucyAzMi02MzsgbWFza2lu ZyB3aXRoICYgMzEgbWFwcyBpdCBiYWNrIHRvIHRoZSBWUiBvZmZzZXQgMC0zMS4KKytCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc192c3BsdGIoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0 ZXIgdnJiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkg eworKyAgTU9aX0FTU0VSVCh1aW0gPCAxNik7CisrICBzcGV3KCJ2c3BsdGJcdCUzcywlM3MsJWQi LCB2cnQubmFtZSgpLCB2cmIubmFtZSgpLCB1aW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENf dnNwbHRiIHwgKHZydC5lbmNvZGluZygpICYgMzEpIDw8IDIxIHwKKysgICAgICAgICAgICAgICAg ICAgKHVpbnQzMl90KXVpbSA8PCAxNiB8ICh2cmIuZW5jb2RpbmcoKSAmIDMxKSA8PCAxMSk7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0aChGbG9hdFJlZ2lzdGVyIHZy dCwgRmxvYXRSZWdpc3RlciB2cmIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgdWltKSB7CisrICBNT1pfQVNTRVJUKHVpbSA8IDgpOworKyAgc3BldygidnNwbHRo XHQlM3MsJTNzLCVkIiwgdnJ0Lm5hbWUoKSwgdnJiLm5hbWUoKSwgdWltKTsKKysgIHJldHVybiB3 cml0ZUluc3QoUFBDX3ZzcGx0aCB8ICh2cnQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8CisrICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdCl1aW0gPDwgMTYgfCAodnJiLmVuY29kaW5nKCkgJiAz MSkgPDwgMTEpOworK30KKysKKysvLyBWQS1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZSQTw8 MTYgfCBWUkI8PDExIHwgU0hCPDw2IHwgWE8oNi1iaXQpCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfdnNsZG9pKEZsb2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qg c2hiKSB7CisrICBNT1pfQVNTRVJUKHNoYiA8IDE2KTsKKysgIHNwZXcoInZzbGRvaVx0JTNzLCUz cywlM3MsJWQiLCB2cnQubmFtZSgpLCB2cmEubmFtZSgpLCB2cmIubmFtZSgpLCBzaGIpOworKyAg cmV0dXJuIHdyaXRlSW5zdChQUENfdnNsZG9pIHwgKHZydC5lbmNvZGluZygpICYgMzEpIDw8IDIx IHwKKysgICAgICAgICAgICAgICAgICAgKHZyYS5lbmNvZGluZygpICYgMzEpIDw8IDE2IHwgKHZy Yi5lbmNvZGluZygpICYgMzEpIDw8IDExIHwKKysgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90 KXNoYiA8PCA2KTsKKyt9CisrCisrLy8gLS0tIFZNWCBpbnRlZ2VyIGFyaXRobWV0aWMgKFZSIHJl Z2lzdGVycyBvbmx5KSAtLS0KKysKKysvLyBWWC1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZS QTw8MTYgfCBWUkI8PDExIHwgWE8KKysvLyBUaGUgbWFjcm8gdGFrZXMgcmF3IFZSIG51bWJlcnMg KDAtMzEpLgorKyNkZWZpbmUgREVGX1ZNWF9WVlYob3ApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzXyMjb3AodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYikgeyBcCisrICAg IE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJiIDwgMzIpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiXHR2ciVkLHZyJWQsdnIlZCIsIHZydCwg dnJhLCB2cmIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRl SW5zdChQUENfIyNvcCB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSk7ICAgICAg ICBcCisrICB9CisrCisrREVGX1ZNWF9WVlYodmFkZHVibSkKKytERUZfVk1YX1ZWVih2YWRkdWht KQorK0RFRl9WTVhfVlZWKHZhZGR1d20pCisrREVGX1ZNWF9WVlYodmFkZHVkbSkKKytERUZfVk1Y X1ZWVih2c3VidWJtKQorK0RFRl9WTVhfVlZWKHZzdWJ1aG0pCisrREVGX1ZNWF9WVlYodnN1YnV3 bSkKKytERUZfVk1YX1ZWVih2c3VidWRtKQorK0RFRl9WTVhfVlZWKHZhZGRzYnMpCisrREVGX1ZN WF9WVlYodmFkZHNocykKKytERUZfVk1YX1ZWVih2YWRkdWJzKQorK0RFRl9WTVhfVlZWKHZhZGR1 aHMpCisrREVGX1ZNWF9WVlYodnN1YnNicykKKytERUZfVk1YX1ZWVih2c3Vic2hzKQorK0RFRl9W TVhfVlZWKHZzdWJ1YnMpCisrREVGX1ZNWF9WVlYodnN1YnVocykKKytERUZfVk1YX1ZWVih2bWlu c2IpCisrREVGX1ZNWF9WVlYodm1pbnNoKQorK0RFRl9WTVhfVlZWKHZtaW5zdykKKytERUZfVk1Y X1ZWVih2bWF4c2IpCisrREVGX1ZNWF9WVlYodm1heHNoKQorK0RFRl9WTVhfVlZWKHZtYXhzdykK KytERUZfVk1YX1ZWVih2bWF4c2QpCisrREVGX1ZNWF9WVlYodm1pbnViKQorK0RFRl9WTVhfVlZW KHZtaW51aCkKKytERUZfVk1YX1ZWVih2bWludXcpCisrREVGX1ZNWF9WVlYodm1heHViKQorK0RF Rl9WTVhfVlZWKHZtYXh1aCkKKytERUZfVk1YX1ZWVih2bWF4dXcpCisrREVGX1ZNWF9WVlYodmF2 Z3ViKQorK0RFRl9WTVhfVlZWKHZhdmd1aCkKKytERUZfVk1YX1ZWVih2bXVsdXdtKQorK0RFRl9W TVhfVlZWKHZtdWxsZCkKKysKKytERUZfVk1YX1ZWVih2c2xiKQorK0RFRl9WTVhfVlZWKHZzbGgp CisrREVGX1ZNWF9WVlYodnNsdykKKytERUZfVk1YX1ZWVih2c2xkKQorK0RFRl9WTVhfVlZWKHZz cmIpCisrREVGX1ZNWF9WVlYodnNyaCkKKytERUZfVk1YX1ZWVih2c3J3KQorK0RFRl9WTVhfVlZW KHZzcmQpCisrREVGX1ZNWF9WVlYodnNyYWIpCisrREVGX1ZNWF9WVlYodnNyYWgpCisrREVGX1ZN WF9WVlYodnNyYXcpCisrREVGX1ZNWF9WVlYodnNyYWQpCisrREVGX1ZNWF9WVlYodnNsbykKKytE RUZfVk1YX1ZWVih2c3JvKQorK0RFRl9WTVhfVlZWKHZjbXBlcXViKQorK0RFRl9WTVhfVlZWKHZj bXBlcXVoKQorK0RFRl9WTVhfVlZWKHZjbXBlcXV3KQorK0RFRl9WTVhfVlZWKHZjbXBlcXVkKQor K0RFRl9WTVhfVlZWKHZjbXBndHNiKQorK0RFRl9WTVhfVlZWKHZjbXBndHNoKQorK0RFRl9WTVhf VlZWKHZjbXBndHN3KQorK0RFRl9WTVhfVlZWKHZjbXBndHNkKQorK0RFRl9WTVhfVlZWKHZjbXBn dHViKQorK0RFRl9WTVhfVlZWKHZjbXBndHVoKQorK0RFRl9WTVhfVlZWKHZjbXBndHV3KQorK0RF Rl9WTVhfVlZWKHZjbXBndHVkKQorKy8vIFBPV0VSOSAoSVNBIDMuMCkuIE5vdEVxdWFsIGNvbXBh cmU7IHNhdmVzIHRoZSB4eGxub3IgdGhhdCB2Y21wZXF1WCBuZWVkcy4KKytERUZfVk1YX1ZWVih2 Y21wbmViKQorK0RFRl9WTVhfVlZWKHZjbXBuZWgpCisrREVGX1ZNWF9WVlYodmNtcG5ldykKKysK KysvLyBQT1dFUjgrIChJU0EgMi4wNykuIHZicGVybXEgUlQsUkEsUkI6IGJpdC1wZXJtdXRlIHF1 YWR3b3JkLgorK0RFRl9WTVhfVlZWKHZicGVybXEpCisrCisrI3VuZGVmIERFRl9WTVhfVlZWCisr CisrLy8gVkMtZm9ybSByZWNvcmQgZm9ybXM6IHNhbWUgYXMgVlgtZm9ybSBhYm92ZSB3aXRoIFJj IGJpdCAoYml0IDEwIExTQikgc2V0LgorKy8vIHZjbXBYWFguIHNldHMgQ1I2OiBMVCA9IGFsbC10 cnVlLCBFUSA9IG5vbmUtdHJ1ZS4KKysjZGVmaW5lIERFRl9WTVhfVlZWX1JDKG9wKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgICAg ICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCB2cmIpIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVCh2cnQgPCAz MiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICBzcGV3KCNvcCAiLlx0dnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2 cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfCAweDQwMCk7IFwKKysgIH0KKysKKytE RUZfVk1YX1ZWVl9SQyh2Y21wZXF1YikKKytERUZfVk1YX1ZWVl9SQyh2Y21wZXF1aCkKKytERUZf Vk1YX1ZWVl9SQyh2Y21wZXF1dykKKytERUZfVk1YX1ZWVl9SQyh2Y21wZXF1ZCkKKysKKysjdW5k ZWYgREVGX1ZNWF9WVlZfUkMKKysKKysvLyBWU1ggZmxvYXQgY29tcGFyZSAoWFgzLWZvcm0pLgor KyNkZWZpbmUgREVGX1ZTWF9DTVAob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsIFwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgeyAgICAgICAgICAgICAgICAgXAorKyAgICBz cGV3KCNvcCAiXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkp OyAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfIyNvcCwgeHQsIHhh LCB4YikpOyAgICAgICAgICAgICAgICAgIFwKKysgIH0KKysKKytERUZfVlNYX0NNUCh4dmNtcGVx c3ApCisrREVGX1ZTWF9DTVAoeHZjbXBndHNwKQorK0RFRl9WU1hfQ01QKHh2Y21wZ2VzcCkKKytE RUZfVlNYX0NNUCh4dmNtcGVxZHApCisrREVGX1ZTWF9DTVAoeHZjbXBndGRwKQorK0RFRl9WU1hf Q01QKHh2Y21wZ2VkcCkKKysKKysjdW5kZWYgREVGX1ZTWF9DTVAKKysKKysvLyBWU1ggZmxvYXQg YXJpdGhtZXRpYyAoWFgzLWZvcm0gYmluYXJ5KS4KKysjZGVmaW5lIERFRl9WU1hfQklOKG9wKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVy IHhhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg eGIpIHsgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCB4 dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsgICAgICAgXAorKyAgICByZXR1cm4gd3Jp dGVJbnN0KFhYM0Zvcm0oUFBDXyMjb3AsIHh0LCB4YSwgeGIpKTsgICAgICAgICAgICAgICAgICBc CisrICB9CisrREVGX1ZTWF9CSU4oeHZhZGRzcCkKKytERUZfVlNYX0JJTih4dmFkZGRwKSBERUZf VlNYX0JJTih4dnN1YnNwKSBERUZfVlNYX0JJTih4dnN1YmRwKSBERUZfVlNYX0JJTigKKysgICAg eHZtdWxzcCkgREVGX1ZTWF9CSU4oeHZtdWxkcCkgREVGX1ZTWF9CSU4oeHZkaXZzcCkgREVGX1ZT WF9CSU4oeHZkaXZkcCkKKysgICAgREVGX1ZTWF9CSU4oeHZtaW5zcCkgREVGX1ZTWF9CSU4oeHZt aW5kcCkgREVGX1ZTWF9CSU4oeHZtYXhzcCkgREVGX1ZTWF9CSU4oCisrICAgICAgICB4dm1heGRw KSBERUZfVlNYX0JJTih4dm1hZGRhc3ApIERFRl9WU1hfQklOKHh2bWFkZGFkcCkKKysgICAgICAg IERFRl9WU1hfQklOKHh2bm1zdWJhc3ApIERFRl9WU1hfQklOKHh2bm1zdWJhZHApCisrI3VuZGVm IERFRl9WU1hfQklOCisrCisrLy8gVlNYIHVuYXJ5IChYWDItZm9ybSk6IG9wIHwgeHQ8PDIxIHwg eGI8PDExIHwgWE88PDIKKysvLyBYWDItZm9ybSB1bmFyeSBWU1ggb3A6IFQgKyBCLCBubyBVSU0u IFVzZXMgWFgyRm9ybSBoZWxwZXIgZm9yIFRYL0JYIGJpdHMuCisrI2RlZmluZSBERUZfVlNYX1VO KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9h dFJlZ2lzdGVyIHhiKSB7IFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwg eGIubmFtZSgpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUlu c3QoWFgyRm9ybShQUENfIyNvcCwgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOyAgXAor KyAgfQorKyAgICAgICAgICAgIERFRl9WU1hfVU4oeHZhYnNzcCkgREVGX1ZTWF9VTih4dmFic2Rw KSBERUZfVlNYX1VOKAorKyAgICAgICAgICAgICAgICB4dm5lZ3NwKSBERUZfVlNYX1VOKHh2bmVn ZHApIERFRl9WU1hfVU4oeHZzcXJ0c3ApCisrICAgICAgICAgICAgICAgIERFRl9WU1hfVU4oeHZz cXJ0ZHApIERFRl9WU1hfVU4oeHZyc3BpcCkgREVGX1ZTWF9VTigKKysgICAgICAgICAgICAgICAg ICAgIHh2cmRwaXApIERFRl9WU1hfVU4oeHZyc3BpbSkgREVGX1ZTWF9VTih4dnJkcGltKQorKyAg ICAgICAgICAgICAgICAgICAgREVGX1ZTWF9VTih4dnJzcGl6KSBERUZfVlNYX1VOKHh2cmRwaXop IERFRl9WU1hfVU4oCisrICAgICAgICAgICAgICAgICAgICAgICAgeHZyc3BpYykgREVGX1ZTWF9V Tih4dnJkcGljKSBERUZfVlNYX1VOKHh2Y3ZzeHdzcCkKKysgICAgICAgICAgICAgICAgICAgICAg ICBERUZfVlNYX1VOKHh2Y3Z1eHdzcCkgREVGX1ZTWF9VTih4dmN2c3h3ZHApIERFRl9WU1hfVU4o CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh2Y3Z1eHdkcCkgREVGX1ZTWF9VTih4dmN2 c3BzeHdzKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2Y3ZzcHV4 d3MpIERFRl9WU1hfVU4oeHZjdmRwc3h3cykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERFRl9WU1hfVU4oeHZjdmRwdXh3cykgREVGX1ZTWF9VTih4dmN2ZHBzcCkKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2Y3ZzcGRwKQorKyN1bmRl ZiBERUZfVlNYX1VOCisrCisrLy8gVk1YIHVuYXJ5IFZYLWZvcm06ICg0PDwyNikgfCBWUlQ8PDIx IHwgMDw8MTYgfCBWUkI8PDExIHwgWE8KKysjZGVmaW5lIERFRl9WTVhfVU5BUlkob3ApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzXyMjb3AodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IFwKKysgICAgTU9aX0FTU0VS VCh2cnQgPCAzMiAmJiB2cmIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg c3Bldygjb3AgIlx0dnIlZCx2ciVkIiwgdnJ0LCB2cmIpOyAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHZydCA8PCAyMSB8IHZyYiA8PCAx MSk7ICAgICAgIFwKKysgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgREVGX1ZNWF9VTkFSWSh2dXBraHNiKSBERUZfVk1YX1VOQVJZKAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVwa2xzYikgREVGX1ZNWF9VTkFSWSh2dXBr aHNoKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZN WF9VTkFSWSh2dXBrbHNoKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERFRl9WTVhfVU5BUlkodnVwa2hzdykKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZNWF9VTkFSWSh2dXBrbHN3KQorKyAg ICAvLyBQT1dFUjkgcGVyLWxhbmUgaW50ZWdlciBuZWdhdGUuIFRoZSBWUkEgZmllbGQgaG9sZHMg dGhlIHN1Ym9wIGNvZGUKKysgICAgLy8gKDYgZm9yIHZuZWd3LCA3IGZvciB2bmVnZCkgd2hpY2gg aXMgYWxyZWFkeSBiYWtlZCBpbnRvIFBQQ192bmVne3csZH0uCisrICAgIERFRl9WTVhfVU5BUlko dm5lZ3cpIERFRl9WTVhfVU5BUlkodm5lZ2QpIERFRl9WTVhfVU5BUlkodnBvcGNudGIpCisrI3Vu ZGVmIERFRl9WTVhfVU5BUlkKKysKKysgICAgLy8gUE9XRVI5IGFkZHBjaXMgKERYLWZvcm0pLiBD b21wdXRlcyByVCA9IChDSUEgKyA0KSArIChEIDw8IDE2KS4KKysgICAgLy8gRCBpcyBhIDE2LWJp dCBzaWduZWQgaW1tZWRpYXRlLCBzcGxpdCBhY3Jvc3MgdGhyZWUgaW5zdHJ1Y3Rpb24gZmllbGRz OgorKyAgICAvLyAgIGQwID0gYml0cyAxNi4uMjUgKDEwIGJpdHMsIERbMTU6Nl0pCisrICAgIC8v ICAgZDEgPSBiaXRzIDExLi4xNSAoNSBiaXRzLCAgRFs1OjFdKQorKyAgICAvLyAgIGQyID0gYml0 IDMxICAgICAgKDEgYml0LCAgIERbMF0pCisrICAgIC8vIFByaW1hcnkgb3Bjb2RlIDE5LCBEWCBz dWJvcCAyLgorKyAgICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19hZGRwY2lzKFJlZ2lzdGVy IHJ0LCBpbnQxNl90IGQpIHsKKysgIHNwZXcoImFkZHBjaXNcdCVzLCVkIiwgcnQubmFtZSgpLCAo aW50KWQpOworKyAgdWludDMyX3QgRCA9IHVpbnQxNl90KGQpOworKyAgdWludDMyX3QgaW5zdCA9 ICgxOXUgPDwgMjYpIHwgKHVpbnQzMl90KHJ0LmNvZGUoKSkgPDwgMjEpIHwKKysgICAgICAgICAg ICAgICAgICAoKEQgPj4gMSkgJiAweDFGKSA8PCAxNiB8ICgoRCA+PiA2KSAmIDB4M0ZGKSA8PCA2 IHwKKysgICAgICAgICAgICAgICAgICAoMnUgPDwgMSkgfCAoRCAmIDF1KTsKKysgIHJldHVybiB3 cml0ZUluc3QoaW5zdCk7CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gUG93 ZXIgSVNBIHYzLjEgKFBPV0VSMTApIHByZWZpeGVkIGluc3RydWN0aW9ucy4KKysvLworKy8vIExh eW91dDoKKysvLworKy8vICAgUHJlZml4IHdvcmQgKEJFIGJpdCBudW1iZXJpbmcgZnJvbSB0aGUg bWFudWFsOyBMRSBiaXRzIGluIHBhcmVudGhlc2VzKToKKysvLyAgICAgWzAuLjVdICAgcHJpbWFy eSBvcGNvZGUgPSAxICAgKExFIDMxLi4yNikKKysvLyAgICAgWzYuLjddICAgVHlwZTogMDAgPSA4 TFMsIDEwID0gTUxTICAgKExFIDI1Li4yNCkKKysvLyAgICAgWzguLjEwXSAgcmVzZXJ2ZWQgPSAw ICAgKExFIDIzLi4yMSkKKysvLyAgICAgWzExXSAgICAgUjogMSA9IFBDLXJlbGF0aXZlIChSQSBt dXN0IGJlIHIwKSAgIChMRSAyMCkKKysvLyAgICAgWzEyLi4xM10gcmVzZXJ2ZWQgPSAwICAgKExF IDE5Li4xOCkKKysvLyAgICAgWzE0Li4zMV0gZDA6IGhpZ2ggMTggYml0cyBvZiAzNC1iaXQgc2ln bmVkIGltbWVkaWF0ZSAgIChMRSAxNy4uMCkKKysvLworKy8vICAgU3VmZml4IChwYWRkaS9wbGQs IEdQUiB0YXJnZXQpOgorKy8vICAgICBbMC4uNV0gICBzdWZmaXggb3Bjb2RlIChwYWRkaT0xNCwg cGxkPTU3KSAgIChMRSAzMS4uMjYpCisrLy8gICAgIFs2Li4xMF0gIFJUICAgKExFIDI1Li4yMSkK KysvLyAgICAgWzExLi4xNV0gUkEgICAoTEUgMjAuLjE2KQorKy8vICAgICBbMTYuLjMxXSBkMTog bG93IDE2IGJpdHMgb2YgaW1tZWRpYXRlICAgKExFIDE1Li4wKQorKy8vCisrLy8gICBTdWZmaXgg KHBseHYsIFZTUiB0YXJnZXQg4oCUIGhhcyB0aGUgVFggYml0IGF0IHN1ZmZpeCBiaXQgNS9MRSBi aXQgMjYpOgorKy8vICAgICBbMC4uNF0gICBwbHh2IDUtYml0IG9wY29kZSA9IDExMDAxICg9MjUp ICAgKExFIDMxLi4yNykKKysvLyAgICAgWzVdICAgICAgVFggKGhpZ2ggYml0IG9mIDYtYml0IFhU KSAgIChMRSAyNikKKysvLyAgICAgWzYuLjEwXSAgVCAgKGxvdyA1IGJpdHMgb2YgWFQpICAgKExF IDI1Li4yMSkKKysvLyAgICAgWzExLi4xNV0gUkEgICAoTEUgMjAuLjE2KQorKy8vICAgICBbMTYu LjMxXSBkMSAgIChMRSAxNS4uMCkKKysvLworKy8vIFRoZSBwcmVmaXggYW5kIHN1ZmZpeCBvZiBh IHByZWZpeGVkIGluc3RydWN0aW9uIG11c3QgbGllIGluIHRoZSBzYW1lCisrLy8gNjQtYnl0ZSBh bGlnbmVkIGJsb2NrIGF0ICoqcnVudGltZSoqLiBUaGUgSml0Q29kZSBhbGxvY2F0b3Igb25seQor Ky8vIGd1YXJhbnRlZXMgMTYtYnl0ZSBhbGlnbm1lbnQsIHNvIHRoZSBidWZmZXItcmVsYXRpdmUg b2Zmc2V0IGFuZCB0aGUKKysvLyBydW50aW1lIGFkZHJlc3MgY2FuIGRpZmZlciBieSAwLzE2LzMy LzQ4IG1vZCA2NC4gQSBidWZmZXItb25seSBjaGVjaworKy8vIGAoY3VycmVudE9mZnNldCgpICYg NjMpID09IDYwYCBpcyBjb3JyZWN0IHdoZW4gdGhlIGFsbG9jYXRvciBiYXNlIGlzCisrLy8gNjQt YWxpZ25lZCBidXQgbWlzc2VzIHRocmVlIG9mIHRoZSBmb3VyIDE2LWFsaWduZWQgYmFzZSBjbGFz c2VzIOKAlCBwYWQKKysvLyB3aGVuZXZlciBgKGN1cnJlbnRPZmZzZXQoKSAmIDE1KSA9PSAxMmAs IHdoaWNoIGNhdGNoZXMgYWxsIGZvdXIuIFRoZQorKy8vIGVudGVyTm9Qb29sIGd1YXJkIHByZXZl bnRzIHRoZSBjb25zdGFudC1wb29sIGZsdXNoZXIgZnJvbSBpbnNlcnRpbmcKKysvLyBib2RpZXMg YmV0d2VlbiB0aGUgKG9wdGlvbmFsKSBub3AsIHByZWZpeCwgYW5kIHN1ZmZpeC4KKysKKytzdGF0 aWMgdWludDMyX3QgRW5jb2RlUG93ZXIxMFByZWZpeCh1aW50MzJfdCB0eXBlLCBib29sIFIsIHVp bnQzMl90IGQwKSB7CisrICBNT1pfQVNTRVJUKHR5cGUgPT0gMCB8fCB0eXBlID09IDIpOyAgLy8g OExTPTAsIE1MUz0yCisrICBNT1pfQVNTRVJUKGQwIDwgKDF1IDw8IDE4KSk7CisrICByZXR1cm4g KDF1IDw8IDI2KSB8ICh0eXBlIDw8IDI0KSB8ICh1aW50MzJfdChSID8gMSA6IDApIDw8IDIwKSB8 CisrICAgICAgICAgKGQwICYgMHgzRkZGRnUpOworK30KKysKKytzdGF0aWMgdm9pZCBTcGxpdElt bTM0KGludDY0X3QgaW1tMzQsIHVpbnQzMl90KiBkMCwgdWludDMyX3QqIGQxKSB7CisrICBNT1pf QVNTRVJUKGltbTM0ID49IC0oaW50NjRfdCgxKSA8PCAzMykpOworKyAgTU9aX0FTU0VSVChpbW0z NCA8IChpbnQ2NF90KDEpIDw8IDMzKSk7CisrICB1aW50NjRfdCB1ID0gdWludDY0X3QoaW1tMzQp ICYgMHgzRkZGRkZGRkZ1bGw7ICAvLyBsb3cgMzQgYml0cworKyAgKmQwID0gdWludDMyX3QodSA+ PiAxNikgJiAweDNGRkZGdTsgICAgICAgICAgICAgLy8gMTggYml0cworKyAgKmQxID0gdWludDMy X3QodSkgJiAweEZGRkZ1OyAgICAgICAgICAgICAgICAgICAgLy8gMTYgYml0cworK30KKysKKyt2 b2lkIEFzc2VtYmxlcjo6ZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKSB7CisrICBpZiAoKGN1cnJl bnRPZmZzZXQoKSAmIDE1KSA9PSAxMikgeworKyAgICBhc19ub3AoKTsKKysgIH0KKyt9CisrCisr Ly8gcGFkZGkgUlQsIFJBLCBTSSwgUiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgMTQgPSBhZGRpKQor Ky8vICAgUj0wOiBSVCA9IChSQT09MCA/IDAgOiBSQSkgKyBzaWduX2V4dGVuZChTSSwgMzQpCisr Ly8gICBSPTE6IFJUID0gQ0lBKHByZWZpeCkgKyBzaWduX2V4dGVuZChTSSwgMzQpICAgKFJBIG11 c3QgYmUgcjApCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcGFkZGkoUmVnaXN0ZXIgcnQs IFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOworKyAgc3Bl dygicGFkZGlcdCVzLCVzLCVsbGQsJWQiLCBydC5uYW1lKCksIHJhLm5hbWUoKSwgKGxvbmcgbG9u ZylpbW0zNCwKKysgICAgICAgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90IGQwLCBkMTsKKysgIFNw bGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBv d2VyMTBQcmVmaXgoLyp0eXBlPU1MUyovIDIsIFIsIGQwKTsKKysgIHVpbnQzMl90IHN1ZmZpeCA9 ICgxNHUgPDwgMjYpIHwgKHVpbnQzMl90KHJ0LmNvZGUoKSkgPDwgMjEpIHwKKysgICAgICAgICAg ICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8IGQxOworKyAgLy8gUmVzZXJ2 YXRpb24gPSBub3AgKHdvcnN0IGNhc2UpICsgcHJlZml4ICsgc3VmZml4LgorKyAgbV9idWZmZXIu ZW50ZXJOb1Bvb2woMyk7CisrICBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOworKyAgQnVmZmVy T2Zmc2V0IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7CisrICB3cml0ZUluc3Qoc3VmZml4KTsKKysg IG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICByZXR1cm4gYm87CisrfQorKworKy8vIHBsZCBS VCwgRChSQSksIFIgICAoOExTLCBzdWZmaXggb3Bjb2RlIDU3KQorK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX3BsZChSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRf SUYoUiwgcmEgPT0gcjApOworKyAgc3BldygicGxkXHQlcywlbGxkKCVzKSwlZCIsIHJ0Lm5hbWUo KSwgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLAorKyAgICAgICBSID8gMSA6IDApOworKyAg dWludDMyX3QgZDAsIGQxOworKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOworKyAgdWlu dDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9OExTKi8gMCwgUiwgZDAp OworKyAgdWludDMyX3Qgc3VmZml4ID0gKDU3dSA8PCAyNikgfCAodWludDMyX3QocnQuY29kZSgp KSA8PCAyMSkgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwg MTYpIHwgZDE7CisrICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKKysgIGVuc3VyZVByZWZpeGVk QWxpZ25tZW50KCk7CisrICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKKysg IHdyaXRlSW5zdChzdWZmaXgpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgIHJldHVy biBibzsKKyt9CisrCisrLy8gcGx4diBYVCwgRChSQSksIFIgICAoOExTLCA1LWJpdCBzdWZmaXgg b3Bjb2RlIDI1LCBUWCBpbiBzdWZmaXggYml0IDI2KQorKy8vICAgWFQgaXMgNi1iaXQ6IFRYICho aWdoKSB8fCBUIChsb3cgNSkg4oCUIG1hdGNoZXMgbHh2eCBjb252ZW50aW9uLgorK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX3BseHYodWludDhfdCB4dCwgUmVnaXN0ZXIgcmEsIGludDY0X3Qg aW1tMzQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7CisrICBN T1pfQVNTRVJUKHh0IDwgNjQpOworKyAgTU9aX0FTU0VSVF9JRihSLCByYSA9PSByMCk7CisrICBz cGV3KCJwbHh2XHR2cyV1LCVsbGQoJXMpLCVkIiwgeHQsIChsb25nIGxvbmcpaW1tMzQsIHJhLm5h bWUoKSwKKysgICAgICAgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90IGQwLCBkMTsKKysgIFNwbGl0 SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2Vy MTBQcmVmaXgoLyp0eXBlPThMUyovIDAsIFIsIGQwKTsKKysgIHVpbnQzMl90IFQgPSB4dCAmIDB4 MUZ1OworKyAgdWludDMyX3QgVFggPSAoeHQgPj4gNSkgJiAxdTsKKysgIHVpbnQzMl90IHN1ZmZp eCA9ICgyNXUgPDwgMjcpIHwgKFRYIDw8IDI2KSB8IChUIDw8IDIxKSB8CisrICAgICAgICAgICAg ICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKKysgIG1fYnVmZmVyLmVu dGVyTm9Qb29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKKysgIEJ1ZmZlck9m ZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3JpdGVJbnN0KHN1ZmZpeCk7CisrICBt X2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJvOworK30KKysKKysvLyBwbGZkIEZS VCwgRChSQSksIFIgICAoTUxTLCBzdWZmaXggb3Bjb2RlIDUwOyBELWZvcm0tbGlrZSBGUFIgbG9h ZCkKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19wbGZkKEZsb2F0UmVnaXN0ZXIgZnJ0LCBS ZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOworKyAgc3Bldygi cGxmZFx0ZiV1LCVsbGQoJXMpLCVkIiwgdWludDMyX3QoZnJ0LmVuY29kaW5nKCkpLAorKyAgICAg ICAobG9uZyBsb25nKWltbTM0LCByYS5uYW1lKCksIFIgPyAxIDogMCk7CisrICB1aW50MzJfdCBk MCwgZDE7CisrICBTcGxpdEltbTM0KGltbTM0LCAmZDAsICZkMSk7CisrICB1aW50MzJfdCBwcmVm aXggPSBFbmNvZGVQb3dlcjEwUHJlZml4KC8qdHlwZT1NTFMqLyAyLCBSLCBkMCk7CisrICB1aW50 MzJfdCBzdWZmaXggPSAoNTB1IDw8IDI2KSB8ICh1aW50MzJfdChmcnQuZW5jb2RpbmcoKSkgPDwg MjEpIHwKKysgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8 IGQxOworKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMyk7CisrICBlbnN1cmVQcmVmaXhlZEFsaWdu bWVudCgpOworKyAgQnVmZmVyT2Zmc2V0IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7CisrICB3cml0 ZUluc3Qoc3VmZml4KTsKKysgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICByZXR1cm4gYm87 CisrfQorKworKy8vIHBsZnMgRlJULCBEKFJBKSwgUiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgNDg7 IHdpZGVucyBzaW5nbGUg4oaSIGRvdWJsZSBpbiBGUFIpCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfcGxmcyhGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7CisrICBNT1pfQVNT RVJUX0lGKFIsIHJhID09IHIwKTsKKysgIHNwZXcoInBsZnNcdGYldSwlbGxkKCVzKSwlZCIsIHVp bnQzMl90KGZydC5lbmNvZGluZygpKSwKKysgICAgICAgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFt ZSgpLCBSID8gMSA6IDApOworKyAgdWludDMyX3QgZDAsIGQxOworKyAgU3BsaXRJbW0zNChpbW0z NCwgJmQwLCAmZDEpOworKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgv KnR5cGU9TUxTKi8gMiwgUiwgZDApOworKyAgdWludDMyX3Qgc3VmZml4ID0gKDQ4dSA8PCAyNikg fCAodWludDMyX3QoZnJ0LmVuY29kaW5nKCkpIDw8IDIxKSB8CisrICAgICAgICAgICAgICAgICAg ICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKKysgIG1fYnVmZmVyLmVudGVyTm9Q b29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKKysgIEJ1ZmZlck9mZnNldCBi byA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3JpdGVJbnN0KHN1ZmZpeCk7CisrICBtX2J1ZmZl ci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJvOworK30KKysKKysvLyBwc3RkIFJTLCBEKFJB KSwgUiAgICg4TFMsIHN1ZmZpeCBvcGNvZGUgNjEgPSBzdGQgRC1mb3JtKQorK0J1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzX3BzdGQoUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGlt bTM0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgUikgeworKyAgTU9a X0FTU0VSVF9JRihSLCByYSA9PSByMCk7CisrICBzcGV3KCJwc3RkXHQlcywlbGxkKCVzKSwlZCIs IHJzLm5hbWUoKSwgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLAorKyAgICAgICBSID8gMSA6 IDApOworKyAgdWludDMyX3QgZDAsIGQxOworKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEp OworKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9OExTKi8g MCwgUiwgZDApOworKyAgdWludDMyX3Qgc3VmZml4ID0gKDYxdSA8PCAyNikgfCAodWludDMyX3Qo cnMuY29kZSgpKSA8PCAyMSkgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNv ZGUoKSkgPDwgMTYpIHwgZDE7CisrICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKKysgIGVuc3Vy ZVByZWZpeGVkQWxpZ25tZW50KCk7CisrICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJl Zml4KTsKKysgIHdyaXRlSW5zdChzdWZmaXgpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsK KysgIHJldHVybiBibzsKKyt9CisrCisrLy8gcHN0eHYgWFMsIEQoUkEpLCBSICAgKDhMUywgNS1i aXQgc3VmZml4IG9wY29kZSAyNywgU1ggaW4gc3VmZml4IGJpdCAyNikKKysvLyAgIFhTIGlzIDYt Yml0OiBTWCAoaGlnaCkgfHwgUyAobG93IDUpIOKAlCBtYXRjaGVzIHN0eHZ4IGNvbnZlbnRpb24u CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcHN0eHYodWludDhfdCB4cywgUmVnaXN0ZXIg cmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgUikgeworKyAgTU9aX0FTU0VSVCh4cyA8IDY0KTsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEg PT0gcjApOworKyAgc3BldygicHN0eHZcdHZzJXUsJWxsZCglcyksJWQiLCB4cywgKGxvbmcgbG9u ZylpbW0zNCwgcmEubmFtZSgpLAorKyAgICAgICBSID8gMSA6IDApOworKyAgdWludDMyX3QgZDAs IGQxOworKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOworKyAgdWludDMyX3QgcHJlZml4 ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9OExTKi8gMCwgUiwgZDApOworKyAgdWludDMy X3Qgc3ggPSAoeHMgPj4gNSkgJiAxOworKyAgdWludDMyX3QgcyA9IHhzICYgMHgxRjsKKysgIHVp bnQzMl90IHN1ZmZpeCA9ICgyN3UgPDwgMjcpIHwgKHN4IDw8IDI2KSB8IChzIDw8IDIxKSB8Cisr ICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKKysg IG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsK KysgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3JpdGVJbnN0KHN1 ZmZpeCk7CisrICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJvOworK30KKysK KysvLyBwc3RmZCBGUlMsIEQoUkEpLCBSICAgKE1MUywgc3VmZml4IG9wY29kZSA1NCA9IHN0ZmQp CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcHN0ZmQoRmxvYXRSZWdpc3RlciBmcnMsIFJl Z2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOworKyAgc3Bldygi cHN0ZmRcdGYldSwlbGxkKCVzKSwlZCIsIHVpbnQzMl90KGZycy5lbmNvZGluZygpKSwKKysgICAg ICAgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLCBSID8gMSA6IDApOworKyAgdWludDMyX3Qg ZDAsIGQxOworKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOworKyAgdWludDMyX3QgcHJl Zml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9TUxTKi8gMiwgUiwgZDApOworKyAgdWlu dDMyX3Qgc3VmZml4ID0gKDU0dSA8PCAyNikgfCAodWludDMyX3QoZnJzLmVuY29kaW5nKCkpIDw8 IDIxKSB8CisrICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikg fCBkMTsKKysgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGln bm1lbnQoKTsKKysgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3Jp dGVJbnN0KHN1ZmZpeCk7CisrICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJv OworK30KKysKKysvLyBwc3RmcyBGUlMsIEQoUkEpLCBSICAgKE1MUywgc3VmZml4IG9wY29kZSA1 MiA9IHN0ZnMpCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcHN0ZnMoRmxvYXRSZWdpc3Rl ciBmcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwor KyAgc3BldygicHN0ZnNcdGYldSwlbGxkKCVzKSwlZCIsIHVpbnQzMl90KGZycy5lbmNvZGluZygp KSwKKysgICAgICAgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLCBSID8gMSA6IDApOworKyAg dWludDMyX3QgZDAsIGQxOworKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOworKyAgdWlu dDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9TUxTKi8gMiwgUiwgZDAp OworKyAgdWludDMyX3Qgc3VmZml4ID0gKDUydSA8PCAyNikgfCAodWludDMyX3QoZnJzLmVuY29k aW5nKCkpIDw8IDIxKSB8CisrICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgp KSA8PCAxNikgfCBkMTsKKysgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOworKyAgZW5zdXJlUHJl Zml4ZWRBbGlnbm1lbnQoKTsKKysgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgp OworKyAgd3JpdGVJbnN0KHN1ZmZpeCk7CisrICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAg cmV0dXJuIGJvOworK30KKysKKysvLyBQT1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgRXh0cmFjdCBN YXNrLiBSVCAoR1BSKSBnZXRzIHRoZSB3YXNtLXNwZWMKKysvLyBiaXRtYXNrIChvbmUgYml0IHBl ciBsYW5lIE1TQikgZGlyZWN0bHkgaW4gbG93IDE2LzgvNC8yIGJpdHMuIFVJTQorKy8vIGlzIGJh a2VkIGludG8gUFBDX3ZleHRyYWN0e2IsaCx3LGR9bSAoOC85LzEwLzExKS4gQ2FsbGVyIG11c3Qg aGF2ZQorKy8vIHZlcmlmaWVkIEhhc1BPV0VSMTAoKS4KKysjZGVmaW5lIERFRl9WRVhUUkFDVF9N KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lz dGVyIHZyYikgeyAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiXHQlcyx2ciV1IiwgcnQubmFtZSgp LCB1aW50MzJfdCh2cmIuZW5jb2RpbmcoKSAmIDMxKSk7ICAgICAgIFwKKysgICAgcmV0dXJuIHdy aXRlSW5zdChQUENfIyNvcCB8ICh1aW50MzJfdChydC5jb2RlKCkpIDw8IDIxKSB8ICAgICAgICAg ICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCh2cmIuZW5jb2RpbmcoKSkg JiAzMSkgPDwgMTEpKTsgICAgICAgICAgICAgXAorKyAgfQorK0RFRl9WRVhUUkFDVF9NKHZleHRy YWN0Ym0pCisrREVGX1ZFWFRSQUNUX00odmV4dHJhY3RobSkKKytERUZfVkVYVFJBQ1RfTSh2ZXh0 cmFjdHdtKQorK0RFRl9WRVhUUkFDVF9NKHZleHRyYWN0ZG0pCisrI3VuZGVmIERFRl9WRVhUUkFD VF9NCisrCisrLy8gUE9XRVIxMCAoSVNBIDMuMSkgVmVjdG9yIEluc2VydCBXb3JkL0RvdWJsZXdv cmQgZnJvbSBHUFIuIFZYLWZvcm06CisrLy8gVlJUIGF0IGJpdHMgMjEuLjI1LCBVSU0gYXQgYml0 cyAxNi4uMjAsIFJCIGF0IGJpdHMgMTEuLjE1LgorKyNkZWZpbmUgREVGX1ZJTlMob3AsIG1heF91 aW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lzdGVy IHJiLCAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgdWltKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKHVp bSA8PSAobWF4X3VpbSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgc3Bldygjb3AgIlx0dnIldSwlcywldSIsIHVpbnQzMl90KHZydC5lbmNvZGluZygp ICYgMzEpLCByYi5uYW1lKCksICAgICBcCisrICAgICAgICAgdWludDMyX3QodWltKSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1 cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KHZydC5lbmNvZGlu ZygpKSAmIDMxKSA8PCAyMSkgfCAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAg KHVpbnQzMl90KHVpbSkgPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYi5jb2RlKCkpIDw8IDExKSk7ICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKytERUZfVklOUyh2aW5zdywgMTIpCisrREVGX1ZJ TlModmluc2QsIDgpCisrI3VuZGVmIERFRl9WSU5TCisrCisrLy8gUE9XRVIxMCAoSVNBIDMuMSkg VmVjdG9yIEluc2VydCBieXRlL2hhbGZ3b3JkIGZyb20gR1BSIHdpdGgKKysvLyByZWdpc3Rlci1z dXBwbGllZCBieXRlIHBvc2l0aW9uLiBWWC1mb3JtOiBWUlQgYXQgYml0cyAyMS4uMjUsCisrLy8g UkEgYXQgYml0cyAxNi4uMjAsIFJCIGF0IGJpdHMgMTEuLjE1LiAicngiIGlzIHJpZ2h0LWluZGV4 ZWQKKysvLyAoTEUtbmF0dXJhbCDigJQgaW5kZXggMCA9IExTQiBieXRlKS4KKysjZGVmaW5lIERF Rl9WSU5TX1JYKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0 ZXIgdnJ0LCBSZWdpc3RlciByYSwgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciByYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgc3Bldygjb3AgIlx0dnIldSwlcywlcyIsIHVpbnQzMl90KHZydC5lbmNvZGluZygpICYgMzEp LCByYS5uYW1lKCksICAgICBcCisrICAgICAgICAgcmIubmFtZSgpKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3Jp dGVJbnN0KFBQQ18jI29wIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KHZydC5lbmNvZGluZygpKSAm IDMxKSA8PCAyMSkgfCAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQz Ml90KHJhLmNvZGUoKSkgPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdChyYi5jb2RlKCkpIDw8IDExKSk7ICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIH0KKytERUZfVklOU19SWCh2aW5zYnJ4KQorK0RFRl9WSU5TX1JY KHZpbnNocngpCisrI3VuZGVmIERFRl9WSU5TX1JYCisrCisrLy8gUE9XRVI5IChJU0EgMy4wKSBW LWZvcm0gMy1vcGVyYW5kIGluc3RydWN0aW9ucyB3aXRoIFZSVCwgVUlNLCBWUkIgYXQKKysvLyBi aXRzIDIxLi4yNSwgMTYuLjIwLCAxMS4uMTUgcmVzcGVjdGl2ZWx5ICh2aW5zZXJ0e2IsaH0sIHZl eHRyYWN0e3ViLHVofSkuCisrLy8gU2ltZDEyOCBsaXZlcyBpbiBWU1IzMi02MyAoPSBWUjAtMzEp LCBzbyB3ZSBtYXNrIFZSVCBhbmQgVlJCIHRvIHRoZQorKy8vIDUtYml0IFZSIGZpZWxkIHZpYSBg ZW5jb2RpbmcoKSAmIDMxYC4KKysjZGVmaW5lIERFRl9WUlRfVUlNX1ZSQihvcCwgbWF4X3VpbSwg dWltX3N0ZXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIs ICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1aW0pIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQodWltIDw9IChtYXhf dWltKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBN T1pfQVNTRVJUKCh1aW0pICUgKHVpbV9zdGVwKSA9PSAwKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0dnIldSx2ciV1LCV1IiwgdWludDMyX3Qo dnJ0LmVuY29kaW5nKCkgJiAzMSksICAgICAgICAgICAgICBcCisrICAgICAgICAgdWludDMyX3Qo dnJiLmVuY29kaW5nKCkgJiAzMSksIHVpbnQzMl90KHVpbSkpOyAgICAgICAgICAgICAgICAgICAg XAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90 KHZydC5lbmNvZGluZygpKSAmIDMxKSA8PCAyMSkgfCAgICAgICAgICAgICBcCisrICAgICAgICAg ICAgICAgICAgICAgKHVpbnQzMl90KHVpbSkgPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QodnJiLmVuY29kaW5n KCkpICYgMzEpIDw8IDExKSk7ICAgICAgICAgICAgIFwKKysgIH0KKytERUZfVlJUX1VJTV9WUkIo dmluc2VydGIsIDE1LCAxKQorK0RFRl9WUlRfVUlNX1ZSQih2aW5zZXJ0aCwgMTQsIDIpCisrREVG X1ZSVF9VSU1fVlJCKHZleHRyYWN0dWIsIDE1LCAxKQorK0RFRl9WUlRfVUlNX1ZSQih2ZXh0cmFj dHVoLCAxNCwgMikKKysjdW5kZWYgREVGX1ZSVF9VSU1fVlJCCisrCisrLy8gVk1YIGJpbmFyeSBW WC1mb3JtIHBhY2svbWVyZ2UgKHJlLXVzZSBERUZfVk1YX1ZWViBwYXR0ZXJuKS4KKysjZGVmaW5l IERFRl9WTVhfVlZWKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpIHsgXAorKyAgICBNT1pfQVNTRVJUKHZydCA8 IDMyICYmIHZyYSA8IDMyICYmIHZyYiA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgc3Bldygjb3AgIlx0dnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2 cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEpOyAgICAgICAgXAorKyAgfQorK0RFRl9W TVhfVlZWKHZwa3Noc3MpCisrREVGX1ZNWF9WVlYodnBrc3dzcykgREVGX1ZNWF9WVlYodnBrc2h1 cykgREVGX1ZNWF9WVlYodnBrc3d1cykKKysgICAgREVGX1ZNWF9WVlYodm1yZ2hiKQorKyAgICAg ICAgREVGX1ZNWF9WVlYodm1yZ2hoKSBERUZfVk1YX1ZWVih2bXJnaHcpIERFRl9WTVhfVlZWKHZt cmdsYikKKysgICAgICAgICAgICBERUZfVk1YX1ZWVih2bXJnbGgpIERFRl9WTVhfVlZWKHZtcmds dykgREVGX1ZNWF9WVlYodm11bGVzYikKKysgICAgICAgICAgICAgICAgREVGX1ZNWF9WVlYodm11 bG9zYikgREVGX1ZNWF9WVlYodm11bGV1YikgREVGX1ZNWF9WVlYodm11bG91YikKKysgICAgICAg ICAgICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxlc2gpIERFRl9WTVhfVlZWKHZtdWxvc2gpCisr ICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZNWF9WVlYodm11bGV1aCkgREVGX1ZNWF9WVlYo dm11bG91aCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZNWF9WVlYodm11bGVz dykgREVGX1ZNWF9WVlYodm11bG9zdykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERFRl9WTVhfVlZWKHZtdWxldXcpIERFRl9WTVhfVlZWKHZtdWxvdXcpCisrI3VuZGVmIERFRl9W TVhfVlZWCisrCisrICAgIC8vIHZwZXJtIFZBLWZvcm06ICg0PDwyNikgfCBWUlQ8PDIxIHwgVlJB PDwxNiB8IFZSQjw8MTEgfCBWUkM8PDYgfCBYTworKyAgICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc192cGVybSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYykgeworKyAgTU9aX0FT U0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7CisrICBz cGV3KCJ2cGVybVx0dnIlZCx2ciVkLHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7Cisr ICByZXR1cm4gd3JpdGVJbnN0KFBQQ192cGVybSB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZy YiA8PCAxMSB8IHZyYyA8PCA2KTsKKyt9CisrCisrLy8gVkEtZm9ybSB0ZXJuYXJ5IFZNWDogKDQ8 PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2IHwgVlJCPDwxMSB8IFZSQzw8NiB8CisrLy8gWE8oNi1i aXQpCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdm1sYWRkdWhtKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QgdnJjKSB7CisrICBNT1pfQVNTRVJUKHZydCA8IDMyICYmIHZyYSA8IDMy ICYmIHZyYiA8IDMyICYmIHZyYyA8IDMyKTsKKysgIHNwZXcoInZtbGFkZHVobVx0dnIlZCx2ciVk LHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQ Q192bWxhZGR1aG0gfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfAorKyAgICAg ICAgICAgICAgICAgICB2cmMgPDwgNik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX3ZtaHJhZGRzaHModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdnJjKSB7CisrICBN T1pfQVNTRVJUKHZydCA8IDMyICYmIHZyYSA8IDMyICYmIHZyYiA8IDMyICYmIHZyYyA8IDMyKTsK KysgIHNwZXcoInZtaHJhZGRzaHNcdHZyJWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJi LCB2cmMpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1ocmFkZHNocyB8IHZydCA8PCAyMSB8 IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8CisrICAgICAgICAgICAgICAgICAgIHZyYyA8PCA2KTsK Kyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdm1zdW1zaG0odWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IHZyYykgeworKyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAz MiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7CisrICBzcGV3KCJ2bXN1bXNobVx0dnIlZCx2ciVk LHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQ Q192bXN1bXNobSB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8CisrICAgICAg ICAgICAgICAgICAgIHZyYyA8PCA2KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfdm1zdW11aG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYykgeworKyAgTU9aX0FT U0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7CisrICBz cGV3KCJ2bXN1bXVobVx0dnIlZCx2ciVkLHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7 CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ192bXN1bXVobSB8IHZydCA8PCAyMSB8IHZyYSA8PCAx NiB8IHZyYiA8PCAxMSB8CisrICAgICAgICAgICAgICAgICAgIHZyYyA8PCA2KTsKKyt9CisrCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnNwbHRpc2IodWludDhfdCB2cnQsIGludDhfdCBz aW1tNSkgeworKyAgTU9aX0FTU0VSVCh2cnQgPCAzMik7CisrICBNT1pfQVNTRVJUKHNpbW01ID49 IC0xNiAmJiBzaW1tNSA8PSAxNSk7CisrICBzcGV3KCJ2c3BsdGlzYlx0dnIlZCwlZCIsIHZydCwg c2ltbTUpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNwbHRpc2IgfCB1aW50MzJfdCh2cnQp IDw8IDIxIHwKKysgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHNpbW01KSAmIDB4MUYpIDw8 IDE2KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnNwbHRpc2godWludDhf dCB2cnQsIGludDhfdCBzaW1tNSkgeworKyAgTU9aX0FTU0VSVCh2cnQgPCAzMik7CisrICBNT1pf QVNTRVJUKHNpbW01ID49IC0xNiAmJiBzaW1tNSA8PSAxNSk7CisrICBzcGV3KCJ2c3BsdGlzaFx0 dnIlZCwlZCIsIHZydCwgc2ltbTUpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNwbHRpc2gg fCB1aW50MzJfdCh2cnQpIDw8IDIxIHwKKysgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHNp bW01KSAmIDB4MUYpIDw8IDE2KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf dnNwbHRpc3codWludDhfdCB2cnQsIGludDhfdCBzaW1tNSkgeworKyAgTU9aX0FTU0VSVCh2cnQg PCAzMik7CisrICBNT1pfQVNTRVJUKHNpbW01ID49IC0xNiAmJiBzaW1tNSA8PSAxNSk7CisrICBz cGV3KCJ2c3BsdGlzd1x0dnIlZCwlZCIsIHZydCwgc2ltbTUpOworKyAgcmV0dXJuIHdyaXRlSW5z dChQUENfdnNwbHRpc3cgfCB1aW50MzJfdCh2cnQpIDw8IDIxIHwKKysgICAgICAgICAgICAgICAg ICAgKHVpbnQzMl90KHNpbW01KSAmIDB4MUYpIDw8IDE2KTsKKyt9CisrCisrLy8gLS0tIENvbnZl bmllbmNlIHBzZXVkby1pbnN0cnVjdGlvbnMgLS0tCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6eHNfdHJhcCgpIHsKKysgIHNwZXcoInRyYXAgQCAlMDh4IiwgY3VycmVudE9mZnNldCgpKTsK KysgIHJldHVybiB3cml0ZUluc3QoUFBDX3RyYXApOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjp4c190cmFwX3RhZ2dlZChUcmFwVGFnIHRhZykgeworKyAgdWludDMyX3QgdHYgPSBQ UENfdHJhcCB8ICgodWludDhfdCl0YWcgPDwgMTYpIHwgKCh1aW50OF90KXRhZyA8PCAxMSk7Cisr ICBzcGV3KCJ0cmFwIEAgJTA4eCA7IE1BUksgJWQgJTA4eCIsIGN1cnJlbnRPZmZzZXQoKSwgKHVp bnQ4X3QpdGFnLCB0dik7CisrICByZXR1cm4gd3JpdGVJbnN0KHR2KTsKKyt9CisrCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXIoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7CisrICBy ZXR1cm4gYXNfb3JfKHJkLCByYSwgcmEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojp4c19tdGN0cihSZWdpc3RlciByYSkgeworKyAgcmV0dXJuIGFzX210c3ByKChTUFJlZ2lzdGVy SUQpc3ByX2N0ciwgcmEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tdGxy KFJlZ2lzdGVyIHJhKSB7CisrICByZXR1cm4gYXNfbXRzcHIoKFNQUmVnaXN0ZXJJRClzcHJfbHIs IHJhKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbWZscihSZWdpc3RlciBy ZCkgeworKyAgcmV0dXJuIGFzX21mc3ByKHJkLCAoU1BSZWdpc3RlcklEKXNwcl9scik7CisrfQor KworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX210Y3IoUmVnaXN0ZXIgcnMpIHsgcmV0dXJu IGFzX210Y3JmKDB4ZmYsIHJzKTsgfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX21m eGVyKFJlZ2lzdGVyIHJhKSB7CisrICByZXR1cm4gYXNfbWZzcHIocmEsIChTUFJlZ2lzdGVySUQp c3ByX3hlcik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX210eGVyKFJlZ2lz dGVyIHJhKSB7CisrICByZXR1cm4gYXNfbXRzcHIoKFNQUmVnaXN0ZXJJRClzcHJfeGVyLCByYSk7 CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX2xpKFJlZ2lzdGVyIHJkLCBpbnQx Nl90IGltKSB7CisrICByZXR1cm4gYXNfYWRkaShyZCwgcjAsIGltLCB0cnVlKTsKKyt9CisrCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbGlzKFJlZ2lzdGVyIHJkLCBpbnQxNl90IGltKSB7 CisrICByZXR1cm4gYXNfYWRkaXMocmQsIHIwLCBpbSwgdHJ1ZSk7CisrfQorKworK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6Onhfc3ViaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3Qg aW0pIHsKKysgIHJldHVybiBhc19hZGRpKHJkLCByYSwgLWltKTsKKyt9CisrCisrQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6eF9ub3QoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7CisrICByZXR1 cm4gYXNfbm9yKHJkLCByYSwgcmEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4 X3Nsd2koUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbikgeworKyAgTU9aX0FTU0VSVChu ID49IDAgJiYgbiA8IDMyKTsKKysgIHJldHVybiBhc19ybHdpbm0ocmQsIHJzLCBuLCAwLCAzMSAt IG4pOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X3NsZGkoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJzLCBpbnQgbikgeworKyAgcmV0dXJuIGFzX3JsZGljcihyZCwgcnMsIG4sIDYz IC0gbik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6Onhfc3J3aShSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcnMsIGludCBuKSB7CisrICBNT1pfQVNTRVJUKG4gPj0gMCAmJiBuIDwgMzIp OworKyAgaWYgKG4gPT0gMCkgeworKyAgICByZXR1cm4gYXNfcmx3aW5tKHJkLCBycywgMCwgMCwg MzEpOworKyAgfQorKyAgcmV0dXJuIGFzX3Jsd2lubShyZCwgcnMsIDMyIC0gbiwgbiwgMzEpOwor K30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X3NyZGkoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCBpbnQgbikgeworKyAgTU9aX0FTU0VSVChuID49IDAgJiYgbiA8IDY0KTsKKysgIGlm IChuID09IDApIHsKKysgICAgcmV0dXJuIGFzX29yXyhyZCwgcnMsIHJzKTsKKysgIH0KKysgIHJl dHVybiBhc19ybGRpY2wocmQsIHJzLCA2NCAtIG4sIG4pOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjp4X2JpdF92YWx1ZShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIHVuc2lnbmVk IGJpdCkgeworKyAgcmV0dXJuIGFzX3Jsd2lubShyZCwgcnMsIGJpdCArIDEsIDMxLCAzMSk7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhfaW5zZXJ0Yml0czBfMTUoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJzKSB7CisrICByZXR1cm4gYXNfcmx3aW1pKHJkLCBycywgMCwgMTYsIDMx KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9zcl9tdWxsaShSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIGFzX3NyYWRpKHJkLCByYSwgNjMpOwor KyAgcmV0dXJuIGFzX211bGxpKHJkLCByZCwgaW0pOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6 YXNfYnJlYWsodWludDMyX3QgY29kZSkgeworKyAgc3BldygiYnJlYWtcdCVkIiwgY29kZSk7Cisr ICB3cml0ZUluc3QoUFBDX3RyYXApOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBM YWJlbCBiaW5kaW5nLCByZXRhcmdldCwgYW5kIGNvZGUgbGFiZWwgcHJvY2Vzc2luZy4KKysvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysKKysvLyBGb3J3YXJkLWRlY2xhcmVkIHNoYXBlIGhlbHBlcnM7IGZ1 bGwgZGVmaW5pdGlvbnMgYW5kIHRoZSBsYXlvdXQKKysvLyBjb21tZW50YXJ5IGxpdmUgd2l0aCB0 aGUgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMgc2VjdGlvbiBiZWxvdy4KKytzdGF0aWMgYm9vbCBJ c0FkZHBjaXNMb2FkNjRTdGFuemEodWludDMyX3QgZW5jMCk7Cisrc3RhdGljIHVpbnQ4X3QgTG9h ZDY0U3RhbnphRGVzdFJlZyhJbnN0cnVjdGlvbiogaW5zdDApOworKworK0luc3RJbW0gQXNzZW1i bGVyOjppbnZlcnRCcmFuY2goSW5zdEltbSBicmFuY2gsIEJPZmZJbW0xNiBza2lwT2Zmc2V0KSB7 CisrICAvLyBGbGlwIHRoZSBCTyBjb25kaXRpb24tdHJ1ZS9jb25kaXRpb24tZmFsc2UgYml0IChi aXQgMjQpLgorKyAgdWludDMyX3QgZGF0YSA9IGJyYW5jaC5lbmNvZGUoKTsKKysgIGRhdGEgPSAo ZGF0YSBeIDB4MDEwMDAwMDApICYgMHhGRkZGMDAwMzsKKysgIGRhdGEgfD0gc2tpcE9mZnNldC5l bmNvZGUoKTsKKysgIGJyYW5jaC5zZXREYXRhKGRhdGEpOworKyAgcmV0dXJuIGJyYW5jaDsKKyt9 CisrCisrdm9pZCBBc3NlbWJsZXI6OmJpbmQoSW5zdEltbSogaW5zdCwgdWludHB0cl90IGJyYW5j aCwgdWludHB0cl90IHRhcmdldCkgeworKyAgaW50cHRyX3Qgb2Zmc2V0ID0gdGFyZ2V0IC0gYnJh bmNoOworKyAgSW5zdHJ1Y3Rpb24qIGkwID0gKEluc3RydWN0aW9uKilpbnN0OworKworKyAgaWYg KGkwLT5uZXh0KCktPmVuY29kZSgpID09IFBQQ19iY2xfYWx3YXlzX3BsdXM0IHx8CisrICAgICAg SXNBZGRwY2lzTG9hZDY0U3RhbnphKGkwLT5lbmNvZGUoKSkpIHsKKysgICAgLy8gUHJlLWV4aXN0 aW5nIGxvbmcgc3RhbnphLCBlaXRoZXIgUDggKG1mbHIgKyBiY2wgbWFya2VyIGF0IFsxXSkgb3IK KysgICAgLy8gUDkrIChhZGRwY2lzIGF0IFswXTsgbWFqb3Igb3Bjb2RlIDE5KS4gRWl0aGVyIHdh eSwganVzdCByZWdpc3RlcgorKyAgICAvLyB0aGUgbG9uZyBqdW1wIOKAlCB0aGUgc3RhbnphJ3Mg LnF1YWQgYXQgWzYuLjddIGdldHMgcGF0Y2hlZCBsYXRlcgorKyAgICAvLyB2aWEgVXBkYXRlTG9h ZDY0VmFsdWUuCisrICAgIGFkZExvbmdKdW1wKEJ1ZmZlck9mZnNldChicmFuY2gpLCBCdWZmZXJP ZmZzZXQodGFyZ2V0KSk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGlmIChpMC0+aXNPcGNv ZGUoKHVpbnQzMl90KVBQQ190dykpIHsKKysgICAgLy8gVGFnZ2VkIHRyYXAgc3RhbnphLiBUaGUg dGFnIHRlbGxzIHVzIHdoaWNoIGJyYW5jaCB0eXBlIHdhcyByZXNlcnZlZC4KKysgICAgVHJhcFRh ZyB0YWcgPSAoVHJhcFRhZylpbnN0LT50cmFwdGFnKCk7CisrICAgIEluc3RydWN0aW9uKiBpMSA9 IGkwLT5uZXh0KCk7CisrICAgIEluc3RydWN0aW9uKiBpMiA9IGkxLT5uZXh0KCk7CisrICAgIElu c3RydWN0aW9uKiBpMyA9IGkyLT5uZXh0KCk7CisrICAgIEluc3RydWN0aW9uKiBpNCA9IGkzLT5u ZXh0KCk7CisrICAgIEluc3RydWN0aW9uKiBpNSA9IGk0LT5uZXh0KCk7CisrICAgIEluc3RydWN0 aW9uKiBpNiA9IGk1LT5uZXh0KCk7CisrICAgIEluc3RydWN0aW9uKiBpNyA9IGk2LT5uZXh0KCk7 CisrICAgIEluc3RydWN0aW9uKiBpOCA9IGk3LT5uZXh0KCk7CisrICAgIEluc3RydWN0aW9uKiBp OSA9IGk4LT5uZXh0KCk7CisrCisrICAgIHN3aXRjaCAodGFnKSB7CisrICAgICAgY2FzZSBCQ1Rh ZzogeworKyAgICAgICAgLy8gaW5zdFstMV0gaXMgdGhlIG9yaWdpbmFsIGJjIGluc3RydWN0aW9u LgorKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGJjID0gaTAgLSAxOworKyAgICAgICAgLy8gVHJ5IHNo b3J0IGJjIChvZmZzZXQgKyA0IGJlY2F1c2UgYmMgaXMgb25lIGluc3RydWN0aW9uIGJlZm9yZSB0 dykuCisrICAgICAgICBpZiAoQk9mZkltbTE2OjpJc0luUmFuZ2Uob2Zmc2V0ICsgKGludHB0cl90 KXNpemVvZih1aW50MzJfdCkpKSB7CisrICAgICAgICAgIGJjLT5zZXREYXRhKCgoYmMtPmVuY29k ZSgpIF4gMHgwMTAwMDAwMCkgJiAweEZGRkYwMDAzKSB8CisrICAgICAgICAgICAgICAgICAgICAg IEJPZmZJbW0xNihvZmZzZXQgKyBzaXplb2YodWludDMyX3QpKS5lbmNvZGUoKSk7CisrICAgICAg ICAgIGkwLT5tYWtlTm9wKCk7CisrICAgICAgICAgIGkxLT5tYWtlTm9wKCk7CisrICAgICAgICAg IGkyLT5tYWtlTm9wKCk7CisrICAgICAgICAgIGkzLT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk0 LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk1LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk2LT5t YWtlTm9wKCk7CisrICAgICAgICAgIGk3LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk4LT5tYWtl Tm9wKCk7CisrICAgICAgICAgIGk5LT5tYWtlTm9wKCk7CisrICAgICAgICAgIHJldHVybjsKKysg ICAgICAgIH0KKysgICAgICAgIC8vIFRyeSBzaG9ydCBiICh1bmNvbmRpdGlvbmFsKS4KKysgICAg ICAgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShvZmZzZXQpKSB7CisrICAgICAgICAgIGkwLT5z ZXREYXRhKFBQQ19iIHwgSk9mZkltbTI2KG9mZnNldCkuZW5jb2RlKCkpOworKyAgICAgICAgICBp MS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpMi0+bWFrZU5vcCgpOworKyAgICAgICAgICBpMy0+ bWFrZU5vcCgpOworKyAgICAgICAgICBpNC0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNS0+bWFr ZU5vcCgpOworKyAgICAgICAgICBpNi0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNy0+bWFrZU5v cCgpOworKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOworKyAgICAgICAgICBpOS0+bWFrZU5vcCgp OworKyAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAgICAvLyBMb25nOiBXcml0 ZUxvYWQ2NCB0byBTZWNvbmRTY3JhdGNoUmVnICsgbXRjdHIgKyBiY3RyLgorKyAgICAgICAgYWRk TG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGJyYW5jaCksIEJ1ZmZlck9mZnNldCh0YXJnZXQpKTsKKysg ICAgICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGkwLCBTZWNvbmRTY3JhdGNoUmVnLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7 CisrICAgICAgICBpOC0+bWFrZU9wX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICAgICAg aTktPm1ha2VPcF9iY3RyKCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2Fz ZSBDYWxsVGFnOiB7CisrICAgICAgICAvLyBGb3IgY2FsbHMsIHRoZSBhY3R1YWwgY2FsbCBpbnN0 cnVjdGlvbiBnb2VzIGF0IGluc3RbOV0gYW5kCisrICAgICAgICAvLyB0aGUgcmV0dXJuIGFkZHJl c3MgbXVzdCBiZSBhZnRlciB0aGUgc3RhbnphLgorKyAgICAgICAgaW50cHRyX3QgY2FsbE9mZnNl dCA9IG9mZnNldCAtIDkgKiAoaW50cHRyX3Qpc2l6ZW9mKHVpbnQzMl90KTsKKysgICAgICAgIGlm IChKT2ZmSW1tMjY6OklzSW5SYW5nZShjYWxsT2Zmc2V0KSkgeworKyAgICAgICAgICBpMC0+bWFr ZU5vcCgpOworKyAgICAgICAgICBpMS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpMi0+bWFrZU5v cCgpOworKyAgICAgICAgICBpMy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNC0+bWFrZU5vcCgp OworKyAgICAgICAgICBpNS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNi0+bWFrZU5vcCgpOwor KyAgICAgICAgICBpNy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOworKyAg ICAgICAgICBpOS0+c2V0RGF0YShQUENfYiB8IEpPZmZJbW0yNihjYWxsT2Zmc2V0KS5lbmNvZGUo KSB8IExpbmtCKTsKKysgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8g TG9uZzogV3JpdGVMb2FkNjQgdG8gU2Vjb25kU2NyYXRjaFJlZyArIG10Y3RyICsgYmN0cmwuCisr ICAgICAgICBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQoYnJhbmNoKSwgQnVmZmVyT2Zmc2V0KHRh cmdldCkpOworKyAgICAgICAgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaTAsIFNlY29uZFNjcmF0 Y2hSZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbEJhc2U6OklOVkFM SURfT0ZGU0VUKTsKKysgICAgICAgIGk4LT5tYWtlT3BfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7 CisrICAgICAgICBpOS0+bWFrZU9wX2JjdHIoTGlua0IpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgfQorKyAgICAgIGNhc2UgQlRhZzogeworKyAgICAgICAgaWYgKEpPZmZJbW0yNjo6SXNJblJh bmdlKG9mZnNldCkpIHsKKysgICAgICAgICAgaTAtPnNldERhdGEoUFBDX2IgfCBKT2ZmSW1tMjYo b2Zmc2V0KS5lbmNvZGUoKSk7CisrICAgICAgICAgIGkxLT5tYWtlTm9wKCk7CisrICAgICAgICAg IGkyLT5tYWtlTm9wKCk7CisrICAgICAgICAgIGkzLT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk0 LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk1LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk2LT5t YWtlTm9wKCk7CisrICAgICAgICAgIGk3LT5tYWtlTm9wKCk7CisrICAgICAgICAgIGk4LT5tYWtl Tm9wKCk7CisrICAgICAgICAgIGk5LT5tYWtlTm9wKCk7CisrICAgICAgICAgIHJldHVybjsKKysg ICAgICAgIH0KKysgICAgICAgIC8vIExvbmc6IFdyaXRlTG9hZDY0IHRvIFNlY29uZFNjcmF0Y2hS ZWcgKyBtdGN0ciArIGJjdHIuCisrICAgICAgICBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQoYnJh bmNoKSwgQnVmZmVyT2Zmc2V0KHRhcmdldCkpOworKyAgICAgICAgV3JpdGVMb2FkNjRJbnN0cnVj dGlvbnMoaTAsIFNlY29uZFNjcmF0Y2hSZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysgICAgICAgIGk4LT5tYWtlT3BfbXRj dHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgICAgICBpOS0+bWFrZU9wX2JjdHIoKTsKKysgICAg ICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNI KCJVbmV4cGVjdGVkIFRyYXBUYWciKTsKKysgICAgfQorKyAgICByZXR1cm47CisrICB9CisrCisr ICBpZiAoaTAtPmlzT3Bjb2RlKFBQQ19iKSkgeworKyAgICAvLyBTaG9ydCB1bmNvbmRpdGlvbmFs IGJyYW5jaCDigJQgc2V0IG9mZnNldCwgbm9wIG5leHQtaW4tY2hhaW4gc2xvdC4KKysgICAgTU9a X0FTU0VSVChKT2ZmSW1tMjY6OklzSW5SYW5nZShvZmZzZXQpKTsKKysgICAgaTAtPnNldERhdGEo KGkwLT5lbmNvZGUoKSAmIH4weDAzRkZGRkZDKSB8IEpPZmZJbW0yNihvZmZzZXQpLmVuY29kZSgp KTsKKysgICAgaTAtPm5leHQoKS0+bWFrZU5vcCgpOworKyAgICByZXR1cm47CisrICB9CisrCisr ICBpZiAoaTAtPmlzT3Bjb2RlKFBQQ19iYykpIHsKKysgICAgLy8gU2hvcnQgY29uZGl0aW9uYWwg YnJhbmNoIOKAlCBwcmVzZXJ2ZSB1cHBlciAxNiBiaXRzLCBzZXQgb2Zmc2V0LgorKyAgICBNT1pf QVNTRVJUKEJPZmZJbW0xNjo6SXNJblJhbmdlKG9mZnNldCkpOworKyAgICBpMC0+c2V0RGF0YSgo aTAtPmVuY29kZSgpICYgMHhGRkZGMDAwMykgfCBCT2ZmSW1tMTYob2Zmc2V0KS5lbmNvZGUoKSk7 CisrICAgIGkwLT5uZXh0KCktPm1ha2VOb3AoKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAg TU9aX0NSQVNIKCJVbmV4cGVjdGVkIGluc3RydWN0aW9uIGluIGJpbmQiKTsKKyt9CisrCisrdm9p ZCBBc3NlbWJsZXI6OmJpbmQoTGFiZWwqIGxhYmVsLCBCdWZmZXJPZmZzZXQgYm9mZikgeworKyAg aWYgKGxhYmVsLT51c2VkKCkpIHsKKysgICAgYm9vbCBtb3JlOworKyAgICBCdWZmZXJPZmZzZXQg YihsYWJlbCk7CisrICAgIGRvIHsKKysgICAgICBCdWZmZXJPZmZzZXQgbmV4dDsKKysgICAgICBJ bnN0SW1tKiBpbnN0ID0gKEluc3RJbW0qKWVkaXRTcmMoYik7CisrICAgICAgSW5zdHJ1Y3Rpb24q IGkxID0gKChJbnN0cnVjdGlvbiopaW5zdCktPm5leHQoKTsKKysgICAgICBtb3JlID0gKGkxLT5l bmNvZGUoKSAhPSBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysgICAgICBpZiAobW9yZSkg eworKyAgICAgICAgbmV4dCA9IEJ1ZmZlck9mZnNldChpMS0+ZW5jb2RlKCkpOworKyAgICAgIH0K KysgICAgICBiaW5kKGluc3QsIGIuZ2V0T2Zmc2V0KCksIGJvZmYuZ2V0T2Zmc2V0KCkpOworKyAg ICAgIGIgPSBuZXh0OworKyAgICB9IHdoaWxlIChtb3JlKTsKKysgIH0KKysgIGxhYmVsLT5iaW5k KGJvZmYuZ2V0T2Zmc2V0KCkpOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6cmV0YXJnZXQoTGFi ZWwqIGxhYmVsLCBMYWJlbCogdGFyZ2V0KSB7CisrICBzcGV3KCJyZXRhcmdldCIpOworKyAgaWYg KGxhYmVsLT51c2VkKCkgJiYgIW9vbSgpKSB7CisrICAgIGlmICh0YXJnZXQtPmJvdW5kKCkpIHsK KysgICAgICBiaW5kKGxhYmVsLCBCdWZmZXJPZmZzZXQodGFyZ2V0KSk7CisrICAgIH0gZWxzZSBp ZiAodGFyZ2V0LT51c2VkKCkpIHsKKysgICAgICAvLyBQcmVwZW5kIGxhYmVsJ3MgdXNlIGNoYWlu IHRvIHRhcmdldCdzIHVzZSBjaGFpbi4KKysgICAgICBCdWZmZXJPZmZzZXQgYihsYWJlbCk7Cisr ICAgICAgQnVmZmVyT2Zmc2V0IG5leHQ7CisrICAgICAgZG8geworKyAgICAgICAgSW5zdHJ1Y3Rp b24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWVkaXRTcmMoYik7CisrICAgICAgICBJbnN0cnVjdGlv biogaTEgPSBpbnN0LT5uZXh0KCk7CisrICAgICAgICBpZiAoaTEtPmVuY29kZSgpICE9IExhYmVs QmFzZTo6SU5WQUxJRF9PRkZTRVQpIHsKKysgICAgICAgICAgbmV4dCA9IEJ1ZmZlck9mZnNldChp MS0+ZW5jb2RlKCkpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgLy8gRW5kIG9mIGxh YmVsJ3MgY2hhaW4g4oCUIGxpbmsgdG8gdGFyZ2V0J3MgaGVhZC4KKysgICAgICAgICAgaTEtPnNl dERhdGEodGFyZ2V0LT5vZmZzZXQoKSk7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQor KyAgICAgICAgYiA9IG5leHQ7CisrICAgICAgfSB3aGlsZSAodHJ1ZSk7CisrICAgIH0KKysgICAg Ly8gVHJhbnNmZXIgbGFiZWwncyB1c2UgbGlzdCB0byB0YXJnZXQuCisrICAgIGlmICghdGFyZ2V0 LT5ib3VuZCgpKSB7CisrICAgICAgdGFyZ2V0LT51c2UobGFiZWwtPm9mZnNldCgpKTsKKysgICAg fQorKyAgfQorKyAgbGFiZWwtPnJlc2V0KCk7CisrfQorKworK3ZvaWQgQXNzZW1ibGVyOjpwcm9j ZXNzQ29kZUxhYmVscyh1aW50OF90KiByYXdDb2RlKSB7CisrICBmb3IgKGNvbnN0IENvZGVMYWJl bCYgbGFiZWwgOiBjb2RlTGFiZWxzXykgeworKyAgICBCaW5kKHJhd0NvZGUsIGxhYmVsKTsKKysg IH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTG9hZDY0IGluc3RydWN0aW9uIHNl cXVlbmNlICg4IHNsb3RzLCBsaXRlcmFsIHBvb2wgZm9ybWF0KToKKysvLyAgIFswXSBtZmxyIHIw ICAgICAgICAgICAg4oCUIHNhdmUgTFIKKysvLyAgIFsxXSBiY2wgMjAsMCwuKzQgICAgICDigJQg TFIgPSBhZGRyZXNzIG9mIFsyXQorKy8vICAgWzJdIG1mbHIgckQgICAgICAgICAgICDigJQgckQg PSBhZGRyZXNzIG9mIFsyXQorKy8vICAgWzNdIG10bHIgcjAgICAgICAgICAgICDigJQgcmVzdG9y ZSBMUgorKy8vICAgWzRdIGxkIHJELCAxNihyRCkgICAgICDigJQgbG9hZCBmcm9tIFs2Li43XSAo b2Zmc2V0ID0gMjQgLSA4ID0gMTYpCisrLy8gICBbNV0gYiAuKzEyICAgICAgICAgICAgIOKAlCBz a2lwIGRhdGEKKysvLyAgIFs2Li43XSAucXVhZCBWQUxVRSAgICAg4oCUIDgtYnl0ZSBkYXRhCisr Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gQ29uc3RhbnQg cG9vbCBjYWxsYmFja3MgKHJlcXVpcmVkIGJ5IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBv b2xzKS4KKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2Vt Ymxlcjo6SW5zZXJ0SW5kZXhJbnRvVGFnKHVpbnQ4X3QqIGxvYWQsIHVpbnQzMl90IGluZGV4KSB7 CisrICAvLyBTdGFzaCB0aGUgcG9vbCBlbnRyeSBpbmRleCBpbiB0aGUgaGludCB3b3JkJ3MgbG93 IDE2IGJpdHM7IHRoZSBoaWdoCisrICAvLyBiaXRzIGNhcnJ5IHRoZSBkZXN0IHJlZyBhbmQgbG9h ZCB0eXBlLCBjb25zdW1lZCBieQorKyAgLy8gUGF0Y2hDb25zdGFudFBvb2xMb2FkIHdoZW4gdGhl IHBvb2wgaXMgcmVzb2x2ZWQuCisrICB1aW50MzJfdCogaW5zdCA9ICh1aW50MzJfdCopbG9hZDsK KysgICppbnN0ID0gKCppbnN0ICYgMHhGRkZGMDAwMCkgfCAoaW5kZXggJiAweEZGRkYpOworK30K KysKKysvKiBzdGF0aWMgKi8KKytib29sIEFzc2VtYmxlcjo6UGF0Y2hDb25zdGFudFBvb2xMb2Fk KHZvaWQqIGxvYWRBZGRyLCB2b2lkKiBjb25zdFBvb2xBZGRyKSB7CisrICAvLyBSZXdyaXRlIHBs YWNlaG9sZGVyIGluc3RydWN0aW9ucyB3aXRoIGEgcG9vbCBsb2FkIHNlcXVlbmNlLgorKyAgLy8g SGludCB3b3JkIGxheW91dCAoc2V0IGJ5IGxvYWRGcm9tUG9vbEZsb2F0NjQgLyBsb2FkRnJvbVBv b2xGbG9hdDMyIC8KKysgIC8vIGxvYWRGcm9tUG9vbFNpbWQxMjgpOgorKyAgLy8gICBiaXRzIDAt MTU6ICBwb29sIGVudHJ5IGluZGV4CisrICAvLyAgIGJpdHMgMTYtMjA6IGRlc3RpbmF0aW9uIHJl Z2lzdGVyIChGUFIgZW5jb2RpbmcpCisrICAvLyAgIGJpdHMgMjEtMjI6IGxvYWQgdHlwZSAoUG9v bExvYWRGUFI2NCwgUG9vbExvYWRTaW1kMTI4LCBQb29sTG9hZEZQUjMyKQorKyAgLy8gICBiaXRz IDI4LTMxOiBzZW50aW5lbCAweEYKKysKKysgIHVpbnQzMl90KiBpbnN0ID0gKHVpbnQzMl90Kils b2FkQWRkcjsKKysKKysgIHVpbnQzMl90IGhpbnQgPSBpbnN0WzBdOworKyAgdWludDMyX3QgaW5k ZXggPSBoaW50ICYgMHhGRkZGOworKyAgdWludDMyX3QgZGVzdFJlZyA9IChoaW50ID4+IDE2KSAm IDB4MUY7CisrICB1aW50MzJfdCBsb2FkVHlwZSA9IChoaW50ID4+IDIxKSAmIDB4MzsKKysKKysg IC8vIERpc3BsYWNlbWVudDogcG9vbCBlbnRyeSBhZGRyZXNzIHJlbGF0aXZlIHRvIGluc3RbMV0g KG1mbHIgdGFyZ2V0KSBmb3IgdGhlCisrICAvLyBiY2wgcGF0aCwgb3IgcmVsYXRpdmUgdG8gaW5z dFswXSs0IChhZGRwY2lzIHRhcmdldCA9IENJQSs0LCB3aGljaCBpcyB0aGUKKysgIC8vIGFkZHJl c3Mgb2YgaW5zdFsxXSkgZm9yIHRoZSBhZGRwY2lzIHBhdGguIEJvdGggY29udmVudGlvbnMgcmVz b2x2ZSB0byB0aGUKKysgIC8vIHNhbWUgdmFsdWU6IChwb29sIGVudHJ5KSDiiJIgKGxvYWRBZGRy ICsgNCkuCisrICBpbnQzMl90IGRpc3BsYWNlbWVudCA9CisrICAgICAgKGludDMyX3QpKCh1aW50 OF90Kiljb25zdFBvb2xBZGRyICsgaW5kZXggKiA0IC0gKCh1aW50OF90Kilsb2FkQWRkciArIDQp KTsKKysKKysgIGlmIChsb2FkVHlwZSA9PSBQb29sTG9hZEZQUjY0IHx8IGxvYWRUeXBlID09IFBv b2xMb2FkRlBSMzIpIHsKKysgICAgLy8gVGhyZWUgZW1pc3Npb24gcGF0aHM6CisrICAgIC8vCisr ICAgIC8vIFBPV0VSMTAgKHByZWZlcnJlZCk6IHBsZmQvcGxmcyBGUlQsIFNJKDApLCBSPTEg4oCU IHNpbmdsZSBQQy1yZWxhdGl2ZQorKyAgICAvLyAgIHByZWZpeGVkIEZQIGxvYWQuIDggYnl0ZXMg PSAyIHNsb3RzOyBzbG90IDIgYmVjb21lcyBhIG5vcC4gSWYKKysgICAgLy8gICBsb2FkQWRkciAl IDY0ID09IDYwLCBwbGZkIHdvdWxkIHN0cmFkZGxlIGEgNjQtYnl0ZSBibG9jaywgc28gZW1pdAor KyAgICAvLyAgIGEgbGVhZGluZyBub3AgYXQgc2xvdCAwIGFuZCBwbGFjZSBwbGZkIGF0IHNsb3Rz IDEtMiBpbnN0ZWFkLgorKyAgICAvLyAgIFJlYWNoOiDCsTggR0IgKDM0LWJpdCBzaWduZWQpLiBO byBMUiBjbG9iYmVyLCBubyByMTYgYmFzZS4KKysgICAgLy8KKysgICAgLy8gUE9XRVI5OiBhZGRw Y2lzICsgbGZkL2xmcyArIG5vcC4gMiByZWFsIGluc25zLCBubyBMUiBjbG9iYmVyLCBubworKyAg ICAvLyAgIFJldHVybiBBZGRyZXNzIFN0YWNrIGNvcnJ1cHRpb24uIEJhc2UgcmVnaXN0ZXIgaXMg cjE2LgorKyAgICAvLyAgIERpc3BsYWNlbWVudCBzcGxpdHMgaW50byAoaGkgPDwgMTYpICsgbG8g d2hlcmUgbG8gaXMgdGhlIDE2LWJpdAorKyAgICAvLyAgIHNpZ25lZCBELWZpZWxkIG9mIGxmZC9s ZnMuIFJlYWNoOiDCsTIgR0IuCisrICAgIC8vCisrICAgIC8vIFBPV0VSODogYmNsICsgbWZsciBy MTYgKyBsZmQvbGZzLiBTYW1lIGNsb2JiZXIgKyBSQVMgY2F2ZWF0IGFzIGJlZm9yZS4KKysgICAg Ly8gICBLZXB0IGFzIGEgY29ycmVjdG5lc3MgZmFsbGJhY2s7IG5vdCBleGVyY2lzZWQgdG9kYXkg YmVjYXVzZSB0aGUKKysgICAgLy8gICBsb2FkQ29uc3RhbnREb3VibGUvRmxvYXQzMiB3cmFwcGVy cyBza2lwIHRoZSBwb29sIG9uIFBPV0VSOC4KKysgICAgLy8KKysgICAgLy8gbGZzL3BsZnMgKDMy LWJpdCkgYXV0by1leHBhbmQgdGhlaXIgcmVzdWx0IHRvIGRvdWJsZS1wcmVjaXNpb24gaW4gdGhl CisrICAgIC8vIEZQUiwgcmVwbGFjaW5nIHRoZSBub24tcG9vbCBwYXRoJ3Mgc2VwYXJhdGUgeHNj dnNwZHBuIHN0ZXAuCisrICAgIHVpbnQzMl90IGJhc2VSZWcgPSBTYXZlZFNjcmF0Y2hSZWdpc3Rl ci5jb2RlKCk7CisrICAgIHVpbnQzMl90IGxvYWRPcCA9IChsb2FkVHlwZSA9PSBQb29sTG9hZEZQ UjY0KSA/IFBQQ19sZmQgOiBQUENfbGZzOworKworKyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7Cisr ICAgICAgLy8gTUxTIHByZWZpeGVkIEZQIGxvYWQuIHBsZmQgc3VmZml4IG9wY29kZSA9IDUwLCBw bGZzID0gNDguIFNhbWUKKysgICAgICAvLyBhbGlnbm1lbnQtZHJpdmVuIHNsb3QgcGxhY2VtZW50 IGFzIFBvb2xMb2FkU2ltZDEyOCBhYm92ZS4KKysgICAgICB1aW50NjRfdCBsb2FkQWRkckJpdHMg PSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pihsb2FkQWRkcik7CisrICAgICAgLy8gbG9hZEFk ZHIgaXMgdGhlIGJ1ZmZlci10aW1lIHBvaW50ZXI7IHRoZSBmaW5hbCBleGVjdXRhYmxlIGJhc2Ug aXMKKysgICAgICAvLyBvbmx5IDE2LWJ5dGUgYWxpZ25lZCwgc28gdGhlIHVuc2FmZSBzdHJhZGRs ZSBpcyB3aGVuCisrICAgICAgLy8gKGxvYWRBZGRyQml0cyAmIDE1KSA9PSAxMiAobWF0Y2hlcyBl bnN1cmVQcmVmaXhlZEFsaWdubWVudCBhYm92ZSkuCisrICAgICAgYm9vbCBuZWVkTGVhZGluZ05v cCA9IChsb2FkQWRkckJpdHMgJiAxNSkgPT0gMTI7CisrICAgICAgaW50IHByZWZpeFNsb3QgPSBu ZWVkTGVhZGluZ05vcCA/IDEgOiAwOworKyAgICAgIGludCBwcmVmaXhCeXRlT2Zmc2V0ID0gcHJl Zml4U2xvdCAqIDQ7CisrICAgICAgaW50NjRfdCBTSSA9IGludDY0X3QoZGlzcGxhY2VtZW50KSAr IDQgLSBwcmVmaXhCeXRlT2Zmc2V0OworKyAgICAgIE1PWl9BU1NFUlQoU0kgPj0gLShpbnQ2NF90 KDEpIDw8IDMzKSAmJiBTSSA8IChpbnQ2NF90KDEpIDw8IDMzKSk7CisrICAgICAgdWludDMyX3Qg ZDAgPSB1aW50MzJfdCgodWludDY0X3QoU0kpID4+IDE2KSAmIDB4M0ZGRkZ1KTsKKysgICAgICB1 aW50MzJfdCBkMSA9IHVpbnQzMl90KHVpbnQ2NF90KFNJKSAmIDB4RkZGRnUpOworKyAgICAgIC8v IFR5cGUgMiAoTUxTKSwgUj0xLCBSQT0wLgorKyAgICAgIHVpbnQzMl90IHByZWZpeCA9CisrICAg ICAgICAgICgxdSA8PCAyNikgfCAoMnUgPDwgMjQpIHwgKDF1IDw8IDIwKSB8IChkMCAmIDB4M0ZG RkZ1KTsKKysgICAgICB1aW50MzJfdCBzdWZmaXhPcCA9IChsb2FkVHlwZSA9PSBQb29sTG9hZEZQ UjY0KSA/IDUwdSA6IDQ4dTsKKysgICAgICB1aW50MzJfdCBzdWZmaXggPSAoc3VmZml4T3AgPDwg MjYpIHwgKGRlc3RSZWcgPDwgMjEpIHwgZDE7CisrCisrICAgICAgaWYgKG5lZWRMZWFkaW5nTm9w KSB7CisrICAgICAgICBpbnN0WzBdID0gTm9wSW5zdDsKKysgICAgICAgIGluc3RbMV0gPSBwcmVm aXg7CisrICAgICAgICBpbnN0WzJdID0gc3VmZml4OworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICBpbnN0WzBdID0gcHJlZml4OworKyAgICAgICAgaW5zdFsxXSA9IHN1ZmZpeDsKKysgICAgICAg IGluc3RbMl0gPSBOb3BJbnN0OworKyAgICAgIH0KKysgICAgfSBlbHNlIGlmIChIYXNQT1dFUjko KSkgeworKyAgICAgIC8vIFNwbGl0IGRpc3BsYWNlbWVudCBpbnRvIGFkZHBjaXMgaGkgZmllbGQg YW5kIGxmZC9sZnMgbG8gZmllbGQgc28gdGhhdAorKyAgICAgIC8vICAgdGFyZ2V0ID0gKENJQSAr IDQpICsgKGhpIDw8IDE2KSArIFNFWFQxNihsbykuCisrICAgICAgLy8gT25seSAyIHNsb3RzIGFy ZSByZXNlcnZlZCBvbiBQOSAobG9hZEZyb21Qb29sRmxvYXR7MzIsNjR9IGFib3ZlKTsKKysgICAg ICAvLyBkbyBOT1QgdG91Y2ggaW5zdFsyXSwgaXQgYmVsb25ncyB0byB0aGUgbmV4dCBlbnRyeS4K KysgICAgICBpbnQxNl90IGxvID0gKGludDE2X3QpKGRpc3BsYWNlbWVudCAmIDB4RkZGRik7Cisr ICAgICAgaW50MzJfdCBoaUFkaiA9IGRpc3BsYWNlbWVudCAtIGxvOworKyAgICAgIE1PWl9BU1NF UlQoKGhpQWRqICYgMHhGRkZGKSA9PSAwKTsKKysgICAgICBpbnQzMl90IGhpID0gaGlBZGogPj4g MTY7CisrICAgICAgTU9aX0FTU0VSVChoaSA+PSAtMzI3NjggJiYgaGkgPD0gMzI3NjcpOworKyAg ICAgIC8vIFswXSBhZGRwY2lzIHIxNiwgaGkKKysgICAgICB1aW50MzJfdCBEaGkgPSB1aW50MTZf dChoaSk7CisrICAgICAgaW5zdFswXSA9ICgxOXUgPDwgMjYpIHwgKGJhc2VSZWcgPDwgMjEpIHwg KChEaGkgPj4gMSkgJiAweDFGKSA8PCAxNiB8CisrICAgICAgICAgICAgICAgICgoRGhpID4+IDYp ICYgMHgzRkYpIDw8IDYgfCAoMnUgPDwgMSkgfCAoRGhpICYgMXUpOworKyAgICAgIC8vIFsxXSBs ZmQvbGZzIGZELCBsbyhyMTYpCisrICAgICAgaW5zdFsxXSA9IGxvYWRPcCB8IChkZXN0UmVnIDw8 IDIxKSB8IChiYXNlUmVnIDw8IDE2KSB8ICh1aW50MTZfdChsbykpOworKyAgICB9IGVsc2Ugewor KyAgICAgIE1PWl9BU1NFUlQoZGlzcGxhY2VtZW50ID49IC0zMjc2OCAmJiBkaXNwbGFjZW1lbnQg PCAzMjc2OCk7CisrICAgICAgLy8gWzBdIGJjbCAyMCwwLCQrNAorKyAgICAgIGluc3RbMF0gPSBQ UENfYmNsX2Fsd2F5c19wbHVzNDsKKysgICAgICAvLyBbMV0gbWZsciByMTYKKysgICAgICBpbnN0 WzFdID0gUFBDX21mc3ByIHwgKGJhc2VSZWcgPDwgMjEpIHwgUFBDX1NQUihzcHJfbHIpOworKyAg ICAgIC8vIFsyXSBsZmQvbGZzIGZELCBkaXNwbGFjZW1lbnQocjE2KQorKyAgICAgIGluc3RbMl0g PQorKyAgICAgICAgICBsb2FkT3AgfCAoZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikg fCAoZGlzcGxhY2VtZW50ICYgMHhGRkZGKTsKKysgICAgfQorKyAgfSBlbHNlIGlmIChsb2FkVHlw ZSA9PSBQb29sTG9hZFNpbWQxMjgpIHsKKysgICAgLy8gVGhyZWUgZW1pc3Npb24gcGF0aHMgKDUg c2xvdHMgcmVzZXJ2ZWQgYnkgbG9hZEZyb21Qb29sU2ltZDEyOCk6CisrICAgIC8vCisrICAgIC8v IFBPV0VSMTAgKHByZWZlcnJlZCk6IHBseHYgdnNELCBTSSgwKSwgUj0xIOKAlCBzaW5nbGUgUEMt cmVsYXRpdmUKKysgICAgLy8gICBwcmVmaXhlZCBsb2FkLCBuYXR1cmFsLUxFIGJ5dGUgb3JkZXIg KG5vIHh4cGVybWRpIG5lZWRlZCkuIDggYnl0ZXMKKysgICAgLy8gICA9IDIgc2xvdHM7IHNsb3Rz IDItNCBiZWNvbWUgbm9wcy4gSWYgdGhlIHByZWZpeCB3b3VsZCBzdHJhZGRsZSBhCisrICAgIC8v ICAgNjQtYnl0ZSBibG9jayAobG9hZEFkZHIgJSA2NCA9PSA2MCksIGVtaXQgYSBsZWFkaW5nIG5v cCBhdCBzbG90IDAKKysgICAgLy8gICBhbmQgcGxhY2UgcGx4diBhdCBzbG90cyAxLTIgaW5zdGVh ZC4gUmVhY2g6IMKxOCBHQiAoMzQtYml0IHNpZ25lZCkuCisrICAgIC8vCisrICAgIC8vIFBPV0VS OTogYWRkcGNpcy1lcXVpdmFsZW50IHZpYSBiY2wgKyBtZmxyICsgYWRkaSArIGx4dnggKyBub3Au IDUKKysgICAgLy8gICByZWFsIGluc25zLCBuYXR1cmFsIExFLgorKyAgICAvLworKyAgICAvLyBQ T1dFUjg6IHNhbWUgcHJlbHVkZSArIGx4dmQyeCArIHh4cGVybWRpIChCRS1EVyBieXRlLXN3YXAg Zml4dXApLgorKyAgICAvLworKyAgICAvLyBTZWUgUG9vbExvYWRGUFI2NCBhYm92ZSBmb3Igd2h5 IHIxNiBpbnN0ZWFkIG9mIHIxMi4KKysgICAgTU9aX0FTU0VSVChkaXNwbGFjZW1lbnQgPj0gLTMy NzY4ICYmIGRpc3BsYWNlbWVudCA8IDMyNzY4KTsKKysgICAgLy8gU2ltZDEyOCBkZXN0IGlzIGlu IFZSLW5hbWVzcGFjZSAoZW5jb2RpbmcgMzItNjMpLiBIaW50IHN0b3JlcyBvbmx5CisrICAgIC8v IHRoZSBsb3cgNSBiaXRzIChsb2FkRnJvbVBvb2xTaW1kMTI4IG1hc2tzKTsgd2Ugc2V0IFRYIHVu Y29uZGl0aW9uYWxseQorKyAgICAvLyBzaW5jZSBQb29sTG9hZFNpbWQxMjggYWx3YXlzIHRhcmdl dHMgYSBTaW1kMTI4LgorKyAgICBjb25zdGV4cHIgdWludDMyX3Qga1RYID0gMXU7CisrICAgIGNv bnN0ZXhwciB1aW50MzJfdCBrQXhCeFR4X3h4cGVybWRpID0gKDF1IDw8IDIpIHwgKDF1IDw8IDEp IHwgMXU7CisrCisrICAgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgICAvLyBQbGFjZSBwbHh2 IHByZWZpeCBhdCB0aGUgaGlnaGVzdCA0LWJ5dGUtYWxpZ25lZCBvZmZzZXQgd2l0aGluCisrICAg ICAgLy8gdGhlIDUgcmVzZXJ2ZWQgc2xvdHMgdGhhdCBkb2Vzbid0IHN0cmFkZGxlIGEgNjQtYnl0 ZSBibG9jay4KKysgICAgICB1aW50NjRfdCBsb2FkQWRkckJpdHMgPSByZWludGVycHJldF9jYXN0 PHVpbnQ2NF90Pihsb2FkQWRkcik7CisrICAgICAgLy8gbG9hZEFkZHIgaXMgdGhlIGJ1ZmZlci10 aW1lIHBvaW50ZXI7IHRoZSBmaW5hbCBleGVjdXRhYmxlIGJhc2UgaXMKKysgICAgICAvLyBvbmx5 IDE2LWJ5dGUgYWxpZ25lZCwgc28gdGhlIHVuc2FmZSBzdHJhZGRsZSBpcyB3aGVuCisrICAgICAg Ly8gKGxvYWRBZGRyQml0cyAmIDE1KSA9PSAxMiAobWF0Y2hlcyBlbnN1cmVQcmVmaXhlZEFsaWdu bWVudCBhYm92ZSkuCisrICAgICAgYm9vbCBuZWVkTGVhZGluZ05vcCA9IChsb2FkQWRkckJpdHMg JiAxNSkgPT0gMTI7CisrICAgICAgaW50IHByZWZpeFNsb3QgPSBuZWVkTGVhZGluZ05vcCA/IDEg OiAwOworKyAgICAgIGludCBwcmVmaXhCeXRlT2Zmc2V0ID0gcHJlZml4U2xvdCAqIDQ7CisrICAg ICAgLy8gU0kgPSAocG9vbCBlbnRyeSBhZGRyKSAtIChwcmVmaXggYWRkcikKKysgICAgICAvLyAg ICA9IChsb2FkQWRkciArIDQgKyBkaXNwbGFjZW1lbnQpIC0gKGxvYWRBZGRyICsgcHJlZml4Qnl0 ZU9mZnNldCkKKysgICAgICAvLyAgICA9IGRpc3BsYWNlbWVudCArIDQgLSBwcmVmaXhCeXRlT2Zm c2V0CisrICAgICAgaW50NjRfdCBTSSA9IGludDY0X3QoZGlzcGxhY2VtZW50KSArIDQgLSBwcmVm aXhCeXRlT2Zmc2V0OworKyAgICAgIE1PWl9BU1NFUlQoU0kgPj0gLShpbnQ2NF90KDEpIDw8IDMz KSAmJiBTSSA8IChpbnQ2NF90KDEpIDw8IDMzKSk7CisrICAgICAgdWludDMyX3QgZDAgPSB1aW50 MzJfdCgodWludDY0X3QoU0kpID4+IDE2KSAmIDB4M0ZGRkZ1KTsKKysgICAgICB1aW50MzJfdCBk MSA9IHVpbnQzMl90KHVpbnQ2NF90KFNJKSAmIDB4RkZGRnUpOworKyAgICAgIC8vIFByZWZpeDog cHJpbWFyeSBvcGNvZGUgMSwgVHlwZSAwICg4TFMpLCBSPTEsIGQwIGF0IExFIGJpdHMgMTcuLjAu CisrICAgICAgdWludDMyX3QgcHJlZml4ID0KKysgICAgICAgICAgKDF1IDw8IDI2KSB8ICgwdSA8 PCAyNCkgfCAoMXUgPDwgMjApIHwgKGQwICYgMHgzRkZGRnUpOworKyAgICAgIC8vIFN1ZmZpeDog NS1iaXQgb3Bjb2RlIDI1IGF0IExFIDMxLi4yNywgVFggYXQgTEUgMjYsIFQgYXQgTEUgMjUuLjIx LAorKyAgICAgIC8vICAgICAgICAgUkE9MCBhdCBMRSAyMC4uMTYsIGQxIGF0IExFIDE1Li4wLgor KyAgICAgIHVpbnQzMl90IHN1ZmZpeCA9ICgyNXUgPDwgMjcpIHwgKGtUWCA8PCAyNikgfCAoZGVz dFJlZyA8PCAyMSkgfCBkMTsKKysKKysgICAgICAvLyBQMTAgcmVzZXJ2ZXMgMyBzbG90czsgb25s eSBpbnN0WzAuLjJdIGFyZSB3cml0dGVuLiBTbG90cyAzLi40CisrICAgICAgLy8gYmVsb25nIHRv IHRoZSBuZXh0IHBvb2wgZW50cnkgb24gUDEwLgorKyAgICAgIGlmIChuZWVkTGVhZGluZ05vcCkg eworKyAgICAgICAgaW5zdFswXSA9IE5vcEluc3Q7CisrICAgICAgICBpbnN0WzFdID0gcHJlZml4 OworKyAgICAgICAgaW5zdFsyXSA9IHN1ZmZpeDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAg aW5zdFswXSA9IHByZWZpeDsKKysgICAgICAgIGluc3RbMV0gPSBzdWZmaXg7CisrICAgICAgICBp bnN0WzJdID0gTm9wSW5zdDsKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAoSGFzUE9XRVI5KCkp IHsKKysgICAgICAvLyBhZGRwY2lzICsgYWRkaSArIGx4dnggKDMgc2xvdHMpIOKAlCBubyBMUiBj bG9iYmVyLCBubyBSQVMgaGF6YXJkLgorKyAgICAgIC8vIFNhbWUgZGlzcGxhY2VtZW50IHNwbGl0 IGFzIHRoZSBGUCBzY2FsYXIgUDkgcGF0aDogdGFyZ2V0ID0KKysgICAgICAvLyAoQ0lBKzQpICsg KGhpIDw8IDE2KSArIFNFWFQxNihsbykuIGx4dnggaXMgWC1mb3JtIGluZGV4ZWQgKG5vCisrICAg ICAgLy8gaW1tZWRpYXRlIG9mZnNldCksIHNvIGNvbWJpbmUgdGhlIGxvdyAxNiBiaXRzIGludG8g cjE2IHZpYSBhZGRpCisrICAgICAgLy8gYmVmb3JlIHRoZSBsb2FkLgorKyAgICAgIGludDE2X3Qg bG8gPSAoaW50MTZfdCkoZGlzcGxhY2VtZW50ICYgMHhGRkZGKTsKKysgICAgICBpbnQzMl90IGhp QWRqID0gZGlzcGxhY2VtZW50IC0gbG87CisrICAgICAgTU9aX0FTU0VSVCgoaGlBZGogJiAweEZG RkYpID09IDApOworKyAgICAgIGludDMyX3QgaGkgPSBoaUFkaiA+PiAxNjsKKysgICAgICBNT1pf QVNTRVJUKGhpID49IC0zMjc2OCAmJiBoaSA8PSAzMjc2Nyk7CisrICAgICAgdWludDMyX3QgRGhp ID0gdWludDE2X3QoaGkpOworKyAgICAgIHVpbnQzMl90IGJhc2VSZWcgPSBTYXZlZFNjcmF0Y2hS ZWdpc3Rlci5jb2RlKCk7CisrICAgICAgLy8gWzBdIGFkZHBjaXMgcjE2LCBoaQorKyAgICAgIGlu c3RbMF0gPSAoMTl1IDw8IDI2KSB8IChiYXNlUmVnIDw8IDIxKSB8ICgoRGhpID4+IDEpICYgMHgx RikgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAoKERoaSA+PiA2KSAmIDB4M0ZGKSA8PCA2IHwg KDJ1IDw8IDEpIHwgKERoaSAmIDF1KTsKKysgICAgICAvLyBbMV0gYWRkaSByMTYsIHIxNiwgbG8K KysgICAgICBpbnN0WzFdID0gUFBDX2FkZGkgfCAoYmFzZVJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8 PCAxNikgfCB1aW50MTZfdChsbyk7CisrICAgICAgLy8gWzJdIGx4dnggdnNELCAwLCByMTYgIChY VFswOjRdIGluIGJpdHMgMjEtMjUsIFRYIGF0IGJpdCAwKQorKyAgICAgIGluc3RbMl0gPSBQUENf bHh2eCB8IChkZXN0UmVnIDw8IDIxKSB8IChiYXNlUmVnIDw8IDExKSB8IGtUWDsKKysgICAgfSBl bHNlIHsKKysgICAgICAvLyBQOCBmYWxsYmFjazogYmNsICsgbWZsciArIGFkZGkgKyBseHZkMngg KyB4eHBlcm1kaSAoNSBzbG90cykuCisrICAgICAgLy8gQ2xvYmJlcnMgTFI7IGNvcnJlY3RuZXNz LW9ubHkgcGF0aC4KKysgICAgICB1aW50MzJfdCBiYXNlUmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0 ZXIuY29kZSgpOworKyAgICAgIGluc3RbMF0gPSBQUENfYmNsX2Fsd2F5c19wbHVzNDsKKysgICAg ICBpbnN0WzFdID0gUFBDX21mc3ByIHwgKGJhc2VSZWcgPDwgMjEpIHwgUFBDX1NQUihzcHJfbHIp OworKyAgICAgIGluc3RbMl0gPSBQUENfYWRkaSB8IChiYXNlUmVnIDw8IDIxKSB8IChiYXNlUmVn IDw8IDE2KSB8CisrICAgICAgICAgICAgICAgIChkaXNwbGFjZW1lbnQgJiAweEZGRkYpOworKyAg ICAgIC8vIGx4dmQyeCBYVCwgUkE9MCwgUkI9cjE2IOKAlCBsb2FkcyBpbiBCRSBvcmRlciBvbiBM RS4KKysgICAgICBpbnN0WzNdID0gUFBDX2x4dmQyeCB8IChkZXN0UmVnIDw8IDIxKSB8IChiYXNl UmVnIDw8IDExKSB8IGtUWDsKKysgICAgICAvLyB4eHBlcm1kaSBYVCwgWFQsIFhULCAyIOKAlCBz d2FwIGRvdWJsZXdvcmRzIGZvciBMRSBieXRlIG9yZGVyLgorKyAgICAgIGluc3RbNF0gPSBQUENf eHhwZXJtZGkgfCAoZGVzdFJlZyA8PCAyMSkgfCAoZGVzdFJlZyA8PCAxNikgfAorKyAgICAgICAg ICAgICAgICAoZGVzdFJlZyA8PCAxMSkgfCAoMnUgPDwgOCkgfCBrQXhCeFR4X3h4cGVybWRpOwor KyAgICB9CisrICB9IGVsc2UgeworKyAgICBNT1pfQ1JBU0goIlBhdGNoQ29uc3RhbnRQb29sTG9h ZDogdW5zdXBwb3J0ZWQgbG9hZCB0eXBlIik7CisrICB9CisrCisrICByZXR1cm4gZmFsc2U7Cisr fQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQgQXNzZW1ibGVyOjpXcml0ZVBvb2xHdWFyZChCdWZm ZXJPZmZzZXQgYnJhbmNoLCBJbnN0cnVjdGlvbiogaW5zdCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQnVmZmVyT2Zmc2V0IGRlc3QpIHsKKysgIC8vIEVtaXQgYW4gdW5jb25kaXRp b25hbCBicmFuY2ggb3ZlciB0aGUgcG9vbCBkYXRhLgorKyAgaW50MzJfdCBvZmZzZXQgPSBkZXN0 LmdldE9mZnNldCgpIC0gYnJhbmNoLmdldE9mZnNldCgpOworKyAgTU9aX0FTU0VSVChKT2ZmSW1t MjY6OklzSW5SYW5nZShvZmZzZXQpKTsKKysgIGluc3QtPnNldERhdGEoUFBDX2IgfCAob2Zmc2V0 ICYgMHgwM0ZGRkZGQykpOworK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6 V3JpdGVQb29sSGVhZGVyKHVpbnQ4X3QqIHN0YXJ0LCBQb29sKiBwLCBib29sIGlzTmF0dXJhbCkg eworKyAgLy8gV3JpdGUgcG9vbCBpZGVudGlmaWNhdGlvbiBoZWFkZXIuCisrICAvLyBFbmNvZGUg cG9vbCBzaXplIGFuZCBpc05hdHVyYWwgZmxhZyBpbiBhIHNpbmdsZSAzMi1iaXQgd29yZC4KKysg IHVpbnQzMl90IHBvb2xTaXplID0gcC0+Z2V0UG9vbFNpemUoKTsKKysgIHVpbnQzMl90IHNpemVJ bldvcmRzID0gKHBvb2xTaXplICsgNCArIDMpID4+IDI7ICAvLyBoZWFkZXIgKyBkYXRhLCBpbiB3 b3JkcworKyAgTU9aX0FTU0VSVChzaXplSW5Xb3JkcyA8ICgxIDw8IDE1KSk7CisrICB1aW50MzJf dCBoZWFkZXIgPSAoc2l6ZUluV29yZHMgJiAweDdGRkYpIHwgKGlzTmF0dXJhbCA/ICgxIDw8IDE1 KSA6IDApIHwKKysgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDA7ICAvLyBzZW50aW5lbAor KyAgKih1aW50MzJfdCopc3RhcnQgPSBoZWFkZXI7CisrfQorKworKy8qIHN0YXRpYyAqLworK3Zv aWQgQXNzZW1ibGVyOjpQYXRjaFNob3J0UmFuZ2VCcmFuY2hUb1ZlbmVlcihQUENCdWZmZXIqLCB1 bnNpZ25lZCByYW5nZUlkeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQnVmZmVyT2Zmc2V0IGRlYWRsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPZmZzZXQgdmVuZWVyKSB7CisrICAvLyBQUEM2 NCBkb2VzIG5vdCB1c2Ugc2hvcnQtcmFuZ2UgYnJhbmNoIHRyYWNraW5nIChOdW1TaG9ydEJyYW5j aFJhbmdlcyA9IDApLgorKyAgTU9aX0NSQVNIKCJQYXRjaFNob3J0UmFuZ2VCcmFuY2hUb1ZlbmVl cjogc2hvdWxkIG5vdCBiZSBjYWxsZWQiKTsKKyt9CisrCisrLy8gVHdvIHN0YW56YSBzaGFwZXMg c2hhcmUgdGhlIHNhbWUgOC1zbG90IGZvb3RwcmludCBhbmQgdGhlIHNhbWUgLnF1YWQKKysvLyBs b2NhdGlvbiBhdCBzbG90cyBbNi4uN10gKHNvIEV4dHJhY3RMb2FkNjRWYWx1ZSAvIFVwZGF0ZUxv YWQ2NFZhbHVlIGFyZQorKy8vIHNoYXBlLWFnbm9zdGljKToKKysvLworKy8vICAgUE9XRVI4IChu byBhZGRwY2lzKToKKysvLyAgICAgWzBdIG1mbHIgcjAKKysvLyAgICAgWzFdIGJjbCAyMCwwLC4r NCAgICAgICAgIChMUiA6PSBwYyBvZiBbMl0pCisrLy8gICAgIFsyXSBtZmxyIHJECisrLy8gICAg IFszXSBtdGxyIHIwCisrLy8gICAgIFs0XSBsZCByRCwgMTYockQpCisrLy8gICAgIFs1XSBiIC4r MTIKKysvLyAgICAgWzYuLjddIC5xdWFkIFZBTFVFCisrLy8KKysvLyAgIFBPV0VSOSsgKGFkZHBj aXMpOgorKy8vICAgICBbMF0gYWRkcGNpcyByRCwgMCAgICAgICAgKHJEIDo9IE5JQSA9IHBjIG9m IFsxXSkKKysvLyAgICAgWzFdIGxkIHJELCAyMChyRCkgICAgICAgIChyRCA6PSBtZW1bcGNfb2Zf WzFdICsgMjBdID0gbWVtW3Nsb3RbNl1dKQorKy8vICAgICBbMl0gYiAuKzI0CisrLy8gICAgIFsz Li41XSBOT1AsIE5PUCwgTk9QCisrLy8gICAgIFs2Li43XSAucXVhZCBWQUxVRQorKy8vCisrLy8g VGhlIFA5KyBmb3JtIGRyb3BzIHRoZSBiY2wvbWZsci9tdGxyIExSLWJvdW5jZSAobm8gUkFTIHRo cmFzaCkgYW5kIHJ1bnMKKysvLyAyIGR5bmFtaWMgaW5zbnMgaW5zdGVhZCBvZiA2LiBEaXN0aW5n dWlzaGVkIGF0IHBhdGNoIHRpbWUgYnkgaW5zdFswXSdzCisrLy8gbWFqb3Igb3Bjb2RlOiAzMSA9 IG1mc3ByIChQOCkgdnMgMTkgPSBhZGRwY2lzIChQOSspLgorK3N0YXRpYyBib29sIElzQWRkcGNp c0xvYWQ2NFN0YW56YSh1aW50MzJfdCBlbmMwKSB7CisrICByZXR1cm4gKChlbmMwID4+IDI2KSAm IDB4M2YpID09IDE5OworK30KKysKKysvLyBFeHRyYWN0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rl ciBmcm9tIGEgbG9hZDY0IHN0YW56YSBpbiBlaXRoZXIgc2hhcGUuCisrLy8gUDggc3RvcmVzIHJE IGluIGBtZmxyIHJEYCBhdCBzbG90IFsyXTsgUDkrIHN0b3JlcyByRCBpbiBgYWRkcGNpcyByRCwg MGAKKysvLyBhdCBzbG90IFswXS4gQm90aCBlbmNvZGUgUlQgYXQgTEUgYml0cyBbMjEuLjI1XS4K KytzdGF0aWMgdWludDhfdCBMb2FkNjRTdGFuemFEZXN0UmVnKEluc3RydWN0aW9uKiBpbnN0MCkg eworKyAgaWYgKElzQWRkcGNpc0xvYWQ2NFN0YW56YShpbnN0MC0+ZW5jb2RlKCkpKSB7CisrICAg IHJldHVybiAoaW5zdDBbMF0uZW5jb2RlKCkgPj4gMjEpICYgMHgxZjsKKysgIH0KKysgIHJldHVy biAoaW5zdDBbMl0uZW5jb2RlKCkgPj4gMjEpICYgMHgxZjsKKyt9CisrCisrLyogc3RhdGljICov Cisrdm9pZCBBc3NlbWJsZXI6OldyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKEluc3RydWN0aW9uKiBp bnN0MCwgUmVnaXN0ZXIgcmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50NjRfdCB2YWx1ZSkgeworKyAgSW5zdHJ1Y3Rpb24qIGkxID0gaW5zdDAtPm5leHQo KTsKKysgIEluc3RydWN0aW9uKiBpMiA9IGkxLT5uZXh0KCk7CisrICBJbnN0cnVjdGlvbiogaTMg PSBpMi0+bmV4dCgpOworKyAgSW5zdHJ1Y3Rpb24qIGk0ID0gaTMtPm5leHQoKTsKKysgIEluc3Ry dWN0aW9uKiBpNSA9IGk0LT5uZXh0KCk7CisrICBJbnN0cnVjdGlvbiogaTYgPSBpNS0+bmV4dCgp OworKyAgSW5zdHJ1Y3Rpb24qIGk3ID0gaTYtPm5leHQoKTsKKysKKysgIGlmIChIYXNQT1dFUjko KSkgeworKyAgICAvLyBbMF0gYWRkcGNpcyByRCwgMCAgIChEWC1mb3JtOiBvcGNvZGU9MTksIFhP PTIsIGFsbCBEIGZpZWxkcyA9IDApCisrICAgIGluc3QwLT5zZXREYXRhKDB4NEMwMDAwMDR1IHwg KHVpbnQzMl90KHJlZy5jb2RlKCkpIDw8IDIxKSk7CisrICAgIC8vIFsxXSBsZCByRCwgMjAockQp ICAgKHJEIDo9ICooc2xvdFsxXSArIDIwKSA9ICooc2xvdFs2XSkgPSAucXVhZCkKKysgICAgaTEt PnNldERhdGEoUFBDX2xkIHwgKHVpbnQzMl90KHJlZy5jb2RlKCkpIDw8IDIxKSB8CisrICAgICAg ICAgICAgICAgICh1aW50MzJfdChyZWcuY29kZSgpKSA8PCAxNikgfCAyMCk7CisrICAgIC8vIFsy XSBiIC4rMjQgICAgICAgICAgKHNraXAgc2xvdHMgWzMuLjddIHRvIGxhbmQgYXQgc2xvdCBbOF0p CisrICAgIGkyLT5zZXREYXRhKFBQQ19iIHwgKDI0ICYgMHgwM0ZGRkZGQykpOworKyAgICAvLyBb My4uNV0gTk9QIGZpbGxlciDigJQgdW5yZWFjaGFibGUgYnV0IGtlcHQgYWxpZ25lZCBmb3IgdGhl IHBhdGNoZXIuCisrICAgIGkzLT5zZXREYXRhKE5vcEluc3QpOworKyAgICBpNC0+c2V0RGF0YShO b3BJbnN0KTsKKysgICAgaTUtPnNldERhdGEoTm9wSW5zdCk7CisrICB9IGVsc2UgeworKyAgICAv LyBbMF0gbWZsciByMAorKyAgICBpbnN0MC0+c2V0RGF0YShQUENfbWZzcHIgfCAocjAuY29kZSgp IDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKSk7CisrICAgIC8vIFsxXSBiY2wgMjAsMCwuKzQKKysg ICAgaTEtPnNldERhdGEoUFBDX2JjbF9hbHdheXNfcGx1czQpOworKyAgICAvLyBbMl0gbWZsciBy RAorKyAgICBpMi0+c2V0RGF0YShQUENfbWZzcHIgfCAocmVnLmNvZGUoKSA8PCAyMSkgfCBQUENf U1BSKHNwcl9scikpOworKyAgICAvLyBbM10gbXRsciByMAorKyAgICBpMy0+c2V0RGF0YShQUENf bXRzcHIgfCAocjAuY29kZSgpIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKSk7CisrICAgIC8vIFs0 XSBsZCByRCwgMTYockQpCisrICAgIGk0LT5zZXREYXRhKFBQQ19sZCB8IChyZWcuY29kZSgpIDw8 IDIxKSB8IChyZWcuY29kZSgpIDw8IDE2KSB8IDE2KTsKKysgICAgLy8gWzVdIGIgLisxMgorKyAg ICBpNS0+c2V0RGF0YShQUENfYiB8ICgxMiAmIDB4MDNGRkZGRkMpKTsKKysgIH0KKysKKysgIC8v IFs2Li43XSAucXVhZCBWQUxVRSAobG93IDMyIGF0IGxvd2VyIGFkZHIsIGhpZ2ggMzIgYXQgaGln aGVyIGFkZHIpLgorKyAgaTYtPnNldERhdGEoKHVpbnQzMl90KSh2YWx1ZSAmIDB4RkZGRkZGRkYp KTsKKysgIGk3LT5zZXREYXRhKCh1aW50MzJfdCkodmFsdWUgPj4gMzIpKTsKKyt9CisrCisrLyog c3RhdGljICovCisrdWludDY0X3QgQXNzZW1ibGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUoSW5zdHJ1 Y3Rpb24qIGluc3QwKSB7CisrICAvLyBUaGUgOC1ieXRlIHZhbHVlIGlzIGF0IGluc3QwWzYuLjdd IGluIGJvdGggc2hhcGVzLgorKyAgSW5zdHJ1Y3Rpb24qIGk2ID0gaW5zdDAgKyA2OworKyAgSW5z dHJ1Y3Rpb24qIGk3ID0gaW5zdDAgKyA3OworKworKyAgdWludDY0X3QgbG8gPSAodWludDY0X3Qp aTYtPmVuY29kZSgpOyAgLy8gbG93IDMyIGF0IGxvd2VyIGFkZHIKKysgIHVpbnQ2NF90IGhpID0g KHVpbnQ2NF90KWk3LT5lbmNvZGUoKTsgIC8vIGhpZ2ggMzIgYXQgaGlnaGVyIGFkZHIKKysgIHJl dHVybiAoaGkgPDwgMzIpIHwgbG87CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQgQXNzZW1i bGVyOjpVcGRhdGVMb2FkNjRWYWx1ZShJbnN0cnVjdGlvbiogaW5zdDAsIHVpbnQ2NF90IHZhbHVl KSB7CisrICAvLyBTYW5pdHktY2hlY2sgdGhhdCBpbnN0MCBpcyB0aGUgc3RhcnQgb2YgYSBsb2Fk NjQgc3RhbnphIGluIGVpdGhlciBzaGFwZS4KKysgIC8vIFA4OiBpbnN0MFsxXSA9PSBiY2wgMjAs MCwuKzQuIFA5KzogaW5zdDBbMF0gaXMgYWRkcGNpcyAobWFqb3Igb3Bjb2RlIDE5KS4KKysgIE1P Wl9BU1NFUlQoaW5zdDBbMV0uZW5jb2RlKCkgPT0gUFBDX2JjbF9hbHdheXNfcGx1czQgfHwKKysg ICAgICAgICAgICAgICAgIElzQWRkcGNpc0xvYWQ2NFN0YW56YShpbnN0MC0+ZW5jb2RlKCkpLAor KyAgICAgICAgICAgICAiVXBkYXRlTG9hZDY0VmFsdWU6IGluc3QwIGlzIG5vdCBhIGxvYWQ2NCBz dGFuemEiKTsKKysKKysgIC8vIC5xdWFkIGxpdmVzIGF0IGluc3QwWzYuLjddIGluIGJvdGggc2hh cGVzLgorKyAgSW5zdHJ1Y3Rpb24qIGk2ID0gaW5zdDAgKyA2OworKyAgSW5zdHJ1Y3Rpb24qIGk3 ID0gaW5zdDAgKyA3OworKworKyAgaTYtPnNldERhdGEoKHVpbnQzMl90KSh2YWx1ZSAmIDB4RkZG RkZGRkYpKTsgIC8vIGxvdyAzMiBhdCBsb3dlciBhZGRyCisrICBpNy0+c2V0RGF0YSgodWludDMy X3QpKHZhbHVlID4+IDMyKSk7ICAgICAgICAgLy8gaGlnaCAzMiBhdCBoaWdoZXIgYWRkcgorK30K KysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBQYXRjaGluZyBhbmQgdG9nZ2xlIG9wZXJhdGlv bnMuCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrLyogc3RhdGljICovCisrdWludDMyX3QgQXNz ZW1ibGVyOjpQYXRjaFdyaXRlX05lYXJDYWxsU2l6ZSgpIHsKKysgIC8vIDggaW5zdHJ1Y3Rpb25z IGZvciBMb2FkNjQgKyBtdGN0ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rpb25zLgorKyAgcmV0dXJu IDEwICogc2l6ZW9mKHVpbnQzMl90KTsKKyt9CisrCisrLyogc3RhdGljICovCisrdm9pZCBBc3Nl bWJsZXI6OlBhdGNoV3JpdGVfTmVhckNhbGwoQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9DYWxs KSB7CisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopc3RhcnQucmF3KCk7Cisr ICB1aW50OF90KiBkZXN0ID0gdG9DYWxsLnJhdygpOworKworKyAgQXNzZW1ibGVyOjpXcml0ZUxv YWQ2NEluc3RydWN0aW9ucyhpbnN0LCBTYXZlZFNjcmF0Y2hSZWdpc3RlciwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KWRlc3QpOworKyAgaW5zdFs4XS5t YWtlT3BfbXRjdHIoU2F2ZWRTY3JhdGNoUmVnaXN0ZXIpOworKyAgaW5zdFs5XS5tYWtlT3BfYmN0 cihMaW5rQik7CisrICBGbHVzaElDYWNoZShpbnN0LCAxMCAqIHNpemVvZihJbnN0cnVjdGlvbikp OworK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6UGF0Y2hXcml0ZV9JbW0z MihDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCwgSW1tMzIgaW1tKSB7CisrICB1aW50MzJfdCogbCA9 ICh1aW50MzJfdCopbGFiZWwucmF3KCk7CisrICAqKGwgLSAxKSA9IGltbS52YWx1ZTsKKysgIEZs dXNoSUNhY2hlKGwgLSAxLCBzaXplb2YodWludDMyX3QpKTsKKyt9CisrCisrdm9pZCBBc3NlbWJs ZXI6OlBhdGNoRGF0YVdpdGhWYWx1ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW1QdHIgbmV3VmFsdWUsIElt bVB0ciBleHBlY3RlZFZhbHVlKSB7CisrICBQYXRjaERhdGFXaXRoVmFsdWVDaGVjayhsYWJlbCwg UGF0Y2hlZEltbVB0cihuZXdWYWx1ZS52YWx1ZSksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICBQYXRjaGVkSW1tUHRyKGV4cGVjdGVkVmFsdWUudmFsdWUpKTsKKyt9CisrCisrdm9pZCBBc3Nl bWJsZXI6OlBhdGNoRGF0YVdpdGhWYWx1ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkSW1tUHRyIG5l d1ZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVk SW1tUHRyIGV4cGVjdGVkVmFsdWUpIHsKKysgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0 aW9uKilsYWJlbC5yYXcoKTsKKysKKysgIERlYnVnT25seTx1aW50NjRfdD4gdmFsdWUgPSBBc3Nl bWJsZXI6OkV4dHJhY3RMb2FkNjRWYWx1ZShpbnN0KTsKKysgIE1PWl9BU1NFUlQodmFsdWUgPT0g dWludDY0X3QoZXhwZWN0ZWRWYWx1ZS52YWx1ZSkpOworKworKyAgQXNzZW1ibGVyOjpVcGRhdGVM b2FkNjRWYWx1ZShpbnN0LCB1aW50NjRfdChuZXdWYWx1ZS52YWx1ZSkpOworKyAgRmx1c2hJQ2Fj aGUoaW5zdCwgOCAqIHNpemVvZihJbnN0cnVjdGlvbikpOworK30KKysKKysvLyBUb2dnbGVDYWxs IHRvZ2dsZXMgdGhlIGNhbGwgcG9ydGlvbiBvZiBhIHRvZ2dsZWRDYWxsIHN0YW56YS4KKysvLyBM YXlvdXQ6IDggbG9hZDY0IGluc3RydWN0aW9ucyArIG10Y3RyICsgYmN0cmwgKDEwIHRvdGFsKS4K KysvLyBXZSB0b2dnbGUgdGhlIGxhc3QgdHdvIGluc3RydWN0aW9ucyAobXRjdHIvYmN0cmwgdnMg bm9wL25vcCkuCisrLy8gVGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGV4dHJhY3RlZCB2aWEg TG9hZDY0U3RhbnphRGVzdFJlZywgd2hpY2gKKysvLyBoYW5kbGVzIGJvdGggdGhlIFA4IChtZmxy LXJEIGF0IHNsb3QgWzJdKSBhbmQgUDkrIChhZGRwY2lzLXJEIGF0IHNsb3QKKysvLyBbMF0pIHNo YXBlcy4KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6VG9nZ2xlQ2FsbChDb2Rl TG9jYXRpb25MYWJlbCBpbnN0XywgYm9vbCBlbmFibGVkKSB7CisrICBJbnN0cnVjdGlvbiogaTAg PSAoSW5zdHJ1Y3Rpb24qKWluc3RfLnJhdygpOworKyAgSW5zdHJ1Y3Rpb24qIGk4ID0gKEluc3Ry dWN0aW9uKikoaW5zdF8ucmF3KCkgKyA4ICogc2l6ZW9mKHVpbnQzMl90KSk7CisrICBJbnN0cnVj dGlvbiogaTkgPSAoSW5zdHJ1Y3Rpb24qKShpbnN0Xy5yYXcoKSArIDkgKiBzaXplb2YodWludDMy X3QpKTsKKysKKysgIC8vIEFjY2VwdCBlaXRoZXIgUDggc3RhbnphIChtZmxyIHIwIGF0IHNsb3Qg WzBdKSBvciBQOSsgc3RhbnphIChhZGRwY2lzIGF0CisrICAvLyBzbG90IFswXTsgbWFqb3Igb3Bj b2RlIDE5KS4KKysgIE1PWl9BU1NFUlQoaTAtPmVuY29kZSgpID09IChQUENfbWZzcHIgfCAocjAu Y29kZSgpIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKSkgfHwKKysgICAgICAgICAgICAgICAgIElz QWRkcGNpc0xvYWQ2NFN0YW56YShpMC0+ZW5jb2RlKCkpKTsKKysKKysgIC8vIFRvZ2dsZUNhbGwg aXMgaWRlbXBvdGVudCBhY3Jvc3MgdGhlIHNhbWUgYGVuYWJsZWRgIHZhbHVlOiByZS1lbmFibGlu ZworKyAgLy8gYW4gYWxyZWFkeS1lbmFibGVkIHNpdGUgKG9yIHJlLWRpc2FibGluZyBhIGRpc2Fi bGVkIG9uZSkgaXMgYSBuby1vcC4KKysgIC8vIE1vemlsbGEncyBkZWJ1Z2dlciBtYWNoaW5lcnkg bWF5IGxlZ2l0aW1hdGVseSB0b2dnbGUgdGhlIHNhbWUgY2FsbCBzaXRlCisrICAvLyBtdWx0aXBs ZSB0aW1lcyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24gKGUuZy4gc2V0dGluZyBib3RoIGEgYnJlYWtw b2ludAorKyAgLy8gYW5kIGEgZnJhbWUub25TdGVwIG9uIHRoZSBzYW1lIHNjcmlwdCkuCisrICBS ZWdpc3RlciBzY3JhdGNoID0gUmVnaXN0ZXI6OkZyb21Db2RlKExvYWQ2NFN0YW56YURlc3RSZWco aTApKTsKKysgIHVpbnQzMl90IG10Y3RyID0gUFBDX210c3ByIHwgKHNjcmF0Y2guY29kZSgpIDw8 IDIxKSB8IFBQQ19TUFIoc3ByX2N0cik7CisrICB1aW50MzJfdCBiY3RybCA9ICh1aW50MzJfdClQ UENfYmN0ciB8ICh1aW50MzJfdClMaW5rQjsKKysgIGlmIChlbmFibGVkKSB7CisrICAgIE1PWl9B U1NFUlQoaTgtPmVuY29kZSgpID09IE5vcEluc3QgfHwgaTgtPmVuY29kZSgpID09IG10Y3RyKTsK KysgICAgTU9aX0FTU0VSVChpOS0+ZW5jb2RlKCkgPT0gTm9wSW5zdCB8fCBpOS0+ZW5jb2RlKCkg PT0gYmN0cmwpOworKyAgICBpOC0+c2V0RGF0YShtdGN0cik7CisrICAgIGk5LT5zZXREYXRhKGJj dHJsKTsKKysgIH0gZWxzZSB7CisrICAgIE1PWl9BU1NFUlQoaTgtPmVuY29kZSgpID09IE5vcElu c3QgfHwgaTgtPmVuY29kZSgpID09IG10Y3RyKTsKKysgICAgTU9aX0FTU0VSVChpOS0+ZW5jb2Rl KCkgPT0gTm9wSW5zdCB8fCBpOS0+ZW5jb2RlKCkgPT0gYmN0cmwpOworKyAgICBpOC0+c2V0RGF0 YShOb3BJbnN0KTsKKysgICAgaTktPnNldERhdGEoTm9wSW5zdCk7CisrICB9CisrICBGbHVzaElD YWNoZShpOCwgMiAqIHNpemVvZihJbnN0cnVjdGlvbikpOworK30KKysKKysvLyB0b2dnbGVkSnVt cCBlbWl0cyBhIHRyYXAgc3RhbnphIHZpYSBqdW1wKGxhYmVsKS4gQWZ0ZXIgYmluZGluZywgdGhl IGZpcnN0CisrLy8gaW5zdHJ1Y3Rpb24gYmVjb21lcyAiYiBvZmZzZXQiIChzaG9ydCBicmFuY2gp LiBXZSB0b2dnbGUgYmV0d2VlbiBiIGFuZCBvcmk6CisrLy8gICBiIG9mZnNldDogICAgICAgWzAx MDAxMF1bTEk6MjRdWzBdWzBdCisrLy8gICBvcmkgcjAscjAsaW1tOiAgWzAxMTAwMF1bMDAwMDBd WzAwMDAwXVtVSToxNl0KKysvLyBGb3Igc2hvcnQgZm9yd2FyZCBqdW1wcyAob2Zmc2V0IDwgNjRL QiksIGJpdHMgMjU6MTYgb2YgTEkgYXJlIDAsIHNvCisrLy8gc3dhcHBpbmcgdGhlIG9wY29kZSBw cmVzZXJ2ZXMgdGhlIG9mZnNldCBpbiB0aGUgbG93ZXIgMTYgYml0cy4KKysvLyBvcmkgcjAscjAs WCBpcyBlZmZlY3RpdmVseSBhIG5vcCAod3JpdGVzIHRvIHIwKS4KKysKKysvKiBzdGF0aWMgKi8K Kyt2b2lkIEFzc2VtYmxlcjo6VG9nZ2xlVG9KbXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pIHsK KysgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKilpbnN0Xy5yYXcoKTsKKysgIE1P Wl9BU1NFUlQoaW5zdC0+aXNPcGNvZGUoUFBDX29yaSkpOworKyAgLy8gVmVyaWZ5IFJTPTAgYW5k IFJBPTAgKHIwKS4KKysgIE1PWl9BU1NFUlQoKGluc3QtPmVuY29kZSgpICYgMHgwM0UwMDAwMCkg PT0gMCk7CisrICBNT1pfQVNTRVJUKChpbnN0LT5lbmNvZGUoKSAmIDB4MDAxRjAwMDApID09IDAp OworKyAgLy8gU3dhcCBvcGNvZGUgZnJvbSBvcmkgKDAxMTAwMCkgdG8gYiAoMDEwMDEwKS4KKysg IHVpbnQzMl90IGVuY29kaW5nID0gaW5zdC0+ZW5jb2RlKCk7CisrICBlbmNvZGluZyA9IChlbmNv ZGluZyAmIDB4MDNGRkZGRkYpIHwgKHVpbnQzMl90KVBQQ19iOworKyAgaW5zdC0+c2V0RGF0YShl bmNvZGluZyk7CisrICBGbHVzaElDYWNoZShpbnN0LCBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyt9 CisrCisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6OlRvZ2dsZVRvQ21wKENvZGVMb2Nh dGlvbkxhYmVsIGluc3RfKSB7CisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiop aW5zdF8ucmF3KCk7CisrICBNT1pfQVNTRVJUKGluc3QtPmlzT3Bjb2RlKFBQQ19iKSk7CisrICAv LyBWZXJpZnkgc2hvcnQgZm9yd2FyZCBicmFuY2g6IHVwcGVyIExJIGJpdHMgKDI1OjE2KSBhcmUg MCwgQUE9MCwgTEs9MC4KKysgIE1PWl9BU1NFUlQoKGluc3QtPmVuY29kZSgpICYgMHgwM0ZGMDAw MykgPT0gMCk7CisrICAvLyBTd2FwIG9wY29kZSBmcm9tIGIgKDAxMDAxMCkgdG8gb3JpICgwMTEw MDApLgorKyAgdWludDMyX3QgZW5jb2RpbmcgPSBpbnN0LT5lbmNvZGUoKTsKKysgIGVuY29kaW5n ID0gKGVuY29kaW5nICYgMHgwM0ZGRkZGRikgfCAodWludDMyX3QpUFBDX29yaTsKKysgIGluc3Qt PnNldERhdGEoZW5jb2RpbmcpOworKyAgRmx1c2hJQ2FjaGUoaW5zdCwgc2l6ZW9mKEluc3RydWN0 aW9uKSk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIEJpbmQsIHRyYWNpbmcsIGFu ZCBwb2ludGVyIGV4dHJhY3Rpb24uCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrdm9pZCBBc3Nl bWJsZXI6OkJpbmQodWludDhfdCogcmF3Q29kZSwgY29uc3QgQ29kZUxhYmVsJiBsYWJlbCkgewor KyAgaWYgKGxhYmVsLnBhdGNoQXQoKS5ib3VuZCgpKSB7CisrICAgIGF1dG8gbW9kZSA9IGxhYmVs LmxpbmtNb2RlKCk7CisrICAgIGludHB0cl90IG9mZnNldCA9IGxhYmVsLnBhdGNoQXQoKS5vZmZz ZXQoKTsKKysgICAgaW50cHRyX3QgdGFyZ2V0ID0gbGFiZWwudGFyZ2V0KCkub2Zmc2V0KCk7Cisr CisrICAgIGlmIChtb2RlID09IENvZGVMYWJlbDo6UmF3UG9pbnRlcikgeworKyAgICAgICpyZWlu dGVycHJldF9jYXN0PGNvbnN0IHZvaWQqKj4ocmF3Q29kZSArIG9mZnNldCkgPSByYXdDb2RlICsg dGFyZ2V0OworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NFUlQobW9kZSA9PSBDb2RlTGFi ZWw6Ok1vdmVJbW1lZGlhdGUgfHwKKysgICAgICAgICAgICAgICAgIG1vZGUgPT0gQ29kZUxhYmVs OjpKdW1wSW1tZWRpYXRlKTsKKysgICAgICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlv biopKHJhd0NvZGUgKyBvZmZzZXQpOworKyAgICAgIEFzc2VtYmxlcjo6VXBkYXRlTG9hZDY0VmFs dWUoaW5zdCwgKHVpbnQ2NF90KShyYXdDb2RlICsgdGFyZ2V0KSk7CisrICAgIH0KKysgIH0KKyt9 CisrCisrdWludHB0cl90IEFzc2VtYmxlcjo6R2V0UG9pbnRlcih1aW50OF90KiBpbnN0UHRyKSB7 CisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopaW5zdFB0cjsKKysgIHJldHVy biBBc3NlbWJsZXI6OkV4dHJhY3RMb2FkNjRWYWx1ZShpbnN0KTsKKyt9CisrCisrc3RhdGljIEpp dENvZGUqIENvZGVGcm9tSnVtcChJbnN0cnVjdGlvbioganVtcCkgeworKyAgdWludDhfdCogdGFy Z2V0ID0gKHVpbnQ4X3QqKUFzc2VtYmxlcjo6RXh0cmFjdExvYWQ2NFZhbHVlKGp1bXApOworKyAg cmV0dXJuIEppdENvZGU6OkZyb21FeGVjdXRhYmxlKHRhcmdldCk7CisrfQorKworK3ZvaWQgQXNz ZW1ibGVyOjpUcmFjZUp1bXBSZWxvY2F0aW9ucyhKU1RyYWNlciogdHJjLCBKaXRDb2RlKiBjb2Rl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYWN0QnVmZmVyUmVh ZGVyJiByZWFkZXIpIHsKKysgIHdoaWxlIChyZWFkZXIubW9yZSgpKSB7CisrICAgIEppdENvZGUq IGNoaWxkID0KKysgICAgICAgIENvZGVGcm9tSnVtcCgoSW5zdHJ1Y3Rpb24qKShjb2RlLT5yYXco KSArIHJlYWRlci5yZWFkVW5zaWduZWQoKSkpOworKyAgICBUcmFjZU1hbnVhbGx5QmFycmllcmVk RWRnZSh0cmMsICZjaGlsZCwgInJlbDMyIik7CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIFRy YWNlT25lRGF0YVJlbG9jYXRpb24oSlNUcmFjZXIqIHRyYywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vemlsbGE6Ok1heWJlPEF1dG9Xcml0YWJsZUppdENvZGU+JiBhd2pj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSml0Q29kZSogY29kZSwgSW5z dHJ1Y3Rpb24qIGluc3QpIHsKKysgIHZvaWQqIHB0ciA9ICh2b2lkKilBc3NlbWJsZXI6OkV4dHJh Y3RMb2FkNjRWYWx1ZShpbnN0KTsKKysgIHZvaWQqIHByaW9yID0gcHRyOworKworKyAgdWludHB0 cl90IHdvcmQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKTsKKysgIGlmICh3b3Jk ID4+IEpTVkFMX1RBR19TSElGVCkgeworKyAgICBWYWx1ZSB2ID0gVmFsdWU6OmZyb21SYXdCaXRz KHdvcmQpOworKyAgICBUcmFjZU1hbnVhbGx5QmFycmllcmVkRWRnZSh0cmMsICZ2LCAiaml0LW1h c20tdmFsdWUiKTsKKysgICAgcHRyID0gKHZvaWQqKXYuYml0c0FzUHVuYm94UG9pbnRlcigpOwor KyAgfSBlbHNlIHsKKysgICAgVHJhY2VNYW51YWxseUJhcnJpZXJlZEdlbmVyaWNQb2ludGVyRWRn ZSgKKysgICAgICAgIHRyYywgcmVpbnRlcnByZXRfY2FzdDxnYzo6Q2VsbCoqPigmcHRyKSwgImpp dC1tYXNtLXB0ciIpOworKyAgfQorKworKyAgaWYgKHB0ciAhPSBwcmlvcikgeworKyAgICBpZiAo YXdqYy5pc05vdGhpbmcoKSkgeworKyAgICAgIGF3amMuZW1wbGFjZShjb2RlKTsKKysgICAgfQor KyAgICBBc3NlbWJsZXI6OlVwZGF0ZUxvYWQ2NFZhbHVlKGluc3QsIHVpbnQ2NF90KHB0cikpOwor KyAgfQorK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6VHJhY2VEYXRhUmVs b2NhdGlvbnMoSlNUcmFjZXIqIHRyYywgSml0Q29kZSogY29kZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKSB7CisrICBt b3ppbGxhOjpNYXliZTxBdXRvV3JpdGFibGVKaXRDb2RlPiBhd2pjOworKyAgd2hpbGUgKHJlYWRl ci5tb3JlKCkpIHsKKysgICAgc2l6ZV90IG9mZnNldCA9IHJlYWRlci5yZWFkVW5zaWduZWQoKTsK KysgICAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKShjb2RlLT5yYXcoKSArIG9m ZnNldCk7CisrICAgIFRyYWNlT25lRGF0YVJlbG9jYXRpb24odHJjLCBhd2pjLCBjb2RlLCBpbnN0 KTsKKysgIH0KKyt9CisrCisrLyogc3RhdGljICovCisrdWludDhfdCogQXNzZW1ibGVyOjpOZXh0 SW5zdHJ1Y3Rpb24odWludDhfdCogaW5zdHJ1Y3Rpb24sIHVpbnQzMl90KiBjb3VudCkgeworKyAg aWYgKGNvdW50ICE9IG51bGxwdHIpIHsKKysgICAgKmNvdW50ICs9IHNpemVvZihJbnN0cnVjdGlv bik7CisrICB9CisrICByZXR1cm4gaW5zdHJ1Y3Rpb24gKyBzaXplb2YoSW5zdHJ1Y3Rpb24pOwor K30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSBp bXBsZW1lbnRhdGlvbi4KKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKytVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZTo6VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUoQXNzZW1ibGVyJiBhc3NlbWJsZXIpCisr ICAgIDogYXZhaWxhYmxlXyhhc3NlbWJsZXIuR2V0U2NyYXRjaFJlZ2lzdGVyTGlzdCgpKSwKKysg ICAgICBvbGRfYXZhaWxhYmxlXygqYXZhaWxhYmxlXykge30KKysKKytVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZTo6VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUoQXNzZW1ibGVyKiBhc3NlbWJsZXIpCisr ICAgIDogYXZhaWxhYmxlXyhhc3NlbWJsZXItPkdldFNjcmF0Y2hSZWdpc3Rlckxpc3QoKSksCisr ICAgICAgb2xkX2F2YWlsYWJsZV8oKmF2YWlsYWJsZV8pIHt9CisrCisrVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGU6On5Vc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSgpIHsKKysgICphdmFpbGFibGVfID0g b2xkX2F2YWlsYWJsZV87CisrfQorKworK1JlZ2lzdGVyIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl OjpBY3F1aXJlKCkgeworKyAgTU9aX0FTU0VSVChhdmFpbGFibGVfICE9IG51bGxwdHIpOworKyAg TU9aX0FTU0VSVCghYXZhaWxhYmxlXy0+ZW1wdHkoKSk7CisrICBSZWdpc3RlciBpbmRleCA9IEdl bmVyYWxSZWdpc3RlclNldDo6Rmlyc3RSZWdpc3RlcihhdmFpbGFibGVfLT5iaXRzKCkpOworKyAg YXZhaWxhYmxlXy0+dGFrZVJlZ2lzdGVySW5kZXgoaW5kZXgpOworKyAgcmV0dXJuIGluZGV4Owor K30KKysKKyt2b2lkIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlOjpSZWxlYXNlKGNvbnN0IFJlZ2lz dGVyJiByZWcpIHsKKysgIE1PWl9BU1NFUlQoYXZhaWxhYmxlXyAhPSBudWxscHRyKTsKKysgIE1P Wl9BU1NFUlQob2xkX2F2YWlsYWJsZV8uaGFzUmVnaXN0ZXJJbmRleChyZWcpKTsKKysgIE1PWl9B U1NFUlQoIWF2YWlsYWJsZV8tPmhhc1JlZ2lzdGVySW5kZXgocmVnKSk7CisrICBJbmNsdWRlKEdl bmVyYWxSZWdpc3RlclNldCgxIDw8IHJlZy5jb2RlKCkpKTsKKyt9CisrCisrYm9vbCBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZTo6aGFzQXZhaWxhYmxlKCkgY29uc3QgeworKyAgcmV0dXJuIChhdmFp bGFibGVfLT5zaXplKCkpICE9IDA7CisrfQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQv QXNzZW1ibGVyLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi42MGU4NGJmNzFjZjcKKy0t LSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgKK0BA IC0wLDAgKzEsMjExNCBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50 LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04 IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIu MC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysg KiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAv LiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X0Fzc2VtYmxlcl9wcGM2NF9oCisrI2RlZmluZSBq aXRfcHBjNjRfQXNzZW1ibGVyX3BwYzY0X2gKKysKKysjaW5jbHVkZSAiaml0L0NvbXBhY3RCdWZm ZXIuaCIKKysjaW5jbHVkZSAiaml0L0ppdENvZGUuaCIKKysjaW5jbHVkZSAiaml0L0ppdFNwZXdl ci5oIgorKyNpbmNsdWRlICJqaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgiCisrI2luY2x1 ZGUgImppdC9zaGFyZWQvQXNzZW1ibGVyLXNoYXJlZC5oIgorKyNpbmNsdWRlICJqaXQvc2hhcmVk L0Rpc2Fzc2VtYmxlci1zaGFyZWQuaCIKKysjaW5jbHVkZSAiaml0L3NoYXJlZC9Jb25Bc3NlbWJs ZXJCdWZmZXIuaCIKKysjaW5jbHVkZSAiaml0L3NoYXJlZC9Jb25Bc3NlbWJsZXJCdWZmZXJXaXRo Q29uc3RhbnRQb29scy5oIgorKyNpbmNsdWRlICJ3YXNtL1dhc21UeXBlRGVjbHMuaCIKKysKKytu YW1lc3BhY2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworKy8vIEdQUiByZWdpc3RlciBjb25z dGFudHMuCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMHtSZWdpc3RlcnM6OnIwfTsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxe1JlZ2lzdGVyczo6cjF9OworK3N0YXRpYyBjb25z dGV4cHIgUmVnaXN0ZXIgcjJ7UmVnaXN0ZXJzOjpyMn07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdp c3RlciByM3tSZWdpc3RlcnM6OnIzfTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHI0e1Jl Z2lzdGVyczo6cjR9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjV7UmVnaXN0ZXJzOjpy NX07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByNntSZWdpc3RlcnM6OnI2fTsKKytzdGF0 aWMgY29uc3RleHByIFJlZ2lzdGVyIHI3e1JlZ2lzdGVyczo6cjd9OworK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgcjh7UmVnaXN0ZXJzOjpyOH07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciByOXtSZWdpc3RlcnM6OnI5fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxMHtSZWdp c3RlcnM6OnIxMH07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTF7UmVnaXN0ZXJzOjpy MTF9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjEye1JlZ2lzdGVyczo6cjEyfTsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxM3tSZWdpc3RlcnM6OnIxM307Cisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciByMTR7UmVnaXN0ZXJzOjpyMTR9OworK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgcjE1e1JlZ2lzdGVyczo6cjE1fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IHIxNntSZWdpc3RlcnM6OnIxNn07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTd7UmVn aXN0ZXJzOjpyMTd9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjE4e1JlZ2lzdGVyczo6 cjE4fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxOXtSZWdpc3RlcnM6OnIxOX07Cisr c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjB7UmVnaXN0ZXJzOjpyMjB9OworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgcjIxe1JlZ2lzdGVyczo6cjIxfTsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIHIyMntSZWdpc3RlcnM6OnIyMn07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciByMjN7UmVnaXN0ZXJzOjpyMjN9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjI0e1Jl Z2lzdGVyczo6cjI0fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyNXtSZWdpc3RlcnM6 OnIyNX07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjZ7UmVnaXN0ZXJzOjpyMjZ9Owor K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjI3e1JlZ2lzdGVyczo6cjI3fTsKKytzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIHIyOHtSZWdpc3RlcnM6OnIyOH07Cisrc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciByMjl7UmVnaXN0ZXJzOjpyMjl9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgcjMwe1JlZ2lzdGVyczo6cjMwfTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIzMXtS ZWdpc3RlcnM6OnIzMX07CisrCisrLy8gRlBSIHJlZ2lzdGVyIGNvbnN0YW50cy4KKytzdGF0aWMg Y29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjB7RmxvYXRSZWdpc3RlcnM6OmYwLCBGbG9hdFJlZ2lz dGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjF7RmxvYXRS ZWdpc3RlcnM6OmYxLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHBy IEZsb2F0UmVnaXN0ZXIgZjJ7RmxvYXRSZWdpc3RlcnM6OmYyLCBGbG9hdFJlZ2lzdGVyczo6RG91 YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjN7RmxvYXRSZWdpc3RlcnM6 OmYzLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVn aXN0ZXIgZjR7RmxvYXRSZWdpc3RlcnM6OmY0LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytz dGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjV7RmxvYXRSZWdpc3RlcnM6OmY1LCBGbG9h dFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjZ7 RmxvYXRSZWdpc3RlcnM6OmY2LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29u c3RleHByIEZsb2F0UmVnaXN0ZXIgZjd7RmxvYXRSZWdpc3RlcnM6OmY3LCBGbG9hdFJlZ2lzdGVy czo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjh7RmxvYXRSZWdp c3RlcnM6OmY4LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIgZjl7RmxvYXRSZWdpc3RlcnM6OmY5LCBGbG9hdFJlZ2lzdGVyczo6RG91Ymxl fTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjEwe0Zsb2F0UmVnaXN0ZXJzOjpm MTAsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdp c3RlciBmMTF7RmxvYXRSZWdpc3RlcnM6OmYxMSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisr c3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxMntGbG9hdFJlZ2lzdGVyczo6ZjEyLCBG bG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIg ZjEze0Zsb2F0UmVnaXN0ZXJzOjpmMTMsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTR7RmxvYXRSZWdpc3RlcnM6OmYxNCwgRmxvYXRS ZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxNXtG bG9hdFJlZ2lzdGVyczo6ZjE1LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29u c3RleHByIEZsb2F0UmVnaXN0ZXIgZjE2e0Zsb2F0UmVnaXN0ZXJzOjpmMTYsIEZsb2F0UmVnaXN0 ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTd7RmxvYXRS ZWdpc3RlcnM6OmYxNywgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhw ciBGbG9hdFJlZ2lzdGVyIGYxOHtGbG9hdFJlZ2lzdGVyczo6ZjE4LCBGbG9hdFJlZ2lzdGVyczo6 RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjE5e0Zsb2F0UmVnaXN0 ZXJzOjpmMTksIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxv YXRSZWdpc3RlciBmMjB7RmxvYXRSZWdpc3RlcnM6OmYyMCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJs ZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyMXtGbG9hdFJlZ2lzdGVyczo6 ZjIxLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVn aXN0ZXIgZjIye0Zsb2F0UmVnaXN0ZXJzOjpmMjIsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9Owor K3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjN7RmxvYXRSZWdpc3RlcnM6OmYyMywg RmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVy IGYyNHtGbG9hdFJlZ2lzdGVyczo6ZjI0LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0 aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjI1e0Zsb2F0UmVnaXN0ZXJzOjpmMjUsIEZsb2F0 UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjZ7 RmxvYXRSZWdpc3RlcnM6OmYyNiwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNv bnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyN3tGbG9hdFJlZ2lzdGVyczo6ZjI3LCBGbG9hdFJlZ2lz dGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjI4e0Zsb2F0 UmVnaXN0ZXJzOjpmMjgsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4 cHIgRmxvYXRSZWdpc3RlciBmMjl7RmxvYXRSZWdpc3RlcnM6OmYyOSwgRmxvYXRSZWdpc3RlcnM6 OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYzMHtGbG9hdFJlZ2lz dGVyczo6ZjMwLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIgZjMxe0Zsb2F0UmVnaXN0ZXJzOjpmMzEsIEZsb2F0UmVnaXN0ZXJzOjpEb3Vi bGV9OworKworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW52YWxpZFJlZ3tSZWdpc3RlcnM6 OkludmFsaWR9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBJbnZhbGlkRmxvYXRS ZWc7CisrCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBTdGFja1BvaW50ZXIgPSByMTsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEZyYW1lUG9pbnRlciA9IHIzMTsKKytzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIFJldHVyblJlZyA9IHIzOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXI2NCBSZXR1cm5SZWc2NChSZXR1cm5SZWcpOworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdp c3RlciBSZXR1cm5GbG9hdDMyUmVne0Zsb2F0UmVnaXN0ZXJzOjpmMSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6U2luZ2xl fTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgUmV0dXJuRG91YmxlUmVnID0gZjE7 Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIFJldHVyblNpbWQxMjhSZWd7RmxvYXRS ZWdpc3RlcnM6OmYxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4fTsKKysKKysvLyByMTYgaXMgbm9uLXZvbGF0 aWxlIGFuZCBub24tYWxsb2NhdGFibGUsIHVzZWQgYXMgYSBzYXZlZCBzY3JhdGNoLgorK3N0YXRp YyBjb25zdGV4cHIgUmVnaXN0ZXIgU2F2ZWRTY3JhdGNoUmVnaXN0ZXIgPSByMTY7CisrCisrc3Rh dGljIGNvbnN0ZXhwciBSZWdpc3RlciBTZWNvbmRTY3JhdGNoUmVnID0gcjEyOworKworK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBTY3JhdGNoRmxvYXQzMlJlZ3tGbG9hdFJlZ2lzdGVy czo6ZjAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl ciBTY3JhdGNoRG91YmxlUmVnID0gZjA7Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVy IFNjcmF0Y2hTaW1kMTI4UmVne0Zsb2F0UmVnaXN0ZXJzOjpmMCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjh9 OworKworK3N0cnVjdCBTY3JhdGNoRmxvYXQzMlNjb3BlIDogcHVibGljIEF1dG9GbG9hdFJlZ2lz dGVyU2NvcGUgeworKyAgZXhwbGljaXQgU2NyYXRjaEZsb2F0MzJTY29wZShNYWNyb0Fzc2VtYmxl ciYgbWFzbSkKKysgICAgICA6IEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUobWFzbSwgU2NyYXRjaEZs b2F0MzJSZWcpIHt9CisrfTsKKysKKytzdHJ1Y3QgU2NyYXRjaERvdWJsZVNjb3BlIDogcHVibGlj IEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUgeworKyAgZXhwbGljaXQgU2NyYXRjaERvdWJsZVNjb3Bl KE1hY3JvQXNzZW1ibGVyJiBtYXNtKQorKyAgICAgIDogQXV0b0Zsb2F0UmVnaXN0ZXJTY29wZSht YXNtLCBTY3JhdGNoRG91YmxlUmVnKSB7fQorK307CisrCisrLy8gUFBDNjQ6IFNjcmF0Y2hTaW1k MTI4U2NvcGUgaXMgYSBzaW1wbGUgcmVnaXN0ZXIgd3JhcHBlciwgTk9UIGEgc2NvcGVkCisrLy8g YWNxdWlyZS9yZWxlYXNlLiBPbiBQUEM2NCwgU2NyYXRjaFNpbWQxMjhSZWcgaXMgdjAgKFZTUjMy OyBlbmNvZGVkIGFzCisrLy8ge0Zsb2F0UmVnaXN0ZXJzOjpmMCwgU2ltZDEyOH0gc28gZW5jb2Rp bmcoKSA9IDAgKyAzMiA9IDMyKSDigJQgZGlzdGluY3QKKysvLyBmcm9tIFNjcmF0Y2hEb3VibGVS ZWcgPSBmMCAoVlNSMCkuIEl0IGlzIG5vbi1hbGxvY2F0YWJsZSBhbmQgYWx3YXlzCisrLy8gYXZh aWxhYmxlLiBNYW55IFNJTUQgZnVuY3Rpb25zIGNhbGwgb3RoZXIgU0lNRCBmdW5jdGlvbnMgdGhh dCBhbHNvIG5lZWQKKysvLyB2MCwgY3JlYXRpbmcgbmVzdGVkICJzY29wZXMiLiBVc2luZyBBdXRv RmxvYXRSZWdpc3RlclNjb3BlIHdvdWxkIGFzc2VydAorKy8vIG9uIGRvdWJsZS1hY3F1aXJlIGlu IGRlYnVnIGJ1aWxkcy4gU2luY2UgdjAgaXMgbmV2ZXIgYWxsb2NhdGVkIGJ5IHRoZQorKy8vIHJl Z2lzdGVyIGFsbG9jYXRvciwgbmVzdGluZyBpcyBzYWZlLgorK3N0cnVjdCBTY3JhdGNoU2ltZDEy OFNjb3BlIDogcHVibGljIEZsb2F0UmVnaXN0ZXIgeworKyAgZXhwbGljaXQgU2NyYXRjaFNpbWQx MjhTY29wZShNYWNyb0Fzc2VtYmxlciYpCisrICAgICAgOiBGbG9hdFJlZ2lzdGVyKFNjcmF0Y2hT aW1kMTI4UmVnKSB7fQorK307CisrCisrY2xhc3MgQXNzZW1ibGVyOworKworK2NsYXNzIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHsKKysgcHVibGljOgorKyAgZXhwbGljaXQgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUoQXNzZW1ibGVyJiBhc3NlbWJsZXIpOworKyAgZXhwbGljaXQgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUoQXNzZW1ibGVyKiBhc3NlbWJsZXIpOworKyAgflVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlKCk7CisrCisrICBSZWdpc3RlciBBY3F1aXJlKCk7CisrICB2b2lkIFJlbGVhc2Uo Y29uc3QgUmVnaXN0ZXImIHJlZyk7CisrICBib29sIGhhc0F2YWlsYWJsZSgpIGNvbnN0OworKyAg dm9pZCBJbmNsdWRlKGNvbnN0IEdlbmVyYWxSZWdpc3RlclNldCYgbGlzdCkgeworKyAgICAqYXZh aWxhYmxlXyA9IEdlbmVyYWxSZWdpc3RlclNldDo6VW5pb24oKmF2YWlsYWJsZV8sIGxpc3QpOwor KyAgfQorKyAgdm9pZCBFeGNsdWRlKGNvbnN0IEdlbmVyYWxSZWdpc3RlclNldCYgbGlzdCkgewor KyAgICAqYXZhaWxhYmxlXyA9IEdlbmVyYWxSZWdpc3RlclNldDo6U3VidHJhY3QoKmF2YWlsYWJs ZV8sIGxpc3QpOworKyAgfQorKworKyBwcml2YXRlOgorKyAgR2VuZXJhbFJlZ2lzdGVyU2V0KiBh dmFpbGFibGVfOworKyAgR2VuZXJhbFJlZ2lzdGVyU2V0IG9sZF9hdmFpbGFibGVfOworK307Cisr Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBPc3JGcmFtZVJlZyA9IHI2OworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgUHJlQmFycmllclJlZyA9IHI0OworK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgSW50ZXJwcmV0ZXJQQ1JlZyA9IHIxNzsKKysKKytzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIENhbGxUZW1wUmVnMCA9IHI0OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2Fs bFRlbXBSZWcxID0gcjk7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcFJlZzIg PSByMTA7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcFJlZzMgPSByNzsKKysv LyBDYWxsVGVtcFJlZzQgbXVzdCBOT1QgYmUgSlNSZXR1cm5SZWcgKHI1KTogTE1lZ2Ftb3JwaGlj TG9hZFNsb3RQZXJtaXNzaXZlCisrLy8gdXNlcyB0ZW1wRml4ZWQoQ2FsbFRlbXBSZWc0KSBmb3Ig YSBzYXZlZCBvYmogcG9pbnRlciBBTkQgZGVmaW5lUmV0dXJuCisrLy8gKEpTUmV0dXJuT3BlcmFu ZD1yNSkgZm9yIG91dHB1dC4gSWYgdGhleSBhbGlhcywgdGhlIG1lZ2Ftb3JwaGljIGNhY2hlCisr Ly8gbG9va3VwIGNsb2JiZXJzIHRoZSBzYXZlZCBvYmosIGNvcnJ1cHRpbmcgdGhlICd0aGlzJyBw b2ludGVyLgorK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWc0ID0gcjg7Cisr c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcFJlZzUgPSByNjsKKysKKysvLyBQUEM2 NCBFTEZ2MiBoYXMgbm8gdm9sYXRpbGUgbm9uLWFyZyBHUFJzIChyMy1yMTAgYXJlIGFsbCBhcmcg cmVncykuCisrLy8gVXNlIGFsbG9jYXRhYmxlIG5vbi12b2xhdGlsZSByZWdpc3RlcnMgYXMgb3Zl cmZsb3cgdGVtcHMuCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcE5vbkFyZ1Jl Z3NbXSA9IHtyMTQsIHIxNX07Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IE51bUNhbGxUZW1wTm9u QXJnUmVncyA9IHN0ZDo6c2l6ZShDYWxsVGVtcE5vbkFyZ1JlZ3MpOworKworK3N0YXRpYyBjb25z dGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnMCA9IHIzOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgSW50QXJnUmVnMSA9IHI0OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVn MiA9IHI1OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnMyA9IHI2OworK3N0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnNCA9IHI3OworK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgSW50QXJnUmVnNSA9IHI4OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg SW50QXJnUmVnNiA9IHI5OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnNyA9 IHIxMDsKKysKKysvLyBSZWdpc3RlcnMgdXNlZCBieSBSZWdFeHBNYXRjaGVyIGFuZCBSZWdFeHBF eGVjTWF0Y2ggc3R1YnMuCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBNYXRjaGVy UmVnRXhwUmVnID0gQ2FsbFRlbXBSZWcwOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVn RXhwTWF0Y2hlclN0cmluZ1JlZyA9IENhbGxUZW1wUmVnMTsKKytzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIFJlZ0V4cE1hdGNoZXJMYXN0SW5kZXhSZWcgPSBDYWxsVGVtcFJlZzI7CisrCisrLy8g UmVnaXN0ZXJzIHVzZWQgYnkgUmVnRXhwRXhlY1Rlc3Qgc3R1YiAoZG8gbm90IHVzZSBSZXR1cm5S ZWcpLgorK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwRXhlY1Rlc3RSZWdFeHBSZWcg PSBDYWxsVGVtcFJlZzA7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBFeGVjVGVz dFN0cmluZ1JlZyA9IENhbGxUZW1wUmVnMTsKKysKKysvLyBSZWdpc3RlcnMgdXNlZCBieSBSZWdF eHBTZWFyY2hlciBzdHViIChkbyBub3QgdXNlIFJldHVyblJlZykuCisrc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciBSZWdFeHBTZWFyY2hlclJlZ0V4cFJlZyA9IENhbGxUZW1wUmVnMDsKKytzdGF0 aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cFNlYXJjaGVyU3RyaW5nUmVnID0gQ2FsbFRlbXBS ZWcxOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwU2VhcmNoZXJMYXN0SW5kZXhS ZWcgPSBDYWxsVGVtcFJlZzI7CisrCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBKU1JldHVy blJlZ19UeXBlID0gcjY7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBKU1JldHVyblJlZ19E YXRhID0gcjU7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBKU1JldHVyblJlZyA9IHI1Owor K3N0YXRpYyBjb25zdGV4cHIgVmFsdWVPcGVyYW5kIEpTUmV0dXJuT3BlcmFuZCA9IFZhbHVlT3Bl cmFuZChKU1JldHVyblJlZyk7CisrCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25B cmdSZWcwID0gcjE5OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmVnMSA9 IHIyMDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEFCSU5vbkFyZ1JlZzIgPSByMjE7Cisr c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25BcmdSZWczID0gcjIyOworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmV0dXJuUmVnMCA9IHIyOTsKKytzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIEFCSU5vbkFyZ1JldHVyblJlZzEgPSByMzA7Cisrc3RhdGljIGNvbnN0 ZXhwciBSZWdpc3RlciBBQklOb25Wb2xhdGlsZVJlZyA9IHIxNDsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIEFCSU5vbkFyZ1JldHVyblZvbGF0aWxlUmVnID0gcjExOworKworK3N0YXRpYyBj b25zdGV4cHIgRmxvYXRSZWdpc3RlciBBQklOb25BcmdEb3VibGVSZWd7RmxvYXRSZWdpc3RlcnM6 OmYxNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworKworKy8vIFdhc20gaW5zdGFuY2UgcG9pbnRlciBy ZWdpc3Rlci4gUHJlc2VydmVkIGFjcm9zcyB3YXNtIGZ1bmN0aW9uIGNhbGxzLgorK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgSW5zdGFuY2VSZWcgPSByMTg7Cisrc3RhdGljIGNvbnN0ZXhwciBS ZWdpc3RlciBIZWFwUmVnID0gcjI0OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgR2xvYmFs UmVnID0gcjIzOworKworKy8vIFdhc20gdGFibGUgY2FsbCByZWdpc3RlcnMuCisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciBXYXNtVGFibGVDYWxsU2NyYXRjaFJlZzAgPSBBQklOb25BcmdSZWcw OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhYmxlQ2FsbFNjcmF0Y2hSZWcxID0g QUJJTm9uQXJnUmVnMTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWJsZUNhbGxT aWdSZWcgPSBBQklOb25BcmdSZWcyOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRh YmxlQ2FsbEluZGV4UmVnID0gQUJJTm9uQXJnUmVnMzsKKysKKysvLyBXYXNtIHJlZiBjYWxsIHJl Z2lzdGVycy4KKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21DYWxsUmVmQ2FsbFNjcmF0 Y2hSZWcwID0gQUJJTm9uQXJnUmVnMDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21D YWxsUmVmQ2FsbFNjcmF0Y2hSZWcxID0gQUJJTm9uQXJnUmVnMTsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIFdhc21DYWxsUmVmQ2FsbFNjcmF0Y2hSZWcyID0gQUJJTm9uQXJnUmVnMjsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21DYWxsUmVmUmVnID0gQUJJTm9uQXJnUmVnMzsK KysKKysvLyBXYXNtIHRhaWwgY2FsbCBzY3JhdGNoIHJlZ2lzdGVycy4KKysvLyBXYXNtVGFpbENh bGxSQVNjcmF0Y2hSZWcgbXVzdCBOT1QgYmUgQUJJTm9uQXJnUmVnMDogdGhlIHNoYXJlZCB0YWls LWNhbGwKKysvLyBjb2RlICh3YXNtUmV0dXJuQ2FsbEltcG9ydCwgd2FzbVJldHVybkNhbGxJbmRp cmVjdCwgd2FzbVJldHVybkNhbGxSZWYpCisrLy8gc3RvcmVzIHRoZSBjYWxsZWUgYWRkcmVzcyBp biBBQklOb25BcmdSZWcwLCBhbmQgQ29sbGFwc2VXYXNtRnJhbWUqCisrLy8gb3ZlcndyaXRlcyB0 ZW1wRm9yUkEuIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBhIEdQUiBsaW5rIHJlZ2lzdGVyIChBUk0s CisrLy8gTUlQUywgTEE2NCwgUklTQy1WKSB0aGlzIGlzIHJhL2xyLiBQUEM2NCdzIExSIGlzIGFu IFNQUiwgc28gd2UgdXNlIHIxNAorKy8vIChBQklOb25Wb2xhdGlsZVJlZykgd2hpY2ggaXMgY2Fs bGVlLXNhdmVkIGFuZCBub3QgdXNlZCBpbiBjYWxsIHNldHVwLgorK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgV2FzbVRhaWxDYWxsSW5zdGFuY2VTY3JhdGNoUmVnID0gQUJJTm9uQXJnUmVnMTsK KytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWlsQ2FsbFJBU2NyYXRjaFJlZyA9IEFC SU5vblZvbGF0aWxlUmVnOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhaWxDYWxs RlBTY3JhdGNoUmVnID0gQUJJTm9uQXJnUmVnMzsKKysKKysvLyBSZWdpc3RlciB1c2VkIGFzIGEg c2NyYXRjaCBhbG9uZyB0aGUgcmV0dXJuIHBhdGggaW4gdGhlIGZhc3QganMgLT4gd2FzbSBzdHVi CisrLy8gY29kZS4gTXVzdCBub3Qgb3ZlcmxhcCBSZXR1cm5SZWcsIEpTUmV0dXJuT3BlcmFuZCwg b3IgSW5zdGFuY2VSZWcuCisrLy8gTXVzdCBiZSB2b2xhdGlsZS4KKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIFdhc21KaXRFbnRyeVJldHVyblNjcmF0Y2ggPSByMTA7CisrCisrc3RhdGljIGNv bnN0ZXhwciB1aW50MzJfdCBBQklTdGFja0FsaWdubWVudCA9IDE2OworK3N0YXRpYyBjb25zdGV4 cHIgdWludDMyX3QgQ29kZUFsaWdubWVudCA9IDE2OworK3N0YXRpYyBjb25zdGV4cHIgdWludDMy X3QgSml0U3RhY2tBbGlnbm1lbnQgPSAxNjsKKysKKytzdGF0aWMgY29uc3RleHByIHVpbnQzMl90 IEppdFN0YWNrVmFsdWVBbGlnbm1lbnQgPQorKyAgICBKaXRTdGFja0FsaWdubWVudCAvIHNpemVv ZihWYWx1ZSk7Cisrc3RhdGljX2Fzc2VydChKaXRTdGFja0FsaWdubWVudCAlIHNpemVvZihWYWx1 ZSkgPT0gMCAmJgorKyAgICAgICAgICAgICAgICAgIEppdFN0YWNrVmFsdWVBbGlnbm1lbnQgPj0g MSwKKysgICAgICAgICAgICAgICJTdGFjayBhbGlnbm1lbnQgc2hvdWxkIGJlIGEgbm9uLXplcm8g bXVsdGlwbGUgb2Ygc2l6ZW9mKFZhbHVlKSIpOworKworK3N0YXRpYyBjb25zdGV4cHIgdWludDMy X3QgU2ltZE1lbW9yeUFsaWdubWVudCA9IDE2OworK3N0YXRpY19hc3NlcnQoCisrICAgIENvZGVB bGlnbm1lbnQgJSBTaW1kTWVtb3J5QWxpZ25tZW50ID09IDAsCisrICAgICJDb2RlIGFsaWdubWVu dCBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gYW55IG9mIHRoZSBhbGlnbm1lbnRzICIKKysgICAgIndo aWNoIGFyZSB1c2VkIGZvciB0aGUgY29uc3RhbnQgc2VjdGlvbnMgb2YgdGhlIGNvZGUgYnVmZmVy LiAiCisrICAgICJUaHVzIGl0IHNob3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgYWxpZ25tZW50IGZv ciBTSU1EIGNvbnN0YW50cy4iKTsKKysKKytzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFdhc21T dGFja0FsaWdubWVudCA9IFNpbWRNZW1vcnlBbGlnbm1lbnQ7Cisrc3RhdGljIGNvbnN0IHVpbnQz Ml90IFdhc21UcmFwSW5zdHJ1Y3Rpb25MZW5ndGggPSA0OworKworK3N0YXRpYyBjb25zdGV4cHIg dWludDMyX3QgV2FzbUNoZWNrZWRDYWxsRW50cnlPZmZzZXQgPSAwdTsKKytzdGF0aWMgY29uc3Rl eHByIHVpbnQzMl90IFdhc21DaGVja2VkVGFpbEVudHJ5T2Zmc2V0ID0gMzJ1OworKworK3N0YXRp YyBjb25zdGV4cHIgU2NhbGUgU2NhbGVQb2ludGVyID0gVGltZXNFaWdodDsKKysKKytjbGFzcyBB QklBcmdHZW5lcmF0b3IgOiBwdWJsaWMgQUJJQXJnR2VuZXJhdG9yU2hhcmVkIHsKKysgcHVibGlj OgorKyAgZXhwbGljaXQgQUJJQXJnR2VuZXJhdG9yKEFCSUtpbmQga2luZCkKKysgICAgICA6IEFC SUFyZ0dlbmVyYXRvclNoYXJlZChraW5kKSwKKysgICAgICAgIGludFJlZ0luZGV4XygwKSwKKysg ICAgICAgIGZsb2F0UmVnSW5kZXhfKDApLAorKyAgICAgICAgY3VycmVudF8oKSB7CisrICAgIC8v IFBQQzY0IEVMRnYyIEFCSTogdGhlIGNhbGxlZSBzYXZlcyBMUiwgQ1IsIFRPQyBpbnRvIHRoZSBj YWxsZXIncworKyAgICAvLyBmcmFtZSAob2Zmc2V0cyA4LCAxNiwgMjQgZnJvbSBjYWxsZXIgU1Ap LiBSZXNlcnZlIDMyIGJ5dGVzIHNvIHRoYXQKKysgICAgLy8gY2FsbFdpdGhBQklQcmUgYWx3YXlz IGFsbG9jYXRlcyBlbm91Z2ggc3BhY2UgZm9yIHRoaXMgbGluayBhcmVhLgorKyAgICBzdGFja09m ZnNldF8gKz0gU2hhZG93U3RhY2tTcGFjZTsKKysgIH0KKysKKysgIEFCSUFyZyBuZXh0KE1JUlR5 cGUgYXJnVHlwZSk7CisrICBBQklBcmcmIGN1cnJlbnQoKSB7IHJldHVybiBjdXJyZW50XzsgfQor KworKyBwcm90ZWN0ZWQ6CisrICB1bnNpZ25lZCBpbnRSZWdJbmRleF87CisrICB1bnNpZ25lZCBm bG9hdFJlZ0luZGV4XzsKKysgIEFCSUFyZyBjdXJyZW50XzsKKyt9OworKworK3N0YXRpYyBjb25z dGV4cHIgdWludDMyX3QgTnVtSW50QXJnUmVncyA9IDg7Cisrc3RhdGljIGNvbnN0ZXhwciB1aW50 MzJfdCBOdW1GbG9hdEFyZ1JlZ3MgPSAxMzsKKysKKytzdGF0aWMgaW5saW5lIGJvb2wgR2V0SW50 QXJnUmVnKHVpbnQzMl90IHVzZWRJbnRBcmdzLCBSZWdpc3Rlciogb3V0KSB7CisrICBpZiAodXNl ZEludEFyZ3MgPCBOdW1JbnRBcmdSZWdzKSB7CisrICAgICpvdXQgPSBSZWdpc3Rlcjo6RnJvbUNv ZGUocjMuY29kZSgpICsgdXNlZEludEFyZ3MpOworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysg IHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIGlubGluZSBib29sIEdldEZsb2F0QXJnUmVn KHVpbnQzMl90IHVzZWRGbG9hdEFyZ3MsIEZsb2F0UmVnaXN0ZXIqIG91dCkgeworKyAgaWYgKHVz ZWRGbG9hdEFyZ3MgPCBOdW1GbG9hdEFyZ1JlZ3MpIHsKKysgICAgKm91dCA9IEZsb2F0UmVnaXN0 ZXI6OkZyb21Db2RlKGYxLmNvZGUoKSArIHVzZWRGbG9hdEFyZ3MpOworKyAgICByZXR1cm4gdHJ1 ZTsKKysgIH0KKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIGlubGluZSBib29sIEdl dFRlbXBSZWdGb3JJbnRBcmcodWludDMyX3QgdXNlZEludEFyZ3MsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdXNlZEZsb2F0QXJncywgUmVnaXN0ZXIq IG91dCkgeworKyAgTU9aX0FTU0VSVCh1c2VkRmxvYXRBcmdzID09IDApOworKworKyAgaWYgKEdl dEludEFyZ1JlZyh1c2VkSW50QXJncywgb3V0KSkgeworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0K KysKKysgIHVzZWRJbnRBcmdzIC09IE51bUludEFyZ1JlZ3M7CisrICBpZiAodXNlZEludEFyZ3Mg Pj0gTnVtQ2FsbFRlbXBOb25BcmdSZWdzKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysg ICpvdXQgPSBDYWxsVGVtcE5vbkFyZ1JlZ3NbdXNlZEludEFyZ3NdOworKyAgcmV0dXJuIHRydWU7 CisrfQorKworKy8vIFBQQzY0IGluc3RydWN0aW9uIGZpZWxkIHBvc2l0aW9ucy4KKysvLyBQUEMg dXNlcyBiaWctZW5kaWFuIGJpdCBudW1iZXJpbmcgKGJpdCAwID0gTVNCKSwgYnV0IHdlIHN0b3Jl IGluc3RydWN0aW9ucworKy8vIGluIGEgdWludDMyX3Qgd2hlcmUgYml0IDAgPSBMU0IuIFRoZSBz aGlmdHMgYmVsb3cgYXJlIGluIExTQi0wIHRlcm1zLgorKy8vCisrLy8gICBbMDo1XSAgcHJpbWFy eSBvcGNvZGUgICAoT3Bjb2RlU2hpZnQ9MjYpCisrLy8gICBbNjoxMF0gIFJUL1JTL0JGL1RPICAg ICAoUlRTaGlmdD0yMSwgNSBiaXRzKQorKy8vICAgWzExOjE1XSBSQS9CSSAgICAgICAgICAgKFJB U2hpZnQ9MTYsIDUgYml0cykKKysvLyAgIFsxNjoyMF0gUkIvU0ggICAgICAgICAgIChSQlNoaWZ0 PTExLCA1IGJpdHMpCisrLy8gICBbMTY6MzFdIFNJL1VJL0QgICAgICAgICAoSW1tMTZTaGlmdD0w LCAxNiBiaXRzKQorKy8vICAgWzIxOjI1XSBzdWJvcCBiaXRzICAgICAgKHZhcmllcykKKysvLyAg IFsyMTozMF0gWE8gICAgICAgICAgICAgIChYLWZvcm07IEEvTS9NRC9NRFMgbmFycm93ZXIpCisr Ly8gICBbMzFdICAgIFJjIGJpdCAgICAgICAgICAoUmNTaGlmdD0wKQorKworK3N0YXRpYyBjb25z dCB1aW50MzJfdCBPcGNvZGVTaGlmdCA9IDI2OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcGNv ZGVCaXRzID0gNjsKKysKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUlRTaGlmdCA9IDIxOworK3N0 YXRpYyBjb25zdCB1aW50MzJfdCBSVEJpdHMgPSA1OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBS U1NoaWZ0ID0gMjE7Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJTQml0cyA9IDU7Cisrc3RhdGlj IGNvbnN0IHVpbnQzMl90IFJBU2hpZnQgPSAxNjsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUkFC aXRzID0gNTsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUkJTaGlmdCA9IDExOworK3N0YXRpYyBj b25zdCB1aW50MzJfdCBSQkJpdHMgPSA1OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSQ1NoaWZ0 ID0gNjsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUkNCaXRzID0gNTsKKysKKytzdGF0aWMgY29u c3QgdWludDMyX3QgQk9TaGlmdCA9IDIxOworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBCT0JpdHMg PSA1OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBCSVNoaWZ0ID0gMTY7Cisrc3RhdGljIGNvbnN0 IHVpbnQzMl90IEJJQml0cyA9IDU7CisrCisrc3RhdGljIGNvbnN0IHVpbnQzMl90IEltbTE2U2hp ZnQgPSAwOworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbW0xNkJpdHMgPSAxNjsKKysKKytzdGF0 aWMgY29uc3QgdWludDMyX3QgUmNTaGlmdCA9IDA7Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJj Qml0ID0gMTsKKysKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUlRNYXNrID0gKCgxIDw8IFJUQml0 cykgLSAxKSA8PCBSVFNoaWZ0OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSU01hc2sgPSAoKDEg PDwgUlNCaXRzKSAtIDEpIDw8IFJTU2hpZnQ7Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJBTWFz ayA9ICgoMSA8PCBSQUJpdHMpIC0gMSkgPDwgUkFTaGlmdDsKKytzdGF0aWMgY29uc3QgdWludDMy X3QgUkJNYXNrID0gKCgxIDw8IFJCQml0cykgLSAxKSA8PCBSQlNoaWZ0OworK3N0YXRpYyBjb25z dCB1aW50MzJfdCBJbW0xNk1hc2sgPSAoMSA8PCBJbW0xNkJpdHMpIC0gMTsKKytzdGF0aWMgY29u c3QgdWludDMyX3QgUmVnTWFzayA9ICgxIDw8IFJUQml0cykgLSAxOworKworK3N0YXRpYyBpbmxp bmUgdWludDMyX3QgUlQoUmVnaXN0ZXIgcikgeyByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8 IFJUU2hpZnQ7IH0KKytzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJUKEZsb2F0UmVnaXN0ZXIgcikg eworKyAgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSVFNoaWZ0OworK30KKytzdGF0aWMg aW5saW5lIHVpbnQzMl90IFJTKFJlZ2lzdGVyIHIpIHsgcmV0dXJuICh1aW50MzJfdClyLmNvZGUo KSA8PCBSU1NoaWZ0OyB9Cisrc3RhdGljIGlubGluZSB1aW50MzJfdCBSUyhGbG9hdFJlZ2lzdGVy IHIpIHsKKysgIHJldHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUlNTaGlmdDsKKyt9Cisrc3Rh dGljIGlubGluZSB1aW50MzJfdCBSQShSZWdpc3RlciByKSB7IHJldHVybiAodWludDMyX3Qpci5j b2RlKCkgPDwgUkFTaGlmdDsgfQorK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUkEoRmxvYXRSZWdp c3RlciByKSB7CisrICByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8IFJBU2hpZnQ7CisrfQor K3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUkIoUmVnaXN0ZXIgcikgeyByZXR1cm4gKHVpbnQzMl90 KXIuY29kZSgpIDw8IFJCU2hpZnQ7IH0KKytzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJCKEZsb2F0 UmVnaXN0ZXIgcikgeworKyAgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSQlNoaWZ0Owor K30KKysKKysvLyBTUFIgZW5jb2Rpbmc6IHRoZSBTUFIgbnVtYmVyIGlzIHNwbGl0IGFjcm9zcyBi aXRzIDExLTE1IGFuZCAxNi0yMCBpbiBhCisrLy8gc3dhcHBlZCBhcnJhbmdlbWVudC4gIFBQQ19T UFIoeCkgcHJvZHVjZXMgdGhlIHZhbHVlIHRvIE9SIGludG8gYW4KKysvLyBtdHNwci9tZnNwciBp bnN0cnVjdGlvbiBhdCB0aGUgUkIrUkEgcG9zaXRpb24gKGJpdHMgMTEtMjApLgorKyNkZWZpbmUg UFBDX1NQUih4KSAoKCgoaW50KSh4KSA+PiA1KSAmIDB4MWYpIDw8IDExIHwgKChpbnQpKHgpICYg MHgxZikgPDwgMTYpCisrCisrZW51bSBQUENPcGNvZGVzIHsKKysgIFBQQ19hZGQgPSAweDdDMDAw MjE0LAorKyAgUFBDX2FkZGMgPSAweDdDMDAwMDE0LAorKyAgUFBDX2FkZGUgPSAweDdDMDAwMTE0 LAorKyAgUFBDX2FkZGkgPSAweDM4MDAwMDAwLAorKyAgUFBDX2FkZGlzID0gMHgzQzAwMDAwMCwK KysgIFBQQ19hbmRfID0gMHg3QzAwMDAzOCwKKysgIC8vIGFuZGkuIGlzIGFsd2F5cyByZWNvcmQg Zm9ybSAobm8gbm9uLXJlY29yZCBhbmRpIGV4aXN0cykuCisrICBQUENfYW5kaV9kb3QgPSAweDcw MDAwMDAwLAorKyAgUFBDX2IgPSAweDQ4MDAwMDAwLAorKyAgUFBDX2JjID0gMHg0MDAwMDAwMCwK KysgIC8vIEVuY29kZWQgImJjbCAyMCwgbHQsICQrNCI6IFBDLXJlbGF0aXZlIGJyYW5jaC1hbmQt bGluayBieSA0IGJ5dGVzCisrICAvLyAobGFuZCBhdCB0aGUgbmV4dCBpbnN0cnVjdGlvbikgd2l0 aCBCTz0yMCAoYnJhbmNoIGFsd2F5cyk7IEJJPTAKKysgIC8vICg9bHQpIGlzIGRvbid0LWNhcmUg YmVjYXVzZSBCTz0yMCBmb3JjZXMgdGhlIGJyYW5jaC4gVXNlZCBieQorKyAgLy8gUG9vbExvYWRG UFJ7MzIsNjR9J3MgUE9XRVI4IHN0YW56YSBhbmQgUG9vbExvYWRTaW1kMTI4J3Mgc3RhbnphIHRv CisrICAvLyBzZWVkIExSIHdpdGggdGhlIGN1cnJlbnQgUEMgZm9yIHRoZSBzdWJzZXF1ZW50IG1m bHIrbGQgYmFzZQorKyAgLy8gY29tcHV0YXRpb24uIFVzZWQgYnkgcGF0Y2ggc2l0ZXMgdGhhdCB3 cml0ZSByYXcgaW5zdHJ1Y3Rpb24gbWVtb3J5CisrICAvLyAoUGF0Y2hDb25zdGFudFBvb2xMb2Fk LCBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucywgZXRjLikuIE5hbWVkIGZvcgorKyAgLy8gZ3JlcC1h YmlsaXR5IGFuZCB0byBhdm9pZCBtYWdpYy1udW1iZXIgY29waWVzLgorKyAgUFBDX2JjbF9hbHdh eXNfcGx1czQgPSAweDQyODAwMDA1LAorKyAgUFBDX2JjdHIgPSAweDRFODAwNDIwLAorKyAgUFBD X2JjY3RyID0gMHg0QzAwMDQyMCwKKysgIFBQQ19ibHIgPSAweDRFODAwMDIwLAorKyAgUFBDX2Nt cGQgPSAweDdDMjAwMDAwLAorKyAgUFBDX2NtcGRpID0gMHgyQzIwMDAwMCwKKysgIFBQQ19jbXBs ZCA9IDB4N0MyMDAwNDAsCisrICBQUENfY21wbGRpID0gMHgyODIwMDAwMCwKKysgIFBQQ19jbXB3 ID0gMHg3QzAwMDAwMCwKKysgIFBQQ19jbXB3aSA9IDB4MkMwMDAwMDAsCisrICBQUENfY21wbHcg PSAweDdDMDAwMDQwLAorKyAgUFBDX2NtcGx3aSA9IDB4MjgwMDAwMDAsCisrICBQUENfY250bHpk ID0gMHg3QzAwMDA3NCwKKysgIFBQQ19jbnRsencgPSAweDdDMDAwMDM0LAorKyAgUFBDX2NudHR6 ZCA9IDB4N0MwMDA0NzQsCisrICBQUENfY250dHp3ID0gMHg3QzAwMDQzNCwKKysgIFBQQ19jcmFu ZGMgPSAweDRDMDAwMTAyLAorKyAgUFBDX2Nyb3IgPSAweDRDMDAwMzgyLAorKyAgUFBDX2Nyb3Jj ID0gMHg0QzAwMDM0MiwKKysgIFBQQ19kaXZkID0gMHg3QzAwMDNEMiwKKysgIFBQQ19kaXZkdSA9 IDB4N0MwMDAzOTIsCisrICBQUENfZGl2dyA9IDB4N0MwMDAzRDYsCisrICBQUENfZGl2d3UgPSAw eDdDMDAwMzk2LAorKyAgLy8gUE9XRVI5IChJU0EgMy4wKSBtb2R1bG8gaW5zdHJ1Y3Rpb25zLgor KyAgUFBDX21vZHNkID0gMHg3QzAwMDYxMiwKKysgIFBQQ19tb2RzdyA9IDB4N0MwMDA2MTYsCisr ICBQUENfbW9kdWQgPSAweDdDMDAwMjEyLAorKyAgUFBDX21vZHV3ID0gMHg3QzAwMDIxNiwKKysg IFBQQ19leHRzYiA9IDB4N0MwMDA3NzQsCisrICBQUENfZXh0c2ggPSAweDdDMDAwNzM0LAorKyAg UFBDX2V4dHN3ID0gMHg3QzAwMDdCNCwKKysgIFBQQ19mYWJzID0gMHhGQzAwMDIxMCwKKysgIFBQ Q19mYWRkID0gMHhGQzAwMDAyQSwKKysgIFBQQ19mYWRkcyA9IDB4RUMwMDAwMkEsCisrICBQUENf ZmNwc2duID0gMHhGQzAwMDAxMCwKKysgIFBQQ19mY2ZpZCA9IDB4RkMwMDA2OUMsCisrICBQUENf ZmNmaWRzID0gMHhFQzAwMDY5QywKKysgIFBQQ19mY2ZpZHUgPSAweEZDMDAwNzlDLAorKyAgUFBD X2ZjZmlkdXMgPSAweEVDMDAwNzlDLAorKyAgUFBDX2ZjbXB1ID0gMHhGQzAwMDAwMCwKKysgIFBQ Q19mY3RpZCA9IDB4RkMwMDA2NUMsCisrICBQUENfZmN0aWR6ID0gMHhGQzAwMDY1RSwKKysgIFBQ Q19mY3RpZHV6ID0gMHhGQzAwMDc1RSwKKysgIFBQQ19mY3Rpd3ogPSAweEZDMDAwMDFFLAorKyAg UFBDX2ZkaXYgPSAweEZDMDAwMDI0LAorKyAgUFBDX2ZkaXZzID0gMHhFQzAwMDAyNCwKKysgIFBQ Q19mbXIgPSAweEZDMDAwMDkwLAorKyAgUFBDX2ZtdWwgPSAweEZDMDAwMDMyLAorKyAgUFBDX2Zt dWxzID0gMHhFQzAwMDAzMiwKKysgIFBQQ19mbmVnID0gMHhGQzAwMDA1MCwKKysgIFBQQ19mcmlt ID0gMHhGQzAwMDNEMCwKKysgIFBQQ19mcmlwID0gMHhGQzAwMDM5MCwKKysgIFBQQ19mcml6ID0g MHhGQzAwMDM1MCwKKysgIFBQQ19mcnNwID0gMHhGQzAwMDAxOCwKKysgIFBQQ19mc3ViID0gMHhG QzAwMDAyOCwKKysgIFBQQ19mc3VicyA9IDB4RUMwMDAwMjgsCisrICBQUENfZnNxcnQgPSAweEZD MDAwMDJDLAorKyAgUFBDX2ZzcXJ0cyA9IDB4RUMwMDAwMkMsCisrICBQUENfaXNlbCA9IDB4N0Mw MDAwMUUsCisrICAvLyBQT1dFUjEwIChJU0EgMy4xKS4gUlQgPSAoQ1JbQkldPT0xKSA/IDEgOiAw LiBYTz0zODQgYXQgYml0cyAyMS0zMC4KKysgIFBQQ19zZXRiYyA9IDB4N0MwMDAzMDAsCisrICAv LyBQT1dFUjEwIChJU0EgMy4xKS4gUlQgPSAoQ1JbQkldPT0wKSA/IDEgOiAwLiBYTz00MTYuCisr ICBQUENfc2V0YmNyID0gMHg3QzAwMDM0MCwKKysgIFBQQ19sYmFyeCA9IDB4N0MwMDAwNjgsCisr ICBQUENfbGJ6ID0gMHg4ODAwMDAwMCwKKysgIFBQQ19sYnp4ID0gMHg3QzAwMDBBRSwKKysgIFBQ Q19sZCA9IDB4RTgwMDAwMDAsCisrICBQUENfbGRhcnggPSAweDdDMDAwMEE4LAorKyAgUFBDX2xk eCA9IDB4N0MwMDAwMkEsCisrICBQUENfbGZkID0gMHhDODAwMDAwMCwKKysgIFBQQ19sZmR4ID0g MHg3QzAwMDRBRSwKKysgIFBQQ19sZml3YXggPSAweDdDMDAwNkFFLAorKyAgUFBDX2xmaXd6eCA9 IDB4N0MwMDA2RUUsCisrICBQUENfbGZzID0gMHhDMDAwMDAwMCwKKysgIFBQQ19sZnN4ID0gMHg3 QzAwMDQyRSwKKysgIFBQQ19saGEgPSAweEE4MDAwMDAwLAorKyAgUFBDX2xoYXJ4ID0gMHg3QzAw MDBFOCwKKysgIFBQQ19saGF4ID0gMHg3QzAwMDJBRSwKKysgIFBQQ19saHogPSAweEEwMDAwMDAw LAorKyAgUFBDX2xoenggPSAweDdDMDAwMjJFLAorKyAgUFBDX2x3YSA9IDB4RTgwMDAwMDIsCisr ICBQUENfbHdhcnggPSAweDdDMDAwMDI4LAorKyAgUFBDX2x3eiA9IDB4ODAwMDAwMDAsCisrICAv LyBYLWZvcm0gc2lnbi1leHRlbmRpbmcgd29yZCBsb2FkIChvcGNvZGUgMzEsIFhPPTM0MSkuIFNp bmdsZS1pbnNuCisrICAvLyBlcXVpdmFsZW50IG9mIGx3enggKyBleHRzdy4KKysgIFBQQ19sd2F4 ID0gMHg3QzAwMDJBQSwKKysgIFBQQ19sd3p4ID0gMHg3QzAwMDAyRSwKKysgIFBQQ19tY3J4cngg PSAweDdDMDAwNDgwLAorKyAgUFBDX21jcmZzID0gMHhGQzAwMDA4MCwKKysgIFBQQ19tZm9jcmYg PSAweDdDMTAwMDI2LAorKyAgUFBDX21mZnMgPSAweEZDMDAwNDhFLAorKyAgUFBDX21mc3ByID0g MHg3QzAwMDJBNiwKKysgIFBQQ19tZnZzcmQgPSAweDdDMDAwMDY2LAorKyAgUFBDX210Y3JmID0g MHg3QzAwMDEyMCwKKysgIFBQQ19tdGZzYjAgPSAweEZDMDAwMDhDLAorKyAgUFBDX210dnNyZCA9 IDB4N0MwMDAxNjYsCisrICAvLyBQT1dFUjgrIChJU0EgMi4wNykuIFZTUltYVF0uZHdbMF0gPSBz aWduX2V4dF82NChSQVszMjo2M10pLgorKyAgLy8gWE89MjExIGF0IGJpdHMgMjEtMzAuIENvbWJp bmVzIGV4dHN3ICsgbXR2c3JkIGludG8gb25lIGluc24uCisrICBQUENfbXR2c3J3YSA9IDB4N0Mw MDAxQTYsCisrICBQUENfbXR2c3J3cyA9IDB4N0MwMDAzMjYsCisrICBQUENfbXR2c3J3eiA9IDB4 N0MwMDAxRTYsCisrICBQUENfbXRzcHIgPSAweDdDMDAwM0E2LAorKyAgUFBDX211bGhkID0gMHg3 QzAwMDA5MiwKKysgIFBQQ19tdWxoZHUgPSAweDdDMDAwMDEyLAorKyAgUFBDX211bGh3dSA9IDB4 N0MwMDAwMTYsCisrICBQUENfbXVsbGkgPSAweDFDMDAwMDAwLAorKyAgUFBDX211bGxkID0gMHg3 QzAwMDFEMiwKKysgIFBQQ19tdWxsZG8gPSAweDdDMDAwNUQyLAorKyAgUFBDX211bGx3ID0gMHg3 QzAwMDFENiwKKysgIFBQQ19uZWcgPSAweDdDMDAwMEQwLAorKyAgUFBDX25vciA9IDB4N0MwMDAw RjgsCisrICBQUENfb3JfID0gMHg3QzAwMDM3OCwKKysgIFBQQ19vcmkgPSAweDYwMDAwMDAwLAor KyAgUFBDX29yaXMgPSAweDY0MDAwMDAwLAorKyAgUFBDX3BvcGNudGIgPSAweDdDMDAwMEY0LAor KyAgUFBDX3BvcGNudGQgPSAweDdDMDAwM0Y0LAorKyAgUFBDX3BvcGNudHcgPSAweDdDMDAwMkY0 LAorKyAgUFBDX2JyZCA9IDB4N0MwMDAxNzYsICAvLyBQT1dFUjEwOiBieXRlLXJldmVyc2UgZG91 Ymxld29yZCAoWC1mb3JtLCBYTz0xODcpCisrICBQUENfYnJoID0gMHg3QzAwMDFCNiwgIC8vIFBP V0VSMTA6IGJ5dGUtcmV2ZXJzZSBlYWNoIGhhbGZ3b3JkIChYLWZvcm0sIFhPPTIxOSkKKysgIFBQ Q19icncgPSAweDdDMDAwMTM2LCAgLy8gUE9XRVIxMDogYnl0ZS1yZXZlcnNlIGVhY2ggd29yZCAg ICAgKFgtZm9ybSwgWE89MTU1KQorKyAgUFBDX3JsZGNsID0gMHg3ODAwMDAxMCwKKysgIFBQQ19y bGRpY2wgPSAweDc4MDAwMDAwLAorKyAgUFBDX3JsZGNyID0gMHg3ODAwMDAxMiwKKysgIFBQQ19y bGRpY3IgPSAweDc4MDAwMDA0LAorKyAgUFBDX3JsZGltaSA9IDB4NzgwMDAwMEMsCisrICBQUENf cmx3aW1pID0gMHg1MDAwMDAwMCwKKysgIFBQQ19ybHdpbm0gPSAweDU0MDAwMDAwLAorKyAgUFBD X3Jsd25tID0gMHg1QzAwMDAwMCwKKysgIFBQQ19zbGQgPSAweDdDMDAwMDM2LAorKyAgUFBDX3Ns dyA9IDB4N0MwMDAwMzAsCisrICBQUENfc3JhZCA9IDB4N0MwMDA2MzQsCisrICBQUENfc3JhZGkg PSAweDdDMDAwNjc0LAorKyAgUFBDX3NyYXcgPSAweDdDMDAwNjMwLAorKyAgUFBDX3NyYXdpID0g MHg3QzAwMDY3MCwKKysgIFBQQ19zcmQgPSAweDdDMDAwNDM2LAorKyAgUFBDX3NydyA9IDB4N0Mw MDA0MzAsCisrICBQUENfc3RiID0gMHg5ODAwMDAwMCwKKysgIFBQQ19zdGJjeCA9IDB4N0MwMDA1 NkQsCisrICBQUENfc3RieCA9IDB4N0MwMDAxQUUsCisrICBQUENfc3RkID0gMHhGODAwMDAwMCwK KysgIFBQQ19zdGRjeCA9IDB4N0MwMDAxQUQsCisrICBQUENfc3RkdSA9IDB4RjgwMDAwMDEsCisr ICBQUENfc3RkeCA9IDB4N0MwMDAxMkEsCisrICBQUENfc3RmZCA9IDB4RDgwMDAwMDAsCisrICBQ UENfc3RmZHUgPSAweERDMDAwMDAwLAorKyAgUFBDX3N0ZmR4ID0gMHg3QzAwMDVBRSwKKysgIFBQ Q19zdGZzID0gMHhEMDAwMDAwMCwKKysgIFBQQ19zdGZzdSA9IDB4RDQwMDAwMDAsCisrICBQUENf c3Rmc3ggPSAweDdDMDAwNTJFLAorKyAgUFBDX3N0aCA9IDB4QjAwMDAwMDAsCisrICBQUENfc3Ro Y3ggPSAweDdDMDAwNUFELAorKyAgUFBDX3N0aHggPSAweDdDMDAwMzJFLAorKyAgUFBDX3N0dyA9 IDB4OTAwMDAwMDAsCisrICBQUENfc3R3eCA9IDB4N0MwMDAxMkUsCisrICBQUENfc3R3YnJ4ID0g MHg3QzAwMDUyQywKKysgIFBQQ19zdHdjeCA9IDB4N0MwMDAxMkQsCisrICBQUENfc3ViZiA9IDB4 N0MwMDAwNTAsCisrICBQUENfc3ViZmMgPSAweDdDMDAwMDEwLAorKyAgUFBDX3N1YmZlID0gMHg3 QzAwMDExMCwKKysgIFBQQ19zdWJmaWMgPSAweDIwMDAwMDAwLAorKyAgUFBDX3N5bmMgPSAweDdD MDAwNEFDLAorKyAgLy8gaXN5bmMg4oCUIGV4ZWN1dGlvbiBzeW5jaHJvbml6YXRpb24uIERpc2Nh cmRzIHByZWZldGNoZWQgaW5zdHJ1Y3Rpb25zIGFuZAorKyAgLy8gZm9yY2VzIGEgcmVmZXRjaCty ZWV4ZWN1dGUgb2YgZXZlcnl0aGluZyBwYXN0IHRoZSBiYXJyaWVyOyBwcmV2ZW50cworKyAgLy8g c3BlY3VsYXRpdmUgYnlwYXNzLiBVc2VkIGZvciBTcGVjdHJlIHYxIG1pdGlnYXRpb24gaW4gc3Bl Y3VsYXRpb25CYXJyaWVyLgorKyAgLy8gRW5jb2Rpbmc6IGJ5dGVzIGAyYyAwMSAwMCA0Y2AgKExF KSA9IDB4NEMwMDAxMkMuCisrICBQUENfaXN5bmMgPSAweDRDMDAwMTJDLAorKyAgUFBDX3RyYXAg PSAweDdGRTAwMDA4LAorKyAgUFBDX3R3ID0gMHg3QzAwMDAwOCwKKysgIFBQQ194b3JfID0gMHg3 QzAwMDI3OCwKKysgIFBQQ194b3JpID0gMHg2ODAwMDAwMCwKKysgIFBQQ194b3JpcyA9IDB4NkMw MDAwMDAsCisrICAvLyBWTVggcmVnaXN0ZXIgbG9hZC9zdG9yZSAoWC1mb3JtLCBvcGNvZGUgMzEs IFhPPTEwMy8yMzEpLgorKyAgLy8gT3BlcmF0ZSBvbiByYXcgVlIwLTMxICh0aGUgbHZ4L3N0dngg bW5lbW9uaWNzIHByZWRhdGUgVlNYLCBzbyB0aGUKKysgIC8vIGFzc2VtYmxlciBleHBvc2VzIHRo ZW0gd2l0aCBhIHVpbnQ4X3QgVlIgaW5kZXggcmF0aGVyIHRoYW4gdmlhIHRoZQorKyAgLy8gVlNS LW5hbWVzcGFjZSBGbG9hdFJlZ2lzdGVyIG92ZXJsb2FkcyB1c2VkIGZvciBseHZ4L3N0eHZ4LikK KysgIFBQQ19sdnggPSAweDdDMDAwMENFLAorKyAgUFBDX2x4dmQyeCA9IDB4N0MwMDA2OTgsCisr ICBQUENfbHh2eCA9IDB4N0MwMDAyMTgsCisrICBQUENfbWZ2c3JsZCA9IDB4N0MwMDAyNjYsCisr ICBQUENfbXR2c3JkZCA9IDB4N0MwMDAzNjYsCisrICBQUENfc3R2eCA9IDB4N0MwMDAxQ0UsCisr ICBQUENfc3R4dmQyeCA9IDB4N0MwMDA3OTgsCisrICBQUENfc3R4dnggPSAweDdDMDAwMzE4LAor KyAgUFBDX3ZhZGR1Ym0gPSAweDEwMDAwMDAwLAorKyAgUFBDX3Zhdmd1YiA9IDB4MTAwMDA0MDIs CisrICBQUENfdmF2Z3VoID0gMHgxMDAwMDQ0MiwKKysgIFBQQ192Y21wZXF1YiA9IDB4MTAwMDAw MDYsCisrICBQUENfdmNtcGVxdWggPSAweDEwMDAwMDQ2LAorKyAgUFBDX3ZjbXBlcXV3ID0gMHgx MDAwMDA4NiwKKysgIFBQQ192Y21wZXF1ZCA9IDB4MTAwMDAwQzcsCisrICBQUENfdmNtcGd0c2Ig PSAweDEwMDAwMzA2LAorKyAgUFBDX3ZjbXBndHNoID0gMHgxMDAwMDM0NiwKKysgIFBQQ192Y21w Z3RzdyA9IDB4MTAwMDAzODYsCisrICBQUENfdmNtcGd0c2QgPSAweDEwMDAwM0M3LAorKyAgUFBD X3ZjbXBndHViID0gMHgxMDAwMDIwNiwKKysgIFBQQ192Y21wZ3R1aCA9IDB4MTAwMDAyNDYsCisr ICBQUENfdmNtcGd0dXcgPSAweDEwMDAwMjg2LAorKyAgUFBDX3ZjbXBndHVkID0gMHgxMDAwMDJD NywKKysgIFBQQ192Y21wbmViID0gMHgxMDAwMDAwNywgIC8vIFBPV0VSOSAoSVNBIDMuMCkKKysg IFBQQ192Y21wbmVoID0gMHgxMDAwMDA0NywgIC8vIFBPV0VSOQorKyAgUFBDX3ZjbXBuZXcgPSAw eDEwMDAwMDg3LCAgLy8gUE9XRVI5CisrICBQUENfdmFkZHVobSA9IDB4MTAwMDAwNDAsCisrICBQ UENfdmFkZHV3bSA9IDB4MTAwMDAwODAsCisrICBQUENfdmFkZHVkbSA9IDB4MTAwMDAwQzAsCisr ICBQUENfdmFkZHVicyA9IDB4MTAwMDAyMDAsCisrICBQUENfdmFkZHVocyA9IDB4MTAwMDAyNDAs CisrICBQUENfdmFkZHNicyA9IDB4MTAwMDAzMDAsCisrICBQUENfdmFkZHNocyA9IDB4MTAwMDAz NDAsCisrICBQUENfdm1heHNiID0gMHgxMDAwMDEwMiwKKysgIFBQQ192bWF4c2ggPSAweDEwMDAw MTQyLAorKyAgUFBDX3ZtYXhzdyA9IDB4MTAwMDAxODIsCisrICBQUENfdm1heHNkID0gMHgxMDAw MDFDMiwKKysgIFBQQ192bWF4dWIgPSAweDEwMDAwMDAyLAorKyAgUFBDX3ZtYXh1aCA9IDB4MTAw MDAwNDIsCisrICBQUENfdm1heHV3ID0gMHgxMDAwMDA4MiwKKysgIFBQQ192bWhyYWRkc2hzID0g MHgxMDAwMDAyMSwKKysgIFBQQ192bXJnaGIgPSAweDEwMDAwMDBDLAorKyAgUFBDX3ZtcmdoaCA9 IDB4MTAwMDAwNEMsCisrICBQUENfdm1yZ2h3ID0gMHgxMDAwMDA4QywKKysgIFBQQ192bXJnbGIg PSAweDEwMDAwMTBDLAorKyAgUFBDX3ZtcmdsaCA9IDB4MTAwMDAxNEMsCisrICBQUENfdm1yZ2x3 ID0gMHgxMDAwMDE4QywKKysgIFBQQ192bWluc2IgPSAweDEwMDAwMzAyLAorKyAgUFBDX3ZtaW5z aCA9IDB4MTAwMDAzNDIsCisrICBQUENfdm1pbnN3ID0gMHgxMDAwMDM4MiwKKysgIFBQQ192bWlu dWIgPSAweDEwMDAwMjAyLAorKyAgUFBDX3ZtaW51aCA9IDB4MTAwMDAyNDIsCisrICBQUENfdm1p bnV3ID0gMHgxMDAwMDI4MiwKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgcGVyLWxhbmUgaW50ZWdl ciBuZWdhdGUuIFZSQSBmaWVsZCBjYXJyaWVzIHRoZSBzdWJvcAorKyAgLy8gY29kZTogNiBmb3Ig dm5lZ3csIDcgZm9yIHZuZWdkLiBCYXNlIFhPIGlzIDB4NjAyLgorKyAgUFBDX3ZuZWd3ID0gMHgx MDA2MDYwMiwKKysgIFBQQ192bmVnZCA9IDB4MTAwNzA2MDIsCisrICBQUENfdm1sYWRkdWhtID0g MHgxMDAwMDAyMiwKKysgIFBQQ192bXVsdXdtID0gMHgxMDAwMDA4OSwKKysgIFBQQ192bXVsbGQg PSAweDEwMDAwMUM5LCAgICAgIC8vIFBPV0VSMTAgKFhPPTQ1NywgdmVjdG9yIGk2NHgyIG11bHRp cGx5IGxvdykKKysgIFBQQ192bXVsZXNiID0gMHgxMDAwMDMwOCwKKysgIFBQQ192bXVsZXViID0g MHgxMDAwMDIwOCwKKysgIFBQQ192bXVsZXNoID0gMHgxMDAwMDM0OCwKKysgIFBQQ192bXVsZXVo ID0gMHgxMDAwMDI0OCwKKysgIFBQQ192bXVsZXN3ID0gMHgxMDAwMDM4OCwKKysgIFBQQ192bXVs ZXV3ID0gMHgxMDAwMDI4OCwKKysgIFBQQ192bXVsb3NiID0gMHgxMDAwMDEwOCwKKysgIFBQQ192 bXVsb3ViID0gMHgxMDAwMDAwOCwKKysgIFBQQ192bXVsb3NoID0gMHgxMDAwMDE0OCwKKysgIFBQ Q192bXVsb3VoID0gMHgxMDAwMDA0OCwKKysgIFBQQ192bXVsb3N3ID0gMHgxMDAwMDE4OCwKKysg IFBQQ192bXVsb3V3ID0gMHgxMDAwMDA4OCwKKysgIFBQQ192bXN1bXNobSA9IDB4MTAwMDAwMjgs CisrICBQUENfdm1zdW11aG0gPSAweDEwMDAwMDI2LAorKyAgUFBDX3ZwZXJtID0gMHgxMDAwMDAy QiwKKysgIC8vIFZYLWZvcm0sIG9wY29kZSA0LCBYTz0weDU0Qy4gUGVyLWJ5dGUgYml0LXBlcm11 dGUgb2YgYSAxMjgtYml0IHZhbHVlOworKyAgLy8gcmVzdWx0IDE2LWJpdCBiaXRtYXAgbGFuZHMg aW4gZHcwIGxvdyAxNiBiaXRzLCByZWNvdmVyYWJsZSB2aWEgbWZ2c3JkLgorKyAgLy8gQXZhaWxh YmxlIG9uIFBPV0VSOCsgKElTQSAyLjA3KS4KKysgIFBQQ192YnBlcm1xID0gMHgxMDAwMDU0QywK KysgIC8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBFeHRyYWN0IE1hc2suIFZYLWZvcm0sIG9w Y29kZSA0LCBYTz0weDY0MiwKKysgIC8vIHdpdGggVUlNIGF0IGJpdHMgMTEuLjE1IHNlbGVjdGlu ZyBsYW5lIHdpZHRoOiA4PWJ5dGUsIDk9aGFsZndvcmQsCisrICAvLyAxMD13b3JkLCAxMT1kb3Vi bGV3b3JkLiBSVCBpcyBhIEdQUiAobG93IE4gYml0cyA9IHdhc20gYml0bWFzaykuCisrICBQUENf dmV4dHJhY3RibSA9IDB4MTAwODA2NDIsCisrICBQUENfdmV4dHJhY3RobSA9IDB4MTAwOTA2NDIs CisrICBQUENfdmV4dHJhY3R3bSA9IDB4MTAwQTA2NDIsCisrICBQUENfdmV4dHJhY3RkbSA9IDB4 MTAwQjA2NDIsCisrICAvLyBQT1dFUjEwIHZlY3RvciBpbnNlcnQgZnJvbSBHUFIgYXQgaW1tZWRp YXRlIGJ5dGUgb2Zmc2V0OgorKyAgLy8gICB2aW5zdyBWUlQsIFJCLCBVSU0gICBWUlRbVUlNKjg6 VUlNKjgrMzFdIOKGkCBSQlszMjo2M10KKysgIC8vICAgdmluc2QgVlJULCBSQiwgVUlNICAgVlJU W1VJTSo4OlVJTSo4KzYzXSDihpAgUkJbMDo2M10KKysgIC8vIFZYLWZvcm0sIG9wY29kZSA0LiBS QiBhdCBiaXRzIDE2Li4yMCwgVUlNIGF0IGJpdHMgMTEuLjE1LgorKyAgUFBDX3ZpbnN3ID0gMHgx MDAwMDBDRiwgIC8vIFBPV0VSMTAgKFhPPTIwNykKKysgIFBQQ192aW5zZCA9IDB4MTAwMDAxQ0Ys ICAvLyBQT1dFUjEwIChYTz00NjMpCisrICAvLyBQT1dFUjEwIHZlY3RvciBpbnNlcnQgYnl0ZS9o YWxmd29yZCBmcm9tIEdQUiB3aXRoIHJlZ2lzdGVyLXN1cHBsaWVkCisrICAvLyAocmlnaHQtaW5k ZXhlZCA9IExFLW5hdHVyYWwpIGJ5dGUgcG9zaXRpb246CisrICAvLyAgIHZpbnNicnggVlJULCBS QSwgUkIgICBWUlQuYnl0ZVtSQSAmIDB4Rl0gIOKGkCBSQiAmIDB4RkYKKysgIC8vICAgdmluc2hy eCBWUlQsIFJBLCBSQiAgIFZSVC5od29yZFsoUkEgJiAweEUpLzJdIOKGkCBSQiAmIDB4RkZGRgor KyAgLy8gVlgtZm9ybSwgb3Bjb2RlIDQuIFJBIGF0IGJpdHMgMTYuLjIwLCBSQiBhdCBiaXRzIDEx Li4xNS4KKysgIFBQQ192aW5zYnJ4ID0gMHgxMDAwMDMwRiwgIC8vIFBPV0VSMTAgKFhPPTc4MykK KysgIFBQQ192aW5zaHJ4ID0gMHgxMDAwMDM0RiwgIC8vIFBPV0VSMTAgKFhPPTg0NykKKysgIC8v IFBPV0VSOSAoSVNBIDMuMCkgdmVjdG9yIGluc2VydCBieXRlL2hhbGZ3b3JkIGZyb20gVlIgYXQg aW1tZWRpYXRlCisrICAvLyBieXRlIHBvc2l0aW9uOgorKyAgLy8gICB2aW5zZXJ0YiBWUlQsIFZS QiwgVUlNICBWUlQuYnl0ZVtVSU1dICAgICAg4oaQIFZSQi5ieXRlWzddICAgIChCRSkKKysgIC8v ICAgdmluc2VydGggVlJULCBWUkIsIFVJTSAgVlJULmh3b3JkW1VJTS4uKzFdIOKGkCBWUkIuYnl0 ZVs2Li43XSAoQkUpCisrICAvLyBWLWZvcm0sIG9wY29kZSA0LiBWUkIgYXQgYml0cyAxMS4uMTUs IFVJTSBhdCBiaXRzIDE2Li4yMC4gU2ltZDEyOAorKyAgLy8gbGl2ZXMgaW4gVlNSMzItNjMgKD0g VlIwLTMxKSwgc28gdGhlIFYtZm9ybSBWUlQgZmllbGQgYWRkcmVzc2VzIG91cgorKyAgLy8gU2lt ZDEyOCBzdG9yYWdlIHZpYSBgZW5jb2RpbmcoKSAmIDMxYC4KKysgIFBQQ192aW5zZXJ0YiA9IDB4 MTAwMDAzMEQsICAvLyBQT1dFUjkgKFhPPTc4MSkKKysgIFBQQ192aW5zZXJ0aCA9IDB4MTAwMDAz NEQsICAvLyBQT1dFUjkgKFhPPTg0NSkKKysgIFBQQ192ZXh0cmFjdHViID0gMHgxMDAwMDIwRCwg IC8vIFBPV0VSOSAoWE89NTI1KQorKyAgUFBDX3ZleHRyYWN0dWggPSAweDEwMDAwMjRELCAgLy8g UE9XRVI5IChYTz01ODkpCisrICBQUENfdnNwbHRpc2IgPSAweDEwMDAwMzBDLCAgICAvLyBQT1dF UjcrIChYTz03ODAsIHNwbGF0IDUtYml0IFNJTU0gdG8gYWxsIDE2IGJ5dGUgbGFuZXMpCisrICBQ UENfdnNwbHRpc2ggPSAweDEwMDAwMzRDLCAgICAvLyBQT1dFUjcrIChYTz04NDQsIHNwbGF0IDUt Yml0IFNJTU0gdG8gYWxsIDggaTE2IGxhbmVzKQorKyAgUFBDX3ZzcGx0aXN3ID0gMHgxMDAwMDM4 QywgICAgLy8gUE9XRVI3KyAoWE89OTA4LCBzcGxhdCA1LWJpdCBTSU1NIHRvIGFsbCA0IGkzMiBs YW5lcykKKysgIFBQQ192cG9wY250YiA9IDB4MTAwMDA3MDMsCisrICBQUENfdnNsYiA9IDB4MTAw MDAxMDQsCisrICBQUENfdnNsZCA9IDB4MTAwMDA1QzQsCisrICBQUENfdnNsZG9pID0gMHgxMDAw MDAyQywKKysgIFBQQ192c2xoID0gMHgxMDAwMDE0NCwKKysgIFBQQ192c2xvID0gMHgxMDAwMDQw QywKKysgIFBQQ192c2x3ID0gMHgxMDAwMDE4NCwKKysgIFBQQ192c3BsdGIgPSAweDEwMDAwMjBD LAorKyAgUFBDX3ZzcGx0aCA9IDB4MTAwMDAyNEMsCisrICBQUENfdnNyYWIgPSAweDEwMDAwMzA0 LAorKyAgUFBDX3ZzcmFkID0gMHgxMDAwMDNDNCwKKysgIFBQQ192c3JhaCA9IDB4MTAwMDAzNDQs CisrICBQUENfdnNyYXcgPSAweDEwMDAwMzg0LAorKyAgUFBDX3ZzcmIgPSAweDEwMDAwMjA0LAor KyAgUFBDX3ZzcmQgPSAweDEwMDAwNkM0LAorKyAgUFBDX3ZzcmggPSAweDEwMDAwMjQ0LAorKyAg UFBDX3Zzcm8gPSAweDEwMDAwNDRDLAorKyAgUFBDX3ZzcncgPSAweDEwMDAwMjg0LAorKyAgUFBD X3Zwa3Noc3MgPSAweDEwMDAwMThFLAorKyAgUFBDX3Zwa3NodXMgPSAweDEwMDAwMTBFLAorKyAg UFBDX3Zwa3N3c3MgPSAweDEwMDAwMUNFLAorKyAgUFBDX3Zwa3N3dXMgPSAweDEwMDAwMTRFLAor KyAgUFBDX3Z1cGtoc2IgPSAweDEwMDAwMjBFLAorKyAgUFBDX3Z1cGtoc2ggPSAweDEwMDAwMjRF LAorKyAgUFBDX3Z1cGtoc3cgPSAweDEwMDAwNjRFLAorKyAgUFBDX3Z1cGtsc2IgPSAweDEwMDAw MjhFLAorKyAgUFBDX3Z1cGtsc2ggPSAweDEwMDAwMkNFLAorKyAgUFBDX3Z1cGtsc3cgPSAweDEw MDAwNkNFLAorKyAgUFBDX3ZzdWJ1Ym0gPSAweDEwMDAwNDAwLAorKyAgUFBDX3ZzdWJ1aG0gPSAw eDEwMDAwNDQwLAorKyAgUFBDX3ZzdWJ1d20gPSAweDEwMDAwNDgwLAorKyAgUFBDX3ZzdWJ1ZG0g PSAweDEwMDAwNEMwLAorKyAgUFBDX3ZzdWJ1YnMgPSAweDEwMDAwNjAwLAorKyAgUFBDX3ZzdWJ1 aHMgPSAweDEwMDAwNjQwLAorKyAgUFBDX3ZzdWJzYnMgPSAweDEwMDAwNzAwLAorKyAgUFBDX3Zz dWJzaHMgPSAweDEwMDAwNzQwLAorKyAgUFBDX3hzY3ZkcHNwbiA9IDB4RjAwMDA0MkMsCisrICBQ UENfeHNjdnNwZHBuID0gMHhGMDAwMDUyQywKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFy IEZQMTYgY29udmVyc2lvbnMsIFhYMi1mb3JtLiBUaGUgVUlNCisrICAvLyBkaXNhbWJpZ3VhdG9y IGlzIGJha2VkIGludG8gdGhlIGNvbnN0YW50ICh4c2N2ZHBocD0xNywgeHNjdmhwZHA9MTYpLgor KyAgLy8gRW5jb2RpbmdzIGNyb3NzLWNoZWNrZWQgYWdhaW5zdCBiaW51dGlscyB3aXRoIGAubWFj aGluZSBwb3dlcjlgLgorKyAgUFBDX3hzY3ZkcGhwID0gMHhGMDExMDU2QywKKysgIFBQQ194c2N2 aHBkcCA9IDB4RjAxMDA1NkMsCisrICAvLyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBWU1ggZXh0 cmFjdCBiaWFzZWQgZXhwb25lbnQsIFhYMi1mb3JtLgorKyAgLy8gWFQuZHdvcmRbMF0gPSAoemVy byB8fCBiaWFzZWRfZXhwXzExYml0KSwgWFQuZHdvcmRbMV0gPSAwLiBYTz0zNDcKKysgIC8vIChz aGFyZXMgWE8gd2l0aCB4c2N2e2RwLGhwfXtocCxkcH0g4oCUIGRpc2FtYmlndWF0ZWQgYnkgYml0 cyAxNi0yMD0wKS4KKysgIC8vIEVuY29kaW5nIGNyb3NzLWNoZWNrZWQgYWdhaW5zdCBiaW51dGls cyB3aXRoIGAubWFjaGluZSBwb3dlcjlgLgorKyAgUFBDX3hzeGV4cGRwID0gMHhGMDAwMDU2QywK KysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgbG9hZC9zdG9yZSwgWC1mb3JtIChv cGNvZGUgMzEpLgorKyAgLy8gbHhzaWh6eCB6ZXJvLWV4dGVuZHM7IHN0eHNpaHggd3JpdGVzIDE2 IGJpdHMgZnJvbSBWU1IgZHdvcmQgMAorKyAgLy8gd29yZCAxJ3MgbG93IGhhbGZ3b3JkLgorKyAg UFBDX2x4c2loenggPSAweDdDMDAwNjVBLAorKyAgUFBDX3N0eHNpaHggPSAweDdDMDAwNzVBLAor KyAgLy8gUE9XRVI5IHNjYWxhciBWU1ggbWF4L21pbiB3aXRoIEphdmEvSmF2YVNjcmlwdCBzZW1h bnRpY3Mg4oCUIGhhbmRsZXMKKysgIC8vIMKxMCBhbmQgTmFOIGlkZW50aWNhbGx5IHRvIE1hdGgu bWF4L01hdGgubWluIGluIEVDTUEtMjYyIChjb3ZlcnMKKysgIC8vIDE5IGNvcm5lciBjYXNlcyBh Z2FpbnN0IHRoZSBKUyBzaGVsbCkuCisrICAvLyBYWDMtZm9ybSwgcHJpbWFyeSBvcGNvZGUgNjAs IFhPPTE0NCAobWF4KSAvIFhPPTE1MiAobWluKS4KKysgIFBQQ194c21heGpkcCA9IDB4RjAwMDA0 ODAsCisrICBQUENfeHNtaW5qZHAgPSAweEYwMDAwNEMwLAorKyAgUFBDX3h4YnJkID0gMHhGMDE3 MDc2QywKKysgIFBQQ194dmFic2RwID0gMHhGMDAwMDc2NCwKKysgIFBQQ194dmFic3NwID0gMHhG MDAwMDY2NCwKKysgIFBQQ194dmFkZGRwID0gMHhGMDAwMDMwMCwKKysgIFBQQ194dmFkZHNwID0g MHhGMDAwMDIwMCwKKysgIFBQQ194dmNtcGVxZHAgPSAweEYwMDAwMzE4LAorKyAgUFBDX3h2Y21w ZXFzcCA9IDB4RjAwMDAyMTgsCisrICBQUENfeHZjbXBnZWRwID0gMHhGMDAwMDM5OCwKKysgIFBQ Q194dmNtcGdlc3AgPSAweEYwMDAwMjk4LAorKyAgUFBDX3h2Y21wZ3RkcCA9IDB4RjAwMDAzNTgs CisrICBQUENfeHZjbXBndHNwID0gMHhGMDAwMDI1OCwKKysgIFBQQ194dmN2ZHBzcCA9IDB4RjAw MDA2MjQsCisrICBQUENfeHZjdmRwc3h3cyA9IDB4RjAwMDAzNjAsCisrICBQUENfeHZjdmRwdXh3 cyA9IDB4RjAwMDAzMjAsCisrICBQUENfeHZjdnNwZHAgPSAweEYwMDAwNzI0LAorKyAgUFBDX3h2 Y3ZzcHN4d3MgPSAweEYwMDAwMjYwLAorKyAgUFBDX3h2Y3ZzcHV4d3MgPSAweEYwMDAwMjIwLAor KyAgUFBDX3h2Y3ZzeHdkcCA9IDB4RjAwMDAzRTAsCisrICBQUENfeHZjdnN4d3NwID0gMHhGMDAw MDJFMCwKKysgIFBQQ194dmN2dXh3ZHAgPSAweEYwMDAwM0EwLAorKyAgUFBDX3h2Y3Z1eHdzcCA9 IDB4RjAwMDAyQTAsCisrICBQUENfeHZkaXZkcCA9IDB4RjAwMDAzQzAsCisrICBQUENfeHZkaXZz cCA9IDB4RjAwMDAyQzAsCisrICBQUENfeHZtYWRkYWRwID0gMHhGMDAwMDMwOCwKKysgIFBQQ194 dm1hZGRhc3AgPSAweEYwMDAwMjA4LAorKyAgUFBDX3h2bWF4ZHAgPSAweEYwMDAwNzAwLAorKyAg UFBDX3h2bWF4c3AgPSAweEYwMDAwNjAwLAorKyAgUFBDX3h2bWluZHAgPSAweEYwMDAwNzQwLAor KyAgUFBDX3h2bWluc3AgPSAweEYwMDAwNjQwLAorKyAgUFBDX3h2bXVsZHAgPSAweEYwMDAwMzgw LAorKyAgUFBDX3h2bXVsc3AgPSAweEYwMDAwMjgwLAorKyAgUFBDX3h2bmVnZHAgPSAweEYwMDAw N0U0LAorKyAgUFBDX3h2bm1zdWJhZHAgPSAweEYwMDAwNzg4LAorKyAgUFBDX3h2bm1zdWJhc3Ag PSAweEYwMDAwNjg4LAorKyAgUFBDX3h2bmVnc3AgPSAweEYwMDAwNkU0LAorKyAgUFBDX3h2cmRw aWMgPSAweEYwMDAwM0FDLAorKyAgUFBDX3h2cmRwaW0gPSAweEYwMDAwM0U0LAorKyAgUFBDX3h2 cmRwaXAgPSAweEYwMDAwM0E0LAorKyAgUFBDX3h2cmRwaXogPSAweEYwMDAwMzY0LAorKyAgUFBD X3h2cnNwaWMgPSAweEYwMDAwMkFDLAorKyAgUFBDX3h2cnNwaW0gPSAweEYwMDAwMkU0LAorKyAg UFBDX3h2cnNwaXAgPSAweEYwMDAwMkE0LAorKyAgUFBDX3h2cnNwaXogPSAweEYwMDAwMjY0LAor KyAgUFBDX3h2c3FydGRwID0gMHhGMDAwMDMyQywKKysgIFBQQ194dnNxcnRzcCA9IDB4RjAwMDAy MkMsCisrICBQUENfeHZzdWJkcCA9IDB4RjAwMDAzNDAsCisrICBQUENfeHZzdWJzcCA9IDB4RjAw MDAyNDAsCisrICBQUENfeHhleHRyYWN0dXcgPSAweEYwMDAwMjk0LAorKyAgUFBDX3h4aW5zZXJ0 dyA9IDB4RjAwMDAyRDQsCisrICBQUENfeHhsYW5kID0gMHhGMDAwMDQxMCwKKysgIFBQQ194eGxh bmRjID0gMHhGMDAwMDQ1MCwKKysgIFBQQ194eGxub3IgPSAweEYwMDAwNTEwLAorKyAgUFBDX3h4 bG9yID0gMHhGMDAwMDQ5MCwKKysgIFBQQ194eGx4b3IgPSAweEYwMDAwNEQwLAorKyAgUFBDX3h4 cGVybWRpID0gMHhGMDAwMDA1MCwKKysgIFBQQ194eHNlbCA9IDB4RjAwMDAwMzAsCisrICBQUENf eHhzcGx0aWIgPSAweEYwMDAwMkQwLCAgLy8gUE9XRVI5IChJU0EgMy4wKTogWFgxLWZvcm0sIG5v IFJjCisrICBQUENfeHhzcGx0dyA9IDB4RjAwMDAyOTAsCisrCisrICAvLyBTaW1wbGlmaWVkIG1u ZW1vbmljcy4KKysgIFBQQ19tciA9IFBQQ19vcl8sCisrICBQUENfbm90ID0gUFBDX25vciwKKysg IFBQQ19ub3AgPSBQUENfb3JpLAorKyAgUFBDX2x3c3luYyA9IFBQQ19zeW5jIHwgKDEgPDwgMjEp LAorKworKyAgUFBDX01BSk9SX09QQ09ERV9NQVNLID0gMHhGQzAwMDAwMAorK307CisrCisrc3Rh dGljIGNvbnN0IHVpbnQzMl90IE5vcEluc3QgPSAodWludDMyX3QpUFBDX25vcDsKKytzdGF0aWMg Y29uc3QgdWludDMyX3QgUFBDX1NUQU5aQV9MRU5HVEggPSAxNjsKKysKKytjbGFzcyBJbnN0cnVj dGlvbjsKKytjbGFzcyBJbnN0UmVnOworK2NsYXNzIEluc3RJbW07CisrY2xhc3MgQk9mZkltbTE2 OworK2NsYXNzIEpPZmZJbW0yNjsKKysKKysvLyBQUEM2NCBiYXNlIGluc3RydWN0aW9uIHR5cGU6 IGEgc2luZ2xlIDMyLWJpdCB3b3JkLgorK2NsYXNzIEluc3RydWN0aW9uIHsKKysgcHJvdGVjdGVk OgorKyAgdWludDMyX3QgZGF0YTsKKysKKysgcHVibGljOgorKyAgZXhwbGljaXQgSW5zdHJ1Y3Rp b24odWludDMyX3QgZGF0YV8pIDogZGF0YShkYXRhXykge30KKysgIGV4cGxpY2l0IEluc3RydWN0 aW9uKFBQQ09wY29kZXMgb3ApIDogZGF0YSgodWludDMyX3Qpb3ApIHt9CisrCisrICB1aW50MzJf dCBlbmNvZGUoKSBjb25zdCB7IHJldHVybiBkYXRhOyB9CisrCisrICB2b2lkIG1ha2VOb3AoKSB7 IGRhdGEgPSBOb3BJbnN0OyB9CisrICB2b2lkIG1ha2VPcF9tdGN0cihSZWdpc3RlciByKSB7Cisr ICAgIGRhdGEgPSBQUENfbXRzcHIgfCAoKHVpbnQzMl90KXIuY29kZSgpKSA8PCAyMSB8IFBQQ19T UFIoOSk7CisrICB9CisrICB2b2lkIG1ha2VPcF9iY3RyKHVpbnQzMl90IGxpbmtCaXQgPSAwKSB7 IGRhdGEgPSBQUENfYmN0ciB8IGxpbmtCaXQ7IH0KKysKKysgIHZvaWQgc2V0RGF0YSh1aW50MzJf dCBkYXRhKSB7IHRoaXMtPmRhdGEgPSBkYXRhOyB9CisrCisrICBjb25zdCBJbnN0cnVjdGlvbiYg b3BlcmF0b3I9KGNvbnN0IEluc3RydWN0aW9uJiBzcmMpIHsKKysgICAgZGF0YSA9IHNyYy5kYXRh OworKyAgICByZXR1cm4gKnRoaXM7CisrICB9CisrCisrICB1aW50MzJfdCBleHRyYWN0Qml0KHVp bnQzMl90IGJpdCkgY29uc3QgeyByZXR1cm4gKGVuY29kZSgpID4+IGJpdCkgJiAxOyB9CisrICB1 aW50MzJfdCBleHRyYWN0Qml0RmllbGQodWludDMyX3QgaGksIHVpbnQzMl90IGxvKSBjb25zdCB7 CisrICAgIHJldHVybiAoZW5jb2RlKCkgPj4gbG8pICYgKCgyIDw8IChoaSAtIGxvKSkgLSAxKTsK KysgIH0KKysKKysgIHVpbnQzMl90IGV4dHJhY3RPcGNvZGUoKSBjb25zdCB7IHJldHVybiBkYXRh ICYgUFBDX01BSk9SX09QQ09ERV9NQVNLOyB9CisrICBib29sIGlzT3Bjb2RlKHVpbnQzMl90IG9w KSBjb25zdCB7CisrICAgIHJldHVybiBleHRyYWN0T3Bjb2RlKCkgPT0gKG9wICYgUFBDX01BSk9S X09QQ09ERV9NQVNLKTsKKysgIH0KKysKKysgIHVpbnQzMl90IGV4dHJhY3RSVCgpIGNvbnN0IHsK KysgICAgcmV0dXJuIGV4dHJhY3RCaXRGaWVsZChSVFNoaWZ0ICsgUlRCaXRzIC0gMSwgUlRTaGlm dCk7CisrICB9CisrICB1aW50MzJfdCBleHRyYWN0UkEoKSBjb25zdCB7CisrICAgIHJldHVybiBl eHRyYWN0Qml0RmllbGQoUkFTaGlmdCArIFJBQml0cyAtIDEsIFJBU2hpZnQpOworKyAgfQorKyAg dWludDMyX3QgZXh0cmFjdFJCKCkgY29uc3QgeworKyAgICByZXR1cm4gZXh0cmFjdEJpdEZpZWxk KFJCU2hpZnQgKyBSQkJpdHMgLSAxLCBSQlNoaWZ0KTsKKysgIH0KKysgIHVpbnQzMl90IGV4dHJh Y3RJbW0xNigpIGNvbnN0IHsgcmV0dXJuIGRhdGEgJiBJbW0xNk1hc2s7IH0KKysKKysgIEluc3Ry dWN0aW9uKiBuZXh0KCkgeyByZXR1cm4gdGhpcyArIDE7IH0KKysKKysgIGNvbnN0IHVpbnQzMl90 KiByYXcoKSBjb25zdCB7IHJldHVybiAmZGF0YTsgfQorKyAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIDQ7IH0KKyt9OworKworK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEluc3RydWN0aW9u KSA9PSA0KTsKKysKKytjbGFzcyBJbnN0Tk9QIDogcHVibGljIEluc3RydWN0aW9uIHsKKysgcHVi bGljOgorKyAgSW5zdE5PUCgpIDogSW5zdHJ1Y3Rpb24oTm9wSW5zdCkge30KKyt9OworKworKy8v IFJlZ2lzdGVyLXJlZ2lzdGVyLXJlZ2lzdGVyIGluc3RydWN0aW9uIChYLWZvcm0gYW5kIFhPLWZv cm0pLgorK2NsYXNzIEluc3RSZWcgOiBwdWJsaWMgSW5zdHJ1Y3Rpb24geworKyBwdWJsaWM6Cisr ICBleHBsaWNpdCBJbnN0UmVnKFBQQ09wY29kZXMgb3ApIDogSW5zdHJ1Y3Rpb24ob3ApIHt9Cisr ICBJbnN0UmVnKFBQQ09wY29kZXMgb3AsIFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpCisrICAgICAgOiBJbnN0cnVjdGlvbigodWludDMyX3Qpb3AgfCBSVChydCkgfCBSQShy YSkgfCBSQihyYikpIHt9CisrICBJbnN0UmVnKFBQQ09wY29kZXMgb3AsIEZsb2F0UmVnaXN0ZXIg ZnJ0LCBGbG9hdFJlZ2lzdGVyIGZyYSwKKysgICAgICAgICAgRmxvYXRSZWdpc3RlciBmcmIpCisr ICAgICAgOiBJbnN0cnVjdGlvbigodWludDMyX3Qpb3AgfCBSVChmcnQpIHwgUkEoZnJhKSB8IFJC KGZyYikpIHt9CisrCisrICB2b2lkIHNldFJUKFJlZ2lzdGVyIHIpIHsgZGF0YSA9IChkYXRhICYg flJUTWFzaykgfCBSVChyKTsgfQorKyAgdm9pZCBzZXRSQShSZWdpc3RlciByKSB7IGRhdGEgPSAo ZGF0YSAmIH5SQU1hc2spIHwgUkEocik7IH0KKysgIHZvaWQgc2V0UkIoUmVnaXN0ZXIgcikgeyBk YXRhID0gKGRhdGEgJiB+UkJNYXNrKSB8IFJCKHIpOyB9CisrCisrICB2b2lkIHNldEltbTE2KHVp bnQzMl90IGltbSkgeworKyAgICBkYXRhID0gKGRhdGEgJiAweEZGRkYwMDAwKSB8IChpbW0gJiBJ bW0xNk1hc2spOworKyAgfQorKyAgdWludDMyX3QgZXh0cmFjdEltbTE2VmFsdWUoKSBjb25zdCB7 IHJldHVybiBkYXRhICYgSW1tMTZNYXNrOyB9CisrfTsKKysKKysvLyBSZWdpc3Rlci1pbW1lZGlh dGUgaW5zdHJ1Y3Rpb24gKEQtZm9ybSkuCisrLy8gQml0cyAyMS0yNSBob2xkIFJUIChsb2Fkcywg YWRkaSkgb3IgUlMgKHN0b3Jlcywgb3JpKS4gQm90aCBlbmNvZGUgaWRlbnRpY2FsbHkKKysvLyBz aW5jZSBSVCBhbmQgUlMgb2NjdXB5IHRoZSBzYW1lIGZpZWxkOyB0aGUgY2FsbGVyIHNpbXBseSBw YXNzZXMgdGhlIHJpZ2h0CisrLy8gcmVnaXN0ZXIuCisrY2xhc3MgSW5zdEltbSA6IHB1YmxpYyBJ bnN0cnVjdGlvbiB7CisrIHB1YmxpYzoKKysgIGV4cGxpY2l0IEluc3RJbW0oUFBDT3Bjb2RlcyBv cCkgOiBJbnN0cnVjdGlvbihvcCkge30KKysgIEluc3RJbW0oUFBDT3Bjb2RlcyBvcCwgUmVnaXN0 ZXIgcnQsIFJlZ2lzdGVyIHJhLCB1aW50MzJfdCBpbW0xNikKKysgICAgICA6IEluc3RydWN0aW9u KCh1aW50MzJfdClvcCB8IFJUKHJ0KSB8IFJBKHJhKSB8IChpbW0xNiAmIEltbTE2TWFzaykpIHt9 CisrCisrICB2b2lkIHNldFJUKFJlZ2lzdGVyIHIpIHsgZGF0YSA9IChkYXRhICYgflJUTWFzaykg fCBSVChyKTsgfQorKyAgdm9pZCBzZXRSQShSZWdpc3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5S QU1hc2spIHwgUkEocik7IH0KKysKKysgIHZvaWQgc2V0SW1tMTYodWludDMyX3QgaW1tKSB7Cisr ICAgIGRhdGEgPSAoZGF0YSAmIDB4RkZGRjAwMDApIHwgKGltbSAmIEltbTE2TWFzayk7CisrICB9 CisrICB2b2lkIHNldExvd2VyUmVnKFJlZ2lzdGVyIHJsKSB7CisrICAgIGRhdGEgPSAoZGF0YSAm IDB4RkZFMEZGRkYpIHwgKCh1aW50MzJfdClybC5jb2RlKCkgPDwgMTYpOworKyAgfQorKyAgdWlu dDMyX3QgZXh0cmFjdEltbTE2VmFsdWUoKSBjb25zdCB7IHJldHVybiBkYXRhICYgSW1tMTZNYXNr OyB9CisrCisrICAvLyBFeHRyYWN0IHRoZSBUcmFwVGFnIGZyb20gYSB0YWdnZWQgdHJhcCBpbnN0 cnVjdGlvbiAodHcpLgorKyAgLy8gRGVmaW5lZCBpbiBBc3NlbWJsZXItcHBjNjQuY3BwLiBSZXR1 cm5zIGEgVHJhcFRhZyB2YWx1ZSBhcyB1aW50OF90CisrICAvLyBiZWNhdXNlIEFzc2VtYmxlcjo6 VHJhcFRhZyBpcyBub3QgeWV0IGRlZmluZWQgYXQgdGhpcyBwb2ludCBpbiB0aGUgaGVhZGVyLgor KyAgdWludDhfdCB0cmFwdGFnKCk7CisrfTsKKysKKysvLyBBIEJPZmZJbW0xNiBpcyBhIDE2LWJp dCBzaWduZWQgYnJhbmNoIG9mZnNldCBmb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMKKysvLyAoYmMt Zm9ybSBpbnN0cnVjdGlvbnMpLiAgVGhlIG9mZnNldCBpcyBzdG9yZWQgaW4gYml0cyAyLi4xNSBh bmQgaXMKKysvLyA0LWJ5dGUgYWxpZ25lZCwgZ2l2aW5nIGEgcmFuZ2Ugb2YgKy8tMzIgS0IuCisr Y2xhc3MgQk9mZkltbTE2IHsKKysgIGludDMyX3QgZGF0YTsKKysKKysgcHVibGljOgorKyAgdWlu dDMyX3QgZW5jb2RlKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQoKSk7Cisr ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGF0YSkgJiAweEZGRkM7CisrICB9Cisr ICBpbnQzMl90IGRlY29kZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaXNJbnZhbGlkKCkp OworKyAgICByZXR1cm4gZGF0YTsKKysgIH0KKysKKysgIGV4cGxpY2l0IEJPZmZJbW0xNihpbnQg b2Zmc2V0KSA6IGRhdGEob2Zmc2V0KSB7CisrICAgIE1PWl9BU1NFUlQoKG9mZnNldCAmIDB4Mykg PT0gMCk7CisrICAgIE1PWl9BU1NFUlQoSXNJblJhbmdlKG9mZnNldCkpOworKyAgfQorKyAgc3Rh dGljIGJvb2wgSXNJblJhbmdlKGludCBvZmZzZXQpIHsKKysgICAgcmV0dXJuIG9mZnNldCA+PSAt MzI3NjggJiYgb2Zmc2V0IDw9IDMyNzY0OworKyAgfQorKworKyAgc3RhdGljIGNvbnN0IGludDMy X3QgSU5WQUxJRCA9IDB4MDAwMjAwMDA7CisrICBCT2ZmSW1tMTYoKSA6IGRhdGEoSU5WQUxJRCkg e30KKysKKysgIGJvb2wgaXNJbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gZGF0YSA9PSBJTlZBTElE OyB9CisrCisrICBJbnN0cnVjdGlvbiogZ2V0RGVzdChJbnN0cnVjdGlvbiogc3JjKSBjb25zdDsK KysKKysgIGV4cGxpY2l0IEJPZmZJbW0xNihJbnN0SW1tIGluc3QpOworK307CisrCisrLy8gQSBK T2ZmSW1tMjYgaXMgYSAyNi1iaXQgc2lnbmVkIGJyYW5jaCBvZmZzZXQgZm9yIHVuY29uZGl0aW9u YWwgYnJhbmNoZXMKKysvLyAoYi9ibCBpbnN0cnVjdGlvbnMpLiAgQml0cyAyLi4yNSBlbmNvZGUg dGhlIG9mZnNldCwgNC1ieXRlIGFsaWduZWQsCisrLy8gZ2l2aW5nIGEgcmFuZ2Ugb2YgKy8tMzIg TUIuCisrY2xhc3MgSk9mZkltbTI2IHsKKysgIGludDMyX3QgZGF0YTsKKysKKysgcHVibGljOgor KyAgdWludDMyX3QgZW5jb2RlKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQo KSk7CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGF0YSkgJiAweDAzRkZGRkZD OworKyAgfQorKyAgaW50MzJfdCBkZWNvZGUoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWlz SW52YWxpZCgpKTsKKysgICAgcmV0dXJuIGRhdGE7CisrICB9CisrCisrICBleHBsaWNpdCBKT2Zm SW1tMjYoaW50IG9mZnNldCkgOiBkYXRhKG9mZnNldCkgeworKyAgICBNT1pfQVNTRVJUKChvZmZz ZXQgJiAweDMpID09IDApOworKyAgICBNT1pfQVNTRVJUKElzSW5SYW5nZShvZmZzZXQpKTsKKysg IH0KKysgIHN0YXRpYyBib29sIElzSW5SYW5nZShpbnQgb2Zmc2V0KSB7CisrICAgIHJldHVybiBv ZmZzZXQgPj0gLTMzNTU0NDMyICYmIG9mZnNldCA8PSAzMzU1NDQyODsKKysgIH0KKysKKysgIHN0 YXRpYyBjb25zdCBpbnQzMl90IElOVkFMSUQgPSAweDIwMDAwMDAwOworKyAgSk9mZkltbTI2KCkg OiBkYXRhKElOVkFMSUQpIHt9CisrCisrICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJu IGRhdGEgPT0gSU5WQUxJRDsgfQorKworKyAgSW5zdHJ1Y3Rpb24qIGdldERlc3QoSW5zdHJ1Y3Rp b24qIHNyYykgY29uc3Q7CisrfTsKKysKKysvLyBBIDE2LWJpdCBpbW1lZGlhdGUgdmFsdWUgdXNl ZCBpbiBELWZvcm0gaW5zdHJ1Y3Rpb25zLgorK2NsYXNzIEltbTE2IHsKKysgIGludDMyX3QgdmFs dWU7CisrCisrIHB1YmxpYzoKKysgIEltbTE2KCk7CisrICBleHBsaWNpdCBJbW0xNih1aW50MzJf dCBpbW0pIDogdmFsdWUoaW1tKSB7fQorKyAgdWludDMyX3QgZW5jb2RlKCkgY29uc3QgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSAmIDB4ZmZmZjsgfQorKyAgaW50MzJfdCBk ZWNvZGVTaWduZWQoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorKyAgdWludDMyX3QgZGVjb2Rl VW5zaWduZWQoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorKyAgc3RhdGljIGJvb2wgSXNJblNp Z25lZFJhbmdlKGludDMyX3QgaW1tKSB7CisrICAgIHJldHVybiBpbW0gPj0gSU5UMTZfTUlOICYm IGltbSA8PSBJTlQxNl9NQVg7CisrICB9CisrICBzdGF0aWMgYm9vbCBJc0luVW5zaWduZWRSYW5n ZSh1aW50MzJfdCBpbW0pIHsgcmV0dXJuIGltbSA8PSBVSU5UMTZfTUFYOyB9CisrICBzdGF0aWMg SW1tMTYgTG93ZXIoSW1tMzIgaW1tKSB7IHJldHVybiBJbW0xNihpbW0udmFsdWUgJiAweGZmZmYp OyB9CisrICBzdGF0aWMgSW1tMTYgVXBwZXIoSW1tMzIgaW1tKSB7IHJldHVybiBJbW0xNigoaW1t LnZhbHVlID4+IDE2KSAmIDB4ZmZmZik7IH0KKyt9OworKworK2NsYXNzIEltbTggeworKyAgdWlu dDhfdCB2YWx1ZTsKKysKKysgcHVibGljOgorKyAgSW1tOCgpOworKyAgZXhwbGljaXQgSW1tOCh1 aW50MzJfdCBpbW0pIDogdmFsdWUoaW1tKSB7fQorKyAgdWludDMyX3QgZW5jb2RlKHVpbnQzMl90 IHNoaWZ0KSBjb25zdCB7IHJldHVybiB2YWx1ZSA8PCBzaGlmdDsgfQorKyAgaW50MzJfdCBkZWNv ZGVTaWduZWQoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorKyAgdWludDMyX3QgZGVjb2RlVW5z aWduZWQoKSBjb25zdCB7IHJldHVybiB2YWx1ZTsgfQorKyAgc3RhdGljIGJvb2wgSXNJblNpZ25l ZFJhbmdlKGludDMyX3QgaW1tKSB7CisrICAgIHJldHVybiBpbW0gPj0gSU5UOF9NSU4gJiYgaW1t IDw9IElOVDhfTUFYOworKyAgfQorKyAgc3RhdGljIGJvb2wgSXNJblVuc2lnbmVkUmFuZ2UodWlu dDMyX3QgaW1tKSB7IHJldHVybiBpbW0gPD0gVUlOVDhfTUFYOyB9CisrICBzdGF0aWMgSW1tOCBM b3dlcihJbW0xNiBpbW0pIHsgcmV0dXJuIEltbTgoaW1tLmRlY29kZVNpZ25lZCgpICYgMHhmZik7 IH0KKysgIHN0YXRpYyBJbW04IFVwcGVyKEltbTE2IGltbSkgeworKyAgICByZXR1cm4gSW1tOCgo aW1tLmRlY29kZVNpZ25lZCgpID4+IDgpICYgMHhmZik7CisrICB9CisrfTsKKysKKytjbGFzcyBP cGVyYW5kIHsKKysgcHVibGljOgorKyAgZW51bSBUYWcgeyBSRUcsIEZSRUcsIE1FTSB9OworKwor KyBwcml2YXRlOgorKyAgVGFnIHRhZyA6IDM7CisrICB1aW50MzJfdCByZWcgOiA1OworKyAgaW50 MzJfdCBvZmZzZXQ7CisrCisrIHB1YmxpYzoKKysgIE1PWl9JTVBMSUNJVCBPcGVyYW5kKFJlZ2lz dGVyIHJlZ18pIDogdGFnKFJFRyksIHJlZyhyZWdfLmNvZGUoKSkge30KKysKKysgIGV4cGxpY2l0 IE9wZXJhbmQoRmxvYXRSZWdpc3RlciBmcmVnKSA6IHRhZyhGUkVHKSwgcmVnKGZyZWcuY29kZSgp KSB7fQorKworKyAgT3BlcmFuZChSZWdpc3RlciBiYXNlLCBJbW0zMiBvZmYpCisrICAgICAgOiB0 YWcoTUVNKSwgcmVnKGJhc2UuY29kZSgpKSwgb2Zmc2V0KG9mZi52YWx1ZSkge30KKysKKysgIE9w ZXJhbmQoUmVnaXN0ZXIgYmFzZSwgaW50MzJfdCBvZmYpCisrICAgICAgOiB0YWcoTUVNKSwgcmVn KGJhc2UuY29kZSgpKSwgb2Zmc2V0KG9mZikge30KKysKKysgIGV4cGxpY2l0IE9wZXJhbmQoY29u c3QgQWRkcmVzcyYgYWRkcikKKysgICAgICA6IHRhZyhNRU0pLCByZWcoYWRkci5iYXNlLmNvZGUo KSksIG9mZnNldChhZGRyLm9mZnNldCkge30KKysKKysgIFRhZyBnZXRUYWcoKSBjb25zdCB7IHJl dHVybiB0YWc7IH0KKysKKysgIFJlZ2lzdGVyIHRvUmVnKCkgY29uc3QgeworKyAgICBNT1pfQVNT RVJUKHRhZyA9PSBSRUcpOworKyAgICByZXR1cm4gUmVnaXN0ZXI6OkZyb21Db2RlKHJlZyk7Cisr ICB9CisrCisrICBGbG9hdFJlZ2lzdGVyIHRvRlJlZygpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VS VCh0YWcgPT0gRlJFRyk7CisrICAgIHJldHVybiBGbG9hdFJlZ2lzdGVyOjpGcm9tQ29kZShyZWcp OworKyAgfQorKworKyAgdm9pZCB0b0FkZHIoUmVnaXN0ZXIqIHIsIEltbTMyKiBkZXN0KSBjb25z dCB7CisrICAgIE1PWl9BU1NFUlQodGFnID09IE1FTSk7CisrICAgICpyID0gUmVnaXN0ZXI6OkZy b21Db2RlKHJlZyk7CisrICAgICpkZXN0ID0gSW1tMzIob2Zmc2V0KTsKKysgIH0KKysgIEFkZHJl c3MgdG9BZGRyZXNzKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0pOworKyAg ICByZXR1cm4gQWRkcmVzcyhSZWdpc3Rlcjo6RnJvbUNvZGUocmVnKSwgb2Zmc2V0KTsKKysgIH0K KysgIGludDMyX3QgZGlzcCgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCh0YWcgPT0gTUVNKTsK KysgICAgcmV0dXJuIG9mZnNldDsKKysgIH0KKysKKysgIGludDMyX3QgYmFzZSgpIGNvbnN0IHsK KysgICAgTU9aX0FTU0VSVCh0YWcgPT0gTUVNKTsKKysgICAgcmV0dXJuIHJlZzsKKysgIH0KKysg IFJlZ2lzdGVyIGJhc2VSZWcoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQodGFnID09IE1FTSk7 CisrICAgIHJldHVybiBSZWdpc3Rlcjo6RnJvbUNvZGUocmVnKTsKKysgIH0KKyt9OworKworKy8v IEJ1ZyAyMDM0MDY0IGNvbGxhcHNlZCB0aGUgcGVyLWJ1ZmZlciBjb21waWxlLXRpbWUgY29uZmln dXJhdGlvbiBvZgorKy8vIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzIGludG8gQXNz ZW1ibGVyQnVmZmVyU2V0dGluZ3MsIGFuZCByZWR1Y2VkCisrLy8gdGhlIHJ1bnRpbWUgY3RvciB0 byAocG9vbE1heE9mZnNldCwgbm9wRmlsbCkuIGluc3RCdWZmZXJBbGlnbiBhbmQgdGhlCisrLy8g TnVtU2hvcnRCcmFuY2hSYW5nZXMgdGVtcGxhdGUgYXJnIHdlcmUgZHJvcHBlZDogUFBDNjQgcHJl dmlvdXNseSBwYXNzZWQKKysvLyBpbnN0QnVmZmVyQWxpZ249OCAodW51c2VkIG9uIHRoaXMgYmFj a2VuZDsgcG9vbCBlbnRyaWVzIGFyZSA0LWJ5dGUgYWxpZ25lZCkKKysvLyBhbmQgTnVtU2hvcnRC cmFuY2hSYW5nZXM9MC4KKyt1c2luZyBQUENCdWZmZXIgPSBqczo6aml0OjpBc3NlbWJsZXJCdWZm ZXJXaXRoQ29uc3RhbnRQb29sczwKKysgICAgSW5zdHJ1Y3Rpb24sIEFzc2VtYmxlciwKKysgICAg anM6OmppdDo6QXNzZW1ibGVyQnVmZmVyU2V0dGluZ3N7CisrICAgICAgICAuaW5zdFNpemUgPSA0 LAorKyAgICAgICAgLmd1YXJkU2l6ZSA9IDEsCisrICAgICAgICAuaGVhZGVyU2l6ZSA9IDEsCisr ICAgICAgICAucGNCaWFzID0gMCwKKysgICAgICAgIC5hbGlnbkZpbGxJbnN0ID0gTm9wSW5zdCwK KysgICAgICAgIC5ub3BGaWxsSW5zdCA9IE5vcEluc3QsCisrICAgIH0+OworKworKy8vIEluaGVy aXRzIGV4ZWN1dGFibGVDb3B5KCkgYW5kIGFwcGVuZFJhd0NvZGUoKSBmcm9tCisrLy8gQXNzZW1i bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbHMsIHdoaWNoIGFzc2VydCBwb29sIGlzIGZsdXNoZWQu CisrY2xhc3MgUFBDQnVmZmVyV2l0aEV4ZWN1dGFibGVDb3B5IDogcHVibGljIFBQQ0J1ZmZlciB7 CisrIHB1YmxpYzoKKysgIFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29weShzaXplX3QgcG9vbE1h eE9mZnNldCwgdW5zaWduZWQgbm9wRmlsbCkKKysgICAgICA6IFBQQ0J1ZmZlcihwb29sTWF4T2Zm c2V0LCBub3BGaWxsKSB7fQorK307CisrCisrY2xhc3MgQXNzZW1ibGVyIDogcHVibGljIEFzc2Vt YmxlclNoYXJlZCB7CisrIHB1YmxpYzoKKysgIC8vIFRyYXAgdGFncyBlbmNvZGVkIGluIHRoZSBs b3cgYml0cyBvZiBhIHRyYXAgd29yZC4KKysgIC8vIEZyZWVCU0QgYW5kIG90aGVycyBtYXkgdXNl IHIxIGluIHRoZWlyIHRyYXAgd29yZCwgc28gYml0IDAgaXMgYXZvaWRlZC4KKysgIGVudW0gVHJh cFRhZyB7CisrICAgIEJUYWcgPSAyLAorKyAgICBCQ1RhZyA9IDQsCisrICAgIENhbGxUYWcgPSA2 LAorKyAgICBEZWJ1Z1RhZzAgPSAxMCwKKysgICAgRGVidWdUYWcxID0gMTIsCisrICAgIERlYnVn VGFnMiA9IDE0CisrICB9OworKworKyAgLy8gUG9vbCBsb2FkIHR5cGVzIGVuY29kZWQgaW4gYml0 cyAyMS0yMiBvZiBwb29sIGhpbnQgd29yZHMuCisrICAvLyBVc2VkIGJ5IEluc2VydEluZGV4SW50 b1RhZyAvIFBhdGNoQ29uc3RhbnRQb29sTG9hZC4KKysgIGVudW0gUG9vbExvYWRUeXBlIHsKKysg ICAgUG9vbExvYWRGUFI2NCA9IDEsICAgIC8vIGxmZCBmRCwgb2Zmc2V0KHJCYXNlKQorKyAgICBQ b29sTG9hZFNpbWQxMjggPSAyLCAgLy8gYWRkaSByQmFzZSwgckJhc2UsIG9mZnNldDsgbHh2eCB2 c0QsIDAsIHJCYXNlCisrICAgIFBvb2xMb2FkRlBSMzIgPSAzICAgICAvLyBsZnMgZkQsIG9mZnNl dChyQmFzZSkg4oCUIGF1dG8tZXhwYW5kcyB0byBkb3VibGUKKysgIH07CisrCisrICBlbnVtIEJy YW5jaEJpdHMgeworKyAgICBCcmFuY2hPbkNsZWFyID0gMHgwNCwKKysgICAgQnJhbmNoT25TZXQg PSAweDBjLAorKyAgICBCcmFuY2hPcHRpb25NYXNrID0gMHgwZiwKKysgICAgQnJhbmNoT3B0aW9u SW52ZXJ0ID0gMHgwOAorKyAgfTsKKysKKysgIC8vIFBQQyBjb25kaXRpb24gZW5jb2RpbmcuIFRo ZSB0b3AgbnliYmxlIGlzIHRoZSBvZmZzZXQgdG8gdGhlIENSIGZpZWxkCisrICAvLyAodGhlIHgg aW4gQklGKjQreCksIGFuZCB0aGUgYm90dG9tIGlzIHRoZSBCTyBmaWVsZC4KKysgIC8vIFN5bnRo ZXRpYyBmbGFncyBzaXQgaW4gdGhlIE1TQiBhbmQgYXJlIG1hc2tlZCBvZmYgYmVmb3JlIHVzZS4K KysgIGVudW0gQ29uZGl0aW9uIHsKKysgICAgQ29uZGl0aW9uVW5zaWduZWQgPSAweDEwMCwKKysg ICAgQ29uZGl0aW9uVW5zaWduZWRIYW5kbGVkID0gMHgyZmYsCisrICAgIENvbmRpdGlvblplcm8g PSAweDQwMCwKKysgICAgQ29uZGl0aW9uT25seVhFUiA9IDB4MjAwLAorKyAgICBDb25kaXRpb25Y RVJDQSA9IDB4MjNjLAorKyAgICBDb25kaXRpb25YRVJOQ0EgPSAweDIzNCwKKysgICAgQ29uZGl0 aW9uWEVST1YgPSAweDIxYywKKysKKysgICAgRXF1YWwgPSAweDJjLAorKyAgICBOb3RFcXVhbCA9 IDB4MjQsCisrICAgIEdyZWF0ZXJUaGFuID0gMHgxYywKKysgICAgR3JlYXRlclRoYW5PckVxdWFs ID0gMHgwNCwKKysgICAgTGVzc1RoYW4gPSAweDBjLAorKyAgICBMZXNzVGhhbk9yRXF1YWwgPSAw eDE0LAorKworKyAgICBBYm92ZSA9IEdyZWF0ZXJUaGFuIHwgQ29uZGl0aW9uVW5zaWduZWQsCisr ICAgIEFib3ZlT3JFcXVhbCA9IEdyZWF0ZXJUaGFuT3JFcXVhbCB8IENvbmRpdGlvblVuc2lnbmVk LAorKyAgICBCZWxvdyA9IExlc3NUaGFuIHwgQ29uZGl0aW9uVW5zaWduZWQsCisrICAgIEJlbG93 T3JFcXVhbCA9IExlc3NUaGFuT3JFcXVhbCB8IENvbmRpdGlvblVuc2lnbmVkLAorKworKyAgICBT aWduZWQgPSBMZXNzVGhhbiB8IENvbmRpdGlvblplcm8sCisrICAgIE5vdFNpZ25lZCA9IEdyZWF0 ZXJUaGFuT3JFcXVhbCB8IENvbmRpdGlvblplcm8sCisrICAgIFplcm8gPSBFcXVhbCB8IENvbmRp dGlvblplcm8sCisrICAgIE5vblplcm8gPSBOb3RFcXVhbCB8IENvbmRpdGlvblplcm8sCisrCisr ICAgIE92ZXJmbG93ID0gQ29uZGl0aW9uWEVST1YsCisrICAgIE5vdE92ZXJmbG93ID0gQ29uZGl0 aW9uT25seVhFUiB8IExlc3NUaGFuT3JFcXVhbCwKKysgICAgQ2FycnlTZXQgPSBDb25kaXRpb25Y RVJDQSwKKysgICAgQ2FycnlDbGVhciA9IENvbmRpdGlvblhFUk5DQSwKKysKKysgICAgQWx3YXlz ID0gMHgxZiwKKysgICAgU09CaXQgPSAweDNjLAorKyAgICBOU09CaXQgPSAweDM0CisrICB9Owor KworKyAgZW51bSBEb3VibGVDb25kaXRpb24geworKyAgICBEb3VibGVDb25kaXRpb25Vbm9yZGVy ZWQgPSAweDEwMCwKKysgICAgRG91YmxlT3JkZXJlZCA9IDB4MzQsCisrICAgIERvdWJsZUVxdWFs ID0gMHgyYywKKysgICAgRG91YmxlTm90RXF1YWwgPSAweDI0LAorKyAgICBEb3VibGVHcmVhdGVy VGhhbiA9IDB4MWMsCisrICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9IDB4MDQsCisrICAg IERvdWJsZUxlc3NUaGFuID0gMHgwYywKKysgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsID0gMHgx NCwKKysgICAgRG91YmxlVW5vcmRlcmVkID0gMHgzYywKKysgICAgRG91YmxlRXF1YWxPclVub3Jk ZXJlZCA9IERvdWJsZUVxdWFsIHwgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkLAorKyAgICBEb3Vi bGVOb3RFcXVhbE9yVW5vcmRlcmVkID0gRG91YmxlTm90RXF1YWwgfCBEb3VibGVDb25kaXRpb25V bm9yZGVyZWQsCisrICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBEb3VibGVHcmVh dGVyVGhhbiB8IERvdWJsZUNvbmRpdGlvblVub3JkZXJlZCwKKysgICAgRG91YmxlR3JlYXRlclRo YW5PckVxdWFsT3JVbm9yZGVyZWQgPQorKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs IHwgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkLAorKyAgICBEb3VibGVMZXNzVGhhbk9yVW5vcmRl cmVkID0gRG91YmxlTGVzc1RoYW4gfCBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQsCisrICAgIERv dWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0KKysgICAgICAgIERvdWJsZUxlc3NUaGFu T3JFcXVhbCB8IERvdWJsZUNvbmRpdGlvblVub3JkZXJlZCwKKysgIH07CisrCisrICBlbnVtIEp1 bXBPckNhbGwgeyBCcmFuY2hJc0p1bXAsIEJyYW5jaElzQ2FsbCB9OworKworKyAgZW51bSBMaW5r Qml0IHsKKysgICAgRG9udExpbmtCID0gMCwKKysgICAgTGlua0IgPSAxLAorKyAgfTsKKysKKysg IGVudW0gTGlrZWx5Qml0IHsKKysgICAgTm90TGlrZWx5QiA9IDAsCisrICAgIExpa2VseUIgPSAx LAorKyAgfTsKKysKKysgIGVudW0gQnJhbmNoQWRkcmVzc1R5cGUgeworKyAgICBSZWxhdGl2ZUJy YW5jaCA9IDAsCisrICAgIEFic29sdXRlQnJhbmNoID0gMiwKKysgIH07CisrCisrICBlbnVtIEZs b2F0Rm9ybWF0IHsgU2luZ2xlRmxvYXQsIERvdWJsZUZsb2F0IH07CisrICBlbnVtIEZsb2F0VGVz dEtpbmQgeyBUZXN0Rm9yVHJ1ZSwgVGVzdEZvckZhbHNlIH07CisrCisrICBCdWZmZXJPZmZzZXQg bmV4dE9mZnNldCgpIHsgcmV0dXJuIG1fYnVmZmVyLm5leHRPZmZzZXQoKTsgfQorKworKyBwcm90 ZWN0ZWQ6CisrICBJbnN0cnVjdGlvbiogZWRpdFNyYyhCdWZmZXJPZmZzZXQgYm8pIHsKKysgICAg aWYgKCFiby5hc3NpZ25lZCgpKSB7CisrICAgICAgLy8gVW5kZXIgT09NLCB3cml0ZUluc3QgbWF5 IHJldHVybiBhbiB1bmFzc2lnbmVkIEJ1ZmZlck9mZnNldC4KKysgICAgICAvLyBSZXR1cm4gYSBk dW1teSB3cml0YWJsZSBhcmVhIHNvIGNhbGxlcnMgKFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKQor KyAgICAgIC8vIGNhbiBwcm9jZWVkIGhhcm1sZXNzbHk7IHRoZSBjb21waWxhdGlvbiB3aWxsIGJl IGRpc2NhcmRlZC4KKysgICAgICBzdGF0aWMgdWludDMyX3Qgb29tRHVtbXlfWzhdOworKyAgICAg IHJldHVybiAoSW5zdHJ1Y3Rpb24qKW9vbUR1bW15XzsKKysgICAgfQorKyAgICByZXR1cm4gbV9i dWZmZXIuZ2V0SW5zdChibyk7CisrICB9CisrCisrICBzdHJ1Y3QgUmVsYXRpdmVQYXRjaCB7Cisr ICAgIEJ1ZmZlck9mZnNldCBvZmZzZXQ7CisrICAgIHZvaWQqIHRhcmdldDsKKysgICAgUmVsb2Nh dGlvbktpbmQga2luZDsKKysKKysgICAgUmVsYXRpdmVQYXRjaChCdWZmZXJPZmZzZXQgb2Zmc2V0 LCB2b2lkKiB0YXJnZXQsIFJlbG9jYXRpb25LaW5kIGtpbmQpCisrICAgICAgICA6IG9mZnNldChv ZmZzZXQpLCB0YXJnZXQodGFyZ2V0KSwga2luZChraW5kKSB7fQorKyAgfTsKKysKKysgIGpzOjpW ZWN0b3I8UmVsYXRpdmVQYXRjaCwgOCwgU3lzdGVtQWxsb2NQb2xpY3k+IGp1bXBzXzsKKysKKysg IENvbXBhY3RCdWZmZXJXcml0ZXIganVtcFJlbG9jYXRpb25zXzsKKysgIENvbXBhY3RCdWZmZXJX cml0ZXIgZGF0YVJlbG9jYXRpb25zXzsKKysKKysgIFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29w eSBtX2J1ZmZlcjsKKysKKysjaWZkZWYgSlNfSklUU1BFVworKyAgU3ByaW50ZXIqIHByaW50ZXI7 CisrI2VuZGlmCisrCisrIHB1YmxpYzoKKysgIC8vIFdoaWNoIGFic29sdXRlIGJpdCBudW1iZXIg ZG9lcyBhIENSICsgQ29uZGl0aW9uIHBhaXIgcmVmZXIgdG8/CisrICBzdGF0aWMgdWludDhfdCBj ckJpdChDUmVnaXN0ZXJJRCBjciwgQ29uZGl0aW9uIGNvbmQpIHsKKysgICAgcmV0dXJuIChjciA8 PCAyKSArICgoY29uZCAmIDB4ZjApID4+IDQpOworKyAgfQorKyAgc3RhdGljIHVpbnQ4X3QgY3JC aXQoQ1JlZ2lzdGVySUQgY3IsIERvdWJsZUNvbmRpdGlvbiBjb25kKSB7CisrICAgIHJldHVybiAo Y3IgPDwgMikgKyAoKGNvbmQgJiAweGYwKSA+PiA0KTsKKysgIH0KKysKKysgIEFzc2VtYmxlcigp CisrICAgICAgOiBtX2J1ZmZlcigvKiBwb29sTWF4T2Zmc2V0ICovIDgxOTIsIC8qIG5vcEZpbGwg Ki8gMCksCisrI2lmZGVmIEpTX0pJVFNQRVcKKysgICAgICAgIHByaW50ZXIobnVsbHB0ciksCisr I2VuZGlmCisrICAgICAgICBpc0ZpbmlzaGVkKGZhbHNlKSwKKysgICAgICAgIHNjcmF0Y2hfcmVn aXN0ZXJfbGlzdF8oKDEgPDwgUmVnaXN0ZXJzOjpyMTEpIHwgKDEgPDwgUmVnaXN0ZXJzOjpyMTIp KSB7CisrICB9CisrCisrICB2b2lkIHNldFVubGltaXRlZEJ1ZmZlcigpIHsgbV9idWZmZXIuc2V0 VW5saW1pdGVkKCk7IH0KKysKKysgIC8vIENvbnN0YW50IHBvb2wgY2FsbGJhY2tzIHJlcXVpcmVk IGJ5IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzLgorKyAgc3RhdGljIHZvaWQgSW5z ZXJ0SW5kZXhJbnRvVGFnKHVpbnQ4X3QqIGxvYWQsIHVpbnQzMl90IGluZGV4KTsKKysgIHN0YXRp YyBib29sIFBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQ b29sQWRkcik7CisrICBzdGF0aWMgdm9pZCBXcml0ZVBvb2xHdWFyZChCdWZmZXJPZmZzZXQgYnJh bmNoLCBJbnN0cnVjdGlvbiogaW5zdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlck9mZnNldCBkZXN0KTsKKysgIHN0YXRpYyB2b2lkIFdyaXRlUG9vbEhlYWRlcih1aW50OF90 KiBzdGFydCwganM6OmppdDo6UG9vbCogcCwgYm9vbCBpc05hdHVyYWwpOworKyAgc3RhdGljIHZv aWQgUGF0Y2hTaG9ydFJhbmdlQnJhbmNoVG9WZW5lZXIoUFBDQnVmZmVyKiwgdW5zaWduZWQgcmFu Z2VJZHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZm ZXJPZmZzZXQgZGVhZGxpbmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCdWZmZXJPZmZzZXQgdmVuZWVyKTsKKysKKysgIHN0YXRpYyBDb25kaXRpb24gSW52 ZXJ0Q29uZGl0aW9uKENvbmRpdGlvbiBjb25kKTsKKysgIHN0YXRpYyBEb3VibGVDb25kaXRpb24g SW52ZXJ0Q29uZGl0aW9uKERvdWJsZUNvbmRpdGlvbiBjb25kKTsKKysKKysgIHZvaWQgd3JpdGVS ZWxvY2F0aW9uKEJ1ZmZlck9mZnNldCBzcmMpIHsKKysgICAganVtcFJlbG9jYXRpb25zXy53cml0 ZVVuc2lnbmVkKHNyYy5nZXRPZmZzZXQoKSk7CisrICB9CisrCisrICB2b2lkIHdyaXRlRGF0YVJl bG9jYXRpb24oSW1tR0NQdHIgcHRyKSB7CisrICAgIGlmIChwdHIudmFsdWUpIHsKKysgICAgICBp ZiAoZ2M6OklzSW5zaWRlTnVyc2VyeShwdHIudmFsdWUpKSB7CisrICAgICAgICBlbWJlZHNOdXJz ZXJ5UG9pbnRlcnNfID0gdHJ1ZTsKKysgICAgICB9CisrICAgICAgZGF0YVJlbG9jYXRpb25zXy53 cml0ZVVuc2lnbmVkKG5leHRPZmZzZXQoKS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgIH0KKysg IHZvaWQgd3JpdGVEYXRhUmVsb2NhdGlvbihCdWZmZXJPZmZzZXQgYm8sIEltbUdDUHRyIHB0cikg eworKyAgICBpZiAocHRyLnZhbHVlKSB7CisrICAgICAgaWYgKGdjOjpJc0luc2lkZU51cnNlcnko cHRyLnZhbHVlKSkgeworKyAgICAgICAgZW1iZWRzTnVyc2VyeVBvaW50ZXJzXyA9IHRydWU7Cisr ICAgICAgfQorKyAgICAgIGRhdGFSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25lZChiby5nZXRPZmZz ZXQoKSk7CisrICAgIH0KKysgIH0KKysKKysgIHZvaWQgYXNzZXJ0Tm9HQ1RoaW5ncygpIGNvbnN0 IHsKKysjaWZkZWYgREVCVUcKKysgICAgTU9aX0FTU0VSVChkYXRhUmVsb2NhdGlvbnNfLmxlbmd0 aCgpID09IDApOworKyAgICBmb3IgKGF1dG8mIGogOiBqdW1wc18pIHsKKysgICAgICBNT1pfQVNT RVJUKGoua2luZCA9PSBSZWxvY2F0aW9uS2luZDo6SEFSRENPREVEKTsKKysgICAgfQorKyNlbmRp ZgorKyAgfQorKworKyAgYm9vbCBvb20oKSBjb25zdDsKKysKKysgIHZvaWQgc2V0UHJpbnRlcihT cHJpbnRlciogc3ApIHsKKysjaWZkZWYgSlNfSklUU1BFVworKyAgICBwcmludGVyID0gc3A7Cisr I2VuZGlmCisrICB9CisrCisrI2lmZGVmIEpTX0pJVFNQRVcKKysgIGlubGluZSB2b2lkIHNwZXco Y29uc3QgY2hhciogZm10LCAuLi4pIE1PWl9GT1JNQVRfUFJJTlRGKDIsIDMpIHsKKysgICAgaWYg KE1PWl9VTkxJS0VMWShwcmludGVyIHx8IEppdFNwZXdFbmFibGVkKEppdFNwZXdfQ29kZWdlbikp KSB7CisrICAgICAgdmFfbGlzdCB2YTsKKysgICAgICB2YV9zdGFydCh2YSwgZm10KTsKKysgICAg ICBzcGV3VkEoZm10LCB2YSk7CisrICAgICAgdmFfZW5kKHZhKTsKKysgICAgfQorKyAgfQorKyAg TU9aX0NPTEQgdm9pZCBzcGV3VkEoY29uc3QgY2hhciogZm10LCB2YV9saXN0IHZhKSBNT1pfRk9S TUFUX1BSSU5URigyLCAwKSB7CisrICAgIGNoYXIgYnVmWzIwMF07CisrICAgIGludCBpID0gVnNw cmludGZMaXRlcmFsKGJ1ZiwgZm10LCB2YSk7CisrICAgIGlmIChpID4gLTEpIHsKKysgICAgICBp ZiAocHJpbnRlcikgeworKyAgICAgICAgcHJpbnRlci0+cHJpbnRmKCIlc1xuIiwgYnVmKTsKKysg ICAgICB9CisrICAgICAganM6OmppdDo6Sml0U3Bldyhqczo6aml0OjpKaXRTcGV3X0NvZGVnZW4s ICIlcyIsIGJ1Zik7CisrICAgIH0KKysgIH0KKysjZWxzZQorKyAgTU9aX0FMV0FZU19JTkxJTkUg dm9pZCBzcGV3KGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBNT1pfRk9STUFUX1BSSU5URigyLCAzKSB7 fQorKyNlbmRpZgorKworKyAgUmVnaXN0ZXIgZ2V0U3RhY2tQb2ludGVyKCkgY29uc3QgeyByZXR1 cm4gU3RhY2tQb2ludGVyOyB9CisrCisrIHByb3RlY3RlZDoKKysgIGJvb2wgaXNGaW5pc2hlZDsK KysKKysgcHVibGljOgorKyAgc3RhdGljIHVpbnRwdHJfdCBHZXRQb2ludGVyKHVpbnQ4X3QqKTsK KysgIHZvaWQgZmx1c2goKSB7CisrICAgIE1PWl9BU1NFUlQoIWlzRmluaXNoZWQpOworKyAgICBt X2J1ZmZlci5mbHVzaFBvb2woKTsKKysgIH0KKysgIC8vIEluaGliaXQgcG9vbCBmbHVzaGVzIGZv ciB0aGUgbmV4dCBtYXhJbnN0IGluc3RydWN0aW9ucy4gTWlycm9ycyB0aGUKKysgIC8vIEFSTS9B Uk02NCB3cmFwcGVyczsgbGV0cyBzaGFyZWQgY29kZSAoZS5nLiBXYXNtRnJhbWVJdGVyIGVwaWxv Z3VlcworKyAgLy8gdGhhdCBuZWVkIHN0YXRpYyBieXRlIGRpc3RhbmNlcyBiZXR3ZWVuIGN1cnJl bnRPZmZzZXQoKSBjYXB0dXJlcykKKysgIC8vIGZlbmNlIGEgc21hbGwgaW5zdHJ1Y3Rpb24gd2lu ZG93IHdpdGhvdXQgcmVhY2hpbmcgaW50byBtX2J1ZmZlci4KKysgIHZvaWQgZW50ZXJOb1Bvb2wo c2l6ZV90IG1heEluc3QpIHsgbV9idWZmZXIuZW50ZXJOb1Bvb2wobWF4SW5zdCk7IH0KKysgIHZv aWQgbGVhdmVOb1Bvb2woKSB7IG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7IH0KKysgIHZvaWQgZmlu aXNoKCk7CisrICBib29sIGFwcGVuZFJhd0NvZGUoY29uc3QgdWludDhfdCogY29kZSwgc2l6ZV90 IG51bUJ5dGVzKTsKKysgIGJvb2wgcmVzZXJ2ZShzaXplX3Qgc2l6ZSk7CisrICBib29sIHN3YXBC dWZmZXIod2FzbTo6Qnl0ZXMmIGJ5dGVzKTsKKysgIHZvaWQgZXhlY3V0YWJsZUNvcHkodm9pZCog YnVmZmVyKTsKKysgIHZvaWQgY29weUp1bXBSZWxvY2F0aW9uVGFibGUodWludDhfdCogZGVzdCk7 CisrICB2b2lkIGNvcHlEYXRhUmVsb2NhdGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpOworKworKyAg c2l6ZV90IHNpemUoKSBjb25zdDsKKysgIHNpemVfdCBqdW1wUmVsb2NhdGlvblRhYmxlQnl0ZXMo KSBjb25zdDsKKysgIHNpemVfdCBkYXRhUmVsb2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdDsKKysg IHNpemVfdCBieXRlc05lZWRlZCgpIGNvbnN0OworKworKyAgQnVmZmVyT2Zmc2V0IHdyaXRlSW5z dCh1aW50MzJfdCB4LCB1aW50MzJfdCogZGVzdCA9IG51bGxwdHIpOworKyAgc3RhdGljIHZvaWQg V3JpdGVJbnN0U3RhdGljKHVpbnQzMl90IHgsIHVpbnQzMl90KiBkZXN0KTsKKysKKysgcHVibGlj OgorKyAgQnVmZmVyT2Zmc2V0IGhhbHRpbmdBbGlnbihpbnQgYWxpZ25tZW50KTsKKysgIEJ1ZmZl ck9mZnNldCBub3BBbGlnbihpbnQgYWxpZ25tZW50KTsKKysgIEJ1ZmZlck9mZnNldCBhc19ub3Ao KTsKKysKKysgIC8vIC0tLSBJbnN0cnVjdGlvbiBlbWlzc2lvbiAoZGVjbGFyYXRpb25zIG9ubHks IGltcGxlbWVudGVkIGluIGxhdGVyIGNvbW1pdHMpCisrCisrICAvLyBCcmFuY2ggaW5zdHJ1Y3Rp b25zLgorKyAgdWludDE2X3QgY29tcHV0ZUNvbmRpdGlvbkNvZGUoQ29uZGl0aW9uIG9wLCBDUmVn aXN0ZXJJRCBjciA9IGNyMCk7CisrICB1aW50MTZfdCBjb21wdXRlQ29uZGl0aW9uQ29kZShEb3Vi bGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjApOworKyAgQnVmZmVyT2Zmc2V0 IGFzX2IoSk9mZkltbTI2IG9mZiwgQnJhbmNoQWRkcmVzc1R5cGUgYmF0ID0gUmVsYXRpdmVCcmFu Y2gsCisrICAgICAgICAgICAgICAgICAgICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19iKGludDMyX3Qgb2ZmLCBCcmFuY2hBZGRyZXNzVHlwZSBiYXQgPSBSZWxh dGl2ZUJyYW5jaCwKKysgICAgICAgICAgICAgICAgICAgIExpbmtCaXQgbGIgPSBEb250TGlua0Ip OworKyAgQnVmZmVyT2Zmc2V0IGFzX2JscihMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19iY3RyKExpbmtCaXQgbGIgPSBEb250TGlua0IpOworKyAgQnVmZmVyT2Zm c2V0IGFzX2JjKEJPZmZJbW0xNiBvZmYsIENvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9 IGNyMCwKKysgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5Qiwg TGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZzZXQgYXNfYmMoaW50MTZfdCBv ZmYsIENvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCwKKysgICAgICAgICAgICAg ICAgICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5r Qik7CisrICBCdWZmZXJPZmZzZXQgYXNfYmMoQk9mZkltbTE2IG9mZiwgRG91YmxlQ29uZGl0aW9u IGNvbmQsIENSZWdpc3RlcklEIGNyID0gY3IwLAorKyAgICAgICAgICAgICAgICAgICAgIExpa2Vs eUJpdCBsa2IgPSBOb3RMaWtlbHlCLCBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1ZmZl ck9mZnNldCBhc19iYyhpbnQxNl90IG9mZiwgRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3Rl cklEIGNyID0gY3IwLAorKyAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IgPSBOb3RM aWtlbHlCLCBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1ZmZlck9mZnNldCBhc19iY2N0 cihDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsIExpbmtCaXQgbGIgPSBEb250TGlu a0IpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2JjY3RyKERvdWJsZUNvbmRpdGlvbiBjb25kLCBDUmVn aXN0ZXJJRCBjciA9IGNyMCwKKysgICAgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGti ID0gTm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZzZXQg YXNfYmMoaW50MTZfdCBvZmYsIHVpbnQxNl90IG9wLCBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5 QiwKKysgICAgICAgICAgICAgICAgICAgICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19iY2N0cih1aW50MTZfdCBvcCwgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2Vs eUIsCisrICAgICAgICAgICAgICAgICAgICAgICAgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7Cisr CisrICAvLyBTUFIgb3BlcmF0aW9ucy4KKysgIEJ1ZmZlck9mZnNldCBhc19tdHNwcihTUFJlZ2lz dGVySUQgc3ByLCBSZWdpc3RlciByYSk7CisrICBCdWZmZXJPZmZzZXQgYXNfbWZzcHIoUmVnaXN0 ZXIgcmQsIFNQUmVnaXN0ZXJJRCBzcHIpOworKworKyAgLy8gQ1Igb3BlcmF0aW9ucy4KKysgIEJ1 ZmZlck9mZnNldCBhc19jcmFuZCh1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKTsKKysg IEJ1ZmZlck9mZnNldCBhc19jcmFuZGModWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfY3Jvcih1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBi KTsKKysgIEJ1ZmZlck9mZnNldCBhc19jcm9yYyh1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhf dCBiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jcnhvcih1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWlu dDhfdCBiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdGNyZih1aW50MzJfdCBtYXNrLCBSZWdpc3Rl ciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfbWZvY3JmKFJlZ2lzdGVyIHJkLCBDUmVnaXN0ZXJJ RCBjcmZzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tY3J4cngoQ1JlZ2lzdGVySUQgY3J0KTsKKysK KysgIC8vIENvbXBhcmUgaW5zdHJ1Y3Rpb25zLgorKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGQoQ1Jl Z2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQg YXNfY21wZGkoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19jbXBsZChDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVy IHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbXBsZGkoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVy IHJhLCBpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbXB3KENSZWdpc3RlcklEIGNy LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcHdpKENS ZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQg YXNfY21wbHcoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBC dWZmZXJPZmZzZXQgYXNfY21wbHdpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZf dCBpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfY21wZChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGRpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKKysg IEJ1ZmZlck9mZnNldCBhc19jbXBsZChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX2NtcGxkaShSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJP ZmZzZXQgYXNfY21wdyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX2NtcHdpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCBhc19j bXBsdyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGx3 aShSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrCisrICAvLyBBTFUgKHRocmVlLXJlZ2lzdGVy KS4KKysgIEJ1ZmZlck9mZnNldCBhc19hZGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfYWRkYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19hZGRlKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmYoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3Vi ZmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfc3ViZmUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBC dWZmZXJPZmZzZXQgYXNfbmVnKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycyk7CisrCisrICBCdWZm ZXJPZmZzZXQgYXNfbXVsbGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfbXVsaGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbXVsaGR1KFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX211bGxkbyhSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdWxsdyhS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c19tdWxod3UoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrCisrICBC dWZmZXJPZmZzZXQgYXNfZGl2ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKKysgIEJ1ZmZlck9mZnNldCBhc19kaXZkdShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19kaXZ3KFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2Rpdnd1KFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgLy8gUE9XRVI5IG1vZHVsby4KKysgIEJ1 ZmZlck9mZnNldCBhc19tb2RzZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKKysgIEJ1ZmZlck9mZnNldCBhc19tb2RzdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tb2R1ZChSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tb2R1dyhSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysKKysgIC8vIEFMVSBpbW1lZGlhdGUuCisr ICBCdWZmZXJPZmZzZXQgYXNfYWRkaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3Qg aW0sCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdHVhbGx5X2xpID0gZmFsc2UpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2FkZGlzKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZf dCBpbSwKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdHVhbGx5X2xpcyA9IGZhbHNl KTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdWxsaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGlu dDE2X3QgaW0pOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmZpYyhSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcmEsIGludDE2X3QgaW0pOworKworKyAgLy8gQUxVIHVuYXJ5L2V4dGVuZGVkLgorKyAgQnVm ZmVyT2Zmc2V0IGFzX2NudGx6dyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVy T2Zmc2V0IGFzX2NudGx6ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zm c2V0IGFzX2NudHR6ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX2NudHR6dyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zmc2V0IGFz X3BvcGNudGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19w b3BjbnR3KFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycyk7CisrICAvLyBQT1dFUjEwIGJ5dGUtcmV2 ZXJzZSBkb3VibGV3b3JkOiByYSA9IGJzd2FwNjQocnMpLiAxIGluc24gcmVwbGFjaW5nIHRoZQor KyAgLy8gUE9XRVI5IG10dnNyZCAvIHh4YnJkIC8gbWZ2c3JkIHJvdW5kLXRyaXAgaW4gYnl0ZVN3 YXA2NC4KKysgIEJ1ZmZlck9mZnNldCBhc19icmQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzKTsK KysgIC8vIFBPV0VSMTAgYnl0ZS1yZXZlcnNlIGVhY2ggaGFsZndvcmQgKDQgaGFsZndvcmRzKSAv IGVhY2ggd29yZCAoMiB3b3JkcykKKysgIC8vIGluIHRoZSA2NC1iaXQgZG91Ymxld29yZC4gVGhl IHdhc20vYXNtIGNhbGxlciB1c3VhbGx5IG1hc2tzIG9yCisrICAvLyBzaWduLWV4dGVuZHMgdGhl IGxvdyBoYWxmd29yZC93b3JkIGFmdGVyd2FyZHMuCisrICBCdWZmZXJPZmZzZXQgYXNfYnJoKFJl Z2lzdGVyIHJhLCBSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfYnJ3KFJlZ2lzdGVy IHJhLCBSZWdpc3RlciBycyk7CisrCisrICAvLyBCaXQgb3BlcmF0aW9ucyAobG9naWNhbCwgdGhy ZWUtcmVnaXN0ZXIpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX2FuZF8oUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfYW5kX19yYyhSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ub3Io UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQg YXNfb3JfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVy T2Zmc2V0IGFzX3hvcl8oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfc2x3KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIg cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3NydyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zcmF3KFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciBycywgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3NsZChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zcmQoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3Jh ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKKysKKysgIC8vIEJpdCBv cGVyYXRpb25zIChsb2dpY2FsLCBpbW1lZGlhdGUpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX29yaShS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIHVpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCBh c19vcmlzKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgdWludDE2X3QgaW0pOworKyAgQnVmZmVy T2Zmc2V0IGFzX3hvcmkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSk7Cisr ICBCdWZmZXJPZmZzZXQgYXNfeG9yaXMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZf dCBpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfYW5kaV9yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmEsIHVpbnQxNl90IGltKTsKKysKKysgIC8vIFNpZ24gZXh0ZW5zaW9uLgorKyAgQnVmZmVyT2Zm c2V0IGFzX2V4dHNiKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQg YXNfZXh0c2goUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19l eHRzdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2V4dHN3 X3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycyk7CisrCisrICAvLyBTaGlmdC9yb3RhdGUgd2l0 aCBpbW1lZGlhdGVzLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3NyYXdpKFJlZ2lzdGVyIGlkLCBSZWdp c3RlciBycywgdWludDhfdCBuKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zcmFkaShSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcnMsIGludCBuKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybGRjbChSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiLCB1aW50OF90IG1iKTsKKysgIEJ1ZmZlck9m ZnNldCBhc19ybGRpY2woUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50 OF90IG1iKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybGRpY2xfcmMoUmVnaXN0ZXIgcmEsIFJlZ2lz dGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybGRp Y3IoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKKysg IEJ1ZmZlck9mZnNldCBhc19ybGRpY3JfcmMoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50 OF90IHNoLCB1aW50OF90IG1iKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybHdpbm0oUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90IG1lKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybHdpbm1fcmMoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1lKTsKKysgIEJ1ZmZlck9mZnNldCBhc19ybHdp bWkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1lKTsKKysgIEJ1ZmZlck9mZnNldCBhc19y bGRpbWkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsK KysgIEJ1ZmZlck9mZnNldCBhc19ybHdubShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lz dGVyIHJiLCB1aW50OF90IG1iLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWUp OworKworKyAgLy8gSW50ZWdlciBsb2FkcyAoRC1mb3JtKS4KKysgIEJ1ZmZlck9mZnNldCBhc19s YnooUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrICBCdWZmZXJPZmZz ZXQgYXNfbGhhKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX2xoeihSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsK KysgIEJ1ZmZlck9mZnNldCBhc19sd2EoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90 IG9mZik7CisrICBCdWZmZXJPZmZzZXQgYXNfbHd6KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwg aW50MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2xkKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYiwgaW50MTZfdCBvZmYpOworKworKyAgLy8gSW50ZWdlciBzdG9yZXMgKEQtZm9ybSkuCisr ICBCdWZmZXJPZmZzZXQgYXNfc3RiKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBv ZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0aChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGlu dDE2X3Qgb2ZmKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdHcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJiLCBpbnQxNl90IG9mZik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3RkKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZHUoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrCisrICAvLyBJbnRlZ2VyIGxvYWRz L3N0b3JlcyAoWC1mb3JtLCBpbmRleGVkKS4KKysgIEJ1ZmZlck9mZnNldCBhc19sYnp4KFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2xo YXgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfbGh6eChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19sd3p4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKyAgLy8gWC1mb3JtIHNpZ24tZXh0ZW5kaW5nIHdvcmQgbG9hZC4gU2luZ2xlLWluc24gZXF1 aXZhbGVudCBvZiBsd3p4ICsgZXh0c3cuCisrICBCdWZmZXJPZmZzZXQgYXNfbHdheChSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19sd2Fy eChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19sYmFyeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19saGFyeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKKysgIEJ1ZmZlck9mZnNldCBhc19sZHgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbGRhcngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3RieChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdGJjeChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19z dHd4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zm c2V0IGFzX3N0d2JyeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc19zdGh4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0aGN4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwg UmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZHgoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3RkY3goUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R3Y3go UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrCisrICAvLyBJbnRlZ2Vy IHNlbGVjdC4KKysgIC8vIFBPV0VSMTAgKElTQSAzLjEpLiBTZXQgUlQgPSAxLzAgYmFzZWQgb24g YSBDUiBiaXQuCisrICBCdWZmZXJPZmZzZXQgYXNfc2V0YmMoUmVnaXN0ZXIgcnQsIHVpbnQxNl90 IGJjLCBDUmVnaXN0ZXJJRCBjcik7CisrICBCdWZmZXJPZmZzZXQgYXNfc2V0YmNyKFJlZ2lzdGVy IHJ0LCB1aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3IpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2lz ZWwoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwgdWludDE2X3QgcmMsCisr ICAgICAgICAgICAgICAgICAgICAgICBDUmVnaXN0ZXJJRCBjciA9IGNyMCk7CisrICBCdWZmZXJP ZmZzZXQgYXNfaXNlbDAoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwgdWlu dDE2X3QgcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgQ1JlZ2lzdGVySUQgY3IgPSBjcjAp OworKworKyAgLy8gRlAgY29tcGFyZS4KKysgIEJ1ZmZlck9mZnNldCBhc19mY21wdShDUmVnaXN0 ZXJJRCBjciwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfZmNtcHUoRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYik7CisrCisr ICAvLyBGUCBhcml0aG1ldGljICh0d28tc291cmNlKS4KKysgIEJ1ZmZlck9mZnNldCBhc19mYWRk KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2ZhZGRzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIg cmEsIEZsb2F0UmVnaXN0ZXIgcmMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZzdWIoRmxvYXRSZWdp c3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7CisrICBCdWZmZXJP ZmZzZXQgYXNfZnN1YnMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRS ZWdpc3RlciByYyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmRpdihGbG9hdFJlZ2lzdGVyIHJkLCBG bG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKKysgIEJ1ZmZlck9mZnNldCBhc19m ZGl2cyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJj KTsKKysgIEJ1ZmZlck9mZnNldCBhc19mbXVsKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0 ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZtdWxzKEZsb2F0 UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX2ZjcHNnbihGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBG bG9hdFJlZ2lzdGVyIHJjKTsKKysgIC8vIEZQIHVuYXJ5LgorKyAgQnVmZmVyT2Zmc2V0IGFzX2Zh YnMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQg YXNfZm5lZyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9m ZnNldCBhc19mbXIoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZm ZXJPZmZzZXQgYXNfZnNxcnQoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Cisr ICBCdWZmZXJPZmZzZXQgYXNfZnNxcnRzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIg cnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2Zyc3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdp c3RlciBycyk7CisrCisrICAvLyBGUCBjb252ZXJzaW9ucy4KKysgIEJ1ZmZlck9mZnNldCBhc19m Y2ZpZChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19mY2ZpZHMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZm ZXJPZmZzZXQgYXNfZmNmaWR1KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2ZjZmlkdXMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3Rl ciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmN0aWQoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRS ZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmN0aWR6KEZsb2F0UmVnaXN0ZXIgcmQs IEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjdGlkdXooRmxvYXRSZWdp c3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmN0aXd6KEZs b2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOworKworKyAgLy8gRlAgcm91bmRpbmcu CisrICBCdWZmZXJPZmZzZXQgYXNfZnJpbShGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVy IHJzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19mcmlwKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVn aXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZyaXooRmxvYXRSZWdpc3RlciByZCwgRmxv YXRSZWdpc3RlciBycyk7CisrCisrICAvLyBGUCBsb2FkcyAoRC1mb3JtKS4KKysgIEJ1ZmZlck9m ZnNldCBhc19sZmQoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsK KysgIEJ1ZmZlck9mZnNldCBhc19sZnMoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGlu dDE2X3Qgb2ZmKTsKKysKKysgIC8vIEZQIHN0b3JlcyAoRC1mb3JtKS4KKysgIEJ1ZmZlck9mZnNl dCBhc19zdGZkKEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfc3RmcyhGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50 MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZmR1KEZsb2F0UmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3Rmc3UoRmxvYXRS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKKysKKysgIC8vIEZQIGxvYWRz L3N0b3JlcyAoWC1mb3JtLCBpbmRleGVkKS4KKysgIEJ1ZmZlck9mZnNldCBhc19sZmR4KEZsb2F0 UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQg YXNfbGZzeChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAg QnVmZmVyT2Zmc2V0IGFzX2xmaXdheChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZmR4KEZsb2F0UmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3Rmc3goRmxvYXRS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysKKysgIC8vIEZQU0NSIG9w ZXJhdGlvbnMuCisrICBCdWZmZXJPZmZzZXQgYXNfbXRmc2IwKHVpbnQ4X3QgYnQpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX21jcmZzKENSZWdpc3RlcklEIGJmLCB1aW50OF90IGJmYSk7CisrCisrICAv LyBWU1ggKEZQUi1vbmx5IHN1YnNldCkuCisrICBCdWZmZXJPZmZzZXQgYXNfbWZ2c3JkKFJlZ2lz dGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHhzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdHZzcmQoRmxv YXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOworKyAgLy8gUE9XRVI4KyAoSVNBIDIuMDcpLiBT aWduLWV4dGVuZGluZyBtb3ZlIG9mIFJBJ3MgbG93IDMyIGJpdHMgdG8gRlBSLgorKyAgQnVmZmVy T2Zmc2V0IGFzX210dnNyd2EoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX210dnNyd3ooRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOworKyAg QnVmZmVyT2Zmc2V0IGFzX210dnNyd3MoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX3h4YnJkKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIg eGIpOworKyAgLy8gUE9XRVI5IHNjYWxhciBWU1ggbWF4L21pbiB3aXRoIEphdmEvSmF2YVNjcmlw dCBzZW1hbnRpY3MgKG1hdGNoZXMKKysgIC8vIEVDTUEtMjYyIE1hdGgubWF4IC8gTWF0aC5taW4p LiBPcGVyYXRlIG9uIEZQUi1zcGFjZSAoZW5jb2RpbmcgMC4uMzEpLgorKyAgQnVmZmVyT2Zmc2V0 IGFzX3hzbWF4amRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQg YXNfeHNtaW5qZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIEJ1ZmZlck9mZnNldCBh c194c2N2ZHBzcG4oRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZm ZXJPZmZzZXQgYXNfeHNjdnNwZHBuKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIp OworKyAgLy8gUE9XRVI5IChJU0EgMy4wKSBzY2FsYXIgRlAxNiBjb252ZXJzaW9ucy4KKysgIEJ1 ZmZlck9mZnNldCBhc194c2N2ZHBocChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhi KTsKKysgIEJ1ZmZlck9mZnNldCBhc194c2N2aHBkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJl Z2lzdGVyIHhiKTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIGV4dHJhY3QgYmlhc2Vk IGV4cG9uZW50LgorKyAgQnVmZmVyT2Zmc2V0IGFzX3hzeGV4cGRwKEZsb2F0UmVnaXN0ZXIgeHQs IEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgLy8gUE9XRVI5IChJU0EgMy4wKSBzY2FsYXIgRlAxNiBs b2FkL3N0b3JlLCBYLWZvcm0gaW5kZXhlZC4KKysgIEJ1ZmZlck9mZnNldCBhc19seHNpaHp4KEZs b2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfc3R4c2loeChGbG9hdFJlZ2lzdGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKworKyAgLy8gVlNYIFNJTUQgbG9hZC9zdG9yZSAoWC1mb3JtLCBpbmRleGVkKS4KKysgIEJ1 ZmZlck9mZnNldCBhc19seHZ4KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R4dngoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19seHZkMngoRmxvYXRSZWdp c3RlciB4dCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19z dHh2ZDJ4KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrCisr ICAvLyBWTVggU0lNRCBsb2FkL3N0b3JlIChYLWZvcm0sIGluZGV4ZWQpLiBUYWtlIGEgcmF3IFZS IG51bWJlciAoMC0zMSkKKysgIC8vIGJlY2F1c2UgVlIyMC1WUjMxIGFyZSBvdXRzaWRlIHRoZSBG bG9hdFJlZ2lzdGVyIGVuY29kaW5nICh3aGljaCBvbmx5CisrICAvLyBjb3ZlcnMgVlNSMC0zMSA9 IGYwLWYzMSkuIFVzZWQgYnkgdGhlIEpJVCB0cmFtcG9saW5lIHRvIHNhdmUvcmVzdG9yZQorKyAg Ly8gdGhlIEVMRnYyIGNhbGxlZS1zYXZlZCBWUjIwLVZSMzEuIEVBIGlzIGZvcmNlLWFsaWduZWQg dG8gMTYgYnl0ZXMKKysgIC8vIChsb3cgNCBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBpZ25vcmVk KSwgc28gdGhlIHNsb3QncyBhbGlnbm1lbnQKKysgIC8vIG1hdHRlcnMgZm9yIGxheW91dCBidXQg bm90IGZvciB0cmFwIGF2b2lkYW5jZS4KKysgIEJ1ZmZlck9mZnNldCBhc19sdngodWludDhfdCB2 cnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R2eCh1 aW50OF90IHZycywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysKKysgIC8vIFZTWCBTSU1E IHJlZ2lzdGVyIG9wZXJhdGlvbnMgKFhYMy1mb3JtIC8gWFgxLWZvcm0gLyBYWDItZm9ybSkuCisr ICBCdWZmZXJPZmZzZXQgYXNfeHhsb3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 YSwgRmxvYXRSZWdpc3RlciB4Yik7CisrCisrICAvLyBWU1ggYml0d2lzZSBvcGVyYXRpb25zIChY WDMtZm9ybSkuCisrICBCdWZmZXJPZmZzZXQgYXNfeHhsYW5kKEZsb2F0UmVnaXN0ZXIgeHQsIEZs b2F0UmVnaXN0ZXIgeGEsIEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3h4 bHhvcihGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhi KTsKKysgIEJ1ZmZlck9mZnNldCBhc194eGxub3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdp c3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHhsYW5kYyhG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiKTsKKysg IEJ1ZmZlck9mZnNldCBhc194eHNlbChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhh LCBGbG9hdFJlZ2lzdGVyIHhiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgeGMpOworKworKyAgLy8gVk1YIGludGVnZXIgYXJpdGhtZXRpYyAoVlIwLTMxID0gVlNSMzIt NjMgb25seSkuCisrICAvLyBDYWxsZXJzIG11c3QgZW5zdXJlIG9wZXJhbmRzIGFyZSBpbiBWUiBz cGFjZS4KKysgIEJ1ZmZlck9mZnNldCBhc192YWRkdWJtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGR1aG0odWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmFkZHV3bSh1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c192YWRkdWRtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZzdWJ1Ym0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnN1YnVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3VidXdtKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1ZG0odWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNf dmFkZHNicyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZl ck9mZnNldCBhc192YWRkc2hzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGR1YnModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmFkZHVocyh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3Vic2JzKHVpbnQ4 X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zz dWJzaHModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfdnN1YnVicyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsK KysgIEJ1ZmZlck9mZnNldCBhc192c3VidWhzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWlu dDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW5zYih1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWluc2godWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1pbnN3 KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZtYXhzYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc192bWF4c2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1heHN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXhzZCh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWludWIodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1p bnVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zm c2V0IGFzX3ZtaW51dyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc192bWF4dWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1heHVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXh1dyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCk6IHBlci1s YW5lIGludGVnZXIgbmVnYXRlLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZuZWd3KHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm5lZ2QodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJiKTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCk6IGFkZHBjaXMgclQsIEQuICBDb21w dXRlcyByVCA9IChDSUEgKyA0KSArIChEIDw8IDE2KS4KKysgIC8vIEQgaXMgYSAxNi1iaXQgc2ln bmVkIGltbWVkaWF0ZTsgRFgtZm9ybSBzcGxpdHMgRCBhY3Jvc3MgdGhyZWUgaW5zdHJ1Y3Rpb24K KysgIC8vIGZpZWxkcyAoZDBbMTYuLjI1XSDiiKUgZDFbMTEuLjE1XSDiiKUgZDJbMzFdKS4gIE5v IExSIGNsb2JiZXIsIG5vIFJBUyBoYXphcmQuCisrICBCdWZmZXJPZmZzZXQgYXNfYWRkcGNpcyhS ZWdpc3RlciBydCwgaW50MTZfdCBkKTsKKysgIC8vIFBPV0VSMTAgKElTQSAzLjEpIHByZWZpeGVk IGluc3RydWN0aW9ucy4gRWFjaCBlbWl0cyA4IGJ5dGVzIChwcmVmaXggKworKyAgLy8gc3VmZml4 KSB3aXRoIGEgc2luZ2xlIG5vcCBpbnNlcnRlZCBiZWZvcmUgaWZmIHRoZSBwcmVmaXggd291bGQK KysgIC8vIHN0cmFkZGxlIGEgNjQtYnl0ZSBibG9jay4gQ2FsbGVyIG11c3QgZ3VhcmFudGVlIEhh c1BPV0VSMTAoKS4KKysgIC8vIGltbTM0IGlzIHNpZ25lZCAzNC1iaXQ7IFI9dHJ1ZSBzZWxlY3Rz IFBDLXJlbGF0aXZlIGZvcm0gKFJBIG11c3QgYmUgcjApLgorKyAgLy8gUmV0dXJucyB0aGUgb2Zm c2V0IG9mIHRoZSBwcmVmaXggd29yZC4KKysgIEJ1ZmZlck9mZnNldCBhc19wYWRkaShSZWdpc3Rl ciBydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsIGJvb2wgUik7CisrICBCdWZmZXJPZmZz ZXQgYXNfcGxkKFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBS KTsKKysgIEJ1ZmZlck9mZnNldCBhc19wbHh2KHVpbnQ4X3QgeHQsIFJlZ2lzdGVyIHJhLCBpbnQ2 NF90IGltbTM0LCBib29sIFIpOworKyAgLy8gRlAtdGFyZ2V0IHByZWZpeGVkIGxvYWRzOiBwbGZk L3BsZnMgYXJlIE1MUyAoVHlwZT0yKSB3aXRoIHN1ZmZpeAorKyAgLy8gb3Bjb2RlcyA1MCBhbmQg NDguIHBsZnMgd2lkZW5zIHNpbmdsZSDihpIgZG91YmxlIGluIHRoZSBGUFIKKysgIC8vIChtYXRj aGVzIG5vbi1wcmVmaXhlZCBsZnMgc2VtYW50aWNzKS4KKysgIEJ1ZmZlck9mZnNldCBhc19wbGZk KEZsb2F0UmVnaXN0ZXIgZnJ0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgUik7CisrICBCdWZmZXJPZmZzZXQgYXNfcGxmcyhGbG9hdFJl Z2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpOworKyAgLy8gUHJlZml4ZWQtc3RvcmUgY291bnRlcnBhcnRzLiBTYW1l IHByZWZpeCBzaGFwZTsgc3VmZml4IG9wY29kZXMgYXJlCisrICAvLyB0aGUgRC1mb3JtIHZhcmlh bnRzIG9mIHN0ZC9zdHh2L3N0ZmQvc3RmcyAoNjEsIDI3LCA1NCwgNTIpLgorKyAgQnVmZmVyT2Zm c2V0IGFzX3BzdGQoUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LCBib29s IFIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3BzdHh2KHVpbnQ4X3QgeHMsIFJlZ2lzdGVyIHJhLCBp bnQ2NF90IGltbTM0LCBib29sIFIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3BzdGZkKEZsb2F0UmVn aXN0ZXIgZnJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3BzdGZzKEZsb2F0UmVnaXN0ZXIg ZnJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAgICAgICAg ICBib29sIFIpOworKworKyBwcml2YXRlOgorKyAgLy8gRW1pdCBhIG5vcCBiZWZvcmUgYSBwcmVm aXhlZCBpbnN0cnVjdGlvbiBpZmYgdGhlIHByZWZpeCB3b3VsZCBvdGhlcndpc2UKKysgIC8vIHN0 YXJ0IGF0IG9mZnNldCA2MCAobW9kIDY0KSBhbmQgdGhlIHN1ZmZpeCB3b3VsZCBsYW5kIGluIHRo ZSBuZXh0IGJsb2NrLgorKyAgdm9pZCBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOworKworKyBw dWJsaWM6CisrICBCdWZmZXJPZmZzZXQgYXNfdmF2Z3ViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zhdmd1aCh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXVsdXdtKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFz X3ZtdWxsZCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIC8vIFZN WCBzaGlmdCAoVlIwLTMxIG9ubHkpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzbGIodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnNsaCh1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c192c2x3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVy T2Zmc2V0IGFzX3ZzbGQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfdnNyYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3Qg dnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3JoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcncodWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnNyZCh1aW50OF90IHZy dCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3JhYih1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c192c3JhaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZl ck9mZnNldCBhc192c3Jhdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsK KysgIEJ1ZmZlck9mZnNldCBhc192c3JhZCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c2xvKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zzcm8odWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrCisrICAvLyBWTVggaW50ZWdlciBjb21wYXJlIChW UjAtMzEgb25seSkuCisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWIodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWgodWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNf dmNtcGVxdXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZm ZXJPZmZzZXQgYXNfdmNtcGVxdWQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7CisrICAvLyBSZWNvcmQgZm9ybXMgc2V0IENSNjogTFQgPSBhbGwtdHJ1ZSwgRVEgPSBub25l LXRydWUuCisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWJfcmModWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWhfcmModWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNf dmNtcGVxdXdfcmModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBC dWZmZXJPZmZzZXQgYXNfdmNtcGVxdWRfcmModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0c2IodWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0c2godWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNt cGd0c3codWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfdmNtcGd0c2QodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0dWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0dWgodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0dXcodWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNf dmNtcGd0dWQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICAvLyBQ T1dFUjkgKElTQSAzLjApLiBOb3RFcXVhbCBjb21wYXJlOyBubyBkb3VibGV3b3JkIHZhcmlhbnQu CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcG5lYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVp bnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192Y21wbmVoKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBuZXcodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrCisrICAvLyBWU1ggZmxvYXQgY29t cGFyZSAoWFgzLWZvcm0sIFZTUjAtNjMpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZXFzcChG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIEJ1ZmZlck9mZnNldCBhc194dmNtcGd0c3Ao RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBnZXNw KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZXFk cChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIEJ1ZmZlck9mZnNldCBhc194dmNtcGd0 ZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBn ZWRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpOworKworKyAgLy8gVlNYIGZsb2F0IGFyaXRo bWV0aWMgKFhYMy1mb3JtIGJpbmFyeSwgWFgyLWZvcm0gdW5hcnkpLgorKyNkZWZpbmUgREVDTF9W U1hfQklOKG9wKSBcCisrICBCdWZmZXJPZmZzZXQgYXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBG bG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIERFQ0xfVlNYX0JJTih4dmFk ZHNwKQorKyAgREVDTF9WU1hfQklOKHh2YWRkZHApIERFQ0xfVlNYX0JJTih4dnN1YnNwKSBERUNM X1ZTWF9CSU4oCisrICAgICAgeHZzdWJkcCkgREVDTF9WU1hfQklOKHh2bXVsc3ApIERFQ0xfVlNY X0JJTih4dm11bGRwKSBERUNMX1ZTWF9CSU4oeHZkaXZzcCkKKysgICAgICBERUNMX1ZTWF9CSU4o eHZkaXZkcCkgREVDTF9WU1hfQklOKHh2bWluc3ApIERFQ0xfVlNYX0JJTigKKysgICAgICAgICAg eHZtaW5kcCkgREVDTF9WU1hfQklOKHh2bWF4c3ApIERFQ0xfVlNYX0JJTih4dm1heGRwKQorKyAg ICAgICAgICBERUNMX1ZTWF9CSU4oeHZtYWRkYXNwKSBERUNMX1ZTWF9CSU4oeHZtYWRkYWRwKSBE RUNMX1ZTWF9CSU4oCisrICAgICAgICAgICAgICB4dm5tc3ViYXNwKSBERUNMX1ZTWF9CSU4oeHZu bXN1YmFkcCkKKysjdW5kZWYgREVDTF9WU1hfQklOCisrI2RlZmluZSBERUNMX1ZTWF9VTihvcCkg XAorKyAgQnVmZmVyT2Zmc2V0IGFzXyMjb3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4Yik7CisrICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dmFic3NwKSBERUNMX1ZTWF9VTih4 dmFic2RwKSBERUNMX1ZTWF9VTih4dm5lZ3NwKQorKyAgICAgICAgICAgICAgICAgIERFQ0xfVlNY X1VOKHh2bmVnZHApIERFQ0xfVlNYX1VOKHh2c3FydHNwKSBERUNMX1ZTWF9VTigKKysgICAgICAg ICAgICAgICAgICAgICAgeHZzcXJ0ZHApIERFQ0xfVlNYX1VOKHh2cnNwaXApIERFQ0xfVlNYX1VO KHh2cmRwaXApCisrICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2cnNwaW0pIERF Q0xfVlNYX1VOKHh2cmRwaW0pIERFQ0xfVlNYX1VOKAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgeHZyc3BpeikgREVDTF9WU1hfVU4oeHZyZHBpeikgREVDTF9WU1hfVU4oeHZyc3BpYykKKysg ICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2cmRwaWMpIERFQ0xfVlNYX1VO KHh2Y3ZzeHdzcCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4 dmN2dXh3c3ApIERFQ0xfVlNYX1VOKHh2Y3ZzeHdkcCkKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdnV4d2RwKSBERUNMX1ZTWF9VTih4dmN2c3BzeHdz KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZj dnNwdXh3cykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNM X1ZTWF9VTih4dmN2ZHBzeHdzKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBERUNMX1ZTWF9VTih4dmN2ZHB1eHdzKQorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdmRwc3ApCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9W U1hfVU4oeHZjdnNwZHApCisrI3VuZGVmIERFQ0xfVlNYX1VOCisrCisrICAgICAgLy8gVk1YIHdp ZGVuL25hcnJvdy9tZXJnZS9wYWNrIChWUjAtMzEgb25seSkuCisrICAgICAgQnVmZmVyT2Zmc2V0 IGFzX3Z1cGtoc2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c192dXBrbHNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNf dnVwa2hzaCh1aW50OF90IHZydCwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Z1 cGtsc2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192dXBr aHN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnVwa2xz dyh1aW50OF90IHZydCwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zwa3Noc3Mo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQg YXNfdnBrc3dzcyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc192cGtzaHVzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zwa3N3dXModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1yZ2hiKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtcmdoaCh1aW50 OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192 bXJnaHcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfdm1yZ2xiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX3ZtcmdsaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXJnbHcodWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7CisrCisrICAvLyBWTVggZXh0ZW5kZWQgbXVsdGlwbHkgKFZSMC0z MSBvbmx5KS4KKysgIEJ1ZmZlck9mZnNldCBhc192bXVsZXNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxvc2IodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bGV1 Yih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNl dCBhc192bXVsb3ViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAg QnVmZmVyT2Zmc2V0IGFzX3ZtdWxlc2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bG9zaCh1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXVsZXVoKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxvdWgo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQg YXNfdm11bGVzdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc192bXVsb3N3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxldXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bG91dyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192cG9wY250Yih1 aW50OF90IHZydCwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZwZXJtKHVpbnQ4 X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsIHVpbnQ4X3QgdnJjKTsKKysgIC8vIFBP V0VSOCsgKElTQSAyLjA3KS4gVlgtZm9ybSBiaXQtcGVybXV0ZS4gU2VlIFBQQ192YnBlcm1xIGNv bW1lbnQuCisrICBCdWZmZXJPZmZzZXQgYXNfdmJwZXJtcSh1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKKysgIC8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBFeHRyYWN0 IE1hc2suIFJUIGlzIGEgR1BSLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0Ym0oUmVnaXN0 ZXIgcnQsIEZsb2F0UmVnaXN0ZXIgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192ZXh0cmFjdGht KFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmV4 dHJhY3R3bShSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB2cmIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZleHRyYWN0ZG0oUmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0ZXIgdnJiKTsKKysgIC8vIFBP V0VSMTAgKElTQSAzLjEpIFZlY3RvciBJbnNlcnQgZnJvbSBHUFIgYXQgaW1tZWRpYXRlIGJ5dGUg b2Zmc2V0LgorKyAgLy8gVUlNIHJhbmdlOiB2aW5zdyAwLi4xMiwgdmluc2QgMC4uOCAoY2FsbGVy IG11c3QgZW5mb3JjZSkuCisrICBCdWZmZXJPZmZzZXQgYXNfdmluc3coRmxvYXRSZWdpc3RlciB2 cnQsIFJlZ2lzdGVyIHJiLCB1aW50OF90IHVpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfdmluc2Qo RmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lzdGVyIHJiLCB1aW50OF90IHVpbSk7CisrICAvLyBQT1dF UjEwIChJU0EgMy4xKSBWZWN0b3IgSW5zZXJ0IGJ5dGUgLyBoYWxmd29yZCBmcm9tIEdQUiB3aXRo IHRoZQorKyAgLy8gYnl0ZSBwb3NpdGlvbiBzdXBwbGllZCBieSBhbm90aGVyIEdQUiAoUkEgJiAw eEYgZm9yIHZpbnNicngsCisrICAvLyBSQSAmIDB4RSBmb3Igdmluc2hyeCkuICJyeCIgPSByaWdo dC1pbmRleGVkID0gTEUtbmF0dXJhbC4KKysgIEJ1ZmZlck9mZnNldCBhc192aW5zYnJ4KEZsb2F0 UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZpbnNocngoRmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7 CisrICAvLyBQT1dFUjkgKElTQSAzLjApIFZlY3RvciBJbnNlcnQgYnl0ZSAvIGhhbGZ3b3JkIGZy b20gVlIgYXQgaW1tZWRpYXRlCisrICAvLyBieXRlIHBvc2l0aW9uLiBVSU0gcmFuZ2U6IHZpbnNl cnRiIDAuLjE1LCB2aW5zZXJ0aCAwLi4xNAorKyAgLy8gKGNhbGxlciBtdXN0IGVuZm9yY2U7IHZp bnNlcnRoIFVJTSBpcyBpbiBieXRlcywgZXZlbi1hbGlnbmVkKS4KKysgIEJ1ZmZlck9mZnNldCBh c192aW5zZXJ0YihGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qg dWltKTsKKysgIEJ1ZmZlck9mZnNldCBhc192aW5zZXJ0aChGbG9hdFJlZ2lzdGVyIHZydCwgRmxv YXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgVmVj dG9yIEV4dHJhY3QgYnl0ZSAvIGhhbGZ3b3JkIGZyb20gVlIgYXQgaW1tZWRpYXRlCisrICAvLyBC RSBieXRlIHBvc2l0aW9uLiBVSU0gcmFuZ2U6IHZleHRyYWN0dWIgMC4uMTUsIHZleHRyYWN0dWgg MC4uMTQKKysgIC8vIChjYWxsZXIgbXVzdCBlbmZvcmNlOyB2ZXh0cmFjdHVoIFVJTSBpcyBpbiBi eXRlcywgZXZlbi1hbGlnbmVkKS4gVGhlCisrICAvLyBleHRyYWN0ZWQgYnl0ZS9oYWxmd29yZCBs YW5kcyBhdCBCRSBieXRlIDcgb2YgVlJULCB3aXRoIHRoZSByZXN0CisrICAvLyB6ZXJvZWQg4oCU IHNvIGEgc3Vic2VxdWVudCBtZnZzcmQgcmVhZHMgaXQgYXMgdGhlIGxvdyBieXRlL2hhbGZ3b3Jk CisrICAvLyBvZiB0aGUgR1BSIHdpdGggaW1wbGljaXQgemVyby1leHRlbnNpb24uCisrICBCdWZm ZXJPZmZzZXQgYXNfdmV4dHJhY3R1YihGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2 cmIsIHVpbnQ4X3QgdWltKTsKKysgIEJ1ZmZlck9mZnNldCBhc192ZXh0cmFjdHVoKEZsb2F0UmVn aXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYiwgdWludDhfdCB1aW0pOworKyAgLy8gVlgtZm9y bSB3aXRoIDUtYml0IHNpZ25lZCBpbW1lZGlhdGUgc3BsYXQ6IGVhY2ggbGFuZSBvZiBWUlQgaXMK KysgIC8vIHNldCB0byBzaWduX2V4dGVuZChTSU1NNSkgKHJhbmdlIFstMTYsIDE1XSkgYXQgYnl0 ZS9oYWxmd29yZC93b3JkIGdyYW51bGFyaXR5LgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXNi KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXNo KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXN3 KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpOworKworKyAgLy8gVkEtZm9ybSB0ZXJuYXJ5IFZN WCBpbnN0cnVjdGlvbnMuCisrICBCdWZmZXJPZmZzZXQgYXNfdm1sYWRkdWhtKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsIHVpbnQ4X3QgdnJjKTsKKysgIEJ1ZmZlck9mZnNl dCBhc192bWhyYWRkc2hzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYyk7CisrICBCdWZmZXJPZmZz ZXQgYXNfdm1zdW1zaG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwgdWlu dDhfdCB2cmMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Ztc3VtdWhtKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIsIHVpbnQ4X3QgdnJjKTsKKysgIEJ1ZmZlck9mZnNldCBhc194 eHBlcm1kaShGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVy IHhiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZG0pOworKyAgQnVmZmVy T2Zmc2V0IGFzX3h4c3BsdHcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwgdWlu dDhfdCB1aW0pOworKyAgLy8gUE9XRVI5IChJU0EgMy4wKS4gU3BsYXQgOC1iaXQgaW1tZWRpYXRl IHRvIGFsbCAxNiBieXRlcyBvZiBhbiBGUFItZW5jb2RlZAorKyAgLy8gVlNSIChUWCBiaXQgZm9y Y2VkIDApLiBYWDEtZm9ybSwgbm8gUmMuCisrICBCdWZmZXJPZmZzZXQgYXNfeHhzcGx0aWIoRmxv YXRSZWdpc3RlciB4dCwgdWludDhfdCBpbW04KTsKKysgIEJ1ZmZlck9mZnNldCBhc194eGluc2Vy dHcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwgdWludDhfdCB1aW0pOworKyAg QnVmZmVyT2Zmc2V0IGFzX3h4ZXh0cmFjdHV3KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGIsIHVpbnQ4X3QgdWltKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdHZzcmRkKEZsb2F0UmVn aXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNf bWZ2c3JsZChSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB4cyk7CisrCisrICAvLyBWTVggdmVj dG9yIG9wZXJhdGlvbnMuCisrICBCdWZmZXJPZmZzZXQgYXNfdnNwbHRiKEZsb2F0UmVnaXN0ZXIg dnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYiwgdWludDhfdCB1aW0pOworKyAgQnVmZmVyT2Zmc2V0IGFz X3ZzcGx0aChGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWlt KTsKKysgIEJ1ZmZlck9mZnNldCBhc192c2xkb2koRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVn aXN0ZXIgdnJhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHZyYiwg dWludDhfdCBzaGIpOworKworKyAgLy8gQmFycmllciBhbmQgc3luYyBpbnN0cnVjdGlvbnMuCisr ICBCdWZmZXJPZmZzZXQgYXNfbHdzeW5jKCk7CisrICBCdWZmZXJPZmZzZXQgYXNfc3luYygpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2lzeW5jKCk7CisrCisrICAvLyBDb252ZW5pZW5jZSBwc2V1ZG8t aW5zdHJ1Y3Rpb25zLgorKyAgQnVmZmVyT2Zmc2V0IHhzX3RyYXAoKTsKKysgIEJ1ZmZlck9mZnNl dCB4c190cmFwX3RhZ2dlZChUcmFwVGFnIHRhZyk7CisrICBCdWZmZXJPZmZzZXQgeHNfbXIoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCB4c19tdGN0cihSZWdpc3Rl ciByYSk7CisrICBCdWZmZXJPZmZzZXQgeHNfbXRscihSZWdpc3RlciByYSk7CisrICBCdWZmZXJP ZmZzZXQgeHNfbWZscihSZWdpc3RlciByZCk7CisrICBCdWZmZXJPZmZzZXQgeHNfbXRjcihSZWdp c3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgeHNfbWZ4ZXIoUmVnaXN0ZXIgcmEpOworKyAgQnVm ZmVyT2Zmc2V0IHhzX210eGVyKFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCB4c19saShS ZWdpc3RlciByZCwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgeHNfbGlzKFJlZ2lzdGVy IHJkLCBpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCB4X3N1YmkoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCBpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCB4X25vdChSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zmc2V0IHhfc2x3aShSZWdpc3RlciByZCwgUmVn aXN0ZXIgcnMsIGludCBuKTsKKysgIEJ1ZmZlck9mZnNldCB4X3NsZGkoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJzLCBpbnQgbik7CisrICBCdWZmZXJPZmZzZXQgeF9zcndpKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciBycywgaW50IG4pOworKyAgQnVmZmVyT2Zmc2V0IHhfc3JkaShSZWdpc3RlciByZCwg UmVnaXN0ZXIgcnMsIGludCBuKTsKKysgIEJ1ZmZlck9mZnNldCB4X2luc2VydGJpdHMwXzE1KFJl Z2lzdGVyIHJkLCBSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgeF9iaXRfdmFsdWUoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1bnNpZ25lZCBiaXQpOworKyAgQnVmZmVyT2Zmc2V0IHhf c3JfbXVsbGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKKysKKysgIC8v IC0tLSBMYWJlbCBvcGVyYXRpb25zLgorKyAgdm9pZCBiaW5kKExhYmVsKiBsYWJlbCkgeyBiaW5k KGxhYmVsLCBuZXh0T2Zmc2V0KCkpOyB9CisrICB2b2lkIGJpbmQoTGFiZWwqIGxhYmVsLCBCdWZm ZXJPZmZzZXQgYm9mZik7CisrICB2b2lkIGJpbmQoSW5zdEltbSogaW5zdCwgdWludHB0cl90IGJy YW5jaCwgdWludHB0cl90IHRhcmdldCk7CisrICB2b2lkIGJpbmQoQ29kZUxhYmVsKiBsYWJlbCkg eyBsYWJlbC0+dGFyZ2V0KCktPmJpbmQoY3VycmVudE9mZnNldCgpKTsgfQorKyAgdWludDMyX3Qg Y3VycmVudE9mZnNldCgpIHsgcmV0dXJuIG5leHRPZmZzZXQoKS5nZXRPZmZzZXQoKTsgfQorKyAg dm9pZCByZXRhcmdldChMYWJlbCogbGFiZWwsIExhYmVsKiB0YXJnZXQpOworKyAgdm9pZCBjYWxs KExhYmVsKiBsYWJlbCk7CisrICB2b2lkIGNhbGwodm9pZCogdGFyZ2V0KTsKKysKKysgIHZvaWQg YXNfYnJlYWsodWludDMyX3QgY29kZSk7CisrCisrICAvLyAtLS0gU3RhdGljIGNhcGFiaWxpdHkg cXVlcmllcy4KKysgIHN0YXRpYyBib29sIFN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIHsgcmV0dXJu IHRydWU7IH0KKysgIHN0YXRpYyBib29sIFN1cHBvcnRzV2FzbVNpbWQoKSB7IHJldHVybiB0cnVl OyB9CisrICBzdGF0aWMgYm9vbCBTdXBwb3J0c1VuYWxpZ25lZEFjY2Vzc2VzKCkgeyByZXR1cm4g dHJ1ZTsgfQorKyAgc3RhdGljIGJvb2wgU3VwcG9ydHNGYXN0VW5hbGlnbmVkRlBBY2Nlc3Nlcygp IHsgcmV0dXJuIHRydWU7IH0KKysgIC8vIFBPV0VSOSBoYXMgc2NhbGFyIEZQMTYgaGFyZHdhcmUg KHhzY3ZkcGhwL3hzY3ZocGRwKTsgUE9XRVI4IGRvZXNuJ3QuCisrICAvLyBSdW50aW1lLWdhdGUg bGlrZSB4ODYncyBTdXBwb3J0c0Zsb2F0MzJUbzE2ICh3aGljaCBrZXlzIG9mZiBGMTZDKS4KKysg IHN0YXRpYyBib29sIFN1cHBvcnRzRmxvYXQ2NFRvMTYoKSB7IHJldHVybiBIYXNQT1dFUjkoKTsg fQorKyAgc3RhdGljIGJvb2wgU3VwcG9ydHNGbG9hdDMyVG8xNigpIHsgcmV0dXJuIEhhc1BPV0VS OSgpOyB9CisrICBzdGF0aWMgYm9vbCBIYXNSb3VuZEluc3RydWN0aW9uKFJvdW5kaW5nTW9kZSBt b2RlKSB7CisrICAgIC8vIFBQQzY0IGhhcyBmcml6ICh0cnVuYyksIGZyaXAgKGNlaWwpLCBmcmlt IChmbG9vciksIHdoaWNoIGFyZSBhbGwgY29ycmVjdC4KKysgICAgLy8gZnJpbiAocm91bmQtdG8t bmVhcmVzdCkgZG9lcyBOT1QgaW1wbGVtZW50IHByb3BlciBJRUVFIGJhbmtlcidzIHJvdW5kaW5n CisrICAgIC8vICh0aWVzIHRvIGV2ZW4pLCBzbyBOZWFyZXN0VGllc1RvRXZlbiBpcyBub3Qgc3Vw cG9ydGVkLgorKyAgICByZXR1cm4gbW9kZSA9PSBSb3VuZGluZ01vZGU6OlRvd2FyZHNaZXJvIHx8 IG1vZGUgPT0gUm91bmRpbmdNb2RlOjpVcCB8fAorKyAgICAgICAgICAgbW9kZSA9PSBSb3VuZGlu Z01vZGU6OkRvd247CisrICB9CisrCisrIHByb3RlY3RlZDoKKysgIEluc3RJbW0gaW52ZXJ0QnJh bmNoKEluc3RJbW0gYnJhbmNoLCBCT2ZmSW1tMTYgc2tpcE9mZnNldCk7CisrICB2b2lkIGFkZFBl bmRpbmdKdW1wKEJ1ZmZlck9mZnNldCBzcmMsIEltbVB0ciB0YXJnZXQsIFJlbG9jYXRpb25LaW5k IGtpbmQpIHsKKysgICAgZW5vdWdoTWVtb3J5XyAmPSBqdW1wc18uYXBwZW5kKFJlbGF0aXZlUGF0 Y2goc3JjLCB0YXJnZXQudmFsdWUsIGtpbmQpKTsKKysgICAgaWYgKGtpbmQgPT0gUmVsb2NhdGlv bktpbmQ6OkpJVENPREUpIHsKKysgICAgICB3cml0ZVJlbG9jYXRpb24oc3JjKTsKKysgICAgfQor KyAgfQorKyAgdm9pZCBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQgc3JjLCBCdWZmZXJPZmZzZXQg ZHN0KSB7CisrICAgIENvZGVMYWJlbCBjbDsKKysgICAgY2wucGF0Y2hBdCgpLT5iaW5kKHNyYy5n ZXRPZmZzZXQoKSk7CisrICAgIGNsLnRhcmdldCgpLT5iaW5kKGRzdC5nZXRPZmZzZXQoKSk7Cisr ICAgIGNsLnNldExpbmtNb2RlKENvZGVMYWJlbDo6SnVtcEltbWVkaWF0ZSk7CisrICAgIGFkZENv ZGVMYWJlbChzdGQ6Om1vdmUoY2wpKTsKKysgIH0KKysKKysgcHVibGljOgorKyAgdm9pZCBmbHVz aEJ1ZmZlcigpIHsgbV9idWZmZXIuZmx1c2hQb29sKCk7IH0KKysgIHZvaWQgY29tbWVudChjb25z dCBjaGFyKiBtc2cpIHsgc3BldygiOyAlcyIsIG1zZyk7IH0KKysgIHN0YXRpYyB1aW50MzJfdCBO b3BTaXplKCkgeyByZXR1cm4gNDsgfQorKworKyAgLy8gLS0tIFN0YXRpYyBwYXRjaGluZyBBUEku CisrICBzdGF0aWMgdWludDY0X3QgRXh0cmFjdExvYWQ2NFZhbHVlKEluc3RydWN0aW9uKiBpbnN0 MCk7CisrICBzdGF0aWMgdm9pZCBVcGRhdGVMb2FkNjRWYWx1ZShJbnN0cnVjdGlvbiogaW5zdDAs IHVpbnQ2NF90IHZhbHVlKTsKKysgIHN0YXRpYyB2b2lkIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25z KEluc3RydWN0aW9uKiBpbnN0MCwgUmVnaXN0ZXIgcmVnLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsdWUpOworKworKyAgc3RhdGljIHZvaWQgUGF0 Y2hXcml0ZV9JbW0zMihDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCwgSW1tMzIgaW1tKTsKKysgIHN0 YXRpYyB1aW50OF90KiBOZXh0SW5zdHJ1Y3Rpb24odWludDhfdCogaW5zdHJ1Y3Rpb24sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBjb3VudCA9IG51bGxwdHIp OworKyAgc3RhdGljIHZvaWQgVG9nZ2xlVG9KbXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pOwor KyAgc3RhdGljIHZvaWQgVG9nZ2xlVG9DbXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pOworKwor KyAgdm9pZCB2ZXJpZnlIZWFwQWNjZXNzRGlzYXNzZW1ibHkodWludDMyX3QgYmVnaW4sIHVpbnQz Ml90IGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERpc2Fz c2VtYmxlcjo6SGVhcEFjY2VzcyYgaGEpIHt9CisrCisrICAvLyAtLS0gUHVibGljIHBhdGNoaW5n IEFQSSAocmVxdWlyZWQgYnkgc2hhcmVkIGNvZGUpLgorKyAgc3RhdGljIHZvaWQgQmluZCh1aW50 OF90KiByYXdDb2RlLCBjb25zdCBDb2RlTGFiZWwmIGxhYmVsKTsKKysgIHZvaWQgcHJvY2Vzc0Nv ZGVMYWJlbHModWludDhfdCogcmF3Q29kZSk7CisrCisrICBzdGF0aWMgdm9pZCBUcmFjZUp1bXBS ZWxvY2F0aW9ucyhKU1RyYWNlciogdHJjLCBKaXRDb2RlKiBjb2RlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKTsKKysgIHN0 YXRpYyB2b2lkIFRyYWNlRGF0YVJlbG9jYXRpb25zKEpTVHJhY2VyKiB0cmMsIEppdENvZGUqIGNv ZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYWN0QnVmZmVyUmVh ZGVyJiByZWFkZXIpOworKworKyAgdm9pZCBleGVjdXRhYmxlQ29weSh1aW50OF90KiBidWZmZXIp OworKworKyAgc3RhdGljIHVpbnQzMl90IFBhdGNoV3JpdGVfTmVhckNhbGxTaXplKCk7CisrICBz dGF0aWMgdm9pZCBQYXRjaFdyaXRlX05lYXJDYWxsKENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0b0Nh bGwpOworKyAgc3RhdGljIHZvaWQgUGF0Y2hEYXRhV2l0aFZhbHVlQ2hlY2soQ29kZUxvY2F0aW9u TGFiZWwgbGFiZWwsIEltbVB0ciBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEltbVB0ciBleHBlY3RlZFZhbHVlKTsKKysgIHN0YXRpYyB2b2lkIFBhdGNo RGF0YVdpdGhWYWx1ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hlZEltbVB0ciBuZXdWYWx1ZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoZWRJbW1QdHIgZXhwZWN0ZWRW YWx1ZSk7CisrICBzdGF0aWMgdm9pZCBUb2dnbGVDYWxsKENvZGVMb2NhdGlvbkxhYmVsIGluc3Rf LCBib29sIGVuYWJsZWQpOworKworKyBwcml2YXRlOgorKyAgR2VuZXJhbFJlZ2lzdGVyU2V0IHNj cmF0Y2hfcmVnaXN0ZXJfbGlzdF87CisrCisrIHB1YmxpYzoKKysgIEdlbmVyYWxSZWdpc3RlclNl dCogR2V0U2NyYXRjaFJlZ2lzdGVyTGlzdCgpIHsKKysgICAgcmV0dXJuICZzY3JhdGNoX3JlZ2lz dGVyX2xpc3RfOworKyAgfQorK307ICAvLyBBc3NlbWJsZXIKKysKKytpbmxpbmUgYm9vbCBJc1Vu YWxpZ25lZChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MpIHsKKysgIGlmICgh YWNjZXNzLmFsaWduKCkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAgcmV0dXJuIGFj Y2Vzcy5hbGlnbigpIDwgYWNjZXNzLmJ5dGVTaXplKCk7CisrfQorKworK30gIC8vIG5hbWVzcGFj ZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysvLyBXaGV0aGVyIGFuIEltbTMyIGZpdHMg aW4gYW4gdW5zaWduZWQgMTYtYml0IGltbWVkaWF0ZS4KKysjZGVmaW5lIFBQQ19JTU1fT0tfVSh4 KSAoTU9aX0xJS0VMWSgoKHgpLnZhbHVlICYgMHhmZmZmMDAwMCkgPT0gMCkpCisrCisrLy8gV2hl dGhlciBhbiBJbW0zMiBmaXRzIGluIGEgc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuCisrI2RlZmlu ZSBQUENfSU1NX09LX1MoeCkgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoTU9aX0xJS0VM WSgoKHgpLnZhbHVlICYgMHhmZmZmODAwMCkgPT0gMCB8fCBcCisrICAgICAgICAgICAgICAoKHgp LnZhbHVlICYgMHhmZmZmODAwMCkgPT0gMHhmZmZmODAwMCkpCisrCisrLy8gV2hldGhlciB0aGUg b2Zmc2V0IHBhcnQgb2YgYW4gQWRkcmVzcyBmaXRzIGluIGEgc2lnbmVkIDE2LWJpdCBpbW1lZGlh dGUuCisrI2RlZmluZSBQUENfT0ZGU19PSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgKE1PWl9MSUtFTFkoKCh4KS5vZmZzZXQgJiAweGZmZmY4MDAwKSA9PSAwIHx8IFwKKysgICAg ICAgICAgICAgICgoeCkub2Zmc2V0ICYgMHhmZmZmODAwMCkgPT0gMHhmZmZmODAwMCkpCisrCisr Ly8gU2FtZSB0ZXN0IGJ1dCBjaGVja2luZyBhIGJpdCBhaGVhZCAoZm9yIHBhaXJlZCBsb2Fkcyku CisrI2RlZmluZSBQUENfT0ZGU19JTkNSX09LKHgsIGluY3IpICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAoTU9aX0xJS0VMWSgoKCh4KS5vZmZzZXQgKyAoaW5jcikpICYgMHhmZmZmODAw MCkgPT0gMCB8fCBcCisrICAgICAgICAgICAgICAoKCh4KS5vZmZzZXQgKyAoaW5jcikpICYgMHhm ZmZmODAwMCkgPT0gMHhmZmZmODAwMCkpCisrCisrI2VuZGlmIC8qIGppdF9wcGM2NF9Bc3NlbWJs ZXJfcHBjNjRfaCAqLworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRv ci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi4wYTQzNmZiMTIwMWEKKy0t LSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5j cHAKK0BAIC0wLDAgKzEsMzY0NyBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsg aW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNl dCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlz IHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2Us IHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRo aXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01Q TC8yLjAvLiAqLworKworKyNpbmNsdWRlICJqaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5o IgorKworKyNpbmNsdWRlICJtb3ppbGxhL01hdGhBbGdvcml0aG1zLmgiCisrCisrI2luY2x1ZGUg PGJpdD4KKysKKysjaW5jbHVkZSAiYnVpbHRpbi9OdW1iZXIuaCIKKysjaW5jbHVkZSAiaml0L0Nv ZGVHZW5lcmF0b3IuaCIKKysjaW5jbHVkZSAiaml0L0lubGluZVNjcmlwdFRyZWUuaCIKKysjaW5j bHVkZSAiaml0L0ppdFJ1bnRpbWUuaCIKKysjaW5jbHVkZSAiaml0L01JUi13YXNtLmgiCisrI2lu Y2x1ZGUgImppdC9NSVIuaCIKKysjaW5jbHVkZSAiaml0L01JUkdyYXBoLmgiCisrI2luY2x1ZGUg InZtL0pTQ29udGV4dC5oIgorKyNpbmNsdWRlICJ2bS9SZWFsbS5oIgorKyNpbmNsdWRlICJ2bS9T aGFwZS5oIgorKworKyNpbmNsdWRlICJqaXQvc2hhcmVkL0NvZGVHZW5lcmF0b3Itc2hhcmVkLWlu bC5oIgorKyNpbmNsdWRlICJ2bS9KU1NjcmlwdC1pbmwuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ug anM7CisrdXNpbmcgbmFtZXNwYWNlIGpzOjpqaXQ7CisrCisrdXNpbmcgSlM6OkdlbmVyaWNOYU47 CisrdXNpbmcgbW96aWxsYTo6TmVnYXRpdmVJbmZpbml0eTsKKysKKytuYW1lc3BhY2UganMgewor K25hbWVzcGFjZSBqaXQgeworKworK0NvZGVHZW5lcmF0b3JQUEM2NDo6Q29kZUdlbmVyYXRvclBQ QzY0KE1JUkdlbmVyYXRvciogZ2VuLCBMSVJHcmFwaCogZ3JhcGgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXIqIG1hc20sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6Q29kZU1ldGFkYXRhKiBj b2RlTWV0YSkKKysgICAgOiBDb2RlR2VuZXJhdG9yU2hhcmVkKGdlbiwgZ3JhcGgsIG1hc20sIGNv ZGVNZXRhKSB7fQorKworK09wZXJhbmQgQ29kZUdlbmVyYXRvclBQQzY0OjpUb09wZXJhbmQoY29u c3QgTEFsbG9jYXRpb24mIGEpIHsKKysgIGlmIChhLmlzR2VuZXJhbFJlZygpKSB7CisrICAgIHJl dHVybiBPcGVyYW5kKGEudG9HZW5lcmFsUmVnKCktPnJlZygpKTsKKysgIH0KKysgIGlmIChhLmlz RmxvYXRSZWcoKSkgeworKyAgICByZXR1cm4gT3BlcmFuZChhLnRvRmxvYXRSZWcoKS0+cmVnKCkp OworKyAgfQorKyAgcmV0dXJuIE9wZXJhbmQoVG9BZGRyZXNzKGEpKTsKKyt9CisrCisrT3BlcmFu ZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OlRvT3BlcmFuZChjb25zdCBMQWxsb2NhdGlvbiogYSkgewor KyAgcmV0dXJuIFRvT3BlcmFuZCgqYSk7CisrfQorKworK01vdmVPcGVyYW5kIENvZGVHZW5lcmF0 b3JQUEM2NDo6dG9Nb3ZlT3BlcmFuZChMQWxsb2NhdGlvbiBhKSBjb25zdCB7CisrICBpZiAoYS5p c0dlbmVyYWxSZWcoKSkgeworKyAgICByZXR1cm4gTW92ZU9wZXJhbmQoVG9SZWdpc3RlcihhKSk7 CisrICB9CisrICBpZiAoYS5pc0Zsb2F0UmVnKCkpIHsKKysgICAgcmV0dXJuIE1vdmVPcGVyYW5k KFRvRmxvYXRSZWdpc3RlcihhKSk7CisrICB9CisrICBNb3ZlT3BlcmFuZDo6S2luZCBraW5kID0g YS5pc1N0YWNrQXJlYSgpID8gTW92ZU9wZXJhbmQ6OktpbmQ6OkVmZmVjdGl2ZUFkZHJlc3MKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNb3ZlT3BlcmFuZDo6 S2luZDo6TWVtb3J5OworKyAgQWRkcmVzcyBhZGRyZXNzID0gVG9BZGRyZXNzKGEpOworKyAgTU9a X0FTU0VSVCgoYWRkcmVzcy5vZmZzZXQgJiAzKSA9PSAwKTsKKysgIHJldHVybiBNb3ZlT3BlcmFu ZChhZGRyZXNzLCBraW5kKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmJhaWxv dXRGcm9tKExhYmVsKiBsYWJlbCwgTFNuYXBzaG90KiBzbmFwc2hvdCkgeworKyAgTU9aX0FTU0VS VF9JRighbWFzbS5vb20oKSwgbGFiZWwtPnVzZWQoKSk7CisrICBNT1pfQVNTRVJUX0lGKCFtYXNt Lm9vbSgpLCAhbGFiZWwtPmJvdW5kKCkpOworKworKyAgZW5jb2RlKHNuYXBzaG90KTsKKysKKysg IElubGluZVNjcmlwdFRyZWUqIHRyZWUgPSBzbmFwc2hvdC0+bWlyKCktPmJsb2NrKCktPnRyYWNr ZWRUcmVlKCk7CisrICBhdXRvKiBvb2wgPSBuZXcgKGFsbG9jKCkpIExhbWJkYU91dE9mTGluZUNv ZGUoWz0sIHRoaXNdKE91dE9mTGluZUNvZGUmIG9vbCkgeworKyAgICAvLyBQdXNoIHNuYXBzaG90 T2Zmc2V0IGFuZCBtYWtlIHN1cmUgc3RhY2sgaXMgYWxpZ25lZC4KKysgICAgbWFzbS5zdWJQdHIo SW1tMzIoc2l6ZW9mKFZhbHVlKSksIFN0YWNrUG9pbnRlcik7CisrICAgIG1hc20uc3RvcmVQdHIo SW1tV29yZChzbmFwc2hvdC0+c25hcHNob3RPZmZzZXQoKSksCisrICAgICAgICAgICAgICAgICAg QWRkcmVzcyhTdGFja1BvaW50ZXIsIDApKTsKKysgICAgbWFzbS5qdW1wKCZkZW9wdExhYmVsXyk7 CisrICB9KTsKKysgIGFkZE91dE9mTGluZUNvZGUob29sLAorKyAgICAgICAgICAgICAgICAgICBu ZXcgKGFsbG9jKCkpIEJ5dGVjb2RlU2l0ZSh0cmVlLCB0cmVlLT5zY3JpcHQoKS0+Y29kZSgpKSk7 CisrCisrICBtYXNtLnJldGFyZ2V0KGxhYmVsLCBvb2wtPmVudHJ5KCkpOworK30KKysKKyt2b2lk IENvZGVHZW5lcmF0b3JQUEM2NDo6YmFpbG91dChMU25hcHNob3QqIHNuYXBzaG90KSB7CisrICBM YWJlbCBsYWJlbDsKKysgIG1hc20uanVtcCgmbGFiZWwpOworKyAgYmFpbG91dEZyb20oJmxhYmVs LCBzbmFwc2hvdCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpiYWlsb3V0SWZG YWxzZUJvb2woUmVnaXN0ZXIgbGhzLCBMU25hcHNob3QqIHNuYXBzaG90KSB7CisrICBMYWJlbCBi YWlsOworKyAgbWFzbS5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBsaHMsIEltbTMyKDB4 RkYpLCAmYmFpbCk7CisrICBiYWlsb3V0RnJvbSgmYmFpbCwgc25hcHNob3QpOworK30KKysKKyti b29sIENvZGVHZW5lcmF0b3JQUEM2NDo6Z2VuZXJhdGVPdXRPZkxpbmVDb2RlKCkgeworKyAgaWYg KCFDb2RlR2VuZXJhdG9yU2hhcmVkOjpnZW5lcmF0ZU91dE9mTGluZUNvZGUoKSkgeworKyAgICBy ZXR1cm4gZmFsc2U7CisrICB9CisrCisrICBpZiAoZGVvcHRMYWJlbF8udXNlZCgpKSB7CisrICAg IG1hc20uYmluZCgmZGVvcHRMYWJlbF8pOworKworKyAgICAvLyBGcmFtZSBzaXplIGlzIHN0b3Jl ZCBpbiBMUiBhbmQgcHVzaGVkIGJ5IEdlbmVyYXRlQmFpbG91dFRodW5rCisrICAgIC8vICh2aWEg UHVzaEJhaWxvdXRGcmFtZSAtPiBwdXNoUmV0dXJuQWRkcmVzcyAtPiBtZmxyKS4KKysgICAgewor KyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbWFzbS5tb3ZlUHRyKEltbVdv cmQoZnJhbWVTaXplKCkpLCBzY3JhdGNoKTsKKysgICAgICBtYXNtLnhzX210bHIoc2NyYXRjaCk7 CisrICAgIH0KKysKKysgICAgVHJhbXBvbGluZVB0ciBoYW5kbGVyID0gZ2VuLT5qaXRSdW50aW1l KCktPmdldEdlbmVyaWNCYWlsb3V0SGFuZGxlcigpOworKyAgICBtYXNtLmp1bXAoaGFuZGxlcik7 CisrICB9CisrCisrICByZXR1cm4gIW1hc20ub29tKCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVy YXRvclBQQzY0OjpicmFuY2hUb0Jsb2NrKE1CYXNpY0Jsb2NrKiBibG9jaykgeworKyAgTGFiZWwq IGxhYmVsID0gc2tpcFRyaXZpYWxCbG9ja3MoYmxvY2spLT5saXIoKS0+bGFiZWwoKTsKKysgIG1h c20uanVtcChsYWJlbCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpicmFuY2hU b0Jsb2NrKEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CYXNpY0Jsb2Nr KiBtaXIpIHsKKysgIExhYmVsKiBsYWJlbCA9IHNraXBUcml2aWFsQmxvY2tzKG1pciktPmxpcigp LT5sYWJlbCgpOworKyAgbWFzbS5icmFuY2hEb3VibGUoY29uZCwgbGhzLCByaHMsIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmJyYW5jaFRvQmxvY2soQXNzZW1ibGVy OjpGbG9hdEZvcm1hdCBmbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJhc2ljQmxvY2sqIG1p cikgeworKyAgTGFiZWwqIGxhYmVsID0gc2tpcFRyaXZpYWxCbG9ja3MobWlyKS0+bGlyKCktPmxh YmVsKCk7CisrICBpZiAoZm10ID09IEFzc2VtYmxlcjo6RG91YmxlRmxvYXQpIHsKKysgICAgbWFz bS5icmFuY2hEb3VibGUoY29uZCwgbGhzLCByaHMsIGxhYmVsKTsKKysgIH0gZWxzZSB7CisrICAg IG1hc20uYnJhbmNoRmxvYXQoY29uZCwgbGhzLCByaHMsIGxhYmVsKTsKKysgIH0KKyt9CisrCisr Y2xhc3MgT3V0T2ZMaW5lVGFibGVTd2l0Y2ggOiBwdWJsaWMgT3V0T2ZMaW5lQ29kZUJhc2U8Q29k ZUdlbmVyYXRvclBQQzY0PiB7CisrICBNVGFibGVTd2l0Y2gqIG1pcl87CisrICBDb2RlTGFiZWwg anVtcExhYmVsXzsKKysKKysgIHZvaWQgYWNjZXB0KENvZGVHZW5lcmF0b3JQUEM2NCogY29kZWdl bikgeworKyAgICBjb2RlZ2VuLT52aXNpdE91dE9mTGluZVRhYmxlU3dpdGNoKHRoaXMpOworKyAg fQorKworKyBwdWJsaWM6CisrICBleHBsaWNpdCBPdXRPZkxpbmVUYWJsZVN3aXRjaChNVGFibGVT d2l0Y2gqIG1pcikgOiBtaXJfKG1pcikge30KKysKKysgIE1UYWJsZVN3aXRjaCogbWlyKCkgY29u c3QgeyByZXR1cm4gbWlyXzsgfQorKyAgQ29kZUxhYmVsKiBqdW1wTGFiZWwoKSB7IHJldHVybiAm anVtcExhYmVsXzsgfQorK307CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRUYWJs ZVN3aXRjaERpc3BhdGNoKE1UYWJsZVN3aXRjaCogbWlyLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBpbmRleCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgYmFzZSkgewor KyAgTGFiZWwqIGRlZmF1bHRjYXNlID0gc2tpcFRyaXZpYWxCbG9ja3MobWlyLT5nZXREZWZhdWx0 KCkpLT5saXIoKS0+bGFiZWwoKTsKKysKKysgIGlmIChtaXItPmxvdygpICE9IDApIHsKKysgICAg bWFzbS5zdWJQdHIoSW1tMzIobWlyLT5sb3coKSksIGluZGV4KTsKKysgIH0KKysKKysgIGludDMy X3QgY2FzZXMgPSBtaXItPm51bUNhc2VzKCk7CisrICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6 OkFib3ZlT3JFcXVhbCwgaW5kZXgsIEltbVdvcmQoY2FzZXMpLCBkZWZhdWx0Y2FzZSk7CisrCisr ICBPdXRPZkxpbmVUYWJsZVN3aXRjaCogb29sID0gbmV3IChhbGxvYygpKSBPdXRPZkxpbmVUYWJs ZVN3aXRjaChtaXIpOworKyAgYWRkT3V0T2ZMaW5lQ29kZShvb2wsIG1pcik7CisrCisrICBtYXNt Lm1vdihvb2wtPmp1bXBMYWJlbCgpLCBiYXNlKTsKKysKKysgIEJhc2VJbmRleCBwb2ludGVyKGJh c2UsIGluZGV4LCBTY2FsZVBvaW50ZXIpOworKyAgbWFzbS5icmFuY2hUb0NvbXB1dGVkQWRkcmVz cyhwb2ludGVyKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRlSW52 YWxpZGF0ZUVwaWxvZ3VlKCkgeworKyAgLy8gUGFkIHdpdGggZW5vdWdoIG5vcHMgc28gdGhhdCBQ YXRjaFdyaXRlX05lYXJDYWxsIG9uIHRoZSBsYXN0IE9TSSBwb2ludAorKyAgLy8gY2Fubm90IG92 ZXJsYXAgdGhlIGludmFsaWRhdGlvbiBlcGlsb2d1ZS4gVGhlIHBhdGNoIGFyZWEgaXMKKysgIC8v IFBhdGNoV3JpdGVfTmVhckNhbGxTaXplICg0MCkgYnl0ZXM7IHRoZSBsYXN0IE9TSSBwb2ludCBj b3VsZCBiZSByaWdodAorKyAgLy8gYmVmb3JlIHRoaXMgZXBpbG9ndWUuCisrICBmb3IgKHNpemVf dCBpID0gMDsgaSA8IEFzc2VtYmxlcjo6UGF0Y2hXcml0ZV9OZWFyQ2FsbFNpemUoKTsKKysgICAg ICAgaSArPSBBc3NlbWJsZXI6Ok5vcFNpemUoKSkgeworKyAgICBtYXNtLm5vcCgpOworKyAgfQor KworKyAgbWFzbS5iaW5kKCZpbnZhbGlkYXRlXyk7CisrCisrICAvLyBQdXNoIHRoZSByZXR1cm4g YWRkcmVzcyAoTFIpIG9udG8gdGhlIHN0YWNrLgorKyAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygp OworKworKyAgaW52YWxpZGF0ZUVwaWxvZ3VlRGF0YV8gPSBtYXNtLnB1c2hXaXRoUGF0Y2goSW1t V29yZCh1aW50cHRyX3QoLTEpKSk7CisrCisrICBUcmFtcG9saW5lUHRyIHRodW5rID0gZ2VuLT5q aXRSdW50aW1lKCktPmdldEludmFsaWRhdGlvblRodW5rKCk7CisrICBtYXNtLmp1bXAodGh1bmsp OworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6dmlzaXRPdXRPZkxpbmVUYWJsZVN3 aXRjaChPdXRPZkxpbmVUYWJsZVN3aXRjaCogb29sKSB7CisrICBNVGFibGVTd2l0Y2gqIG1pciA9 IG9vbC0+bWlyKCk7CisrCisrICBtYXNtLmhhbHRpbmdBbGlnbihzaXplb2Yodm9pZCopKTsKKysg IG1hc20uYmluZChvb2wtPmp1bXBMYWJlbCgpKTsKKysgIG1hc20uYWRkQ29kZUxhYmVsKCpvb2wt Pmp1bXBMYWJlbCgpKTsKKysKKysgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWlyLT5udW1DYXNl cygpOyBpKyspIHsKKysgICAgTEJsb2NrKiBjYXNlYmxvY2sgPSBza2lwVHJpdmlhbEJsb2Nrcyht aXItPmdldENhc2UoaSkpLT5saXIoKTsKKysgICAgTGFiZWwqIGNhc2VoZWFkZXIgPSBjYXNlYmxv Y2stPmxhYmVsKCk7CisrICAgIHVpbnQzMl90IGNhc2VvZmZzZXQgPSBjYXNlaGVhZGVyLT5vZmZz ZXQoKTsKKysKKysgICAgQ29kZUxhYmVsIGNsOworKyAgICBtYXNtLndyaXRlQ29kZVBvaW50ZXIo JmNsKTsKKysgICAgY2wudGFyZ2V0KCktPmJpbmQoY2FzZW9mZnNldCk7CisrICAgIG1hc20uYWRk Q29kZUxhYmVsKGNsKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OnZp c2l0T3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2soCisrICAgIE91dE9mTGluZVdhc21UcnVuY2F0 ZUNoZWNrKiBvb2wpIHsKKysgIGlmIChvb2wtPnRvVHlwZSgpID09IE1JUlR5cGU6OkludDMyKSB7 CisrICAgIG1hc20ub3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQzMkNoZWNrKG9vbC0+aW5wdXQo KSwgb29sLT5vdXRwdXQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb29sLT5mcm9tVHlwZSgpLCBvb2wtPmZsYWdzKCksCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9vbC0+cmVqb2luKCksIG9vbC0+dHJhcFNpdGVEZXNj KCkpOworKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VSVChvb2wtPnRvVHlwZSgpID09IE1JUlR5 cGU6OkludDY0KTsKKysgICAgbWFzbS5vdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2so b29sLT5pbnB1dCgpLCBvb2wtPm91dHB1dDY0KCksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9vbC0+ZnJvbVR5cGUoKSwgb29sLT5mbGFncygpLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2wtPnJlam9pbigpLCBvb2wt PnRyYXBTaXRlRGVzYygpKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6 OmVtaXRCaWdJbnRQdHJEaXYoTEJpZ0ludFB0ckRpdiogaW5zLCBSZWdpc3RlciBkaXZpZGVuZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkaXZp c29yLCBSZWdpc3RlciBvdXRwdXQpIHsKKysgIG1hc20uYXNfZGl2ZChvdXRwdXQsIGRpdmlkZW5k LCBkaXZpc29yKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRCaWdJbnRQ dHJNb2QoTEJpZ0ludFB0ck1vZCogaW5zLCBSZWdpc3RlciBkaXZpZGVuZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkaXZpc29yLCBSZWdpc3Rl ciBvdXRwdXQpIHsKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBtYXNtLmFzX21vZHNkKG91 dHB1dCwgZGl2aWRlbmQsIGRpdmlzb3IpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hc19kaXZk KG91dHB1dCwgZGl2aWRlbmQsIGRpdmlzb3IpOworKyAgICBtYXNtLmFzX211bGxkKG91dHB1dCwg b3V0cHV0LCBkaXZpc29yKTsKKysgICAgbWFzbS5hc19zdWJmKG91dHB1dCwgb3V0cHV0LCBkaXZp ZGVuZCk7CisrICB9CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFZpc2l0b3JzOiBCb3gvVW5ib3gK KysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Qm94KExCb3gqIGJveCkgeworKyAgY29uc3Qg TEFsbG9jYXRpb24qIGluID0gYm94LT5nZXRPcGVyYW5kKDApOworKyAgVmFsdWVPcGVyYW5kIHJl c3VsdCA9IFRvT3V0VmFsdWUoYm94KTsKKysKKysgIG1hc20ubW92ZVZhbHVlKFR5cGVkT3JWYWx1 ZVJlZ2lzdGVyKGJveC0+dHlwZSgpLCBUb0FueVJlZ2lzdGVyKGluKSksIHJlc3VsdCk7CisrfQor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRVbmJveChMVW5ib3gqIHVuYm94KSB7CisrICBN VW5ib3gqIG1pciA9IHVuYm94LT5taXIoKTsKKysKKysgIFJlZ2lzdGVyIHJlc3VsdCA9IFRvUmVn aXN0ZXIodW5ib3gtPm91dHB1dCgpKTsKKysKKysgIGlmIChtaXItPmZhbGxpYmxlKCkpIHsKKysg ICAgVmFsdWVPcGVyYW5kIHZhbHVlID0gVG9WYWx1ZSh1bmJveC0+aW5wdXQoKSk7CisrICAgIExh YmVsIGJhaWw7CisrICAgIHN3aXRjaCAobWlyLT50eXBlKCkpIHsKKysgICAgICBjYXNlIE1JUlR5 cGU6OkludDMyOgorKyAgICAgICAgbWFzbS5mYWxsaWJsZVVuYm94SW50MzIodmFsdWUsIHJlc3Vs dCwgJmJhaWwpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBNSVJUeXBlOjpCb29sZWFu OgorKyAgICAgICAgbWFzbS5mYWxsaWJsZVVuYm94Qm9vbGVhbih2YWx1ZSwgcmVzdWx0LCAmYmFp bCk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIE1JUlR5cGU6Ok9iamVjdDoKKysgICAg ICAgIG1hc20uZmFsbGlibGVVbmJveE9iamVjdCh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7CisrICAg ICAgICBicmVhazsKKysgICAgICBjYXNlIE1JUlR5cGU6OlN0cmluZzoKKysgICAgICAgIG1hc20u ZmFsbGlibGVVbmJveFN0cmluZyh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7CisrICAgICAgICBicmVh azsKKysgICAgICBjYXNlIE1JUlR5cGU6OlN5bWJvbDoKKysgICAgICAgIG1hc20uZmFsbGlibGVV bmJveFN5bWJvbCh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7CisrICAgICAgICBicmVhazsKKysgICAg ICBjYXNlIE1JUlR5cGU6OkJpZ0ludDoKKysgICAgICAgIG1hc20uZmFsbGlibGVVbmJveEJpZ0lu dCh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0 OgorKyAgICAgICAgTU9aX0NSQVNIKCJHaXZlbiBNSVJUeXBlIGNhbm5vdCBiZSB1bmJveGVkLiIp OworKyAgICB9CisrICAgIGJhaWxvdXRGcm9tKCZiYWlsLCB1bmJveC0+c25hcHNob3QoKSk7Cisr ICAgIHJldHVybjsKKysgIH0KKysKKysgIExBbGxvY2F0aW9uKiBpbnB1dCA9IHVuYm94LT5nZXRP cGVyYW5kKExVbmJveDo6SW5wdXQpOworKyAgaWYgKGlucHV0LT5pc0dlbmVyYWxSZWcoKSkgewor KyAgICBSZWdpc3RlciBpbnB1dFJlZyA9IFRvUmVnaXN0ZXIoaW5wdXQpOworKyAgICBzd2l0Y2gg KG1pci0+dHlwZSgpKSB7CisrICAgICAgY2FzZSBNSVJUeXBlOjpJbnQzMjoKKysgICAgICAgIG1h c20udW5ib3hJbnQzMihWYWx1ZU9wZXJhbmQoaW5wdXRSZWcpLCByZXN1bHQpOworKyAgICAgICAg YnJlYWs7CisrICAgICAgY2FzZSBNSVJUeXBlOjpCb29sZWFuOgorKyAgICAgICAgbWFzbS51bmJv eEJvb2xlYW4oVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFr OworKyAgICAgIGNhc2UgTUlSVHlwZTo6T2JqZWN0OgorKyAgICAgICAgbWFzbS51bmJveE9iamVj dChWYWx1ZU9wZXJhbmQoaW5wdXRSZWcpLCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgY2FzZSBNSVJUeXBlOjpTdHJpbmc6CisrICAgICAgICBtYXNtLnVuYm94U3RyaW5nKFZhbHVl T3BlcmFuZChpbnB1dFJlZyksIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNl IE1JUlR5cGU6OlN5bWJvbDoKKysgICAgICAgIG1hc20udW5ib3hTeW1ib2woVmFsdWVPcGVyYW5k KGlucHV0UmVnKSwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgTUlSVHlw ZTo6QmlnSW50OgorKyAgICAgICAgbWFzbS51bmJveEJpZ0ludChWYWx1ZU9wZXJhbmQoaW5wdXRS ZWcpLCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAg IE1PWl9DUkFTSCgiR2l2ZW4gTUlSVHlwZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKKysgICAgfQor KyAgICByZXR1cm47CisrICB9CisrCisrICBBZGRyZXNzIGlucHV0QWRkciA9IFRvQWRkcmVzcyhp bnB1dCk7CisrICBzd2l0Y2ggKG1pci0+dHlwZSgpKSB7CisrICAgIGNhc2UgTUlSVHlwZTo6SW50 MzI6CisrICAgICAgbWFzbS51bmJveEludDMyKGlucHV0QWRkciwgcmVzdWx0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSBNSVJUeXBlOjpCb29sZWFuOgorKyAgICAgIG1hc20udW5ib3hCb29s ZWFuKGlucHV0QWRkciwgcmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBNSVJUeXBl OjpPYmplY3Q6CisrICAgICAgbWFzbS51bmJveE9iamVjdChpbnB1dEFkZHIsIHJlc3VsdCk7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2UgTUlSVHlwZTo6U3RyaW5nOgorKyAgICAgIG1hc20udW5i b3hTdHJpbmcoaW5wdXRBZGRyLCByZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1J UlR5cGU6OlN5bWJvbDoKKysgICAgICBtYXNtLnVuYm94U3ltYm9sKGlucHV0QWRkciwgcmVzdWx0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBNSVJUeXBlOjpCaWdJbnQ6CisrICAgICAgbWFz bS51bmJveEJpZ0ludChpbnB1dEFkZHIsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRl ZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJHaXZlbiBNSVJUeXBlIGNhbm5vdCBiZSB1bmJveGVk LiIpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBWaXNpdG9yczogSW50ZWdlciBBcml0 aG1ldGljCisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEFkZEkoTEFkZEkqIGlucykgewor KyAgTEFsbG9jYXRpb24qIGxocyA9IGlucy0+Z2V0T3BlcmFuZCgwKTsKKysgIExBbGxvY2F0aW9u KiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rl cihpbnMtPmdldERlZigwKSk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAg SW1tMzIgaW1tKFRvSW50MzIocmhzKSk7CisrICAgIGlmIChpbnMtPnNuYXBzaG90KCkpIHsKKysg ICAgICBtYXNtLm1vdmUzMihUb1JlZ2lzdGVyKGxocyksIGRlc3QpOworKyAgICAgIExhYmVsIG92 ZXJmbG93OworKyAgICAgIG1hc20uYnJhbmNoQWRkMzIoQXNzZW1ibGVyOjpPdmVyZmxvdywgaW1t LCBkZXN0LCAmb3ZlcmZsb3cpOworKyAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5z bmFwc2hvdCgpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBtYXNtLmFkZDMyKGltbSwgVG9SZWdp c3RlcihsaHMpLCBkZXN0KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgUmVnaXN0ZXIgcmhz UmVnID0gVG9SZWdpc3RlcihyaHMpOworKyAgICBpZiAoaW5zLT5zbmFwc2hvdCgpKSB7CisrICAg ICAgLy8gVXNlIDMtb3BlcmFuZCBhZGQgdG8gYXZvaWQgY2xvYmJlcmluZyByaHMgd2hlbiByaHMg PT0gZGVzdC4KKysgICAgICBtYXNtLmFzX2FkZChkZXN0LCBUb1JlZ2lzdGVyKGxocyksIHJoc1Jl Zyk7CisrICAgICAgLy8gQ2hlY2sgMzItYml0IG92ZXJmbG93OiBzaWduLWV4dGVuZCBsb3dlciAz MiBhbmQgY29tcGFyZS4KKysgICAgICBtYXNtLmFzX2V4dHN3KFNlY29uZFNjcmF0Y2hSZWcsIGRl c3QpOworKyAgICAgIExhYmVsIG92ZXJmbG93OworKyAgICAgIG1hc20uYXNfY21wZChkZXN0LCBT ZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwg Jm92ZXJmbG93KTsKKysgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIGJh aWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfSBlbHNlIHsKKysg ICAgICBtYXNtLmFzX2FkZChkZXN0LCBUb1JlZ2lzdGVyKGxocyksIHJoc1JlZyk7CisrICAgICAg bWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0QWRkSW50UHRyKExBZGRJbnRQdHIqIGlucykgeworKyAgUmVnaXN0 ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOworKyAgUmVnaXN0ZXIgbGhzID0g VG9SZWdpc3RlcihpbnMtPmdldE9wZXJhbmQoMCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJo cyA9IGlucy0+Z2V0T3BlcmFuZCgxKTsKKysKKysgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewor KyAgICBpZiAobGhzICE9IGRlc3QpIHsKKysgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsK KysgICAgfQorKyAgICBtYXNtLmFkZFB0cihJbW1Xb3JkKFRvSW50UHRyKHJocykpLCBkZXN0KTsK KysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfYWRkKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMp KTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEFkZEk2NChMQWRkSTY0 KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKTsK KysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKKysgIGNv bnN0IExBbGxvY2F0aW9uKiByaHMgPSBsaXItPmdldE9wZXJhbmQoMSk7CisrCisrICBpZiAocmhz LT5pc0NvbnN0YW50KCkpIHsKKysgICAgaWYgKGxocyAhPSBkZXN0KSB7CisrICAgICAgbWFzbS5t b3ZlUHRyKGxocywgZGVzdCk7CisrICAgIH0KKysgICAgbWFzbS5hZGRQdHIoSW1tV29yZChUb0lu dDY0KHJocykpLCBkZXN0KTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfYWRkKGRlc3QsIGxo cywgVG9SZWdpc3RlcihyaHMpKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFN1YkkoTFN1YkkqIGlucykgeworKyAgTEFsbG9jYXRpb24qIGxocyA9IGlucy0+Z2V0T3Bl cmFuZCgwKTsKKysgIExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7CisrICBS ZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPmdldERlZigwKSk7CisrCisrICBpZiAocmhz LT5pc0NvbnN0YW50KCkpIHsKKysgICAgSW1tMzIgaW1tKFRvSW50MzIocmhzKSk7CisrICAgIGlm IChpbnMtPnNuYXBzaG90KCkpIHsKKysgICAgICBtYXNtLm1vdmUzMihUb1JlZ2lzdGVyKGxocyks IGRlc3QpOworKyAgICAgIExhYmVsIG92ZXJmbG93OworKyAgICAgIG1hc20uYnJhbmNoU3ViMzIo QXNzZW1ibGVyOjpPdmVyZmxvdywgaW1tLCBkZXN0LCAmb3ZlcmZsb3cpOworKyAgICAgIGJhaWxv dXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfSBlbHNlIHsKKysgICAg ICBtYXNtLm1vdmUzMihUb1JlZ2lzdGVyKGxocyksIGRlc3QpOworKyAgICAgIG1hc20uc3ViMzIo aW1tLCBkZXN0KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgUmVnaXN0ZXIgcmhzUmVnID0g VG9SZWdpc3RlcihyaHMpOworKyAgICBpZiAoaW5zLT5zbmFwc2hvdCgpKSB7CisrICAgICAgLy8g YXNfc3ViZihkLCBhLCBiKSBjb21wdXRlcyBkID0gYiAtIGEsIHNvIHN1YmYoZGVzdCwgcmhzLCBs aHMpID0gbGhzIC0KKysgICAgICAvLyByaHMKKysgICAgICBtYXNtLmFzX3N1YmYoZGVzdCwgcmhz UmVnLCBUb1JlZ2lzdGVyKGxocykpOworKyAgICAgIG1hc20uYXNfZXh0c3coU2Vjb25kU2NyYXRj aFJlZywgZGVzdCk7CisrICAgICAgTGFiZWwgb3ZlcmZsb3c7CisrICAgICAgbWFzbS5hc19jbXBk KGRlc3QsIFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5v dEVxdWFsLCAmb3ZlcmZsb3cpOworKyAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Cisr ICAgICAgYmFpbG91dEZyb20oJm92ZXJmbG93LCBpbnMtPnNuYXBzaG90KCkpOworKyAgICB9IGVs c2UgeworKyAgICAgIG1hc20uYXNfc3ViZihkZXN0LCByaHNSZWcsIFRvUmVnaXN0ZXIobGhzKSk7 CisrICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgfQorKyAgfQorK30KKysK Kyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U3ViSW50UHRyKExTdWJJbnRQdHIqIGlucykgewor KyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOworKyAgUmVnaXN0 ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmdldE9wZXJhbmQoMCkpOworKyAgY29uc3QgTEFsbG9j YXRpb24qIHJocyA9IGlucy0+Z2V0T3BlcmFuZCgxKTsKKysKKysgIGlmIChyaHMtPmlzQ29uc3Rh bnQoKSkgeworKyAgICBpZiAobGhzICE9IGRlc3QpIHsKKysgICAgICBtYXNtLm1vdmVQdHIobGhz LCBkZXN0KTsKKysgICAgfQorKyAgICBtYXNtLnN1YlB0cihJbW0zMihUb0ludFB0cihyaHMpKSwg ZGVzdCk7CisrICB9IGVsc2UgeworKyAgICAvLyBhc19zdWJmKGQsIGEsIGIpID0gYiAtIGEKKysg ICAgbWFzbS5hc19zdWJmKGRlc3QsIFRvUmVnaXN0ZXIocmhzKSwgbGhzKTsKKysgIH0KKyt9Cisr Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFN1Ykk2NChMU3ViSTY0KiBsaXIpIHsKKysgIFJl Z2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKTsKKysgIFJlZ2lzdGVyIGxo cyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKKysgIGNvbnN0IExBbGxvY2F0aW9u KiByaHMgPSBsaXItPmdldE9wZXJhbmQoMSk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkp IHsKKysgICAgaWYgKGxocyAhPSBkZXN0KSB7CisrICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVz dCk7CisrICAgIH0KKysgICAgbWFzbS5zdWI2NChJbW02NChUb0ludDY0KHJocykpLCBSZWdpc3Rl cjY0KGRlc3QpKTsKKysgIH0gZWxzZSB7CisrICAgIC8vIGFzX3N1YmYoZCwgYSwgYikgPSBiIC0g YQorKyAgICBtYXNtLmFzX3N1YmYoZGVzdCwgVG9SZWdpc3RlcihyaHMpLCBsaHMpOworKyAgfQor K30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TXVsSShMTXVsSSogaW5zKSB7CisrICBS ZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPmdldERlZigwKSk7CisrICBSZWdpc3RlciBs aHMgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0T3BlcmFuZCgwKSk7CisrICBjb25zdCBMQWxsb2NhdGlv biogcmhzID0gaW5zLT5nZXRPcGVyYW5kKDEpOworKyAgTU11bCogbXVsID0gaW5zLT5taXIoKTsK KysKKysgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICBpbnQzMl90IGNvbnN0YW50ID0g VG9JbnQzMihyaHMpOworKyAgICBSZWdpc3RlciBzcmMgPSBsaHM7CisrCisrICAgIC8vIEJhaWxv dXQgb24gLTAuMCBiZWZvcmUgdGhlIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBiZWxvdywgc2luY2Ug Y2FzZXMKKysgICAgLy8gbGlrZSAtMSBhbmQgMCByZXR1cm4gZWFybHkgYW5kIHdvdWxkIHNraXAg dGhlIGNoZWNrLgorKyAgICBpZiAobXVsLT5jYW5CZU5lZ2F0aXZlWmVybygpICYmIGNvbnN0YW50 IDw9IDApIHsKKysgICAgICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kID0KKysgICAgICAgICAg KGNvbnN0YW50ID09IDApID8gQXNzZW1ibGVyOjpTaWduZWQgOiBBc3NlbWJsZXI6OkVxdWFsOwor KyAgICAgIGJhaWxvdXRDbXAzMihjb25kLCBzcmMsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkp OworKyAgICB9CisrCisrICAgIHN3aXRjaCAoY29uc3RhbnQpIHsKKysgICAgICBjYXNlIC0xOgor KyAgICAgICAgaWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgeworKyAgICAgICAgICBMYWJlbCBvazsK KysgICAgICAgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1X b3JkKElOVDMyX01JTiksICZvayk7CisrICAgICAgICAgIGJhaWxvdXQoaW5zLT5zbmFwc2hvdCgp KTsKKysgICAgICAgICAgbWFzbS5iaW5kKCZvayk7CisrICAgICAgICB9CisrICAgICAgICBtYXNt LmFzX25lZyhkZXN0LCBzcmMpOworKyAgICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsK KysgICAgICAgIHJldHVybjsKKysgICAgICBjYXNlIDA6CisrICAgICAgICBtYXNtLm1vdmUzMihJ bW0zMigwKSwgZGVzdCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgY2FzZSAxOgorKyAgICAg ICAgbWFzbS5tb3ZlMzIoc3JjLCBkZXN0KTsKKysgICAgICAgIHJldHVybjsKKysgICAgICBjYXNl IDI6CisrICAgICAgICBpZiAobXVsLT5jYW5PdmVyZmxvdygpKSB7CisrICAgICAgICAgIG1hc20u bW92ZTMyKHNyYywgZGVzdCk7CisrICAgICAgICAgIExhYmVsIG92ZXJmbG93OworKyAgICAgICAg ICBtYXNtLmJyYW5jaEFkZDMyKEFzc2VtYmxlcjo6T3ZlcmZsb3csIGRlc3QsIGRlc3QsICZvdmVy Zmxvdyk7CisrICAgICAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgp KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7 CisrICAgICAgICAgIG1hc20uYWRkMzIoZGVzdCwgZGVzdCk7CisrICAgICAgICB9CisrICAgICAg ICByZXR1cm47CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrCisr ICAgIC8vIENoZWNrIGZvciBwb3dlciBvZiAyIChwb3NpdGl2ZSkuCisrICAgIHVpbnQzMl90IGFi c0NzdCA9IG1vemlsbGE6OkFicyhjb25zdGFudCk7CisrICAgIGlmIChhYnNDc3QgPiAwICYmIChh YnNDc3QgJiAoYWJzQ3N0IC0gMSkpID09IDAgJiYgIW11bC0+Y2FuT3ZlcmZsb3coKSkgeworKyAg ICAgIHVpbnQzMl90IHNoaWZ0ID0gbW96aWxsYTo6Rmxvb3JMb2cyKGFic0NzdCk7CisrICAgICAg bWFzbS54X3Nsd2koZGVzdCwgc3JjLCBzaGlmdCk7CisrICAgICAgaWYgKGNvbnN0YW50IDwgMCkg eworKyAgICAgICAgbWFzbS5hc19uZWcoZGVzdCwgZGVzdCk7CisrICAgICAgfQorKyAgICAgIG1h c20uYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAg IC8vIEdlbmVyYWwgY2FzZS4KKysgICAgaWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgeworKyAgICAg IG1hc20ubW92ZTMyKHNyYywgZGVzdCk7CisrICAgICAgTGFiZWwgb3ZlcmZsb3c7CisrICAgICAg bWFzbS5icmFuY2hNdWwzMihBc3NlbWJsZXI6Ok92ZXJmbG93LCBJbW0zMihjb25zdGFudCksIGRl c3QsICZvdmVyZmxvdyk7CisrICAgICAgYmFpbG91dEZyb20oJm92ZXJmbG93LCBpbnMtPnNuYXBz aG90KCkpOworKyAgICB9IGVsc2UgeworKyAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7Cisr ICAgICAgbWFzbS5tdWwzMihJbW0zMihjb25zdGFudCksIGRlc3QpOworKyAgICB9CisrCisrICAg IC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvIChmb3IgY29uc3RhbnRzIG5vdCBoYW5kbGVkIGFi b3ZlKS4KKysgICAgaWYgKG11bC0+Y2FuQmVOZWdhdGl2ZVplcm8oKSAmJiBjb25zdGFudCA8IDAp IHsKKysgICAgICBMYWJlbCBvazsKKysgICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5v dEVxdWFsLCBkZXN0LCBJbW1Xb3JkKDApLCAmb2spOworKyAgICAgIGJhaWxvdXRDbXAzMihBc3Nl bWJsZXI6OlNpZ25lZCwgc3JjLCBzcmMsIGlucy0+c25hcHNob3QoKSk7CisrICAgICAgbWFzbS5i aW5kKCZvayk7CisrICAgIH0KKysgICAgcmV0dXJuOworKyAgfQorKworKyAgUmVnaXN0ZXIgcmhz UmVnID0gVG9SZWdpc3RlcihyaHMpOworKworKyAgaWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgewor KyAgICAvLyBVc2UgNjQtYml0IG11bHRpcGx5IHNvIHRoZSBmdWxsIHJlc3VsdCBpcyBkZXRlcm1p bmlzdGljLCB0aGVuIGNoZWNrCisrICAgIC8vIHdoZXRoZXIgdHJ1bmNhdGluZyB0byAzMiBiaXRz IGNoYW5nZXMgdGhlIHZhbHVlLiBNYXRjaCB0aGUKKysgICAgLy8gdmlzaXRBZGRJL3Zpc2l0U3Vi SSBvcmRlcmluZzogYnJhbmNoIGZpcnN0LCB0cnVuY2F0ZSBvbmx5IG9uIHRoZQorKyAgICAvLyBz dWNjZXNzIHBhdGggKHRoZSBiYWlsb3V0IGRpc2NhcmRzIGRlc3QgYW55d2F5KS4gZXh0c3cgaXMK KysgICAgLy8gbm9uLXJlY29yZGluZyAoSVNBIHYzLjBCKSBzbyBpdCBkb2Vzbid0IGRpc3R1cmIg Q1IwCisrICAgIC8vIGVpdGhlciB3YXk7IHRoZSBjaG9pY2UgaXMgZm9yIGNvbnNpc3RlbmN5Lgor KyAgICBtYXNtLmFzX211bGxkKGRlc3QsIGxocywgcmhzUmVnKTsKKysgICAgbWFzbS5hc19leHRz dyhTZWNvbmRTY3JhdGNoUmVnLCBkZXN0KTsKKysgICAgTGFiZWwgb3ZlcmZsb3c7CisrICAgIG1h c20uYXNfY21wZChkZXN0LCBTZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgbWFzbS5tYV9iKEFzc2Vt Ymxlcjo6Tm90RXF1YWwsICZvdmVyZmxvdyk7CisrICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVz dCk7CisrICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKKysgIH0g ZWxzZSB7CisrICAgIG1hc20uYXNfbXVsbHcoZGVzdCwgbGhzLCByaHNSZWcpOworKyAgICBtYXNt LmFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgfQorKworKyAgaWYgKG11bC0+Y2FuQmVOZWdhdGl2 ZVplcm8oKSkgeworKyAgICBMYWJlbCBkb25lOworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJs ZXI6Ok5vdEVxdWFsLCBkZXN0LCBJbW1Xb3JkKDApLCAmZG9uZSk7CisrICAgIC8vIFJlc3VsdCBp cyAwLiBDaGVjayBpZiBsaHN8cmhzIHdhcyBuZWdhdGl2ZS4KKysgICAgeworKyAgICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbWFzbS5hc19vcl8oc2NyYXRjaCwgbGhzLCByaHNS ZWcpOworKyAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OlNpZ25lZCwgc2NyYXRjaCwgc2Ny YXRjaCwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKyAgICBtYXNtLmJpbmQoJmRvbmUpOwor KyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TXVsSW50UHRyKExNdWxJbnRQ dHIqIGlucykgeworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkp OworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmdldE9wZXJhbmQoMCkpOworKyAg Y29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+Z2V0T3BlcmFuZCgxKTsKKysKKysgIGlmIChy aHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICBpZiAobGhzICE9IGRlc3QpIHsKKysgICAgICBtYXNt Lm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgfQorKyAgICBtYXNtLm11bFB0cihJbW1Xb3JkKFRv SW50UHRyKHJocykpLCBkZXN0KTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfbXVsbGQoZGVz dCwgbGhzLCBUb1JlZ2lzdGVyKHJocykpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0TXVsSTY0KExNdWxJNjQqIGxpcikgeworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVn aXN0ZXIobGlyLT5nZXREZWYoMCkpOworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihsaXIt PmdldE9wZXJhbmQoMCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGxpci0+Z2V0T3Bl cmFuZCgxKTsKKysKKysgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICBpZiAobGhzICE9 IGRlc3QpIHsKKysgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgfQorKyAgICBt YXNtLm11bFB0cihJbW1Xb3JkKFRvSW50NjQocmhzKSksIGRlc3QpOworKyAgfSBlbHNlIHsKKysg ICAgbWFzbS5hc19tdWxsZChkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7CisrICB9CisrfQor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXREaXZJKExEaXZJKiBpbnMpIHsKKysgIFJlZ2lz dGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBSZWdpc3RlciByaHMgPSBUb1Jl Z2lzdGVyKGlucy0+cmhzKCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSk7CisrICBSZWdpc3RlciB0ZW1wID0gVG9SZWdpc3RlcihpbnMtPnRlbXAwKCkpOwor KyAgTURpdiogbWlyID0gaW5zLT5taXIoKTsKKysKKysgIExhYmVsIGRvbmU7CisrCisrICAvLyBI YW5kbGUgZGl2aWRlIGJ5IHplcm8uCisrICBpZiAobWlyLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7 CisrICAgIGlmIChtaXItPnRyYXBPbkVycm9yKCkpIHsKKysgICAgICBMYWJlbCBub25aZXJvOwor KyAgICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgw KSwgJm5vblplcm8pOworKyAgICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRp dmlkZUJ5WmVybywgbWlyLT50cmFwU2l0ZURlc2MoKSk7CisrICAgICAgbWFzbS5iaW5kKCZub25a ZXJvKTsKKysgICAgfSBlbHNlIGlmIChtaXItPmNhblRydW5jYXRlSW5maW5pdGllcygpKSB7Cisr ICAgICAgTGFiZWwgbm9uWmVybzsKKysgICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5v dEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJvKTsKKysgICAgICBtYXNtLm1vdmUzMihJ bW0zMigwKSwgZGVzdCk7CisrICAgICAgbWFzbS5qdW1wKCZkb25lKTsKKysgICAgICBtYXNtLmJp bmQoJm5vblplcm8pOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NFUlQobWlyLT5mYWxs aWJsZSgpKTsKKysgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpFcXVhbCwgcmhzLCBJbW0z MigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKyAgfQorKworKyAgLy8gSGFuZGxlIElO VDMyX01JTiAvIC0xIG92ZXJmbG93LgorKyAgaWYgKG1pci0+Y2FuQmVOZWdhdGl2ZU92ZXJmbG93 KCkpIHsKKysgICAgTGFiZWwgbm90TWluSW50OworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJs ZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdvcmQoSU5UMzJfTUlOKSwgJm5vdE1pbkludCk7CisrICAg IG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgtMSksICZu b3RNaW5JbnQpOworKworKyAgICBpZiAobWlyLT50cmFwT25FcnJvcigpKSB7CisrICAgICAgbWFz bS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyT3ZlcmZsb3csIG1pci0+dHJhcFNpdGVEZXNj KCkpOworKyAgICB9IGVsc2UgaWYgKG1pci0+Y2FuVHJ1bmNhdGVPdmVyZmxvdygpKSB7CisrICAg ICAgbWFzbS5tb3ZlMzIoSW1tMzIoSU5UMzJfTUlOKSwgZGVzdCk7CisrICAgICAgbWFzbS5qdW1w KCZkb25lKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUo KSk7CisrICAgICAgYmFpbG91dChpbnMtPnNuYXBzaG90KCkpOworKyAgICB9CisrICAgIG1hc20u YmluZCgmbm90TWluSW50KTsKKysgIH0KKysKKysgIC8vIEhhbmRsZSBuZWdhdGl2ZSB6ZXJvLgor KyAgaWYgKCFtaXItPmNhblRydW5jYXRlTmVnYXRpdmVaZXJvKCkgJiYgbWlyLT5jYW5CZU5lZ2F0 aXZlWmVybygpKSB7CisrICAgIExhYmVsIG9rOworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJs ZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdvcmQoMCksICZvayk7CisrICAgIGJhaWxvdXRDbXAzMihB c3NlbWJsZXI6Okxlc3NUaGFuLCByaHMsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOworKyAg ICBtYXNtLmJpbmQoJm9rKTsKKysgIH0KKysKKysgIC8vIFBlcmZvcm0gdGhlIGRpdmlzaW9uLgor KyAgbWFzbS5hc19kaXZ3KGRlc3QsIGxocywgcmhzKTsKKysgIG1hc20uYXNfZXh0c3coZGVzdCwg ZGVzdCk7CisrCisrICAvLyBDaGVjayByZW1haW5kZXIgaWYgbm90IHRydW5jYXRhYmxlLgorKyAg aWYgKCFtaXItPmNhblRydW5jYXRlUmVtYWluZGVyKCkpIHsKKysgICAgLy8gQ29tcHV0ZSByZW1h aW5kZXI6IHRlbXAgPSBsaHMgLSAoZGVzdCAqIHJocykKKysgICAgbWFzbS5hc19tdWxsdyh0ZW1w LCBkZXN0LCByaHMpOworKyAgICBtYXNtLmFzX3N1YmYodGVtcCwgdGVtcCwgbGhzKTsgIC8vIHRl bXAgPSBsaHMgLSB0ZW1wCisrICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCB0 ZW1wLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgIH0KKysKKysgIG1hc20uYmluZCgm ZG9uZSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXREaXZQb3dUd29JKExEaXZQ b3dUd29JKiBpbnMpIHsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5udW1lcmF0 b3IoKSk7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgUmVnaXN0ZXIgdG1wID0g dGVtcHMuQWNxdWlyZSgpOworKyAgaW50MzJfdCBzaGlmdCA9IGlucy0+c2hpZnQoKTsKKysKKysg IGlmIChzaGlmdCAhPSAwKSB7CisrICAgIE1EaXYqIG1pciA9IGlucy0+bWlyKCk7CisrCisrICAg IGlmICghbWlyLT5pc1RydW5jYXRlZCgpKSB7CisrICAgICAgLy8gSWYgcmVtYWluZGVyICE9IDAs IGJhaWxvdXQgKGNoZWNrIGxvd2VyICdzaGlmdCcgYml0cykuCisrICAgICAgbWFzbS54X3Nsd2ko dG1wLCBsaHMsIDMyIC0gc2hpZnQpOworKyAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6Ok5v dEVxdWFsLCB0bXAsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOworKyAgICB9CisrCisrICAg IGlmICghbWlyLT5jYW5CZU5lZ2F0aXZlRGl2aWRlbmQoKSkgeworKyAgICAgIC8vIE5vbi1uZWdh dGl2ZSBkaXZpZGVuZDogc2ltcGxlIHJpZ2h0IHNoaWZ0LgorKyAgICAgIG1hc20uYXNfc3Jhd2ko ZGVzdCwgbGhzLCBzaGlmdCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8gTmVlZCByb3VuZGlu ZyBhZGp1c3RtZW50IGZvciBuZWdhdGl2ZSBudW1iZXJzLgorKyAgICAgIC8vIEFkZCAoMSA8PCBz aGlmdCkgLSAxIGlmIGxocyBpcyBuZWdhdGl2ZS4KKysgICAgICBpZiAoc2hpZnQgPiAxKSB7Cisr ICAgICAgICBtYXNtLmFzX3NyYXdpKHRtcCwgbGhzLCAzMSk7CisrICAgICAgICBtYXNtLmFzX3Js d2lubSh0bXAsIHRtcCwgMCwgMzIgLSBzaGlmdCwgMzEpOworKyAgICAgIH0gZWxzZSB7CisrICAg ICAgICAvLyBzaGlmdCA9PSAxOiBleHRyYWN0IHNpZ24gYml0IGludG8gYml0IDMxCisrICAgICAg ICBtYXNtLmFzX3Jsd2lubSh0bXAsIGxocywgMSwgMzEsIDMxKTsKKysgICAgICB9CisrICAgICAg bWFzbS5hZGQzMihsaHMsIHRtcCk7CisrICAgICAgbWFzbS5hc19zcmF3aShkZXN0LCB0bXAsIHNo aWZ0KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgbWFzbS5tb3ZlMzIobGhzLCBkZXN0KTsK KysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1vZEkoTE1vZEkqIGlucykg eworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygpKTsKKysgIFJlZ2lzdGVy IHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSk7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdp c3RlcihpbnMtPm91dHB1dCgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1h c20pOworKyAgUmVnaXN0ZXIgdGVtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIE1Nb2QqIG1pciA9 IGlucy0+bWlyKCk7CisrICBMYWJlbCBkb25lOworKworKyAgLy8gSGFuZGxlIGRpdmlkZSBieSB6 ZXJvLgorKyAgaWYgKG1pci0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgeworKyAgICBpZiAobWlyLT5p c1RydW5jYXRlZCgpKSB7CisrICAgICAgaWYgKG1pci0+dHJhcE9uRXJyb3IoKSkgeworKyAgICAg ICAgTGFiZWwgbm9uWmVybzsKKysgICAgICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90 RXF1YWwsIHJocywgSW1tV29yZCgwKSwgJm5vblplcm8pOworKyAgICAgICAgbWFzbS53YXNtVHJh cCh3YXNtOjpUcmFwOjpJbnRlZ2VyRGl2aWRlQnlaZXJvLCBtaXItPnRyYXBTaXRlRGVzYygpKTsK KysgICAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IC8vIFRydW5jYXRlZCBkaXZpc2lvbiBieSB6ZXJvIHlpZWxkcyBpbnRlZ2VyIHplcm8uCisrICAg ICAgICBtYXNtLm1vdmUzMihyaHMsIGRlc3QpOworKyAgICAgICAgTGFiZWwgbm9uWmVybzsKKysg ICAgICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgw KSwgJm5vblplcm8pOworKyAgICAgICAgbWFzbS5qdW1wKCZkb25lKTsKKysgICAgICAgIG1hc20u YmluZCgmbm9uWmVybyk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NF UlQobWlyLT5mYWxsaWJsZSgpKTsKKysgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpFcXVh bCwgcmhzLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKyAgfQorKworKyAg Ly8gSGFuZGxlIElOVDMyX01JTiAlIC0xLgorKyAgLy8gUFBDNjQgZGl2dyBpcyB1bmRlZmluZWQg Zm9yIElOVDMyX01JTiAvIC0xIChxdW90aWVudCBvdmVyZmxvd3MpLCBzbyB3ZQorKyAgLy8gbXVz dCByZXR1cm4gMCBleHBsaWNpdGx5LiAgVGhlIHdhc20gc3BlYyBhbHNvIGRlZmluZXMgcmVtX3Mo TUlOLCAtMSkgPSAwLgorKyAgaWYgKCFtaXItPmlzVW5zaWduZWQoKSkgeworKyAgICBMYWJlbCBu b3RNaW5PdmVyZmxvdzsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg bGhzLCBJbW1Xb3JkKElOVDMyX01JTiksCisrICAgICAgICAgICAgICAgICAgICZub3RNaW5PdmVy Zmxvdyk7CisrICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1t V29yZCgtMSksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIG1hc20ubW92ZTMyKEltbTMyKDApLCBk ZXN0KTsKKysgICAgbWFzbS5qdW1wKCZkb25lKTsKKysgICAgbWFzbS5iaW5kKCZub3RNaW5PdmVy Zmxvdyk7CisrICB9CisrCisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgbWFzbS5hc19tb2Rz dyhkZXN0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX2RpdncodGVtcCwg bGhzLCByaHMpOworKyAgICBtYXNtLmFzX211bGx3KHRlbXAsIHRlbXAsIHJocyk7CisrICAgIG1h c20uYXNfc3ViZihkZXN0LCB0ZW1wLCBsaHMpOworKyAgfQorKyAgbWFzbS5hc19leHRzdyhkZXN0 LCBkZXN0KTsKKysKKysgIC8vIElmIFglWSA9PSAwIGFuZCBYIDwgMCwgdGhlIHJlc3VsdCBpcyAt MCwgYW5kIHdlIG5lZWQgdG8gYmFpbCBvdXQuCisrICBpZiAobWlyLT5jYW5CZU5lZ2F0aXZlRGl2 aWRlbmQoKSAmJiAhbWlyLT5pc1RydW5jYXRlZCgpKSB7CisrICAgIE1PWl9BU1NFUlQobWlyLT5m YWxsaWJsZSgpKTsKKysgICAgTGFiZWwgb2s7CisrICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxl cjo6Tm90RXF1YWwsIGRlc3QsIEltbVdvcmQoMCksICZvayk7CisrICAgIGJhaWxvdXRDbXAzMihB c3NlbWJsZXI6OlNpZ25lZCwgbGhzLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAg bWFzbS5iaW5kKCZvayk7CisrICB9CisrCisrICBtYXNtLmJpbmQoJmRvbmUpOworK30KKysKKyt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TW9kUG93VHdvSShMTW9kUG93VHdvSSogaW5zKSB7Cisr ICBSZWdpc3RlciBpbiA9IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKKysgIFJlZ2lz dGVyIG91dCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOworKyAgTU1vZCogbWlyID0gaW5z LT5taXIoKTsKKysgIGludDMyX3Qgc2hpZnQgPSBpbnMtPnNoaWZ0KCk7CisrICB1aW50MzJfdCBt YXNrID0gKHVpbnQzMl90KDEpIDw8IHNoaWZ0KSAtIDE7CisrCisrICBpZiAobWlyLT5jYW5CZU5l Z2F0aXZlRGl2aWRlbmQoKSAmJiAhbWlyLT5pc1RydW5jYXRlZCgpKSB7CisrICAgIExhYmVsIG5v bk5lZzsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW4sIEltbVdv cmQoMCksICZub25OZWcpOworKyAgICAvLyBpbiA9PSAwOiBtb2QgaXMgMCwgY2hlY2sgZm9yIG5l Z2F0aXZlIHplcm8uCisrICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OlNpZ25lZCwgaW4sIGlu LCBpbnMtPnNuYXBzaG90KCkpOworKyAgICBtYXNtLmJpbmQoJm5vbk5lZyk7CisrICB9CisrCisr ICBMYWJlbCBuZWdhdGl2ZSwgZG9uZTsKKysgIG1hc20uYnJhbmNoMzIoQXNzZW1ibGVyOjpTaWdu ZWQsIGluLCBpbiwgJm5lZ2F0aXZlKTsKKysKKysgIC8vIFBvc2l0aXZlIGNhc2U6IGp1c3QgbWFz ay4KKysgIG1hc20uYW5kMzIoSW1tMzIobWFzayksIGluLCBvdXQpOworKyAgbWFzbS5qdW1wKCZk b25lKTsKKysKKysgIC8vIE5lZ2F0aXZlIGNhc2U6IG5lZ2F0ZSwgbWFzaywgbmVnYXRlIGJhY2su CisrICBtYXNtLmJpbmQoJm5lZ2F0aXZlKTsKKysgIG1hc20uYXNfbmVnKG91dCwgaW4pOworKyAg bWFzbS5hbmQzMihJbW0zMihtYXNrKSwgb3V0KTsKKysgIG1hc20uYXNfbmVnKG91dCwgb3V0KTsK KysgIG1hc20uYXNfZXh0c3cob3V0LCBvdXQpOworKworKyAgaWYgKCFtaXItPmlzVHJ1bmNhdGVk KCkgJiYgbWlyLT5jYW5CZU5lZ2F0aXZlRGl2aWRlbmQoKSkgeworKyAgICBMYWJlbCBvazsKKysg ICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3V0LCBJbW1Xb3JkKDApLCAm b2spOworKyAgICBiYWlsb3V0KGlucy0+c25hcHNob3QoKSk7CisrICAgIG1hc20uYmluZCgmb2sp OworKyAgfQorKworKyAgbWFzbS5iaW5kKCZkb25lKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdE1vZE1hc2tJKExNb2RNYXNrSSogaW5zKSB7CisrICBSZWdpc3RlciBzcmMgPSBU b1JlZ2lzdGVyKGlucy0+aW5wdXQoKSk7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rlcihp bnMtPm91dHB1dCgpKTsKKysgIFJlZ2lzdGVyIHRtcDAgPSBUb1JlZ2lzdGVyKGlucy0+dGVtcDAo KSk7CisrICBSZWdpc3RlciB0bXAxID0gVG9SZWdpc3RlcihpbnMtPnRlbXAxKCkpOworKyAgTU1v ZCogbWlyID0gaW5zLT5taXIoKTsKKysKKysgIGlmICghbWlyLT5pc1RydW5jYXRlZCgpICYmIG1p ci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkpIHsKKysgICAgTU9aX0FTU0VSVChtaXItPmZhbGxp YmxlKCkpOworKworKyAgICBMYWJlbCBiYWlsOworKyAgICBtYXNtLm1hX21vZF9tYXNrKHNyYywg ZGVzdCwgdG1wMCwgdG1wMSwgaW5zLT5zaGlmdCgpLCAmYmFpbCk7CisrICAgIGJhaWxvdXRGcm9t KCZiYWlsLCBpbnMtPnNuYXBzaG90KCkpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5tYV9tb2Rf bWFzayhzcmMsIGRlc3QsIHRtcDAsIHRtcDEsIGlucy0+c2hpZnQoKSwgbnVsbHB0cik7CisrICB9 CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROZWdJKExOZWdJKiBpbnMpIHsKKysg IFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3RlcihpbnMtPmlucHV0KCkpOworKyAgUmVnaXN0ZXIg b3V0cHV0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIG1hc20uYXNfbmVnKG91dHB1 dCwgaW5wdXQpOworKyAgbWFzbS5hc19leHRzdyhvdXRwdXQsIG91dHB1dCk7CisrfQorKworK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROZWdJNjQoTE5lZ0k2NCogaW5zKSB7CisrICBSZWdpc3Rl ciBpbnB1dCA9IFRvUmVnaXN0ZXI2NChpbnMtPmlucHV0KCkpLnJlZzsKKysgIFJlZ2lzdGVyIG91 dHB1dCA9IFRvT3V0UmVnaXN0ZXI2NChpbnMpLnJlZzsKKysgIG1hc20uYXNfbmVnKG91dHB1dCwg aW5wdXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VURpdk9yTW9kKExVRGl2 T3JNb2QqIGlucykgeworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygpKTsK KysgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSk7CisrICBSZWdpc3RlciBv dXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMobWFzbSk7CisrICBSZWdpc3RlciB0ZW1wID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgTGFiZWwgZG9uZTsKKysKKysgIC8vIERpdmlzaW9uIGJ5IHplcm8gY2hlY2suCisrICBpZiAo aW5zLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7CisrICAgIGlmIChpbnMtPm1pcigpLT5pc1RydW5j YXRlZCgpKSB7CisrICAgICAgaWYgKGlucy0+dHJhcE9uRXJyb3IoKSkgeworKyAgICAgICAgTGFi ZWwgbm9uWmVybzsKKysgICAgICAgIG1hc20uYnJhbmNoMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg cmhzLCBJbW0zMigwKSwgJm5vblplcm8pOworKyAgICAgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpU cmFwOjpJbnRlZ2VyRGl2aWRlQnlaZXJvLCBpbnMtPnRyYXBTaXRlRGVzYygpKTsKKysgICAgICAg IG1hc20uYmluZCgmbm9uWmVybyk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIExhYmVsIG5v blplcm87CisrICAgICAgICBtYXNtLmJyYW5jaDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywg SW1tMzIoMCksICZub25aZXJvKTsKKysgICAgICAgIG1hc20ubW92ZTMyKEltbTMyKDApLCBvdXRw dXQpOworKyAgICAgICAgbWFzbS5qdW1wKCZkb25lKTsKKysgICAgICAgIG1hc20uYmluZCgmbm9u WmVybyk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIGJhaWxvdXRDbXAzMihBc3Nl bWJsZXI6OkVxdWFsLCByaHMsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOworKyAgICB9Cisr ICB9CisrCisrICAvLyBaZXJvLWV4dGVuZCBib3RoIG9wZXJhbmRzIHRvIDY0IGJpdHMgZm9yIHVu c2lnbmVkIGRpdmlkZS4KKysgIG1hc20ubW92ZTMyVG82NFplcm9FeHRlbmQobGhzLCBSZWdpc3Rl cjY0KGxocykpOworKyAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChyaHMsIFJlZ2lzdGVyNjQo cmhzKSk7CisrCisrICBpZiAoaW5zLT5taXIoKS0+aXNEaXYoKSkgeworKyAgICAvLyBEaXZpc2lv biBwYXRoOiBjb21wdXRlIHF1b3RpZW50LiBDaGVjayByZW1haW5kZXIgaWYgbmVlZGVkLgorKyAg ICBpZiAoIWlucy0+bWlyKCktPnRvRGl2KCktPmNhblRydW5jYXRlUmVtYWluZGVyKCkpIHsKKysg ICAgICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgICAgIG1hc20uYXNfbW9kdXcodGVtcCwgbGhz LCByaHMpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLmFzX2Rpdnd1KHRlbXAsIGxo cywgcmhzKTsKKysgICAgICAgIG1hc20uYXNfbXVsbHcodGVtcCwgdGVtcCwgcmhzKTsKKysgICAg ICAgIG1hc20uYXNfc3ViZih0ZW1wLCB0ZW1wLCBsaHMpOworKyAgICAgIH0KKysgICAgICBiYWls b3V0Q21wMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcCwgSW1tMzIoMCksIGlucy0+c25hcHNo b3QoKSk7CisrICAgIH0KKysgICAgbWFzbS5hc19kaXZ3dShvdXRwdXQsIGxocywgcmhzKTsKKysg IH0gZWxzZSB7CisrICAgIC8vIE1vZHVsbyBwYXRoLgorKyAgICBpZiAoSGFzUE9XRVI5KCkpIHsK KysgICAgICBtYXNtLmFzX21vZHV3KG91dHB1dCwgbGhzLCByaHMpOworKyAgICB9IGVsc2Ugewor KyAgICAgIG1hc20uYXNfZGl2d3UodGVtcCwgbGhzLCByaHMpOworKyAgICAgIG1hc20uYXNfbXVs bHcodGVtcCwgdGVtcCwgcmhzKTsKKysgICAgICBtYXNtLmFzX3N1YmYob3V0cHV0LCB0ZW1wLCBs aHMpOworKyAgICB9CisrICB9CisrCisrICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsK KysKKysgIGlmICghaW5zLT5taXIoKS0+aXNUcnVuY2F0ZWQoKSkgeworKyAgICBiYWlsb3V0Q21w MzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3V0cHV0LCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgp KTsKKysgIH0KKysKKysgIG1hc20uYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXREaXZPck1vZEk2NChMRGl2T3JNb2RJNjQqIGxpcikgeworKyAgUmVnaXN0ZXIg bGhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMCkpOworKyAgUmVnaXN0ZXIgcmhzID0g VG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMSkpOworKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9S ZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysKKysgIExhYmVsIGRvbmU7CisrCisrICAvLyBEaXZp c2lvbiBieSB6ZXJvIHRyYXAuCisrICBpZiAobGlyLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7Cisr ICAgIExhYmVsIG5vblplcm87CisrICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1 YWwsIHJocywgSW1tV29yZCgwKSwgJm5vblplcm8pOworKyAgICBtYXNtLndhc21UcmFwKHdhc206 OlRyYXA6OkludGVnZXJEaXZpZGVCeVplcm8sIGxpci0+dHJhcFNpdGVEZXNjKCkpOworKyAgICBt YXNtLmJpbmQoJm5vblplcm8pOworKyAgfQorKworKyAgLy8gSU5UNjRfTUlOIC8gLTEgb3ZlcmZs b3cgdHJhcCAoZm9yIGRpdiBvbmx5KS4KKysgIGlmIChsaXItPmNhbkJlTmVnYXRpdmVPdmVyZmxv dygpKSB7CisrICAgIExhYmVsIG5vdE1pbkludDsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1i bGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDY0X01JTiksICZub3RNaW5JbnQpOworKyAg ICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAm bm90TWluSW50KTsKKysgICAgaWYgKGxpci0+bWlyKCktPmlzRGl2KCkpIHsKKysgICAgICBtYXNt Lndhc21UcmFwKHdhc206OlRyYXA6OkludGVnZXJPdmVyZmxvdywgbGlyLT50cmFwU2l0ZURlc2Mo KSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5tb3ZlUHRyKEltbVdvcmQoMCksIG91dHB1 dCk7CisrICAgICAgbWFzbS5qdW1wKCZkb25lKTsKKysgICAgfQorKyAgICBtYXNtLmJpbmQoJm5v dE1pbkludCk7CisrICB9CisrCisrICBpZiAobGlyLT5taXIoKS0+aXNEaXYoKSkgeworKyAgICBt YXNtLmFzX2RpdmQob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgp KSB7CisrICAgIG1hc20uYXNfbW9kc2Qob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2Ugewor KyAgICBtYXNtLmFzX2RpdmQob3V0cHV0LCBsaHMsIHJocyk7CisrICAgIG1hc20uYXNfbXVsbGQo b3V0cHV0LCBvdXRwdXQsIHJocyk7CisrICAgIG1hc20uYXNfc3ViZihvdXRwdXQsIG91dHB1dCwg bGhzKTsKKysgIH0KKysKKysgIG1hc20uYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRVRGl2T3JNb2RJNjQoTFVEaXZPck1vZEk2NCogbGlyKSB7CisrICBSZWdp c3RlciBsaHMgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgwKSk7CisrICBSZWdpc3RlciBy aHMgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgxKSk7CisrICBSZWdpc3RlciBvdXRwdXQg PSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKworKyAgLy8gRGl2aXNpb24gYnkgemVybyB0 cmFwLgorKyAgaWYgKGxpci0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgeworKyAgICBMYWJlbCBub25a ZXJvOworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdv cmQoMCksICZub25aZXJvKTsKKysgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2Vy RGl2aWRlQnlaZXJvLCBsaXItPnRyYXBTaXRlRGVzYygpKTsKKysgICAgbWFzbS5iaW5kKCZub25a ZXJvKTsKKysgIH0KKysKKysgIGlmIChsaXItPm1pcigpLT5pc0RpdigpKSB7CisrICAgIG1hc20u YXNfZGl2ZHUob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7 CisrICAgIG1hc20uYXNfbW9kdWQob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAg ICBtYXNtLmFzX2RpdmR1KG91dHB1dCwgbGhzLCByaHMpOworKyAgICBtYXNtLmFzX211bGxkKG91 dHB1dCwgb3V0cHV0LCByaHMpOworKyAgICBtYXNtLmFzX3N1YmYob3V0cHV0LCBvdXRwdXQsIGxo cyk7CisrICB9CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFZpc2l0b3JzOiBCaXR3aXNlCisrCisr dm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJpdE5vdEkoTEJpdE5vdEkqIGlucykgeworKyAgUmVn aXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGlucy0+aW5wdXQoKSk7CisrICBSZWdpc3RlciBkZXN0 ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIG1hc20uYXNfbm9yKGRlc3QsIGlucHV0 LCBpbnB1dCk7CisrICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0Qml0Tm90STY0KExCaXROb3RJNjQqIGlucykgeworKyAgUmVnaXN0 ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyNjQoaW5zLT5pbnB1dCgpKS5yZWc7CisrICBSZWdpc3RlciBk ZXN0ID0gVG9PdXRSZWdpc3RlcjY0KGlucykucmVnOworKyAgbWFzbS5hc19ub3IoZGVzdCwgaW5w dXQsIGlucHV0KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJpdE9wSShMQml0 T3BJKiBpbnMpIHsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDAp KTsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKKysg IGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7CisrCisrICBzd2l0 Y2ggKGlucy0+Yml0b3AoKSkgeworKyAgICBjYXNlIEpTT3A6OkJpdE9yOgorKyAgICAgIGlmIChy aHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICAgICAgbWFzbS5vcjMyKEltbTMyKFRvSW50MzIocmhz KSksIGxocywgZGVzdCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNfb3JfKGRl c3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKKysgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwg ZGVzdCk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6OkJpdFhvcjoK KysgICAgICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgICAgIG1hc20ueG9yMzIoSW1t MzIoVG9JbnQzMihyaHMpKSwgbGhzLCBkZXN0KTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAg bWFzbS5hc194b3JfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKKysgICAgICAgIG1hc20u YXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNl IEpTT3A6OkJpdEFuZDoKKysgICAgICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgICAg IG1hc20uYW5kMzIoSW1tMzIoVG9JbnQzMihyaHMpKSwgbGhzLCBkZXN0KTsKKysgICAgICB9IGVs c2UgeworKyAgICAgICAgbWFzbS5hc19hbmRfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsK KysgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAgfQorKyAgICAgIGJy ZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBiaW5hcnkg b3Bjb2RlIik7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRCaXRPcEk2 NChMQml0T3BJNjQqIGxpcikgeworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIobGlyLT5n ZXREZWYoMCkpOworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQo MCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGxpci0+Z2V0T3BlcmFuZCgxKTsKKysK KysgIHN3aXRjaCAobGlyLT5iaXRvcCgpKSB7CisrICAgIGNhc2UgSlNPcDo6Qml0T3I6CisrICAg ICAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAgICAgICBpZiAobGhzICE9IGRlc3QpIHsK KysgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAg ICBtYXNtLm9yNjQoSW1tNjQoVG9JbnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7CisrICAg ICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNfb3JfKGRlc3QsIGxocywgVG9SZWdpc3Rlcihy aHMpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgSlNPcDo6Qml0WG9yOgor KyAgICAgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICAgICAgaWYgKGxocyAhPSBkZXN0 KSB7CisrICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAgICAgICAgfQorKyAg ICAgICAgbWFzbS54b3I2NChJbW02NChUb0ludDY0KHJocykpLCBSZWdpc3RlcjY0KGRlc3QpKTsK KysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5hc194b3JfKGRlc3QsIGxocywgVG9SZWdp c3RlcihyaHMpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgSlNPcDo6Qml0 QW5kOgorKyAgICAgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICAgICAgaWYgKGxocyAh PSBkZXN0KSB7CisrICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAgICAgICAg fQorKyAgICAgICAgbWFzbS5hbmQ2NChJbW02NChUb0ludDY0KHJocykpLCBSZWdpc3RlcjY0KGRl c3QpKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5hc19hbmRfKGRlc3QsIGxocywg VG9SZWdpc3RlcihyaHMpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6 CisrICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGJpbmFyeSBvcGNvZGUiKTsKKysgIH0KKyt9 CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFNoaWZ0SShMU2hpZnRJKiBpbnMpIHsKKysg IFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBjb25zdCBMQWxsb2Nh dGlvbiogcmhzID0gaW5zLT5yaHMoKTsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpOworKworKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAgIGludDMy X3Qgc2hpZnQgPSBUb0ludDMyKHJocykgJiAweDFmOworKyAgICBzd2l0Y2ggKGlucy0+Yml0b3Ao KSkgeworKyAgICAgIGNhc2UgSlNPcDo6THNoOgorKyAgICAgICAgaWYgKHNoaWZ0KSB7CisrICAg ICAgICAgIG1hc20ubHNoaWZ0MzIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAg fSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5tb3ZlMzIobGhzLCBkZXN0KTsKKysgICAgICAgIH0K KysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgSlNPcDo6UnNoOgorKyAgICAgICAgaWYgKHNo aWZ0KSB7CisrICAgICAgICAgIG1hc20ucnNoaWZ0MzJBcml0aG1ldGljKEltbTMyKHNoaWZ0KSwg bGhzLCBkZXN0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIG1hc20ubW92ZTMyKGxo cywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEpTT3A6 OlVyc2g6CisrICAgICAgICBpZiAoc2hpZnQpIHsKKysgICAgICAgICAgbWFzbS5yc2hpZnQzMihJ bW0zMihzaGlmdCksIGxocywgZGVzdCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAv LyB4ID4+PiAwIGNhbiBwcm9kdWNlIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBhcyB1 bnNpZ25lZC4KKysgICAgICAgICAgbWFzbS5tb3ZlMzIobGhzLCBkZXN0KTsKKysgICAgICAgIH0K KysgICAgICAgIGlmIChpbnMtPm1pcigpLT50b1Vyc2goKS0+ZmFsbGlibGUoKSkgeworKyAgICAg ICAgICAvLyB4ID4+PiAwIGNhbiBwcm9kdWNlIHZhbHVlcyB0aGF0IGRvbid0IGZpdCBpbiBzaWdu ZWQgaW50MzIuCisrICAgICAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6Okxlc3NUaGFuLCBk ZXN0LCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgICAgIH0KKysgICAgICAgIGJy ZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgc2hp ZnQgb3Bjb2RlIik7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFJlZ2lzdGVyIHNoaWZ0UmVn ID0gVG9SZWdpc3RlcihyaHMpOworKyAgICAvLyBQUEMgc2x3L3Nydy9zcmF3IHVzZSA2IGJpdHMg b2Ygc2hpZnQgYW1vdW50OyBKUyByZXF1aXJlcyBtb2QgMzIuCisrICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIG1hc20uYXNfcmx3aW5tKG1hc2tlZCwgc2hpZnRSZWcsIDAsIDI3LCAzMSk7 CisrICAgIHN3aXRjaCAoaW5zLT5iaXRvcCgpKSB7CisrICAgICAgY2FzZSBKU09wOjpMc2g6Cisr ICAgICAgICBtYXNtLmFzX3NsdyhkZXN0LCBsaHMsIG1hc2tlZCk7CisrICAgICAgICBtYXNtLmFz X2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpS c2g6CisrICAgICAgICBtYXNtLmFzX3NyYXcoZGVzdCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAg YnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpVcnNoOgorKyAgICAgICAgbWFzbS5hc19zcncoZGVz dCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKKysg ICAgICAgIGlmIChpbnMtPm1pcigpLT50b1Vyc2goKS0+ZmFsbGlibGUoKSkgeworKyAgICAgICAg ICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwgZGVzdCwgSW1tMzIoMCksIGlucy0+ c25hcHNob3QoKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0 OgorKyAgICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOworKyAgICB9 CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTaGlmdEludFB0cihMU2hp ZnRJbnRQdHIqIGlucykgeworKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygp KTsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKworKyAg aWYgKGlucy0+cmhzKCktPmlzQ29uc3RhbnQoKSkgeworKyAgICAvLyBTaGlmdEludFB0cidzIFJI UyBjb25zdGFudCBpcyBJbnRQdHItIG9yIEludDMyLXR5cGVkLCBub3QgSW50NjQuIFVzZQorKyAg ICAvLyBUb0ludFB0cigpIHdoaWNoIGRpc3BhdGNoZXMgb24gdGhlIHVuZGVybHlpbmcgTUlSVHlw ZSAodGhlIHByZXZpb3VzCisrICAgIC8vIE1Db25zdGFudDo6dG9JbnQ2NCgpIGNhbGwgYXNzZXJ0 ZWQgd2hlbiB0aGUgY29uc3RhbnQgd2Fzbid0IEludDY0KS4KKysgICAgaW50MzJfdCBzaGlmdCA9 IGludDMyX3QoVG9JbnRQdHIoaW5zLT5yaHMoKSkpICYgMHgzZjsKKysgICAgc3dpdGNoIChpbnMt PmJpdG9wKCkpIHsKKysgICAgICBjYXNlIEpTT3A6OkxzaDoKKysgICAgICAgIGlmIChzaGlmdCkg eworKyAgICAgICAgICBtYXNtLmxzaGlmdFB0cihJbW0zMihzaGlmdCksIGxocywgZGVzdCk7Cisr ICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKKysg ICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgSlNPcDo6UnNoOgorKyAgICAg ICAgaWYgKHNoaWZ0KSB7CisrICAgICAgICAgIG1hc20ucnNoaWZ0UHRyQXJpdGhtZXRpYyhJbW0z MihzaGlmdCksIGxocywgZGVzdCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBtYXNt Lm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAg IGNhc2UgSlNPcDo6VXJzaDoKKysgICAgICAgIGlmIChzaGlmdCkgeworKyAgICAgICAgICBtYXNt LnJzaGlmdFB0cihJbW0zMihzaGlmdCksIGxocywgZGVzdCk7CisrICAgICAgICB9IGVsc2Ugewor KyAgICAgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgICAgIH0KKysgICAgICAg IGJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQg c2hpZnQgb3Bjb2RlIik7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFJlZ2lzdGVyIHNoaWZ0 UmVnID0gVG9SZWdpc3RlcihpbnMtPnJocygpKTsKKysgICAgLy8gc2xkL3NyZC9zcmFkIHVzZSB0 aGUgbG93IDcgYml0cyBvZiB0aGUgc2hpZnQgY291bnQ6IGNvdW50cyA+PSA2NAorKyAgICAvLyBw cm9kdWNlIDAgKHNpZ24tZmlsbCBmb3Igc3JhZCkuIE1hc2sgdG8gNiBiaXRzIGZvciBtb2QtNjQg c2VtYW50aWNzLgorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysg ICAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtYXNtLmFzX3JsZGlj bChtYXNrZWQsIHNoaWZ0UmVnLCAwLCA1OCk7CisrICAgIHN3aXRjaCAoaW5zLT5iaXRvcCgpKSB7 CisrICAgICAgY2FzZSBKU09wOjpMc2g6CisrICAgICAgICBtYXNtLmFzX3NsZChkZXN0LCBsaHMs IG1hc2tlZCk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEpTT3A6OlJzaDoKKysgICAg ICAgIG1hc20uYXNfc3JhZChkZXN0LCBsaHMsIG1hc2tlZCk7CisrICAgICAgICBicmVhazsKKysg ICAgICBjYXNlIEpTT3A6OlVyc2g6CisrICAgICAgICBtYXNtLmFzX3NyZChkZXN0LCBsaHMsIG1h c2tlZCk7CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NS QVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOworKyAgICB9CisrICB9CisrfQorKworK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTaGlmdEk2NChMU2hpZnRJNjQqIGxpcikgeworKyAgUmVn aXN0ZXIgbGhzID0gVG9SZWdpc3RlcjY0KGxpci0+bGhzKCkpLnJlZzsKKysgIFJlZ2lzdGVyIGRl c3QgPSBUb091dFJlZ2lzdGVyNjQobGlyKS5yZWc7CisrICBjb25zdCBMQWxsb2NhdGlvbiogcmhz ID0gbGlyLT5yaHMoKTsKKysKKysgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICBpbnQz Ml90IHNoaWZ0ID0gaW50MzJfdChyaHMtPnRvQ29uc3RhbnQoKS0+dG9JbnQ2NCgpKSAmIDB4M2Y7 CisrICAgIHN3aXRjaCAobGlyLT5iaXRvcCgpKSB7CisrICAgICAgY2FzZSBKU09wOjpMc2g6Cisr ICAgICAgICBpZiAoc2hpZnQpIHsKKysgICAgICAgICAgbWFzbS5sc2hpZnRQdHIoSW1tMzIoc2hp ZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5tb3Zl UHRyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNl IEpTT3A6OlJzaDoKKysgICAgICAgIGlmIChzaGlmdCkgeworKyAgICAgICAgICBtYXNtLnJzaGlm dFB0ckFyaXRobWV0aWMoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAgfSBlbHNl IHsKKysgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAg ICAgICBicmVhazsKKysgICAgICBjYXNlIEpTT3A6OlVyc2g6CisrICAgICAgICBpZiAoc2hpZnQp IHsKKysgICAgICAgICAgbWFzbS5yc2hpZnRQdHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOwor KyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Cisr ICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9a X0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOworKyAgICB9CisrICB9IGVsc2Ugewor KyAgICBSZWdpc3RlciBzaGlmdFJlZyA9IFRvUmVnaXN0ZXIocmhzKTsKKysgICAgLy8gV2FzbSBp NjQgc2hpZnRzIHJlcXVpcmUgc2hpZnQgY291bnQgbW9kdWxvIDY0LiBQUEM2NCBzbGQvc3JkL3Ny YWQKKysgICAgLy8gdXNlIGEgNy1iaXQgc2hpZnQgZmllbGQsIHNvIHNoaWZ0cyA+PSA2NCBwcm9k dWNlIDAgKG9yIHNpZ24tZmlsbAorKyAgICAvLyBmb3Igc3JhZCkuIE1hc2sgdG8gNiBiaXRzIGZp cnN0LgorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgUmVn aXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtYXNtLmFzX3JsZGljbChtYXNr ZWQsIHNoaWZ0UmVnLCAwLCA1OCk7ICAvLyBjbHJsZGk6IGtlZXAgbG93IDYgYml0cworKyAgICBz d2l0Y2ggKGxpci0+Yml0b3AoKSkgeworKyAgICAgIGNhc2UgSlNPcDo6THNoOgorKyAgICAgICAg bWFzbS5hc19zbGQoZGVzdCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAg Y2FzZSBKU09wOjpSc2g6CisrICAgICAgICBtYXNtLmFzX3NyYWQoZGVzdCwgbGhzLCBtYXNrZWQp OworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpVcnNoOgorKyAgICAgICAgbWFz bS5hc19zcmQoZGVzdCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVm YXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsKKysg ICAgfQorKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VXJzaEQoTFVyc2hE KiBpbnMpIHsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBj b25zdCBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5yaHMoKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVz dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysKKysgIFJlZ2lzdGVyIHRlbXAg PSBUb1JlZ2lzdGVyKGlucy0+dGVtcDAoKSk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkp IHsKKysgICAgaW50MzJfdCBzaGlmdCA9IFRvSW50MzIocmhzKSAmIDB4MWY7CisrICAgIGlmIChz aGlmdCkgeworKyAgICAgIG1hc20ucnNoaWZ0MzIoSW1tMzIoc2hpZnQpLCBsaHMsIHRlbXApOwor KyAgICB9IGVsc2UgeworKyAgICAgIG1hc20ubW92ZTMyKGxocywgdGVtcCk7CisrICAgIH0KKysg IH0gZWxzZSB7CisrICAgIG1hc20ubW92ZTMyKGxocywgdGVtcCk7CisrICAgIG1hc20ucnNoaWZ0 MzIoVG9SZWdpc3RlcihyaHMpLCB0ZW1wKTsKKysgIH0KKysKKysgIG1hc20uY29udmVydFVJbnQz MlRvRG91YmxlKHRlbXAsIGRlc3QpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBWaXNpdG9yczog RmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYworKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRN YXRoRChMTWF0aEQqIG1hdGgpIHsKKysgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lz dGVyKG1hdGgtPmxocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVy KG1hdGgtPnJocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3Rlciht YXRoLT5vdXRwdXQoKSk7CisrCisrICBzd2l0Y2ggKG1hdGgtPmpzb3AoKSkgeworKyAgICBjYXNl IEpTT3A6OkFkZDoKKysgICAgICBtYXNtLmFzX2ZhZGQoZGVzdCwgbGhzLCByaHMpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIEpTT3A6OlN1YjoKKysgICAgICBtYXNtLmFzX2ZzdWIoZGVzdCwg bGhzLCByaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6Ok11bDoKKysgICAgICBt YXNtLmFzX2ZtdWwoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpT T3A6OkRpdjoKKysgICAgICBtYXNtLmFzX2ZkaXYoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJy ZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBkb3VibGUg b3Bjb2RlIik7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNYXRoRihM TWF0aEYqIG1hdGgpIHsKKysgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKG1h dGgtPmxocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKG1hdGgt PnJocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5v dXRwdXQoKSk7CisrCisrICBzd2l0Y2ggKG1hdGgtPmpzb3AoKSkgeworKyAgICBjYXNlIEpTT3A6 OkFkZDoKKysgICAgICBtYXNtLmFzX2ZhZGRzKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBKU09wOjpTdWI6CisrICAgICAgbWFzbS5hc19mc3VicyhkZXN0LCBsaHMs IHJocyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgSlNPcDo6TXVsOgorKyAgICAgIG1hc20u YXNfZm11bHMoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6 OkRpdjoKKysgICAgICBtYXNtLmFzX2ZkaXZzKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVh azsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgZmxvYXQzMiBv cGNvZGUiKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1pbk1heEQo TE1pbk1heEQqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBmaXJzdCA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPmZpcnN0KCkpOworKyAgRmxvYXRSZWdpc3RlciBzZWNvbmQgPSBUb0Zsb2F0UmVnaXN0 ZXIoaW5zLT5zZWNvbmQoKSk7CisrICBtb3ppbGxhOjpEZWJ1Z09ubHk8RmxvYXRSZWdpc3Rlcj4g b3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKworKyAgTU9aX0FTU0VS VChmaXJzdCA9PSBvdXRwdXQpOworKyAgaWYgKGlucy0+bWlyKCktPmlzTWF4KCkpIHsKKysgICAg bWFzbS5tYXhEb3VibGUoc2Vjb25kLCBmaXJzdCwgLyogaGFuZGxlTmFOID0gKi8gdHJ1ZSk7Cisr ICB9IGVsc2UgeworKyAgICBtYXNtLm1pbkRvdWJsZShzZWNvbmQsIGZpcnN0LCAvKiBoYW5kbGVO YU4gPSAqLyB0cnVlKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1p bk1heEYoTE1pbk1heEYqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBmaXJzdCA9IFRvRmxvYXRS ZWdpc3RlcihpbnMtPmZpcnN0KCkpOworKyAgRmxvYXRSZWdpc3RlciBzZWNvbmQgPSBUb0Zsb2F0 UmVnaXN0ZXIoaW5zLT5zZWNvbmQoKSk7CisrICBtb3ppbGxhOjpEZWJ1Z09ubHk8RmxvYXRSZWdp c3Rlcj4gb3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKworKyAgTU9a X0FTU0VSVChmaXJzdCA9PSBvdXRwdXQpOworKyAgaWYgKGlucy0+bWlyKCktPmlzTWF4KCkpIHsK KysgICAgbWFzbS5tYXhGbG9hdDMyKHNlY29uZCwgZmlyc3QsIC8qIGhhbmRsZU5hTiA9ICovIHRy dWUpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5taW5GbG9hdDMyKHNlY29uZCwgZmlyc3QsIC8q IGhhbmRsZU5hTiA9ICovIHRydWUpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6 OnZpc2l0TmVnRChMTmVnRCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9h dFJlZ2lzdGVyKGlucy0+aW5wdXQoKSk7CisrICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxv YXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIG1hc20uYXNfZm5lZyhvdXRwdXQsIGlucHV0 KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE5lZ0YoTE5lZ0YqIGlucykgewor KyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpOwor KyAgRmxvYXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7 CisrICBtYXNtLmFzX2ZuZWcob3V0cHV0LCBpbnB1dCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRQb3dIYWxmRChMUG93SGFsZkQqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBp bnB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpOworKyAgRmxvYXRSZWdpc3RlciBv dXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrCisrICBMYWJlbCBkb25l LCBza2lwOworKworKyAgLy8gQ2hlY2sgZm9yIC1JbmZpbml0eS4KKysgIG1hc20ubG9hZENvbnN0 YW50RG91YmxlKE5lZ2F0aXZlSW5maW5pdHk8ZG91YmxlPigpLCBTY3JhdGNoRG91YmxlUmVnKTsK KysgIG1hc20uYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJl ZCwgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICBTY3JhdGNoRG91YmxlUmVnLCAmc2tpcCk7 CisrICBtYXNtLmxvYWRDb25zdGFudERvdWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46 OmluZmluaXR5KCksIG91dHB1dCk7CisrICBtYXNtLmp1bXAoJmRvbmUpOworKworKyAgbWFzbS5i aW5kKCZza2lwKTsKKysgIC8vIEFkZCAwLjAgdG8gaGFuZGxlIC0wLgorKyAgbWFzbS5sb2FkQ29u c3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIG1hc20uYXNfZmFkZChvdXRw dXQsIGlucHV0LCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIG1hc20uYXNfZnNxcnQob3V0cHV0LCBv dXRwdXQpOworKworKyAgbWFzbS5iaW5kKCZkb25lKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdE5vdEQoTE5vdEQqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRv RmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0 ZXIoaW5zLT5vdXRwdXQoKSk7CisrCisrICBtYXNtLmxvYWRDb25zdGFudERvdWJsZSgwLjAsIFNj cmF0Y2hEb3VibGVSZWcpOworKyAgbWFzbS5hc19mY21wdShpbnB1dCwgU2NyYXRjaERvdWJsZVJl Zyk7CisrICBtYXNtLm1hX2NtcF9zZXRfZGJsKGRlc3QsIEFzc2VtYmxlcjo6RG91YmxlRXF1YWxP clVub3JkZXJlZCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROb3RGKExOb3RG KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5p bnB1dCgpKTsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwor KworKyAgbWFzbS5sb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIFNjcmF0Y2hGbG9hdDMyUmVnKTsK KysgIG1hc20uYXNfZmNtcHUoaW5wdXQsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKKysgIG1hc20ubWFf Y21wX3NldF9kYmwoZGVzdCwgQXNzZW1ibGVyOjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkKTsKKyt9 CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6IEZQIGNvbXBhcmlzb25zIGFuZCBicmFuY2hl cworKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJlRChMQ29tcGFyZUQqIGNvbXAp IHsKKysgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPmxlZnQoKSk7 CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5yaWdodCgpKTsK KysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGNvbXAtPm91dHB1dCgpKTsKKysgIEFzc2Vt Ymxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQgPQorKyAgICAgIGNvbXAtPm1pcigpLT5qc29wKCkg PT0gSlNPcDo6U3RyaWN0RXEgPyBBc3NlbWJsZXI6OkRvdWJsZUVxdWFsCisrICAgICAgOiBjb21w LT5taXIoKS0+anNvcCgpID09IEpTT3A6OlN0cmljdE5lCisrICAgICAgICAgID8gQXNzZW1ibGVy OjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkCisrICAgICAgICAgIDogSlNPcFRvRG91YmxlQ29u ZGl0aW9uKGNvbXAtPm1pcigpLT5qc29wKCkpOworKworKyAgbWFzbS5hc19mY21wdShsaHMsIHJo cyk7CisrICBtYXNtLm1hX2NtcF9zZXRfZGJsKGRlc3QsIGNvbmQpOworK30KKysKKyt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0Q29tcGFyZUYoTENvbXBhcmVGKiBjb21wKSB7CisrICBGbG9hdFJl Z2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5sZWZ0KCkpOworKyAgRmxvYXRSZWdp c3RlciByaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29tcC0+cmlnaHQoKSk7CisrICBSZWdpc3RlciBk ZXN0ID0gVG9SZWdpc3Rlcihjb21wLT5vdXRwdXQoKSk7CisrICBBc3NlbWJsZXI6OkRvdWJsZUNv bmRpdGlvbiBjb25kID0KKysgICAgICBjb21wLT5taXIoKS0+anNvcCgpID09IEpTT3A6OlN0cmlj dEVxID8gQXNzZW1ibGVyOjpEb3VibGVFcXVhbAorKyAgICAgIDogY29tcC0+bWlyKCktPmpzb3Ao KSA9PSBKU09wOjpTdHJpY3ROZQorKyAgICAgICAgICA/IEFzc2VtYmxlcjo6RG91YmxlTm90RXF1 YWxPclVub3JkZXJlZAorKyAgICAgICAgICA6IEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21wLT5t aXIoKS0+anNvcCgpKTsKKysKKysgIG1hc20uYXNfZmNtcHUobGhzLCByaHMpOworKyAgbWFzbS5t YV9jbXBfc2V0X2RibChkZXN0LCBjb25kKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdENvbXBhcmVEQW5kQnJhbmNoKExDb21wYXJlREFuZEJyYW5jaCogY29tcCkgeworKyAgRmxv YXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29tcC0+bGVmdCgpKTsKKysgIEZsb2F0 UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPnJpZ2h0KCkpOworKworKyAgQXNz ZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCA9CisrICAgICAgSlNPcFRvRG91YmxlQ29uZGl0 aW9uKGNvbXAtPmNtcE1pcigpLT5qc29wKCkpOworKyAgTUJhc2ljQmxvY2sqIGlmVHJ1ZSA9IGNv bXAtPmlmVHJ1ZSgpOworKyAgTUJhc2ljQmxvY2sqIGlmRmFsc2UgPSBjb21wLT5pZkZhbHNlKCk7 CisrCisrICBpZiAoaXNOZXh0QmxvY2soaWZGYWxzZS0+bGlyKCkpKSB7CisrICAgIGJyYW5jaFRv QmxvY2soQXNzZW1ibGVyOjpEb3VibGVGbG9hdCwgY29uZCwgbGhzLCByaHMsIGlmVHJ1ZSk7Cisr ICB9IGVsc2UgeworKyAgICBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RG91YmxlRmxvYXQsIEFz c2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9uKGNvbmQpLCBsaHMsCisrICAgICAgICAgICAgICAgICAg cmhzLCBpZkZhbHNlKTsKKysgICAganVtcFRvQmxvY2soaWZUcnVlKTsKKysgIH0KKyt9CisrCisr dm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVGQW5kQnJhbmNoKExDb21wYXJlRkFuZEJy YW5jaCogY29tcCkgeworKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29t cC0+bGVmdCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAt PnJpZ2h0KCkpOworKworKyAgQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCA9CisrICAg ICAgSlNPcFRvRG91YmxlQ29uZGl0aW9uKGNvbXAtPmNtcE1pcigpLT5qc29wKCkpOworKyAgTUJh c2ljQmxvY2sqIGlmVHJ1ZSA9IGNvbXAtPmlmVHJ1ZSgpOworKyAgTUJhc2ljQmxvY2sqIGlmRmFs c2UgPSBjb21wLT5pZkZhbHNlKCk7CisrCisrICBpZiAoaXNOZXh0QmxvY2soaWZGYWxzZS0+bGly KCkpKSB7CisrICAgIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpTaW5nbGVGbG9hdCwgY29uZCwg bGhzLCByaHMsIGlmVHJ1ZSk7CisrICB9IGVsc2UgeworKyAgICBicmFuY2hUb0Jsb2NrKEFzc2Vt Ymxlcjo6U2luZ2xlRmxvYXQsIEFzc2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9uKGNvbmQpLCBsaHMs CisrICAgICAgICAgICAgICAgICAgcmhzLCBpZkZhbHNlKTsKKysgICAganVtcFRvQmxvY2soaWZU cnVlKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFRlc3REQW5kQnJh bmNoKExUZXN0REFuZEJyYW5jaCogdGVzdCkgeworKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRv RmxvYXRSZWdpc3Rlcih0ZXN0LT5pbnB1dCgpKTsKKysKKysgIE1CYXNpY0Jsb2NrKiBpZlRydWUg PSB0ZXN0LT5pZlRydWUoKTsKKysgIE1CYXNpY0Jsb2NrKiBpZkZhbHNlID0gdGVzdC0+aWZGYWxz ZSgpOworKworKyAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91YmxlUmVn KTsKKysKKysgIGlmIChpc05leHRCbG9jayhpZkZhbHNlLT5saXIoKSkpIHsKKysgICAgYnJhbmNo VG9CbG9jayhBc3NlbWJsZXI6OkRvdWJsZUZsb2F0LCBBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFs LCBpbnB1dCwKKysgICAgICAgICAgICAgICAgICBTY3JhdGNoRG91YmxlUmVnLCBpZlRydWUpOwor KyAgfSBlbHNlIHsKKysgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OkRvdWJsZUZsb2F0LCBB c3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQsCisrICAgICAgICAgICAgICAgICAgaW5w dXQsIFNjcmF0Y2hEb3VibGVSZWcsIGlmRmFsc2UpOworKyAgICBqdW1wVG9CbG9jayhpZlRydWUp OworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VGVzdEZBbmRCcmFuY2go TFRlc3RGQW5kQnJhbmNoKiB0ZXN0KSB7CisrICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9h dFJlZ2lzdGVyKHRlc3QtPmlucHV0KCkpOworKworKyAgTUJhc2ljQmxvY2sqIGlmVHJ1ZSA9IHRl c3QtPmlmVHJ1ZSgpOworKyAgTUJhc2ljQmxvY2sqIGlmRmFsc2UgPSB0ZXN0LT5pZkZhbHNlKCk7 CisrCisrICBtYXNtLmxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwgU2NyYXRjaEZsb2F0MzJSZWcp OworKworKyAgaWYgKGlzTmV4dEJsb2NrKGlmRmFsc2UtPmxpcigpKSkgeworKyAgICBicmFuY2hU b0Jsb2NrKEFzc2VtYmxlcjo6U2luZ2xlRmxvYXQsIEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWws IGlucHV0LAorKyAgICAgICAgICAgICAgICAgIFNjcmF0Y2hGbG9hdDMyUmVnLCBpZlRydWUpOwor KyAgfSBlbHNlIHsKKysgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OlNpbmdsZUZsb2F0LCBB c3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQsCisrICAgICAgICAgICAgICAgICAgaW5w dXQsIFNjcmF0Y2hGbG9hdDMyUmVnLCBpZkZhbHNlKTsKKysgICAganVtcFRvQmxvY2soaWZUcnVl KTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6IFRydW5jYXRpb24KKysK Kyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VHJ1bmNhdGVEVG9JbnQzMihMVHJ1bmNhdGVEVG9J bnQzMiogaW5zKSB7CisrICBlbWl0VHJ1bmNhdGVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGlucy0+ aW5wdXQoKSksIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSksCisrICAgICAgICAgICAgICAgICAg ICAgaW5zLT5taXIoKSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRUcnVuY2F0 ZUZUb0ludDMyKExUcnVuY2F0ZUZUb0ludDMyKiBpbnMpIHsKKysgIGVtaXRUcnVuY2F0ZUZsb2F0 MzIoVG9GbG9hdFJlZ2lzdGVyKGlucy0+aW5wdXQoKSksIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQo KSksCisrICAgICAgICAgICAgICAgICAgICAgIGlucy0+bWlyKCkpOworK30KKysKKysvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysvLyBWaXNpdG9yczogSW50NjQgLyBXYXNtIHR5cGUgY29udmVyc2lvbnMKKysKKyt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0RXh0ZW5kSW50MzJUb0ludDY0KExFeHRlbmRJbnQzMlRvSW50 NjQqIGxpcikgeworKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7 CisrICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKworKyAg aWYgKGxpci0+bWlyKCktPmlzVW5zaWduZWQoKSkgeworKyAgICBtYXNtLm1vdmUzMlRvNjRaZXJv RXh0ZW5kKGlucHV0LCBSZWdpc3RlcjY0KG91dHB1dCkpOworKyAgfSBlbHNlIHsKKysgICAgbWFz bS5hc19leHRzdyhvdXRwdXQsIGlucHV0KTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFdyYXBJbnQ2NFRvSW50MzIoTFdyYXBJbnQ2NFRvSW50MzIqIGxpcikgeworKyAg Y29uc3QgTEludDY0QWxsb2NhdGlvbiBpbnB1dCA9IGxpci0+aW5wdXQoKTsKKysgIFJlZ2lzdGVy IG91dHB1dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7CisrCisrICBpZiAobGlyLT5taXIo KS0+Ym90dG9tSGFsZigpKSB7CisrICAgIGlmIChpbnB1dC52YWx1ZSgpLmlzTWVtb3J5KCkpIHsK KysgICAgICBtYXNtLmxvYWQzMihUb0FkZHJlc3MoaW5wdXQpLCBvdXRwdXQpOworKyAgICB9IGVs c2UgeworKyAgICAgIG1hc20ubW92ZTY0VG8zMihUb1JlZ2lzdGVyNjQoaW5wdXQpLCBvdXRwdXQp OworKyAgICB9CisrICB9IGVsc2UgeworKyAgICAvLyBUaGUgb25seSBwcm9kdWNlciBvZiBgYm90 dG9tSGFsZj1mYWxzZWAgTVdyYXBJbnQ2NFRvSW50MzIgaW4gdGhlCisrICAgIC8vIGN1cnJlbnQg TUlSIHBpcGVsaW5lIGlzIHRoZSBHUFItcGFpciBhcmd1bWVudCBzcGxpdHRlciBpbgorKyAgICAv LyBXYXNtSW9uQ29tcGlsZS5jcHAsIHdoaWNoIGlzIGdhdGVkIG9uIEpTX0NPREVHRU5fUkVHSVNU RVJfUEFJUgorKyAgICAvLyAoMzItYml0IEFSTSBvbmx5KS4gUFBDNjQgaXMgNjQtYml0IGFuZCBu ZXZlciByZWFjaGVzIHRoaXMgcGF0aC4KKysgICAgLy8gTWF0Y2hlcyB0aGUgc2FtZSBkZWZlbnNp dmUgY3Jhc2ggaW4geDY0IC8gQVJNNjQgYmFja2VuZHMuCisrICAgIE1PWl9DUkFTSCgiTm90IGlt cGxlbWVudGVkLiIpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U2ln bkV4dGVuZEludDY0KExTaWduRXh0ZW5kSW50NjQqIGxpcikgeworKyAgUmVnaXN0ZXI2NCBpbnB1 dCA9IFRvUmVnaXN0ZXI2NChsaXItPmlucHV0KCkpOworKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBU b091dFJlZ2lzdGVyNjQobGlyKTsKKysKKysgIHN3aXRjaCAobGlyLT5taXIoKS0+bW9kZSgpKSB7 CisrICAgIGNhc2UgTVNpZ25FeHRlbmRJbnQ2NDo6Qnl0ZToKKysgICAgICBtYXNtLmFzX2V4dHNi KG91dHB1dC5yZWcsIGlucHV0LnJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTVNpZ25F eHRlbmRJbnQ2NDo6SGFsZjoKKysgICAgICBtYXNtLmFzX2V4dHNoKG91dHB1dC5yZWcsIGlucHV0 LnJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTVNpZ25FeHRlbmRJbnQ2NDo6V29yZDoK KysgICAgICBtYXNtLmFzX2V4dHN3KG91dHB1dC5yZWcsIGlucHV0LnJlZyk7CisrICAgICAgYnJl YWs7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtRXh0ZW5kVTMy SW5kZXgoTFdhc21FeHRlbmRVMzJJbmRleCogbGlyKSB7CisrICBSZWdpc3RlciBpbnB1dCA9IFRv UmVnaXN0ZXIobGlyLT5pbnB1dCgpKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIo bGlyLT5vdXRwdXQoKSk7CisrICBtYXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5kKGlucHV0LCBSZWdp c3RlcjY0KG91dHB1dCkpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVdy YXBVMzJJbmRleChMV2FzbVdyYXBVMzJJbmRleCogbGlyKSB7CisrICBSZWdpc3RlciBpbnB1dCA9 IFRvUmVnaXN0ZXIobGlyLT5pbnB1dCgpKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0 ZXIobGlyLT5vdXRwdXQoKSk7CisrICBtYXNtLm1vdmUzMihpbnB1dCwgb3V0cHV0KTsKKyt9Cisr Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21UcnVuY2F0ZVRvSW50MzIoTFdhc21UcnVu Y2F0ZVRvSW50MzIqIGxpcikgeworKyAgYXV0byBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXIt PmlucHV0KCkpOworKyAgYXV0byBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwor KworKyAgTVdhc21UcnVuY2F0ZVRvSW50MzIqIG1pciA9IGxpci0+bWlyKCk7CisrICBNSVJUeXBl IGZyb21UeXBlID0gbWlyLT5pbnB1dCgpLT50eXBlKCk7CisrCisrICBNT1pfQVNTRVJUKGZyb21U eXBlID09IE1JUlR5cGU6OkRvdWJsZSB8fCBmcm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsK KysKKysgIGF1dG8qIG9vbCA9IG5ldyAoYWxsb2MoKSkgT3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hl Y2sobWlyLCBpbnB1dCwgb3V0cHV0KTsKKysgIGFkZE91dE9mTGluZUNvZGUob29sLCBtaXIpOwor KworKyAgTGFiZWwqIG9vbEVudHJ5ID0gb29sLT5lbnRyeSgpOworKyAgaWYgKG1pci0+aXNVbnNp Z25lZCgpKSB7CisrICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAg ICBtYXNtLndhc21UcnVuY2F0ZURvdWJsZVRvVUludDMyKGlucHV0LCBvdXRwdXQsIG1pci0+aXNT YXR1cmF0aW5nKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xF bnRyeSk7CisrICAgIH0gZWxzZSBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMikgewor KyAgICAgIG1hc20ud2FzbVRydW5jYXRlRmxvYXQzMlRvVUludDMyKGlucHV0LCBvdXRwdXQsIG1p ci0+aXNTYXR1cmF0aW5nKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb29sRW50cnkpOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3Rl ZCB0eXBlIik7CisrICAgIH0KKysKKysgICAgbWFzbS5iaW5kKG9vbC0+cmVqb2luKCkpOworKyAg ICByZXR1cm47CisrICB9CisrCisrICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7 CisrICAgIG1hc20ud2FzbVRydW5jYXRlRG91YmxlVG9JbnQzMihpbnB1dCwgb3V0cHV0LCBtaXIt PmlzU2F0dXJhdGluZygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29s RW50cnkpOworKyAgfSBlbHNlIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKSB7Cisr ICAgIG1hc20ud2FzbVRydW5jYXRlRmxvYXQzMlRvSW50MzIoaW5wdXQsIG91dHB1dCwgbWlyLT5p c1NhdHVyYXRpbmcoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xF bnRyeSk7CisrICB9IGVsc2UgeworKyAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgdHlwZSIpOwor KyAgfQorKworKyAgbWFzbS5iaW5kKG9vbC0+cmVqb2luKCkpOworK30KKysKKyt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0V2FzbVRydW5jYXRlVG9JbnQ2NChMV2FzbVRydW5jYXRlVG9JbnQ2NCog bGlyKSB7CisrICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGxpci0+aW5w dXQoKSk7CisrICBSZWdpc3RlcjY0IG91dHB1dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOworKwor KyAgTVdhc21UcnVuY2F0ZVRvSW50NjQqIG1pciA9IGxpci0+bWlyKCk7CisrICBNSVJUeXBlIGZy b21UeXBlID0gbWlyLT5pbnB1dCgpLT50eXBlKCk7CisrCisrICBNT1pfQVNTRVJUKGZyb21UeXBl ID09IE1JUlR5cGU6OkRvdWJsZSB8fCBmcm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKKysK KysgIGF1dG8qIG9vbCA9IG5ldyAoYWxsb2MoKSkgT3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2so bWlyLCBpbnB1dCwgb3V0cHV0KTsKKysgIGFkZE91dE9mTGluZUNvZGUob29sLCBtaXIpOworKwor KyAgTGFiZWwqIG9vbEVudHJ5ID0gb29sLT5lbnRyeSgpOworKyAgTGFiZWwqIG9vbFJlam9pbiA9 IG9vbC0+cmVqb2luKCk7CisrICBib29sIGlzU2F0dXJhdGluZyA9IG1pci0+aXNTYXR1cmF0aW5n KCk7CisrCisrICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgIGlmICht aXItPmlzVW5zaWduZWQoKSkgeworKyAgICAgIG1hc20ud2FzbVRydW5jYXRlRG91YmxlVG9VSW50 NjQoaW5wdXQsIG91dHB1dCwgaXNTYXR1cmF0aW5nLCBvb2xFbnRyeSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9vbFJlam9pbiwgSW52YWxpZEZsb2F0UmVnKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBtYXNtLndhc21UcnVuY2F0ZURvdWJsZVRvSW50NjQoaW5wdXQs IG91dHB1dCwgaXNTYXR1cmF0aW5nLCBvb2xFbnRyeSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb29sUmVqb2luLCBJbnZhbGlkRmxvYXRSZWcpOworKyAgICB9CisrICB9 IGVsc2UgeworKyAgICBpZiAobWlyLT5pc1Vuc2lnbmVkKCkpIHsKKysgICAgICBtYXNtLndhc21U cnVuY2F0ZUZsb2F0MzJUb1VJbnQ2NChpbnB1dCwgb3V0cHV0LCBpc1NhdHVyYXRpbmcsIG9vbEVu dHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbFJlam9pbiwg SW52YWxpZEZsb2F0UmVnKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBtYXNtLndhc21UcnVuY2F0 ZUZsb2F0MzJUb0ludDY0KGlucHV0LCBvdXRwdXQsIGlzU2F0dXJhdGluZywgb29sRW50cnksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xSZWpvaW4sIEludmFsaWRG bG9hdFJlZyk7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dEludDY0VG9GbG9hdGluZ1BvaW50KExJbnQ2NFRvRmxvYXRpbmdQb2ludCogbGlyKSB7CisrICBS ZWdpc3RlcjY0IGlucHV0ID0gVG9SZWdpc3RlcjY0KGxpci0+aW5wdXQoKSk7CisrICBGbG9hdFJl Z2lzdGVyIG91dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysgIE1JUlR5 cGUgb3V0cHV0VHlwZSA9IGxpci0+bWlyKCktPnR5cGUoKTsKKysKKysgIGlmIChvdXRwdXRUeXBl ID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICBpZiAobGlyLT5taXIoKS0+aXNVbnNpZ25lZCgp KSB7CisrICAgICAgbWFzbS5jb252ZXJ0VUludDY0VG9Eb3VibGUoaW5wdXQsIG91dHB1dCwgUmVn aXN0ZXI6OkludmFsaWQoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5jb252ZXJ0SW50 NjRUb0RvdWJsZShpbnB1dCwgb3V0cHV0KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgaWYg KGxpci0+bWlyKCktPmlzVW5zaWduZWQoKSkgeworKyAgICAgIG1hc20uY29udmVydFVJbnQ2NFRv RmxvYXQzMihpbnB1dCwgb3V0cHV0LCBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKKysgICAgfSBlbHNl IHsKKysgICAgICBtYXNtLmNvbnZlcnRJbnQ2NFRvRmxvYXQzMihpbnB1dCwgb3V0cHV0KTsKKysg ICAgfQorKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVVpbnQzMlRv RG91YmxlKExXYXNtVWludDMyVG9Eb3VibGUqIGxpcikgeworKyAgUmVnaXN0ZXIgaW5wdXQgPSBU b1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7CisrICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxv YXRSZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysgIG1hc20uY29udmVydFVJbnQzMlRvRG91Ymxl KGlucHV0LCBvdXRwdXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVVp bnQzMlRvRmxvYXQzMihMV2FzbVVpbnQzMlRvRmxvYXQzMiogbGlyKSB7CisrICBSZWdpc3RlciBp bnB1dCA9IFRvUmVnaXN0ZXIobGlyLT5pbnB1dCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0 ID0gVG9GbG9hdFJlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKyAgbWFzbS5jb252ZXJ0VUludDMy VG9GbG9hdDMyKGlucHV0LCBvdXRwdXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0V2FzbUJ1aWx0aW5UcnVuY2F0ZURUb0ludDMyKAorKyAgICBMV2FzbUJ1aWx0aW5UcnVuY2F0 ZURUb0ludDMyKiBsaXIpIHsKKysgIGVtaXRUcnVuY2F0ZURvdWJsZShUb0Zsb2F0UmVnaXN0ZXIo bGlyLT5nZXRPcGVyYW5kKDApKSwKKysgICAgICAgICAgICAgICAgICAgICBUb1JlZ2lzdGVyKGxp ci0+Z2V0RGVmKDApKSwgbGlyLT5taXIoKSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXRXYXNtQnVpbHRpblRydW5jYXRlRlRvSW50MzIoCisrICAgIExXYXNtQnVpbHRpblRydW5j YXRlRlRvSW50MzIqIGxpcikgeworKyAgZW1pdFRydW5jYXRlRmxvYXQzMihUb0Zsb2F0UmVnaXN0 ZXIobGlyLT5nZXRPcGVyYW5kKDApKSwKKysgICAgICAgICAgICAgICAgICAgICAgVG9SZWdpc3Rl cihsaXItPmdldERlZigwKSksIGxpci0+bWlyKCkpOworK30KKysKKysvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBW aXNpdG9yczogV2FzbSBsb2FkL3N0b3JlCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9p ZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRXYXNtTG9hZChUKiBsaXIpIHsKKysgIGNvbnN0IE1X YXNtTG9hZCogbWlyID0gbGlyLT5taXIoKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKG1hc20pOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysg IFJlZ2lzdGVyIG1lbW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGxpci0+bWVtb3J5QmFzZSgpKTsKKysg IFJlZ2lzdGVyIHB0ciA9IFRvUmVnaXN0ZXIobGlyLT5wdHIoKSk7CisrICBSZWdpc3RlciBwdHJT Y3JhdGNoID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKKysKKysgIGlm IChtaXItPmJhc2UoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKSB7CisrICAgIG1hc20ubW92 ZTMyVG82NFplcm9FeHRlbmQocHRyLCBSZWdpc3RlcjY0KHNjcmF0Y2gpKTsKKysgICAgcHRyID0g c2NyYXRjaDsKKysgICAgcHRyU2NyYXRjaCA9IHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyA/IHNj cmF0Y2ggOiBJbnZhbGlkUmVnOworKyAgfQorKworKyAgbWFzbS53YXNtTG9hZChtaXItPmFjY2Vz cygpLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0Y2gsCisrICAgICAgICAgICAgICAgIFRvQW55 UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K Kyt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6ZW1pdFdhc21TdG9yZShUKiBsaXIpIHsKKysgIGNv bnN0IE1XYXNtU3RvcmUqIG1pciA9IGxpci0+bWlyKCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 CisrCisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2Uo KSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOworKyAgUmVnaXN0 ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7Cisr CisrICBpZiAobWlyLT5iYXNlKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgeworKyAgICBt YXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5kKHB0ciwgUmVnaXN0ZXI2NChzY3JhdGNoKSk7CisrICAg IHB0ciA9IHNjcmF0Y2g7CisrICAgIHB0clNjcmF0Y2ggPSBwdHJTY3JhdGNoICE9IEludmFsaWRS ZWcgPyBzY3JhdGNoIDogSW52YWxpZFJlZzsKKysgIH0KKysKKysgIG1hc20ud2FzbVN0b3JlKG1p ci0+YWNjZXNzKCksIFRvQW55UmVnaXN0ZXIobGlyLT52YWx1ZSgpKSwgbWVtb3J5QmFzZSwgcHRy LAorKyAgICAgICAgICAgICAgICAgcHRyU2NyYXRjaCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRXYXNtTG9hZChMV2FzbUxvYWQqIGxpcikgeyBlbWl0V2FzbUxvYWQobGlyKTsg fQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU3RvcmUoTFdhc21TdG9yZSogbGly KSB7IGVtaXRXYXNtU3RvcmUobGlyKTsgfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtTG9hZEk2NChMV2FzbUxvYWRJNjQqIGxpcikgeworKyAgY29uc3QgTVdhc21Mb2FkKiBtaXIg PSBsaXItPm1pcigpOworKworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGly LT5tZW1vcnlCYXNlKCkpOworKyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJlZ2lzdGVy T3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7CisrCisrICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lz dGVyKGxpci0+cHRyKCkpOworKyAgaWYgKG1pci0+YmFzZSgpLT50eXBlKCkgPT0gTUlSVHlwZTo6 SW50MzIpIHsKKysgICAgbWFzbS5tb3ZlMzJaZXJvRXh0ZW5kVG9QdHIocHRyUmVnLCBwdHJSZWcp OworKyAgfQorKworKyAgbWFzbS53YXNtTG9hZEk2NChtaXItPmFjY2VzcygpLCBtZW1vcnlCYXNl LCBwdHJSZWcsIHB0clNjcmF0Y2gsCisrICAgICAgICAgICAgICAgICAgIFRvT3V0UmVnaXN0ZXI2 NChsaXIpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZUk2NChM V2FzbVN0b3JlSTY0KiBsaXIpIHsKKysgIGNvbnN0IE1XYXNtU3RvcmUqIG1pciA9IGxpci0+bWly KCk7CisrCisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJh c2UoKSk7CisrICBSZWdpc3RlciBwdHJTY3JhdGNoID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQo bGlyLT50ZW1wMCgpKTsKKysKKysgIFJlZ2lzdGVyIHB0clJlZyA9IFRvUmVnaXN0ZXIobGlyLT5w dHIoKSk7CisrICBpZiAobWlyLT5iYXNlKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgewor KyAgICBtYXNtLm1vdmUzMlplcm9FeHRlbmRUb1B0cihwdHJSZWcsIHB0clJlZyk7CisrICB9Cisr CisrICBtYXNtLndhc21TdG9yZUk2NChtaXItPmFjY2VzcygpLCBUb1JlZ2lzdGVyNjQobGlyLT52 YWx1ZSgpKSwgbWVtb3J5QmFzZSwKKysgICAgICAgICAgICAgICAgICAgIHB0clJlZywgcHRyU2Ny YXRjaCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBc21KU0xvYWRIZWFwKExB c21KU0xvYWRIZWFwKiBpbnMpIHsKKysgIGNvbnN0IE1Bc21KU0xvYWRIZWFwKiBtaXIgPSBpbnMt Pm1pcigpOworKyAgTU9aX0FTU0VSVCghbWlyLT5oYXNNZW1vcnlCYXNlKCkpOworKworKyAgY29u c3QgTEFsbG9jYXRpb24qIHB0ciA9IGlucy0+cHRyKCk7CisrICBjb25zdCBMRGVmaW5pdGlvbiog b3V0cHV0ID0gaW5zLT5vdXRwdXQoKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uKiBib3VuZHNDaGVj a0xpbWl0ID0gaW5zLT5ib3VuZHNDaGVja0xpbWl0KCk7CisrCisrICBSZWdpc3RlciBwdHJSZWcg PSBUb1JlZ2lzdGVyKHB0cik7CisrICBTY2FsYXI6OlR5cGUgYWNjZXNzVHlwZSA9IG1pci0+YWNj ZXNzVHlwZSgpOworKyAgYm9vbCBpc0Zsb2F0ID0gYWNjZXNzVHlwZSA9PSBTY2FsYXI6OkZsb2F0 MzIgfHwgYWNjZXNzVHlwZSA9PSBTY2FsYXI6OkZsb2F0NjQ7CisrICBMYWJlbCBkb25lOworKwor KyAgaWYgKG1pci0+bmVlZHNCb3VuZHNDaGVjaygpKSB7CisrICAgIExhYmVsIGJvdW5kc0NoZWNr UGFzc2VkOworKyAgICBSZWdpc3RlciBib3VuZHNDaGVja0xpbWl0UmVnID0gVG9SZWdpc3Rlcihi b3VuZHNDaGVja0xpbWl0KTsKKysgICAgbWFzbS53YXNtQm91bmRzQ2hlY2szMihBc3NlbWJsZXI6 OkJlbG93LCBwdHJSZWcsIGJvdW5kc0NoZWNrTGltaXRSZWcsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmJvdW5kc0NoZWNrUGFzc2VkKTsKKysgICAgaWYgKGlzRmxvYXQpIHsKKysgICAg ICBpZiAoYWNjZXNzVHlwZSA9PSBTY2FsYXI6OkZsb2F0MzIpIHsKKysgICAgICAgIG1hc20ubG9h ZENvbnN0YW50RmxvYXQzMihHZW5lcmljTmFOKCksIFRvRmxvYXRSZWdpc3RlcihvdXRwdXQpKTsK KysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoR2VuZXJp Y05hTigpLCBUb0Zsb2F0UmVnaXN0ZXIob3V0cHV0KSk7CisrICAgICAgfQorKyAgICB9IGVsc2Ug eworKyAgICAgIG1hc20ubW92ZVB0cihJbW1Xb3JkKDApLCBUb1JlZ2lzdGVyKG91dHB1dCkpOwor KyAgICB9CisrICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgIG1hc20uYmluZCgmYm91bmRzQ2hl Y2tQYXNzZWQpOworKyAgfQorKworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFz bSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbWFzbS5tb3Zl MzJUbzY0WmVyb0V4dGVuZChwdHJSZWcsIFJlZ2lzdGVyNjQoc2NyYXRjaCkpOworKworKyAgc3dp dGNoIChhY2Nlc3NUeXBlKSB7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQ4OgorKyAgICAgIG1hc20u YXNfbGJ6eChUb1JlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAgICAgIG1h c20uYXNfZXh0c2IoVG9SZWdpc3RlcihvdXRwdXQpLCBUb1JlZ2lzdGVyKG91dHB1dCkpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6VWludDg6CisrICAgICAgbWFzbS5hc19sYnp4 KFRvUmVnaXN0ZXIob3V0cHV0KSwgSGVhcFJlZywgc2NyYXRjaCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoKKysgICAgICBtYXNtLmFzX2xoYXgoVG9SZWdpc3Rlcihv dXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2Fs YXI6OlVpbnQxNjoKKysgICAgICBtYXNtLmFzX2xoengoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFw UmVnLCBzY3JhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkludDMyOgor KyAgICAgIG1hc20uYXNfbHd6eChUb1JlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gp OworKyAgICAgIG1hc20uYXNfZXh0c3coVG9SZWdpc3RlcihvdXRwdXQpLCBUb1JlZ2lzdGVyKG91 dHB1dCkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6VWludDMyOgorKyAgICAg IG1hc20uYXNfbHd6eChUb1JlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQ2NDoKKysgICAgICBtYXNtLmFzX2xm ZHgoVG9GbG9hdFJlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQzMjoKKysgICAgICBtYXNtLmFzX2xmc3goVG9G bG9hdFJlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAgICAgIGJyZWFrOwor KyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7 CisrICB9CisrCisrICBpZiAoZG9uZS51c2VkKCkpIHsKKysgICAgbWFzbS5iaW5kKCZkb25lKTsK KysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEFzbUpTU3RvcmVIZWFwKExB c21KU1N0b3JlSGVhcCogaW5zKSB7CisrICBjb25zdCBNQXNtSlNTdG9yZUhlYXAqIG1pciA9IGlu cy0+bWlyKCk7CisrICBNT1pfQVNTRVJUKCFtaXItPmhhc01lbW9yeUJhc2UoKSk7CisrCisrICBj b25zdCBMQWxsb2NhdGlvbiogdmFsdWUgPSBpbnMtPnZhbHVlKCk7CisrICBjb25zdCBMQWxsb2Nh dGlvbiogcHRyID0gaW5zLT5wdHIoKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uKiBib3VuZHNDaGVj a0xpbWl0ID0gaW5zLT5ib3VuZHNDaGVja0xpbWl0KCk7CisrCisrICBSZWdpc3RlciBwdHJSZWcg PSBUb1JlZ2lzdGVyKHB0cik7CisrCisrICBMYWJlbCBkb25lOworKyAgaWYgKG1pci0+bmVlZHNC b3VuZHNDaGVjaygpKSB7CisrICAgIFJlZ2lzdGVyIGJvdW5kc0NoZWNrTGltaXRSZWcgPSBUb1Jl Z2lzdGVyKGJvdW5kc0NoZWNrTGltaXQpOworKyAgICBtYXNtLndhc21Cb3VuZHNDaGVjazMyKEFz c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwdHJSZWcsIGJvdW5kc0NoZWNrTGltaXRSZWcsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmRvbmUpOworKyAgfQorKworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChwdHJSZWcsIFJlZ2lzdGVyNjQo c2NyYXRjaCkpOworKworKyAgc3dpdGNoIChtaXItPmFjY2Vzc1R5cGUoKSkgeworKyAgICBjYXNl IFNjYWxhcjo6SW50ODoKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgorKyAgICAgIG1hc20uYXNf c3RieChUb1JlZ2lzdGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQxNjoKKysg ICAgICBtYXNtLmFzX3N0aHgoVG9SZWdpc3Rlcih2YWx1ZSksIEhlYXBSZWcsIHNjcmF0Y2gpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50MzI6CisrICAgIGNhc2UgU2NhbGFy OjpVaW50MzI6CisrICAgICAgbWFzbS5hc19zdHd4KFRvUmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVn LCBzY3JhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkZsb2F0NjQ6Cisr ICAgICAgbWFzbS5hc19zdGZkeChUb0Zsb2F0UmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3Jh dGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkZsb2F0MzI6CisrICAgICAg bWFzbS5hc19zdGZzeChUb0Zsb2F0UmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsK KysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0 ZWQgYXJyYXkgdHlwZSIpOworKyAgfQorKworKyAgaWYgKGRvbmUudXNlZCgpKSB7CisrICAgIG1h c20uYmluZCgmZG9uZSk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtU3RhY2tBcmcoTFdhc21TdGFja0FyZyogaW5zKSB7CisrICBjb25zdCBNV2FzbVN0YWNrQXJn KiBtaXIgPSBpbnMtPm1pcigpOworKyAgaWYgKGlucy0+YXJnKCktPmlzQ29uc3RhbnQoKSkgewor KyAgICBtYXNtLnN0b3JlUHRyKEltbVdvcmQoVG9JbnQzMihpbnMtPmFyZygpKSksCisrICAgICAg ICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOworKyAg fSBlbHNlIHsKKysgICAgaWYgKGlucy0+YXJnKCktPmlzR2VuZXJhbFJlZygpKSB7CisrICAgICAg bWFzbS5zdG9yZVB0cihUb1JlZ2lzdGVyKGlucy0+YXJnKCkpLAorKyAgICAgICAgICAgICAgICAg ICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOworKyAgICB9IGVsc2Ug aWYgKG1pci0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICAgIG1h c20uc3RvcmVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGlucy0+YXJnKCkpLAorKyAgICAgICAgICAg ICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOworKyNp ZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICAgIH0gZWxzZSBpZiAobWlyLT5pbnB1dCgpLT50eXBl KCkgPT0gTUlSVHlwZTo6U2ltZDEyOCkgeworKyAgICAgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1k MTI4KFRvRmxvYXRSZWdpc3RlcihpbnMtPmFyZygpKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzKFN0YWNrUG9pbnRlciwgbWlyLT5zcE9mZnNldCgpKSk7CisrI2Vu ZGlmCisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5zdG9yZUZsb2F0MzIoVG9GbG9hdFJlZ2lz dGVyKGlucy0+YXJnKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQ b2ludGVyLCBtaXItPnNwT2Zmc2V0KCkpKTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVN0YWNrQXJnSTY0KExXYXNtU3RhY2tBcmdJNjQqIGlucykg eworKyAgY29uc3QgTVdhc21TdGFja0FyZyogbWlyID0gaW5zLT5taXIoKTsKKysgIEFkZHJlc3Mg ZHN0KFN0YWNrUG9pbnRlciwgbWlyLT5zcE9mZnNldCgpKTsKKysgIGlmIChJc0NvbnN0YW50KGlu cy0+YXJnKCkpKSB7CisrICAgIG1hc20uc3RvcmU2NChJbW02NChUb0ludDY0KGlucy0+YXJnKCkp KSwgZHN0KTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uc3RvcmU2NChUb1JlZ2lzdGVyNjQoaW5z LT5hcmcoKSksIGRzdCk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtU2VsZWN0KExXYXNtU2VsZWN0KiBpbnMpIHsKKysgIE1JUlR5cGUgbWlyVHlwZSA9IGlucy0+ bWlyKCktPnR5cGUoKTsKKysKKysgIFJlZ2lzdGVyIGNvbmQgPSBUb1JlZ2lzdGVyKGlucy0+Y29u ZEV4cHIoKSk7CisrICBjb25zdCBMQWxsb2NhdGlvbiogZmFsc2VFeHByID0gaW5zLT5mYWxzZUV4 cHIoKTsKKysKKysgIGlmIChtaXJUeXBlID09IE1JUlR5cGU6OkludDMyIHx8IG1pclR5cGUgPT0g TUlSVHlwZTo6V2FzbUFueVJlZikgeworKyAgICBSZWdpc3RlciBvdXQgPSBUb1JlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpOworKyAgICBNT1pfQVNTRVJUKFRvUmVnaXN0ZXIoaW5zLT50cnVlRXhwcigp KSA9PSBvdXQsCisrICAgICAgICAgICAgICAgInRydWUgZXhwciBpbnB1dCBpcyByZXVzZWQgZm9y IG91dHB1dCIpOworKyAgICBpZiAoZmFsc2VFeHByLT5pc0dlbmVyYWxSZWcoKSkgeworKyAgICAg IG1hc20ubW92ZUlmWmVybyhvdXQsIFRvUmVnaXN0ZXIoZmFsc2VFeHByKSwgY29uZCk7CisrICAg IH0gZWxzZSB7CisrICAgICAgbWFzbS5jbXAzMkxvYWQzMihBc3NlbWJsZXI6Olplcm8sIGNvbmQs IGNvbmQsIFRvQWRkcmVzcyhmYWxzZUV4cHIpLCBvdXQpOworKyAgICB9CisrICAgIHJldHVybjsK KysgIH0KKysKKysgIEZsb2F0UmVnaXN0ZXIgb3V0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpOworKyAgTU9aX0FTU0VSVChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT50cnVlRXhwcigpKSA9 PSBvdXQsCisrICAgICAgICAgICAgICJ0cnVlIGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRw dXQiKTsKKysKKysgIGlmIChmYWxzZUV4cHItPmlzRmxvYXRSZWcoKSkgeworKyAgICBMYWJlbCBk b25lOworKyAgICAvLyBUaGUgc2VsZWN0IGNvbmRpdGlvbiBpcyBhIDMyLWJpdCB2YWx1ZTsgdGVz dCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdhcmJhZ2UKKysgICAgLy8gZG9lcyBub3QgbWFrZSBhIHpl cm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXplcm8uCisrICAgIG1hc20uYnJhbmNoVGVzdDMyKEFz c2VtYmxlcjo6Tm9uWmVybywgY29uZCwgY29uZCwgJmRvbmUpOworKyAgICBpZiAobWlyVHlwZSA9 PSBNSVJUeXBlOjpGbG9hdDMyKSB7CisrICAgICAgbWFzbS5tb3ZlRmxvYXQzMihUb0Zsb2F0UmVn aXN0ZXIoZmFsc2VFeHByKSwgb3V0KTsKKysgICAgfSBlbHNlIGlmIChtaXJUeXBlID09IE1JUlR5 cGU6OkRvdWJsZSkgeworKyAgICAgIG1hc20ubW92ZURvdWJsZShUb0Zsb2F0UmVnaXN0ZXIoZmFs c2VFeHByKSwgb3V0KTsKKysgICAgfSBlbHNlIGlmIChtaXJUeXBlID09IE1JUlR5cGU6OlNpbWQx MjgpIHsKKysgICAgICBtYXNtLm1vdmVTaW1kMTI4KFRvRmxvYXRSZWdpc3RlcihmYWxzZUV4cHIp LCBvdXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9DUkFTSCgidW5oYW5kbGVkIHR5cGUg aW4gdmlzaXRXYXNtU2VsZWN0ISIpOworKyAgICB9CisrICAgIG1hc20uYmluZCgmZG9uZSk7Cisr ICB9IGVsc2UgeworKyAgICBMYWJlbCBkb25lOworKyAgICAvLyBUaGUgc2VsZWN0IGNvbmRpdGlv biBpcyBhIDMyLWJpdCB2YWx1ZTsgdGVzdCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdhcmJhZ2UKKysg ICAgLy8gZG9lcyBub3QgbWFrZSBhIHplcm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXplcm8uCisr ICAgIG1hc20uYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgY29uZCwgY29uZCwgJmRv bmUpOworKworKyAgICBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKSB7CisrICAgICAg bWFzbS5sb2FkRmxvYXQzMihUb0FkZHJlc3MoZmFsc2VFeHByKSwgb3V0KTsKKysgICAgfSBlbHNl IGlmIChtaXJUeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICAgIG1hc20ubG9hZERvdWJs ZShUb0FkZHJlc3MoZmFsc2VFeHByKSwgb3V0KTsKKysgICAgfSBlbHNlIGlmIChtaXJUeXBlID09 IE1JUlR5cGU6OlNpbWQxMjgpIHsKKysgICAgICBtYXNtLmxvYWRVbmFsaWduZWRTaW1kMTI4KFRv QWRkcmVzcyhmYWxzZUV4cHIpLCBvdXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9DUkFT SCgidW5oYW5kbGVkIHR5cGUgaW4gdmlzaXRXYXNtU2VsZWN0ISIpOworKyAgICB9CisrCisrICAg IG1hc20uYmluZCgmZG9uZSk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXRXYXNtU2VsZWN0STY0KExXYXNtU2VsZWN0STY0KiBsaXIpIHsKKysgIE1PWl9BU1NFUlQobGly LT5taXIoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKKysKKysgIFJlZ2lzdGVyIGNvbmQg PSBUb1JlZ2lzdGVyKGxpci0+Y29uZEV4cHIoKSk7CisrICBMSW50NjRBbGxvY2F0aW9uIGZhbHNl RXhwciA9IGxpci0+ZmFsc2VFeHByKCk7CisrCisrICBSZWdpc3RlcjY0IG91dCA9IFRvT3V0UmVn aXN0ZXI2NChsaXIpOworKyAgTU9aX0FTU0VSVChUb1JlZ2lzdGVyNjQobGlyLT50cnVlRXhwcigp KSA9PSBvdXQsCisrICAgICAgICAgICAgICJ0cnVlIGV4cHIgaXMgcmV1c2VkIGZvciBpbnB1dCIp OworKworKyAgaWYgKGZhbHNlRXhwci52YWx1ZSgpLmlzR2VuZXJhbFJlZygpKSB7CisrICAgIG1h c20ubW92ZUlmWmVybyhvdXQucmVnLCBUb1JlZ2lzdGVyKGZhbHNlRXhwci52YWx1ZSgpKSwgY29u ZCk7CisrICB9IGVsc2UgeworKyAgICBMYWJlbCBkb25lOworKyAgICAvLyBUaGUgc2VsZWN0IGNv bmRpdGlvbiBpcyBhIDMyLWJpdCB2YWx1ZTsgdGVzdCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdhcmJh Z2UKKysgICAgLy8gZG9lcyBub3QgbWFrZSBhIHplcm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXpl cm8uCisrICAgIG1hc20uYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgY29uZCwgY29u ZCwgJmRvbmUpOworKyAgICBtYXNtLmxvYWRQdHIoVG9BZGRyZXNzKGZhbHNlRXhwci52YWx1ZSgp KSwgb3V0LnJlZyk7CisrICAgIG1hc20uYmluZCgmZG9uZSk7CisrICB9CisrfQorKworK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQ29tcGFyZUFuZFNlbGVjdChMV2FzbUNvbXBhcmVBbmRT ZWxlY3QqIGlucykgeworKyAgTUNvbXBhcmU6OkNvbXBhcmVUeXBlIGNvbXBUeSA9IGlucy0+Y29t cGFyZVR5cGUoKTsKKysgIE1JUlR5cGUgaW5zVHkgPSBpbnMtPm1pcigpLT50eXBlKCk7CisrICBj b25zdCBib29sIGNtcElzMzIgPSBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfSW50MzIgfHwK KysgICAgICAgICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50 MzI7CisrICBjb25zdCBib29sIGNtcElzNjQgPSBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVf SW50NjQgfHwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29t cGFyZV9VSW50NjQ7CisrICBjb25zdCBib29sIHNlbElzSW50ID0gaW5zVHkgPT0gTUlSVHlwZTo6 SW50MzIgfHwgaW5zVHkgPT0gTUlSVHlwZTo6SW50NjQ7CisrCisrICBNT1pfUkVMRUFTRV9BU1NF UlQoCisrICAgICAgKGNtcElzMzIgfHwgY21wSXM2NCkgJiYgc2VsSXNJbnQsCisrICAgICAgIkNv ZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVBbmRTZWxlY3Q6IHVuZXhwZWN0ZWQgdHlwZXMi KTsKKysKKysgIFJlZ2lzdGVyIHRydWVFeHByQW5kRGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRw dXQoKSk7CisrICBNT1pfQVNTRVJUKFRvUmVnaXN0ZXIoaW5zLT5pZlRydWVFeHByKCkpID09IHRy dWVFeHByQW5kRGVzdCwKKysgICAgICAgICAgICAgInRydWUgZXhwciBpbnB1dCBpcyByZXVzZWQg Zm9yIG91dHB1dCIpOworKworKyAgQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCA9CisrICAgICAg QXNzZW1ibGVyOjpJbnZlcnRDb25kaXRpb24oSlNPcFRvQ29uZGl0aW9uKGNvbXBUeSwgaW5zLT5q c29wKCkpKTsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5sZWZ0RXhwcigpKTsK KysgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5yaWdodEV4cHIoKSk7CisrICBSZWdp c3RlciBmYWxzZUV4cHIgPSBUb1JlZ2lzdGVyKGlucy0+aWZGYWxzZUV4cHIoKSk7CisrCisrICAv LyBpc2VsIG9wZXJhdGVzIG9uIHRoZSB3aG9sZSA2NC1iaXQgR1BSIHJlZ2FyZGxlc3Mgb2YgY29t cGFyZSB3aWR0aDsgb25seQorKyAgLy8gdGhlIGNvbXBhcmUgaW5zdHJ1Y3Rpb24gZGlmZmVycyAo Y21wdy9jbXBsdyB2cyBjbXBkL2NtcGxkKS4KKysgIGlmIChjbXBJczMyKSB7CisrICAgIG1hc20u Y21wMzJNb3ZlMzIoY29uZCwgbGhzLCByaHMsIGZhbHNlRXhwciwgdHJ1ZUV4cHJBbmREZXN0KTsK KysgIH0gZWxzZSB7CisrICAgIG1hc20uY21wUHRyTW92ZVB0cihjb25kLCBsaHMsIHJocywgZmFs c2VFeHByLCB0cnVlRXhwckFuZERlc3QpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0V2FzbUFkZE9mZnNldChMV2FzbUFkZE9mZnNldCogbGlyKSB7CisrICBNV2FzbUFk ZE9mZnNldCogbWlyID0gbGlyLT5taXIoKTsKKysgIFJlZ2lzdGVyIGJhc2UgPSBUb1JlZ2lzdGVy KGxpci0+YmFzZSgpKTsKKysgIFJlZ2lzdGVyIG91dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQo KSk7CisrCisrICBMYWJlbCBvazsKKysgIG1hc20ubWFfYWRkMzJUZXN0Q2FycnkoQXNzZW1ibGVy OjpDYXJyeUNsZWFyLCBvdXQsIGJhc2UsIEltbTMyKG1pci0+b2Zmc2V0KCkpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAmb2spOworKyAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpPdXRP ZkJvdW5kcywgbWlyLT50cmFwU2l0ZURlc2MoKSk7CisrICBtYXNtLmJpbmQoJm9rKTsKKyt9Cisr Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21BZGRPZmZzZXQ2NChMV2FzbUFkZE9mZnNl dDY0KiBsaXIpIHsKKysgIE1XYXNtQWRkT2Zmc2V0KiBtaXIgPSBsaXItPm1pcigpOworKyAgUmVn aXN0ZXI2NCBiYXNlID0gVG9SZWdpc3RlcjY0KGxpci0+YmFzZSgpKTsKKysgIFJlZ2lzdGVyNjQg b3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7CisrCisrICBMYWJlbCBvazsKKysgIG1hc20ubWFf YWRkUHRyVGVzdENhcnJ5KEFzc2VtYmxlcjo6Q2FycnlDbGVhciwgb3V0LnJlZywgYmFzZS5yZWcs CisrICAgICAgICAgICAgICAgICAgICAgICAgICBJbW1Xb3JkKG1pci0+b2Zmc2V0KCkpLCAmb2sp OworKyAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpPdXRPZkJvdW5kcywgbWlyLT50cmFwU2l0 ZURlc2MoKSk7CisrICBtYXNtLmJpbmQoJm9rKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlz aXRvcnM6IEVmZmVjdGl2ZSBBZGRyZXNzCisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEVm ZmVjdGl2ZUFkZHJlc3MyKExFZmZlY3RpdmVBZGRyZXNzMiogaW5zKSB7CisrICBjb25zdCBNRWZm ZWN0aXZlQWRkcmVzczIqIG1pciA9IGlucy0+bWlyKCk7CisrICBSZWdpc3RlciBvdXRwdXQgPSBU b1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKworKyAgLy8gRUEgPSBpbmRleCAqIHNjYWxlICsg ZGlzcGxhY2VtZW50IChubyBiYXNlIHJlZ2lzdGVyKQorKyAgbWFzbS5tb3ZlUHRyKEltbVdvcmQo MCksIG91dHB1dCk7CisrICBCYXNlSW5kZXggYWRkcihvdXRwdXQsIFRvUmVnaXN0ZXIoaW5zLT5p bmRleCgpKSwgbWlyLT5zY2FsZSgpLAorKyAgICAgICAgICAgICAgICAgbWlyLT5kaXNwbGFjZW1l bnQoKSk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGFkZHIsIG91dHB1dCk7Cisr ICAvLyBTaWduLWV4dGVuZCB0byAzMi1iaXQKKysgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRw dXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0RWZmZWN0aXZlQWRkcmVzczMo TEVmZmVjdGl2ZUFkZHJlc3MzKiBpbnMpIHsKKysgIGNvbnN0IE1FZmZlY3RpdmVBZGRyZXNzMyog bWlyID0gaW5zLT5taXIoKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSk7CisrCisrICBCYXNlSW5kZXggYWRkcihUb1JlZ2lzdGVyKGlucy0+YmFzZSgpKSwg VG9SZWdpc3RlcihpbnMtPmluZGV4KCkpLAorKyAgICAgICAgICAgICAgICAgbWlyLT5zY2FsZSgp LCBtaXItPmRpc3BsYWNlbWVudCgpKTsKKysgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3Mo YWRkciwgb3V0cHV0KTsKKysgIC8vIFNpZ24tZXh0ZW5kIHRvIDMyLWJpdAorKyAgbWFzbS5hc19l eHRzdyhvdXRwdXQsIG91dHB1dCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtTXVsSTY0V2lkZUhJNjQoTFdhc21NdWxJNjRXaWRlSEk2NCogaW5zKSB7CisrICBSZWdpc3Rl ciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdp c3RlcihpbnMtPnJocygpKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSk7CisrCisrICBpZiAoaW5zLT5pc1NpZ25lZCgpKSB7CisrICAgIG1hc20uYXNfbXVs aGQob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX211bGhkdShv dXRwdXQsIGxocywgcmhzKTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6 IFR5cGVkIEFycmF5IEF0b21pY3MKKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Q29tcGFy ZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoCisrICAgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFy cmF5RWxlbWVudCogbGlyKSB7CisrICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGly LT5lbGVtZW50cygpKTsKKysgIEFueVJlZ2lzdGVyIG91dHB1dCA9IFRvQW55UmVnaXN0ZXIobGly LT5vdXRwdXQoKSk7CisrICBSZWdpc3RlciBvdXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFs aWQobGlyLT50ZW1wMCgpKTsKKysKKysgIFJlZ2lzdGVyIG9sZHZhbCA9IFRvUmVnaXN0ZXIobGly LT5vbGR2YWwoKSk7CisrICBSZWdpc3RlciBuZXd2YWwgPSBUb1JlZ2lzdGVyKGxpci0+bmV3dmFs KCkpOworKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGly LT50ZW1wMSgpKTsKKysgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52 YWxpZChsaXItPnRlbXAyKCkpOworKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rl ck9ySW52YWxpZChsaXItPnRlbXAzKCkpOworKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxp ci0+bWlyKCktPmFycmF5VHlwZSgpOworKworKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNl SW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKKysKKysgIGRlc3QubWF0 Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKKysgICAgbWFzbS5jb21wYXJlRXhjaGFuZ2VKUyhh cnJheVR5cGUsIFN5bmNocm9uaXphdGlvbjo6RnVsbCgpLCBkZXN0LCBvbGR2YWwsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmV3dmFsLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tU ZW1wLCBvdXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisrICB9 KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0b21pY0V4Y2hhbmdlVHlwZWRB cnJheUVsZW1lbnQoCisrICAgIExBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBsaXIp IHsKKysgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOwor KyAgQW55UmVnaXN0ZXIgb3V0cHV0ID0gVG9BbnlSZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysg IFJlZ2lzdGVyIG91dFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAwKCkp OworKworKyAgUmVnaXN0ZXIgdmFsdWUgPSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUoKSk7CisrICBS ZWdpc3RlciB2YWx1ZVRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAxKCkp OworKyAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+ dGVtcDIoKSk7CisrICBSZWdpc3RlciBtYXNrVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlk KGxpci0+dGVtcDMoKSk7CisrICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+ YXJyYXlUeXBlKCk7CisrCisrICBhdXRvIGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVt ZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOworKworKyAgZGVzdC5tYXRjaChbJl0oY29u c3QgYXV0byYgZGVzdCkgeworKyAgICBtYXNtLmF0b21pY0V4Y2hhbmdlSlMoYXJyYXlUeXBlLCBT eW5jaHJvbml6YXRpb246OkZ1bGwoKSwgZGVzdCwgdmFsdWUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRUZW1wLCBvdXRwdXQp OworKyAgfSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNUeXBlZEFy cmF5RWxlbWVudEJpbm9wKAorKyAgICBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCogbGly KSB7CisrICBNT1pfQVNTRVJUKCFsaXItPm1pcigpLT5pc0ZvckVmZmVjdCgpKTsKKysKKysgIEFu eVJlZ2lzdGVyIG91dHB1dCA9IFRvQW55UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7CisrICBSZWdp c3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVy IG91dFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAwKCkpOworKyAgUmVn aXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsK KysgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRl bXAyKCkpOworKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChs aXItPnRlbXAzKCkpOworKyAgUmVnaXN0ZXIgdmFsdWUgPSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUo KSk7CisrICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7 CisrCisrICBhdXRvIG1lbSA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmlu ZGV4KCksIGFycmF5VHlwZSk7CisrCisrICBtZW0ubWF0Y2goWyZdKGNvbnN0IGF1dG8mIG1lbSkg eworKyAgICBtYXNtLmF0b21pY0ZldGNoT3BKUyhhcnJheVR5cGUsIFN5bmNocm9uaXphdGlvbjo6 RnVsbCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXItPm1pcigpLT5vcGVyYXRpb24o KSwgdmFsdWUsIG1lbSwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz ZXRUZW1wLCBtYXNrVGVtcCwgb3V0VGVtcCwgb3V0cHV0KTsKKysgIH0pOworK30KKysKKyt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVj dCgKKysgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3QqIGxpcikgewor KyAgTU9aX0FTU0VSVChsaXItPm1pcigpLT5pc0ZvckVmZmVjdCgpKTsKKysKKysgIFJlZ2lzdGVy IGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOworKyAgUmVnaXN0ZXIgdmFs dWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKKysgIFJlZ2lz dGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAxKCkpOwor KyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAy KCkpOworKyAgUmVnaXN0ZXIgdmFsdWUgPSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUoKSk7CisrICBT Y2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7CisrCisrICBh dXRvIG1lbSA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFy cmF5VHlwZSk7CisrCisrICBtZW0ubWF0Y2goWyZdKGNvbnN0IGF1dG8mIG1lbSkgeworKyAgICBt YXNtLmF0b21pY0VmZmVjdE9wSlMoYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgIGxpci0+bWlyKCktPm9wZXJhdGlvbigpLCB2YWx1 ZSwgbWVtLCB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1w LCBtYXNrVGVtcCk7CisrICB9KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENv bXBhcmVFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50NjQoCisrICAgIExDb21wYXJlRXhjaGFuZ2VU eXBlZEFycmF5RWxlbWVudDY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdp c3RlcihsaXItPmVsZW1lbnRzKCkpOworKyAgUmVnaXN0ZXI2NCBvbGR2YWwgPSBUb1JlZ2lzdGVy NjQobGlyLT5vbGR2YWwoKSk7CisrICBSZWdpc3RlcjY0IG5ld3ZhbCA9IFRvUmVnaXN0ZXI2NChs aXItPm5ld3ZhbCgpKTsKKysgIFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7 CisrICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Cisr CisrICBhdXRvIGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRl eCgpLCBhcnJheVR5cGUpOworKworKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkg eworKyAgICBtYXNtLmNvbXBhcmVFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbjo6RnVsbCgpLCBk ZXN0LCBvbGR2YWwsIG5ld3ZhbCwgb3V0KTsKKysgIH0pOworK30KKysKKyt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0QXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KAorKyAgICBMQXRv bWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGVsZW1l bnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOworKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9 IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOworKyAgUmVnaXN0ZXI2NCBvdXQgPSBUb091dFJl Z2lzdGVyNjQobGlyKTsKKysgIFNjYWxhcjo6VHlwZSBhcnJheVR5cGUgPSBsaXItPm1pcigpLT5h cnJheVR5cGUoKTsKKysKKysgIGF1dG8gZGVzdCA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1l bnRzLCBsaXItPmluZGV4KCksIGFycmF5VHlwZSk7CisrCisrICBkZXN0Lm1hdGNoKFsmXShjb25z dCBhdXRvJiBkZXN0KSB7CisrICAgIG1hc20uYXRvbWljRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRp b246OkZ1bGwoKSwgZGVzdCwgdmFsdWUsIG91dCk7CisrICB9KTsKKyt9CisrCisrdm9pZCBDb2Rl R2VuZXJhdG9yOjp2aXNpdEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3A2NCgKKysgICAgTEF0 b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3A2NCogbGlyKSB7CisrICBNT1pfQVNTRVJUKGxpci0+ bWlyKCktPmhhc1VzZXMoKSk7CisrCisrICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIo bGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGly LT52YWx1ZSgpKTsKKysgIFJlZ2lzdGVyNjQgdGVtcCA9IFRvUmVnaXN0ZXI2NChsaXItPnRlbXAw KCkpOworKyAgUmVnaXN0ZXI2NCBvdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKKysKKysgIFNj YWxhcjo6VHlwZSBhcnJheVR5cGUgPSBsaXItPm1pcigpLT5hcnJheVR5cGUoKTsKKysgIEF0b21p Y09wIGF0b21pY09wID0gbGlyLT5taXIoKS0+b3BlcmF0aW9uKCk7CisrCisrICBhdXRvIGRlc3Qg PSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUp OworKworKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkgeworKyAgICBtYXNtLmF0 b21pY0ZldGNoT3A2NChTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwgYXRvbWljT3AsIHZhbHVlLCBk ZXN0LCB0ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXQpOworKyAgfSk7CisrfQor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9w Rm9yRWZmZWN0NjQoCisrICAgIExBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZmZWN0 NjQqIGxpcikgeworKyAgTU9aX0FTU0VSVCghbGlyLT5taXIoKS0+aGFzVXNlcygpKTsKKysKKysg IFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOworKyAgUmVn aXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOworKyAgUmVnaXN0ZXI2 NCB0ZW1wID0gVG9SZWdpc3RlcjY0KGxpci0+dGVtcDAoKSk7CisrCisrICBTY2FsYXI6OlR5cGUg YXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7CisrICBBdG9taWNPcCBhdG9taWNP cCA9IGxpci0+bWlyKCktPm9wZXJhdGlvbigpOworKworKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNz T3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKKysKKysgIGRl c3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKKysgICAgbWFzbS5hdG9taWNFZmZlY3RP cDY0KFN5bmNocm9uaXphdGlvbjo6RnVsbCgpLCBhdG9taWNPcCwgdmFsdWUsIGRlc3QsIHRlbXAp OworKyAgfSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNMb2FkNjQo TEF0b21pY0xvYWQ2NCogbGlyKSB7CisrICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIo bGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxp cik7CisrICBTY2FsYXI6OlR5cGUgc3RvcmFnZVR5cGUgPSBsaXItPm1pcigpLT5zdG9yYWdlVHlw ZSgpOworKworKyAgYXV0byBzb3VyY2UgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywg bGlyLT5pbmRleCgpLCBzdG9yYWdlVHlwZSk7CisrCisrICBhdXRvIHN5bmMgPSBTeW5jaHJvbml6 YXRpb246OkxvYWQoKTsKKysgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysgIHNv dXJjZS5tYXRjaChbJl0oY29uc3QgYXV0byYgc291cmNlKSB7IG1hc20ubG9hZDY0KHNvdXJjZSwg b3V0KTsgfSk7CisrICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKKyt9CisrCisrdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0b21pY1N0b3JlNjQoTEF0b21pY1N0b3JlNjQqIGxpcikg eworKyAgUmVnaXN0ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7Cisr ICBSZWdpc3RlcjY0IHZhbHVlID0gVG9SZWdpc3RlcjY0KGxpci0+dmFsdWUoKSk7CisrICBTY2Fs YXI6OlR5cGUgd3JpdGVUeXBlID0gbGlyLT5taXIoKS0+d3JpdGVUeXBlKCk7CisrCisrICBhdXRv IGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCB3cml0 ZVR5cGUpOworKworKyAgYXV0byBzeW5jID0gU3luY2hyb25pemF0aW9uOjpTdG9yZSgpOworKyAg bWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOworKyAgZGVzdC5tYXRjaChbJl0oY29uc3Qg YXV0byYgZGVzdCkgeyBtYXNtLnN0b3JlNjQodmFsdWUsIGRlc3QpOyB9KTsKKysgIG1hc20ubWVt b3J5QmFycmllckFmdGVyKHN5bmMpOworK30KKysKKysvLyBXYXNtIEF0b21pY3MKKyt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAoCisrICAgIExXYXNtQ29t cGFyZUV4Y2hhbmdlSGVhcCogaW5zKSB7CisrICBNV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAqIG1p ciA9IGlucy0+bWlyKCk7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMt Pm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGlucy0+cHRy KCkpOworKyAgQmFzZUluZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1lc09uZSwg bWlyLT5hY2Nlc3MoKS5vZmZzZXQzMigpKTsKKysKKysgIFJlZ2lzdGVyIG9sZHZhbCA9IFRvUmVn aXN0ZXIoaW5zLT5vbGRWYWx1ZSgpKTsKKysgIFJlZ2lzdGVyIG5ld3ZhbCA9IFRvUmVnaXN0ZXIo aW5zLT5uZXdWYWx1ZSgpKTsKKysgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVy T3JJbnZhbGlkKGlucy0+dGVtcDAoKSk7CisrICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1w UmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMSgpKTsKKysgIFJlZ2lzdGVyIG1hc2tUZW1wID0g VG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMigpKTsKKysKKysgIG1hc20ud2FzbUNv bXBhcmVFeGNoYW5nZShtaXItPmFjY2VzcygpLCBzcmNBZGRyLCBvbGR2YWwsIG5ld3ZhbCwgdmFs dWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1w LCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdFdhc21BdG9taWNFeGNoYW5nZUhlYXAoTFdhc21BdG9taWNFeGNoYW5nZUhlYXAqIGlu cykgeworKyAgTVdhc21BdG9taWNFeGNoYW5nZUhlYXAqIG1pciA9IGlucy0+bWlyKCk7CisrICBS ZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7CisrICBS ZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOworKyAgUmVnaXN0ZXIgdmFs dWUgPSBUb1JlZ2lzdGVyKGlucy0+dmFsdWUoKSk7CisrICBCYXNlSW5kZXggc3JjQWRkcihtZW1v cnlCYXNlLCBwdHJSZWcsIFRpbWVzT25lLCBtaXItPmFjY2VzcygpLm9mZnNldDMyKCkpOworKwor KyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1w MCgpKTsKKysgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChp bnMtPnRlbXAxKCkpOworKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52 YWxpZChpbnMtPnRlbXAyKCkpOworKworKyAgbWFzbS53YXNtQXRvbWljRXhjaGFuZ2UobWlyLT5h Y2Nlc3MoKSwgc3JjQWRkciwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsK Kyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNCaW5vcEhlYXAoTFdh c21BdG9taWNCaW5vcEhlYXAqIGlucykgeworKyAgTU9aX0FTU0VSVChpbnMtPm1pcigpLT5oYXNV c2VzKCkpOworKworKyAgTVdhc21BdG9taWNCaW5vcEhlYXAqIG1pciA9IGlucy0+bWlyKCk7Cisr ICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7Cisr ICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOworKyAgUmVnaXN0ZXIg dmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKKysgIFJl Z2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAxKCkp OworKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRl bXAyKCkpOworKworKyAgQmFzZUluZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1l c09uZSwgbWlyLT5hY2Nlc3MoKS5vZmZzZXQzMigpKTsKKysKKysgIG1hc20ud2FzbUF0b21pY0Zl dGNoT3AobWlyLT5hY2Nlc3MoKSwgbWlyLT5vcGVyYXRpb24oKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgVG9SZWdpc3RlcihpbnMtPnZhbHVlKCkpLCBzcmNBZGRyLCB2YWx1ZVRlbXAsCisr ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBUb1JlZ2lzdGVy KGlucy0+b3V0cHV0KCkpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21B dG9taWNCaW5vcEhlYXBGb3JFZmZlY3QoCisrICAgIExXYXNtQXRvbWljQmlub3BIZWFwRm9yRWZm ZWN0KiBpbnMpIHsKKysgIE1PWl9BU1NFUlQoIWlucy0+bWlyKCktPmhhc1VzZXMoKSk7CisrCisr ICBNV2FzbUF0b21pY0Jpbm9wSGVhcCogbWlyID0gaW5zLT5taXIoKTsKKysgIFJlZ2lzdGVyIG1l bW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgpKTsKKysgIFJlZ2lzdGVyIHB0 clJlZyA9IFRvUmVnaXN0ZXIoaW5zLT5wdHIoKSk7CisrICBSZWdpc3RlciB2YWx1ZVRlbXAgPSBU b1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAwKCkpOworKyAgUmVnaXN0ZXIgb2Zmc2V0 VGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDEoKSk7CisrICBSZWdpc3Rl ciBtYXNrVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDIoKSk7CisrCisr ICBCYXNlSW5kZXggc3JjQWRkcihtZW1vcnlCYXNlLCBwdHJSZWcsIFRpbWVzT25lLCBtaXItPmFj Y2VzcygpLm9mZnNldDMyKCkpOworKyAgbWFzbS53YXNtQXRvbWljRWZmZWN0T3AobWlyLT5hY2Nl c3MoKSwgbWlyLT5vcGVyYXRpb24oKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFRvUmVn aXN0ZXIoaW5zLT52YWx1ZSgpKSwgc3JjQWRkciwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXApOworK30KKysKKyt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVFeGNoYW5nZUk2NChMV2FzbUNvbXBhcmVFeGNoYW5nZUk2 NCogbGlyKSB7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9y eUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOworKyAg UmVnaXN0ZXI2NCBvbGRWYWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPm9sZFZhbHVlKCkpOworKyAg UmVnaXN0ZXI2NCBuZXdWYWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPm5ld1ZhbHVlKCkpOworKyAg UmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKKysgIHVpbnQzMl90IG9m ZnNldCA9IGxpci0+bWlyKCktPmFjY2VzcygpLm9mZnNldDMyKCk7CisrCisrICBCYXNlSW5kZXgg YWRkcihtZW1vcnlCYXNlLCBwdHIsIFRpbWVzT25lLCBvZmZzZXQpOworKyAgbWFzbS53YXNtQ29t cGFyZUV4Y2hhbmdlNjQobGlyLT5taXIoKS0+YWNjZXNzKCksIGFkZHIsIG9sZFZhbHVlLCBuZXdW YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisrfQorKworK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljRXhjaGFuZ2VJNjQoTFdhc21BdG9taWNF eGNoYW5nZUk2NCogbGlyKSB7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3Rlcihs aXItPm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRy KCkpOworKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOwor KyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKKysgIHVpbnQzMl90 IG9mZnNldCA9IGxpci0+bWlyKCktPmFjY2VzcygpLm9mZnNldDMyKCk7CisrCisrICBCYXNlSW5k ZXggYWRkcihtZW1vcnlCYXNlLCBwdHIsIFRpbWVzT25lLCBvZmZzZXQpOworKyAgbWFzbS53YXNt QXRvbWljRXhjaGFuZ2U2NChsaXItPm1pcigpLT5hY2Nlc3MoKSwgYWRkciwgdmFsdWUsIG91dHB1 dCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljQmlub3BJNjQo TFdhc21BdG9taWNCaW5vcEk2NCogbGlyKSB7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9S ZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVy KGxpci0+cHRyKCkpOworKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZh bHVlKCkpOworKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKKysg IFJlZ2lzdGVyNjQgdGVtcCA9IFRvUmVnaXN0ZXI2NChsaXItPnRlbXAwKCkpOworKyAgdWludDMy X3Qgb2Zmc2V0ID0gbGlyLT5taXIoKS0+YWNjZXNzKCkub2Zmc2V0MzIoKTsKKysKKysgIEJhc2VJ bmRleCBhZGRyKG1lbW9yeUJhc2UsIHB0ciwgVGltZXNPbmUsIG9mZnNldCk7CisrCisrICBtYXNt Lndhc21BdG9taWNGZXRjaE9wNjQobGlyLT5taXIoKS0+YWNjZXNzKCksIGxpci0+bWlyKCktPm9w ZXJhdGlvbigpLCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCB0ZW1w LCBvdXRwdXQpOworK30KKysKKysvLyBTSU1EIGNvZGUgZ2VuZXJhdG9ycy4KKyt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0U2ltZDEyOChMU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVy IGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBtYXNtLmxvYWRDb25z dGFudFNpbWQxMjgoaW5zLT5zaW1kMTI4KCksIGRlc3QpOworK30KKyt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0V2FzbVRlcm5hcnlTaW1kMTI4KExXYXNtVGVybmFyeVNpbWQxMjgqIGlucykgewor KyAgRmxvYXRSZWdpc3RlciB2MCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnYwKCkpOworKyAgRmxv YXRSZWdpc3RlciB2MSA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnYxKCkpOworKyAgRmxvYXRSZWdp c3RlciB2MiA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnYyKCkpOworKyAgRmxvYXRSZWdpc3RlciBk ZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgc3dpdGNoIChpbnMtPnNp bWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4Qml0c2VsZWN0OgorKyAgICAg IC8vIGJpdHNlbGVjdCh2MCwgdjEsIHYyKTogcmVzdWx0ID0gKHYwICYgdjIpIHwgKHYxICYgfnYy KQorKyAgICAgIC8vIHh4c2VsOiBYQz0w4oaSWEEsIFhDPTHihpJYQiDihpIgKFhBICYgflhDKSB8 IChYQiAmIFhDKQorKyAgICAgIC8vIE5lZWQgWEE9djEsIFhCPXYwLCBYQz12Mi4KKysgICAgICBt YXNtLmFzX3h4c2VsKGRlc3QsIHYxLCB2MCwgdjIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZSZWxheGVkTGFuZVNlbGVjdDoKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4UmVsYXhlZExhbmVTZWxlY3Q6CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MzJ4NFJlbGF4ZWRMYW5lU2VsZWN0OgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJSZWxh eGVkTGFuZVNlbGVjdDoKKysgICAgICAvLyByZWxheGVkIGxhbmVTZWxlY3QodjAsIHYxLCBtYXNr PXYyKTogc2FtZSBhcyBiaXRzZWxlY3QKKysgICAgICBtYXNtLmFzX3h4c2VsKGRlc3QsIHYxLCB2 MCwgdjIpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBMb3dlcmluZyB1c2VzIGRlZmluZVJldXNl SW5wdXQgb24gVjJJbmRleCBmb3IgdGVybmFyeSBvcHMg4oCUIHRoZQorKyAgICAvLyBhbGxvY2F0 b3IgaXMgcmVxdWlyZWQgdG8gcGxhY2UgYGRlc3RgIGluIHYyJ3Mgc2xvdC4gQXNzZXJ0IHRoYXQK KysgICAgLy8gaGVyZTsgdGhlIEZNQS9kb3QgaGVscGVycyB3cml0ZSB0aGVpciByZXN1bHQgdGhy b3VnaCB2MiBpbi1wbGFjZSwKKysgICAgLy8gc28gZGVzdCA9PSB2MiBtYWtlcyB0aGUgdHJhaWxp bmcgbW92ZVNpbWQxMjggdW5uZWNlc3NhcnkuCisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4 NFJlbGF4ZWREb3RJOHgxNkk3eDE2QWRkUzoKKysgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIp OworKyAgICAgIG1hc20uZG90SW50OHgxNkludDd4MTZUaGVuQWRkKHYwLCB2MSwgdjIsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9GbG9hdFJlZ2lzdGVyKGlucy0+dGVt cDAoKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRSZWxh eGVkTWFkZDoKKysgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIpOworKyAgICAgIG1hc20uZm1h RmxvYXQzMng0KHYwLCB2MSwgdjIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6RjY0eDJSZWxheGVkTWFkZDoKKysgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIpOwor KyAgICAgIG1hc20uZm1hRmxvYXQ2NHgyKHYwLCB2MSwgdjIpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRSZWxheGVkTm1hZGQ6CisrICAgICAgTU9aX0FTU0VS VChkZXN0ID09IHYyKTsKKysgICAgICBtYXNtLmZubWFGbG9hdDMyeDQodjAsIHYxLCB2Mik7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlJlbGF4ZWRObWFkZDoK KysgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIpOworKyAgICAgIG1hc20uZm5tYUZsb2F0NjR4 Mih2MCwgdjEsIHYyKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pf Q1JBU0goIlBQQzY0OiBOWUkgU0lNRCB0ZXJuYXJ5IG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRXYXNtQmluYXJ5U2ltZDEyOChMV2FzbUJpbmFyeVNpbWQxMjgqIGlu cykgeworKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSk7 CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnJocygpKTsKKysg IEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysg IHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkgeworKyAgICAvLyBCaXR3aXNlCisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpWMTI4QW5kOgorKyAgICAgIG1hc20uYml0d2lzZUFuZFNpbWQxMjgobGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOE9y OgorKyAgICAgIG1hc20uYml0d2lzZU9yU2ltZDEyOChsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4WG9yOgorKyAgICAgIG1hc20uYml0 d2lzZVhvclNpbWQxMjgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6VjEyOEFuZE5vdDoKKysgICAgICBtYXNtLmJpdHdpc2VBbmROb3RTaW1k MTI4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gSW50ZWdlciBhZGQK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWRkOgorKyAgICAgIG1hc20uYWRkSW50OHgx NihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJMTZ4OEFkZDoKKysgICAgICBtYXNtLmFkZEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRBZGQ6CisrICAgICAgbWFz bS5hZGRJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyQWRkOgorKyAgICAgIG1hc20uYWRkSW50NjR4MihsaHMsIHJocywg ZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIEludGVnZXIgc3ViCisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJOHgxNlN1YjoKKysgICAgICBtYXNtLnN1YkludDh4MTYobGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWI6Cisr ICAgICAgbWFzbS5zdWJJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U3ViOgorKyAgICAgIG1hc20uc3ViSW50MzJ4NChs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ NjR4MlN1YjoKKysgICAgICBtYXNtLnN1YkludDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICAvLyBTYXR1cmF0aW5nIGFkZAorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STh4MTZBZGRTYXRTOgorKyAgICAgIG1hc20uYWRkU2F0SW50OHgxNihsaHMsIHJocywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFkZFNhdFU6Cisr ICAgICAgbWFzbS51bnNpZ25lZEFkZFNhdEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhBZGRTYXRTOgorKyAgICAgIG1h c20uYWRkU2F0SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFkZFNhdFU6CisrICAgICAgbWFzbS51bnNpZ25lZEFkZFNh dEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBTYXR1cmF0 aW5nIHN1YgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTdWJTYXRTOgorKyAgICAgIG1h c20uc3ViU2F0SW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN1YlNhdFU6CisrICAgICAgbWFzbS51bnNpZ25lZFN1YlNh dEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhTdWJTYXRTOgorKyAgICAgIG1hc20uc3ViU2F0SW50MTZ4OChsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFN1 YlNhdFU6CisrICAgICAgbWFzbS51bnNpZ25lZFN1YlNhdEludDE2eDgobGhzLCByaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICAvLyBJbnRlZ2VyIG11bHRpcGx5CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMTZ4OE11bDoKKysgICAgICBtYXNtLm11bEludDE2eDgobGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNdWw6Cisr ICAgICAgbWFzbS5tdWxJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgLy8gSW50ZWdlciBtaW4vbWF4IHNpZ25lZAorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4 MTZNaW5TOgorKyAgICAgIG1hc20ubWluSW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk1heFM6CisrICAgICAgbWFzbS5t YXhJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkkxNng4TWluUzoKKysgICAgICBtYXNtLm1pbkludDE2eDgobGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhNYXhTOgor KyAgICAgIG1hc20ubWF4SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE1pblM6CisrICAgICAgbWFzbS5taW5JbnQzMng0 KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkzMng0TWF4UzoKKysgICAgICBtYXNtLm1heEludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICAvLyBJbnRlZ2VyIG1pbi9tYXggdW5zaWduZWQKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk4eDE2TWluVToKKysgICAgICBtYXNtLnVuc2lnbmVkTWluSW50OHgxNihs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ OHgxNk1heFU6CisrICAgICAgbWFzbS51bnNpZ25lZE1heEludDh4MTYobGhzLCByaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhNaW5VOgorKyAg ICAgIG1hc20udW5zaWduZWRNaW5JbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TWF4VToKKysgICAgICBtYXNtLnVuc2ln bmVkTWF4SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMzJ4NE1pblU6CisrICAgICAgbWFzbS51bnNpZ25lZE1pbkludDMyeDQo bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRNYXhVOgorKyAgICAgIG1hc20udW5zaWduZWRNYXhJbnQzMng0KGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgLy8gQXZlcmFnZSB1bnNpZ25lZAorKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STh4MTZBdmdyVToKKysgICAgICBtYXNtLnVuc2lnbmVkQXZlcmFnZUludDh4 MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STE2eDhBdmdyVToKKysgICAgICBtYXNtLnVuc2lnbmVkQXZlcmFnZUludDE2eDgobGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBRMTUgbXVsdGlwbHkKKysgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkkxNng4UTE1TXVsclNhdFM6CisrICAgICAgbWFzbS5xMTVNdWxyU2F0 SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIEludGVnZXIg Y29tcGFyZQorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZFcToKKysgICAgICBtYXNtLmNv bXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TmU6CisrICAgICAgbWFzbS5jb21w YXJlSW50OHgxNihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkx0UzoKKysgICAgICBtYXNtLmNv bXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2R3RTOgorKyAgICAgIG1hc20u Y29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZMZVM6CisrICAgICAg bWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZHZVM6 CisrICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVh bCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STh4MTZMdFU6CisrICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkJlbG93 LCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJOHgxNkd0VToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6QWJvdmUs IGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2TGVVOgorKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpCZWxvd09y RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2R2VVOgorKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpB Ym92ZU9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4RXE6CisrICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJs ZXI6OkVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMTZ4OE5lOgorKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVy OjpOb3RFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STE2eDhMdFM6CisrICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJs ZXI6Okxlc3NUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMTZ4OEd0UzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2Vt Ymxlcjo6R3JlYXRlclRoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TGVTOgorKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgo QXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4R2VTOgorKyAgICAgIG1hc20uY29tcGFy ZUludDE2eDgoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4THRVOgorKyAgICAg IG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpCZWxvdywgbGhzLCByaHMsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhHdFU6CisrICAgICAg bWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkFib3ZlLCBsaHMsIHJocywgZGVzdCk7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OExlVToKKysgICAgICBt YXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBsaHMsIHJocywgZGVz dCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEdlVToKKysg ICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEVx OgorKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpFcXVhbCwgbGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDROZToK KysgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgcmhz LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0THRT OgorKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpMZXNzVGhhbiwgbGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRH dFM6CisrICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MzJ4NExlUzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6TGVzc1RoYW5P ckVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMzJ4NEdlUzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6 R3JlYXRlclRoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEx0VToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0 KEFzc2VtYmxlcjo6QmVsb3csIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0R3RVOgorKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQo QXNzZW1ibGVyOjpBYm92ZSwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STMyeDRMZVU6CisrICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChB c3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRHZVU6CisrICAgICAgbWFzbS5jb21wYXJlSW50 MzJ4NChBc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFcToKKysgICAgICBtYXNtLmNvbXBh cmVJbnQ2NHgyKEFzc2VtYmxlcjo6RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyTmU6CisrICAgICAgbWFzbS5jb21wYXJl SW50NjR4MihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4Mkx0UzoKKysgICAgICBtYXNtLmNvbXBh cmVJbnQ2NHgyKEFzc2VtYmxlcjo6TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyR3RTOgorKyAgICAgIG1hc20uY29t cGFyZUludDY0eDIoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJMZVM6CisrICAgICAgbWFz bS5jb21wYXJlSW50NjR4MihBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJHZVM6Cisr ICAgICAgbWFzbS5jb21wYXJlSW50NjR4MihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwg bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBGbG9hdCBjb21wYXJlCisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEVxOgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0 MzJ4NChBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NE5lOgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0 MzJ4NChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEx0OgorKyAgICAgIG1hc20uY29tcGFyZUZs b2F0MzJ4NChBc3NlbWJsZXI6Okxlc3NUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEd0OgorKyAgICAgIG1hc20uY29tcGFy ZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NExlOgorKyAgICAgIG1hc20u Y29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRHZToKKysg ICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWws IGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkY2NHgyRXE6CisrICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6RXF1YWws IGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkY2NHgyTmU6CisrICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6Tm90RXF1 YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkY2NHgyTHQ6CisrICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6TGVz c1RoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkY2NHgyR3Q6CisrICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6 R3JlYXRlclRoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkY2NHgyTGU6CisrICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2Vt Ymxlcjo6TGVzc1RoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkdlOgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0 NjR4MihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICAvLyBGbG9hdCBhcml0aG1ldGljCisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGMzJ4NEFkZDoKKysgICAgICBtYXNtLmFkZEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFN1YjoKKysgICAg ICBtYXNtLnN1YkZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NE11bDoKKysgICAgICBtYXNtLm11bEZsb2F0MzJ4NChs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG MzJ4NERpdjoKKysgICAgICBtYXNtLmRpdkZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NE1pbjoKKysgICAgICBtYXNt Lm1pbkZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVt cCgwKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdl dFRlbXAoMSkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0 TWF4OgorKyAgICAgIG1hc20ubWF4RmxvYXQzMng0KGxocywgcmhzLCBkZXN0LCBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5nZXRUZW1wKDApKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgVG9GbG9h dFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgxKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDRQTWluOgorKyAgICAgIG1hc20ucHNldWRvTWluRmxvYXQzMng0KGxo cywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYz Mng0UE1heDoKKysgICAgICBtYXNtLnBzZXVkb01heEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkFkZDoKKysgICAg ICBtYXNtLmFkZEZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlN1YjoKKysgICAgICBtYXNtLnN1YkZsb2F0NjR4Mihs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG NjR4Mk11bDoKKysgICAgICBtYXNtLm11bEZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkRpdjoKKysgICAgICBtYXNt LmRpdkZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpGNjR4Mk1pbjoKKysgICAgICBtYXNtLm1pbkZsb2F0NjR4MihsaHMsIHJo cywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgwKSksCisrICAgICAgICAgICAg ICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMSkpKTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTWF4OgorKyAgICAgIG1hc20ubWF4 RmxvYXQ2NHgyKGxocywgcmhzLCBkZXN0LCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDAp KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVt cCgxKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJQTWlu OgorKyAgICAgIG1hc20ucHNldWRvTWluRmxvYXQ2NHgyKGxocywgcmhzLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUE1heDoKKysgICAgICBtYXNt LnBzZXVkb01heEZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IC8vIE5hcnJvdworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZOYXJyb3dJMTZ4OFM6Cisr ICAgICAgbWFzbS5uYXJyb3dJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TmFycm93STE2eDhVOgorKyAgICAgIG1hc20u dW5zaWduZWROYXJyb3dJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TmFycm93STMyeDRTOgorKyAgICAgIG1hc20ubmFy cm93SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMTZ4OE5hcnJvd0kzMng0VToKKysgICAgICBtYXNtLnVuc2lnbmVkTmFycm93 SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIGk2NCBtdWx0 aXBseQorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJNdWw6IHsKKysgICAgICBGbG9hdFJl Z2lzdGVyIHRlbXAwID0gVG9UZW1wRmxvYXRSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAwKCkp OworKyAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDFmID0gVG9UZW1wRmxvYXRSZWdpc3Rlck9ySW52 YWxpZChpbnMtPnRlbXAxKCkpOworKyAgICAgIG1hc20ubXVsSW50NjR4MihsaHMsIHJocywgZGVz dCwgdGVtcDAsIHRlbXAxZik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgLy8gRXh0ZW5k ZWQgbXVsdGlwbHkKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4RXh0bXVsTG93STh4MTZT OgorKyAgICAgIG1hc20uZXh0TXVsTG93SW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dG11bEhpZ2hJOHgxNlM6Cisr ICAgICAgbWFzbS5leHRNdWxIaWdoSW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dG11bExvd0k4eDE2VToKKysgICAg ICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93SW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dG11bEhpZ2hJOHgxNlU6Cisr ICAgICAgbWFzbS51bnNpZ25lZEV4dE11bEhpZ2hJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0bXVsTG93STE2eDhT OgorKyAgICAgIG1hc20uZXh0TXVsTG93SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dG11bEhpZ2hJMTZ4OFM6Cisr ICAgICAgbWFzbS5leHRNdWxIaWdoSW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dG11bExvd0kxNng4VToKKysgICAg ICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dG11bEhpZ2hJMTZ4OFU6Cisr ICAgICAgbWFzbS51bnNpZ25lZEV4dE11bEhpZ2hJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyRXh0bXVsTG93STMyeDRT OgorKyAgICAgIG1hc20uZXh0TXVsTG93SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dG11bEhpZ2hJMzJ4NFM6Cisr ICAgICAgbWFzbS5leHRNdWxIaWdoSW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dG11bExvd0kzMng0VToKKysgICAg ICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dG11bEhpZ2hJMzJ4NFU6Cisr ICAgICAgbWFzbS51bnNpZ25lZEV4dE11bEhpZ2hJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgLy8gRG90IHByb2R1Y3QKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkzMng0RG90STE2eDhTOgorKyAgICAgIG1hc20ud2lkZW5Eb3RJbnQxNng4KGxocywgcmhzLCBk ZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gUmVsYXhlZCBiaW5hcnkgb3BzCisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFJlbGF4ZWRNaW46CisrICAgICAgbWFzbS5taW5GbG9hdDMy eDRSZWxheGVkKHJocywgbGhzKTsKKysgICAgICBpZiAoZGVzdCAhPSBsaHMpIG1hc20ubW92ZVNp bWQxMjgobGhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkYzMng0UmVsYXhlZE1heDoKKysgICAgICBtYXNtLm1heEZsb2F0MzJ4NFJlbGF4ZWQocmhzLCBs aHMpOworKyAgICAgIGlmIChkZXN0ICE9IGxocykgbWFzbS5tb3ZlU2ltZDEyOChsaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZWxheGVkTWlu OgorKyAgICAgIG1hc20ubWluRmxvYXQ2NHgyUmVsYXhlZChyaHMsIGxocyk7CisrICAgICAgaWYg KGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVTaW1kMTI4KGxocywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlJlbGF4ZWRNYXg6CisrICAgICAgbWFzbS5t YXhGbG9hdDY0eDJSZWxheGVkKHJocywgbGhzKTsKKysgICAgICBpZiAoZGVzdCAhPSBsaHMpIG1h c20ubW92ZVNpbWQxMjgobGhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk4eDE2UmVsYXhlZFN3aXp6bGU6CisrICAgICAgbWFzbS5zd2l6emxlSW50OHgx NlJlbGF4ZWQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhSZWxheGVkUTE1TXVsclM6CisrICAgICAgbWFzbS5xMTVNdWxySW50MTZ4 OFJlbGF4ZWQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBTd2l6emxl CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN3aXp6bGU6CisrICAgICAgbWFzbS5zd2l6 emxlSW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMTZ4OFJlbGF4ZWREb3RJOHgxNkk3eDE2UzoKKysgICAgICBtYXNtLmRvdElu dDh4MTZJbnQ3eDE2KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVs dDoKKysgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBOWUkgU0lNRCBiaW5hcnkgb3AiKTsKKysgIH0K Kyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21CaW5hcnlTaW1kMTI4V2l0aENvbnN0 YW50KAorKyAgICBMV2FzbUJpbmFyeVNpbWQxMjhXaXRoQ29uc3RhbnQqIGlucykgeworKyAgRmxv YXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBGbG9hdFJl Z2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBTaW1kQ29u c3RhbnQgcmhzID0gaW5zLT5yaHMoKTsKKysgIC8vIExvYWQgdGhlIGNvbnN0YW50IGludG8gc2Ny YXRjaCwgdGhlbiB1c2UgdGhlIGJpbmFyeSBvcC4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2Ny YXRjaChtYXNtKTsKKysgIG1hc20ubG9hZENvbnN0YW50U2ltZDEyOChyaHMsIHNjcmF0Y2gpOwor KyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgeworKyAgICAvLyBCaXR3aXNlCisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4QW5kOgorKyAgICAgIG1hc20uYml0d2lzZUFuZFNpbWQx MjgobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OlYxMjhPcjoKKysgICAgICBtYXNtLmJpdHdpc2VPclNpbWQxMjgobGhzLCBzY3JhdGNo LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhYb3I6 CisrICAgICAgbWFzbS5iaXR3aXNlWG9yU2ltZDEyOChsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFuZE5vdDoKKysgICAgICBt YXNtLmJpdHdpc2VBbmROb3RTaW1kMTI4KGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIC8vIEludGVnZXIgYWRkCisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFk ZDoKKysgICAgICBtYXNtLmFkZEludDh4MTYobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWRkOgorKyAgICAgIG1hc20uYWRk SW50MTZ4OChsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STMyeDRBZGQ6CisrICAgICAgbWFzbS5hZGRJbnQzMng0KGxocywgc2NyYXRj aCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkFk ZDoKKysgICAgICBtYXNtLmFkZEludDY0eDIobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgLy8gSW50ZWdlciBzdWIKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2 U3ViOgorKyAgICAgIG1hc20uc3ViSW50OHgxNihsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWI6CisrICAgICAgbWFzbS5z dWJJbnQxNng4KGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMzJ4NFN1YjoKKysgICAgICBtYXNtLnN1YkludDMyeDQobGhzLCBzY3Jh dGNoLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgy U3ViOgorKyAgICAgIG1hc20uc3ViSW50NjR4MihsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICAvLyBJbnRlZ2VyIG11bHRpcGx5ICgxNi0vMzItYml0IGxhbmVzOyBJNjR4 MiB1bnJlYWNoYWJsZSwgc2VlIGJlbG93KQorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhN dWw6CisrICAgICAgbWFzbS5tdWxJbnQxNng4KGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE11bDoKKysgICAgICBtYXNtLm11 bEludDMyeDQobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyTXVsOgorKyAgICAgIC8vIFVucmVhY2hhYmxlIG9uIFBQQzY0OiBN V2FzbUJpbmFyeVNpbWQxMjg6OnNwZWNpYWxpemVGb3JDb25zdGFudFJocworKyAgICAgIC8vIHJl dHVybnMgZmFsc2UgaW4gTG93ZXJpbmctcHBjNjQuY3BwLCBzbyBNSVIgd2l0aCBhIGNvbnN0YW50 IHJocworKyAgICAgIC8vIHRvIEk2NHgyTXVsIGlzIG5ldmVyIGNyZWF0ZWQgb24gdGhpcyBiYWNr ZW5kLgorKyAgICAgIC8vCisrICAgICAgLy8gVGhlIHByZXZpb3VzIGluLXBsYWNlIGltcGxlbWVu dGF0aW9uIHdhcyBicm9rZW4gaW4gdGhyZWUgd2F5czoKKysgICAgICAvLyBoYXJkLWNvZGVkIFZS MC9WUjEgc3RhZ2luZyBhc3N1bWVkIGFuIG9yZGVyaW5nIHRoYXQgZGlkbid0IG1hdGNoCisrICAg ICAgLy8gdGhlIHN1cnJvdW5kaW5nIGNvZGU7IGEgZGVhZCBgbWZ2c3JkKGEsIGYwKWAgY2xvYmJl cmVkIGBhYAorKyAgICAgIC8vIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgbmV4dCBtZnZzcmQ7IGFu ZCB0aGUgdHJhaWxpbmcKKysgICAgICAvLyBgeHhwZXJtZGkoZGVzdCwgc2NyYXRjaCwgZGVzdCwg MClgIHdpdGggRE09MCBwbGFjZWQgbGFuZS0wIGluIHRoZQorKyAgICAgIC8vIHdyb25nIGhhbGYu IFJhdGhlciB0aGFuIHNoaXAgZGVhZC1idXQtYnJva2VuIGNvZGUsIGNyYXNoIGxvdWRseQorKyAg ICAgIC8vIGlmIHJlYWNoYWJpbGl0eSBldmVyIGNoYW5nZXMg4oCUIHRoZSBmdXR1cmUgZW5hYmxl ciBtdXN0IHdyaXRlIGEKKysgICAgICAvLyBjb3JyZWN0IGxvd2VyaW5nIChlLmcuIHZpYSBtYXNt Lm11bEludDY0eDIgd2l0aCBleHBsaWNpdCB0ZW1wcykuCisrICAgICAgTU9aX0NSQVNIKCJQUEM2 NDogSTY0eDJNdWwgd2l0aCBjb25zdGFudCByaHMgdW5pbXBsZW1lbnRlZCAiCisrICAgICAgICAg ICAgICAgICIoc3BlY2lhbGl6ZUZvckNvbnN0YW50UmhzIHJldHVybnMgZmFsc2UpIik7CisrICAg IC8vIENvbXBhcmUKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2RXE6CisrICAgICAgbWFz bS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZOZToKKysgICAgICBt YXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgc2NyYXRjaCwgZGVz dCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2 NDogTllJIFNJTUQgYmluYXJ5LXdpdGgtY29uc3RhbnQgb3AiKTsKKysgIH0KKyt9Cisrdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21WYXJpYWJsZVNoaWZ0U2ltZDEyOCgKKysgICAgTFdhc21W YXJpYWJsZVNoaWZ0U2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxv YXRSZWdpc3RlcihpbnMtPmxocygpKTsKKysgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5z LT5yaHMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSk7CisrICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJOHgxNlNobDoKKysgICAgICBtYXNtLmxlZnRTaGlmdEludDh4MTYobGhz LCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4 MTZTaHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDh4MTYobGhzLCByaHMsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJVOgorKyAgICAg IG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFNobDoKKysgICAgICBtYXNtLmxl ZnRTaGlmdEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STE2eDhTaHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDE2eDgo bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STE2eDhTaHJVOgorKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNo bDoKKysgICAgICBtYXNtLmxlZnRTaGlmdEludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJTOgorKyAgICAgIG1hc20u cmlnaHRTaGlmdEludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJVOgorKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNo aWZ0SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJNjR4MlNobDoKKysgICAgICBtYXNtLmxlZnRTaGlmdEludDY0eDIobGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJT aHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJVOgorKyAgICAgIG1h c20udW5zaWduZWRSaWdodFNoaWZ0SW50NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgdmFy aWFibGUgc2hpZnQgb3AiKTsKKysgIH0KKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdh c21Db25zdGFudFNoaWZ0U2ltZDEyOCgKKysgICAgTFdhc21Db25zdGFudFNoaWZ0U2ltZDEyOCog aW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygp KTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgp KTsKKysgIGludDMyX3Qgc2hpZnQgPSBpbnMtPnNoaWZ0KCk7CisrICBzd2l0Y2ggKGlucy0+bWly KCktPnNpbWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNobDoKKysgICAg ICBtYXNtLmxlZnRTaGlmdEludDh4MTYoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJTOgorKyAgICAgIG1hc20u cmlnaHRTaGlmdEludDh4MTYoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJVOgorKyAgICAgIG1hc20udW5zaWdu ZWRSaWdodFNoaWZ0SW50OHgxNihJbW0zMihzaGlmdCksIHNyYywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFNobDoKKysgICAgICBtYXNtLmxlZnRT aGlmdEludDE2eDgoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdElu dDE2eDgoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STE2eDhTaHJVOgorKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0 SW50MTZ4OChJbW0zMihzaGlmdCksIHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNobDoKKysgICAgICBtYXNtLmxlZnRTaGlmdEludDMyeDQo SW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STMyeDRTaHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDMyeDQoSW1tMzIo c2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STMyeDRTaHJVOgorKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJbW0z MihzaGlmdCksIHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4MlNobDoKKysgICAgICBtYXNtLmxlZnRTaGlmdEludDY0eDIoSW1tMzIoc2hpZnQp LCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0 eDJTaHJTOgorKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDY0eDIoSW1tMzIoc2hpZnQpLCBzcmMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJV OgorKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50NjR4MihJbW0zMihzaGlmdCksIHNy YywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNI KCJQUEM2NDogTllJIFNJTUQgY29uc3RhbnQgc2hpZnQgb3AiKTsKKysgIH0KKyt9Cisrdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21TaWduUmVwbGljYXRpb25TaW1kMTI4KAorKyAgICBMV2Fz bVNpZ25SZXBsaWNhdGlvblNpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBU b0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICAvLyBTaWduIHJlcGxpY2F0aW9uID0gYXJp dGhtZXRpYyByaWdodCBzaGlmdCBieSBtYXggYW1vdW50IChhbGwgc2lnbiBiaXRzKS4KKysgIHN3 aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4 eDE2U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ4eDE2KEltbTMyKDcpLCBzcmMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJTOgor KyAgICAgIG1hc20ucmlnaHRTaGlmdEludDE2eDgoSW1tMzIoMTUpLCBzcmMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJTOgorKyAgICAgIG1h c20ucmlnaHRTaGlmdEludDMyeDQoSW1tMzIoMzEpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJTOgorKyAgICAgIG1hc20ucmlnaHRT aGlmdEludDY0eDIoSW1tMzIoNjMpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBk ZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBzaWduIHJlcGxpY2F0aW9uIG9w Iik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2h1ZmZsZVNpbWQx MjgoTFdhc21TaHVmZmxlU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRv RmxvYXRSZWdpc3RlcihpbnMtPmxocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9h dFJlZ2lzdGVyKGlucy0+cmhzKCkpOworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJl Z2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgU2ltZENvbnN0YW50IGN0cmwgPSBpbnMtPmNvbnRy b2woKTsKKysgIGNvbnN0IHVpbnQ4X3QqIGxhbmVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1 aW50OF90Kj4oY3RybC5ieXRlcygpKTsKKysgIG1hc20uc2h1ZmZsZUludDh4MTYobGFuZXMsIGxo cywgcmhzLCBkZXN0KTsKKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21QZXJtdXRl U2ltZDEyOChMV2FzbVBlcm11dGVTaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgc3Jj ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpOworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0g VG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgLy8gUFBDNjQ6IHRoZSBzaHVmZmxl IGFuYWx5c2lzIHRyYW5zZm9ybXMgY29udHJvbCBieXRlcyBpbnRvIHNwZWNpYWxpemVkCisrICAv LyBmb3JtYXRzLiBSZWNvbnN0cnVjdCByYXcgV2FzbSBieXRlIGluZGljZXMgZm9yIG91ciB2cGVy bSBpbXBsZW1lbnRhdGlvbi4KKysgIFNpbWRDb25zdGFudCBjdHJsID0gaW5zLT5jb250cm9sKCk7 CisrICB1aW50OF90IHJhd0xhbmVzWzE2XTsKKysgIHN3aXRjaCAoaW5zLT5vcCgpKSB7CisrICAg IGNhc2UgU2ltZFBlcm11dGVPcDo6TU9WRToKKysgICAgICBtYXNtLm1vdmVTaW1kMTI4KHNyYywg ZGVzdCk7CisrICAgICAgcmV0dXJuOworKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlBFUk1VVEVf MzJ4NDogeworKyAgICAgIGNvbnN0IGludDMyX3QqIHdvcmRzID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBpbnQzMl90Kj4oY3RybC5ieXRlcygpKTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDQ7IGkrKykKKysgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorKyAgICAgICAg ICByYXdMYW5lc1tpICogNCArIGpdID0gd29yZHNbaV0gKiA0ICsgajsKKysgICAgICBicmVhazsK KysgICAgfQorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlBFUk1VVEVfMTZ4ODogeworKyAgICAg IC8vIGNvbnRyb2wgaGFzIGludDE2IGhhbGZ3b3JkIGluZGljZXMuIEhpZ2ggYnl0ZSBvZiBoYWxm c1swXSBtYXkgaGF2ZQorKyAgICAgIC8vIHBsYXRmb3JtLXNwZWNpZmljIGZsYWdzIChQZXJtMTZ4 OEFjdGlvbikuIE1hc2sgdG8gZ2V0IHRoZSBpbmRleCBvbmx5LgorKyAgICAgIGNvbnN0IGludDE2 X3QqIGhhbGZzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQxNl90Kj4oY3RybC5ieXRlcygp KTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgaW50IGh3 SWR4ID0gaGFsZnNbaV0gJiAweDc7CisrICAgICAgICByYXdMYW5lc1tpICogMl0gPSBod0lkeCAq IDI7CisrICAgICAgICByYXdMYW5lc1tpICogMiArIDFdID0gaHdJZHggKiAyICsgMTsKKysgICAg ICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpCUk9B RENBU1RfOHgxNjogeworKyAgICAgIHVpbnQ4X3QgbGFuZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgaW50OF90Kj4oY3RybC5ieXRlcygpKVswXTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDE2OyBpKyspIHJhd0xhbmVzW2ldID0gbGFuZTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIFNpbWRQZXJtdXRlT3A6OkJST0FEQ0FTVF8xNng4OiB7CisrICAgICAgdWludDhfdCBs YW5lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOwor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICByYXdMYW5lc1tp ICogMl0gPSBsYW5lICogMjsKKysgICAgICAgIHJhd0xhbmVzW2kgKiAyICsgMV0gPSBsYW5lICog MiArIDE7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBl cm11dGVPcDo6Uk9UQVRFX1JJR0hUXzh4MTY6IHsKKysgICAgICB1aW50OF90IHNoaWZ0ID0gcmVp bnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOworKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgcmF3TGFuZXNbaV0gPSAoaSArIHNoaWZ0KSAlIDE2 OworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6U0hJRlRf TEVGVF84eDE2OiB7CisrICAgICAgLy8gU2hpZnRlZC1vdXQgcG9zaXRpb25zIG11c3QgYmUgemVy by4gVXNlIGluZGV4IDE2KyB0byBwaWNrIGZyb20gemVyby4KKysgICAgICB1aW50OF90IHNoaWZ0 ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOworKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgICAgIHJhd0xhbmVzW2ldID0g KGkgPj0gc2hpZnQpID8gKGkgLSBzaGlmdCkgOiAoMTYgKyBpKTsKKysgICAgICBnb3RvIG5lZWRz WmVyb1JoczsKKysgICAgfQorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX1JJR0hUXzh4 MTY6IHsKKysgICAgICB1aW50OF90IHNoaWZ0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4 X3QqPihjdHJsLmJ5dGVzKCkpWzBdOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkr KykKKysgICAgICAgIHJhd0xhbmVzW2ldID0gKGkgKyBzaGlmdCA8IDE2KSA/IChpICsgc2hpZnQp IDogKDE2ICsgaSk7CisrICAgICAgZ290byBuZWVkc1plcm9SaHM7CisrICAgIH0KKysgICAgY2Fz ZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzE2eDg6IHsKKysgICAgICAvLyBSZXZlcnNlIGJ5dGVz IHdpdGhpbiBlYWNoIDE2LWJpdCBsYW5lOiBbMSwwLDMsMiw1LDQsLi4uXQorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICByYXdMYW5lc1tpICogMl0gPSBpICog MiArIDE7CisrICAgICAgICByYXdMYW5lc1tpICogMiArIDFdID0gaSAqIDI7CisrICAgICAgfQor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UkVWRVJTRV8z Mng0OiB7CisrICAgICAgLy8gUmV2ZXJzZSBieXRlcyB3aXRoaW4gZWFjaCAzMi1iaXQgbGFuZTog WzMsMiwxLDAsNyw2LDUsNCwuLi5dCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKysp CisrICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKKysgICAgICAgICAgcmF3TGFu ZXNbaSAqIDQgKyBqXSA9IGkgKiA0ICsgKDMgLSBqKTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJFVkVSU0VfNjR4MjogeworKyAgICAgIC8vIFJldmVy c2UgYnl0ZXMgd2l0aGluIGVhY2ggNjQtYml0IGxhbmU6IFs3LDYsNSw0LDMsMiwxLDAsMTUsLi4u XQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQorKyAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCA4OyBqKyspCisrICAgICAgICAgIHJhd0xhbmVzW2kgKiA4ICsgal0gPSBpICog OCArICg3IC0gaik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBTaW1kUGVybXV0 ZU9wOjpaRVJPX0VYVEVORF84eDE2X1RPXzE2eDg6CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6 WkVST19FWFRFTkRfOHgxNl9UT18zMng0OgorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9f RVhURU5EXzh4MTZfVE9fNjR4MjoKKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVO RF8xNng4X1RPXzMyeDQ6CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfMTZ4 OF9UT182NHgyOgorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9fRVhURU5EXzMyeDRfVE9f NjR4MjogeworKyAgICAgIGNvbnN0IGludDhfdCogYnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNv bnN0IGludDhfdCo+KGN0cmwuYnl0ZXMoKSk7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx NjsgaSsrKSByYXdMYW5lc1tpXSA9IGJ5dGVzW2ldOworKyAgICAgIGdvdG8gbmVlZHNaZXJvUmhz OworKyAgICB9CisrICAgIGRlZmF1bHQ6IHsKKysgICAgICAvLyBQRVJNVVRFXzh4MTYgYW5kIG90 aGVyczogY29udHJvbCBoYXMgcmF3IGJ5dGUgaW5kaWNlcy4KKysgICAgICBjb25zdCBpbnQ4X3Qq IGJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpOwor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgcmF3TGFuZXNbaV0gPSBieXRlc1tp XTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgfQorKyAgbWFzbS5zaHVmZmxlSW50OHgxNihy YXdMYW5lcywgc3JjLCBzcmMsIGRlc3QpOworKyAgcmV0dXJuOworKworKyAgbmVlZHNaZXJvUmhz OiB7CisrICAgIC8vIFdhc20gY29udmVudGlvbjogcmF3TGFuZXNbaV0gaW4gMC4uMTUgc2VsZWN0 cyBzcmMuTEVfYnl0ZVtpZHhdLCBhbmQKKysgICAgLy8gcmF3TGFuZXNbaV0gPj0gMTYgbWVhbnMg Inplcm8iLiBXaXRob3V0IHNwaWxsaW5nLCB3ZSBjYW4ndCBzYXRpc2Z5CisrICAgIC8vIHZwZXJt J3MgdGhyZWUtaW5wdXQgY29uc3RyYWludCBBTkQga2VlcCBzcmMgYWxpdmUgd2hlbiBkZXN0ID09 IHNyYy4KKysgICAgLy8gU3RyYXRlZ3k6IHZwZXJtIHNyYyB3aXRoIGl0c2VsZiAoYW55IHZhbGlk IGJ5dGUgZm9yIHRoZSAiemVybyIKKysgICAgLy8gcG9zaXRpb25zLCBieXRlcyBnZXQgbWFza2Vk IG91dCBiZWxvdyksIHRoZW4gQU5EIHdpdGggYSBtYXNrIHRoYXQKKysgICAgLy8gemVyb3MgdGhv c2UgcG9zaXRpb25zLgorKyAgICBpbnQ4X3QgY3RybFsxNl0sIG1hc2tbMTZdOworKyAgICBmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgIHVpbnQ4X3QgaWR4ID0gcmF3 TGFuZXNbaV07CisrICAgICAgaWYgKGlkeCA8IDE2KSB7CisrICAgICAgICBjdHJsW2ldID0gMTUg LSBpZHg7CisrICAgICAgICBtYXNrW2ldID0gLTE7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IGN0cmxbaV0gPSAwOworKyAgICAgICAgbWFza1tpXSA9IDA7CisrICAgICAgfQorKyAgICB9Cisr ICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKKysgICAgbWFzbS5sb2FkQ29u c3RhbnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGN0cmwpLCBzY3JhdGNoKTsKKysg ICAgbWFzbS5hc192cGVybShkZXN0LmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAgICAgICAgICAg ICBzcmMuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAgICAgICAgICAgIHNyYy5lbmNvZGluZygp ICYgMzEsCisrICAgICAgICAgICAgICAgICAgc2NyYXRjaC5lbmNvZGluZygpICYgMzEpOworKyAg ICBtYXNtLmxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYobWFzayks IHNjcmF0Y2gpOworKyAgICBtYXNtLmFzX3h4bGFuZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKysg ICAgcmV0dXJuOworKyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVJlcGxh Y2VMYW5lU2ltZDEyOChMV2FzbVJlcGxhY2VMYW5lU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBNT1pf QVNTRVJUKFRvRmxvYXRSZWdpc3RlcihpbnMtPmxocygpKSA9PSBsaHNEZXN0KTsKKysgIHVpbnQz Ml90IGxhbmUgPSBpbnMtPm1pcigpLT5sYW5lSW5kZXgoKTsKKysgIHN3aXRjaCAoaW5zLT5taXIo KS0+c2ltZE9wKCkpIHsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2UmVwbGFjZUxhbmU6 CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDh4MTYobGFuZSwgVG9SZWdpc3RlcihpbnMtPnJo cygpKSwgbGhzRGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OFJlcGxhY2VMYW5lOgorKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQxNng4KGxhbmUsIFRv UmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxoc0Rlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRSZXBsYWNlTGFuZToKKysgICAgICBtYXNtLnJlcGxhY2VMYW5l SW50MzJ4NChsYW5lLCBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpLCBsaHNEZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UmVwbGFjZUxhbmU6CisrICAgICAg bWFzbS5yZXBsYWNlTGFuZUZsb2F0MzJ4NChsYW5lLCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5yaHMo KSksIGxoc0Rlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0 eDJSZXBsYWNlTGFuZToKKysgICAgICBtYXNtLnJlcGxhY2VMYW5lRmxvYXQ2NHgyKGxhbmUsIFRv RmxvYXRSZWdpc3RlcihpbnMtPnJocygpKSwgbGhzRGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgcmVwbGFjZSBsYW5l IG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUmVwbGFjZUlu dDY0TGFuZVNpbWQxMjgoCisrICAgIExXYXNtUmVwbGFjZUludDY0TGFuZVNpbWQxMjgqIGlucykg eworKyAgTU9aX0FTU0VSVChpbnMtPm1pcigpLT5zaW1kT3AoKSA9PSB3YXNtOjpTaW1kT3A6Okk2 NHgyUmVwbGFjZUxhbmUpOworKyAgRmxvYXRSZWdpc3RlciBsaHNEZXN0ID0gVG9GbG9hdFJlZ2lz dGVyKGlucy0+b3V0cHV0KCkpOworKyAgTU9aX0FTU0VSVChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5s aHMoKSkgPT0gbGhzRGVzdCk7CisrICBtYXNtLnJlcGxhY2VMYW5lSW50NjR4MihpbnMtPm1pcigp LT5sYW5lSW5kZXgoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXI2NChp bnMtPnJocygpKSwgbGhzRGVzdCk7CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt U2NhbGFyVG9TaW1kMTI4KExXYXNtU2NhbGFyVG9TaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0UmVn aXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIHN3aXRjaCAo aW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U3Bs YXQ6CisrICAgICAgbWFzbS5zcGxhdFgxNihUb1JlZ2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U3BsYXQ6CisrICAg ICAgbWFzbS5zcGxhdFg4KFRvUmVnaXN0ZXIoaW5zLT5zcmMoKSksIGRlc3QpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTcGxhdDoKKysgICAgICBtYXNtLnNw bGF0WDQoVG9SZWdpc3RlcihpbnMtPnNyYygpKSwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFNwbGF0OgorKyAgICAgIG1hc20uc3BsYXRYNChUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSksIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6RjY0eDJTcGxhdDoKKysgICAgICBtYXNtLnNwbGF0WDIoVG9GbG9hdFJl Z2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBOWUkgU0lNRCBzY2FsYXItdG8tc2ltZCBvcCIpOwor KyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUludDY0VG9TaW1kMTI4KExX YXNtSW50NjRUb1NpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9h dFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3Ao KSkgeworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTcGxhdDoKKysgICAgICBtYXNtLnNw bGF0WDIoVG9SZWdpc3RlcjY0KGlucy0+c3JjKCkpLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBOWUkgU0lNRCBpbnQ2NC10by1z aW1kIG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtVW5hcnlT aW1kMTI4KExXYXNtVW5hcnlTaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgc3JjID0g VG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpOworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9G bG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1k T3AoKSkgeworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZOZWc6CisrICAgICAgbWFzbS5u ZWdJbnQ4eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OE5lZzoKKysgICAgICBtYXNtLm5lZ0ludDE2eDgoc3JjLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TmVnOgorKyAgICAgIG1hc20u bmVnSW50MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STY0eDJOZWc6CisrICAgICAgbWFzbS5uZWdJbnQ2NHgyKHNyYywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFiczoKKysgICAgICBtYXNt LmFic0ludDh4MTYoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4QWJzOgorKyAgICAgIG1hc20uYWJzSW50MTZ4OChzcmMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRBYnM6CisrICAgICAgbWFz bS5hYnNJbnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJNjR4MkFiczoKKysgICAgICBtYXNtLmFic0ludDY0eDIoc3JjLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhOb3Q6CisrICAgICAgbWFz bS5iaXR3aXNlTm90U2ltZDEyOChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6RjMyeDROZWc6CisrICAgICAgbWFzbS5uZWdGbG9hdDMyeDQoc3JjLCBk ZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTmVnOgor KyAgICAgIG1hc20ubmVnRmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEFiczoKKysgICAgICBtYXNtLmFic0Zsb2F0MzJ4NChz cmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJB YnM6CisrICAgICAgbWFzbS5hYnNGbG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0U3FydDoKKysgICAgICBtYXNtLnNxcnRGbG9h dDMyeDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkY2NHgyU3FydDoKKysgICAgICBtYXNtLnNxcnRGbG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Q2VpbDoKKysgICAgICBtYXNt LmNlaWxGbG9hdDMyeDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkY2NHgyQ2VpbDoKKysgICAgICBtYXNtLmNlaWxGbG9hdDY0eDIoc3JjLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Rmxvb3I6Cisr ICAgICAgbWFzbS5mbG9vckZsb2F0MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJGbG9vcjoKKysgICAgICBtYXNtLmZsb29yRmxvYXQ2 NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG MzJ4NFRydW5jOgorKyAgICAgIG1hc20udHJ1bmNGbG9hdDMyeDQoc3JjLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyVHJ1bmM6CisrICAgICAgbWFz bS50cnVuY0Zsb2F0NjR4MihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDROZWFyZXN0OgorKyAgICAgIG1hc20ubmVhcmVzdEZsb2F0MzJ4NChz cmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJO ZWFyZXN0OgorKyAgICAgIG1hc20ubmVhcmVzdEZsb2F0NjR4MihzcmMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICAvLyBDb252ZXJzaW9ucworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMy eDRDb252ZXJ0STMyeDRTOgorKyAgICAgIG1hc20uY29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChz cmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRD b252ZXJ0STMyeDRVOgorKyAgICAgIG1hc20udW5zaWduZWRDb252ZXJ0SW50MzJ4NFRvRmxvYXQz Mng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MzJ4NFRydW5jU2F0RjMyeDRTOgorKyAgICAgIG1hc20udHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMy eDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkz Mng0VHJ1bmNTYXRGMzJ4NFU6CisrICAgICAgbWFzbS51bnNpZ25lZFRydW5jU2F0RmxvYXQzMng0 VG9JbnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGNjR4MkNvbnZlcnRMb3dJMzJ4NFM6CisrICAgICAgbWFzbS5jb252ZXJ0SW50MzJ4NFRv RmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGNjR4MkNvbnZlcnRMb3dJMzJ4NFU6CisrICAgICAgbWFzbS51bnNpZ25lZENvbnZlcnRJ bnQzMng0VG9GbG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkYzMng0RGVtb3RlRjY0eDJaZXJvOgorKyAgICAgIG1hc20uY29udmVydEZs b2F0NjR4MlRvRmxvYXQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpGNjR4MlByb21vdGVMb3dGMzJ4NDoKKysgICAgICBtYXNtLmNvbnZlcnRG bG9hdDMyeDRUb0Zsb2F0NjR4MihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRUcnVuY1NhdEY2NHgyU1plcm86CisrICAgICAgbWFzbS50cnVu Y1NhdEZsb2F0NjR4MlRvSW50MzJ4NChzcmMsIGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0VHJ1bmNTYXRGNjR4MlVa ZXJvOgorKyAgICAgIG1hc20udW5zaWduZWRUcnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChzcmMs IGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysgICAgICBicmVhazsKKysgICAgLy8gV2lkZW4K KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4RXh0ZW5kTG93STh4MTZTOgorKyAgICAgIG1h c20ud2lkZW5Mb3dJbnQ4eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGVuZEhpZ2hJOHgxNlM6CisrICAgICAgbWFzbS53aWRlbkhp Z2hJbnQ4eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OEV4dGVuZExvd0k4eDE2VToKKysgICAgICBtYXNtLnVuc2lnbmVkV2lkZW5Mb3dJ bnQ4eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJMTZ4OEV4dGVuZEhpZ2hJOHgxNlU6CisrICAgICAgbWFzbS51bnNpZ25lZFdpZGVuSGlnaElu dDh4MTYoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkzMng0RXh0ZW5kTG93STE2eDhTOgorKyAgICAgIG1hc20ud2lkZW5Mb3dJbnQxNng4KHNyYywg ZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVu ZEhpZ2hJMTZ4OFM6CisrICAgICAgbWFzbS53aWRlbkhpZ2hJbnQxNng4KHNyYywgZGVzdCk7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVuZExvd0kxNng4 VToKKysgICAgICBtYXNtLnVuc2lnbmVkV2lkZW5Mb3dJbnQxNng4KHNyYywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVuZEhpZ2hJMTZ4OFU6 CisrICAgICAgbWFzbS51bnNpZ25lZFdpZGVuSGlnaEludDE2eDgoc3JjLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyRXh0ZW5kTG93STMyeDRTOgor KyAgICAgIG1hc20ud2lkZW5Mb3dJbnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dGVuZEhpZ2hJMzJ4NFM6CisrICAgICAgbWFz bS53aWRlbkhpZ2hJbnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJNjR4MkV4dGVuZExvd0kzMng0VToKKysgICAgICBtYXNtLnVuc2lnbmVk V2lkZW5Mb3dJbnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJNjR4MkV4dGVuZEhpZ2hJMzJ4NFU6CisrICAgICAgbWFzbS51bnNpZ25lZFdp ZGVuSGlnaEludDMyeDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gRXh0ZW5k ZWQgYWRkIHBhaXJ3aXNlCisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGFkZFBhaXJ3 aXNlSTh4MTZTOgorKyAgICAgIG1hc20uZXh0QWRkUGFpcndpc2VJbnQ4eDE2KHNyYywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGFkZFBhaXJ3 aXNlSTh4MTZVOgorKyAgICAgIG1hc20udW5zaWduZWRFeHRBZGRQYWlyd2lzZUludDh4MTYoc3Jj LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0 YWRkUGFpcndpc2VJMTZ4OFM6CisrICAgICAgbWFzbS5leHRBZGRQYWlyd2lzZUludDE2eDgoc3Jj LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0 YWRkUGFpcndpc2VJMTZ4OFU6CisrICAgICAgbWFzbS51bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50 MTZ4OChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBSZWxheGVkIHRydW5jYXRp b24KKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0UmVsYXhlZFRydW5jRjMyeDRTOgorKyAg ICAgIG1hc20udHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKHNyYywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRUcnVuY0YzMng0 VToKKysgICAgICBtYXNtLnVuc2lnbmVkVHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKHNy YywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJl bGF4ZWRUcnVuY0Y2NHgyU1plcm86CisrICAgICAgbWFzbS50cnVuY0Zsb2F0NjR4MlRvSW50MzJ4 NFJlbGF4ZWQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0UmVsYXhlZFRydW5jRjY0eDJVWmVybzoKKysgICAgICBtYXNtLnVuc2lnbmVkVHJ1 bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxheGVkKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIC8vIFBvcGNudAorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZQb3BjbnQ6CisrICAg ICAgbWFzbS5wb3BjbnRJbnQ4eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRl ZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgdW5hcnkgb3AiKTsKKysg IH0KKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21SZWR1Y2VTaW1kMTI4KExXYXNt UmVkdWNlU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdp c3RlcihpbnMtPnNyYygpKTsKKysgIHVpbnQzMl90IGltbSA9IGlucy0+bWlyKCktPmltbSgpOwor KyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgeworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STh4MTZFeHRyYWN0TGFuZVM6CisrICAgICAgbWFzbS5leHRyYWN0TGFuZUludDh4MTYoaW1t LCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STh4MTZFeHRyYWN0TGFuZVU6CisrICAgICAgbWFzbS51bnNpZ25l ZEV4dHJhY3RMYW5lSW50OHgxNihpbW0sIHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dHJhY3RMYW5l UzoKKysgICAgICBtYXNtLmV4dHJhY3RMYW5lSW50MTZ4OChpbW0sIHNyYywgVG9SZWdpc3Rlcihp bnMtPm91dHB1dCgpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OEV4dHJhY3RMYW5lVToKKysgICAgICBtYXNtLnVuc2lnbmVkRXh0cmFjdExhbmVJbnQxNng4 KGltbSwgc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0cmFjdExhbmU6CisrICAgICAgbWFzbS5leHRy YWN0TGFuZUludDMyeDQoaW1tLCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRFeHRyYWN0TGFuZToKKysg ICAgICBtYXNtLmV4dHJhY3RMYW5lRmxvYXQzMng0KGltbSwgc3JjLCBUb0Zsb2F0UmVnaXN0ZXIo aW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 RjY0eDJFeHRyYWN0TGFuZToKKysgICAgICBtYXNtLmV4dHJhY3RMYW5lRmxvYXQ2NHgyKGltbSwg c3JjLCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFueVRydWU6CisrICAgICAgbWFzbS5hbnlUcnVlU2lt ZDEyOChzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBbGxUcnVlOgorKyAgICAgIG1hc20uYWxsVHJ1ZUlu dDh4MTYoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWxsVHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJ bnQxNng4KHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEFsbFRydWU6CisrICAgICAgbWFzbS5hbGxUcnVl SW50MzJ4NChzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJBbGxUcnVlOgorKyAgICAgIG1hc20uYWxsVHJ1 ZUludDY0eDIoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2Qml0bWFzazoKKysgICAgICBtYXNtLmJpdG1h c2tJbnQ4eDE2KHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSwgU2NyYXRjaFNpbWQxMjhS ZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhCaXRtYXNr OgorKyAgICAgIG1hc20uYml0bWFza0ludDE2eDgoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpLCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMzJ4NEJpdG1hc2s6CisrICAgICAgbWFzbS5iaXRtYXNrSW50MzJ4NChzcmMsIFRv UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSksIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQml0bWFzazoKKysgICAgICBtYXNtLmJp dG1hc2tJbnQ2NHgyKHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSwgU2NyYXRjaFNpbWQx MjhSZWcpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgi UFBDNjQ6IE5ZSSBTSU1EIHJlZHVjZSBvcCIpOworKyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0V2FzbVJlZHVjZUFuZEJyYW5jaFNpbWQxMjgoCisrICAgIExXYXNtUmVkdWNlQW5k QnJhbmNoU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdp c3RlcihpbnMtPnNyYygpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OworKyAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3dpdGNoIChpbnMtPnNp bWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4QW55VHJ1ZToKKysgICAgICBt YXNtLmFueVRydWVTaW1kMTI4KHNyYywgdG1wKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk4eDE2QWxsVHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJbnQ4eDE2KHNy YywgdG1wKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWxs VHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJbnQxNng4KHNyYywgdG1wKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0QWxsVHJ1ZToKKysgICAgICBtYXNtLmFs bFRydWVJbnQzMng0KHNyYywgdG1wKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk2NHgyQWxsVHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJbnQ2NHgyKHNyYywgdG1w KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2Qml0bWFzazoK KysgICAgICBtYXNtLmJpdG1hc2tJbnQ4eDE2KHNyYywgdG1wLCBTY3JhdGNoU2ltZDEyOFJlZyk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEJpdG1hc2s6Cisr ICAgICAgbWFzbS5iaXRtYXNrSW50MTZ4OChzcmMsIHRtcCwgU2NyYXRjaFNpbWQxMjhSZWcpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRCaXRtYXNrOgorKyAg ICAgIG1hc20uYml0bWFza0ludDMyeDQoc3JjLCB0bXAsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQml0bWFzazoKKysgICAg ICBtYXNtLmJpdG1hc2tJbnQ2NHgyKHNyYywgdG1wLCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAg ICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJ TUQgcmVkdWNlLWFuZC1icmFuY2ggb3AiKTsKKysgIH0KKysgIG1hc20uYXNfY21wZGkodG1wLCAw KTsKKysgIC8vIEJyYW5jaCB0byBpZlRydWUgaWYgbm9uemVybywgZmFsbCB0aHJvdWdoIHRvIGlm RmFsc2UuCisrICBMYWJlbCogaWZUcnVlID0gc2tpcFRyaXZpYWxCbG9ja3MoaW5zLT5pZlRydWUo KSktPmxpcigpLT5sYWJlbCgpOworKyAgTGFiZWwqIGlmRmFsc2UgPSBza2lwVHJpdmlhbEJsb2Nr cyhpbnMtPmlmRmFsc2UoKSktPmxpcigpLT5sYWJlbCgpOworKyAgbWFzbS5tYV9iKEFzc2VtYmxl cjo6Tm90RXF1YWwsIGlmVHJ1ZSk7CisrICBtYXNtLmp1bXAoaWZGYWxzZSk7CisrfQorK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUmVkdWNlU2ltZDEyOFRvSW50NjQoCisrICAgIExXYXNt UmVkdWNlU2ltZDEyOFRvSW50NjQqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7CisrICBSZWdpc3RlcjY0IGRlc3QgPSBUb091dFJlZ2lz dGVyNjQoaW5zKTsKKysgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk2NHgyRXh0cmFjdExhbmU6CisrICAgICAgbWFzbS5leHRyYWN0TGFu ZUludDY0eDIoaW5zLT5taXIoKS0+aW1tKCksIHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgcmVkdWNlLXRv LWludDY0IG9wIik7CisrICB9CisrfQorK3N0YXRpYyBpbmxpbmUgd2FzbTo6TWVtb3J5QWNjZXNz RGVzYyBEZXJpdmVNZW1vcnlBY2Nlc3NEZXNjKAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nl c3NEZXNjJiBhY2Nlc3MsIFNjYWxhcjo6VHlwZSB0eXBlKSB7CisrICByZXR1cm4gd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyhhY2Nlc3MubWVtb3J5SW5kZXgoKSwgdHlwZSwgYWNjZXNzLmFsaWduKCks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mub2Zmc2V0MzIoKSwgYWNj ZXNzLnRyYXBEZXNjKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mu aXNIdWdlTWVtb3J5KCkpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUxv YWRMYW5lU2ltZDEyOChMV2FzbUxvYWRMYW5lU2ltZDEyOCogaW5zKSB7CisrICBjb25zdCBNV2Fz bUxvYWRMYW5lU2ltZDEyOCogbWlyID0gaW5zLT5taXIoKTsKKysgIFJlZ2lzdGVyIG1lbW9yeUJh c2UgPSBUb1JlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgpKTsKKysgIFJlZ2lzdGVyIHB0ciA9IFRv UmVnaXN0ZXIoaW5zLT5wdHIoKSk7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdp c3RlcihpbnMtPnNyYygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPm91dHB1dCgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OworKyAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbWFzbS5tb3ZlU2ltZDEy OChzcmMsIGRlc3QpOworKyAgc3dpdGNoIChtaXItPmxhbmVTaXplKCkpIHsKKysgICAgY2FzZSAx OgorKyAgICAgIG1hc20ud2FzbUxvYWQoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2Vz cygpLCBTY2FsYXI6OkludDgpLAorKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgcHRy LCBwdHIsIEFueVJlZ2lzdGVyKHRtcCkpOworKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQ4eDE2 KG1pci0+bGFuZUluZGV4KCksIHRtcCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug MjoKKysgICAgICBtYXNtLndhc21Mb2FkKERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nl c3MoKSwgU2NhbGFyOjpJbnQxNiksCisrICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNlLCBw dHIsIHB0ciwgQW55UmVnaXN0ZXIodG1wKSk7CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDE2 eDgobWlyLT5sYW5lSW5kZXgoKSwgdG1wLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSA0OgorKyAgICAgIG1hc20ud2FzbUxvYWQoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFj Y2VzcygpLCBTY2FsYXI6OkludDMyKSwKKysgICAgICAgICAgICAgICAgICAgIG1lbW9yeUJhc2Us IHB0ciwgcHRyLCBBbnlSZWdpc3Rlcih0bXApKTsKKysgICAgICBtYXNtLnJlcGxhY2VMYW5lSW50 MzJ4NChtaXItPmxhbmVJbmRleCgpLCB0bXAsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIDg6IHsKKysgICAgICBtYXNtLndhc21Mb2FkSTY0KERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2Mo bWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQ2NCksCisrICAgICAgICAgICAgICAgICAgICAgICBt ZW1vcnlCYXNlLCBwdHIsIHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQo dG1wKSk7CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDY0eDIobWlyLT5sYW5lSW5kZXgoKSwg UmVnaXN0ZXI2NCh0bXApLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBkZWZh dWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBsYW5lIHNpemUiKTsKKysgIH0KKyt9 Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZUxhbmVTaW1kMTI4KExXYXNtU3Rv cmVMYW5lU2ltZDEyOCogaW5zKSB7CisrICBjb25zdCBNV2FzbVN0b3JlTGFuZVNpbWQxMjgqIG1p ciA9IGlucy0+bWlyKCk7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMt Pm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkp OworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHRtcCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIHN3aXRjaCAobWlyLT5sYW5lU2l6ZSgpKSB7CisrICAgIGNh c2UgMToKKysgICAgICBtYXNtLnVuc2lnbmVkRXh0cmFjdExhbmVJbnQ4eDE2KG1pci0+bGFuZUlu ZGV4KCksIHNyYywgdG1wKTsKKysgICAgICBtYXNtLndhc21TdG9yZShEZXJpdmVNZW1vcnlBY2Nl c3NEZXNjKG1pci0+YWNjZXNzKCksIFNjYWxhcjo6SW50OCksCisrICAgICAgICAgICAgICAgICAg ICAgQW55UmVnaXN0ZXIodG1wKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIDI6CisrICAgICAgbWFzbS51bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OCht aXItPmxhbmVJbmRleCgpLCBzcmMsIHRtcCk7CisrICAgICAgbWFzbS53YXNtU3RvcmUoRGVyaXZl TWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6OkludDE2KSwKKysgICAgICAg ICAgICAgICAgICAgICBBbnlSZWdpc3Rlcih0bXApLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDoKKysgICAgICBtYXNtLmV4dHJhY3RMYW5lSW50MzJ4 NChtaXItPmxhbmVJbmRleCgpLCBzcmMsIHRtcCk7CisrICAgICAgbWFzbS53YXNtU3RvcmUoRGVy aXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6OkludDMyKSwKKysgICAg ICAgICAgICAgICAgICAgICBBbnlSZWdpc3Rlcih0bXApLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgODoKKysgICAgICBtYXNtLmV4dHJhY3RMYW5lSW50 NjR4MihtaXItPmxhbmVJbmRleCgpLCBzcmMsIFJlZ2lzdGVyNjQodG1wKSk7CisrICAgICAgbWFz bS53YXNtU3RvcmVJNjQoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2Fs YXI6OkludDY0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0KHRtcCksIG1l bW9yeUJhc2UsIHB0ciwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAg ICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgbGFuZSBzaXplIik7CisrICB9CisrfQorKworK30gIC8v IG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKK2RpZmYgLS1naXQgYS9qcy9zcmMv aml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdl bmVyYXRvci1wcGM2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAw Li4zNDE0ZWNlYjVhYzQKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQ29k ZUdlbmVyYXRvci1wcGM2NC5oCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIC0qLSBNb2RlOiBDKys7 IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt Ki0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3Vy Y2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1Ymxp YworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0 cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDov L21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X0NvZGVHZW5l cmF0b3JfcHBjNjRfaAorKyNkZWZpbmUgaml0X3BwYzY0X0NvZGVHZW5lcmF0b3JfcHBjNjRfaAor KworKyNpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCisrI2luY2x1ZGUgImpp dC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuaCIKKysKKytuYW1lc3BhY2UganMgeworK25h bWVzcGFjZSBqaXQgeworKworK2NsYXNzIENvZGVHZW5lcmF0b3JQUEM2NDsKKytjbGFzcyBPdXRP ZkxpbmVUYWJsZVN3aXRjaDsKKysKKyt1c2luZyBPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayA9 CisrICAgIE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrQmFzZTxDb2RlR2VuZXJhdG9yUFBDNjQ+ OworKworK2NsYXNzIENvZGVHZW5lcmF0b3JQUEM2NCA6IHB1YmxpYyBDb2RlR2VuZXJhdG9yU2hh cmVkIHsKKysgIGZyaWVuZCBjbGFzcyBNb3ZlUmVzb2x2ZXJQUEM2NDsKKysKKysgcHJvdGVjdGVk OgorKyAgQ29kZUdlbmVyYXRvclBQQzY0KE1JUkdlbmVyYXRvciogZ2VuLCBMSVJHcmFwaCogZ3Jh cGgsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdh c206OkNvZGVNZXRhZGF0YSogY29kZU1ldGEpOworKworKyAgTm9uQXNzZXJ0aW5nTGFiZWwgZGVv cHRMYWJlbF87CisrCisrICBPcGVyYW5kIFRvT3BlcmFuZChjb25zdCBMQWxsb2NhdGlvbiYgYSk7 CisrICBPcGVyYW5kIFRvT3BlcmFuZChjb25zdCBMQWxsb2NhdGlvbiogYSk7CisrICBNb3ZlT3Bl cmFuZCB0b01vdmVPcGVyYW5kKExBbGxvY2F0aW9uIGEpIGNvbnN0OworKworKyAgdGVtcGxhdGUg PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKysgIHZvaWQgYmFpbG91dENtcDMyKEFzc2VtYmxl cjo6Q29uZGl0aW9uIGMsIFQxIGxocywgVDIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgTFNu YXBzaG90KiBzbmFwc2hvdCkgeworKyAgICBMYWJlbCBiYWlsOworKyAgICBtYXNtLmJyYW5jaDMy KGMsIGxocywgcmhzLCAmYmFpbCk7CisrICAgIGJhaWxvdXRGcm9tKCZiYWlsLCBzbmFwc2hvdCk7 CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorKyAgdm9pZCBi YWlsb3V0Q21wUHRyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMsIFQxIGxocywgVDIgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgIExTbmFwc2hvdCogc25hcHNob3QpIHsKKysgICAgTGFiZWwgYmFp bDsKKysgICAgbWFzbS5icmFuY2hQdHIoYywgbGhzLCByaHMsICZiYWlsKTsKKysgICAgYmFpbG91 dEZyb20oJmJhaWwsIHNuYXBzaG90KTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg dHlwZW5hbWUgVDI+CisrICB2b2lkIGJhaWxvdXRUZXN0MzIoQXNzZW1ibGVyOjpDb25kaXRpb24g YywgVDEgbGhzLCBUMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgTFNuYXBzaG90KiBzbmFw c2hvdCkgeworKyAgICBMYWJlbCBiYWlsOworKyAgICBtYXNtLmJyYW5jaFRlc3QzMihjLCBsaHMs IHJocywgJmJhaWwpOworKyAgICBiYWlsb3V0RnJvbSgmYmFpbCwgc25hcHNob3QpOworKyAgfQor KyAgdm9pZCBiYWlsb3V0SWZGYWxzZUJvb2woUmVnaXN0ZXIgbGhzLCBMU25hcHNob3QqIHNuYXBz aG90KTsKKysgIHZvaWQgYmFpbG91dEZyb20oTGFiZWwqIGxhYmVsLCBMU25hcHNob3QqIHNuYXBz aG90KTsKKysgIHZvaWQgYmFpbG91dChMU25hcHNob3QqIHNuYXBzaG90KTsKKysKKysgcHJvdGVj dGVkOgorKyAgYm9vbCBnZW5lcmF0ZU91dE9mTGluZUNvZGUoKTsKKysgIHZvaWQgYnJhbmNoVG9C bG9jayhNQmFzaWNCbG9jayogYmxvY2spOworKworKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisr ICB2b2lkIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIg bGhzLCBUIHJocywKKysgICAgICAgICAgICAgICAgICAgICBNQmFzaWNCbG9jayogbWlyKSB7Cisr ICAgIExhYmVsKiBsYWJlbCA9IHNraXBUcml2aWFsQmxvY2tzKG1pciktPmxpcigpLT5sYWJlbCgp OworKyAgICBtYXNtLmJyYW5jaDMyKGNvbmQsIGxocywgcmhzLCBsYWJlbCk7CisrICB9CisrICB2 b2lkIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRmxvYXRS ZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIE1C YXNpY0Jsb2NrKiBtaXIpOworKyAgdm9pZCBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RmxvYXRG b3JtYXQgZm10LAorKyAgICAgICAgICAgICAgICAgICAgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0 aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgcmhzLCBNQmFzaWNCbG9jayogbWlyKTsKKysKKysgIHZvaWQgZW1pdFRhYmxlU3dp dGNoRGlzcGF0Y2goTVRhYmxlU3dpdGNoKiBtaXIsIFJlZ2lzdGVyIGluZGV4LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBiYXNlKTsKKysKKysgIHZvaWQgZW1pdEJp Z0ludFB0ckRpdihMQmlnSW50UHRyRGl2KiBpbnMsIFJlZ2lzdGVyIGRpdmlkZW5kLCBSZWdpc3Rl ciBkaXZpc29yLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCk7Cisr ICB2b2lkIGVtaXRCaWdJbnRQdHJNb2QoTEJpZ0ludFB0ck1vZCogaW5zLCBSZWdpc3RlciBkaXZp ZGVuZCwgUmVnaXN0ZXIgZGl2aXNvciwKKysgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBvdXRwdXQpOworKworKyAgdm9pZCBnZW5lcmF0ZUludmFsaWRhdGVFcGlsb2d1ZSgpOworKwor KyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICB2b2lkIGVtaXRXYXNtTG9hZChUKiBsaXIpOwor KyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICB2b2lkIGVtaXRXYXNtU3RvcmUoVCogbGlyKTsK KysKKysgcHVibGljOgorKyAgdm9pZCB2aXNpdE91dE9mTGluZVRhYmxlU3dpdGNoKE91dE9mTGlu ZVRhYmxlU3dpdGNoKiBvb2wpOworKyAgdm9pZCB2aXNpdE91dE9mTGluZVdhc21UcnVuY2F0ZUNo ZWNrKE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKiBvb2wpOworK307CisrCisrdHlwZWRlZiBD b2RlR2VuZXJhdG9yUFBDNjQgQ29kZUdlbmVyYXRvclNwZWNpZmljOworKworK30gIC8vIG5hbWVz cGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysjZW5kaWYgLyogaml0X3BwYzY0X0Nv ZGVHZW5lcmF0b3JfcHBjNjRfaCAqLworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTElS LXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi42ODY4NzUwNTYxMjcKKy0tLSAvZGV2L251bGwKKysr KyBiL2pzL3NyYy9qaXQvcHBjNjQvTElSLXBwYzY0LmgKK0BAIC0wLDAgKzEsMTM1IEBACisrLyog LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz aWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoK KysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl IE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWlu IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRf cHBjNjRfTElSX3BwYzY0X2gKKysjZGVmaW5lIGppdF9wcGM2NF9MSVJfcHBjNjRfaAorKworK25h bWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrY2xhc3MgTFVuYm94IDogcHVibGlj IExJbnN0cnVjdGlvbkhlbHBlcjwxLCBCT1hfUElFQ0VTLCAwPiB7CisrIHB1YmxpYzoKKysgIExJ Ul9IRUFERVIoVW5ib3gpOworKworKyAgZXhwbGljaXQgTFVuYm94KGNvbnN0IExBbGxvY2F0aW9u JiBpbnB1dCkgOiBMSW5zdHJ1Y3Rpb25IZWxwZXIoY2xhc3NPcGNvZGUpIHsKKysgICAgc2V0T3Bl cmFuZCgwLCBpbnB1dCk7CisrICB9CisrCisrICBzdGF0aWMgY29uc3Qgc2l6ZV90IElucHV0ID0g MDsKKysKKysgIExCb3hBbGxvY2F0aW9uIGlucHV0KCkgY29uc3QgeyByZXR1cm4gZ2V0Qm94T3Bl cmFuZChJbnB1dCk7IH0KKysKKysgIE1VbmJveCogbWlyKCkgY29uc3QgeyByZXR1cm4gbWlyXy0+ dG9VbmJveCgpOyB9CisrICBjb25zdCBjaGFyKiBleHRyYU5hbWUoKSBjb25zdCB7IHJldHVybiBT dHJpbmdGcm9tTUlSVHlwZShtaXIoKS0+dHlwZSgpKTsgfQorK307CisrCisrY2xhc3MgTFVEaXZP ck1vZCA6IHB1YmxpYyBMQmluYXJ5TWF0aDwwPiB7CisrIHB1YmxpYzoKKysgIExJUl9IRUFERVIo VURpdk9yTW9kKTsKKysKKysgIExVRGl2T3JNb2QoKSA6IExCaW5hcnlNYXRoKGNsYXNzT3Bjb2Rl KSB7fQorKworKyAgTUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qIG1pcigpIGNvbnN0IHsKKysgICAg TU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOworKyAgICByZXR1cm4g c3RhdGljX2Nhc3Q8TUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qPihtaXJfKTsKKysgIH0KKysKKysg IGJvb2wgY2FuQmVEaXZpZGVCeVplcm8oKSBjb25zdCB7CisrICAgIGlmIChtaXJfLT5pc01vZCgp KSB7CisrICAgICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Cisr ICAgIH0KKysgICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Cisr ICB9CisrCisrICBib29sIHRyYXBPbkVycm9yKCkgY29uc3QgeworKyAgICBpZiAobWlyXy0+aXNN b2QoKSkgeworKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT50cmFwT25FcnJvcigpOworKyAg ICB9CisrICAgIHJldHVybiBtaXJfLT50b0RpdigpLT50cmFwT25FcnJvcigpOworKyAgfQorKwor KyAgd2FzbTo6VHJhcFNpdGVEZXNjIHRyYXBTaXRlRGVzYygpIGNvbnN0IHsKKysgICAgTU9aX0FT U0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOworKyAgICBpZiAobWlyXy0+aXNN b2QoKSkgeworKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT50cmFwU2l0ZURlc2MoKTsKKysg ICAgfQorKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+dHJhcFNpdGVEZXNjKCk7CisrICB9Cisr fTsKKysKKytjbGFzcyBMRGl2T3JNb2RJNjQgOiBwdWJsaWMgTEJpbmFyeU1hdGg8MD4geworKyBw dWJsaWM6CisrICBMSVJfSEVBREVSKERpdk9yTW9kSTY0KTsKKysKKysgIExEaXZPck1vZEk2NChj b25zdCBMQWxsb2NhdGlvbiYgbGhzLCBjb25zdCBMQWxsb2NhdGlvbiYgcmhzKQorKyAgICAgIDog TEJpbmFyeU1hdGgoY2xhc3NPcGNvZGUpIHsKKysgICAgc2V0T3BlcmFuZCgwLCBsaHMpOworKyAg ICBzZXRPcGVyYW5kKDEsIHJocyk7CisrICB9CisrCisrICBNQmluYXJ5QXJpdGhJbnN0cnVjdGlv biogbWlyKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKG1pcl8tPmlzRGl2KCkgfHwgbWlyXy0+ aXNNb2QoKSk7CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDxNQmluYXJ5QXJpdGhJbnN0cnVjdGlv bio+KG1pcl8pOworKyAgfQorKworKyAgYm9vbCBjYW5CZURpdmlkZUJ5WmVybygpIGNvbnN0IHsK KysgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsKKysgICAgICByZXR1cm4gbWlyXy0+dG9Nb2QoKS0+ Y2FuQmVEaXZpZGVCeVplcm8oKTsKKysgICAgfQorKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+ Y2FuQmVEaXZpZGVCeVplcm8oKTsKKysgIH0KKysgIGJvb2wgY2FuQmVOZWdhdGl2ZU92ZXJmbG93 KCkgY29uc3QgeworKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgeworKyAgICAgIHJldHVybiBtaXJf LT50b01vZCgpLT5jYW5CZU5lZ2F0aXZlRGl2aWRlbmQoKTsKKysgICAgfQorKyAgICByZXR1cm4g bWlyXy0+dG9EaXYoKS0+Y2FuQmVOZWdhdGl2ZU92ZXJmbG93KCk7CisrICB9CisrICB3YXNtOjpU cmFwU2l0ZURlc2MgdHJhcFNpdGVEZXNjKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKG1pcl8t PmlzRGl2KCkgfHwgbWlyXy0+aXNNb2QoKSk7CisrICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Cisr ICAgICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPnRyYXBTaXRlRGVzYygpOworKyAgICB9CisrICAg IHJldHVybiBtaXJfLT50b0RpdigpLT50cmFwU2l0ZURlc2MoKTsKKysgIH0KKyt9OworKworK2Ns YXNzIExVRGl2T3JNb2RJNjQgOiBwdWJsaWMgTEJpbmFyeU1hdGg8MD4geworKyBwdWJsaWM6Cisr ICBMSVJfSEVBREVSKFVEaXZPck1vZEk2NCk7CisrCisrICBMVURpdk9yTW9kSTY0KGNvbnN0IExB bGxvY2F0aW9uJiBsaHMsIGNvbnN0IExBbGxvY2F0aW9uJiByaHMpCisrICAgICAgOiBMQmluYXJ5 TWF0aChjbGFzc09wY29kZSkgeworKyAgICBzZXRPcGVyYW5kKDAsIGxocyk7CisrICAgIHNldE9w ZXJhbmQoMSwgcmhzKTsKKysgIH0KKysKKysgIGNvbnN0IGNoYXIqIGV4dHJhTmFtZSgpIGNvbnN0 IHsKKysgICAgcmV0dXJuIG1pcigpLT5pc1RydW5jYXRlZCgpID8gIlRydW5jYXRlZCIgOiBudWxs cHRyOworKyAgfQorKworKyAgTUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qIG1pcigpIGNvbnN0IHsK KysgICAgTU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOworKyAgICBy ZXR1cm4gc3RhdGljX2Nhc3Q8TUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qPihtaXJfKTsKKysgIH0K KysgIGJvb2wgY2FuQmVEaXZpZGVCeVplcm8oKSBjb25zdCB7CisrICAgIGlmIChtaXJfLT5pc01v ZCgpKSB7CisrICAgICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7 CisrICAgIH0KKysgICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7 CisrICB9CisrICB3YXNtOjpUcmFwU2l0ZURlc2MgdHJhcFNpdGVEZXNjKCkgY29uc3QgeworKyAg ICBNT1pfQVNTRVJUKG1pcl8tPmlzRGl2KCkgfHwgbWlyXy0+aXNNb2QoKSk7CisrICAgIGlmICht aXJfLT5pc01vZCgpKSB7CisrICAgICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPnRyYXBTaXRlRGVz YygpOworKyAgICB9CisrICAgIHJldHVybiBtaXJfLT50b0RpdigpLT50cmFwU2l0ZURlc2MoKTsK KysgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMK KysKKysjZW5kaWYgLyogaml0X3BwYzY0X0xJUl9wcGM2NF9oICovCitkaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L0xvd2Vy aW5nLXBwYzY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4u YmUwZWFkMTlkMjczCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0xvd2Vy aW5nLXBwYzY0LmNwcAorQEAgLTAsMCArMSwxMzI0IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFi LXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQor KyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBD b2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisr ICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1 dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96 aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2luY2x1ZGUgImppdC9wcGM2NC9Mb3dlcmluZy1w cGM2NC5oIgorKworKyNpbmNsdWRlICJtb3ppbGxhL01hdGhBbGdvcml0aG1zLmgiCisrCisrI2lu Y2x1ZGUgImppdC9Mb3dlcmluZy5oIgorKyNpbmNsdWRlICJqaXQvTUlSLXdhc20uaCIKKysjaW5j bHVkZSAiaml0L01JUi5oIgorKyNpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0Lmgi CisrI2luY2x1ZGUgIndhc20vV2FzbUZlYXR1cmVzLmgiICAvLyBmb3Igd2FzbTo6UmVwb3J0U2lt ZEFuYWx5c2lzCisrCisrI2luY2x1ZGUgImppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVkLWlubC5o IgorKworK3VzaW5nIG5hbWVzcGFjZSBqczsKKyt1c2luZyBuYW1lc3BhY2UganM6OmppdDsKKysK Kyt1c2luZyBtb3ppbGxhOjpGbG9vckxvZzI7CisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3Bh Y2Ugaml0IHsKKysKKytMVGFibGVTd2l0Y2gqIExJUkdlbmVyYXRvclBQQzY0OjpuZXdMVGFibGVT d2l0Y2goY29uc3QgTEFsbG9jYXRpb24mIGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMRGVmaW5pdGlvbiYgaW5wdXRDb3B5KSB7Cisr ICByZXR1cm4gbmV3IChhbGxvYygpKSBMVGFibGVTd2l0Y2goaW4sIGlucHV0Q29weSwgdGVtcCgp KTsKKyt9CisrCisrTFRhYmxlU3dpdGNoViogTElSR2VuZXJhdG9yUFBDNjQ6Om5ld0xUYWJsZVN3 aXRjaFYoY29uc3QgTEJveEFsbG9jYXRpb24mIGluKSB7CisrICByZXR1cm4gbmV3IChhbGxvYygp KSBMVGFibGVTd2l0Y2hWKGluLCB0ZW1wKCksIHRlbXBEb3VibGUoKSwgdGVtcCgpKTsKKyt9Cisr Cisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JTaGlmdChMSW5zdHJ1Y3Rpb25IZWxw ZXI8MSwgMiwgMD4qIGlucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKSB7CisrICBsb3dlckZvckFMVShp bnMsIG1pciwgbGhzLCByaHMpOworK30KKysKKyt0ZW1wbGF0ZSA8Y2xhc3MgTEluc3RyPgorK3Zv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yU2hpZnRJbnQ2NChMSW5zdHIqIGlucywgTURl ZmluaXRpb24qIG1pciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTURlZmluaXRpb24qIGxocywgTURlZmluaXRpb24qIHJocykgeworKyAgaWYgY29uc3RleHBy IChzdGQ6OmlzX3NhbWVfdjxMSW5zdHIsIExTaGlmdEk2ND4pIHsKKysgICAgaW5zLT5zZXRMaHMo dXNlSW50NjRSZWdpc3RlckF0U3RhcnQobGhzKSk7CisrICAgIGlucy0+c2V0UmhzKHVzZVJlZ2lz dGVyT3JDb25zdGFudEF0U3RhcnQocmhzKSk7CisrICB9IGVsc2UgeworKyAgICBpbnMtPnNldElu cHV0KHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KGxocykpOworKyAgICBpbnMtPnNldENvdW50KHVz ZVJlZ2lzdGVyT3JDb25zdGFudEF0U3RhcnQocmhzKSk7CisrICB9CisrICBkZWZpbmVJbnQ2NChp bnMsIG1pcik7CisrfQorKworK3RlbXBsYXRlIHZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2Vy Rm9yU2hpZnRJbnQ2NChMU2hpZnRJNjQqIGlucywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TURlZmluaXRpb24qIHJocyk7CisrdGVtcGxhdGUgdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93 ZXJGb3JTaGlmdEludDY0KExSb3RhdGVJNjQqIGlucywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24q IGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTURlZmluaXRpb24qIHJocyk7CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJG b3JBTFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDEsIDA+KiBpbnMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGlucHV0 KSB7CisrICBpbnMtPnNldE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucHV0KSk7Cisr ICBkZWZpbmUoaW5zLCBtaXIpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dl ckZvckFMVShMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlucywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMp IHsKKysgIGlucy0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3RhcnQobGhzKSk7CisrICBp bnMtPnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0ZXJPckNvbnN0YW50QXRTdGFydChyaHMpKTsKKysg IGRlZmluZShpbnMsIG1pcik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2Vy Rm9yQUxVSW50NjQoCisrICAgIExJbnN0cnVjdGlvbkhlbHBlcjxJTlQ2NF9QSUVDRVMsIElOVDY0 X1BJRUNFUywgMD4qIGlucywgTURlZmluaXRpb24qIG1pciwKKysgICAgTURlZmluaXRpb24qIGlu cHV0KSB7CisrICBpbnMtPnNldEludDY0T3BlcmFuZCgwLCB1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFy dChpbnB1dCkpOworKyAgZGVmaW5lSW50NjQoaW5zLCBtaXIpOworK30KKysKKyt2b2lkIExJUkdl bmVyYXRvclBQQzY0Ojpsb3dlckZvckFMVUludDY0KAorKyAgICBMSW5zdHJ1Y3Rpb25IZWxwZXI8 SU5UNjRfUElFQ0VTLCAyICogSU5UNjRfUElFQ0VTLCAwPiogaW5zLAorKyAgICBNRGVmaW5pdGlv biogbWlyLCBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhzKSB7CisrICBpbnMtPnNl dEludDY0T3BlcmFuZCgwLCB1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydChsaHMpKTsKKysgIGlucy0+ c2V0SW50NjRPcGVyYW5kKElOVDY0X1BJRUNFUywgdXNlSW50NjRSZWdpc3Rlck9yQ29uc3RhbnRB dFN0YXJ0KHJocykpOworKyAgZGVmaW5lSW50NjQoaW5zLCBtaXIpOworK30KKysKKyt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvck11bEludDY0KExNdWxJNjQqIGlucywgTU11bCogbWly LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24q IGxocywgTURlZmluaXRpb24qIHJocykgeworKyAgbG93ZXJGb3JBTFVJbnQ2NChpbnMsIG1pciwg bGhzLCByaHMpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckZQVShM SW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMSwgMD4qIGlucywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogaW5wdXQpIHsKKysg IGlucy0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3RhcnQoaW5wdXQpKTsKKysgIGRlZmlu ZShpbnMsIG1pcik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yRlBV KExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiogaW5zLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIHJocykgeworKyAg aW5zLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lzdGVyQXRTdGFydChsaHMpKTsKKysgIGlucy0+c2V0 T3BlcmFuZCgxLCB1c2VSZWdpc3RlckF0U3RhcnQocmhzKSk7CisrICBkZWZpbmUoaW5zLCBtaXIp OworK30KKysKKytMQm94QWxsb2NhdGlvbiBMSVJHZW5lcmF0b3JQUEM2NDo6dXNlQm94Rml4ZWQo TURlZmluaXRpb24qIG1pciwgUmVnaXN0ZXIgcmVnMSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVnMiwgYm9vbCB1c2VBdFN0YXJ0KSB7 CisrICBNT1pfQVNTRVJUKG1pci0+dHlwZSgpID09IE1JUlR5cGU6OlZhbHVlKTsKKysKKysgIGVu c3VyZURlZmluZWQobWlyKTsKKysgIHJldHVybiBMQm94QWxsb2NhdGlvbihMVXNlKHJlZzEsIG1p ci0+dmlydHVhbFJlZ2lzdGVyKCksIHVzZUF0U3RhcnQpKTsKKyt9CisrCisrTEFsbG9jYXRpb24g TElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJ5dGVPcFJlZ2lzdGVyKE1EZWZpbml0aW9uKiBtaXIpIHsK KysgIHJldHVybiB1c2VSZWdpc3RlcihtaXIpOworK30KKysKKytMQWxsb2NhdGlvbiBMSVJHZW5l cmF0b3JQUEM2NDo6dXNlQnl0ZU9wUmVnaXN0ZXJBdFN0YXJ0KE1EZWZpbml0aW9uKiBtaXIpIHsK KysgIHJldHVybiB1c2VSZWdpc3RlckF0U3RhcnQobWlyKTsKKyt9CisrCisrTEFsbG9jYXRpb24g TElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJ5dGVPcFJlZ2lzdGVyT3JOb25Eb3VibGVDb25zdGFudCgK KysgICAgTURlZmluaXRpb24qIG1pcikgeworKyAgcmV0dXJuIHVzZVJlZ2lzdGVyT3JOb25Eb3Vi bGVDb25zdGFudChtaXIpOworK30KKysKKytMRGVmaW5pdGlvbiBMSVJHZW5lcmF0b3JQUEM2NDo6 dGVtcEJ5dGVPcFJlZ2lzdGVyKCkgeyByZXR1cm4gdGVtcCgpOyB9CisrCisrTERlZmluaXRpb24g TElSR2VuZXJhdG9yUFBDNjQ6OnRlbXBUb1VuYm94KCkgeyByZXR1cm4gdGVtcCgpOyB9CisrCisr dm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJVbnR5cGVkUGhpSW5wdXQoTVBoaSogcGhpLCB1 aW50MzJfdCBpbnB1dFBvc2l0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExCbG9jayogYmxvY2ssIHNpemVfdCBsaXJJbmRleCkgeworKyAgbG93ZXJU eXBlZFBoaUlucHV0KHBoaSwgaW5wdXRQb3NpdGlvbiwgYmxvY2ssIGxpckluZGV4KTsKKyt9Cisr Cisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJJbnQ2NFBoaUlucHV0KE1QaGkqIHBoaSwg dWludDMyX3QgaW5wdXRQb3NpdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTEJsb2NrKiBibG9jaywgc2l6ZV90IGxpckluZGV4KSB7CisrICBsb3dlclR5 cGVkUGhpSW5wdXQocGhpLCBpbnB1dFBvc2l0aW9uLCBibG9jaywgbGlySW5kZXgpOworK30KKysK Kyt2b2lkIExJUkdlbmVyYXRvclBQQzY0OjpkZWZpbmVJbnQ2NFBoaShNUGhpKiBwaGksIHNpemVf dCBsaXJJbmRleCkgeworKyAgZGVmaW5lVHlwZWRQaGkocGhpLCBsaXJJbmRleCk7CisrfQorKwor K3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyTXVsSShNTXVsKiBtdWwsIE1EZWZpbml0aW9u KiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBy aHMpIHsKKysgIExNdWxJKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExNdWxJOworKyAgaWYgKG11bC0+ ZmFsbGlibGUoKSkgeworKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIG11bC0+YmFpbG91dEtpbmQo KSk7CisrICB9CisrICBpZiAobXVsLT5jYW5CZU5lZ2F0aXZlWmVybygpICYmICFyaHMtPmlzQ29u c3RhbnQoKSkgeworKyAgICBsaXItPnNldE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXIobGhzKSk7Cisr ICAgIGxpci0+c2V0T3BlcmFuZCgxLCB1c2VSZWdpc3RlcihyaHMpKTsKKysgICAgZGVmaW5lKGxp ciwgbXVsKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbG93ZXJGb3JBTFUobGlyLCBtdWwsIGxo cywgcmhzKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJEaXZJKE1EaXYq IGRpdikgeworKyAgaWYgKGRpdi0+cmhzKCktPmlzQ29uc3RhbnQoKSkgeworKyAgICBpbnQzMl90 IHJocyA9IGRpdi0+cmhzKCktPnRvQ29uc3RhbnQoKS0+dG9JbnQzMigpOworKyAgICBpbnQzMl90 IHNoaWZ0ID0gRmxvb3JMb2cyKHVpbnQzMl90KHJocykpOworKyAgICBpZiAocmhzID4gMCAmJiAx IDw8IHNoaWZ0ID09IHJocykgeworKyAgICAgIExEaXZQb3dUd29JKiBsaXIgPQorKyAgICAgICAg ICBuZXcgKGFsbG9jKCkpIExEaXZQb3dUd29JKHVzZVJlZ2lzdGVyKGRpdi0+bGhzKCkpLCBzaGlm dCk7CisrICAgICAgaWYgKGRpdi0+ZmFsbGlibGUoKSkgeworKyAgICAgICAgYXNzaWduU25hcHNo b3QobGlyLCBkaXYtPmJhaWxvdXRLaW5kKCkpOworKyAgICAgIH0KKysgICAgICBkZWZpbmUobGly LCBkaXYpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgfQorKyAgTERpdkkqIGxpciA9IG5l dyAoYWxsb2MoKSkKKysgICAgICBMRGl2SSh1c2VSZWdpc3RlcihkaXYtPmxocygpKSwgdXNlUmVn aXN0ZXIoZGl2LT5yaHMoKSksIHRlbXAoKSk7CisrICBpZiAoZGl2LT5mYWxsaWJsZSgpKSB7Cisr ICAgIGFzc2lnblNuYXBzaG90KGxpciwgZGl2LT5iYWlsb3V0S2luZCgpKTsKKysgIH0KKysgIGRl ZmluZShsaXIsIGRpdik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRGl2 STY0KE1EaXYqIGRpdikgeworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgIExE aXZPck1vZEk2NCh1c2VSZWdpc3RlcihkaXYtPmxocygpKSwgdXNlUmVnaXN0ZXIoZGl2LT5yaHMo KSkpOworKyAgZGVmaW5lSW50NjQobGlyLCBkaXYpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRv clBQQzY0Ojpsb3dlck1vZEkoTU1vZCogbW9kKSB7CisrICBpZiAobW9kLT5yaHMoKS0+aXNDb25z dGFudCgpKSB7CisrICAgIGludDMyX3QgcmhzID0gbW9kLT5yaHMoKS0+dG9Db25zdGFudCgpLT50 b0ludDMyKCk7CisrICAgIGludDMyX3Qgc2hpZnQgPSBGbG9vckxvZzIodWludDMyX3QocmhzKSk7 CisrICAgIGlmIChyaHMgPiAwICYmIDEgPDwgc2hpZnQgPT0gcmhzKSB7CisrICAgICAgTE1vZFBv d1R3b0kqIGxpciA9CisrICAgICAgICAgIG5ldyAoYWxsb2MoKSkgTE1vZFBvd1R3b0kodXNlUmVn aXN0ZXIobW9kLT5saHMoKSksIHNoaWZ0KTsKKysgICAgICBpZiAobW9kLT5mYWxsaWJsZSgpKSB7 CisrICAgICAgICBhc3NpZ25TbmFwc2hvdChsaXIsIG1vZC0+YmFpbG91dEtpbmQoKSk7CisrICAg ICAgfQorKyAgICAgIGRlZmluZShsaXIsIG1vZCk7CisrICAgICAgcmV0dXJuOworKyAgICB9IGVs c2UgaWYgKHNoaWZ0IDwgMzEgJiYgKDEgPDwgKHNoaWZ0ICsgMSkpIC0gMSA9PSByaHMpIHsKKysg ICAgICBMTW9kTWFza0kqIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICAgICAgTE1vZE1hc2tJ KHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkpLCB0ZW1wKCksIHRlbXAoKSwgc2hpZnQgKyAxKTsKKysg ICAgICBpZiAobW9kLT5mYWxsaWJsZSgpKSB7CisrICAgICAgICBhc3NpZ25TbmFwc2hvdChsaXIs IG1vZC0+YmFpbG91dEtpbmQoKSk7CisrICAgICAgfQorKyAgICAgIGRlZmluZShsaXIsIG1vZCk7 CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICB9CisrICBhdXRvKiBsaXIgPQorKyAgICAgIG5l dyAoYWxsb2MoKSkgTE1vZEkodXNlUmVnaXN0ZXIobW9kLT5saHMoKSksIHVzZVJlZ2lzdGVyKG1v ZC0+cmhzKCkpKTsKKysgIGlmIChtb2QtPmZhbGxpYmxlKCkpIHsKKysgICAgYXNzaWduU25hcHNo b3QobGlyLCBtb2QtPmJhaWxvdXRLaW5kKCkpOworKyAgfQorKyAgZGVmaW5lKGxpciwgbW9kKTsK Kyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJNb2RJNjQoTU1vZCogbW9kKSB7 CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTERpdk9yTW9kSTY0KHVzZVJl Z2lzdGVyKG1vZC0+bGhzKCkpLCB1c2VSZWdpc3Rlcihtb2QtPnJocygpKSk7CisrICBkZWZpbmVJ bnQ2NChsaXIsIG1vZCk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVURp dihNRGl2KiBkaXYpIHsKKysgIE1EZWZpbml0aW9uKiBsaHMgPSBkaXYtPmdldE9wZXJhbmQoMCk7 CisrICBNRGVmaW5pdGlvbiogcmhzID0gZGl2LT5nZXRPcGVyYW5kKDEpOworKyAgTFVEaXZPck1v ZCogbGlyID0gbmV3IChhbGxvYygpKSBMVURpdk9yTW9kOworKyAgLy8gdXNlUmVnaXN0ZXJBdFN0 YXJ0OiBDb2RlR2VuZXJhdG9yLXBwYzY0J3MgdmlzaXRVRGl2T3JNb2QgemVyby1leHRlbmRzCisr ICAvLyBsaHMvcmhzIGludG8gdGhlaXIgb3duIHNsb3RzIGluIHBsYWNlIGJlZm9yZSB0aGUgMzIt Yml0IGRpdnd1LCBzbyB0aGUKKysgIC8vIGlucHV0cyBtdXN0IG5vdCBiZSByZXF1aXJlZCBsaXZl IGFmdGVyIHRoZSBMSVIgb3AgYmVnaW5zLgorKyAgbGlyLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lz dGVyQXRTdGFydChsaHMpKTsKKysgIGxpci0+c2V0T3BlcmFuZCgxLCB1c2VSZWdpc3RlckF0U3Rh cnQocmhzKSk7CisrICBpZiAoZGl2LT5mYWxsaWJsZSgpKSB7CisrICAgIGFzc2lnblNuYXBzaG90 KGxpciwgZGl2LT5iYWlsb3V0S2luZCgpKTsKKysgIH0KKysgIGRlZmluZShsaXIsIGRpdik7Cisr fQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVURpdkk2NChNRGl2KiBkaXYpIHsK KysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMVURpdk9yTW9kSTY0KHVzZVJl Z2lzdGVyKGRpdi0+bGhzKCkpLCB1c2VSZWdpc3RlcihkaXYtPnJocygpKSk7CisrICBkZWZpbmVJ bnQ2NChsaXIsIGRpdik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVU1v ZChNTW9kKiBtb2QpIHsKKysgIE1EZWZpbml0aW9uKiBsaHMgPSBtb2QtPmdldE9wZXJhbmQoMCk7 CisrICBNRGVmaW5pdGlvbiogcmhzID0gbW9kLT5nZXRPcGVyYW5kKDEpOworKyAgTFVEaXZPck1v ZCogbGlyID0gbmV3IChhbGxvYygpKSBMVURpdk9yTW9kOworKyAgLy8gU2VlIGxvd2VyVURpdiBh Ym92ZSBmb3Igd2h5IHVzZVJlZ2lzdGVyQXRTdGFydCBpcyByZXF1aXJlZCBoZXJlLgorKyAgbGly LT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lzdGVyQXRTdGFydChsaHMpKTsKKysgIGxpci0+c2V0T3Bl cmFuZCgxLCB1c2VSZWdpc3RlckF0U3RhcnQocmhzKSk7CisrICBpZiAobW9kLT5mYWxsaWJsZSgp KSB7CisrICAgIGFzc2lnblNuYXBzaG90KGxpciwgbW9kLT5iYWlsb3V0S2luZCgpKTsKKysgIH0K KysgIGRlZmluZShsaXIsIG1vZCk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxv d2VyVU1vZEk2NChNTW9kKiBtb2QpIHsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysg ICAgICBMVURpdk9yTW9kSTY0KHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkpLCB1c2VSZWdpc3Rlciht b2QtPnJocygpKSk7CisrICBkZWZpbmVJbnQ2NChsaXIsIG1vZCk7CisrfQorKworK3ZvaWQgTElS R2VuZXJhdG9yUFBDNjQ6Omxvd2VyVXJzaEQoTVVyc2gqIG1pcikgeworKyAgTURlZmluaXRpb24q IGxocyA9IG1pci0+bGhzKCk7CisrICBNRGVmaW5pdGlvbiogcmhzID0gbWlyLT5yaHMoKTsKKysg IE1PWl9BU1NFUlQobGhzLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOworKyAgTU9aX0FTU0VS VChyaHMtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFs bG9jKCkpIExVcnNoRCh1c2VSZWdpc3RlckF0U3RhcnQobGhzKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzZVJlZ2lzdGVyT3JDb25zdGFudEF0U3RhcnQocmhzKSwgdGVt cCgpKTsKKysgIGRlZmluZShsaXIsIG1pcik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBD NjQ6Omxvd2VyUG93T2ZUd29JKE1Qb3cqIG1pcikgeworKyAgaW50MzJfdCBiYXNlID0gbWlyLT5p bnB1dCgpLT50b0NvbnN0YW50KCktPnRvSW50MzIoKTsKKysgIE1EZWZpbml0aW9uKiBwb3dlciA9 IG1pci0+cG93ZXIoKTsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFBvd09mVHdvSSh1 c2VSZWdpc3Rlcihwb3dlciksIGJhc2UpOworKyAgYXNzaWduU25hcHNob3QobGlyLCBtaXItPmJh aWxvdXRLaW5kKCkpOworKyAgZGVmaW5lKGxpciwgbWlyKTsKKyt9CisrCisrdm9pZCBMSVJHZW5l cmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQdHJEaXYoTUJpZ0ludFB0ckRpdiogaW5zKSB7CisrICBh dXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTEJpZ0ludFB0ckRpdih1c2VSZWdpc3Rl cihpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXIoaW5zLT5yaHMoKSksCisrICAgICAgICAgICAgICAg ICAgICBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCksIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSk7 CisrICBhc3NpZ25TbmFwc2hvdChsaXIsIGlucy0+YmFpbG91dEtpbmQoKSk7CisrICBkZWZpbmUo bGlyLCBpbnMpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckJpZ0ludFB0 ck1vZChNQmlnSW50UHRyTW9kKiBpbnMpIHsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkK KysgICAgICBMQmlnSW50UHRyTW9kKHVzZVJlZ2lzdGVyKGlucy0+bGhzKCkpLCB1c2VSZWdpc3Rl cihpbnMtPnJocygpKSwgdGVtcCgpLAorKyAgICAgICAgICAgICAgICAgICAgTERlZmluaXRpb246 OkJvZ3VzVGVtcCgpKTsKKysgIGlmIChpbnMtPmNhbkJlRGl2aWRlQnlaZXJvKCkpIHsKKysgICAg YXNzaWduU25hcHNob3QobGlyLCBpbnMtPmJhaWxvdXRLaW5kKCkpOworKyAgfQorKyAgZGVmaW5l KGxpciwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQ dHJMc2goTUJpZ0ludFB0ckxzaCogaW5zKSB7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkp IExCaWdJbnRQdHJMc2goCisrICAgICAgdXNlUmVnaXN0ZXIoaW5zLT5saHMoKSksIHVzZVJlZ2lz dGVyKGlucy0+cmhzKCkpLCB0ZW1wKCksIHRlbXAoKSk7CisrICBhc3NpZ25TbmFwc2hvdChsaXIs IGlucy0+YmFpbG91dEtpbmQoKSk7CisrICBkZWZpbmUobGlyLCBpbnMpOworK30KKysKKyt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckJpZ0ludFB0clJzaChNQmlnSW50UHRyUnNoKiBpbnMp IHsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTEJpZ0ludFB0clJzaCgKKysgICAgICB1 c2VSZWdpc3RlcihpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXIoaW5zLT5yaHMoKSksIHRlbXAoKSwg dGVtcCgpKTsKKysgIGFzc2lnblNuYXBzaG90KGxpciwgaW5zLT5iYWlsb3V0S2luZCgpKTsKKysg IGRlZmluZShsaXIsIGlucyk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2Vy VHJ1bmNhdGVEVG9JbnQzMihNVHJ1bmNhdGVUb0ludDMyKiBpbnMpIHsKKysgIE1EZWZpbml0aW9u KiBvcGQgPSBpbnMtPmlucHV0KCk7CisrICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5 cGU6OkRvdWJsZSk7CisrICBkZWZpbmUobmV3IChhbGxvYygpKSBMVHJ1bmNhdGVEVG9JbnQzMih1 c2VSZWdpc3RlcihvcGQpLCB0ZW1wRG91YmxlKCkpLCBpbnMpOworK30KKysKKyt2b2lkIExJUkdl bmVyYXRvclBQQzY0Ojpsb3dlclRydW5jYXRlRlRvSW50MzIoTVRydW5jYXRlVG9JbnQzMiogaW5z KSB7CisrICBNRGVmaW5pdGlvbiogb3BkID0gaW5zLT5pbnB1dCgpOworKyAgTU9aX0FTU0VSVChv cGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKKysgIGRlZmluZShuZXcgKGFsbG9jKCkp IExUcnVuY2F0ZUZUb0ludDMyKHVzZVJlZ2lzdGVyKG9wZCksIHRlbXBGbG9hdDMyKCkpLCBpbnMp OworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckJ1aWx0aW5JbnQ2NFRvRmxv YXRpbmdQb2ludCgKKysgICAgTUJ1aWx0aW5JbnQ2NFRvRmxvYXRpbmdQb2ludCogaW5zKSB7Cisr ICBNT1pfQ1JBU0goIldlIGRvbid0IHVzZSBpdCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUiKTsKKyt9 CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtU2VsZWN0SShNV2FzbVNlbGVj dCogc2VsZWN0KSB7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTFdhc21T ZWxlY3QodXNlUmVnaXN0ZXJBdFN0YXJ0KHNlbGVjdC0+dHJ1ZUV4cHIoKSksCisrICAgICAgICAg ICAgICAgICAgdXNlQW55KHNlbGVjdC0+ZmFsc2VFeHByKCkpLCB1c2VSZWdpc3RlcihzZWxlY3Qt PmNvbmRFeHByKCkpKTsKKysgIGRlZmluZVJldXNlSW5wdXQobGlyLCBzZWxlY3QsIExXYXNtU2Vs ZWN0OjpUcnVlRXhwckluZGV4KTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93 ZXJXYXNtU2VsZWN0STY0KE1XYXNtU2VsZWN0KiBzZWxlY3QpIHsKKysgIGF1dG8qIGxpciA9IG5l dyAoYWxsb2MoKSkgTFdhc21TZWxlY3RJNjQoCisrICAgICAgdXNlSW50NjRSZWdpc3RlckF0U3Rh cnQoc2VsZWN0LT50cnVlRXhwcigpKSwKKysgICAgICB1c2VJbnQ2NChzZWxlY3QtPmZhbHNlRXhw cigpKSwgdXNlUmVnaXN0ZXIoc2VsZWN0LT5jb25kRXhwcigpKSk7CisrICBkZWZpbmVJbnQ2NFJl dXNlSW5wdXQobGlyLCBzZWxlY3QsIExXYXNtU2VsZWN0STY0OjpUcnVlRXhwckluZGV4KTsKKyt9 CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtQnVpbHRpblRydW5jYXRlVG9J bnQzMigKKysgICAgTVdhc21CdWlsdGluVHJ1bmNhdGVUb0ludDMyKiBpbnMpIHsKKysgIE1EZWZp bml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7CisrICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09 IE1JUlR5cGU6OkRvdWJsZSB8fCBvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKKysK KysgIGlmIChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgZGVmaW5lKG5l dyAoYWxsb2MoKSkgTFdhc21CdWlsdGluVHJ1bmNhdGVEVG9JbnQzMigKKysgICAgICAgICAgICAg ICB1c2VSZWdpc3RlcihvcGQpLCB1c2VGaXhlZChpbnMtPmluc3RhbmNlKCksIEluc3RhbmNlUmVn KSwKKysgICAgICAgICAgICAgICBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCkpLAorKyAgICAgICAg ICAgaW5zKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgZGVmaW5lKG5ldyAoYWxsb2MoKSkg TFdhc21CdWlsdGluVHJ1bmNhdGVGVG9JbnQzMigKKysgICAgICAgICAgICAgdXNlUmVnaXN0ZXIo b3BkKSwgdXNlRml4ZWQoaW5zLT5pbnN0YW5jZSgpLCBJbnN0YW5jZVJlZyksCisrICAgICAgICAg ICAgIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSksCisrICAgICAgICAgaW5zKTsKKyt9CisrCisr dm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2NCgK KysgICAgTVdhc21CdWlsdGluVHJ1bmNhdGVUb0ludDY0KiBpbnMpIHsKKysgIE1PWl9DUkFTSCgi V2UgZG9uJ3QgdXNlIGl0IGZvciB0aGlzIGFyY2hpdGVjdHVyZSIpOworK30KKysKKyt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlcldhc21CdWlsdGluRGl2STY0KE1XYXNtQnVpbHRpbkRpdkk2 NCogZGl2KSB7CisrICBNT1pfQ1JBU0goIldlIGRvbid0IHVzZSBydW50aW1lIGRpdiBmb3IgdGhp cyBhcmNoaXRlY3R1cmUiKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJX YXNtQnVpbHRpbk1vZEk2NChNV2FzbUJ1aWx0aW5Nb2RJNjQqIG1vZCkgeworKyAgTU9aX0NSQVNI KCJXZSBkb24ndCB1c2UgcnVudGltZSBtb2QgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIik7CisrfQor KworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyQXRvbWljTG9hZDY0KE1Mb2FkVW5ib3hl ZFNjYWxhciogaW5zKSB7CisrICBjb25zdCBMVXNlIGVsZW1lbnRzID0gdXNlUmVnaXN0ZXIoaW5z LT5lbGVtZW50cygpKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uIGluZGV4ID0KKysgICAgICB1c2VS ZWdpc3Rlck9ySW5kZXhDb25zdGFudChpbnMtPmluZGV4KCksIGlucy0+c3RvcmFnZVR5cGUoKSk7 CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExBdG9taWNMb2FkNjQoZWxlbWVudHMsIGlu ZGV4KTsKKysgIGRlZmluZUludDY0KGxpciwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0 b3JQUEM2NDo6bG93ZXJBdG9taWNTdG9yZTY0KE1TdG9yZVVuYm94ZWRTY2FsYXIqIGlucykgewor KyAgTFVzZSBlbGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7CisrICBMQWxs b2NhdGlvbiBpbmRleCA9CisrICAgICAgdXNlUmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5p bmRleCgpLCBpbnMtPndyaXRlVHlwZSgpKTsKKysgIExJbnQ2NEFsbG9jYXRpb24gdmFsdWUgPSB1 c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7CisrICBhZGQobmV3IChhbGxvYygpKSBMQXRv bWljU3RvcmU2NChlbGVtZW50cywgaW5kZXgsIHZhbHVlKSwgaW5zKTsKKyt9CisrCisrLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrLy8gTElSR2VuZXJhdG9yOjp2aXNpdCogaW1wbGVtZW50YXRpb25zCisrCisrdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0Qm94KE1Cb3gqIGJveCkgeworKyAgTURlZmluaXRpb24qIG9wZCA9 IGJveC0+Z2V0T3BlcmFuZCgwKTsKKysKKysgIGlmIChvcGQtPmlzQ29uc3RhbnQoKSAmJiBib3gt PmNhbkVtaXRBdFVzZXMoKSkgeworKyAgICBlbWl0QXRVc2VzKGJveCk7CisrICAgIHJldHVybjsK KysgIH0KKysKKysgIGlmIChvcGQtPmlzQ29uc3RhbnQoKSkgeworKyAgICBkZWZpbmUobmV3IChh bGxvYygpKSBMVmFsdWUob3BkLT50b0NvbnN0YW50KCktPnRvSlNWYWx1ZSgpKSwgYm94LAorKyAg ICAgICAgICAgTERlZmluaXRpb24oTERlZmluaXRpb246OkJPWCkpOworKyAgfSBlbHNlIHsKKysg ICAgTEJveCogaW5zID0gbmV3IChhbGxvYygpKSBMQm94KHVzZVJlZ2lzdGVyQXRTdGFydChvcGQp LCBvcGQtPnR5cGUoKSk7CisrICAgIGRlZmluZShpbnMsIGJveCwgTERlZmluaXRpb24oTERlZmlu aXRpb246OkJPWCkpOworKyAgfQorK30KKysKKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRVbmJv eChNVW5ib3gqIHVuYm94KSB7CisrICBNRGVmaW5pdGlvbiogYm94ID0gdW5ib3gtPmdldE9wZXJh bmQoMCk7CisrICBNT1pfQVNTRVJUKGJveC0+dHlwZSgpID09IE1JUlR5cGU6OlZhbHVlKTsKKysK KysgIExJbnN0cnVjdGlvbkhlbHBlcjwxLCBCT1hfUElFQ0VTLCAwPiogbGlyOworKyAgaWYgKElz RmxvYXRpbmdQb2ludFR5cGUodW5ib3gtPnR5cGUoKSkpIHsKKysgICAgTU9aX0FTU0VSVCh1bmJv eC0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSk7CisrICAgIGxpciA9IG5ldyAoYWxsb2MoKSkg TFVuYm94RmxvYXRpbmdQb2ludCh1c2VCb3hBdFN0YXJ0KGJveCkpOworKyAgfSBlbHNlIGlmICh1 bmJveC0+ZmFsbGlibGUoKSkgeworKyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExVbmJveCh1c2VS ZWdpc3RlckF0U3RhcnQoYm94KSk7CisrICB9IGVsc2UgeworKyAgICBsaXIgPSBuZXcgKGFsbG9j KCkpIExVbmJveCh1c2VBdFN0YXJ0KGJveCkpOworKyAgfQorKworKyAgaWYgKHVuYm94LT5mYWxs aWJsZSgpKSB7CisrICAgIGFzc2lnblNuYXBzaG90KGxpciwgdW5ib3gtPmJhaWxvdXRLaW5kKCkp OworKyAgfQorKworKyAgZGVmaW5lKGxpciwgdW5ib3gpOworK30KKysKKyt2b2lkIExJUkdlbmVy YXRvcjo6dmlzaXRDb3B5U2lnbihNQ29weVNpZ24qIGlucykgeworKyAgTURlZmluaXRpb24qIGxo cyA9IGlucy0+bGhzKCk7CisrICBNRGVmaW5pdGlvbiogcmhzID0gaW5zLT5yaHMoKTsKKysKKysg IE1PWl9BU1NFUlQoSXNGbG9hdGluZ1BvaW50VHlwZShsaHMtPnR5cGUoKSkpOworKyAgTU9aX0FT U0VSVChsaHMtPnR5cGUoKSA9PSByaHMtPnR5cGUoKSk7CisrICBNT1pfQVNTRVJUKGxocy0+dHlw ZSgpID09IGlucy0+dHlwZSgpKTsKKysKKysgIExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiog bGlyOworKyAgaWYgKGxocy0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICBsaXIg PSBuZXcgKGFsbG9jKCkpIExDb3B5U2lnbkQoKTsKKysgIH0gZWxzZSB7CisrICAgIGxpciA9IG5l dyAoYWxsb2MoKSkgTENvcHlTaWduRigpOworKyAgfQorKworKyAgbG93ZXJGb3JGUFUobGlyLCBp bnMsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0RXh0ZW5kSW50 MzJUb0ludDY0KE1FeHRlbmRJbnQzMlRvSW50NjQqIGlucykgeworKyAgZGVmaW5lSW50NjQoCisr ICAgICAgbmV3IChhbGxvYygpKSBMRXh0ZW5kSW50MzJUb0ludDY0KHVzZVJlZ2lzdGVyQXRTdGFy dChpbnMtPmlucHV0KCkpKSwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0 U2lnbkV4dGVuZEludDY0KE1TaWduRXh0ZW5kSW50NjQqIGlucykgeworKyAgZGVmaW5lSW50NjQo bmV3IChhbGxvYygpKQorKyAgICAgICAgICAgICAgICAgIExTaWduRXh0ZW5kSW50NjQodXNlSW50 NjRSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSksCisrICAgICAgICAgICAgICBpbnMpOwor K30KKysKKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRJbnQ2NFRvRmxvYXRpbmdQb2ludChNSW50 NjRUb0Zsb2F0aW5nUG9pbnQqIGlucykgeworKyAgTURlZmluaXRpb24qIG9wZCA9IGlucy0+aW5w dXQoKTsKKysgIE1PWl9BU1NFUlQob3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpOworKyAg TU9aX0FTU0VSVChJc0Zsb2F0aW5nUG9pbnRUeXBlKGlucy0+dHlwZSgpKSk7CisrICBkZWZpbmUo bmV3IChhbGxvYygpKSBMSW50NjRUb0Zsb2F0aW5nUG9pbnQodXNlSW50NjRSZWdpc3RlcihvcGQp KSwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0U3Vic3RyKE1TdWJzdHIq IGlucykgeworKyAgTFN1YnN0ciogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgIExTdWJzdHIo dXNlUmVnaXN0ZXIoaW5zLT5zdHJpbmcoKSksIHVzZVJlZ2lzdGVyKGlucy0+YmVnaW4oKSksCisr ICAgICAgICAgICAgICB1c2VSZWdpc3RlcihpbnMtPmxlbmd0aCgpKSwgdGVtcCgpLCB0ZW1wKCks IHRlbXAoKSk7CisrICBkZWZpbmUobGlyLCBpbnMpOworKyAgYXNzaWduU2FmZXBvaW50KGxpciwg aW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0UmV0dXJuSW1wbChNRGVmaW5p dGlvbiogb3BkLCBib29sIGlzR2VuZXJhdG9yKSB7CisrICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgp ID09IE1JUlR5cGU6OlZhbHVlKTsKKysgIExSZXR1cm4qIGlucyA9IG5ldyAoYWxsb2MoKSkgTFJl dHVybihpc0dlbmVyYXRvcik7CisrICBpbnMtPnNldE9wZXJhbmQoMCwgdXNlRml4ZWQob3BkLCBK U1JldHVyblJlZykpOworKyAgYWRkKGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNp dENvbXBhcmVFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAorKyAgICBNQ29tcGFyZUV4Y2hhbmdl VHlwZWRBcnJheUVsZW1lbnQqIGlucykgeworKyAgTU9aX0FTU0VSVCghU2NhbGFyOjppc0Zsb2F0 aW5nVHlwZShpbnMtPmFycmF5VHlwZSgpKSk7CisrICBNT1pfQVNTRVJUKGlucy0+ZWxlbWVudHMo KS0+dHlwZSgpID09IE1JUlR5cGU6OkVsZW1lbnRzKTsKKysgIE1PWl9BU1NFUlQoaW5zLT5pbmRl eCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50UHRyKTsKKysKKysgIGNvbnN0IExVc2UgZWxlbWVu dHMgPSB1c2VSZWdpc3RlcihpbnMtPmVsZW1lbnRzKCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24g aW5kZXggPQorKyAgICAgIHVzZVJlZ2lzdGVyT3JJbmRleENvbnN0YW50KGlucy0+aW5kZXgoKSwg aW5zLT5hcnJheVR5cGUoKSk7CisrCisrICBpZiAoU2NhbGFyOjppc0JpZ0ludFR5cGUoaW5zLT5h cnJheVR5cGUoKSkpIHsKKysgICAgTEludDY0QWxsb2NhdGlvbiBvbGR2YWwgPSB1c2VJbnQ2NFJl Z2lzdGVyKGlucy0+b2xkdmFsKCkpOworKyAgICBMSW50NjRBbGxvY2F0aW9uIG5ld3ZhbCA9IHVz ZUludDY0UmVnaXN0ZXIoaW5zLT5uZXd2YWwoKSk7CisrCisrICAgIGF1dG8qIGxpciA9IG5ldyAo YWxsb2MoKSkKKysgICAgICAgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KGVs ZW1lbnRzLCBpbmRleCwgb2xkdmFsLCBuZXd2YWwpOworKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlu cyk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGNvbnN0IExBbGxvY2F0aW9uIG9sZHZhbCA9 IHVzZVJlZ2lzdGVyKGlucy0+b2xkdmFsKCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24gbmV3dmFs ID0gdXNlUmVnaXN0ZXIoaW5zLT5uZXd2YWwoKSk7CisrCisrICBMRGVmaW5pdGlvbiBvdXRUZW1w ID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0g TERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExE ZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmlu aXRpb246OkJvZ3VzVGVtcCgpOworKworKyAgaWYgKGlucy0+YXJyYXlUeXBlKCkgPT0gU2NhbGFy OjpVaW50MzIgJiYgSXNGbG9hdGluZ1BvaW50VHlwZShpbnMtPnR5cGUoKSkpIHsKKysgICAgb3V0 VGVtcCA9IHRlbXAoKTsKKysgIH0KKysKKysgIGlmIChTY2FsYXI6OmJ5dGVTaXplKGlucy0+YXJy YXlUeXBlKCkpIDwgNCkgeworKyAgICAvLyBQUEM2NCBzdWItd29yZCBDQVMgdXNlcyBsYmFyeC9s aGFyeCArIHN0YmN4Li9zdGhjeC4gKFBPV0VSNyspOyBvbmx5CisrICAgIC8vIHZhbHVlVGVtcCBp cyBuZWVkZWQsIHRvIGhvbGQgdGhlIGV4dHNiL2V4dHNoLWNhbm9uaWNhbGlzZWQgb2xkdmFsCisr ICAgIC8vIGZvciB0aGUgMzItYml0IGNtcHcuIG9mZnNldFRlbXAvbWFza1RlbXAgYXJlIHVudXNl ZCAobm8gcm91bmQtZG93bgorKyAgICAvLyArIGJpdC1pc29sYXRlIGRhbmNlKSwgYW5kIHJlbWFp biBCb2d1c1RlbXAuCisrICAgIHZhbHVlVGVtcCA9IHRlbXAoKTsKKysgIH0KKysKKysgIExDb21w YXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAg IExDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudChlbGVtZW50cywgaW5kZXgsIG9sZHZh bCwgbmV3dmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRU ZW1wLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1hc2tUZW1wKTsKKysKKysgIGRlZmluZShsaXIsIGlucyk7CisrfQorKwor K3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQo CisrICAgIE1BdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBpbnMpIHsKKysgIE1PWl9B U1NFUlQoaW5zLT5lbGVtZW50cygpLT50eXBlKCkgPT0gTUlSVHlwZTo6RWxlbWVudHMpOworKyAg TU9aX0FTU0VSVChpbnMtPmluZGV4KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnRQdHIpOworKwor KyAgY29uc3QgTFVzZSBlbGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7Cisr ICBjb25zdCBMQWxsb2NhdGlvbiBpbmRleCA9CisrICAgICAgdXNlUmVnaXN0ZXJPckluZGV4Q29u c3RhbnQoaW5zLT5pbmRleCgpLCBpbnMtPmFycmF5VHlwZSgpKTsKKysKKysgIGlmIChTY2FsYXI6 OmlzQmlnSW50VHlwZShpbnMtPmFycmF5VHlwZSgpKSkgeworKyAgICBMSW50NjRBbGxvY2F0aW9u IHZhbHVlID0gdXNlSW50NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkpOworKworKyAgICBhdXRvKiBs aXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgICBMQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxl bWVudDY0KGVsZW1lbnRzLCBpbmRleCwgdmFsdWUpOworKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlu cyk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIE1PWl9BU1NFUlQoaW5zLT5hcnJheVR5cGUo KSA8PSBTY2FsYXI6OlVpbnQzMik7CisrCisrICBjb25zdCBMQWxsb2NhdGlvbiB2YWx1ZSA9IHVz ZVJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7CisrCisrICBMRGVmaW5pdGlvbiBvdXRUZW1wID0gTERl ZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0gTERlZmlu aXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExEZWZpbml0 aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmluaXRpb246 OkJvZ3VzVGVtcCgpOworKworKyAgaWYgKGlucy0+YXJyYXlUeXBlKCkgPT0gU2NhbGFyOjpVaW50 MzIpIHsKKysgICAgTU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpOwor KyAgICBvdXRUZW1wID0gdGVtcCgpOworKyAgfQorKworKyAgLy8gUFBDNjQgc3ViLXdvcmQgYXRv bWljIGV4Y2hhbmdlIHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guIGRpcmVjdGx5Cisr ICAvLyAoUE9XRVI3Kyk7IHZhbHVlVGVtcC9vZmZzZXRUZW1wL21hc2tUZW1wIGFyZSBuZXZlciBy ZWFkIGJ5IHRoZQorKyAgLy8gaW1wbGVtZW50YXRpb24gKHNlZSBNYWNyb0Fzc2VtYmxlci1wcGM2 NC5jcHAncyBBdG9taWNFeGNoYW5nZSB0ZW1wbGF0ZSkuCisrICAvLyBMZWF2ZSB0aGVtIGFzIEJv Z3VzVGVtcC4KKysKKysgIExBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBsaXIgPQor KyAgICAgIG5ldyAoYWxsb2MoKSkgTEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoCisr ICAgICAgICAgIGVsZW1lbnRzLCBpbmRleCwgdmFsdWUsIG91dFRlbXAsIHZhbHVlVGVtcCwgb2Zm c2V0VGVtcCwgbWFza1RlbXApOworKworKyAgZGVmaW5lKGxpciwgaW5zKTsKKyt9CisrCisrdm9p ZCBMSVJHZW5lcmF0b3I6OnZpc2l0QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCgKKysgICAg TUF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3AqIGlucykgeworKyAgTU9aX0FTU0VSVChpbnMt PmFycmF5VHlwZSgpICE9IFNjYWxhcjo6VWludDhDbGFtcGVkKTsKKysgIE1PWl9BU1NFUlQoIVNj YWxhcjo6aXNGbG9hdGluZ1R5cGUoaW5zLT5hcnJheVR5cGUoKSkpOworKyAgTU9aX0FTU0VSVChp bnMtPmVsZW1lbnRzKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpFbGVtZW50cyk7CisrICBNT1pfQVNT RVJUKGlucy0+aW5kZXgoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludFB0cik7CisrCisrICBjb25z dCBMVXNlIGVsZW1lbnRzID0gdXNlUmVnaXN0ZXIoaW5zLT5lbGVtZW50cygpKTsKKysgIGNvbnN0 IExBbGxvY2F0aW9uIGluZGV4ID0KKysgICAgICB1c2VSZWdpc3Rlck9ySW5kZXhDb25zdGFudChp bnMtPmluZGV4KCksIGlucy0+YXJyYXlUeXBlKCkpOworKworKyAgaWYgKFNjYWxhcjo6aXNCaWdJ bnRUeXBlKGlucy0+YXJyYXlUeXBlKCkpKSB7CisrICAgIExJbnQ2NEFsbG9jYXRpb24gdmFsdWUg PSB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7CisrICAgIExJbnQ2NERlZmluaXRpb24g dGVtcCA9IHRlbXBJbnQ2NCgpOworKworKyAgICBpZiAoaW5zLT5pc0ZvckVmZmVjdCgpKSB7Cisr ICAgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRC aW5vcEZvckVmZmVjdDY0KAorKyAgICAgICAgICBlbGVtZW50cywgaW5kZXgsIHZhbHVlLCB0ZW1w KTsKKysgICAgICBhZGQobGlyLCBpbnMpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAg ICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgICBMQXRvbWljVHlwZWRBcnJheUVs ZW1lbnRCaW5vcDY0KGVsZW1lbnRzLCBpbmRleCwgdmFsdWUsIHRlbXApOworKyAgICBkZWZpbmVJ bnQ2NChsaXIsIGlucyk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIExBbGxvY2F0aW9uIHZh bHVlID0gdXNlUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKTsKKysgIExEZWZpbml0aW9uIHZhbHVlVGVt cCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG9mZnNldFRlbXAg PSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExE ZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysKKysgIC8vIFBQQzY0IHN1Yi13b3JkIGF0b21pYy1i aW5vcCB1c2VzIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCisrICAvLyBU aGUgZmV0Y2gtb3AgdmFyaWFudCBuZWVkcyB2YWx1ZVRlbXAgdG8gaG9sZCB0aGUgcG9zdC1vcCB2 YWx1ZSBiZWluZworKyAgLy8gY29uZGl0aW9uLXN0b3JlZCAoTWFjcm9Bc3NlbWJsZXItcHBjNjQu Y3BwJ3MgQXRvbWljRmV0Y2hPcCk7IHRoZQorKyAgLy8gZm9yLWVmZmVjdCB2YXJpYW50IHVzZXMg YW4gaW50ZXJuYWwgc2NyYXRjaCBhbmQgbmVlZHMgbm8gdGVtcHMgYXQKKysgIC8vIGFsbC4gb2Zm c2V0VGVtcC9tYXNrVGVtcCBhcmUgdW51c2VkIGluIGVpdGhlciBwYXRoLgorKyAgaWYgKFNjYWxh cjo6Ynl0ZVNpemUoaW5zLT5hcnJheVR5cGUoKSkgPCA0ICYmICFpbnMtPmlzRm9yRWZmZWN0KCkp IHsKKysgICAgdmFsdWVUZW1wID0gdGVtcCgpOworKyAgfQorKworKyAgaWYgKGlucy0+aXNGb3JF ZmZlY3QoKSkgeworKyAgICBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdCog bGlyID0KKysgICAgICAgIG5ldyAoYWxsb2MoKSkgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlu b3BGb3JFZmZlY3QoCisrICAgICAgICAgICAgZWxlbWVudHMsIGluZGV4LCB2YWx1ZSwgdmFsdWVU ZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7CisrICAgIGFkZChsaXIsIGlucyk7CisrICAgIHJl dHVybjsKKysgIH0KKysKKysgIExEZWZpbml0aW9uIG91dFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9n dXNUZW1wKCk7CisrCisrICBpZiAoaW5zLT5hcnJheVR5cGUoKSA9PSBTY2FsYXI6OlVpbnQzMiAm JiBJc0Zsb2F0aW5nUG9pbnRUeXBlKGlucy0+dHlwZSgpKSkgeworKyAgICBvdXRUZW1wID0gdGVt cCgpOworKyAgfQorKworKyAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3AqIGxpciA9Cisr ICAgICAgbmV3IChhbGxvYygpKSBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCgKKysgICAg ICAgICAgZWxlbWVudHMsIGluZGV4LCB2YWx1ZSwgb3V0VGVtcCwgdmFsdWVUZW1wLCBvZmZzZXRU ZW1wLCBtYXNrVGVtcCk7CisrICBkZWZpbmUobGlyLCBpbnMpOworK30KKyt2b2lkIExJUkdlbmVy YXRvcjo6dmlzaXRBc21KU0xvYWRIZWFwKE1Bc21KU0xvYWRIZWFwKiBpbnMpIHsKKysgIE1EZWZp bml0aW9uKiBiYXNlID0gaW5zLT5iYXNlKCk7CisrICBNT1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9 PSBNSVJUeXBlOjpJbnQzMik7CisrCisrICBNRGVmaW5pdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9 IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgpOworKyAgTU9aX0FTU0VSVF9JRihpbnMtPm5lZWRzQm91 bmRzQ2hlY2soKSwKKysgICAgICAgICAgICAgICAgYm91bmRzQ2hlY2tMaW1pdC0+dHlwZSgpID09 IE1JUlR5cGU6OkludDMyKTsKKysKKysgIExBbGxvY2F0aW9uIGJhc2VBbGxvYyA9IHVzZVJlZ2lz dGVyQXRTdGFydChiYXNlKTsKKysKKysgIExBbGxvY2F0aW9uIGxpbWl0QWxsb2MgPSBpbnMtPm5l ZWRzQm91bmRzQ2hlY2soKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHVzZVJl Z2lzdGVyQXRTdGFydChib3VuZHNDaGVja0xpbWl0KQorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IExBbGxvY2F0aW9uKCk7CisrCisrICBNT1pfQVNTRVJUKCFpbnMtPmhhc01lbW9y eUJhc2UoKSk7CisrICBhdXRvKiBsaXIgPQorKyAgICAgIG5ldyAoYWxsb2MoKSkgTEFzbUpTTG9h ZEhlYXAoYmFzZUFsbG9jLCBsaW1pdEFsbG9jLCBMQWxsb2NhdGlvbigpKTsKKysgIGRlZmluZShs aXIsIGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdEFzbUpTU3RvcmVIZWFwKE1B c21KU1N0b3JlSGVhcCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgp OworKyAgTU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOworKworKyAg TURlZmluaXRpb24qIGJvdW5kc0NoZWNrTGltaXQgPSBpbnMtPmJvdW5kc0NoZWNrTGltaXQoKTsK KysgIE1PWl9BU1NFUlRfSUYoaW5zLT5uZWVkc0JvdW5kc0NoZWNrKCksCisrICAgICAgICAgICAg ICAgIGJvdW5kc0NoZWNrTGltaXQtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7CisrCisrICBM QWxsb2NhdGlvbiBiYXNlQWxsb2MgPSB1c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7CisrCisrICBM QWxsb2NhdGlvbiBsaW1pdEFsbG9jID0gaW5zLT5uZWVkc0JvdW5kc0NoZWNrKCkKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPyB1c2VSZWdpc3RlckF0U3RhcnQoYm91bmRzQ2hlY2tM aW1pdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMQWxsb2NhdGlvbigpOwor KworKyAgTU9aX0FTU0VSVCghaW5zLT5oYXNNZW1vcnlCYXNlKCkpOworKyAgYWRkKG5ldyAoYWxs b2MoKSkgTEFzbUpTU3RvcmVIZWFwKGJhc2VBbGxvYywgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+ dmFsdWUoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRBbGxv YywgTEFsbG9jYXRpb24oKSksCisrICAgICAgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6 OnZpc2l0V2FzbUxvYWQoTVdhc21Mb2FkKiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBiYXNlID0g aW5zLT5iYXNlKCk7CisrICBNT1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQz MiB8fCBiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpOworKworKyAgTEFsbG9jYXRpb24g bWVtb3J5QmFzZSA9CisrICAgICAgaW5zLT5oYXNNZW1vcnlCYXNlKCkgPyBMQWxsb2NhdGlvbih1 c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5tZW1vcnlCYXNlKCkpKQorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7CisrCisrICBMQWxsb2NhdGlvbiBwdHIg PSB1c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7CisrCisrICBMRGVmaW5pdGlvbiBwdHJDb3B5ID0g TERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgaWYgKGlucy0+YWNjZXNzKCkub2Zmc2V0MzIo KSkgeworKyAgICBwdHJDb3B5ID0gdGVtcENvcHkoYmFzZSwgMCk7CisrICB9CisrCisrICBpZiAo aW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpIHsKKysgICAgYXV0byogbGlyID0gbmV3IChh bGxvYygpKSBMV2FzbUxvYWRJNjQocHRyLCBtZW1vcnlCYXNlLCBwdHJDb3B5KTsKKysgICAgZGVm aW5lSW50NjQobGlyLCBpbnMpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBhdXRvKiBsaXIg PSBuZXcgKGFsbG9jKCkpIExXYXNtTG9hZChwdHIsIG1lbW9yeUJhc2UsIHB0ckNvcHkpOworKyAg ZGVmaW5lKGxpciwgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVN0b3Jl KE1XYXNtU3RvcmUqIGlucykgeworKyAgTURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsK KysgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyIHx8IGJhc2UtPnR5 cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7CisrCisrICBNRGVmaW5pdGlvbiogdmFsdWUgPSBpbnMt PnZhbHVlKCk7CisrICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0KKysgICAgICBpbnMtPmhhc01l bW9yeUJhc2UoKSA/IExBbGxvY2F0aW9uKHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPm1lbW9yeUJh c2UoKSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVn KTsKKysKKysgIExBbGxvY2F0aW9uIGJhc2VBbGxvYyA9IHVzZVJlZ2lzdGVyQXRTdGFydChiYXNl KTsKKysKKysgIExEZWZpbml0aW9uIHB0ckNvcHkgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7 CisrICBpZiAoaW5zLT5hY2Nlc3MoKS5vZmZzZXQzMigpKSB7CisrICAgIHB0ckNvcHkgPSB0ZW1w Q29weShiYXNlLCAwKTsKKysgIH0KKysKKysgIGlmIChpbnMtPmFjY2VzcygpLnR5cGUoKSA9PSBT Y2FsYXI6OkludDY0KSB7CisrICAgIExJbnQ2NEFsbG9jYXRpb24gdmFsdWVBbGxvYyA9IHVzZUlu dDY0UmVnaXN0ZXJBdFN0YXJ0KHZhbHVlKTsKKysgICAgYXV0byogbGlyID0KKysgICAgICAgIG5l dyAoYWxsb2MoKSkgTFdhc21TdG9yZUk2NChiYXNlQWxsb2MsIHZhbHVlQWxsb2MsIG1lbW9yeUJh c2UsIHB0ckNvcHkpOworKyAgICBhZGQobGlyLCBpbnMpOworKyAgICByZXR1cm47CisrICB9Cisr CisrICBMQWxsb2NhdGlvbiB2YWx1ZUFsbG9jID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KHZhbHVlKTsK KysgIGF1dG8qIGxpciA9CisrICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVN0b3JlKGJhc2VBbGxv YywgdmFsdWVBbGxvYywgbWVtb3J5QmFzZSwgcHRyQ29weSk7CisrICBhZGQobGlyLCBpbnMpOwor K30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtVHJ1bmNhdGVUb0ludDY0KE1XYXNtVHJ1 bmNhdGVUb0ludDY0KiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7 CisrICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSB8fCBvcGQtPnR5 cGUoKSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKKysKKysgIGRlZmluZUludDY0KG5ldyAoYWxsb2Mo KSkgTFdhc21UcnVuY2F0ZVRvSW50NjQodXNlUmVnaXN0ZXIob3BkKSksIGlucyk7CisrfQorK3Zv aWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21VbnNpZ25lZFRvRG91YmxlKE1XYXNtVW5zaWduZWRU b0RvdWJsZSogaW5zKSB7CisrICBNT1pfQVNTRVJUKGlucy0+aW5wdXQoKS0+dHlwZSgpID09IE1J UlR5cGU6OkludDMyKTsKKysgIExXYXNtVWludDMyVG9Eb3VibGUqIGxpciA9CisrICAgICAgbmV3 IChhbGxvYygpKSBMV2FzbVVpbnQzMlRvRG91YmxlKHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlu cHV0KCkpKTsKKysgIGRlZmluZShsaXIsIGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2 aXNpdFdhc21VbnNpZ25lZFRvRmxvYXQzMihNV2FzbVVuc2lnbmVkVG9GbG9hdDMyKiBpbnMpIHsK KysgIE1PWl9BU1NFUlQoaW5zLT5pbnB1dCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOwor KyAgTFdhc21VaW50MzJUb0Zsb2F0MzIqIGxpciA9CisrICAgICAgbmV3IChhbGxvYygpKSBMV2Fz bVVpbnQzMlRvRmxvYXQzMih1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7CisrICBk ZWZpbmUobGlyLCBpbnMpOworK30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtQ29tcGFy ZUV4Y2hhbmdlSGVhcChNV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAqIGlucykgeworKyAgTURlZmlu aXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKKysgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09 IE1JUlR5cGU6OkludDMyIHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7CisrICBM QWxsb2NhdGlvbiBtZW1vcnlCYXNlID0gaW5zLT5oYXNNZW1vcnlCYXNlKCkKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBMQWxsb2NhdGlvbih1c2VSZWdpc3RlcihpbnMtPm1lbW9y eUJhc2UoKSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWco SGVhcFJlZyk7CisrCisrICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2 NCkgeworKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtQ29tcGFyZUV4Y2hhbmdl STY0KAorKyAgICAgICAgdXNlUmVnaXN0ZXIoYmFzZSksIHVzZUludDY0UmVnaXN0ZXIoaW5zLT5v bGRWYWx1ZSgpKSwKKysgICAgICAgIHVzZUludDY0UmVnaXN0ZXIoaW5zLT5uZXdWYWx1ZSgpKSwg bWVtb3J5QmFzZSk7CisrICAgIGRlZmluZUludDY0KGxpciwgaW5zKTsKKysgICAgcmV0dXJuOwor KyAgfQorKworKyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVt cCgpOworKyAgTERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAo KTsKKysgIExEZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwor KworKyAgLy8gUFBDNjQgc3ViLXdvcmQgd2FzbSBDQVMgdXNlcyBsYmFyeC9saGFyeCArIHN0YmN4 Li9zdGhjeC4gKFBPV0VSNyspOworKyAgLy8gdmFsdWVUZW1wIGhvbGRzIHRoZSBleHRzYi9leHRz aC1jYW5vbmljYWxpc2VkIG9sZHZhbCBmb3IgY21wdywgd2hpbGUKKysgIC8vIG9mZnNldFRlbXAv bWFza1RlbXAgYXJlIHVudXNlZCAobm8gcm91bmQtZG93biArIGJpdC1pc29sYXRlIGRhbmNlKS4K KysgIGlmIChpbnMtPmFjY2VzcygpLmJ5dGVTaXplKCkgPCA0KSB7CisrICAgIHZhbHVlVGVtcCA9 IHRlbXAoKTsKKysgIH0KKysKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBM V2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAodXNlUmVnaXN0ZXIoYmFzZSksIHVzZVJlZ2lzdGVyKGlu cy0+b2xkVmFsdWUoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlZ2lz dGVyKGlucy0+bmV3VmFsdWUoKSksIG1lbW9yeUJhc2UsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOworKworKyAgZGVmaW5l KGxpciwgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21pY0V4Y2hh bmdlSGVhcChNV2FzbUF0b21pY0V4Y2hhbmdlSGVhcCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiog YmFzZSA9IGlucy0+YmFzZSgpOworKyAgTU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlw ZTo6SW50MzIgfHwgYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKKysgIExBbGxvY2F0 aW9uIG1lbW9yeUJhc2UgPSBpbnMtPmhhc01lbW9yeUJhc2UoKQorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IExBbGxvY2F0aW9uKHVzZVJlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgp KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVn KTsKKysKKysgIGlmIChpbnMtPmFjY2VzcygpLnR5cGUoKSA9PSBTY2FsYXI6OkludDY0KSB7Cisr ICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21BdG9taWNFeGNoYW5nZUk2NCgKKysg ICAgICAgIHVzZVJlZ2lzdGVyKGJhc2UpLCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFsdWUoKSks IG1lbW9yeUJhc2UpOworKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7CisrICAgIHJldHVybjsK KysgIH0KKysKKysgIC8vIFBQQzY0IHN1Yi13b3JkIHdhc20gYXRvbWljIGV4Y2hhbmdlIHVzZXMg bGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guCisrICAvLyAoUE9XRVI3Kyk7IHZhbHVlVGVtcC9v ZmZzZXRUZW1wL21hc2tUZW1wIGFyZSBuZXZlciByZWFkIGJ5IHRoZQorKyAgLy8gaW1wbGVtZW50 YXRpb24gKHNlZSBNYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAncyBBdG9taWNFeGNoYW5nZSB0ZW1w bGF0ZSkuCisrICAvLyBQYXNzIEJvZ3VzVGVtcCBmb3IgYWxsIHRocmVlLgorKyAgTERlZmluaXRp b24gdmFsdWVUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24g b2Zmc2V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG1h c2tUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKworKyAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKQorKyAgICAgIExXYXNtQXRvbWljRXhjaGFuZ2VIZWFwKHVzZVJlZ2lzdGVyKGJh c2UpLCB1c2VSZWdpc3RlcihpbnMtPnZhbHVlKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1lbW9yeUJhc2UsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOworKyAg ZGVmaW5lKGxpciwgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21p Y0Jpbm9wSGVhcChNV2FzbUF0b21pY0Jpbm9wSGVhcCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiog YmFzZSA9IGlucy0+YmFzZSgpOworKyAgTU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlw ZTo6SW50MzIgfHwgYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKKysgIExBbGxvY2F0 aW9uIG1lbW9yeUJhc2UgPSBpbnMtPmhhc01lbW9yeUJhc2UoKQorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/IExBbGxvY2F0aW9uKHVzZVJlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgp KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVn KTsKKysKKysgIGlmIChpbnMtPmFjY2VzcygpLnR5cGUoKSA9PSBTY2FsYXI6OkludDY0KSB7Cisr ICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICAgIExXYXNtQXRvbWljQmlub3BJ NjQodXNlUmVnaXN0ZXIoYmFzZSksIHVzZUludDY0UmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgdGVtcEludDY0KCkpOworKyAg ICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIExEZWZp bml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0 aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlv biBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysKKysgIC8vIFBQQzY0IHN1 Yi13b3JkIHdhc20gYXRvbWljLWJpbm9wIHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3gu CisrICAvLyAoUE9XRVI3KykuIFRoZSBmZXRjaC1vcCB2YXJpYW50IG5lZWRzIHZhbHVlVGVtcCBm b3IgdGhlIHBvc3Qtb3AgdmFsdWUKKysgIC8vIGJlaW5nIGNvbmRpdGlvbi1zdG9yZWQ7IHRoZSBm b3ItZWZmZWN0IHZhcmlhbnQgdXNlcyBhbiBpbnRlcm5hbAorKyAgLy8gc2NyYXRjaCBhbmQgbmVl ZHMgbm8gdGVtcHMgYXQgYWxsLiBvZmZzZXRUZW1wL21hc2tUZW1wIGFyZSB1bnVzZWQKKysgIC8v IGluIGVpdGhlciBwYXRoLgorKyAgaWYgKGlucy0+YWNjZXNzKCkuYnl0ZVNpemUoKSA8IDQgJiYg aW5zLT5oYXNVc2VzKCkpIHsKKysgICAgdmFsdWVUZW1wID0gdGVtcCgpOworKyAgfQorKworKyAg aWYgKCFpbnMtPmhhc1VzZXMoKSkgeworKyAgICBMV2FzbUF0b21pY0Jpbm9wSGVhcEZvckVmZmVj dCogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgICAgTFdhc21BdG9taWNCaW5vcEhlYXBGb3JF ZmZlY3QodXNlUmVnaXN0ZXIoYmFzZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2VSZWdpc3RlcihpbnMtPnZhbHVlKCkpLCBtZW1vcnlCYXNlLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNr VGVtcCk7CisrICAgIGFkZChsaXIsIGlucyk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGF1 dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMV2FzbUF0b21pY0Jpbm9wSGVhcCh1c2VS ZWdpc3RlcihiYXNlKSwgdXNlUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICBtZW1vcnlCYXNlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1w KTsKKysKKysgIGRlZmluZShsaXIsIGlucyk7CisrfQorKworKy8vIFNJTUQgbG93ZXJpbmcKKyt2 b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtVGVybmFyeVNpbWQxMjgoTVdhc21UZXJuYXJ5U2lt ZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIE1PWl9BU1NFUlQoaW5z LT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICAvLyB1c2VSZWdpc3RlciBmb3IgdjAv djEgYW5kIHVzZVJlZ2lzdGVyQXRTdGFydCBvbmx5IGZvciB2MiDigJQgbWF0Y2hlcworKyAgLy8g QVJNNjQncyBWMTI4Qml0c2VsZWN0IHBvbGljeS4gZGVmaW5lUmV1c2VJbnB1dCByZXF1aXJlcyB0 aGUgcmV1c2VkCisrICAvLyBpbnB1dCB0byBiZSB1c2VSZWdpc3RlckF0U3RhcnQgYW5kIHRoZSBv dGhlcnMgdG8gcmVtYWluIGFsaXZlCisrICAvLyAodXNlUmVnaXN0ZXIpOyByZXVzaW5nIGFsbCB0 aHJlZSBwb2xpY2llcyBhcyB1c2VSZWdpc3RlckF0U3RhcnQKKysgIC8vIHRyaXBzIHRoZSBhbGxv Y2F0b3IncyAiKmRlZi0+b3V0cHV0KCkgIT0gYWxsb2MiIGFzc2VydGlvbiBiZWNhdXNlCisrICAv LyB2MC92MSBtYXkgdGhlbiBzaGFyZSB0aGUgc2xvdCB3aXRoIHRoZSBvdXRwdXQuCisrICBMRGVm aW5pdGlvbiB0ZW1wMCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIGlmIChpbnMtPnNp bWRPcCgpID09IHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkRG90STh4MTZJN3gxNkFkZFMpIHsK KysgICAgdGVtcDAgPSB0ZW1wU2ltZDEyOCgpOworKyAgfQorKyAgYXV0byogbGlyID0gbmV3IChh bGxvYygpKSBMV2FzbVRlcm5hcnlTaW1kMTI4KAorKyAgICAgIHVzZVJlZ2lzdGVyKGlucy0+djAo KSksIHVzZVJlZ2lzdGVyKGlucy0+djEoKSksCisrICAgICAgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlu cy0+djIoKSksIHRlbXAwLAorKyAgICAgIGlucy0+c2ltZE9wKCkpOworKyAgLy8gVGhlIFBQQzY0 IHZpc2l0b3IgKENvZGVHZW5lcmF0b3ItcHBjNjQuY3BwOnZpc2l0V2FzbVRlcm5hcnlTaW1kMTI4 KQorKyAgLy8gZW1pdHMgdGhlIEZNQSAvIERPVF9USEVOX0FERCBjaGFpbiB3aXRoIHYyIGFzIHRo ZSBpbXBsaWNpdAorKyAgLy8gYWNjdW11bGF0b3IuIGRlZmluZVJldXNlSW5wdXQgdGVsbHMgdGhl IGFsbG9jYXRvciB0byBwdXQgYGRlc3RgCisrICAvLyBpbiB2MidzIHNsb3QsIGVsaW1pbmF0aW5n IHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBtb3ZlU2ltZDEyOC4KKysgIGRlZmluZVJldXNlSW5w dXQobGlyLCBpbnMsIExXYXNtVGVybmFyeVNpbWQxMjg6OlYySW5kZXgpOworKyNlbHNlCisrICBN T1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5kaWYKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZp c2l0V2FzbUJpbmFyeVNpbWQxMjgoTVdhc21CaW5hcnlTaW1kMTI4KiBpbnMpIHsKKysjaWZkZWYg RU5BQkxFX1dBU01fU0lNRAorKyAgTU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpT aW1kMTI4KTsKKysgIExEZWZpbml0aW9uIHRlbXAwID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgp OworKyAgTERlZmluaXRpb24gdGVtcDEgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICAv LyBtdWxJbnQ2NHgyIChpNjR4Mi5tdWwpIHJvdXRlcyB0aHJvdWdoIEdQUnMgKG1mdnNyZC9tdWxs ZC9tdHZzcmQpIGFuZAorKyAgLy8gdXNlcyBhbiBpbnRlcm5hbCBTY3JhdGNoU2ltZDEyOCArIEdQ UiBzY3JhdGNoZXM7IGl0cyBGbG9hdFJlZ2lzdGVyCisrICAvLyB0ZW1wMS90ZW1wMiBwYXJhbWV0 ZXJzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgc2hhcmVkIEFSTTY0K1BQQzY0CisrICAvLyBzaWdu YXR1cmUgYnV0IHVudXNlZCBvbiBQUEM2NC4gT25seSBGUCBtaW4vbWF4IG5lZWQgU0lNRCB0ZW1w cyBmb3IKKysgIC8vIHRoZSB3YXNtIE5hTi1jYW5vbmljYWxpc2F0aW9uIGRhbmNlLgorKyAgaWYg KGlucy0+c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpGMzJ4NE1pbiB8fAorKyAgICAgIGlucy0+ c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpGMzJ4NE1heCB8fAorKyAgICAgIGlucy0+c2ltZE9w KCkgPT0gd2FzbTo6U2ltZE9wOjpGNjR4Mk1pbiB8fAorKyAgICAgIGlucy0+c2ltZE9wKCkgPT0g d2FzbTo6U2ltZE9wOjpGNjR4Mk1heCkgeworKyAgICB0ZW1wMCA9IHRlbXBTaW1kMTI4KCk7Cisr ICAgIHRlbXAxID0gdGVtcFNpbWQxMjgoKTsKKysgIH0KKysgIGF1dG8qIGxpciA9IG5ldyAoYWxs b2MoKSkgTFdhc21CaW5hcnlTaW1kMTI4KAorKyAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMt PmxocygpKSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+cmhzKCkpLAorKyAgICAgIHRlbXAwLCB0 ZW1wMSwgaW5zLT5zaW1kT3AoKSk7CisrICBkZWZpbmUobGlyLCBpbnMpOworKyNlbHNlCisrICBN T1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5kaWYKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZp c2l0V2FzbUJpbmFyeVNpbWQxMjhXaXRoQ29uc3RhbnQoCisrICAgIE1XYXNtQmluYXJ5U2ltZDEy OFdpdGhDb25zdGFudCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIE1PWl9B U1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICBhdXRvKiBsaXIgPSBu ZXcgKGFsbG9jKCkpIExXYXNtQmluYXJ5U2ltZDEyOFdpdGhDb25zdGFudCgKKysgICAgICB1c2VS ZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSksIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSwgaW5z LT5yaHMoKSk7CisrICBkZWZpbmUobGlyLCBpbnMpOworKyNlbHNlCisrICBNT1pfQ1JBU0goIk5v IFNJTUQiKTsKKysjZW5kaWYKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVNoaWZ0 U2ltZDEyOChNV2FzbVNoaWZ0U2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJ TUQKKysgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICBN T1pfQVNTRVJUKGlucy0+cmhzKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7CisrCisrICBp ZiAoaW5zLT5yaHMoKS0+aXNDb25zdGFudCgpKSB7CisrICAgIGludDMyX3Qgc2hpZnRDb3VudE1h c2s7CisrICAgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkgeworKyAgICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJOHgxNlNobDoKKysgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJVOgorKyAg ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNoclM6CisrICAgICAgICBzaGlmdENvdW50TWFz ayA9IDc7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhT aGw6CisrICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyVToKKysgICAgICBjYXNlIHdh c206OlNpbWRPcDo6STE2eDhTaHJTOgorKyAgICAgICAgc2hpZnRDb3VudE1hc2sgPSAxNTsKKysg ICAgICAgIGJyZWFrOworKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNobDoKKysgICAg ICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJVOgorKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJMzJ4NFNoclM6CisrICAgICAgICBzaGlmdENvdW50TWFzayA9IDMxOworKyAgICAgICAgYnJl YWs7CisrICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hsOgorKyAgICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJNjR4MlNoclU6CisrICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hy UzoKKysgICAgICAgIHNoaWZ0Q291bnRNYXNrID0gNjM7CisrICAgICAgICBicmVhazsKKysgICAg ICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIHNoaWZ0IG9wZXJhdGlv biIpOworKyAgICB9CisrICAgIGludDMyX3Qgc2hpZnRDb3VudCA9IGlucy0+cmhzKCktPnRvQ29u c3RhbnQoKS0+dG9JbnQzMigpICYgc2hpZnRDb3VudE1hc2s7CisrI2lmZGVmIERFQlVHCisrICAg IGpzOjp3YXNtOjpSZXBvcnRTaW1kQW5hbHlzaXMoInNoaWZ0IC0+IGNvbnN0YW50IHNoaWZ0Iik7 CisrI2VuZGlmCisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICAgIExXYXNt Q29uc3RhbnRTaGlmdFNpbWQxMjgodXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkpLCBzaGlm dENvdW50KTsKKysgICAgZGVmaW5lKGxpciwgaW5zKTsKKysgIH0gZWxzZSB7CisrI2lmZGVmIERF QlVHCisrICAgIGpzOjp3YXNtOjpSZXBvcnRTaW1kQW5hbHlzaXMoInNoaWZ0IC0+IHZhcmlhYmxl IHNoaWZ0Iik7CisrI2VuZGlmCisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21W YXJpYWJsZVNoaWZ0U2ltZDEyOCgKKysgICAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxo cygpKSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+cmhzKCkpKTsKKysgICAgZGVmaW5lKGxpciwg aW5zKTsKKysgIH0KKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7CisrI2VuZGlmCisr fQorKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrLy8gSGVscGVyOiByZWNvbnN0cnVjdCByYXcg V2FzbSBieXRlIGxhbmUgaW5kaWNlcyBmcm9tIGFuYWx5emVkIFNpbWRTaHVmZmxlLgorK3N0YXRp YyBTaW1kQ29uc3RhbnQgUmVjb25zdHJ1Y3RTaHVmZmxlQnl0ZXMoY29uc3QgU2ltZFNodWZmbGUm IHMpIHsKKysgIGludDhfdCBieXRlc1sxNl07CisrICBpZiAocy5wZXJtdXRlT3ApIHsKKysgICAg c3dpdGNoICgqcy5wZXJtdXRlT3ApIHsKKysgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6Ok1PVkU6 CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIGJ5dGVzW2ldID0gaTsKKysg ICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgY2Fz ZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRFXzMyeDQ6IHsKKysgICAgICAgIGNvbnN0IGludDMyX3Qq IHcgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDMyX3QqPihzLmNvbnRyb2wuYnl0ZXMoKSk7 CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKysgICAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCA0OyBqKyspIGJ5dGVzW2kqNCtqXSA9IHdbaV0qNCtqOworKyAgICAgICAg cmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9CisrICAgICAg Y2FzZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRFXzE2eDg6IHsKKysgICAgICAgIGNvbnN0IGludDE2 X3QqIGggPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDE2X3QqPihzLmNvbnRyb2wuYnl0ZXMo KSk7CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBp bnQgaWR4ID0gaFtpXSAmIDB4NzsKKysgICAgICAgICAgYnl0ZXNbaSoyXSA9IGlkeCoyOworKyAg ICAgICAgICBieXRlc1tpKjIrMV0gPSBpZHgqMisxOworKyAgICAgICAgfQorKyAgICAgICAgcmV0 dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9CisrICAgICAgY2Fz ZSBTaW1kUGVybXV0ZU9wOjpCUk9BRENBU1RfOHgxNjogeworKyAgICAgICAgaW50OF90IGxhbmUg PSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsK KysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgYnl0ZXNbaV0gPSBsYW5lOwor KyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9 CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpCUk9BRENBU1RfMTZ4ODogeworKyAgICAgICAg aW50OF90IGxhbmUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5i eXRlcygpKVswXTsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAg ICAgICAgIGJ5dGVzW2kqMl0gPSBsYW5lKjI7IGJ5dGVzW2kqMisxXSA9IGxhbmUqMisxOworKyAg ICAgICAgfQorKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsK KysgICAgICB9CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpST1RBVEVfUklHSFRfOHgxNjog eworKyAgICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90 Kj4ocy5jb250cm9sLmJ5dGVzKCkpWzBdOworKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx NjsgaSsrKSBieXRlc1tpXSA9IChpICsgc2hpZnQpICUgMTY7CisrICAgICAgICByZXR1cm4gU2lt ZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworKyAgICAgIH0KKysgICAgICBjYXNlIFNpbWRQ ZXJtdXRlT3A6OlNISUZUX1JJR0hUXzh4MTY6IHsKKysgICAgICAgIHVpbnQ4X3Qgc2hpZnQgPSBy ZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKKysg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgYnl0ZXNbaV0gPSAoaStzaGlmdCA8 IDE2KSA/IChpK3NoaWZ0KSA6IDA7CisrICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVh dGVYMTYoYnl0ZXMpOworKyAgICAgIH0KKysgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlNISUZU X0xFRlRfOHgxNjogeworKyAgICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgaW50OF90Kj4ocy5jb250cm9sLmJ5dGVzKCkpWzBdOworKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAxNjsgaSsrKSBieXRlc1tpXSA9IChpID49IHNoaWZ0KSA/IChpLXNoaWZ0KSA6 IDA7CisrICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworKyAg ICAgIH0KKysgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJFVkVSU0VfMTZ4ODoKKysgICAgICAg IC8vIFJldmVyc2UgYnl0ZXMgd2l0aGluIGVhY2ggMTYtYml0IGxhbmU6IFsxLDAsMywyLDUsNCwu Li5dCisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBi eXRlc1tpKjJdID0gaSoyKzE7IGJ5dGVzW2kqMisxXSA9IGkqMjsKKysgICAgICAgIH0KKysgICAg ICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgY2FzZSBT aW1kUGVybXV0ZU9wOjpSRVZFUlNFXzMyeDQ6CisrICAgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdp dGhpbiBlYWNoIDMyLWJpdCBsYW5lOiBbMywyLDEsMCw3LDYsNSw0LC4uLl0KKysgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorKyAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IDQ7IGorKykgYnl0ZXNbaSo0K2pdID0gaSo0KygzLWopOworKyAgICAgICAgcmV0dXJuIFNpbWRD b25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJF VkVSU0VfNjR4MjoKKysgICAgICAgIC8vIFJldmVyc2UgYnl0ZXMgd2l0aGluIGVhY2ggNjQtYml0 IGxhbmU6IFs3LDYsNSw0LDMsMiwxLDAsMTUsLi4uXQorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspCisrICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSBieXRl c1tpKjgral0gPSBpKjgrKDctaik7CisrICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVh dGVYMTYoYnl0ZXMpOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBicmVhazsKKysgICAgfQor KyAgfQorKyAgLy8gSGFuZGxlIFNpbWRTaHVmZmxlT3AgKHR3by1vcGVyYW5kIHBhdHRlcm5zKS4K KysgIGlmIChzLnNodWZmbGVPcCkgeworKyAgICBzd2l0Y2ggKCpzLnNodWZmbGVPcCkgeworKyAg ICAgIGNhc2UgU2ltZFNodWZmbGVPcDo6Q09OQ0FUX1JJR0hUX1NISUZUXzh4MTY6IHsKKysgICAg ICAgIC8vIGNvbnRyb2xbMF0gPSBzdWZmaXggbGVuZ3RoLiBBUk02NCB1c2VzIDE2LWNvdW50IGFz IHRoZSBFWFQgc2hpZnQuCisrICAgICAgICAvLyBSZWNvbnN0cnVjdCByYXcgYnl0ZSBpbmRpY2Vz OiBFWFQocmhzLCBsaHMsIDE2LWNvdW50KSA9CisrICAgICAgICAvLyB0YWtlICgxNi1jb3VudCkg Ynl0ZXMgZnJvbSByaHMgZW5kLCB0aGVuIGNvdW50IGJ5dGVzIGZyb20gbGhzIHN0YXJ0LgorKyAg ICAgICAgdWludDhfdCBjb3VudCA9IDE2IC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3Qq PihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKKysgICAgICAgICAgaW50IGlkeCA9IGkgKyBjb3VudDsKKysgICAgICAgICAgYnl0 ZXNbaV0gPSAoaWR4IDwgMTYpID8gKGlkeCArIDE2KSA6IChpZHggLSAxNik7CisrICAgICAgICB9 CisrICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworKyAgICAg IH0KKysgICAgICBjYXNlIFNpbWRTaHVmZmxlT3A6OkJMRU5EXzh4MTY6IHsKKysgICAgICAgIC8v IGNvbnRyb2wgaGFzIDAgKGxocykgb3IgLTEgKHJocykgcGVyIGJ5dGUuCisrICAgICAgICBjb25z dCBpbnQ4X3QqIG1hc2sgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJv bC5ieXRlcygpKTsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAg ICAgICAgYnl0ZXNbaV0gPSBtYXNrW2ldID8gKGkgKyAxNikgOiBpOworKyAgICAgICAgcmV0dXJu IFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9CisrICAgICAgY2FzZSBT aW1kU2h1ZmZsZU9wOjpCTEVORF8xNng4OiB7CisrICAgICAgICBjb25zdCBpbnQxNl90KiBtYXNr ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQxNl90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOwor KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgICAgaW50IGJh c2UgPSBtYXNrW2ldID8gKGkgKiAyICsgMTYpIDogKGkgKiAyKTsKKysgICAgICAgICAgYnl0ZXNb aSAqIDJdID0gYmFzZTsKKysgICAgICAgICAgYnl0ZXNbaSAqIDIgKyAxXSA9IGJhc2UgKyAxOwor KyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVz KTsKKysgICAgICB9CisrI2RlZmluZSBJTlRFUkxFQVZFKG5hbWUsIHdpZHRoLCBsb3dfc3RhcnQs IGNvdW50KSBcCisrICAgICAgY2FzZSBTaW1kU2h1ZmZsZU9wOjpuYW1lOiB7IFwKKysgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeyBcCisrICAgICAgICAgIGludCBsaHNJ ZHggPSBsb3dfc3RhcnQgKyBpICogd2lkdGg7IFwKKysgICAgICAgICAgaW50IHJoc0lkeCA9IGxo c0lkeCArIDE2OyBcCisrICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lkdGg7IGorKykg eyBcCisrICAgICAgICAgICAgYnl0ZXNbKGkgKiAyKSAqIHdpZHRoICsgal0gPSBsaHNJZHggKyBq OyBcCisrICAgICAgICAgICAgYnl0ZXNbKGkgKiAyICsgMSkgKiB3aWR0aCArIGpdID0gcmhzSWR4 ICsgajsgXAorKyAgICAgICAgICB9IFwKKysgICAgICAgIH0gXAorKyAgICAgICAgcmV0dXJuIFNp bWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsgXAorKyAgICAgIH0KKysgICAgICBJTlRFUkxF QVZFKElOVEVSTEVBVkVfTE9XXzh4MTYsIDEsIDAsIDgpCisrICAgICAgSU5URVJMRUFWRShJTlRF UkxFQVZFX0hJR0hfOHgxNiwgMSwgOCwgOCkKKysgICAgICBJTlRFUkxFQVZFKElOVEVSTEVBVkVf TE9XXzE2eDgsIDIsIDAsIDQpCisrICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0hJR0hfMTZ4 OCwgMiwgOCwgNCkKKysgICAgICBJTlRFUkxFQVZFKElOVEVSTEVBVkVfTE9XXzMyeDQsIDQsIDAs IDIpCisrICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0hJR0hfMzJ4NCwgNCwgOCwgMikKKysg ICAgICBJTlRFUkxFQVZFKElOVEVSTEVBVkVfTE9XXzY0eDIsIDgsIDAsIDEpCisrICAgICAgSU5U RVJMRUFWRShJTlRFUkxFQVZFX0hJR0hfNjR4MiwgOCwgOCwgMSkKKysjdW5kZWYgSU5URVJMRUFW RQorKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBicmVhazsKKysgICAgfQorKyAgfQorKyAgLy8g UEVSTVVURV84eDE2LCBTSFVGRkxFX0JMRU5EXzh4MTYsIGV0YzogY29udHJvbCBzaG91bGQgaGF2 ZSByYXcgYnl0ZSBpbmRpY2VzLgorKyAgLy8gRm9yY2UgdG8gSW50OHgxNiB0eXBlIHRvIGF2b2lk IGFzc2VydGlvbnMgZnJvbSBtaXNtYXRjaGVkIHR5cGVzLgorKyAgaWYgKHMuY29udHJvbC50eXBl KCkgPT0gU2ltZENvbnN0YW50OjpJbnQ4eDE2KSB7CisrICAgIHJldHVybiBzLmNvbnRyb2w7Cisr ICB9CisrICAvLyBGYWxsYmFjazogcmUtY3JlYXRlIGFzIEludDh4MTYgZnJvbSByYXcgYnl0ZXMu CisrICBtZW1jcHkoYnl0ZXMsIHMuY29udHJvbC5ieXRlcygpLCAxNik7CisrICByZXR1cm4gU2lt ZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworK30KKysKKysjZW5kaWYgIC8vIEVOQUJMRV9X QVNNX1NJTUQKKysKKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtU2h1ZmZsZVNpbWQxMjgo TVdhc21TaHVmZmxlU2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysg IE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICBTaW1kU2h1 ZmZsZSBzID0gaW5zLT5zaHVmZmxlKCk7CisrICBzd2l0Y2ggKHMub3BkKSB7CisrICAgIGNhc2Ug U2ltZFNodWZmbGU6Ok9wZXJhbmQ6OkxFRlQ6CisrICAgIGNhc2UgU2ltZFNodWZmbGU6Ok9wZXJh bmQ6OlJJR0hUOiB7CisrICAgICAgLy8gU2luZ2xlLW9wZXJhbmQgcGVybXV0ZTogdGhlIGFuYWx5 c2lzIGhhcyBpZGVudGlmaWVkIHRoYXQgb25seSBvbmUKKysgICAgICAvLyBpbnB1dCBtYXR0ZXJz ICh0aGUgb3RoZXIgaXMgemVybyBvciB1bnVzZWQpLgorKyAgICAgIExBbGxvY2F0aW9uIHNyYzsK KysgICAgICBpZiAocy5vcGQgPT0gU2ltZFNodWZmbGU6Ok9wZXJhbmQ6OkxFRlQpIHsKKysgICAg ICAgIHNyYyA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKTsKKysgICAgICB9IGVsc2Ug eworKyAgICAgICAgc3JjID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+cmhzKCkpOworKyAgICAg IH0KKysgICAgICBhdXRvKiBsaXIgPQorKyAgICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtUGVy bXV0ZVNpbWQxMjgoc3JjLCAqcy5wZXJtdXRlT3AsIHMuY29udHJvbCk7CisrICAgICAgZGVmaW5l KGxpciwgaW5zKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIFNpbWRTaHVmZmxl OjpPcGVyYW5kOjpCT1RIOgorKyAgICBjYXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpCT1RIX1NX QVBQRUQ6IHsKKysgICAgICBTaW1kQ29uc3RhbnQgY3RybCA9IFJlY29uc3RydWN0U2h1ZmZsZUJ5 dGVzKHMpOworKyAgICAgIExBbGxvY2F0aW9uIGxocywgcmhzOworKyAgICAgIGlmIChzLm9wZCA9 PSBTaW1kU2h1ZmZsZTo6T3BlcmFuZDo6Qk9USF9TV0FQUEVEKSB7CisrICAgICAgICBsaHMgPSB1 c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5yaHMoKSk7CisrICAgICAgICByaHMgPSB1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT5saHMoKSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGxocyA9IHVz ZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKTsKKysgICAgICAgIHJocyA9IHVzZVJlZ2lzdGVy QXRTdGFydChpbnMtPnJocygpKTsKKysgICAgICB9CisrICAgICAgYXV0byogbGlyID0gbmV3IChh bGxvYygpKSBMV2FzbVNodWZmbGVTaW1kMTI4KAorKyAgICAgICAgICBsaHMsIHJocywgKnMuc2h1 ZmZsZU9wLCBjdHJsKTsKKysgICAgICBkZWZpbmUobGlyLCBpbnMpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICB9CisrI2Vsc2UKKysgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOworKyNlbmRpZgor K30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtUmVwbGFjZUxhbmVTaW1kMTI4KE1XYXNt UmVwbGFjZUxhbmVTaW1kMTI4KiBpbnMpIHsKKysjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAorKyAg TU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpTaW1kMTI4KTsKKysgIGlmIChpbnMt PnJocygpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpIHsKKysgICAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKSBMV2FzbVJlcGxhY2VJbnQ2NExhbmVTaW1kMTI4KAorKyAgICAgICAgdXNlUmVn aXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkpLCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+cmhzKCkpKTsK KysgICAgZGVmaW5lUmV1c2VJbnB1dChsaXIsIGlucywgTFdhc21SZXBsYWNlSW50NjRMYW5lU2lt ZDEyODo6TGhzSW5kZXgpOworKyAgfSBlbHNlIHsKKysgICAgYXV0byogbGlyID0gbmV3IChhbGxv YygpKSBMV2FzbVJlcGxhY2VMYW5lU2ltZDEyOCgKKysgICAgICAgIHVzZVJlZ2lzdGVyQXRTdGFy dChpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXIoaW5zLT5yaHMoKSkpOworKyAgICBkZWZpbmVSZXVz ZUlucHV0KGxpciwgaW5zLCBMV2FzbVJlcGxhY2VMYW5lU2ltZDEyODo6TGhzSW5kZXgpOworKyAg fQorKyNlbHNlCisrICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5kaWYKKyt9Cisrdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0V2FzbVNjYWxhclRvU2ltZDEyOChNV2FzbVNjYWxhclRvU2ltZDEy OCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIE1PWl9BU1NFUlQoaW5zLT50 eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICBpZiAoaW5zLT5pbnB1dCgpLT50eXBlKCkg PT0gTUlSVHlwZTo6SW50NjQpIHsKKysgICAgYXV0byogbGlyID0KKysgICAgICAgIG5ldyAoYWxs b2MoKSkgTFdhc21JbnQ2NFRvU2ltZDEyOCh1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydChpbnMtPmlu cHV0KCkpKTsKKysgICAgZGVmaW5lKGxpciwgaW5zKTsKKysgIH0gZWxzZSB7CisrICAgIGF1dG8q IGxpciA9CisrICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtU2NhbGFyVG9TaW1kMTI4KHVzZVJl Z2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpKTsKKysgICAgZGVmaW5lKGxpciwgaW5zKTsKKysg IH0KKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7CisrI2VuZGlmCisrfQorK3ZvaWQg TElSR2VuZXJhdG9yOjp2aXNpdFdhc21VbmFyeVNpbWQxMjgoTVdhc21VbmFyeVNpbWQxMjgqIGlu cykgeworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBNT1pfQVNTRVJUKGlucy0+dHlwZSgp ID09IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQorKyAg ICAgIExXYXNtVW5hcnlTaW1kMTI4KHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpLAor KyAgICAgICAgICAgICAgICAgICAgICAgIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSk7CisrICBk ZWZpbmUobGlyLCBpbnMpOworKyNlbHNlCisrICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5k aWYKKyt9CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKytib29sIExJUkdlbmVyYXRvclBQQzY0 OjpjYW5Gb2xkUmVkdWNlU2ltZDEyOEFuZEJyYW5jaCh3YXNtOjpTaW1kT3Agb3ApIHsKKysgIHN3 aXRjaCAob3ApIHsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhBbnlUcnVlOgorKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STh4MTZBbGxUcnVlOgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STE2eDhBbGxUcnVlOgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRBbGxUcnVlOgorKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJBbGxUcnVlOgorKyAgICAgIHJldHVybiB0cnVlOwor KyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBmYWxzZTsKKysgIH0KKyt9CisrCisrYm9vbCBM SVJHZW5lcmF0b3JQUEM2NDo6Y2FuRW1pdFdhc21SZWR1Y2VTaW1kMTI4QXRVc2VzKAorKyAgICBN V2FzbVJlZHVjZVNpbWQxMjgqIGlucykgeworKyAgaWYgKCFpbnMtPmNhbkVtaXRBdFVzZXMoKSkg eworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrICBpZiAoaW5zLT50eXBlKCkgIT0gTUlSVHlw ZTo6SW50MzIpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAgaWYgKCFjYW5Gb2xkUmVk dWNlU2ltZDEyOEFuZEJyYW5jaChpbnMtPnNpbWRPcCgpKSkgeworKyAgICByZXR1cm4gZmFsc2U7 CisrICB9CisrICBNVXNlSXRlcmF0b3IgaXRlcihpbnMtPnVzZXNCZWdpbigpKTsKKysgIGlmIChp dGVyID09IGlucy0+dXNlc0VuZCgpKSB7CisrICAgIHJldHVybiB0cnVlOworKyAgfQorKyAgTU5v ZGUqIG5vZGUgPSBpdGVyLT5jb25zdW1lcigpOworKyAgaWYgKCFub2RlLT5pc0RlZmluaXRpb24o KSB8fCAhbm9kZS0+dG9EZWZpbml0aW9uKCktPmlzVGVzdCgpKSB7CisrICAgIHJldHVybiBmYWxz ZTsKKysgIH0KKysgIGl0ZXIrKzsKKysgIHJldHVybiBpdGVyID09IGlucy0+dXNlc0VuZCgpOwor K30KKysjZW5kaWYgIC8vIEVOQUJMRV9XQVNNX1NJTUQKKysKKyt2b2lkIExJUkdlbmVyYXRvcjo6 dmlzaXRXYXNtUmVkdWNlU2ltZDEyOChNV2FzbVJlZHVjZVNpbWQxMjgqIGlucykgeworKyNpZmRl ZiBFTkFCTEVfV0FTTV9TSU1ECisrICBpZiAoY2FuRW1pdFdhc21SZWR1Y2VTaW1kMTI4QXRVc2Vz KGlucykpIHsKKysgICAgZW1pdEF0VXNlcyhpbnMpOworKyAgICByZXR1cm47CisrICB9CisrICBp ZiAoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpIHsKKysgICAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKQorKyAgICAgICAgTFdhc21SZWR1Y2VTaW1kMTI4VG9JbnQ2NCh1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7CisrICAgIGRlZmluZUludDY0KGxpciwgaW5zKTsKKysg IH0gZWxzZSB7CisrICAgIGF1dG8qIGxpciA9CisrICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNt UmVkdWNlU2ltZDEyOCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7CisrICAgIGRl ZmluZShsaXIsIGlucyk7CisrICB9CisrI2Vsc2UKKysgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOwor KyNlbmRpZgorK30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtTG9hZExhbmVTaW1kMTI4 KE1XYXNtTG9hZExhbmVTaW1kMTI4KiBpbnMpIHsKKysjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAor KyAgTFVzZSBiYXNlID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+YmFzZSgpKTsKKysgIExVc2Ug aW5wdXRVc2UgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT52YWx1ZSgpKTsKKysgIExBbGxvY2F0 aW9uIG1lbW9yeUJhc2UgPQorKyAgICAgIGlucy0+aGFzTWVtb3J5QmFzZSgpID8gTEFsbG9jYXRp b24odXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bWVtb3J5QmFzZSgpKSkKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IExHZW5lcmFsUmVnKEhlYXBSZWcpOworKyAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKSBMV2FzbUxvYWRMYW5lU2ltZDEyOChiYXNlLCBpbnB1dFVzZSwgbWVtb3J5QmFz ZSk7CisrICBkZWZpbmUobGlyLCBpbnMpOworKyNlbHNlCisrICBNT1pfQ1JBU0goIk5vIFNJTUQi KTsKKysjZW5kaWYKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVN0b3JlTGFuZVNp bWQxMjgoTVdhc21TdG9yZUxhbmVTaW1kMTI4KiBpbnMpIHsKKysjaWZkZWYgRU5BQkxFX1dBU01f U0lNRAorKyAgTFVzZSBiYXNlID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+YmFzZSgpKTsKKysg IExVc2UgaW5wdXQgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT52YWx1ZSgpKTsKKysgIExBbGxv Y2F0aW9uIG1lbW9yeUJhc2UgPQorKyAgICAgIGlucy0+aGFzTWVtb3J5QmFzZSgpID8gTEFsbG9j YXRpb24odXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bWVtb3J5QmFzZSgpKSkKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IExHZW5lcmFsUmVnKEhlYXBSZWcpOworKyAgYXV0byogbGlyID0g bmV3IChhbGxvYygpKSBMV2FzbVN0b3JlTGFuZVNpbWQxMjgoYmFzZSwgaW5wdXQsIG1lbW9yeUJh c2UpOworKyAgYWRkKGxpciwgaW5zKTsKKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7 CisrI2VuZGlmCisrfQorKworKy8vIFBQQzY0IHNwZWNpYWxpemVzIGNvbXBhcmUrc2VsZWN0IGZv ciB7VSx9SW50MzIgLyB7VSx9SW50NjQgY29tcGFyZSB3aXRoCisrLy8gSW50MzIgLyBJbnQ2NCBy ZXN1bHQuIFRoZSBDb2RlR2VuIHZpc2l0b3IKKysvLyAoQ29kZUdlbmVyYXRvci1wcGM2NC5jcHA6 dmlzaXRXYXNtQ29tcGFyZUFuZFNlbGVjdCkgZW1pdHMKKysvLyBjbXB3L2NtcGx3L2NtcGQvY21w bGQgKyBpc2VsID0gMiBpbnNucywgcmVwbGFjaW5nIHRoZSB+NS03IGluc25zIHRoZQorKy8vIGdl bmVyaWMgcGF0aCB3b3VsZCBlbWl0IChib29sZWFuIG1hdGVyaWFsaXphdGlvbiArIHRlc3QgKyBp c2VsKS4gRlAKKysvLyBzcGVjaWFsaXphdGlvbiBpcyBub3Qgd29ydGh3aGlsZSDigJQgdGhlIGdl bmVyaWMgRlAgc2VsZWN0IHBhdGggYWxyZWFkeQorKy8vIHJ1bnMgZmFzdGVyIHRoYW4gdGhlIHNw ZWNpYWxpemVkIGludGVnZXIgb25lIGFuZCBQUEM2NCBsYWNrcyBhIHRydWUKKysvLyBmY3NlbCBl cXVpdmFsZW50IChmc2VsIG9ubHkgY29tcGFyZXMgYWdhaW5zdCB6ZXJvKS4KKytib29sIExJUkdl bmVyYXRvclNoYXJlZDo6Y2FuU3BlY2lhbGl6ZVdhc21Db21wYXJlQW5kU2VsZWN0KAorKyAgICBN Q29tcGFyZTo6Q29tcGFyZVR5cGUgY29tcFR5LCBNSVJUeXBlIGluc1R5KSB7CisrICBjb25zdCBi b29sIGluc09rID0gaW5zVHkgPT0gTUlSVHlwZTo6SW50MzIgfHwgaW5zVHkgPT0gTUlSVHlwZTo6 SW50NjQ7CisrICBjb25zdCBib29sIGNtcE9rID0gY29tcFR5ID09IE1Db21wYXJlOjpDb21wYXJl X0ludDMyIHx8CisrICAgICAgICAgICAgICAgICAgICAgY29tcFR5ID09IE1Db21wYXJlOjpDb21w YXJlX1VJbnQzMiB8fAorKyAgICAgICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6 Q29tcGFyZV9JbnQ2NCB8fAorKyAgICAgICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFy ZTo6Q29tcGFyZV9VSW50NjQ7CisrICByZXR1cm4gaW5zT2sgJiYgY21wT2s7CisrfQorKworK3Zv aWQgTElSR2VuZXJhdG9yU2hhcmVkOjpsb3dlcldhc21Db21wYXJlQW5kU2VsZWN0KE1XYXNtU2Vs ZWN0KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTURlZmluaXRpb24qIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1Db21wYXJlOjpDb21wYXJlVHlwZSBj b21wVHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNPcCBqc29wKSB7CisrICBNT1pfQVNTRVJUKGNhblNwZWNpYWxpemVXYXNtQ29tcGFyZUFu ZFNlbGVjdChjb21wVHksIGlucy0+dHlwZSgpKSk7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9j KCkpIExXYXNtQ29tcGFyZUFuZFNlbGVjdCgKKysgICAgICB1c2VSZWdpc3RlcihsaHMpLCB1c2VS ZWdpc3RlcihyaHMpLCB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT50cnVlRXhwcigpKSwKKysgICAg ICB1c2VSZWdpc3RlcihpbnMtPmZhbHNlRXhwcigpKSwgY29tcFR5LCBqc29wKTsKKysgIGRlZmlu ZVJldXNlSW5wdXQobGlyLCBpbnMsIExXYXNtQ29tcGFyZUFuZFNlbGVjdDo6SWZUcnVlRXhwcklu ZGV4KTsKKyt9CisrCisrLy8gTUlSIGhlbHBlcnMgbmVlZGVkIGJ5IHRoZSBsaW5rZXIKKysjaWZk ZWYgRU5BQkxFX1dBU01fU0lNRAorK2Jvb2wgTVdhc21UZXJuYXJ5U2ltZDEyODo6c3BlY2lhbGl6 ZUJpdHNlbGVjdENvbnN0YW50TWFza0FzU2h1ZmZsZSgKKysgICAgaW50OF90IHNodWZmbGVbMTZd KSB7CisrICByZXR1cm4gZmFsc2U7CisrfQorKyNlbmRpZgorKworK2Jvb2wgTVdhc21CaW5hcnlT aW1kMTI4OjpzcGVjaWFsaXplRm9yQ29uc3RhbnRSaHMoKSB7IHJldHVybiBmYWxzZTsgfQorKwor KyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrYm9vbCBNV2FzbVRlcm5hcnlTaW1kMTI4OjpjYW5S ZWxheEJpdHNlbGVjdCgpIHsgcmV0dXJuIGZhbHNlOyB9CisrI2VuZGlmCisrCisrI2lmZGVmIEVO QUJMRV9XQVNNX1NJTUQKKytib29sIE1XYXNtQmluYXJ5U2ltZDEyODo6Y2FuUG1hZGR1YnN3KCkg eyByZXR1cm4gZmFsc2U7IH0KKysjZW5kaWYKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAg Ly8gbmFtZXNwYWNlIGpzCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1w cGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5oCituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi45YzM1MTlhN2JiMjMKKy0tLSAvZGV2L251bGwK KysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaAorQEAgLTAsMCArMSwxMDUg QEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5p bDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0y IHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBv ZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNh biBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaWZu ZGVmIGppdF9wcGM2NF9Mb3dlcmluZ19wcGM2NF9oCisrI2RlZmluZSBqaXRfcHBjNjRfTG93ZXJp bmdfcHBjNjRfaAorKworKyNpbmNsdWRlICJqaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC5oIgor KworK25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrY2xhc3MgTElSR2VuZXJh dG9yUFBDNjQgOiBwdWJsaWMgTElSR2VuZXJhdG9yU2hhcmVkIHsKKysgcHJvdGVjdGVkOgorKyAg TElSR2VuZXJhdG9yUFBDNjQoTUlSR2VuZXJhdG9yKiBnZW4sIE1JUkdyYXBoJiBncmFwaCwgTElS R3JhcGgmIGxpckdyYXBoKQorKyAgICAgIDogTElSR2VuZXJhdG9yU2hhcmVkKGdlbiwgZ3JhcGgs IGxpckdyYXBoKSB7fQorKworKyAgTFRhYmxlU3dpdGNoKiBuZXdMVGFibGVTd2l0Y2goY29uc3Qg TEFsbG9jYXRpb24mIGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TERlZmluaXRpb24mIGlucHV0Q29weSk7CisrICBMVGFibGVTd2l0Y2hWKiBuZXdMVGFibGVTd2l0 Y2hWKGNvbnN0IExCb3hBbGxvY2F0aW9uJiBpbik7CisrCisrICB2b2lkIGxvd2VyRm9yU2hpZnQo TEluc3RydWN0aW9uSGVscGVyPDEsIDIsIDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCisrICAg ICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywgTURlZmluaXRpb24qIHJocyk7Cisr ICB0ZW1wbGF0ZSA8Y2xhc3MgTEluc3RyPgorKyAgdm9pZCBsb3dlckZvclNoaWZ0SW50NjQoTElu c3RyKiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKTsKKysgIHZvaWQgbG93ZXJGb3JBTFUo TEluc3RydWN0aW9uSGVscGVyPDEsIDEsIDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCisrICAg ICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBpbnB1dCk7CisrICB2b2lkIGxvd2VyRm9yQUxV KExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiogaW5zLCBNRGVmaW5pdGlvbiogbWlyLAorKyAg ICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKKysg IHZvaWQgbG93ZXJGb3JBTFVJbnQ2NChMSW5zdHJ1Y3Rpb25IZWxwZXI8SU5UNjRfUElFQ0VTLCBJ TlQ2NF9QSUVDRVMsIDA+KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRp b24qIG1pciwgTURlZmluaXRpb24qIGlucHV0KTsKKysgIHZvaWQgbG93ZXJGb3JBTFVJbnQ2NCgK KysgICAgICBMSW5zdHJ1Y3Rpb25IZWxwZXI8SU5UNjRfUElFQ0VTLCAyICogSU5UNjRfUElFQ0VT LCAwPiogaW5zLAorKyAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsIE1E ZWZpbml0aW9uKiByaHMpOworKyAgdm9pZCBsb3dlckZvck11bEludDY0KExNdWxJNjQqIGlucywg TU11bCogbWlyLCBNRGVmaW5pdGlvbiogbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIE1E ZWZpbml0aW9uKiByaHMpOworKyAgdm9pZCBsb3dlckZvckZQVShMSW5zdHJ1Y3Rpb25IZWxwZXI8 MSwgMSwgMD4qIGlucywgTURlZmluaXRpb24qIG1pciwKKysgICAgICAgICAgICAgICAgICAgTURl ZmluaXRpb24qIGlucHV0KTsKKysgIHZvaWQgbG93ZXJGb3JGUFUoTEluc3RydWN0aW9uSGVscGVy PDEsIDIsIDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCisrICAgICAgICAgICAgICAgICAgIE1E ZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpOworKworKyAgdGVtcGxhdGUgPHNpemVf dCBUZW1wcz4KKysgIHZvaWQgbG93ZXJGb3JDb21wYXJlSTY0KExJbnN0cnVjdGlvbkhlbHBlcjwx LCAyICogSU5UNjRfUElFQ0VTLCBUZW1wcz4qIGxpciwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMp OworKworKyAgTEJveEFsbG9jYXRpb24gdXNlQm94Rml4ZWQoTURlZmluaXRpb24qIG1pciwgUmVn aXN0ZXIgcmVnMSwgUmVnaXN0ZXIgcmVnMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgdXNlQXRTdGFydCA9IGZhbHNlKTsKKysKKysgIExBbGxvY2F0aW9uIHVzZUJ5dGVPcFJl Z2lzdGVyKE1EZWZpbml0aW9uKiBtaXIpOworKyAgTEFsbG9jYXRpb24gdXNlQnl0ZU9wUmVnaXN0 ZXJBdFN0YXJ0KE1EZWZpbml0aW9uKiBtaXIpOworKyAgTEFsbG9jYXRpb24gdXNlQnl0ZU9wUmVn aXN0ZXJPck5vbkRvdWJsZUNvbnN0YW50KE1EZWZpbml0aW9uKiBtaXIpOworKyAgTERlZmluaXRp b24gdGVtcEJ5dGVPcFJlZ2lzdGVyKCk7CisrCisrICBMRGVmaW5pdGlvbiB0ZW1wVG9VbmJveCgp OworKworKyAgYm9vbCBuZWVkVGVtcEZvclBvc3RCYXJyaWVyKCkgeyByZXR1cm4gdHJ1ZTsgfQor KworKyAgdm9pZCBsb3dlclVudHlwZWRQaGlJbnB1dChNUGhpKiBwaGksIHVpbnQzMl90IGlucHV0 UG9zaXRpb24sIExCbG9jayogYmxvY2ssCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBsaXJJbmRleCk7CisrICB2b2lkIGxvd2VySW50NjRQaGlJbnB1dChNUGhpKiBwaGksIHVp bnQzMl90IGlucHV0UG9zaXRpb24sIExCbG9jayogYmxvY2ssCisrICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgbGlySW5kZXgpOworKyAgdm9pZCBkZWZpbmVJbnQ2NFBoaShNUGhpKiBw aGksIHNpemVfdCBsaXJJbmRleCk7CisrCisrICB2b2lkIGxvd2VyTXVsSShNTXVsKiBtdWwsIE1E ZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpOworKyAgdm9pZCBsb3dlckRpdkkoTURp diogZGl2KTsKKysgIHZvaWQgbG93ZXJEaXZJNjQoTURpdiogZGl2KTsKKysgIHZvaWQgbG93ZXJN b2RJKE1Nb2QqIG1vZCk7CisrICB2b2lkIGxvd2VyTW9kSTY0KE1Nb2QqIG1vZCk7CisrICB2b2lk IGxvd2VyVURpdihNRGl2KiBkaXYpOworKyAgdm9pZCBsb3dlclVEaXZJNjQoTURpdiogZGl2KTsK KysgIHZvaWQgbG93ZXJVTW9kKE1Nb2QqIG1vZCk7CisrICB2b2lkIGxvd2VyVU1vZEk2NChNTW9k KiBtb2QpOworKyAgdm9pZCBsb3dlclVyc2hEKE1VcnNoKiBtaXIpOworKyAgdm9pZCBsb3dlclBv d09mVHdvSShNUG93KiBtaXIpOworKyAgdm9pZCBsb3dlckJpZ0ludFB0ckRpdihNQmlnSW50UHRy RGl2KiBpbnMpOworKyAgdm9pZCBsb3dlckJpZ0ludFB0ck1vZChNQmlnSW50UHRyTW9kKiBpbnMp OworKyAgdm9pZCBsb3dlckJpZ0ludFB0ckxzaChNQmlnSW50UHRyTHNoKiBpbnMpOworKyAgdm9p ZCBsb3dlckJpZ0ludFB0clJzaChNQmlnSW50UHRyUnNoKiBpbnMpOworKyAgdm9pZCBsb3dlclRy dW5jYXRlRFRvSW50MzIoTVRydW5jYXRlVG9JbnQzMiogaW5zKTsKKysgIHZvaWQgbG93ZXJUcnVu Y2F0ZUZUb0ludDMyKE1UcnVuY2F0ZVRvSW50MzIqIGlucyk7CisrICB2b2lkIGxvd2VyQnVpbHRp bkludDY0VG9GbG9hdGluZ1BvaW50KE1CdWlsdGluSW50NjRUb0Zsb2F0aW5nUG9pbnQqIGlucyk7 CisrICB2b2lkIGxvd2VyV2FzbVNlbGVjdEkoTVdhc21TZWxlY3QqIHNlbGVjdCk7CisrICB2b2lk IGxvd2VyV2FzbVNlbGVjdEk2NChNV2FzbVNlbGVjdCogc2VsZWN0KTsKKysgIHZvaWQgbG93ZXJX YXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2NChNV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50NjQqIGlu cyk7CisrICB2b2lkIGxvd2VyV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50MzIoTVdhc21CdWlsdGlu VHJ1bmNhdGVUb0ludDMyKiBpbnMpOworKyAgdm9pZCBsb3dlcldhc21CdWlsdGluRGl2STY0KE1X YXNtQnVpbHRpbkRpdkk2NCogZGl2KTsKKysgIHZvaWQgbG93ZXJXYXNtQnVpbHRpbk1vZEk2NChN V2FzbUJ1aWx0aW5Nb2RJNjQqIG1vZCk7CisrICB2b2lkIGxvd2VyQXRvbWljTG9hZDY0KE1Mb2Fk VW5ib3hlZFNjYWxhciogaW5zKTsKKysgIHZvaWQgbG93ZXJBdG9taWNTdG9yZTY0KE1TdG9yZVVu Ym94ZWRTY2FsYXIqIGlucyk7CisrCisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIGJvb2wg Y2FuRm9sZFJlZHVjZVNpbWQxMjhBbmRCcmFuY2god2FzbTo6U2ltZE9wIG9wKTsKKysgIGJvb2wg Y2FuRW1pdFdhc21SZWR1Y2VTaW1kMTI4QXRVc2VzKE1XYXNtUmVkdWNlU2ltZDEyOCogaW5zKTsK KysjZW5kaWYKKyt9OworKworK3R5cGVkZWYgTElSR2VuZXJhdG9yUFBDNjQgTElSR2VuZXJhdG9y U3BlY2lmaWM7CisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcwor KworKyNlbmRpZiAvKiBqaXRfcHBjNjRfTG93ZXJpbmdfcHBjNjRfaCAqLworZGlmZiAtLWdpdCBh L2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmggYi9qcy9zcmMvaml0 L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAor aW5kZXggMDAwMDAwMDAwMDAwLi5mODJjYTM2YjRlNDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2pz L3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmgKK0BAIC0wLDAgKzEsNjE0 MiBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTog bmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3 PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRl cm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5 IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3Ug Y2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNp Zm5kZWYgaml0X3BwYzY0X01hY3JvQXNzZW1ibGVyX3BwYzY0X2lubF9oCisrI2RlZmluZSBqaXRf cHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBjNjRfaW5sX2gKKysKKysjaW5jbHVkZSAiaml0L3BwYzY0 L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgiCisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ug aml0IHsKKysKKysvL3t7eyBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQorKworKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKy8vIE1vdmUgaW5zdHJ1Y3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTY0 KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIG1vdmVQdHIoc3JjLnJlZywg ZGVzdC5yZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlNjQoSW1tNjQgaW1t LCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIG1vdmVQdHIoSW1tV29yZChpbW0udmFsdWUpLCBkZXN0 LnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVUb0dQUjY0KEZs b2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX21mdnNyZChkZXN0LnJl Zywgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUdQUjY0VG9Eb3VibGUo UmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfbXR2c3JkKGRlc3Qs IHNyYy5yZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlTG93RG91YmxlVG9H UFIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9DUkFTSCgiTm90 IHN1cHBvcnRlZCBmb3IgdGhpcyB0YXJnZXQiKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6bW92ZTY0VG8zMihSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZXh0 c3coZGVzdCwgc3JjLnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlRv NjRaZXJvRXh0ZW5kKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICAvLyBjbHJs ZGkgZGVzdCwgc3JjLCAzMiDigJQgY2xlYXIgdXBwZXIgMzIgYml0cy4KKysgIGFzX3JsZGljbChk ZXN0LnJlZywgc3JjLCAwLCAzMik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4 VG82NFNpZ25FeHRlbmQoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX2V4 dHNiKGRlc3QucmVnLCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlMTZU bzY0U2lnbkV4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgYXNfZXh0 c2goZGVzdC5yZWcsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlRv NjRTaWduRXh0ZW5kKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICBhc19leHRz dyhkZXN0LnJlZywgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUZsb2F0 MzJUb0dQUihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gRlBSIGhv bGRzIGRvdWJsZS1mb3JtYXQgdmFsdWUgKFBQQyBjb252ZW50aW9uKS4gQ29udmVydCB0bworKyAg Ly8gc2luZ2xlLXByZWNpc2lvbiBiaXRzIGluIGJpdHMgMDozMSBvZiB0aGUgVlNSLCB0aGVuIGV4 dHJhY3QuCisrICBhc194c2N2ZHBzcG4oU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKKysgIGFzX21m dnNyZChkZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIHhfc3JkaShkZXN0LCBkZXN0LCAzMik7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVHUFJUb0Zsb2F0MzIoUmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFBsYWNlIHJhdyBzaW5nbGUtcHJlY2lz aW9uIGJpdHMgaW4gVlNSIGJpdHMgMDozMSwgdGhlbiBjb252ZXJ0CisrICAvLyB0byBkb3VibGUt cHJlY2lzaW9uIGZvcm1hdCAobWF0Y2hpbmcgUFBDJ3MgRlBSIGNvbnZlbnRpb24sIGxpa2UgbGZz KS4KKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAvLyBtdHZzcndzIHNwbGF0cyB0aGUgMzIt Yml0IHdvcmQgdG8gYm90aCBoYWx2ZXMgb2YgdGhlIFZTUi4KKysgICAgYXNfbXR2c3J3cyhkZXN0 LCBzcmMpOworKyAgfSBlbHNlIHsKKysgICAgLy8gUE9XRVI4OiBzaGlmdCBHUFIgbGVmdCAzMiBi aXRzIHRvIHBsYWNlIGZsb2F0IGJpdHMgaW4gdXBwZXIgd29yZCwKKysgICAgLy8gdGhlbiBtb3Zl IHRvIFZTUi4geHNjdnNwZHBuIHJlYWRzIGZyb20gYml0cyAwOjMxLgorKyAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgICAgeF9zbGRpKHRtcCwgc3JjLCAzMik7CisrICAgIGFzX210dnNyZChkZXN0 LCB0bXApOworKyAgfQorKyAgYXNfeHNjdnNwZHBuKGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptb3ZlRmxvYXQxNlRvR1BSKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgIC8vIHNyYyBoYXMg RlAxNiBpbiBkdzAgYml0cyA0ODo2MzsgcmVzdCBvZiBkdzAgaXMgMCAocGVyIHhzY3ZkcGhwIC8K KysgIC8vIGx4c2loenggLyBtdHZzcnd6IGNvbnRyYWN0KS4gbWZ2c3JkIHJlYWRzIGR3MCDihpIg ZGVzdCA9IDB4Li4uMDAwMF9ISEhILgorKyAgLy8gTWFzayBkZWZlbnNpdmVseSBpbiBjYXNlIGEg ZnV0dXJlIGNhbGxlciBoYW5kcyB1cyBhIG5vbi1jYW5vbmljYWwgRlAxNi4KKysgIGFzX21mdnNy ZChkZXN0LCBzcmMpOworKyAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDQ4KTsgIC8vIGNscmxk aSA0ODoga2VlcCBsb3cgMTYgYml0cworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3Zl R1BSVG9GbG9hdDE2KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBNT1pf QVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgIC8vIG10dnNyd3ogemVyb3MgZHcwIHdvcmQgMCBhbmQg Y29waWVzIHNyYydzIGxvdyAzMiB0byBkdzAgd29yZCAxOyBtYXNrCisrICAvLyBzcmMgdG8gaXRz IGxvdyAxNiBmaXJzdCBzbyBkdzAgYml0cyAzMjo0NyBzdGF5IHplcm8gKGNhbm9uaWNhbCBGUDE2 KS4KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19ybGRpY2woc2NyYXRjaCwgc3JjLCAw LCA0OCk7ICAvLyBjbHJsZGkgNDg6IGtlZXAgb25seSBsb3cgMTYKKysgIGFzX210dnNyd3ooZGVz dCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4WmVyb0V4dGVu ZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIHJsd2lubSBkZXN0LCBzcmMs IDAsIDI0LCAzMSDigJQgbWFzayB0byBsb3cgOCBiaXRzLgorKyAgYXNfcmx3aW5tKGRlc3QsIHNy YywgMCwgMjQsIDMxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZThTaWduRXh0 ZW5kKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZXh0c2IoZGVzdCwgc3Jj KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTE2U2lnbkV4dGVuZChSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2V4dHNoKGRlc3QsIHNyYyk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4U2lnbkV4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywg UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZXh0c2IoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bW92ZTE2U2lnbkV4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgeworKyAgYXNfZXh0c2goZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bW92ZTMyU2lnbkV4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCkgeworKyAgYXNfZXh0c3coZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6bW92ZTMyWmVyb0V4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewor KyAgYXNfcmxkaWNsKGRlc3QsIHNyYywgMCwgMzIpOworK30KKysKKysvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBM b2FkIGluc3RydWN0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxvYWQzMlNpZ25FeHRl bmRUb1B0cihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGxvYWQzMihz cmMsIGRlc3QpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmxvYWRBYmlSZXR1cm5BZGRyZXNzKFJlZ2lzdGVyIGRlc3QpIHsgeHNfbWZscihk ZXN0KTsgfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKy8vIExvZ2ljYWwgaW5zdHJ1Y3Rpb25zCisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bm90MzIoUmVnaXN0ZXIgcmVnKSB7CisrICB4X25vdChyZWcsIHJl Zyk7CisrICBhc19leHRzdyhyZWcsIHJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om5vdFB0cihSZWdpc3RlciByZWcpIHsgeF9ub3QocmVnLCByZWcpOyB9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YW5kUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf YW5kXyhkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKysvLyBJZiBgbWFza2AgaXMgYSBub24temVy bywgbm9uLWFsbC1vbmVzIGNvbnRpZ3VvdXMgcnVuIG9mIDEtYml0cyBpbiBhCisrLy8gMzItYml0 IHZhbHVlIChMU0ItbnVtYmVyaW5nKSwgc2V0IE1CL01FIHRvIHRoZSBCRSBiaXQgcG9zaXRpb25z CisrLy8gKFBQQyBjb252ZW50aW9uOiBiaXQgMCA9IE1TQikgbmVlZGVkIGJ5IGBybHdpbm0gU0g9 MGAgYW5kIHJldHVybiB0cnVlLgorKy8vIE90aGVyd2lzZSByZXR1cm4gZmFsc2UuIFJ1bi10aW1l IGNvc3QgaXMgYXQgSklUIGVtaXQgdGltZSBvbmx5LgorK3N0YXRpYyBpbmxpbmUgYm9vbCBJc0Nv bnRpZ01hc2szMih1aW50MzJfdCBtYXNrLCB1bnNpZ25lZCYgbWIsIHVuc2lnbmVkJiBtZSkgewor KyAgaWYgKG1hc2sgPT0gMCB8fCBtYXNrID09IDB4RkZGRkZGRkZ1KSByZXR1cm4gZmFsc2U7Cisr ICB1bnNpZ25lZCB0eiA9ICh1bnNpZ25lZClfX2J1aWx0aW5fY3R6KG1hc2spOworKyAgdWludDMy X3Qgc2hpZnRlZCA9IG1hc2sgPj4gdHo7CisrICBpZiAoKHNoaWZ0ZWQgJiAoc2hpZnRlZCArIDEp KSAhPSAwKSByZXR1cm4gZmFsc2U7ICAvLyBIYXMgYSAwIGJldHdlZW4gMXMuCisrICB1bnNpZ25l ZCB3aWR0aCA9IDMyIC0gKHVuc2lnbmVkKV9fYnVpbHRpbl9jbHooc2hpZnRlZCk7CisrICAvLyBM U0IgYml0cyBzZXQ6IFt0eiwgdHord2lkdGgtMV0uIEJFIGJpdHM6IFszMi10ei13aWR0aCwgMzEt dHpdLgorKyAgbWIgPSAzMiAtIHR6IC0gd2lkdGg7CisrICBtZSA9IDMxIC0gdHo7CisrICByZXR1 cm4gdHJ1ZTsKKyt9CisrCisrLy8gNjQtYml0IGNvbnRpZ3VvdXMtbWFzayBjbGFzc2lmaWNhdGlv biBmb3IgQU5ELXdpdGgtaW1tIHZpYSBQUEMncworKy8vIHJvdGF0ZS1hbmQtbWFzayBmYW1pbHkg KFNIPTApLiBPbiBzdWNjZXNzLCBzZXRzIGBsc2JgIChMU0ItbnVtYmVyaW5nCisrLy8gb2YgbG93 ZXN0IHNldCBiaXQpIGFuZCBgd2lkdGhgIChudW1iZXIgb2YgY29udGlndW91cyAxLWJpdHMpLgor Ky8vIENhbGxlciBwaWNrcyB0aGUgZW5jb2Rpbmc6CisrLy8gICAtIGxzYiA9PSAwOiAgICAgICAg ICAgICAgICBsb3cgYHdpZHRoYCBiaXRzIHNldCAgICAgICAg4oaSIHJsZGljbAorKy8vICAgKG1i Nj02NC13aWR0aCkKKysvLyAgIC0gbHNiICsgd2lkdGggPT0gNjQ6ICAgICAgIGhpZ2ggYHdpZHRo YCBiaXRzIHNldCAgICAgICDihpIgcmxkaWNyCisrLy8gICAobWU2PXdpZHRoLTEpCisrLy8gICAt IGxzYiArIHdpZHRoIDw9IDMyOiAgICAgICBjb250aWcgbWFzayB3aXRoaW4gbG93IDMyICAg4oaS IHJsd2lubSAoemVyb3MgaGlnaAorKy8vICAgMzIpCisrLy8gICAtIG90aGVyd2lzZSAobWlkLXJ1 biBtYXNrIHN0cmFkZGxpbmcgYml0IDMyIHdpdGggbHNiPjApOiBubyBTSD0wIHNpbmdsZQorKy8v ICAgICBpbnNuIGZpdHMsIHJldHVybiBmYWxzZSB0byBmYWxsIGJhY2sgdG8gc2NyYXRjaCthbmQu Cisrc3RhdGljIGlubGluZSBib29sIElzQ29udGlnTWFzazY0KHVpbnQ2NF90IG1hc2ssIHVuc2ln bmVkJiBsc2IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkJiB3 aWR0aCkgeworKyAgaWYgKG1hc2sgPT0gMCB8fCBtYXNrID09IH51aW50NjRfdCgwKSkgcmV0dXJu IGZhbHNlOworKyAgdW5zaWduZWQgdHogPSAodW5zaWduZWQpX19idWlsdGluX2N0emxsKG1hc2sp OworKyAgdWludDY0X3Qgc2hpZnRlZCA9IG1hc2sgPj4gdHo7CisrICBpZiAoKHNoaWZ0ZWQgJiAo c2hpZnRlZCArIDEpKSAhPSAwKSByZXR1cm4gZmFsc2U7ICAvLyBIYXMgYSAwIGJldHdlZW4gMXMu CisrICB3aWR0aCA9IDY0IC0gKHVuc2lnbmVkKV9fYnVpbHRpbl9jbHpsbChzaGlmdGVkKTsKKysg IGxzYiA9IHR6OworKyAgcmV0dXJuIHRydWU7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFuZFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIGFuZGkuIGhhbmRsZXMg MTYtYml0IHVuc2lnbmVkIGltbWVkaWF0ZXMgaW4gMSBpbnNuIChzZXRzIENSMCkuCisrICAvLyBG b3Igd2lkZXIgcG9zaXRpdmUgaW1tZWRpYXRlcywgSXNDb250aWdNYXNrMzIg4oaSIHJsd2lubSAo MSBpbnNuLAorKyAgLy8gYWxzbyBzZXRzIENSMCkuIE5PVEU6IGFuZFB0ciBzaWduLWV4dGVuZHMg SW1tMzIgdG8gNjQtYml0IGJlZm9yZQorKyAgLy8gQU5EaW5nLCBzbyBjb250aWctbWFzayBpcyBv bmx5IHNhZmUgd2hlbiB0aGUgaW1tZWRpYXRlIGlzCisrICAvLyBub24tbmVnYXRpdmUgKGhpZ2gg Yml0IGNsZWFyKSDigJQgcmx3aW5tIGFsd2F5cyB6ZXJvcyB0aGUgaGlnaCAzMi4KKysgIHVpbnQz Ml90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUpOworKyAgaWYgKGlzX3VpbnROKHVpbW0sIDE2 KSkgeworKyAgICBhc19hbmRpX3JjKGRlc3QsIGRlc3QsIHVpbW0pOworKyAgICByZXR1cm47Cisr ICB9CisrICB1bnNpZ25lZCBtYiwgbWU7CisrICBpZiAoaW1tLnZhbHVlID49IDAgJiYgSXNDb250 aWdNYXNrMzIodWltbSwgbWIsIG1lKSkgeworKyAgICBhc19ybHdpbm1fcmMoZGVzdCwgZGVzdCwg MCwgbWIsIG1lKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIG1vdmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW50cHRyX3QoaW1tLnZhbHVlKSkpLCBz Y3JhdGNoKTsKKysgIGFzX2FuZF8oZGVzdCwgZGVzdCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmFuZFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIg ZGVzdCkgeworKyAgaWYgKHNyYyAhPSBkZXN0KSB7CisrICAgIHhzX21yKGRlc3QsIHNyYyk7Cisr ICB9CisrICBhbmRQdHIoaW1tLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YW5kNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIHVpbnQ2NF90IHUgPSBpbW0u dmFsdWU7CisrICAvLyAxNi1iaXQgdW5zaWduZWQg4oaSIGFuZGkuICgxIGluc24pLgorKyAgaWYg KHUgPD0gMHhGRkZGdSkgeworKyAgICBhc19hbmRpX3JjKGRlc3QucmVnLCBkZXN0LnJlZywgdWlu dDE2X3QodSkpOworKyAgICByZXR1cm47CisrICB9CisrICB1bnNpZ25lZCBsc2IsIHdpZHRoOwor KyAgaWYgKElzQ29udGlnTWFzazY0KHUsIGxzYiwgd2lkdGgpKSB7CisrICAgIGlmIChsc2IgPT0g MCkgeworKyAgICAgIC8vIGxvdyBgd2lkdGhgIGJpdHMgc2V0OiBybGRpY2wgU0g9MCBNQj02NC13 aWR0aC4KKysgICAgICBhc19ybGRpY2xfcmMoZGVzdC5yZWcsIGRlc3QucmVnLCAwLCA2NCAtIHdp ZHRoKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgaWYgKGxzYiArIHdpZHRoID09IDY0 KSB7CisrICAgICAgLy8gaGlnaCBgd2lkdGhgIGJpdHMgc2V0OiBybGRpY3IgU0g9MCBNRT13aWR0 aC0xLgorKyAgICAgIGFzX3JsZGljcl9yYyhkZXN0LnJlZywgZGVzdC5yZWcsIDAsIHdpZHRoIC0g MSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGlmIChsc2IgKyB3aWR0aCA8PSAzMikg eworKyAgICAgIC8vIGNvbnRpZyBtYXNrIHdpdGhpbiBsb3cgMzI6IHJsd2lubSBTSD0wIHplcm9z IGJpdHMgMC4uMzEgdG9vLgorKyAgICAgIC8vIEJFIHBvc2l0aW9uczogbWIgPSAzMiAtIGxzYiAt IHdpZHRoLCBtZSA9IDMxIC0gbHNiLgorKyAgICAgIGFzX3Jsd2lubV9yYyhkZXN0LnJlZywgZGVz dC5yZWcsIDAsIDMyIC0gbHNiIC0gd2lkdGgsIDMxIC0gbHNiKTsKKysgICAgICByZXR1cm47Cisr ICAgIH0KKysgICAgLy8gbWlkLXJ1biBtYXNrIHN0cmFkZGxpbmcgYml0IDMyIChsc2I+MCwgbHNi K3dpZHRoPjMyLCBsc2Ird2lkdGg8NjQpOgorKyAgICAvLyBub3QgZW5jb2RhYmxlIGFzIFNIPTAg bWFzay4gRmFsbCB0aHJvdWdoIHRvIHNjcmF0Y2grYW5kLgorKyAgfQorKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZCh1KSwgc2NyYXRjaCk7CisrICBhc19hbmRf KGRlc3QucmVnLCBkZXN0LnJlZywgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFuZDY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX2FuZF8o ZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMucmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YW5kMzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19hbmRfKGRlc3Qs IGRlc3QsIHNyYyk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YW5kMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICB1aW50MzJf dCB1aW1tID0gdWludDMyX3QoaW1tLnZhbHVlKTsKKysgIGlmIChpc191aW50Tih1aW1tLCAxNikp IHsKKysgICAgYXNfYW5kaV9yYyhkZXN0LCBkZXN0LCB1aW1tKTsKKysgIH0gZWxzZSB7CisrICAg IHVuc2lnbmVkIG1iLCBtZTsKKysgICAgaWYgKElzQ29udGlnTWFzazMyKHVpbW0sIG1iLCBtZSkp IHsKKysgICAgICAvLyBybHdpbm0uU0g9MCBBTkRzIHdpdGggdGhlIGNvbnRpZ3VvdXMgbWFzazsg cmVjb3JkIGZvcm0gc2V0cyBDUjAKKysgICAgICAvLyB0byBtYXRjaCB0aGUgc2lkZS1lZmZlY3Qg b2YgdGhlIGFuZGkuIGZhc3QgcGF0aCBhYm92ZS4KKysgICAgICBhc19ybHdpbm1fcmMoZGVzdCwg ZGVzdCwgMCwgbWIsIG1lKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgICAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKKysgICAgICBhc19hbmRf KGRlc3QsIGRlc3QsIHNjcmF0Y2gpOworKyAgICB9CisrICB9CisrICBhc19leHRzdyhkZXN0LCBk ZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kMzIoSW1tMzIgaW1tLCBSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChzcmMgIT0gZGVzdCkgeworKyAgICB4 c19tcihkZXN0LCBzcmMpOworKyAgfQorKyAgYW5kMzIoaW1tLCBkZXN0KTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YW5kMzIoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGRlc3QsIHNjcmF0Y2gpOwor KyAgYW5kMzIoaW1tLCBzY3JhdGNoKTsKKysgIHN0b3JlMzIoc2NyYXRjaCwgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0 ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihzcmMsIHNj cmF0Y2gpOworKyAgYXNfYW5kXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKysgIGFzX2V4dHN3KGRl c3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvcjY0KEltbTY0IGltbSwg UmVnaXN0ZXI2NCBkZXN0KSB7CisrICB1aW50NjRfdCB1ID0gaW1tLnZhbHVlOworKyAgLy8gb3Jp L29yaXMgemVyby1leHRlbmQgdGhlaXIgaW1tZWRpYXRlcyBhbmQgZG9uJ3QgdG91Y2ggb3RoZXIg Yml0cywgc28KKysgIC8vIHdoZW4gaW1tIGZpdHMgaW4gdW5zaWduZWQgMzIgKGhpZ2ggMzIgPT0g MCkgdGhlIHBhaXIgaGFuZGxlcyBpdCBpbgorKyAgLy8gMS0yIGluc25zIHdpdGggbm8gc2NyYXRj aC4KKysgIGlmICh1IDw9IDB4RkZGRkZGRkZ1KSB7CisrICAgIHVpbnQxNl90IGxvID0gdWludDE2 X3QodSk7CisrICAgIHVpbnQxNl90IGhpID0gdWludDE2X3QodSA+PiAxNik7CisrICAgIGlmICho aSA9PSAwKSB7CisrICAgICAgYXNfb3JpKGRlc3QucmVnLCBkZXN0LnJlZywgbG8pOworKyAgICB9 IGVsc2UgaWYgKGxvID09IDApIHsKKysgICAgICBhc19vcmlzKGRlc3QucmVnLCBkZXN0LnJlZywg aGkpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX29yaShkZXN0LnJlZywgZGVzdC5yZWcsIGxv KTsKKysgICAgICBhc19vcmlzKGRlc3QucmVnLCBkZXN0LnJlZywgaGkpOworKyAgICB9CisrICAg IHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKElt bVdvcmQodSksIHNjcmF0Y2gpOworKyAgYXNfb3JfKGRlc3QucmVnLCBkZXN0LnJlZywgc2NyYXRj aCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yMzIoUmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICBhc19vcl8oZGVzdCwgZGVzdCwgc3JjKTsKKysgIGFzX2V4dHN3KGRl c3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvcjMyKEltbTMyIGltbSwg UmVnaXN0ZXIgZGVzdCkgeworKyAgdWludDMyX3QgdWltbSA9IHVpbnQzMl90KGltbS52YWx1ZSk7 CisrICB1aW50MTZfdCBsbyA9IHVpbW0gJiAweEZGRkY7CisrICB1aW50MTZfdCBoaSA9ICh1aW1t ID4+IDE2KSAmIDB4RkZGRjsKKysgIGlmIChoaSA9PSAwKSB7CisrICAgIGFzX29yaShkZXN0LCBk ZXN0LCBsbyk7CisrICB9IGVsc2UgaWYgKGxvID09IDApIHsKKysgICAgYXNfb3JpcyhkZXN0LCBk ZXN0LCBoaSk7CisrICB9IGVsc2UgeworKyAgICAvLyBvcmkgKyBvcmlzIHBhaXIgaGFuZGxlcyBh cmJpdHJhcnkgMzItYml0IHVuc2lnbmVkIGltbSBpbiAyIGluc25zCisrICAgIC8vIHdpdGhvdXQg YSBzY3JhdGNoIEdQUi4gb3JpL29yaXMgYXJlIG5vbi1yZWNvcmQgZm9ybXMgKGRvbid0IHRvdWNo CisrICAgIC8vIENSMCksIG1hdGNoaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgcHJldmlvdXMgc2Ny YXRjaCtvcl8gcGF0aAorKyAgICAvLyAob3JfIGlzIHRoZSByZWNvcmQgZm9ybSwgYnV0IHRoZSB2 YWx1ZS1vbmx5IHJlc3VsdCBpcyB3aGF0IGNhbGxlcnMKKysgICAgLy8gb2JzZXJ2ZSB0aHJvdWdo IGRlc3QpLgorKyAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8pOworKyAgICBhc19vcmlzKGRlc3Qs IGRlc3QsIGhpKTsKKysgIH0KKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0KSB7CisrICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAgeHNfbXIoZGVzdCwgc3JjKTsKKysg IH0KKysgIG9yMzIoaW1tLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3Iz MihJbW0zMiBpbW0sIGNvbnN0IEFkZHJlc3MmIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICBsb2FkMzIoZGVzdCwgc2NyYXRjaCk7CisrICBvcjMyKGltbSwgc2NyYXRjaCk7 CisrICBzdG9yZTMyKHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp4b3I2NChJbW02NCBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgdWludDY0X3QgdSA9IGlt bS52YWx1ZTsKKysgIC8vIHhvcmkveG9yaXMgemVyby1leHRlbmQgdGhlaXIgaW1tZWRpYXRlczsg Zm9yIHVuc2lnbmVkLTMyLWZpdCB2YWx1ZXMKKysgIC8vIHRoZXkgcmVwbGFjZSB0aGUgc2NyYXRj aCt4b3Igc2VxdWVuY2Ugd2l0aCAxLTIgaW5zbnMuCisrICBpZiAodSA8PSAweEZGRkZGRkZGdSkg eworKyAgICB1aW50MTZfdCBsbyA9IHVpbnQxNl90KHUpOworKyAgICB1aW50MTZfdCBoaSA9IHVp bnQxNl90KHUgPj4gMTYpOworKyAgICBpZiAoaGkgPT0gMCkgeworKyAgICAgIGFzX3hvcmkoZGVz dC5yZWcsIGRlc3QucmVnLCBsbyk7CisrICAgIH0gZWxzZSBpZiAobG8gPT0gMCkgeworKyAgICAg IGFzX3hvcmlzKGRlc3QucmVnLCBkZXN0LnJlZywgaGkpOworKyAgICB9IGVsc2UgeworKyAgICAg IGFzX3hvcmkoZGVzdC5yZWcsIGRlc3QucmVnLCBsbyk7CisrICAgICAgYXNfeG9yaXMoZGVzdC5y ZWcsIGRlc3QucmVnLCBoaSk7CisrICAgIH0KKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZCh1KSwgc2NyYXRjaCk7CisrICBh c194b3JfKGRlc3QucmVnLCBkZXN0LnJlZywgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om9yUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfb3Jf KGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yUHRyKElt bTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgdWludDMyX3QgdWltbSA9IHVpbnQzMl90KGlt bS52YWx1ZSk7CisrICB1aW50MTZfdCBsbyA9IHVpbW0gJiAweEZGRkY7CisrICB1aW50MTZfdCBo aSA9ICh1aW1tID4+IDE2KSAmIDB4RkZGRjsKKysgIC8vIG9yaS9vcmlzIHplcm8tZXh0ZW5kIHRo ZWlyIGltbWVkaWF0ZXMsIHNvIGZvciBub24tbmVnYXRpdmUgSW1tMzIgKGhpZ2gKKysgIC8vIDMy IG9mIHNpZ24tZXh0ZW5kZWQgdmFsdWUgPSAwKSB3ZSBjYW4gdXNlIG9yaStvcmlzIHRvIE9SIHRo ZSBmdWxsCisrICAvLyAzMi1iaXQgcGF0dGVybiBpbiAxLTIgaW5zbnMuIE5lZ2F0aXZlIEltbTMy IHNpZ24tZXh0ZW5kcyB0byBzZXQgaGlnaAorKyAgLy8gYml0cyAzMi4uNjMgaW4gdGhlIE9SIOKA lCB0aG9zZSBiaXRzIHdvdWxkIGJlIGxvc3Qgd2l0aCBvcmkrb3JpcyBhbG9uZS4KKysgIGlmIChp bW0udmFsdWUgPj0gMCkgeworKyAgICBpZiAoaGkgPT0gMCkgeworKyAgICAgIGFzX29yaShkZXN0 LCBkZXN0LCBsbyk7CisrICAgIH0gZWxzZSBpZiAobG8gPT0gMCkgeworKyAgICAgIGFzX29yaXMo ZGVzdCwgZGVzdCwgaGkpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX29yaShkZXN0LCBkZXN0 LCBsbyk7CisrICAgICAgYXNfb3JpcyhkZXN0LCBkZXN0LCBoaSk7CisrICAgIH0KKysgICAgcmV0 dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29y ZCh1aW50cHRyX3QoaW50cHRyX3QoaW1tLnZhbHVlKSkpLCBzY3JhdGNoKTsKKysgIGFzX29yXyhk ZXN0LCBkZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3JQdHIo SW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChzcmMgIT0g ZGVzdCkgeworKyAgICB4c19tcihkZXN0LCBzcmMpOworKyAgfQorKyAgb3JQdHIoaW1tLCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3I2NChSZWdpc3RlcjY0IHNyYywgUmVn aXN0ZXI2NCBkZXN0KSB7CisrICBhc19vcl8oZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMucmVnKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lz dGVyNjQgZGVzdCkgeworKyAgYXNfeG9yXyhkZXN0LnJlZywgZGVzdC5yZWcsIHNyYy5yZWcpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3JQdHIoUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7CisrICBhc194b3JfKGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnhvclB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHVpbnQz Ml90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUpOworKyAgdWludDE2X3QgbG8gPSB1aW1tICYg MHhGRkZGOworKyAgdWludDE2X3QgaGkgPSAodWltbSA+PiAxNikgJiAweEZGRkY7CisrICBpZiAo aW1tLnZhbHVlID49IDApIHsKKysgICAgaWYgKGhpID09IDApIHsKKysgICAgICBhc194b3JpKGRl c3QsIGRlc3QsIGxvKTsKKysgICAgfSBlbHNlIGlmIChsbyA9PSAwKSB7CisrICAgICAgYXNfeG9y aXMoZGVzdCwgZGVzdCwgaGkpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX3hvcmkoZGVzdCwg ZGVzdCwgbG8pOworKyAgICAgIGFzX3hvcmlzKGRlc3QsIGRlc3QsIGhpKTsKKysgICAgfQorKyAg ICByZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihJ bW1Xb3JkKHVpbnRwdHJfdChpbnRwdHJfdChpbW0udmFsdWUpKSksIHNjcmF0Y2gpOworKyAgYXNf eG9yXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 eG9yUHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBpZiAo c3JjICE9IGRlc3QpIHsKKysgICAgeHNfbXIoZGVzdCwgc3JjKTsKKysgIH0KKysgIHhvclB0cihp bW0sIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3IzMihSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3hvcl8oZGVzdCwgZGVzdCwgc3JjKTsKKysgIGFz X2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3IzMihJ bW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChp bW0udmFsdWUpOworKyAgdWludDE2X3QgbG8gPSB1aW1tICYgMHhGRkZGOworKyAgdWludDE2X3Qg aGkgPSAodWltbSA+PiAxNikgJiAweEZGRkY7CisrICBpZiAoaGkgPT0gMCkgeworKyAgICBhc194 b3JpKGRlc3QsIGRlc3QsIGxvKTsKKysgIH0gZWxzZSBpZiAobG8gPT0gMCkgeworKyAgICBhc194 b3JpcyhkZXN0LCBkZXN0LCBoaSk7CisrICB9IGVsc2UgeworKyAgICAvLyB4b3JpICsgeG9yaXMg cGFpciDigJQgMiBpbnNucywgbm8gc2NyYXRjaCBHUFIuCisrICAgIGFzX3hvcmkoZGVzdCwgZGVz dCwgbG8pOworKyAgICBhc194b3JpcyhkZXN0LCBkZXN0LCBoaSk7CisrICB9CisrICBhc19leHRz dyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoSW1tMzIg aW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChzcmMgIT0gZGVzdCkg eworKyAgICB4c19tcihkZXN0LCBzcmMpOworKyAgfQorKyAgeG9yMzIoaW1tLCBkZXN0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNz JiBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Cisr ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGRlc3QsIHNj cmF0Y2gpOworKyAgeG9yMzIoaW1tLCBzY3JhdGNoKTsKKysgIHN0b3JlMzIoc2NyYXRjaCwgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvcjMyKGNvbnN0IEFkZHJlc3MmIHNy YywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQz MihzcmMsIHNjcmF0Y2gpOworKyAgeG9yMzIoc2NyYXRjaCwgZGVzdCk7CisrfQorKworKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKy8vIFN3YXAgaW5zdHJ1Y3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0 ZVN3YXAxNlNpZ25FeHRlbmQoUmVnaXN0ZXIgcmVnKSB7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7 CisrICAgIC8vIGJyaCBieXRlLXJldmVyc2VzIGV2ZXJ5IGhhbGZ3b3JkIGluIHJlZzsgZXh0c2gg a2VlcHMganVzdCB0aGUKKysgICAgLy8gbG93IGhhbGZ3b3JkJ3MgYnl0ZS1yZXZlcnNlZCB2YWx1 ZSwgc2lnbi1leHRlbmRlZCB0byA2NCBiaXRzLgorKyAgICBhc19icmgocmVnLCByZWcpOworKyAg ICBhc19leHRzaChyZWcsIHJlZyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIC8vIFBPV0VSOC85 OiByb3RhdGUtYW5kLW1hc2sgc3ludGhlc2lzLiBTd2FwIGJ5dGVzIGluIGxvdyBoYWxmd29yZCB2 aWEKKysgIC8vIChyZWc8PDgpJjB4RkYwMCB8IChyZWc+PjgpJjB4RkYsIHRoZW4gc2lnbi1leHRl bmQuCisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgYXNfcmx3aW5tKHNjcmF0Y2gsIHJl ZywgOCwgMTYsIDIzKTsgIC8vIHNjcmF0Y2ggPSAocmVnPDw4KSAmIDB4RkYwMAorKyAgYXNfcmx3 aW5tKHJlZywgcmVnLCAyNCwgMjQsIDMxKTsgICAgIC8vIHJlZyA9IChyZWc+PjgpICYgMHhGRgor KyAgYXNfb3JfKHJlZywgcmVnLCBzY3JhdGNoKTsKKysgIGFzX2V4dHNoKHJlZywgcmVnKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0ZVN3YXAxNlplcm9FeHRlbmQoUmVnaXN0ZXIg cmVnKSB7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIC8vIGJyaCBieXRlLXJldmVyc2Vz IGV2ZXJ5IGhhbGZ3b3JkOyBybGRpY2wgd2l0aCBzaD0wLG1iPTQ4IHplcm9lcworKyAgICAvLyB0 aGUgdXBwZXIgNDggYml0cyDigJQgbm8gQ1IwIHNpZGUgZWZmZWN0ICh2cyBhbmRpLikuCisrICAg IGFzX2JyaChyZWcsIHJlZyk7CisrICAgIGFzX3JsZGljbChyZWcsIHJlZywgMCwgNDgpOworKyAg ICByZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gQm90aCBy bHdpbm0gZm9ybXMgemVyby1leHRlbmQgdGhlIDY0LWJpdCBkZXN0aW5hdGlvbiBwZXIgSVNBIHYz LjBCCisrICAvLyAobWFzayBNID0gTUFTSyhNQiszMiwgTUUrMzIpIGlzIDAgYWJvdmUgYml0IDMx KSwgc28gYWZ0ZXIgdGhlIE9SIHRoZQorKyAgLy8gdXBwZXIgNDggYml0cyBhcmUgYWxyZWFkeSB6 ZXJvIOKAlCBubyBmb2xsb3ctdXAgY2xlYXJpbmcgbmVlZGVkLgorKyAgYXNfcmx3aW5tKHNjcmF0 Y2gsIHJlZywgOCwgMTYsIDIzKTsKKysgIGFzX3Jsd2lubShyZWcsIHJlZywgMjQsIDI0LCAzMSk7 CisrICBhc19vcl8ocmVnLCByZWcsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpieXRlU3dhcDMyKFJlZ2lzdGVyIHJlZykgeworKyAgaWYgKEhhc1BPV0VSMTAoKSkgewor KyAgICAvLyBicncgYnl0ZS1yZXZlcnNlcyBib3RoIDMyLWJpdCBoYWx2ZXM7IGV4dHN3IGRyb3Bz IHRoZSB1cHBlciBoYWxmCisrICAgIC8vIGFuZCBzaWduLWV4dGVuZHMgdGhlIGJ5dGUtcmV2ZXJz ZWQgbG93IHdvcmQgdG8gNjQgYml0cy4KKysgICAgYXNfYnJ3KHJlZywgcmVnKTsKKysgICAgYXNf ZXh0c3cocmVnLCByZWcpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyBQT1dFUjgvOTogcm90 YXRlLXdpdGgtaW5zZXJ0IHN5bnRoZXNpcyAoNCBpbnNucykuCisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgLy8gc2NyYXRjaCA9IHJvdGF0ZSByZWcgbGVmdCA4LCBtYXNrIGJ5dGVzIDAs MworKyAgYXNfcmx3aW5tKHNjcmF0Y2gsIHJlZywgOCwgMCwgMzEpOyAgICAvLyByb3RsMzIgYnkg OAorKyAgYXNfcmx3aW1pKHNjcmF0Y2gsIHJlZywgMjQsIDAsIDcpOyAgICAvLyBpbnNlcnQgYnl0 ZSAwCisrICBhc19ybHdpbWkoc2NyYXRjaCwgcmVnLCAyNCwgMTYsIDIzKTsgIC8vIGluc2VydCBi eXRlIDIKKysgIC8vIFNpZ24tZXh0ZW5kIHRvIDY0IGJpdHMgKGFzIDMyLWJpdCB2YWx1ZSkuCisr ICBhc19leHRzdyhyZWcsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi eXRlU3dhcDY0KFJlZ2lzdGVyNjQgcmVnNjQpIHsKKysgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysg ICAgLy8gMSBpbnNuLCBubyBGUFIgcm91bmQtdHJpcC4KKysgICAgYXNfYnJkKHJlZzY0LnJlZywg cmVnNjQucmVnKTsKKysgIH0gZWxzZSBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgYXNfbXR2c3Jk KFNjcmF0Y2hEb3VibGVSZWcsIHJlZzY0LnJlZyk7CisrICAgIGFzX3h4YnJkKFNjcmF0Y2hEb3Vi bGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgICBhc19tZnZzcmQocmVnNjQucmVnLCBTY3Jh dGNoRG91YmxlUmVnKTsKKysgIH0gZWxzZSB7CisrICAgIC8vIFBPV0VSODogYnl0ZS1zd2FwIHZp YSBzdGFjayB1c2luZyBzdHdicnggKHdvcmQgYnl0ZS1yZXZlcnNlIHN0b3JlKS4KKysgICAgLy8g c3R3YnJ4IFJTLFJBLFJCIHN0b3JlcyBSUyBieXRlLXJldmVyc2VkIGF0IFJBK1JCLgorKyAgICAv LyBGb3IgNjQtYml0IHN3YXA6IHN0b3JlIGhpZ2ggd29yZCByZXZlcnNlZCBhdCBhZGRyKzAsIGxv dyB3b3JkIGF0IGFkZHIrNC4KKysgICAgUmVnaXN0ZXIgciA9IHJlZzY0LnJlZzsKKysgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciB0bXAgPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICAgIGFzX3N0ZHUoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIs IC0xNik7CisrICAgIC8vIFN0b3JlIGxvdyAzMiBiaXRzIGJ5dGUtcmV2ZXJzZWQgYXQgU1ArMTIu CisrICAgIGFzX2FkZGkodG1wLCBTdGFja1BvaW50ZXIsIDEyKTsKKysgICAgYXNfc3R3YnJ4KHIs IHIwLCB0bXApOyAgLy8gcjAgYXMgUkEgPSAwLCBzbyBhZGRyID0gdG1wCisrICAgIC8vIFN0b3Jl IGhpZ2ggMzIgYml0cyBieXRlLXJldmVyc2VkIGF0IFNQKzguCisrICAgIHhfc3JkaShyLCByLCAz Mik7CisrICAgIGFzX2FkZGkodG1wLCBTdGFja1BvaW50ZXIsIDgpOworKyAgICBhc19zdHdicngo ciwgcjAsIHRtcCk7ICAvLyBhZGRyID0gdG1wCisrICAgIC8vIExvYWQgcmV2ZXJzZWQgNjQtYml0 IHZhbHVlIGZyb20gU1ArOC4KKysgICAgYXNfbGQociwgU3RhY2tQb2ludGVyLCA4KTsKKysgICAg YXNfYWRkaShTdGFja1BvaW50ZXIsIFN0YWNrUG9pbnRlciwgMTYpOworKyAgfQorK30KKysKKysv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysvLyBBcml0aG1ldGljIGZ1bmN0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFkZFB0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2FkZChkZXN0 LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoSW1tMzIg aW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICBpbnQzMl90IHZhbCA9IGltbS52YWx1ZTsKKysgIGlm IChpc19pbnROKHZhbCwgMTYpKSB7CisrICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgdmFsKTsKKysg ICAgcmV0dXJuOworKyAgfQorKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAvLyBJbW0zMiBh bHdheXMgZml0cyAzNC1iaXQgc2lnbmVkOyBwYWRkaSBkb2VzIGRlc3QgPSBkZXN0ICsgaW1tIGlu IG9uZQorKyAgICAvLyBwcmVmaXhlZCBpbnN0cnVjdGlvbiB3aXRoIG5vIHNjcmF0Y2guCisrICAg IGFzX3BhZGRpKGRlc3QsIGRlc3QsIGludDY0X3QodmFsKSwgLypSPSovZmFsc2UpOworKyAgICBy ZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihJbW1X b3JkKGludDY0X3QodmFsKSksIHNjcmF0Y2gpOworKyAgYXNfYWRkKGRlc3QsIGRlc3QsIHNjcmF0 Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoSW1tV29yZCBpbW0sIFJl Z2lzdGVyIGRlc3QpIHsKKysgIGlmIChpc19pbnROKGludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7 CisrICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgaW50MTZfdChpbW0udmFsdWUpKTsKKysgICAgcmV0 dXJuOworKyAgfQorKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClpbW0u dmFsdWUsIDM0KSkgeworKyAgICBhc19wYWRkaShkZXN0LCBkZXN0LCAoaW50NjRfdClpbW0udmFs dWUsIC8qUj0qL2ZhbHNlKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKKysgIGFzX2FkZChkZXN0LCBkZXN0 LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkNjQoUmVnaXN0ZXI2 NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgYXNfYWRkKGRlc3QucmVnLCBkZXN0LnJlZywg c3JjLnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZDY0KEltbTMyIGltbSwg UmVnaXN0ZXI2NCBkZXN0KSB7CisrICBhZGRQdHIoSW1tMzIoaW1tLnZhbHVlKSwgZGVzdC5yZWcp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQ2NChJbW02NCBpbW0sIFJlZ2lzdGVy NjQgZGVzdCkgeworKyAgaWYgKGlzX2ludE4oaW50NjRfdChpbW0udmFsdWUpLCAxNikpIHsKKysg ICAgYXNfYWRkaShkZXN0LnJlZywgZGVzdC5yZWcsIGludDE2X3QoaW1tLnZhbHVlKSk7CisrICAg IHJldHVybjsKKysgIH0KKysgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50NjRfdClp bW0udmFsdWUsIDM0KSkgeworKyAgICBhc19wYWRkaShkZXN0LnJlZywgZGVzdC5yZWcsIChpbnQ2 NF90KWltbS52YWx1ZSwgLypSPSovZmFsc2UpOworKyAgICByZXR1cm47CisrICB9CisrICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTU9aX0FTU0VSVChkZXN0LnJlZyAhPSBzY3JhdGNoKTsK KysgIG1vdmVQdHIoSW1tV29yZChpbW0udmFsdWUpLCBzY3JhdGNoKTsKKysgIGFzX2FkZChkZXN0 LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph ZGQzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2FkZChkZXN0LCBkZXN0 LCBzcmMpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKGlzX2ludE4o aW1tLnZhbHVlLCAxNikpIHsKKysgICAgYXNfYWRkaShkZXN0LCBkZXN0LCBpbW0udmFsdWUpOwor KyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIo aW1tLCBzY3JhdGNoKTsKKysgICAgYXNfYWRkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOworKyAgfQor KyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFk ZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBtb3ZlMzIo c3JjLCBkZXN0KTsKKysgIGFkZDMyKGltbSwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmFkZDMyKEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihkZXN0LCBzY3JhdGNoKTsKKysgIGFkZDMyKGlt bSwgc2NyYXRjaCk7CisrICBzdG9yZTMyKHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphZGQzMihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK KysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKKysg IGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoSW1tMzIgaW1tLCBjb25zdCBBZGRy ZXNzJiBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihkZXN0 LCBzY3JhdGNoKTsKKysgIGFkZFB0cihpbW0sIHNjcmF0Y2gpOworKyAgc3RvcmVQdHIoc2NyYXRj aCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZFB0cihjb25zdCBBZGRy ZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBsb2FkUHRyKHNyYywgc2NyYXRjaCk7CisrICBhZGRQdHIoc2NyYXRjaCwgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZERvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19mYWRkKGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZmFkZHMoZGVzdCwgZGVzdCwgc3JjKTsKKyt9CisrCisr Q29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3ViMzJGcm9tU3RhY2tQdHJXaXRoUGF0Y2goUmVn aXN0ZXIgZGVzdCkgeworKyAgQ29kZU9mZnNldCBvZmZzZXQgPSBDb2RlT2Zmc2V0KGN1cnJlbnRP ZmZzZXQoKSk7CisrICBlbWl0TG9hZDY0U3RhbnphKGRlc3QsIDApOworKyAgYXNfc3ViZihkZXN0 LCBkZXN0LCBTdGFja1BvaW50ZXIpOworKyAgcmV0dXJuIG9mZnNldDsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cGF0Y2hTdWIzMkZyb21TdGFja1B0cihDb2RlT2Zmc2V0IG9mZnNldCwg SW1tMzIgaW1tKSB7CisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopZWRpdFNy YyhCdWZmZXJPZmZzZXQob2Zmc2V0Lm9mZnNldCgpKSk7CisrICBVcGRhdGVMb2FkNjRWYWx1ZShp bnN0LCB1aW50NjRfdChpbnQ2NF90KGltbS52YWx1ZSkpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6c3ViUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfc3Vi ZihkZXN0LCBzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJQdHIo SW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoaXNfaW50TigtaW50NjRfdChpbW0u dmFsdWUpLCAxNikpIHsKKysgICAgYXNfYWRkaShkZXN0LCBkZXN0LCAtaW1tLnZhbHVlKTsKKysg ICAgcmV0dXJuOworKyAgfQorKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAvLyAtSW1tMzIg Zml0cyAzNC1iaXQgc2lnbmVkICh3b3JzdCBjYXNlIC1JTlQzMl9NSU4gPSArMl4zMSwgd2VsbCB3 aXRoaW4KKysgICAgLy8gwrEyXjMzKS4gcGFkZGkgd2l0aCB0aGUgbmVnYXRlZCBpbW1lZGlhdGUg ZG9lcyB0aGUgc3VidHJhY3QgaW4gMSBwcmVmaXhlZAorKyAgICAvLyBpbnNuIHdpdGggbm8gc2Ny YXRjaC4KKysgICAgYXNfcGFkZGkoZGVzdCwgZGVzdCwgLWludDY0X3QoaW1tLnZhbHVlKSwgLypS PSovZmFsc2UpOworKyAgICByZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgbW92ZVB0cihJbW1Xb3JkKGludDY0X3QoaW1tLnZhbHVlKSksIHNjcmF0Y2gpOworKyAg YXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6c3ViNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgYXNfc3ViZihk ZXN0LnJlZywgc3JjLnJlZywgZGVzdC5yZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWI2NChJbW02NCBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgaWYgKGlzX2ludE4oLWlu dDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7CisrICAgIGFzX2FkZGkoZGVzdC5yZWcsIGRlc3QucmVn LCBpbnQxNl90KC1pbnQ2NF90KGltbS52YWx1ZSkpKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAg aWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKC0oaW50NjRfdClpbW0udmFsdWUsIDM0KSkgewor KyAgICBhc19wYWRkaShkZXN0LnJlZywgZGVzdC5yZWcsIC0oaW50NjRfdClpbW0udmFsdWUsIC8q Uj0qL2ZhbHNlKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIE1PWl9BU1NFUlQoZGVzdC5yZWcgIT0gc2NyYXRjaCk7CisrICBtb3ZlUHRyKEltbVdv cmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7CisrICBhc19zdWJmKGRlc3QucmVnLCBzY3JhdGNoLCBk ZXN0LnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyKFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfc3ViZihkZXN0LCBzcmMsIGRlc3QpOworKyAgYXNf ZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyKElt bTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKGlzX2ludE4oLWludDY0X3QoaW1tLnZh bHVlKSwgMTYpKSB7CisrICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgLWltbS52YWx1ZSk7CisrICB9 IGVsc2UgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Cisr ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmUzMihpbW0s IHNjcmF0Y2gpOworKyAgICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGRlc3QpOworKyAgfQorKyAg YXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMy KGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIGxvYWQzMihzcmMsIHNjcmF0Y2gpOworKyAgYXNfc3ViZihkZXN0LCBzY3Jh dGNoLCBkZXN0KTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpzdWJQdHIoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihkZXN0LCBzY3JhdGNoKTsKKysg IGFzX3N1YmYoc2NyYXRjaCwgc3JjLCBzY3JhdGNoKTsKKysgIHN0b3JlUHRyKHNjcmF0Y2gsIGRl c3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJQdHIoY29uc3QgQWRkcmVzcyYg YWRkciwgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxv YWRQdHIoYWRkciwgc2NyYXRjaCk7CisrICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGRlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZnN1YihkZXN0LCBkZXN0LCBzcmMpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2ZzdWJzKGRlc3QsIGRlc3QsIHNyYyk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0KGNvbnN0IFJlZ2lzdGVyNjQmIHJocywgY29u c3QgUmVnaXN0ZXI2NCYgc3JjRGVzdCkgeworKyAgYXNfbXVsbGQoc3JjRGVzdC5yZWcsIHNyY0Rl c3QucmVnLCByaHMucmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsNjQoSW1t NjQgaW1tLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0KSB7CisrICBpZiAoaXNfaW50TihpbnQ2NF90 KGltbS52YWx1ZSksIDE2KSkgeworKyAgICBhc19tdWxsaShkZXN0LnJlZywgZGVzdC5yZWcsIGlu dDE2X3QoaW1tLnZhbHVlKSk7CisrICB9IGVsc2UgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIE1PWl9BU1NFUlQoZGVzdC5yZWcgIT0gc2NyYXRjaCk7CisrICAgIG1vdmVQ dHIoSW1tV29yZChpbW0udmFsdWUpLCBzY3JhdGNoKTsKKysgICAgYXNfbXVsbGQoZGVzdC5yZWcs IGRlc3QucmVnLCBzY3JhdGNoKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bXVsNjQoSW1tNjQgaW1tLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyIHRlbXApIHsKKysgIE1PWl9BU1NFUlQodGVtcCA9 PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKKysgIG11bDY0KGltbSwgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0KGNvbnN0IFJlZ2lzdGVyNjQmIHNyYywgY29uc3QgUmVn aXN0ZXI2NCYgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3Rl ciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Cisr ICBhc19tdWxsZChkZXN0LnJlZywgZGVzdC5yZWcsIHNyYy5yZWcpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjptdWxQdHIoUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBzcmNEZXN0KSB7Cisr ICBhc19tdWxsZChzcmNEZXN0LCBzcmNEZXN0LCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjptdWxQdHIoSW1tV29yZCByaHMsIFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIGlmIChp c19pbnROKGludDY0X3QocmhzLnZhbHVlKSwgMTYpKSB7CisrICAgIGFzX211bGxpKHNyY0Rlc3Qs IHNyY0Rlc3QsIGludDE2X3QocmhzLnZhbHVlKSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBNT1pfQVNTRVJUKHNyY0Rlc3QgIT0gc2NyYXRjaCk7 CisrICBtb3ZlUHRyKHJocywgc2NyYXRjaCk7CisrICBtdWxQdHIoc2NyYXRjaCwgc3JjRGVzdCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEJ5MyhSZWdpc3RlciBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKKysgIC8vIG11bGxpIGlzIHRoZSAxNi1iaXQtaW1tZWRpYXRlIGZvcm0gb2Yg bXVsbGQuIDEgaW5zbiwgbm8gc2NyYXRjaCwKKysgIC8vIHNyYz09ZGVzdCBhbGlhc2luZyBzYWZl IChSQSByZWFkIGJlZm9yZSBSVCB3cml0ZSkuCisrICBhc19tdWxsaShkZXN0LCBzcmMsIDMpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWwzMihSZWdpc3RlciByaHMsIFJlZ2lzdGVy IHNyY0Rlc3QpIHsKKysgIGFzX211bGx3KHNyY0Rlc3QsIHNyY0Rlc3QsIHJocyk7CisrICBhc19l eHRzdyhzcmNEZXN0LCBzcmNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVs MzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmNEZXN0KSB7CisrICBpZiAoaXNfaW50TihpbW0udmFs dWUsIDE2KSkgeworKyAgICBhc19tdWxsaShzcmNEZXN0LCBzcmNEZXN0LCBpbW0udmFsdWUpOwor KyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIo aW1tLCBzY3JhdGNoKTsKKysgICAgYXNfbXVsbHcoc3JjRGVzdCwgc3JjRGVzdCwgc2NyYXRjaCk7 CisrICB9CisrICBhc19leHRzdyhzcmNEZXN0LCBzcmNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bXVsSGlnaFVuc2lnbmVkMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBNT1pfQVNTRVJU KHNyYyAhPSBzY3JhdGNoKTsKKysgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOworKyAgYXNfbXVsaHd1 KGRlc3QsIHNyYywgc2NyYXRjaCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICBhc19mbXVscyhkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgeworKyAgYXNfZm11bChkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptdWxEb3VibGVQdHIoSW1tUHRyIGltbSwgUmVnaXN0ZXIgdGVtcCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOwor KyAgYXNfbGZkKFNjcmF0Y2hEb3VibGVSZWcsIHNjcmF0Y2gsIDApOworKyAgYXNfZm11bChkZXN0 LCBkZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 aW5jNjQoQWJzb2x1dGVBZGRyZXNzIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIGFkZHJSZWcgPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICBtb3ZlUHRyKEltbVdvcmQodWludHB0cl90KGRlc3QuYWRkcikpLCBhZGRyUmVnKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSBTZWNvbmRTY3JhdGNoUmVnOworKyAgYXNfbGQoc2NyYXRjaCwg YWRkclJlZywgMCk7CisrICBhc19hZGRpKHNjcmF0Y2gsIHNjcmF0Y2gsIDEpOworKyAgYXNfc3Rk KHNjcmF0Y2gsIGFkZHJSZWcsIDApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZG bG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2Zk aXZzKGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRpdkRv dWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19mZGl2 KGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnF1b3RpZW50 MzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpIHsKKysgIGlmIChpc1Vuc2ln bmVkKSB7CisrICAgIGFzX2Rpdnd1KGRlc3QsIGxocywgcmhzKTsKKysgIH0gZWxzZSB7CisrICAg IGFzX2RpdncoZGVzdCwgbGhzLCByaHMpOworKyAgfQorKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnF1b3RpZW50NjQoUmVnaXN0ZXIgbGhzLCBS ZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGlzVW5zaWduZWQpIHsKKysgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgIGFzX2Rp dmR1KGRlc3QsIGxocywgcmhzKTsKKysgIH0gZWxzZSB7CisrICAgIGFzX2RpdmQoZGVzdCwgbGhz LCByaHMpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZW1haW5kZXIzMihS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpIHsKKysgIGlmIChIYXNQT1dFUjko KSkgeworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAgIGFzX21vZHV3KGRlc3QsIGxocywg cmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19tb2RzdyhkZXN0LCBsaHMsIHJocyk7Cisr ICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAg aWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19kaXZ3dShzY3JhdGNoLCBsaHMsIHJocyk7Cisr ICAgICAgYXNfbXVsbHcoc2NyYXRjaCwgc2NyYXRjaCwgcmhzKTsKKysgICAgfSBlbHNlIHsKKysg ICAgICBhc19kaXZ3KHNjcmF0Y2gsIGxocywgcmhzKTsKKysgICAgICBhc19tdWxsdyhzY3JhdGNo LCBzY3JhdGNoLCByaHMpOworKyAgICB9CisrICAgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgbGhz KTsKKysgIH0KKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpyZW1haW5kZXI2NChSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIg ZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQp IHsKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAg IGFzX21vZHVkKGRlc3QsIGxocywgcmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19tb2Rz ZChkZXN0LCBsaHMsIHJocyk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19kaXZkdShz Y3JhdGNoLCBsaHMsIHJocyk7CisrICAgICAgYXNfbXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwgcmhz KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19kaXZkKHNjcmF0Y2gsIGxocywgcmhzKTsKKysg ICAgICBhc19tdWxsZChzY3JhdGNoLCBzY3JhdGNoLCByaHMpOworKyAgICB9CisrICAgIGFzX3N1 YmYoZGVzdCwgc2NyYXRjaCwgbGhzKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6bmVnNjQoUmVnaXN0ZXI2NCByZWcpIHsgYXNfbmVnKHJlZy5yZWcsIHJlZy5yZWcpOyB9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnUHRyKFJlZ2lzdGVyIHJlZykgeyBhc19uZWcocmVn LCByZWcpOyB9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnMzIoUmVnaXN0ZXIgcmVnKSB7 CisrICBhc19uZWcocmVnLCByZWcpOworKyAgYXNfZXh0c3cocmVnLCByZWcpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdhdGVEb3VibGUoRmxvYXRSZWdpc3RlciByZWcpIHsgYXNf Zm5lZyhyZWcsIHJlZyk7IH0KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdhdGVGbG9hdChG bG9hdFJlZ2lzdGVyIHJlZykgeyBhc19mbmVnKHJlZywgcmVnKTsgfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmFiczMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFzX3NyYXdpKHNjcmF0Y2gsIHNyYywgMzEpOworKyAgYXNf eG9yXyhkZXN0LCBzcmMsIHNjcmF0Y2gpOworKyAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0 KTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjphYnNGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IGFzX2ZhYnMoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRG91 YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2ZhYnMo ZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3FydEZsb2F0MzIoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZnNxcnRzKGRlc3Qs IHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNxcnREb3VibGUoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZnNxcnQoZGVzdCwgc3JjKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2NtcHcobGhzLCByaHMpOworKyAgLy8gaXNl bCBydCwgcmEsIHJiLCBjb25kOiBydCA9IChDUltjb25kXSBzZXQpID8gcmEgOiByYgorKyAgLy8g TGVzc1RoYW4gc2V0IGlmIGxocyA8IHJocyAoc2lnbmVkKSwgc28gcGljayBsaHM7IGVsc2Ugcmhz ID0gbWluLgorKyAgYXNfaXNlbChkZXN0LCBsaHMsIHJocywgTGVzc1RoYW4sIGNyMCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbjMyKFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLCBS ZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZTMyKHJo cywgc2NyYXRjaCk7CisrICBtaW4zMihsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptYXgzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0 ZXIgZGVzdCkgeworKyAgYXNfY21wdyhsaHMsIHJocyk7CisrICAvLyBHVCBzZXQgaWYgbGhzID4g cmhzIChzaWduZWQpLCBzbyBwaWNrIGxoczsgZWxzZSByaHMgPSBtYXguCisrICBhc19pc2VsKGRl c3QsIGxocywgcmhzLCBHcmVhdGVyVGhhbiwgY3IwKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bWF4MzIoUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlMzIocmhzLCBzY3JhdGNoKTsKKysgIG1h eDMyKGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1p blB0cihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf Y21wZChsaHMsIHJocyk7CisrICBhc19pc2VsKGRlc3QsIGxocywgcmhzLCBMZXNzVGhhbiwgY3Iw KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluUHRyKFJlZ2lzdGVyIGxocywgSW1t V29yZCByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBtb3ZlUHRyKHJocywgc2NyYXRjaCk7CisrICBtaW5QdHIobGhzLCBzY3JhdGNoLCBkZXN0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4UHRyKFJlZ2lzdGVyIGxocywgUmVnaXN0 ZXIgcmhzLCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19jbXBkKGxocywgcmhzKTsKKysgIGFzX2lz ZWwoZGVzdCwgbGhzLCByaHMsIEdyZWF0ZXJUaGFuLCBjcjApOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjptYXhQdHIoUmVnaXN0ZXIgbGhzLCBJbW1Xb3JkIHJocywgUmVnaXN0ZXIgZGVz dCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIocmhzLCBzY3JhdGNo KTsKKysgIG1heFB0cihsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjptaW5GbG9hdDMyKEZsb2F0UmVnaXN0ZXIgb3RoZXIsIEZsb2F0UmVnaXN0ZXIgc3Jj RGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFuZGxlTmFOKSB7 CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgLy8geHNtaW5qZHAgbWF0Y2hlcyBFQ01BLTI2 MiBNYXRoLm1pbiBzZW1hbnRpY3MgZm9yIMKxMCBhbmQgTmFOLgorKyAgICAvLyBGbG9hdDMyIHZh bHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJsZXMgaW4gUFBDIEZQUnM7IHRoZSBKLWZvcm0KKysgICAg Ly8gcmVzdWx0IGlzIGJpdC1leGFjdCBmb3IgdmFsdWVzIHJlcHJlc2VudGFibGUgaW4gZmxvYXQz MiAod2hpY2gKKysgICAgLy8gaW5jbHVkZXMgZXZlcnkgTmFOL8KxMC/CsUluZiBjb3JuZXIgY2Fz ZSBKUyBvYnNlcnZlcykuIDEgaW5zbi4KKysgICAgYXNfeHNtaW5qZHAoc3JjRGVzdCwgc3JjRGVz dCwgb3RoZXIpOworKyAgICByZXR1cm47CisrICB9CisrICBMYWJlbCBkb25lLCBuYW4sIGVxdWFs OworKyAgYXNfZmNtcHUoc3JjRGVzdCwgb3RoZXIpOworKyAgaWYgKGhhbmRsZU5hTikgeworKyAg ICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCAmbmFuKTsKKysgIH0KKysgIC8vIEhh bmRsZSArMCB2cyAtMC4KKysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgJmVxdWFsKTsK KysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiwgJmRvbmUpOworKyAgYXNfZm1yKHNy Y0Rlc3QsIG90aGVyKTsKKysgIGp1bXAoJmRvbmUpOworKworKyAgYmluZCgmZXF1YWwpOworKyAg Ly8gQm90aCBvcGVyYW5kcyBhcmUgZXF1YWwuIENoZWNrIGlmIHRoZXkncmUgemVyby4KKysgIGxv YWRDb25zdGFudEZsb2F0MzIoMC4wZiwgU2NyYXRjaEZsb2F0MzJSZWcpOworKyAgYXNfZmNtcHUo c3JjRGVzdCwgU2NyYXRjaEZsb2F0MzJSZWcpOworKyAgLy8gSWYgbm90IHplcm8sIHRoZXkncmUg aWRlbnRpY2FsOyBrZWVwIHNyY0Rlc3QuCisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1 YWwsICZkb25lKTsKKysgIC8vIEJvdGggYXJlIHNvbWUgY29tYmluYXRpb24gb2YgKzAvLTAuIEZv ciBtaW4sIHJlc3VsdCBzaG91bGQgYmUgLTAKKysgIC8vIGlmIGVpdGhlciBpcyAtMDogLSgoLXNy Y0Rlc3QpIC0gb3RoZXIpIGdpdmVzIC0wIHdoZW4gZWl0aGVyIGlzIC0wLgorKyAgYXNfZm5lZyhT Y3JhdGNoRmxvYXQzMlJlZywgc3JjRGVzdCk7CisrICBhc19mc3VicyhTY3JhdGNoRmxvYXQzMlJl ZywgU2NyYXRjaEZsb2F0MzJSZWcsIG90aGVyKTsKKysgIGFzX2ZuZWcoc3JjRGVzdCwgU2NyYXRj aEZsb2F0MzJSZWcpOworKyAganVtcCgmZG9uZSk7CisrCisrICBpZiAoaGFuZGxlTmFOKSB7Cisr ICAgIGJpbmQoJm5hbik7CisrICAgIGFzX2ZhZGRzKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsK KysgIH0KKysgIGJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5E b3VibGUoRmxvYXRSZWdpc3RlciBvdGhlciwgRmxvYXRSZWdpc3RlciBzcmNEZXN0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZU5hTikgeworKyAgaWYgKEhhc1BP V0VSOSgpKSB7CisrICAgIC8vIHhzbWluamRwIG1hdGNoZXMgRUNNQS0yNjIgTWF0aC5taW4gc2Vt YW50aWNzIGV4YWN0bHkgKGNvdmVycworKyAgICAvLyAxOSBjb3JuZXIgY2FzZXMgaW5jbHVkaW5n IMKxMCBhbmQgTmFOKS4gMSBpbnNuIHZzIH4xMiBmb3IgdGhlCisrICAgIC8vIGZjbXB1L2JyYW5j aCBmYWxsYmFjay4gUE9XRVI4IGZhbGxiYWNrIGZvbGxvd3MuCisrICAgIGFzX3hzbWluamRwKHNy Y0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgTGFiZWwgZG9u ZSwgbmFuLCBlcXVhbDsKKysgIGFzX2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsKKysgIGlmIChoYW5k bGVOYU4pIHsKKysgICAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgJm5hbik7Cisr ICB9CisrICAvLyBIYW5kbGUgKzAgdnMgLTAuCisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlRXF1 YWwsICZlcXVhbCk7CisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4sICZkb25lKTsK KysgIGFzX2ZtcihzcmNEZXN0LCBvdGhlcik7CisrICBqdW1wKCZkb25lKTsKKysKKysgIGJpbmQo JmVxdWFsKTsKKysgIGxvYWRDb25zdGFudERvdWJsZSgwLjAsIFNjcmF0Y2hEb3VibGVSZWcpOwor KyAgYXNfZmNtcHUoc3JjRGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBtYV9iKEFzc2VtYmxl cjo6RG91YmxlTm90RXF1YWwsICZkb25lKTsKKysgIC8vIC0oKC1zcmNEZXN0KSAtIG90aGVyKSBn aXZlcyAtMCB3aGVuIGVpdGhlciBpcyAtMC4KKysgIGFzX2ZuZWcoU2NyYXRjaERvdWJsZVJlZywg c3JjRGVzdCk7CisrICBhc19mc3ViKFNjcmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcs IG90aGVyKTsKKysgIGFzX2ZuZWcoc3JjRGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBqdW1w KCZkb25lKTsKKysKKysgIGlmIChoYW5kbGVOYU4pIHsKKysgICAgYmluZCgmbmFuKTsKKysgICAg YXNfZmFkZChzcmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7CisrICB9CisrICBiaW5kKCZkb25lKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQzMihGbG9hdFJlZ2lzdGVyIG90 aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGhhbmRsZU5hTikgeworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIC8vIFNl ZSBtaW5GbG9hdDMyIGFib3ZlIGZvciB0aGUgZmxvYXQzMiDihpQgSi1mb3JtIGJpdC1leGFjdG5l c3Mgbm90ZS4KKysgICAgYXNfeHNtYXhqZHAoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOworKyAg ICByZXR1cm47CisrICB9CisrICBMYWJlbCBkb25lLCBuYW4sIGVxdWFsOworKyAgYXNfZmNtcHUo c3JjRGVzdCwgb3RoZXIpOworKyAgaWYgKGhhbmRsZU5hTikgeworKyAgICBtYV9iKEFzc2VtYmxl cjo6RG91YmxlVW5vcmRlcmVkLCAmbmFuKTsKKysgIH0KKysgIC8vIEhhbmRsZSArMCB2cyAtMC4K KysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgJmVxdWFsKTsKKysgIG1hX2IoQXNzZW1i bGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgJmRvbmUpOworKyAgYXNfZm1yKHNyY0Rlc3QsIG90aGVy KTsKKysgIGp1bXAoJmRvbmUpOworKworKyAgYmluZCgmZXF1YWwpOworKyAgbG9hZENvbnN0YW50 RmxvYXQzMigwLjBmLCBTY3JhdGNoRmxvYXQzMlJlZyk7CisrICBhc19mY21wdShzcmNEZXN0LCBT Y3JhdGNoRmxvYXQzMlJlZyk7CisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsICZk b25lKTsKKysgIC8vIC0wICsgLTAgPSAtMCBhbmQgLTAgKyAwID0gKzAuCisrICBhc19mYWRkcyhz cmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7CisrICBqdW1wKCZkb25lKTsKKysKKysgIGlmIChoYW5k bGVOYU4pIHsKKysgICAgYmluZCgmbmFuKTsKKysgICAgYXNfZmFkZHMoc3JjRGVzdCwgc3JjRGVz dCwgb3RoZXIpOworKyAgfQorKyAgYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om1heERvdWJsZShGbG9hdFJlZ2lzdGVyIG90aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rl c3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFuZGxlTmFOKSB7Cisr ICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgLy8gU2VlIG1pbkRvdWJsZSBhYm92ZSBmb3IgdGhl IEotZm9ybSBzZW1hbnRpY3Mgbm90ZS4KKysgICAgYXNfeHNtYXhqZHAoc3JjRGVzdCwgc3JjRGVz dCwgb3RoZXIpOworKyAgICByZXR1cm47CisrICB9CisrICBMYWJlbCBkb25lLCBuYW4sIGVxdWFs OworKyAgYXNfZmNtcHUoc3JjRGVzdCwgb3RoZXIpOworKyAgaWYgKGhhbmRsZU5hTikgeworKyAg ICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCAmbmFuKTsKKysgIH0KKysgIC8vIEhh bmRsZSArMCB2cyAtMC4KKysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgJmVxdWFsKTsK KysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgJmRvbmUpOworKyAgYXNfZm1y KHNyY0Rlc3QsIG90aGVyKTsKKysgIGp1bXAoJmRvbmUpOworKworKyAgYmluZCgmZXF1YWwpOwor KyAgbG9hZENvbnN0YW50RG91YmxlKDAuMCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBhc19mY21w dShzcmNEZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVO b3RFcXVhbCwgJmRvbmUpOworKyAgLy8gLTAgKyAtMCA9IC0wIGFuZCAtMCArIDAgPSArMC4KKysg IGFzX2ZhZGQoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOworKyAganVtcCgmZG9uZSk7CisrCisr ICBpZiAoaGFuZGxlTmFOKSB7CisrICAgIGJpbmQoJm5hbik7CisrICAgIGFzX2ZhZGQoc3JjRGVz dCwgc3JjRGVzdCwgb3RoZXIpOworKyAgfQorKyAgYmluZCgmZG9uZSk7CisrfQorKworKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKy8vIFNoaWZ0IGZ1bmN0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlm dDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgp OworKyAgYXNfcmx3aW5tKG1hc2tlZCwgc3JjLCAwLCAyNywgMzEpOworKyAgYXNfc2x3KGRlc3Qs IGRlc3QsIG1hc2tlZCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICBs c2hpZnQzMihpbW0sIGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjps c2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgeF9z bHdpKGRlc3QsIHNyYywgaW1tLnZhbHVlICYgMHgxZik7CisrICBhc19leHRzdyhkZXN0LCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVMc2hpZnQzMihSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGxzaGlmdDMyKHNyYywgZGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdDY0KFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlcjY0 IGRlc3QpIHsKKysgIC8vIFBQQzY0IHNsZCB1c2VzIGEgNy1iaXQgc2hpZnQgZmllbGQ7IHNoaWZ0 cyA+PSA2NCBwcm9kdWNlIDAuCisrICAvLyBXYXNtIGk2NC5zaGwgcmVxdWlyZXMgc2hpZnQgY291 bnQgbW9kdWxvIDY0LCBzbyBtYXNrIHRvIDYgYml0cy4KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIGFzX3JsZGljbChtYXNrZWQsIHNoaWZ0LCAwLCA1OCk7ICAvLyBjbHJsZGk6IGtlZXAg bG93IDYgYml0cworKyAgYXNfc2xkKGRlc3QucmVnLCBkZXN0LnJlZywgbWFza2VkKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0NjQoSW1tMzIgaW1tLCBSZWdpc3RlcjY0IGRl c3QpIHsKKysgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUgJiYgaW1tLnZhbHVlIDwgNjQpOwor KyAgeF9zbGRpKGRlc3QucmVnLCBkZXN0LnJlZywgaW1tLnZhbHVlKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bHNoaWZ0UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlciBkZXN0KSB7 CisrICBhc19zbGQoZGVzdCwgZGVzdCwgc2hpZnQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpsc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICBsc2hpZnRQdHIo aW1tLCBkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0UHRy KEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJU KDAgPD0gaW1tLnZhbHVlICYmIGltbS52YWx1ZSA8IDY0KTsKKysgIHhfc2xkaShkZXN0LCBzcmMs IGltbS52YWx1ZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlTHNoaWZ0 UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlciBzcmNEZXN0KSB7CisrICBsc2hpZnRQdHIoc2hp ZnQsIHNyY0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMihSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFz X3Jsd2lubShtYXNrZWQsIHNyYywgMCwgMjcsIDMxKTsKKysgIGFzX3NydyhkZXN0LCBkZXN0LCBt YXNrZWQpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgcnNoaWZ0MzIo aW1tLCBkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzIo SW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHhfc3J3aShkZXN0 LCBzcmMsIGltbS52YWx1ZSAmIDB4MWYpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUnNoaWZ0MzIoUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KSB7CisrICByc2hpZnQzMihzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyc2hpZnQzMkFyaXRobWV0aWMoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdp c3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19ybHdpbm0obWFza2VkLCBzcmMs IDAsIDI3LCAzMSk7CisrICBhc19zcmF3KGRlc3QsIGRlc3QsIG1hc2tlZCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDMyQXJpdGhtZXRpYyhJbW0zMiBpbW0sIFJlZ2lzdGVy IGRlc3QpIHsKKysgIHJzaGlmdDMyQXJpdGhtZXRpYyhpbW0sIGRlc3QsIGRlc3QpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMkFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIGFzX3NyYXdpKGRlc3QsIHNyYywgaW1tLnZhbHVlICYgMHgxZik7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUnNoaWZ0MzJBcml0aG1ldGljKFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgcnNoaWZ0MzJBcml0aG1ldGljKHNyYywg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDY0KFJlZ2lzdGVyIHNo aWZ0LCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFz X3JsZGljbChtYXNrZWQsIHNoaWZ0LCAwLCA1OCk7CisrICBhc19zcmQoZGVzdC5yZWcsIGRlc3Qu cmVnLCBtYXNrZWQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQ2NChJbW0z MiBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgTU9aX0FTU0VSVCgwIDw9IGltbS52YWx1ZSAm JiBpbW0udmFsdWUgPCA2NCk7CisrICB4X3NyZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbW0udmFs dWUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQ2NEFyaXRobWV0aWMoSW1t MzIgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUg JiYgaW1tLnZhbHVlIDwgNjQpOworKyAgYXNfc3JhZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbW0u dmFsdWUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQ2NEFyaXRobWV0aWMo UmVnaXN0ZXIgc2hpZnQsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWly ZSgpOworKyAgYXNfcmxkaWNsKG1hc2tlZCwgc2hpZnQsIDAsIDU4KTsKKysgIGFzX3NyYWQoZGVz dC5yZWcsIGRlc3QucmVnLCBtYXNrZWQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpy c2hpZnRQdHIoUmVnaXN0ZXIgc2hpZnQsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3NyZChkZXN0 LCBkZXN0LCBzaGlmdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cihJ bW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHJzaGlmdFB0cihpbW0sIGRlc3QsIGRlc3Qp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUg JiYgaW1tLnZhbHVlIDwgNjQpOworKyAgeF9zcmRpKGRlc3QsIHNyYywgaW1tLnZhbHVlKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVSc2hpZnRQdHIoUmVnaXN0ZXIgc2hp ZnQsIFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIHJzaGlmdFB0cihzaGlmdCwgc3JjRGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIgaW1t LCBSZWdpc3RlciBkZXN0KSB7CisrICByc2hpZnRQdHJBcml0aG1ldGljKGltbSwgZGVzdCwgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0ckFyaXRobWV0aWMoSW1t MzIgaW1tLCBSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYm IGltbS52YWx1ZSA8IDY0KTsKKysgIGFzX3NyYWRpKGRlc3QsIHNyYywgaW1tLnZhbHVlKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0UHRyQXJpdGhtZXRpYyhSZWdpc3RlciBz aGlmdCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfc3JhZChkZXN0LCBkZXN0LCBzaGlmdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUnNoaWZ0UHRyQXJpdGhtZXRpYyhS ZWdpc3RlciBzaGlmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgcnNoaWZ0UHRyQXJpdGhtZXRpYyhzaGlm dCwgc3JjRGVzdCk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFJvdGF0aW9uIGZ1bmN0aW9ucwor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0ZUxlZnQoUmVnaXN0ZXIgY291bnQsIFJlZ2lz dGVyIGlucHV0LCBSZWdpc3RlciBkZXN0KSB7CisrICAvLyBQUEMgcm90bHcgaXMgcmx3bm0gd2l0 aCBmdWxsIG1hc2s6IHJsd25tIGRlc3QsIGlucHV0LCBjb3VudCwgMCwgMzEKKysgIGFzX3Jsd25t KGRlc3QsIGlucHV0LCBjb3VudCwgMCwgMzEpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0ZUxlZnQoSW1tMzIgY291bnQsIFJlZ2lz dGVyIGlucHV0LCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19ybHdpbm0oZGVzdCwgaW5wdXQsIGNv dW50LnZhbHVlICYgMzEsIDAsIDMxKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVMZWZ0NjQoUmVnaXN0ZXIgY291bnQsIFJlZ2lz dGVyNjQgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0 IGRlc3QsIFJlZ2lzdGVyIHRlbXApIHsKKysgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6 SW52YWxpZCgpKTsKKysgIC8vIHJsZGNsIGRlc3QsIHNyYywgY291bnQsIDAg4oCUIHJvdGF0ZSBs ZWZ0IGRvdWJsZXdvcmQgdGhlbiBjbGVhciBsZWZ0IDAgYml0cy4KKysgIGFzX3JsZGNsKGRlc3Qu cmVnLCBzcmMucmVnLCBjb3VudCwgMCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJv dGF0ZUxlZnQ2NChJbW0zMiBjb3VudCwgUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgeworKyAg TU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOworKyAgLy8gcmxkaWNsIGRl c3QsIHNyYywgY291bnQsIDAg4oCUIHJvdGF0ZSBsZWZ0IGRvdWJsZXdvcmQgaW1tZWRpYXRlIHRo ZW4gY2xlYXIuCisrICBhc19ybGRpY2woZGVzdC5yZWcsIHNyYy5yZWcsIGNvdW50LnZhbHVlICYg NjMsIDApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodChSZWdpc3Rl ciBjb3VudCwgUmVnaXN0ZXIgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gcm90YXRlUmlnaHQobikgPSByb3RhdGVMZWZ0KDMy LW4pLiBXaGVuIGRlc3QgIT0gaW5wdXQsIHRoZSBuZWdhdGVkCisrICAvLyBjb3VudCBjYW4gbGFu ZCBkaXJlY3RseSBpbiBkZXN0LCBkcm9wcGluZyB0aGUgR1BSIHNjcmF0Y2guIGRlc3QgbWF5Cisr ICAvLyBhbGlhcyBjb3VudCBoYXJtbGVzc2x5IChzdWJmaWMgcmVhZHMgY291bnQsIHRoZW4gd3Jp dGVzIGRlc3QsIHRoZW4KKysgIC8vIHJsd25tIGNvbnN1bWVzIHRoZSBuZXcgZGVzdCBhcyBpdHMg cm90YXRlLWNvdW50KS4KKysgIGlmIChkZXN0ICE9IGlucHV0KSB7CisrICAgIGFzX3N1YmZpYyhk ZXN0LCBjb3VudCwgMzIpOworKyAgICBhc19ybHdubShkZXN0LCBpbnB1dCwgZGVzdCwgMCwgMzEp OworKyAgICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFzX3N1YmZpYyhzY3JhdGNoLCBjb3VudCwgMzIpOwor KyAgYXNfcmx3bm0oZGVzdCwgaW5wdXQsIHNjcmF0Y2gsIDAsIDMxKTsKKysgIGFzX2V4dHN3KGRl c3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodChJbW0z MiBjb3VudCwgUmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHJvdGF0ZUxlZnQo SW1tMzIoKDMyIC0gY291bnQudmFsdWUpICYgMzEpLCBpbnB1dCwgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0ZVJpZ2h0NjQoUmVnaXN0ZXIgY291bnQsIFJlZ2lzdGVy NjQgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBk ZXN0LCBSZWdpc3RlciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6Oklu dmFsaWQoKSk7CisrICAvLyBTYW1lIHNoYXBlIGFzIHJvdGF0ZVJpZ2h0MzI6IHdoZW4gZGVzdCAh PSBzcmMsIHRoZSBuZWdhdGVkIGNvdW50CisrICAvLyBjYW4gbGFuZCBkaXJlY3RseSBpbiBkZXN0 LCBkcm9wcGluZyB0aGUgR1BSIHNjcmF0Y2guCisrICBpZiAoZGVzdC5yZWcgIT0gc3JjLnJlZykg eworKyAgICBhc19zdWJmaWMoZGVzdC5yZWcsIGNvdW50LCA2NCk7CisrICAgIGFzX3JsZGNsKGRl c3QucmVnLCBzcmMucmVnLCBkZXN0LnJlZywgMCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19zdWJmaWMoc2NyYXRjaCwgY291bnQsIDY0KTsK KysgIGFzX3JsZGNsKGRlc3QucmVnLCBzcmMucmVnLCBzY3JhdGNoLCAwKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRlUmlnaHQ2NChJbW0zMiBjb3VudCwgUmVnaXN0ZXI2NCBz cmMsIFJlZ2lzdGVyNjQgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHRlbXApIHsKKysgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxp ZCgpKTsKKysgIHJvdGF0ZUxlZnQ2NChJbW0zMigoNjQgLSBjb3VudC52YWx1ZSkgJiA2MyksIHNy YywgZGVzdCwgdGVtcCk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIEJpdCBjb3VudGluZyBmdW5j dGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbHo2NChSZWdpc3RlcjY0IHNyYywgUmVn aXN0ZXI2NCBkZXN0KSB7CisrICBhc19jbnRsemQoZGVzdC5yZWcsIHNyYy5yZWcpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjdHo2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBk ZXN0KSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgYXNfY250dHpkKGRlc3QucmVnLCBz cmMucmVnKTsKKysgIH0gZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBhc19u ZWcodG1wLCBzcmMucmVnKTsKKysgICAgLy8gYW5kLiAocmVjb3JkIGZvcm0pIHNldHMgQ1IwW2Vx XSBiYXNlZCBvbiByZXN1bHQ7IHJlc3VsdCBpcyAwIGlmZiBzcmM9PTAsCisrICAgIC8vIHNvIHRo aXMgZm9sZHMgdGhlIGV4cGxpY2l0IHplcm8tY2hlY2sgdGhhdCB3b3VsZCBvdGhlcndpc2UgbmVl ZCBjbXBkaS4KKysgICAgYXNfYW5kX19yYyh0bXAsIHNyYy5yZWcsIHRtcCk7ICAvLyB0bXAgPSB4 ICYgLXg7IENSMFtlcV0gPSAoc3JjID09IDApCisrICAgIGFzX2NudGx6ZCh0bXAsIHRtcCk7ICAg ICAgICAgICAgLy8gdG1wID0gY2x6KGlzb2xhdGVkIGJpdCkKKysgICAgYXNfc3ViZmljKGRlc3Qu cmVnLCB0bXAsIDYzKTsgICAvLyBkZXN0ID0gNjMgLSBjbHogPSBjdHogKGZvciBub256ZXJvKQor KyAgICB4c19saSh0bXAsIDY0KTsKKysgICAgYXNfaXNlbChkZXN0LnJlZywgdG1wLCBkZXN0LnJl ZywgRXF1YWwpOyAgLy8gQ1IwW2VxXSDihpIgNjQgaWYgc3JjPT0wCisrICB9CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNudDY0KFJlZ2lzdGVyNjQgaW5wdXQsIFJlZ2lzdGVyNjQg b3V0cHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRtcCkgewor KyAgYXNfcG9wY250ZChvdXRwdXQucmVnLCBpbnB1dC5yZWcpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjbHozMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsIGJvb2wga25vd25O b3RaZXJvKSB7CisrICBhc19jbnRsencoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y3R6MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBib29sIGtub3duTm90 WmVybykgeworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX2NudHR6dyhkZXN0LCBzcmMp OworKyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMp OworKyAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGFzX25lZyh0bXAs IHNyYyk7CisrICAgIC8vIGFuZC4gcmVjb3JkIGZvcm0gZm9sZHMgdGhlIGNtcHdpIHNyYywwIHRo YXQgd291bGQgb3RoZXJ3aXNlIGJlIG5lZWRlZAorKyAgICAvLyB0byBkcml2ZSB0aGUgaXNlbCBi ZWxvdzogdG1wID09IDAgaWZmIHNyYyA9PSAwLgorKyAgICBpZiAoa25vd25Ob3RaZXJvKSB7Cisr ICAgICAgYXNfYW5kXyh0bXAsIHNyYywgdG1wKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19h bmRfX3JjKHRtcCwgc3JjLCB0bXApOyAgLy8gQ1IwW2VxXSA9IChzcmMgPT0gMCkKKysgICAgfQor KyAgICBhc19jbnRsencodG1wLCB0bXApOworKyAgICBhc19zdWJmaWMoZGVzdCwgdG1wLCAzMSk7 CisrICAgIGlmICgha25vd25Ob3RaZXJvKSB7CisrICAgICAgeHNfbGkodG1wLCAzMik7CisrICAg ICAgYXNfaXNlbChkZXN0LCB0bXAsIGRlc3QsIEVxdWFsKTsgIC8vIENSMFtlcV0g4oaSIDMyIGlm IHNyYz09MAorKyAgICB9CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNu dDMyKFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBvdXRwdXQsIFJlZ2lzdGVyIHRtcCkgeworKyAg YXNfcG9wY250dyhvdXRwdXQsIGlucHV0KTsKKysgIC8vIHBvcGNudHcgZ2l2ZXMgcGVyLXdvcmQg cmVzdWx0czsgb24gNjQtYml0IHRoZSBsb3cgd29yZCBjb3VudCBpcyBpbgorKyAgLy8gYml0cyAz Mjo2Mywgc28ganVzdCBtYXNrIHRvIDMyIGJpdHMuCisrICBhc19ybHdpbm0ob3V0cHV0LCBvdXRw dXQsIDAsIDAsIDMxKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gQ29uZGl0aW9uIGZ1bmN0aW9u cworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDhTZXQoQ29uZGl0aW9uIGNvbmQsIEFkZHJl c3MgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Cisr ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTU9aX0FTU0VSVChzY3Jh dGNoICE9IGxocy5iYXNlKTsKKysgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25kICYgQXNzZW1ibGVy OjpDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKKysgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgIGxv YWQ4WmVyb0V4dGVuZChsaHMsIHNjcmF0Y2gpOworKyAgICBDb25kaXRpb24gYyA9IG1hX2NtcChz Y3JhdGNoLCBJbW0zMih1aW50OF90KHJocy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKKysgICAgbWFf Y21wX3NldChkZXN0LCBjKTsKKysgIH0gZWxzZSB7CisrICAgIGxvYWQ4U2lnbkV4dGVuZChsaHMs IHNjcmF0Y2gpOworKyAgICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW0zMihpbnQ4 X3QocmhzLnZhbHVlKSksIGNvbmQsIHRydWUpOworKyAgICBtYV9jbXBfc2V0KGRlc3QsIGMpOwor KyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAxNlNldChDb25kaXRpb24gY29u ZCwgQWRkcmVzcyBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTU9aX0FT U0VSVChzY3JhdGNoICE9IGxocy5iYXNlKTsKKysgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25kICYg QXNzZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKKysgIGlmIChpc1Vuc2lnbmVkKSB7 CisrICAgIGxvYWQxNlplcm9FeHRlbmQobGhzLCBzY3JhdGNoKTsKKysgICAgQ29uZGl0aW9uIGMg PSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIodWludDE2X3QocmhzLnZhbHVlKSksIGNvbmQsIHRydWUp OworKyAgICBtYV9jbXBfc2V0KGRlc3QsIGMpOworKyAgfSBlbHNlIHsKKysgICAgbG9hZDE2U2ln bkV4dGVuZChsaHMsIHNjcmF0Y2gpOworKyAgICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNo LCBJbW0zMihpbnQxNl90KHJocy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKKysgICAgbWFfY21wX3Nl dChkZXN0LCBjKTsKKysgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt ZSBUMj4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMlNldChDb25kaXRpb24gY29uZCwgVDEg bGhzLCBUMiByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxo cywgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDY0U2V0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGxo cywgUmVnaXN0ZXI2NCByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLnJlZywgcmhzLnJlZywgY29u ZCk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpjbXA2NFNldChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIEltbTY0IHJocywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRp b24gYyA9IG1hX2NtcChsaHMucmVnLCBJbW1Xb3JkKHVpbnQ2NF90KHJocy52YWx1ZSkpLCBjb25k KTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmNtcDY0U2V0KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywgUmVnaXN0ZXI2NCByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlv biBjID0gbWFfY21wKHNjcmF0Y2gsIHJocy5yZWcsIGNvbmQpOworKyAgbWFfY21wX3NldChkZXN0 LCBjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wNjRTZXQoQ29uZGl0aW9uIGNv bmQsIEFkZHJlc3MgbGhzLCBJbW02NCByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQ dHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIEltbVdv cmQodWludDY0X3QocmhzLnZhbHVlKSksIGNvbmQpOworKyAgbWFfY21wX3NldChkZXN0LCBjKTsK Kyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjbXBQdHJTZXQoQ29uZGl0aW9uIGNvbmQsIFQxIGxocywgVDIgcmhzLCBSZWdp c3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7Cisr ICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBCcmFuY2ggZnVu Y3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoOChDb25kaXRpb24gY29uZCwg Y29uc3QgQWRkcmVzcyYgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAvLyBN aXJyb3IgQVJNNjQvTG9vbmdBcmNoNjQvUklTQy1WOiBuYXJyb3cgdGhlIGltbWVkaWF0ZSB0byB0 aGUgOC1iaXQKKysgIC8vIG1lbW9yeSBvcGVyYW5kIHdpZHRoIHNvIGJvdGggc2lkZXMgb2YgdGhl IGNvbXBhcmUgaGF2ZSBtYXRjaGluZyBiaXQKKysgIC8vIHBhdHRlcm5zIHJlZ2FyZGxlc3Mgb2Yg aG93IG1vdmUzMihJbW0zMikgbWF0ZXJpYWxpemVzIHRoZSBpbW0uIFVzZQorKyAgLy8gdWludDgg Y2FzdCBmb3IgZXF1YWxpdHkgLyB1bnNpZ25lZCwgaW50OCBjYXN0IGZvciBzaWduZWQgcmVsYXRp b25hbC4KKysgIGJvb2wgaXNFcU9yTmUgPSAoY29uZCA9PSBBc3NlbWJsZXI6OkVxdWFsKSB8fCAo Y29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsKKysgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25k ICYgQXNzZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKKysgIEltbTMyIG5hcnJvd2Vk KDApOworKyAgaWYgKGlzRXFPck5lIHx8IGlzVW5zaWduZWQpIHsKKysgICAgbG9hZDhaZXJvRXh0 ZW5kKGxocywgc2NyYXRjaCk7CisrICAgIG5hcnJvd2VkID0gSW1tMzIodWludDhfdChyaHMudmFs dWUpKTsKKysgIH0gZWxzZSB7CisrICAgIGxvYWQ4U2lnbkV4dGVuZChsaHMsIHNjcmF0Y2gpOwor KyAgICBuYXJyb3dlZCA9IEltbTMyKGludDhfdChyaHMudmFsdWUpKTsKKysgIH0KKysgIENvbmRp dGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIG5hcnJvd2VkLCBjb25kLCB0cnVlKTsKKysgIG1hX2Io YywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2g4KENvbmRpdGlv biBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgbG9hZDhaZXJvRXh0ZW5kKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9 IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBjb25z dCBBZGRyZXNzJiBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAvLyBTZWUg YnJhbmNoODogbmFycm93IHRoZSBpbW1lZGlhdGUgdG8gMTYgYml0cyBzbyBib3RoIHNpZGVzIGhh dmUgbWF0Y2hpbmcKKysgIC8vIGJpdCBwYXR0ZXJucy4gdWludDE2IGZvciBlcXVhbGl0eSAvIHVu c2lnbmVkLCBpbnQxNiBmb3Igc2lnbmVkIHJlbGF0aW9uYWwuCisrICBib29sIGlzRXFPck5lID0g KGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVhbCkgfHwgKGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVh bCk7CisrICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5z aWduZWQpICE9IDA7CisrICBJbW0zMiBuYXJyb3dlZCgwKTsKKysgIGlmIChpc0VxT3JOZSB8fCBp c1Vuc2lnbmVkKSB7CisrICAgIGxvYWQxNlplcm9FeHRlbmQobGhzLCBzY3JhdGNoKTsKKysgICAg bmFycm93ZWQgPSBJbW0zMih1aW50MTZfdChyaHMudmFsdWUpKTsKKysgIH0gZWxzZSB7CisrICAg IGxvYWQxNlNpZ25FeHRlbmQobGhzLCBzY3JhdGNoKTsKKysgICAgbmFycm93ZWQgPSBJbW0zMihp bnQxNl90KHJocy52YWx1ZSkpOworKyAgfQorKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRj aCwgbmFycm93ZWQsIGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMs IFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKKysg IG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihD b25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiBpbW0sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChs aHMsIGltbSwgY29uZCwgdHJ1ZSk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxo cywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihsaHMsIHNjcmF0 Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsK KysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gz MihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW0zMiByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgbG9hZDMyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcChzY3JhdGNoLCByaHMsIGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBB YnNvbHV0ZUFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7CisrICBsb2Fk MzIoQWRkcmVzcyhzY3JhdGNoLCAwKSwgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2Nt cChzY3JhdGNoLCByaHMsIGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNv bHV0ZUFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiBy aHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQ dHIoSW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7CisrICBsb2FkMzIoQWRk cmVzcyhzY3JhdGNoLCAwKSwgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3Jh dGNoLCByaHMsIGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgm IGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihsaHMsIHNjcmF0 Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsK KysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gz MihDb25kaXRpb24gY29uZCwgd2FzbTo6U3ltYm9saWNBZGRyZXNzIGFkZHIsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW1tMzIgaW1tLCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKGFkZHIsIHNjcmF0Y2gpOworKyAgbG9hZDMy KEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo c2NyYXRjaCwgaW1tLCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2g2NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBs aHMsIEltbTY0IHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogc3Vj Y2VzcywgTGFiZWwqIGZhaWwpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocy5yZWcsIElt bVdvcmQodWludDY0X3QodmFsLnZhbHVlKSksIGNvbmQpOworKyAgaWYgKGZhaWwpIHsKKysgICAg bWFfYihjLCBzdWNjZXNzKTsKKysgICAganVtcChmYWlsKTsKKysgIH0gZWxzZSB7CisrICAgIG1h X2IoYywgc3VjY2Vzcyk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aDY0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGxocywgUmVnaXN0ZXI2NCByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7 CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMucmVnLCByaHMucmVnLCBjb25kKTsKKysgIGlm IChmYWlsKSB7CisrICAgIG1hX2IoYywgc3VjY2Vzcyk7CisrICAgIGp1bXAoZmFpbCk7CisrICB9 IGVsc2UgeworKyAgICBtYV9iKGMsIHN1Y2Nlc3MpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2g2NChDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJ bW02NCB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3Ms IExhYmVsKiBmYWlsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihs aHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tV29yZCh1 aW50NjRfdCh2YWwudmFsdWUpKSwgY29uZCk7CisrICBpZiAoZmFpbCkgeworKyAgICBtYV9iKGMs IHN1Y2Nlc3MpOworKyAgICBqdW1wKGZhaWwpOworKyAgfSBlbHNlIHsKKysgICAgbWFfYihjLCBz dWNjZXNzKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlcjY0IHJocywgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOworKyAg Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLnJlZywgY29uZCk7CisrICBpZiAoZmFp bCkgeworKyAgICBtYV9iKGMsIHN1Y2Nlc3MpOworKyAgICBqdW1wKGZhaWwpOworKyAgfSBlbHNl IHsKKysgICAgbWFfYihjLCBzdWNjZXNzKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoNjQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiByaHMsIFJlZ2lzdGVyIHNj cmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Cisr ICBsb2FkUHRyKHJocywgc2NyYXRjaCk7CisrICBicmFuY2g2NChjb25kLCBsaHMsIFJlZ2lzdGVy NjQoc2NyYXRjaCksIGxhYmVsLCBudWxscHRyKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBDb25k aXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBSZWdp c3RlciBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIEltbVdvcmQoaW50NjRf dChyaHMudmFsdWUpKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIElt bVB0ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg eworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBs YWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1HQ1B0ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBy aHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1Xb3JkIHJocywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBDb25k aXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25z dCBBZGRyZXNzJiBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9h ZFB0cihsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhz LCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tUHRyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOworKyAgQ29u ZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFkZHJlc3MmIGxocywgSW1tR0NQdHIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNo LCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW1X b3JkIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwor KyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKKysgIG1hX2IoYywg bGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEFic29sdXRlQWRkcmVzcyYgbGhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2Ny YXRjaCk7CisrICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOworKyAgQ29u ZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFic29sdXRlQWRkcmVzcyYgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbW1Xb3JkIHJocywgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgbW92ZVB0cihJbW1Xb3JkKCh1aW50cHRyX3QpbGhzLmFkZHIpLCBzY3JhdGNoKTsK KysgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCAwKSwgc2NyYXRjaCk7CisrICBDb25kaXRpb24g YyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgd2FzbTo6 U3ltYm9saWNBZGRyZXNzIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBtb3ZlUHRyKGxocywgc2NyYXRjaCk7CisrICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgMCks IHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsK KysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQ dHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgbGhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlv biBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25z dCBCYXNlSW5kZXgmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tV29y ZCByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxv YWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJo cywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUHJpdmF0ZVB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJl bCogbGFiZWwpIHsKKysgIGJyYW5jaFB0cihjb25kLCBsaHMsIHJocywgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hGbG9hdChEb3VibGVDb25kaXRpb24gY29uZCwg RmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgYXNfZmNtcHUobGhzLCByaHMpOwor KyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFRydW5jYXRlRmxvYXQzMk1heWJlTW9kVWludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIC8vIENvbnZlcnQgZmxvYXQzMiB0byBpbnQ2 NCAodHJ1bmNhdGluZyB0b3dhcmQgemVybyksIGZhaWwgb24gTmFOL292ZXJmbG93LgorKyAgYXNf ZmN0aWR6KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7CisrICBhc19tZnZzcmQoZGVzdCwgU2NyYXRj aERvdWJsZVJlZyk7CisrICAvLyBQUEM2NCBmY3RpZHogc2F0dXJhdGVzIHRvIElOVDY0X01JTiBv biBuZWdhdGl2ZSBvdmVyZmxvdy9OYU4sCisrICAvLyBhbmQgdG8gSU5UNjRfTUFYIG9uIHBvc2l0 aXZlIG92ZXJmbG93LiBDaGVjayBib3RoLgorKyAgYXNNYXNtKCkuYnJhbmNoUHRyKEFzc2VtYmxl cjo6RXF1YWwsIGRlc3QsIEltbVdvcmQoaW50NjRfdChJTlQ2NF9NSU4pKSwgZmFpbCk7CisrICBh c01hc20oKS5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgZGVzdCwgSW1tV29yZChpbnQ2NF90 KElOVDY0X01BWCkpLCBmYWlsKTsKKysgIC8vIFRydW5jYXRlIHRvIHVpbnQzMiAoa2VlcCBsb3cg MzIgYml0cykuCisrICBhc19ybGRpY2woZGVzdCwgZGVzdCwgMCwgMzIpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0ZUZsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwpIHsKKysgIGNvbnZlcnRGbG9hdDMyVG9JbnQz MihzcmMsIGRlc3QsIGZhaWwsIGZhbHNlKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoRG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIExhYmVs KiBsYWJlbCkgeworKyAgYXNfZmNtcHUobGhzLCByaHMpOworKyAgbWFfYihjb25kLCBsYWJlbCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRydW5jYXRlRG91YmxlTWF5YmVN b2RVaW50MzIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwp IHsKKysgIC8vIENvbnZlcnQgZG91YmxlIHRvIGludDY0ICh0cnVuY2F0aW5nIHRvd2FyZCB6ZXJv KSwgZmFpbCBvbiBOYU4vb3ZlcmZsb3cuCisrICBhc19mY3RpZHooU2NyYXRjaERvdWJsZVJlZywg c3JjKTsKKysgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIC8vIFBQQzY0 IGZjdGlkeiBzYXR1cmF0ZXMgdG8gSU5UNjRfTUlOIG9uIG5lZ2F0aXZlIG92ZXJmbG93L05hTiwK KysgIC8vIGFuZCB0byBJTlQ2NF9NQVggb24gcG9zaXRpdmUgb3ZlcmZsb3cuIENoZWNrIGJvdGgu CisrICBhc01hc20oKS5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgZGVzdCwgSW1tV29yZChp bnQ2NF90KElOVDY0X01JTikpLCBmYWlsKTsKKysgIGFzTWFzbSgpLmJyYW5jaFB0cihBc3NlbWJs ZXI6OkVxdWFsLCBkZXN0LCBJbW1Xb3JkKGludDY0X3QoSU5UNjRfTUFYKSksIGZhaWwpOworKyAg Ly8gVHJ1bmNhdGUgdG8gdWludDMyIChrZWVwIGxvdyAzMiBiaXRzKS4KKysgIGFzX3JsZGljbChk ZXN0LCBkZXN0LCAwLCAzMik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRy dW5jYXRlRG91YmxlVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZh aWwpIHsKKysgIGNvbnZlcnREb3VibGVUb0ludDMyKHNyYywgZGVzdCwgZmFpbCwgZmFsc2UpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hJbnQ2NE5vdEluUHRyUmFuZ2UoUmVn aXN0ZXI2NCBzcmMsIExhYmVsKiBsYWJlbCkgeworKyAgLy8gTm8tb3Agb24gNjQtYml0LgorK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hVSW50NjROb3RJblB0clJhbmdlKFJlZ2lz dGVyNjQgc3JjLCBMYWJlbCogbGFiZWwpIHsKKysgIC8vIEJyYW5jaCBpZiBzcmMgPj0gMl42MyAo c2lnbiBiaXQgc2V0ID0gb3V0IG9mIHNpZ25lZCBwdHIgcmFuZ2UpLgorKyAgYXNfY21wZGkoc3Jj LnJlZywgMCk7CisrICBtYV9iKEFzc2VtYmxlcjo6TGVzc1RoYW4sIGxhYmVsKTsKKyt9CisrCisr dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoQWRkMzIo Q29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBvdmVyZmxvdykgeworKyAgc3dpdGNoIChjb25kKSB7Cisr ICAgIGNhc2UgT3ZlcmZsb3c6IHsKKysgICAgICAvLyBEbyByYXcgNjQtYml0IGFkZCAobm8gc2ln biBleHRlbnNpb24pIHNvIHdlIGNhbiBkZXRlY3QgMzItYml0IG92ZXJmbG93LgorKyAgICAgIC8v IEJvdGggaW5wdXRzIHNob3VsZCBhbHJlYWR5IGJlIHNpZ24tZXh0ZW5kZWQgMzItYml0IHZhbHVl cywgc28gdGhlCisrICAgICAgLy8gNjQtYml0IHJlc3VsdCBpcyBtYXRoZW1hdGljYWxseSBjb3Jy ZWN0LiBJZiBleHRzdyhyZXN1bHQpICE9IHJlc3VsdCwKKysgICAgICAvLyB0aGUgMzItYml0IGFk ZCBvdmVyZmxvd2VkLgorKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKKysgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAg IGFkZFB0cihzcmMsIGRlc3QpOworKyAgICAgIGFzX2V4dHN3KHNjcmF0Y2gsIGRlc3QpOworKyAg ICAgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICAgICAgYXNfZXh0c3coZGVzdCwgZGVzdCk7 CisrICAgICAgbWFfYihOb3RFcXVhbCwgb3ZlcmZsb3cpOworKyAgICAgIGJyZWFrOworKyAgICB9 CisrICAgIGNhc2UgTm9uWmVybzoKKysgICAgY2FzZSBaZXJvOgorKyAgICAgIGFkZDMyKHNyYywg ZGVzdCk7CisrICAgICAgYXNfY21wZGkoZGVzdCwgMCk7CisrICAgICAgbWFfYihjb25kID09IE5v blplcm8gPyBOb3RFcXVhbCA6IEVxdWFsLCBvdmVyZmxvdyk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgU2lnbmVkOgorKyAgICBjYXNlIE5vdFNpZ25lZDoKKysgICAgICBhZGQzMihzcmMsIGRl c3QpOworKyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgICAgIG1hX2IoY29uZCA9PSBTaWdu ZWQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgb3ZlcmZsb3cpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIENhcnJ5Q2xlYXI6CisrICAgIGNhc2UgQ2FycnlTZXQ6IHsKKysgICAg ICAvLyBVbnNpZ25lZCAzMi1iaXQgY2FycnkgZGV0ZWN0aW9uOiBzYXZlIGRlc3QsIGRvIDMyLWJp dCBhZGQsCisrICAgICAgLy8gdGhlbiB1bnNpZ25lZC1jb21wYXJlIHJlc3VsdCB3aXRoIG9yaWdp bmFsLiBJZiByZXN1bHQgPCBvcmlnaW5hbAorKyAgICAgIC8vICh1bnNpZ25lZCksIGEgY2Fycnkg b2NjdXJyZWQuCisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbW92 ZTMyKGRlc3QsIHNjcmF0Y2gpOworKyAgICAgIGFkZDMyKHNyYywgZGVzdCk7CisrICAgICAgYXNf Y21wbHcoZGVzdCwgc2NyYXRjaCk7CisrICAgICAgbWFfYihjb25kID09IENhcnJ5U2V0ID8gTGVz c1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93KTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiTllJIik7CisrICB9CisrfQor KworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFN1 YjMyKENvbmRpdGlvbiBjb25kLCBUIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cpIHsKKysgIHN3aXRjaCAoY29uZCkg eworKyAgICBjYXNlIE92ZXJmbG93OiB7CisrICAgICAgLy8gRG8gcmF3IDY0LWJpdCBzdWIgKG5v IHNpZ24gZXh0ZW5zaW9uKSBzbyB3ZSBjYW4gZGV0ZWN0IDMyLWJpdCBvdmVyZmxvdy4KKysgICAg ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsK KysgICAgICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgICAgICBhc19jbXBkKGRlc3QsIHNj cmF0Y2gpOworKyAgICAgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIG1hX2IoTm90RXF1 YWwsIG92ZXJmbG93KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIE5vblplcm86 CisrICAgIGNhc2UgWmVybzoKKysgICAgICBzdWIzMihzcmMsIGRlc3QpOworKyAgICAgIGFzX2Nt cGRpKGRlc3QsIDApOworKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJvID8gTm90RXF1YWwgOiBF cXVhbCwgb3ZlcmZsb3cpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNpZ25lZDoKKysgICAg Y2FzZSBOb3RTaWduZWQ6CisrICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKysgICAgICBhc19jbXBk aShkZXN0LCAwKTsKKysgICAgICBtYV9iKGNvbmQgPT0gU2lnbmVkID8gTGVzc1RoYW4gOiBHcmVh dGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93KTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0goIk5ZSSIpOworKyAgfQorK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwg VCBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIG92ZXJmbG93KSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cpOworKyAg Ly8gRG8gcmF3IDY0LWJpdCBtdWx0aXBseSAobm8gc2lnbiBleHRlbnNpb24pIHNvIHdlIGNhbiBk ZXRlY3QgMzItYml0CisrICAvLyBvdmVyZmxvdy4gYXNfbXVsbGQgZ2l2ZXMgZnVsbCA2NC1iaXQg bG93IHJlc3VsdDsgaWYgZXh0c3cocmVzdWx0KSAhPQorKyAgLy8gcmVzdWx0LCBvdmVyZmxvdy4g c2NyYXRjaCBpcyBkZWFkIGFmdGVyIHRoZSBtdWxsZCAoY29uc3VtZWQgYXMgUkIpLAorKyAgLy8g c28gdGhlIHNpZ24tZXh0ZW5zaW9uIHJvdW5kLXRyaXAgcmV1c2VzIGl0IGluc3RlYWQgb2YgYWNx dWlyaW5nIGEKKysgIC8vIHNlY29uZCBzY3JhdGNoLgorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIG1vdmUzMihzcmMsIHNjcmF0Y2gpOworKyAgYXNfbXVsbGQoZGVzdCwgZGVzdCwgc2Ny YXRjaCk7CisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgIGFzX2NtcGQoZGVzdCwgc2Ny YXRjaCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgIG1hX2IoTm90RXF1YWwsIG92ZXJm bG93KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUnNoaWZ0MzIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAg TU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvKTsKKysgIHJzaGlmdDMy KHNyYywgZGVzdCk7CisrICBicmFuY2gzMihjb25kID09IFplcm8gPyBFcXVhbCA6IE5vdEVxdWFs LCBkZXN0LCBJbW0zMigwKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hOZWczMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgcmVnLCBMYWJlbCogbGFiZWwpIHsK KysgIE1PWl9BU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisrICBuZWczMihyZWcpOworKyAgYnJh bmNoMzIoRXF1YWwsIHJlZywgSW1tMzIoSU5UMzJfTUlOKSwgbGFiZWwpOworK30KKysKKyt0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hBZGRQdHIoQ29u ZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIHN3aXRjaCAoY29uZCkgeworKyAgICBj YXNlIE92ZXJmbG93OiB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAg ICAgbW92ZVB0cihkZXN0LCBzY3JhdGNoKTsgIC8vIHNjcmF0Y2ggPSBvbGRfZGVzdAorKyAgICAg IGFkZFB0cihzcmMsIGRlc3QpOyAgICAgICAvLyBkZXN0ID0gcmVzdWx0ID0gb2xkX2Rlc3QgKyBz cmMKKysgICAgICBhc194b3JfKFNlY29uZFNjcmF0Y2hSZWcsIGRlc3QsCisrICAgICAgICAgICAg ICBzY3JhdGNoKTsgIC8vIFNlY29uZFNjcmF0Y2ggPSByZXN1bHQgXiBvbGRfZGVzdAorKyAgICAg IGFzX3N1YmYoc2NyYXRjaCwgc2NyYXRjaCwKKysgICAgICAgICAgICAgIGRlc3QpOyAgLy8gc2Ny YXRjaCA9IHJlc3VsdCAtIG9sZF9kZXN0ID0gc3JjX3ZhbHVlCisrICAgICAgYXNfeG9yXyhzY3Jh dGNoLCBzY3JhdGNoLCBkZXN0KTsgIC8vIHNjcmF0Y2ggPSBzcmNfdmFsdWUgXiByZXN1bHQKKysg ICAgICAvLyAob2xkX2Rlc3QgXiByZXN1bHQpICYgKHNyY192YWx1ZSBeIHJlc3VsdCk6IGJpdCA2 MyBzZXQgaWZmIG92ZXJmbG93LgorKyAgICAgIC8vIGFuZC4gcmVjb3JkIGZvcm0gc2V0cyBDUjBb bHRdPShiaXQgNjMgc2V0KSwgZm9sZGluZyB0aGUgY21wZGkuCisrICAgICAgYXNfYW5kX19yYyhz Y3JhdGNoLCBzY3JhdGNoLCBTZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgICBtYV9iKExlc3NUaGFu LCBsYWJlbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBOb25aZXJvOgorKyAg ICBjYXNlIFplcm86CisrICAgICAgYWRkUHRyKHNyYywgZGVzdCk7CisrICAgICAgYXNfY21wZGko ZGVzdCwgMCk7CisrICAgICAgbWFfYihjb25kID09IE5vblplcm8gPyBOb3RFcXVhbCA6IEVxdWFs LCBsYWJlbCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2lnbmVkOgorKyAgICBjYXNlIE5v dFNpZ25lZDoKKysgICAgICBhZGRQdHIoc3JjLCBkZXN0KTsKKysgICAgICBhc19jbXBkaShkZXN0 LCAwKTsKKysgICAgICBtYV9iKGNvbmQgPT0gU2lnbmVkID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhh bk9yRXF1YWwsIGxhYmVsKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBDYXJyeUNsZWFyOgor KyAgICBjYXNlIENhcnJ5U2V0OiB7CisrICAgICAgLy8gVW5zaWduZWQgNjQtYml0IGNhcnJ5IGRl dGVjdGlvbjogc2F2ZSBkZXN0LCBkbyA2NC1iaXQgYWRkLAorKyAgICAgIC8vIHRoZW4gdW5zaWdu ZWQtY29tcGFyZSByZXN1bHQgd2l0aCBvcmlnaW5hbC4gSWYgcmVzdWx0IDwgb3JpZ2luYWwKKysg ICAgICAvLyAodW5zaWduZWQpLCBhIGNhcnJ5IG9jY3VycmVkLgorKyAgICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1vdmVQdHIoZGVzdCwgc2NyYXRjaCk7CisrICAgICAg YWRkUHRyKHNyYywgZGVzdCk7CisrICAgICAgYXNfY21wbGQoZGVzdCwgc2NyYXRjaCk7CisrICAg ICAgbWFfYihjb25kID09IENhcnJ5U2V0ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWws IGxhYmVsKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBkZWZhdWx0OgorKyAgICAgIE1P Wl9DUkFTSCgiTllJIik7CisrICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFN1YlB0cihDb25kaXRpb24gY29uZCwgVCBzcmMsIFJl Z2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgeworKyAgc3dpdGNoIChjb25kKSB7CisrICAgIGNhc2UgT3ZlcmZsb3c6IHsKKysgICAg ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBtb3ZlUHRyKGRlc3QsIHNjcmF0 Y2gpOyAgLy8gc2NyYXRjaCA9IG9sZF9kZXN0CisrICAgICAgc3ViUHRyKHNyYywgZGVzdCk7ICAg ICAgIC8vIGRlc3QgPSByZXN1bHQgPSBvbGRfZGVzdCAtIHNyYworKyAgICAgIC8vIE92ZXJmbG93 IGlmIChvbGRfZGVzdCBeIHNyY192YWx1ZSkgJiAob2xkX2Rlc3QgXiByZXN1bHQpIGhhcyBiaXQg NjMKKysgICAgICAvLyBzZXQuCisrICAgICAgYXNfc3ViZihTZWNvbmRTY3JhdGNoUmVnLCBkZXN0 LAorKyAgICAgICAgICAgICAgc2NyYXRjaCk7ICAvLyBTZWNvbmRTY3JhdGNoID0gb2xkX2Rlc3Qg LSByZXN1bHQgPSBzcmNfdmFsdWUKKysgICAgICBhc194b3JfKFNlY29uZFNjcmF0Y2hSZWcsIHNj cmF0Y2gsCisrICAgICAgICAgICAgICBTZWNvbmRTY3JhdGNoUmVnKTsgICAgICAgIC8vIG9sZF9k ZXN0IF4gc3JjX3ZhbHVlCisrICAgICAgYXNfeG9yXyhzY3JhdGNoLCBzY3JhdGNoLCBkZXN0KTsg IC8vIG9sZF9kZXN0IF4gcmVzdWx0CisrICAgICAgLy8gUmVjb3JkLWZvcm0gQU5EIHNldHMgQ1Iw IHRvIHRoZSBzaWduZWQgY29tcGFyZSBvZiB0aGUgcmVzdWx0IHZzIDAsCisrICAgICAgLy8gc28g YSBzZXBhcmF0ZSBjbXBkaSBpcyB1bm5lY2Vzc2FyeTsgTGVzc1RoYW4gcmVhZHMgQ1IwLkxULgor KyAgICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgc2NyYXRjaCwgU2Vjb25kU2NyYXRjaFJlZyk7Cisr ICAgICAgbWFfYihMZXNzVGhhbiwgbGFiZWwpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgTm9uWmVybzoKKysgICAgY2FzZSBaZXJvOgorKyAgICAgIHN1YlB0cihzcmMsIGRlc3Qp OworKyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJv ID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNp Z25lZDoKKysgICAgY2FzZSBOb3RTaWduZWQ6CisrICAgICAgc3ViUHRyKHNyYywgZGVzdCk7Cisr ICAgICAgYXNfY21wZGkoZGVzdCwgMCk7CisrICAgICAgbWFfYihjb25kID09IFNpZ25lZCA/IExl c3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBsYWJlbCk7CisrICAgICAgYnJlYWs7CisrICAg IGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJOWUkiKTsKKysgIH0KKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoTXVsUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6T3ZlcmZsb3cpOwor KyAgYXNfbXVsbGRvKGRlc3QsIGRlc3QsIHNyYyk7CisrICBtYV9iKE92ZXJmbG93LCBsYWJlbCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaE5lZ1B0cihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgcmVnLCBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBP dmVyZmxvdyk7CisrICBuZWdQdHIocmVnKTsKKysgIGJyYW5jaFB0cihBc3NlbWJsZXI6OkVxdWFs LCByZWcsIEltbVdvcmQoaW50cHRyX3QoSU5UUFRSX01JTikpLCBsYWJlbCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmRlY0JyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIg bGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgeworKyAgc3ViUHRyKHJocywgbGhzKTsKKysgIGJyYW5jaFB0cihjb25kLCBsaHMs IEltbTMyKDApLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VS VChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8Cisr ICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVkKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBpZiAobGhzICE9IHJocykgeworKyAgICBhc19hbmRfKHNjcmF0Y2gsIGxocywgcmhz KTsKKysgICAgYXNfZXh0c3dfcmMoc2NyYXRjaCwgc2NyYXRjaCk7ICAvLyBDUjAgc2V0IG9uIHNp Z24tZXh0ZW5kZWQgaTMyOyBmb2xkcyBjbXBkaQorKyAgfSBlbHNlIHsKKysgICAgYXNfZXh0c3df cmMoc2NyYXRjaCwgbGhzKTsKKysgIH0KKysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8 Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9iKGJh c2UsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdDMyKENv bmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0g WmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAg ICAgY29uZCA9PSBOb3RTaWduZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGlm IChpc191aW50TihyaHMudmFsdWUsIDE2KSkgeworKyAgICBhc19hbmRpX3JjKHNjcmF0Y2gsIGxo cywgcmhzLnZhbHVlKTsKKysgICAgLy8gYW5kaV9yYyBzZXRzIENSMCBvbiB0aGUgbWFza2VkIHZh bHVlLCBidXQgb25seSB0aGUgbG93IDE2IGJpdHMgbWF0dGVyCisrICAgIC8vIHNpbmNlIHJocyBp cyBhIDE2LWJpdCB1bnNpZ25lZCBtYXNrIOKAlCBzaWduIG9mIHRoZSBpMzIgcmVzdWx0IGlzIGFs d2F5cworKyAgICAvLyAwLCBzbyBDUjBbbHRdIGlzIGFsd2F5cyAwLiBGb3IgU2lnbmVkL05vdFNp Z25lZCBjb25kaXRpb25zIHRoZSBhbnN3ZXIKKysgICAgLy8gaXMgZml4ZWQ7IGZvciBaZXJvL05v blplcm8gQ1IwW2VxXSBpcyBjb3JyZWN0LgorKyAgfSBlbHNlIHsKKysgICAgbW92ZTMyKHJocywg c2NyYXRjaCk7CisrICAgIGFzX2FuZF8oc2NyYXRjaCwgbGhzLCBzY3JhdGNoKTsKKysgICAgYXNf ZXh0c3dfcmMoc2NyYXRjaCwgc2NyYXRjaCk7ICAvLyBDUjAgc2V0IG9uIHNpZ24tZXh0ZW5kZWQg aTMyOyBmb2xkcyBjbXBkaQorKyAgfQorKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxD b25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKKysgIG1hX2IoYmFz ZSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0MzIoQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29u ZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAorKyAgICAg ICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgbG9hZDMyKGxocywgc2NyYXRjaCk7CisrICAvLyBhbmQzMiBwaWNrcyB1cCB0aGUgcmx3aW5t IGNvbnRpZy1tYXNrIGZhc3QgcGF0aCBmb3Igbm9uLTE2LWJpdC1maXQKKysgIC8vIGltbWVkaWF0 ZXMgdGhhdCBhcmUgYSBjb250aWd1b3VzIHJ1biBvZiAxLWJpdHMgKGNvbW1vbjogdGFnIG1hc2tz LAorKyAgLy8gaGVhZGVyIGJpdC1maWVsZHMpLiBJdCBhbHNvIGVtaXRzIHRoZSB0cmFpbGluZyBl eHRzdy4KKysgIGFuZDMyKHJocywgc2NyYXRjaCk7CisrICBhc19jbXBkaShzY3JhdGNoLCAwKTsK KysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2Vt Ymxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9iKGJhc2UsIGxhYmVsKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNv bHV0ZUFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1t MzIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNv bmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAorKyAgICAgICAgICAgICBjb25kID09 IE5vdFNpZ25lZCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihJbW1X b3JkKCh1aW50cHRyX3QpbGhzLmFkZHIpLCBzY3JhdGNoKTsKKysgIGxvYWQzMihBZGRyZXNzKHNj cmF0Y2gsIDApLCBzY3JhdGNoKTsKKysgIGFuZDMyKHJocywgc2NyYXRjaCk7CisrICBhc19jbXBk aShzY3JhdGNoLCAwKTsKKysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9u Pihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9iKGJhc2UsIGxhYmVs KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFB0cihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJv IHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAorKyAgICAgICAgICAgICBj b25kID09IE5vdFNpZ25lZCk7CisrICBpZiAobGhzID09IHJocykgeworKyAgICBhc19jbXBkaShs aHMsIDApOworKyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICAvLyBSZWNvcmQtZm9ybSBBTkQgc2V0cyBDUjA7IG5vIGZvbGxvdy11cCBjbXBkaSBuZWVkZWQu CisrICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgbGhzLCByaHMpOworKyAgfQorKyAgQ29uZGl0aW9u IGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRp b25aZXJvKTsKKysgIG1hX2IoYmFzZSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbTMyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewor KyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0g U2lnbmVkIHx8CisrICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVkKTsKKysgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICBpZiAoaXNfdWludE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAg YXNfYW5kaV9yYyhzY3JhdGNoLCBsaHMsIHJocy52YWx1ZSk7CisrICB9IGVsc2UgeworKyAgICBt b3ZlMzIocmhzLCBzY3JhdGNoKTsKKysgICAgYXNfYW5kX19yYyhzY3JhdGNoLCBsaHMsIHNjcmF0 Y2gpOyAgLy8gcmVjb3JkIGZvcm0gZm9sZHMgdGhlIGNtcGRpCisrICB9CisrICBDb25kaXRpb24g YmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlv blplcm8pOworKyAgbWFfYihiYXNlLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmJyYW5jaFRlc3RQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tV29yZCBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK KysgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09 IFNpZ25lZCB8fAorKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihyaHMsIHNjcmF0Y2gpOworKyAgYXNfYW5kX19y YyhzY3JhdGNoLCBsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2Fz dDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKKysgIG1hX2Io YmFzZSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHRy KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbW0zMiByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIC8vIGFuZFB0ciBw aWNrcyB1cCB0aGUgcmx3aW5tIGNvbnRpZy1tYXNrIGZhc3QgcGF0aCBmb3Igbm9uLTE2LWJpdC1m aXQKKysgIC8vIGltbWVkaWF0ZXMgdGhhdCBhcmUgYSBjb250aWd1b3VzIHJ1biBvZiAxLWJpdHMu CisrICBhbmRQdHIocmhzLCBzY3JhdGNoKTsKKysgIGFzX2NtcGRpKHNjcmF0Y2gsIDApOworKyAg Q29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVy OjpDb25kaXRpb25aZXJvKTsKKysgIG1hX2IoYmFzZSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0NjQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJocywgUmVn aXN0ZXIgdGVtcCwgTGFiZWwqIHN1Y2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBmYWlsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25k ID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAgICAgY29uZCA9PSBO b3RTaWduZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFzX2FuZF9fcmMoc2Ny YXRjaCwgbGhzLnJlZywgcmhzLnJlZyk7CisrICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0 PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOworKyAgaWYgKGZh aWwpIHsKKysgICAgbWFfYihiYXNlLCBzdWNjZXNzKTsKKysgICAganVtcChmYWlsKTsKKysgIH0g ZWxzZSB7CisrICAgIG1hX2IoYmFzZSwgc3VjY2Vzcyk7CisrICB9CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3Q2NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMs IEltbTY0IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1 Y2Nlc3MsIExhYmVsKiBmYWlsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25k ID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAgICAgY29uZCA9PSBO b3RTaWduZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29y ZCh1aW50NjRfdChyaHMudmFsdWUpKSwgc2NyYXRjaCk7CisrICBhc19hbmRfX3JjKHNjcmF0Y2gs IGxocy5yZWcsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25k aXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKKysgIGlmIChmYWlsKSB7 CisrICAgIG1hX2IoYmFzZSwgc3VjY2Vzcyk7CisrICAgIGp1bXAoZmFpbCk7CisrICB9IGVsc2Ug eworKyAgICBtYV9iKGJhc2UsIHN1Y2Nlc3MpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysv LyBWYWx1ZS10eXBlIGJyYW5jaCBmdW5jdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUZXN0VW5kZWZpbmVkKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1P Wl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIENvbmRpdGlv biBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19VTkRFRklORUQpLCBjb25kKTsKKysg IG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 VW5kZWZpbmVkKENvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RU YWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19VTkRFRklORUQpLCBsYWJlbCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RVbmRlZmluZWQoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAg YnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfVU5ERUZJTkVEKSwgbGFi ZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0VW5kZWZpbmVkKENv bmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5j aFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX1VOREVGSU5FRCksIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEludDMyKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0g Tm90RXF1YWwpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFH X0lOVDMyKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdEludDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJh bmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBzcGxpdFRhZyh2YWx1ZSwg c2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9U QUdfSU5UMzIpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3RJbnQzMihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBz Y3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0lO VDMyKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50 MzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3Jh dGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMy KSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50MzJU cnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICB1bmJveEludDMyKHZhbHVlLCBzY3JhdGNoKTsKKysgIGFzX2Nt cHdpKHNjcmF0Y2gsIDApOworKyAgbWFfYihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0RG91YmxlKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09 IE5vdEVxdWFsKTsKKysgIENvbmRpdGlvbiBhY3R1YWwgPSAoY29uZCA9PSBFcXVhbCkgPyBCZWxv d09yRXF1YWwgOiBBYm92ZTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpT VkFMX1RBR19NQVhfRE9VQkxFKSwgYWN0dWFsKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0RG91YmxlKENvbmRpdGlvbiBjb25kLCBj b25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg c3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdERvdWJsZShjb25kLCBzY3Jh dGNoLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3REb3Vi bGUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0 Y2gpOworKyAgYnJhbmNoVGVzdERvdWJsZShjb25kLCB0YWcsIGxhYmVsKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdERvdWJsZShDb25kaXRpb24gY29uZCwgY29uc3Qg QmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0 ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3REb3Vi bGUoY29uZCwgdGFnLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFRlc3REb3VibGVUcnV0aHkoYm9vbCBiLCBGbG9hdFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgeHNfbGkoc2NyYXRjaCwgMCk7CisrICBhc19tdHZz cmQoU2NyYXRjaERvdWJsZVJlZywgc2NyYXRjaCk7CisrICBhc19mY21wdSh2YWx1ZSwgU2NyYXRj aERvdWJsZVJlZyk7CisrICBEb3VibGVDb25kaXRpb24gY29uZCA9IGIgPyBEb3VibGVOb3RFcXVh bCA6IERvdWJsZUVxdWFsT3JVbm9yZGVyZWQ7CisrICBtYV9iKGNvbmQsIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE51bWJlcihDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3dPckVx dWFsIDogQWJvdmU7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbTMyKEpTOjpkZXRh aWw6OlZhbHVlVXBwZXJJbmNsTnVtYmVyVGFnKSwgYWN0dWFsKTsKKysgIG1hX2IoYywgbGFiZWwp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TnVtYmVyKENvbmRpdGlv biBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdE51bWJlcihj b25kLCBzY3JhdGNoLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFRlc3RCb29sZWFuKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJU KGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfQk9PTEVBTiksIGNvbmQpOworKyAgbWFfYihjLCBs YWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCb29sZWFuKENv bmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg c3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNo LCBJbW1UYWcoSlNWQUxfVEFHX0JPT0xFQU4pLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmJyYW5jaFRlc3RCb29sZWFuKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNz JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9 IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHRh ZywgSW1tVGFnKEpTVkFMX1RBR19CT09MRUFOKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9vbGVhbihDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUlu ZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRh ZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQs IHRhZywgSW1tVGFnKEpTVkFMX1RBR19CT09MRUFOKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9vbGVhblRydXRoeShib29sIGIsIGNvbnN0IFZhbHVl T3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgdW5i b3hCb29sZWFuKHZhbHVlLCBzY3JhdGNoKTsKKysgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOworKyAg bWFfYihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hUZXN0U3RyaW5nKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysg IE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIENvbmRp dGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBjb25kKTsKKysg IG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 U3RyaW5nKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJh bmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX1NUUklORyksIGxhYmVs KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN0cmluZyhDb25kaXRp b24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBi cmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RTdHJpbmcoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBi cmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RTdHJpbmdUcnV0aHkoYm9v bCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgdW5ib3hTdHJpbmcodmFsdWUsIHNjcmF0Y2gpOworKyAgbG9hZDMyKEFkZHJl c3Moc2NyYXRjaCwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoKTsKKysgIGFz X2NtcHdpKHNjcmF0Y2gsIDApOworKyAgbWFfYihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3ltYm9sKENvbmRpdGlv biBjb25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25k ID09IE5vdEVxdWFsKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFM X1RBR19TWU1CT0wpLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3ltYm9sKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1 ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3BsaXRUYWco dmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWco SlNWQUxfVEFHX1NZTUJPTCksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdFN5bWJvbChDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRh ZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWco SlNWQUxfVEFHX1NZTUJPTCksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdFN5bWJvbChDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWco YWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpT VkFMX1RBR19TWU1CT0wpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RCaWdJbnQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHRhZywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VS VChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX0JJR0lOVCksIGNvbmQpOworKyAgbWFfYihjLCBs YWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCaWdJbnQoQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFn KGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfQklHSU5UKSwgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0QmlnSW50KENvbmRpdGlvbiBjb25kLCBj b25zdCBBZGRyZXNzJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVn aXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RU YWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0JJR0lOVCksIGxhYmVsKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEJpZ0ludChDb25kaXRpb24gY29uZCwgY29u c3QgQmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVn aXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RU YWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0JJR0lOVCksIGxhYmVsKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEJpZ0ludFRydXRoeShib29sIGIsIGNvbnN0 IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICB1bmJveEJpZ0ludCh2YWx1ZSwgc2NyYXRjaCk7CisrICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNo LCBCaWdJbnQ6Om9mZnNldE9mRGlnaXRMZW5ndGgoKSksIHNjcmF0Y2gpOworKyAgYXNfY21wd2ko c2NyYXRjaCwgMCk7CisrICBtYV9iKGIgPyBOb3RFcXVhbCA6IEVxdWFsLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3ROdWxsKENvbmRpdGlvbiBjb25kLCBS ZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVh bCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTlVMTCks IGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3ROdWxsKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsK KysgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19OVUxMKSwg bGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TnVsbChDb25k aXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAg YnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE51bGwoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNo VGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE9iamVjdChDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfT0JK RUNUKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdE9iamVjdChDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBz Y3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RB R19PQkpFQ1QpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3RPYmplY3QoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3Ms IHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdf T0JKRUNUKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 T2JqZWN0KENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3Ms IHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdf T0JKRUNUKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 UHJpbWl0aXZlKENvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RQ cmltaXRpdmUoY29uZCwgc2NyYXRjaCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0R0NUaGluZyhDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRk cmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKKysgIGJyYW5jaFRlc3RHQ1RoaW5nSW1wbChjb25kLCBhZGRyZXNzLCBsYWJlbCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RHQ1RoaW5nKENvbmRpdGlvbiBj b25kLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBicmFuY2hUZXN0R0NUaGluZ0ltcGwo Y29uZCwgYWRkcmVzcywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2hUZXN0R0NUaGluZyhDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBWYWx1ZU9wZXJhbmQmIGFkZHJlc3MsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBicmFuY2hUZXN0 R0NUaGluZ0ltcGwoY29uZCwgYWRkcmVzcywgbGFiZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0R0NUaGluZ0ltcGwoQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IFQmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09 IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBDb25k aXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQWJvdmVPckVxdWFsIDogQmVsb3c7Cisr ICBDb25kaXRpb24gYyA9CisrICAgICAgbWFfY21wKHRhZywgSW1tMzIoSlM6OmRldGFpbDo6VmFs dWVMb3dlckluY2xHQ1RoaW5nVGFnKSwgYWN0dWFsKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHJpbWl0aXZlKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25k ID09IE5vdEVxdWFsKTsKKysgIENvbmRpdGlvbiBhY3R1YWwgPSAoY29uZCA9PSBFcXVhbCkgPyBC ZWxvdyA6IEFib3ZlT3JFcXVhbDsKKysgIENvbmRpdGlvbiBjID0KKysgICAgICBtYV9jbXAodGFn LCBJbW0zMihKUzo6ZGV0YWlsOjpWYWx1ZVVwcGVyRXhjbFByaW1pdGl2ZVRhZyksIGFjdHVhbCk7 CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VGVzdE1hZ2ljKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25k ID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo dGFnLCBJbW1UYWcoSlNWQUxfVEFHX01BR0lDKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBj b25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNo VGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTUFHSUMpLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwg Y29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTUFHSUMpLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29u c3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3Bs aXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJ bW1UYWcoSlNWQUxfVEFHX01BR0lDKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0TWFnaWMoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIHZhbGFk ZHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTV2h5TWFnaWMgd2h5 LCBMYWJlbCogbGFiZWwpIHsKKysgIHVpbnQ2NF90IG1hZ2ljID0gTWFnaWNWYWx1ZSh3aHkpLmFz UmF3Qml0cygpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIodmFsYWRk ciwgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3JkKG1h Z2ljKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIHZh bGFkZHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTV2h5TWFnaWMg d2h5LCBMYWJlbCogbGFiZWwpIHsKKysgIHVpbnQ2NF90IG1hZ2ljID0gTWFnaWNWYWx1ZSh3aHkp LmFzUmF3Qml0cygpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIodmFs YWRkciwgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3Jk KG1hZ2ljKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFZhbHVlKENvbmRpdGlv biBjb25kLCBjb25zdCBUJiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NF UlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcChzY3JhdGNoLCByaHMudmFsdWVSZWcoKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsK Kyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrLy8gVGVzdC1zZXQgZnVuY3Rpb25zCisrCisrdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dGVzdE51bWJlclNldChDb25kaXRp b24gY29uZCwgY29uc3QgVCYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQg PT0gTm90RXF1YWwpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRh ZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBhY3R1YWwgPSAoY29u ZCA9PSBFcXVhbCkgPyBCZWxvd09yRXF1YWwgOiBBYm92ZTsKKysgIENvbmRpdGlvbiBjID0gbWFf Y21wKHRhZywgSW1tMzIoSlM6OmRldGFpbDo6VmFsdWVVcHBlckluY2xOdW1iZXJUYWcpLCBhY3R1 YWwpOworKyAgbWFfY21wX3NldChkZXN0LCBjKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dGVzdEJvb2xlYW5TZXQoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IFQmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0 cmFjdFRhZyhzcmMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1U YWcoSlNWQUxfVEFHX0JPT0xFQU4pLCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Cisr fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3RT dHJpbmdTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9 PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKHNyYywgc2NyYXRjaCk7CisrICBDb25kaXRp b24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1RSSU5HKSwgY29uZCk7CisrICBt YV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjp0ZXN0U3ltYm9sU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBz cmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7 CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhzcmMs IHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFH X1NZTUJPTCksIGNvbmQpOworKyAgbWFfY21wX3NldChkZXN0LCBjKTsKKyt9CisrCisrdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dGVzdEJpZ0ludFNldChDb25k aXRpb24gY29uZCwgY29uc3QgVCYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNv bmQgPT0gTm90RXF1YWwpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVy IHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21w KHRhZywgSW1tVGFnKEpTVkFMX1RBR19CSUdJTlQpLCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVz dCwgYyk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIENvbXB1dGVkIGFkZHJlc3MgLyBjb25kaXRp b25hbCBtb3ZlIC8gY29uZGl0aW9uYWwgbG9hZAorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRvQ29tcHV0ZWRBZGRyZXNzKGNvbnN0IEJhc2VJbmRleCYgYWRkcikgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIoYWRkciwgc2NyYXRjaCk7CisrICBicmFuY2go c2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENvbmRp dGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRpdGlv biBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3Qs IHNyYywgYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENvbmRp dGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRp dGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9tb3ZlKGRl c3QsIHNyYywgYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENv bmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQWRkcmVzcyYgcmhzLCBSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgIGxvYWQzMihyaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo bGhzLCBzY3JhdGNoLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZVB0cihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAobGhzLCByaHMsIGNvbmQsIHRydWUpOworKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBj KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wUHRyTW92ZVB0cihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRpdGlvbiBj ID0gbWFfY21wKGxocywgSW1tV29yZChpbnQ2NF90KHJocy52YWx1ZSkpLCBjb25kKTsKKysgIG1h X2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNt cFB0ck1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7CisrICBt YV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpj bXBQdHJNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiByaHMsIFJlZ2lzdGVyIHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKHJocywgc2NyYXRjaCk7CisrICBD b25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQpOworKyAgbWFfY21wX21vdmUo ZGVzdCwgc3JjLCBjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMzJMb2FkMzIo Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBZGRyZXNzJiByaHMsIGNvbnN0IEFkZHJlc3MmIHNyYywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKHJocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9 IG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQsIHRydWUpOworKyAgLy8gQ29uZGl0aW9uYWwgbG9h ZDogbG9hZCBpbnRvIHNjcmF0Y2gsIHRoZW4gaXNlbC4KKysgIGxvYWQzMihzcmMsIHNjcmF0Y2gp OworKyAgbWFfY21wX21vdmUoZGVzdCwgc2NyYXRjaCwgYyk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmNtcDMyTG9hZDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNz JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhz LCBjb25kLCB0cnVlKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoc3Jj LCBzY3JhdGNoKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNjcmF0Y2gsIGMpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMkxvYWQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIg bGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChs aHMsIHJocywgY29uZCwgdHJ1ZSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9h ZDMyKHNyYywgc2NyYXRjaCk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBjKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMzJMb2FkUHRyKENvbmRpdGlvbiBjb25kLCBj b25zdCBBZGRyZXNzJiBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24g YyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQsIHRydWUpOworKyAgbG9hZFB0cihzcmMsIHNj cmF0Y2gpOworKyAgbWFfY21wX21vdmUoZGVzdCwgc2NyYXRjaCwgYyk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnRlc3QzMkxvYWRQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJl c3MmIGFkZHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiBtYXNr LCBjb25zdCBBZGRyZXNzJiBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09 IE5vblplcm8pOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihhZGRyLCBz Y3JhdGNoKTsKKysgIGlmIChpc191aW50TihtYXNrLnZhbHVlLCAxNikpIHsKKysgICAgYXNfYW5k aV9yYyhzY3JhdGNoLCBzY3JhdGNoLCBtYXNrLnZhbHVlKTsKKysgIH0gZWxzZSB7CisrICAgIC8v IFVzZSBhIG5lc3RlZCBzY29wZSBzbyBzY3JhdGNoMiBpcyByZWxlYXNlZCBiZWZvcmUgbG9hZFB0 ciBiZWxvdy4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMyKGFzTWFzbSgpKTsK KysgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wczIuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIo bWFzaywgc2NyYXRjaDIpOworKyAgICBhc19hbmRfX3JjKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0 Y2gyKTsgIC8vIHJlY29yZCBmb3JtIGZvbGRzIHRoZSBjbXBkaQorKyAgfQorKyAgQ29uZGl0aW9u IGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRp b25aZXJvKTsKKysgIGxvYWRQdHIoc3JjLCBzY3JhdGNoKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3Qs IHNjcmF0Y2gsIGJhc2UpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0MzJNb3Zl UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBvcGVyYW5kLCBJbW0zMiBtYXNrLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 KSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8pOworKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGlmIChpc191aW50TihtYXNrLnZhbHVlLCAxNikp IHsKKysgICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBvcGVyYW5kLCBtYXNrLnZhbHVlKTsKKysgIH0g ZWxzZSB7CisrICAgIG1vdmUzMihtYXNrLCBzY3JhdGNoKTsKKysgICAgYXNfYW5kX19yYyhzY3Jh dGNoLCBvcGVyYW5kLCBzY3JhdGNoKTsgIC8vIHJlY29yZCBmb3JtIGZvbGRzIHRoZSBjbXBkaQor KyAgfQorKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+ QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYmFz ZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3QzMk1vdmVQdHIoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbW0zMiBtYXNrLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1P Wl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyk7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGFkZHIsIHNjcmF0Y2gpOworKyAgYW5kMzIobWFzaywg c2NyYXRjaCk7CisrICBhc19jbXBkaShzY3JhdGNoLCAwKTsKKysgIENvbmRpdGlvbiBiYXNlID0g c3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7 CisrICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGJhc2UpOworK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysv LyBTcGVjdHJlIG1pdGlnYXRpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZU1v dmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICAvLyBBc3N1bWVzIGNvbXBhcmUg YWxyZWFkeSBpc3N1ZWQuCisrICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlv bj4oCisrICAgICAgY29uZCAmIH4oQXNzZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCB8IEFzc2Vt Ymxlcjo6Q29uZGl0aW9uWmVybykpOworKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBiYXNlKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZVplcm9SZWdpc3RlcihDb25kaXRp b24gY29uZCwgUmVnaXN0ZXIgc2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIEFzc3VtZXMgY29tcGFyZSBhbHJl YWR5IGlzc3VlZC4gWmVybyBkZXN0IGlmIGNvbmRpdGlvbiBpcyB0cnVlLgorKyAgQ29uZGl0aW9u IG9yaWdCYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPigKKysgICAgICBjb25kICYgfihBc3Nl bWJsZXI6OkNvbmRpdGlvblVuc2lnbmVkIHwgQXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKSk7Cisr ICAvLyBJZiBvcmlnaW5hbCBjb25kaXRpb24gaXMgdHJ1ZSwgd2Ugd2FudCBkZXN0PTAuCisrICAv LyBpc2VsOiBpZiBjb25kaXRpb24gdHJ1ZSwgc2VsZWN0IHplcm87IGVsc2Uga2VlcCBkZXN0Lgor KyAgeHNfbGkoc2NyYXRjaCwgMCk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBvcmln QmFzZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVCb3VuZHNDaGVjazMy KFJlZ2lzdGVyIGluZGV4LCBSZWdpc3RlciBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsdXJlKSB7CisrICBDb25k aXRpb24gYyA9IG1hX2NtcChpbmRleCwgbGVuZ3RoLCBCZWxvdywgdHJ1ZSk7CisrICBpZiAoZmFp bHVyZSkgeworKyAgICBtYV9iKEludmVydENvbmRpdGlvbihjKSwgZmFpbHVyZSk7CisrICB9Cisr ICBpZiAobWF5YmVTY3JhdGNoICE9IEludmFsaWRSZWcpIHsKKysgICAgeHNfbGkobWF5YmVTY3Jh dGNoLCAwKTsKKysgICAgbWFfY21wX21vdmUoaW5kZXgsIG1heWJlU2NyYXRjaCwgSW52ZXJ0Q29u ZGl0aW9uKGMpKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZUJv dW5kc0NoZWNrMzIoUmVnaXN0ZXIgaW5kZXgsIGNvbnN0IEFkZHJlc3MmIGxlbmd0aCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXliZVNjcmF0 Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZh aWx1cmUpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIobGVuZ3RoLCBz Y3JhdGNoKTsKKysgIHNwZWN0cmVCb3VuZHNDaGVjazMyKGluZGV4LCBzY3JhdGNoLCBtYXliZVNj cmF0Y2gsIGZhaWx1cmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdHJlQm91 bmRzQ2hlY2tQdHIoUmVnaXN0ZXIgaW5kZXgsIFJlZ2lzdGVyIGxlbmd0aCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbHVy ZSkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoaW5kZXgsIGxlbmd0aCwgQmVsb3cpOworKyAg aWYgKGZhaWx1cmUpIHsKKysgICAgbWFfYihJbnZlcnRDb25kaXRpb24oYyksIGZhaWx1cmUpOwor KyAgfQorKyAgaWYgKG1heWJlU2NyYXRjaCAhPSBJbnZhbGlkUmVnKSB7CisrICAgIHhzX2xpKG1h eWJlU2NyYXRjaCwgMCk7CisrICAgIG1hX2NtcF9tb3ZlKGluZGV4LCBtYXliZVNjcmF0Y2gsIElu dmVydENvbmRpdGlvbihjKSk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNw ZWN0cmVCb3VuZHNDaGVja1B0cihSZWdpc3RlciBpbmRleCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbGVuZ3RoLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXliZVNjcmF0Y2gs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWls dXJlKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihsZW5ndGgsIHNj cmF0Y2gpOworKyAgc3BlY3RyZUJvdW5kc0NoZWNrUHRyKGluZGV4LCBzY3JhdGNoLCBtYXliZVNj cmF0Y2gsIGZhaWx1cmUpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBNZW1vcnkgYWNjZXNzIHBy aW1pdGl2ZXMKKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRmxv YXQzMihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBhZGRyKSB7CisrICBNT1pfQVNTRVJUKGFk ZHIuYmFzZSAhPSByMCk7CisrICBpZiAoaXNfaW50TihhZGRyLm9mZnNldCwgMTYpKSB7CisrICAg IHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RmcyhzcmMsIGFkZHIuYmFzZSwgYWRkci5v ZmZzZXQpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50 TigoaW50cHRyX3QpYWRkci5vZmZzZXQsIDM0KSkgeworKyAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KAorKyAgICAgICAgYXNfcHN0ZnMoc3JjLCBhZGRyLmJhc2UsIChpbnQ2NF90KWFkZHIu b2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOworKyAgfQor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZChhZGRyLm9mZnNl dCksIHNjcmF0Y2gpOworKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGZzeChzcmMs IGFkZHIuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworK30KKysKKytGYXVsdGluZ0NvZGVP ZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNl SW5kZXgmIGFkZHIpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBjb21wdXRlRWZm ZWN0aXZlQWRkcmVzcyhhZGRyLCBzY3JhdGNoKTsKKysgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZz ZXQoYXNfc3RmcyhzcmMsIHNjcmF0Y2gsIDApLmdldE9mZnNldCgpKTsKKyt9CisrCisrRmF1bHRp bmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZURvdWJsZShGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEFkZHJlc3MmIGFkZHIpIHsKKysgIE1PWl9BU1NFUlQoYWRkci5iYXNlICE9IHIwKTsKKysgIGlm IChpc19pbnROKGFkZHIub2Zmc2V0LCAxNikpIHsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19zdGZkKHNyYywgYWRkci5iYXNlLCBhZGRyLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwor KyAgfQorKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRyLm9mZnNl dCwgMzQpKSB7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICBhc19w c3RmZChzcmMsIGFkZHIuYmFzZSwgKGludDY0X3QpYWRkci5vZmZzZXQsIC8qUj0qL2ZhbHNlKQor KyAgICAgICAgICAgIC5nZXRPZmZzZXQoKSk7CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgbW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zmc2V0KSwgc2NyYXRjaCk7CisrICByZXR1 cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZmR4KHNyYywgYWRkci5iYXNlLCBzY3JhdGNoKS5n ZXRPZmZzZXQoKSk7CisrfQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6 c3RvcmVEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIGFkZHIpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhhZGRyLCBzY3Jh dGNoKTsKKysgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RmZChzcmMsIHNjcmF0Y2gs IDApLmdldE9mZnNldCgpKTsKKyt9CisrCisrRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1i bGVyOjpzdG9yZUZsb2F0MTYoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgZGVzdCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1w KSB7CisrICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgIGlmIChkZXN0Lm9mZnNldCA9PSAw KSB7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4c2loeChzcmMsIHIwLCBk ZXN0LmJhc2UpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIGlmIChpc19pbnROKGRlc3Qub2Zmc2V0 LCAxNikpIHsKKysgICAgYXNfYWRkaSh0ZW1wLCBkZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKKysg ICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHhzaWh4KHNyYywgcjAsIHRlbXApLmdl dE9mZnNldCgpKTsKKysgIH0KKysgIG1vdmVQdHIoSW1tV29yZChkZXN0Lm9mZnNldCksIHRlbXAp OworKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHhzaWh4KHNyYywgZGVzdC5iYXNl LCB0ZW1wKS5nZXRPZmZzZXQoKSk7CisrfQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fz c2VtYmxlcjo6c3RvcmVGbG9hdDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgZGVzdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgIGNvbXB1dGVFZmZlY3Rp dmVBZGRyZXNzKGRlc3QsIHRlbXApOworKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19z dHhzaWh4KHNyYywgcjAsIHRlbXApLmdldE9mZnNldCgpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWVtb3J5QmFycmllcihNZW1vcnlCYXJyaWVyIGJhcnJpZXIpIHsKKysgIGlmIChi YXJyaWVyLmlzTm9uZSgpKSB7CisrICAgIHJldHVybjsKKysgIH0KKysgIGlmIChiYXJyaWVyLmhh c1N0b3JlTG9hZCgpIHx8IGJhcnJpZXIuaGFzU3luYygpKSB7CisrICAgIGFzX3N5bmMoKTsKKysg IH0gZWxzZSB7CisrICAgIGFzX2x3c3luYygpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysv LyBDbGFtcGluZyBmdW5jdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbGFtcEludFRv VWludDgoUmVnaXN0ZXIgcmVnKSB7CisrICAvLyBDbGFtcCB0byBbMCwgMjU1XS4KKysgIExhYmVs IGRvbmU7CisrICBhc19jbXB3aShyZWcsIDI1NSk7CisrICBtYV9iKExlc3NUaGFuT3JFcXVhbCwg JmRvbmUpOworKyAgbW92ZTMyKEltbTMyKDI1NSksIHJlZyk7CisrICBiaW5kKCZkb25lKTsKKysg IExhYmVsIHBvc2l0aXZlOworKyAgYXNfY21wd2kocmVnLCAwKTsKKysgIG1hX2IoR3JlYXRlclRo YW5PckVxdWFsLCAmcG9zaXRpdmUpOworKyAgbW92ZTMyKEltbTMyKDApLCByZWcpOworKyAgYmlu ZCgmcG9zaXRpdmUpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBVbmJveGluZworKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmZhbGxpYmxlVW5ib3hQdHIoY29uc3QgVmFsdWVPcGVyYW5kJiBzcmMs IFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK U1ZhbHVlVHlwZSB0eXBlLCBMYWJlbCogZmFpbCkgeworKyAgTU9aX0FTU0VSVCh0eXBlID09IEpT VkFMX1RZUEVfT0JKRUNUIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9TVFJJTkcgfHwKKysgICAgICAg ICAgICAgdHlwZSA9PSBKU1ZBTF9UWVBFX1NZTUJPTCB8fCB0eXBlID09IEpTVkFMX1RZUEVfQklH SU5UKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBzcGxpdFRhZyhzcmMsIHNjcmF0 Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RZUEVf VE9fVEFHKHR5cGUpKSwgTm90RXF1YWwpOworKyAgbWFfYihjLCBmYWlsKTsKKysgIHVuYm94Tm9u RG91YmxlKHNyYywgZGVzdCwgdHlwZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZh bGxpYmxlVW5ib3hQdHIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5cGUgdHlwZSwgTGFiZWwq IGZhaWwpIHsKKysgIGxvYWRWYWx1ZShzcmMsIFZhbHVlT3BlcmFuZChkZXN0KSk7CisrICBmYWxs aWJsZVVuYm94UHRyKFZhbHVlT3BlcmFuZChkZXN0KSwgZGVzdCwgdHlwZSwgZmFpbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZhbGxpYmxlVW5ib3hQdHIoY29uc3QgQmFzZUluZGV4 JiBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBKU1ZhbHVlVHlwZSB0eXBlLCBMYWJlbCogZmFpbCkgeworKyAgbG9hZFZhbHVlKHNyYywg VmFsdWVPcGVyYW5kKGRlc3QpKTsKKysgIGZhbGxpYmxlVW5ib3hQdHIoVmFsdWVPcGVyYW5kKGRl c3QpLCBkZXN0LCB0eXBlLCBmYWlsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2Fz bUFkZFN1YkkxMjhISTY0KFJlZ2lzdGVyIGxoc0xvLCBSZWdpc3RlciBsaHNIaSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzTG8sIFJlZ2lzdGVy IHJoc0hpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBvdXRwdXQsIGJvb2wgaXNBZGQpIHsKKysgIE1PWl9SRUxFQVNFX0FTU0VSVChvdXRwdXQgIT0g bGhzTG8gJiYgb3V0cHV0ICE9IGxoc0hpICYmIG91dHB1dCAhPSByaHNMbyAmJgorKyAgICAgICAg ICAgICAgICAgICAgIG91dHB1dCAhPSByaHNIaSk7CisrICBpZiAoaXNBZGQpIHsKKysgICAgLy8g YWRkYyBzZXRzIENBIChjYXJyeSksIGFkZGUgdXNlcyBpdC4KKysgICAgYXNfYWRkYyhvdXRwdXQs IGxoc0xvLCByaHNMbyk7ICAvLyBvdXRwdXQgPSBsaHNMbyArIHJoc0xvLCBDQSA9IGNhcnJ5Cisr ICAgIGFzX2FkZGUob3V0cHV0LCBsaHNIaSwgcmhzSGkpOyAgLy8gb3V0cHV0ID0gbGhzSGkgKyBy aHNIaSArIENBCisrICB9IGVsc2UgeworKyAgICAvLyBzdWJmYzogcmQgPSByYiAtIHJhLCBzZXRz IENBIChib3Jyb3cgY29tcGxlbWVudCkuCisrICAgIC8vIHN1YmZlOiByZCA9IHJiICsgfnJhICsg Q0EuCisrICAgIGFzX3N1YmZjKG91dHB1dCwgcmhzTG8sIGxoc0xvKTsgIC8vIG91dHB1dCA9IGxo c0xvIC0gcmhzTG8sIENBID0gfmJvcnJvdworKyAgICBhc19zdWJmZShvdXRwdXQsIHJoc0hpLCBs aHNIaSk7ICAvLyBvdXRwdXQgPSBsaHNIaSAtIHJoc0hpIC0gYm9ycm93CisrICB9CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21NdWxJNjRXaWRlSEk2NChSZWdpc3RlciBsaHMsIFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgb3V0cHV0LCBib29sIGlzU2lnbmVkKSB7CisrICBpZiAoaXNTaWduZWQpIHsKKysgICAg YXNfbXVsaGQob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc19tdWxoZHUo b3V0cHV0LCBsaHMsIHJocyk7CisrICB9CisrfQorKworKy8vfX19IGNoZWNrX21hY3JvYXNzZW1i bGVyX3N0eWxlCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjppbmNyZW1lbnRJ bnQzMlZhbHVlKGNvbnN0IEFkZHJlc3MmIGFkZHIpIHsKKysgIGFzTWFzbSgpLmFkZDMyKEltbTMy KDEpLCBhZGRyKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpyZXRu KEltbTMyIG4pIHsKKysgIC8vIExvYWQgcmV0dXJuIGFkZHJlc3MgZnJvbSBbU1AsMF0gZmlyc3Qs IHRoZW4gYWRqdXN0IFNQLCB0aGVuIHJldHVybi4KKysgIC8vIE11c3QgbG9hZCBSQSBiZWZvcmUg YWRqdXN0aW5nIFNQIChsaWtlIGxvb25nNjQpLCBzaW5jZSB0aGUgUkEgaXMgYXQKKysgIC8vIHRo ZSBjdXJyZW50IHRvcCBvZiBzdGFjaywgbm90IGF0IFNQK24uCisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgYXNfbGQoc2NyYXRjaCwgU3RhY2tQb2ludGVyLCAwKTsKKysgIGlmIChuLnZhbHVl ICE9IDApIHsKKysgICAgYXNNYXNtKCkuYWRkUHRyKEltbTMyKG4udmFsdWUpLCBTdGFja1BvaW50 ZXIpOworKyAgfQorKyAgeHNfbXRscihzY3JhdGNoKTsKKysgIGFzX2JscigpOworK30KKysKKysv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysvLyBUZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgKG91dHNpZGUgY2hlY2tfbWFj cm9hc3NlbWJsZXJfc3R5bGUpCisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y21wUHRyU2V0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tUHRyIHJocywgUmVn aXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBz Y3JhdGNoKTsKKysgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhz LCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3RlbXBsYXRlIDw+Cisr aW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0clNldChBc3NlbWJsZXI6OkNvbmRpdGlv biBjb25kLCBSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBZGRyZXNzIHJocywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIGxvYWRQdHIocmhzLCBzY3JhdGNoKTsKKysgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMg PSBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Cisr fQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0clNl dChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIEFz c2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKKysgIG1h X2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNtcDMyU2V0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy IGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyByaHMs IFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIocmhz LCBzY3JhdGNoKTsKKysgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3Jh dGNoLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3RlbXBs YXRlIDw+CisraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyU2V0KEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKKysgIEFzc2VtYmxlcjo6Q29uZGl0 aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9zZXQo ZGVzdCwgYyk7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNtcDMyU2V0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiByaHMsIFJlZ2lzdGVyIGRl c3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIobGhzLCBzY3JhdGNoKTsK KysgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0 cnVlKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworKy8ve3t7IGNoZWNrX21hY3Jv YXNzZW1ibGVyX3N0eWxlCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gU0lNRCBsb2FkL3N0b3JlICgxMjgtYml0 KQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6bG9hZFVuYWxpZ25lZFNp bWQxMjgoY29uc3QgQWRkcmVzcyYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBpZiAoSGFzUE9XRVIxMCgp ICYmIGlzX2ludE4oKGludHB0cl90KXNyYy5vZmZzZXQsIDM0KSkgeworKyAgICAvLyBQT1dFUjEw IHByZWZpeGVkIGxvYWQg4oCUIG5hdHVyYWwtTEUgYnl0ZSBvcmRlciwgbm8gR1BSIHNjcmF0Y2gu CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICBhc19wbHh2KGRlc3Qu ZW5jb2RpbmcoKSwgc3JjLmJhc2UsIChpbnQ2NF90KXNyYy5vZmZzZXQsIC8qUj0qL2ZhbHNlKQor KyAgICAgICAgICAgIC5nZXRPZmZzZXQoKSk7CisrICB9CisrICBpZiAoSGFzUE9XRVI5KCkpIHsK KysgICAgLy8gUE9XRVI5OiBseHZ4IChYLWZvcm0sIGluZGV4ZWQpIGxvYWRzIDEyOCBiaXRzIGlu IGNvcnJlY3QgTEUgb3JkZXIuCisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgIGlmIChzcmMub2Zmc2V0ID09IDApIHsKKysgICAgICAvLyBSQT0wIG1lYW5zICJ1 c2UgMCBhcyBiYXNlIiBpbiBpbmRleGVkIGZvcm1zLCBzbyB1c2UgcjAgZW5jb2RpbmcuCisrICAg ICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19seHZ4KGRlc3QsIHIwLCBzcmMuYmFzZSku Z2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwg c2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2eChkZXN0LCBz cmMuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgLy8gUE9XRVI4OiBseHZk MnggbG9hZHMgd2l0aCBkb3VibGV3b3JkIHN3YXAgb24gTEUuIEZpeCB3aXRoIHh4cGVybWRpLgor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIEZhdWx0aW5nQ29kZU9m ZnNldCBmY287CisrICBpZiAoc3JjLm9mZnNldCA9PSAwKSB7CisrICAgIGZjbyA9IEZhdWx0aW5n Q29kZU9mZnNldChhc19seHZkMngoZGVzdCwgcjAsIHNyYy5iYXNlKS5nZXRPZmZzZXQoKSk7Cisr ICB9IGVsc2UgeworKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOwor KyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2ZDJ4KGRlc3QsIHNyYy5iYXNlLCBz Y3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBhc194eHBlcm1kaShkZXN0LCBkZXN0LCBk ZXN0LCAyKTsKKysgIHJldHVybiBmY287CisrfQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNy b0Fzc2VtYmxlcjo6bG9hZFVuYWxpZ25lZFNpbWQxMjgoY29uc3QgQmFzZUluZGV4JiBzcmMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBjb21w dXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgaWYgKHNyYy5vZmZzZXQgIT0gMCkg eworKyAgICAvLyBhZGRQdHIgcGlja3MgdXAgUE9XRVIxMCBwYWRkaSAoMSBwcmVmaXhlZCBpbnNu KSB3aGVuIGF2YWlsYWJsZTsKKysgICAgLy8gZmFsbHMgYmFjayB0byBtb3ZlUHRyK2FkZCBvbiBQ OS9QOC4gRHJvcHMgdGhlIGV4cGxpY2l0IHNjcmF0Y2gyLgorKyAgICBhZGRQdHIoSW1tV29yZChz cmMub2Zmc2V0KSwgc2NyYXRjaCk7CisrICB9CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19seHZ4KGRlc3QsIHIwLCBzY3JhdGNoKS5nZXRP ZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNvKGFzX2x4dmQyeChkZXN0 LCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgYXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwg ZGVzdCwgMik7CisrICByZXR1cm4gZmNvOworK30KKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFj cm9Bc3NlbWJsZXI6OnN0b3JlVW5hbGlnbmVkU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBZGRyZXNzJiBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludHB0cl90KWRlc3Qu b2Zmc2V0LCAzNCkpIHsKKysgICAgLy8gUE9XRVIxMCBwcmVmaXhlZCBzdG9yZSDigJQgbmF0dXJh bC1MRSBieXRlIG9yZGVyLCBubyBHUFIgc2NyYXRjaC4KKysgICAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldCgKKysgICAgICAgIGFzX3BzdHh2KHNyYy5lbmNvZGluZygpLCBkZXN0LmJhc2UsIChp bnQ2NF90KWRlc3Qub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAgICAgICAuZ2V0T2Zmc2V0 KCkpOworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGlmIChkZXN0Lm9mZnNldCA9PSAwKSB7CisrICAgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHh2eChzcmMsIHIwLCBkZXN0LmJhc2UpLmdl dE9mZnNldCgpKTsKKysgICAgfQorKyAgICBtb3ZlUHRyKEltbVdvcmQoZGVzdC5vZmZzZXQpLCBz Y3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHh2eChzcmMsIGRl c3QuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgLy8gUE9XRVI4OiBzdHh2 ZDJ4IHN0b3JlcyB3aXRoIGRvdWJsZXdvcmQgc3dhcCBvbiBMRS4KKysgIC8vIFN3YXAgYmVmb3Jl IHN0b3JlLCB0aGVuIHN3YXAgYmFjayB0byByZXN0b3JlIHRoZSByZWdpc3Rlci4KKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgqdGhpcyk7CisrICBhc194eHBlcm1kaShzY3JhdGNo MTI4LCBzcmMsIHNyYywgMik7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbzsKKysgIGlmIChkZXN0Lm9mZnNldCA9PSAwKSB7 CisrICAgIGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHh2ZDJ4KHNjcmF0Y2gxMjgsIHIw LCBkZXN0LmJhc2UpLmdldE9mZnNldCgpKTsKKysgIH0gZWxzZSB7CisrICAgIG1vdmVQdHIoSW1t V29yZChkZXN0Lm9mZnNldCksIHNjcmF0Y2gpOworKyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZz ZXQoCisrICAgICAgICBhc19zdHh2ZDJ4KHNjcmF0Y2gxMjgsIGRlc3QuYmFzZSwgc2NyYXRjaCku Z2V0T2Zmc2V0KCkpOworKyAgfQorKyAgcmV0dXJuIGZjbzsKKyt9CisrCisrRmF1bHRpbmdDb2Rl T2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZVVuYWxpZ25lZFNpbWQxMjgoCisrICAgIEZsb2F0 UmVnaXN0ZXIgc3JjLCBjb25zdCBCYXNlSW5kZXgmIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBjb21wdXRlU2NhbGVkQWRkcmVzcyhkZXN0LCBzY3JhdGNoKTsKKysgIGlm IChkZXN0Lm9mZnNldCAhPSAwKSB7CisrICAgIGFkZFB0cihJbW1Xb3JkKGRlc3Qub2Zmc2V0KSwg c2NyYXRjaCk7CisrICB9CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgcmV0dXJuIEZhdWx0 aW5nQ29kZU9mZnNldChhc19zdHh2eChzcmMsIHIwLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Cisr ICB9CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOworKyAgYXNfeHhw ZXJtZGkoc2NyYXRjaDEyOCwgc3JjLCBzcmMsIDIpOworKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19zdHh2ZDJ4KHNjcmF0Y2gxMjgsIHIwLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Cisr fQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKy8vIFNJTUQgb3BlcmF0aW9ucworKy8vCisrLy8gU2NyYXRjaCBy ZWdpc3RlciBjb252ZW50aW9ucyBmb3IgU0lNRCBoZWxwZXJzIChyZWFkIHRoaXMgYmVmb3JlIHdy aXRpbmcKKysvLyBhIG5ldyBvbmUpOgorKy8vCisrLy8gMS4gYFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcylgIOKAlCBhY3F1aXJlcyB2MCAoPSBWUjAgPSBWU1IzMiwKKysvLyAgICBu b24tYWxsb2NhdGFibGUpLiBDb25zdHJ1Y3RlZCBhcyB7RmxvYXRSZWdpc3RlcnM6OmYwLCBTaW1k MTI4fSBzbworKy8vICAgIGVuY29kaW5nKCkgPSAwICsgMzIgPSAzMiAocGVyIEFyY2hpdGVjdHVy ZS1wcGM2NC5oKS4gRGVmYXVsdCB0ZW1wLgorKy8vICAgIE9uZSBzY29wZSBhdCBhIHRpbWUgcGVy IGhlbHBlci4gU2FmZSB0byBwYXNzIHRvIGFueSBWTVgvVlNYCisrLy8gICAgaW5zdHJ1Y3Rpb247 IHRoZSBhbGxvY2F0b3IgbmV2ZXIgcGxhY2VzIGEgbGl2ZSB2MTI4IGluIHYwLgorKy8vCisrLy8g Mi4gKipEbyBOT1QqKiB3cml0ZSB0byBWUjEuLlZSMzEgKD0gVlNSMzMuLlZTUjYzKSB3aXRob3V0 IGEgTG93ZXJpbmcKKysvLyAgICB0ZW1wLiBWUjEuLlZSMzEgYXJlIGFsbG9jYXRhYmxlOyBhIGxp dmUgd2FzbSB2MTI4IG1heSBiZSBzaXR0aW5nIGluCisrLy8gICAgYW55IG9mIHRoZW0uIFVzZSBg U2NyYXRjaFNpbWQxMjhTY29wZWAgKHJ1bGUgMSkgb3IgYSBMb3dlcmluZyB0ZW1wLgorKy8vCisr Ly8gMy4gKipSZWQtem9uZSBzdGFzaCoqIOKAlCB1c2UgYFJlZFpvbmVTdGFzaFNpbWQxMjhgIC8g YFJlZFpvbmVSZXN0b3JlU2ltZDEyOGAKKysvLyAgICAoZGVjbGFyZWQganVzdCBiZWxvdykgd2hl biBhIGhlbHBlciBnZW51aW5lbHkgbmVlZHMgPjEgU0lNRCBzY3JhdGNoCisrLy8gICAgQU5EIGFk ZGluZyBhIExvd2VyaW5nIHRlbXAgd291bGQgcmVxdWlyZSBMSVIgKyBNSVIgKyBDb2RlR2VuIGNo YW5nZXMuCisrLy8gICAgRUxGdjIgcmVzZXJ2ZXMgMjg4IGJ5dGVzIGJlbG93IFNQOyB3ZSB1c2Ug YXQgbW9zdCAzMiAodHdvIDE2LWJ5dGUKKysvLyAgICBzbG90cykuIExpdmUgdXNlcnM6IGBleHRB ZGRQYWlyd2lzZUludCpgICgyIHNsb3RzKSwgYHN3aXp6bGVJbnQ4eDE2YAorKy8vICAgICgxIHNs b3QpLCBgZG90SW50OHgxNkludDd4MTZUaGVuQWRkYCA0LWFyZyAoMSBzbG90KS4gSWYgeW91IGZp bmQKKysvLyAgICB5b3Vyc2VsZiB3YW50aW5nIGEgM3JkIHNsb3Qgb3IgbmVzdGVkIHNhdmUvcmVz dG9yZSwgcHJlZmVyIGEgTG93ZXJpbmcKKysvLyAgICB0ZW1wIGluc3RlYWQg4oCUIHRoZSByZWQt em9uZSBhcHByb2FjaCBpcyB0b2xlcmFibGUgYmVjYXVzZSBpdCdzCisrLy8gICAgc2VsZi1jb250 YWluZWQgdG8gYSBzaW5nbGUgaGVscGVyLiBUaGUgYE1PWl9BU1NFUlQoc2xvdCA8IDIpYCBpbnNp ZGUKKysvLyAgICB0aGUgaGVscGVycyBlbmZvcmNlcyB0aGlzIGF0IHRlc3QgdGltZS4KKysvLwor Ky8vIFNpbWQxMjggbGl2ZXMgaW4gVlItbmFtZXNwYWNlIChWU1IzMi02MyksIHNvIFZNWCBvcHMg YWRkcmVzcyBTaW1kMTI4CisrLy8gRmxvYXRSZWdpc3RlcnMgZGlyZWN0bHkgd2l0aCBubyBzdGFn aW5nLiBFbmNvZGluZyBpcyAzMi02MzsgdGhlIFZNWAorKy8vIFZSIGZpZWxkIGlzIDUtYml0ICgw LTMxKSwgc28gd2UgbWFzayB3aXRoIGAmIDMxYC4KKysKKysvLyBUd28gMTYtYnl0ZSBTaW1kMTI4 IHNsb3RzIGF2YWlsYWJsZSBpbiB0aGUgRUxGdjIgcmVkIHpvbmUgZm9yIHNob3J0LWxpdmVkCisr Ly8gU0lNRCBzcGlsbHMgKHNlZSBwb2ludCAzIG9mIHRoZSBTSU1EIGNvbnZlbnRpb25zIHByZWFt YmxlIGFib3ZlKS4KKytzdGF0aWMgY29uc3RleHByIGludCBrUmVkWm9uZVNpbWQxMjhNYXhTbG90 cyA9IDI7CisrCisrc3RhdGljIGlubGluZSB2b2lkIFJlZFpvbmVTdGFzaFNpbWQxMjgoTWFjcm9B c3NlbWJsZXImIG1hc20sIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBzbG90KSB7CisrICBNT1pfQVNTRVJUKHNsb3QgPj0gMCAm JiBzbG90IDwga1JlZFpvbmVTaW1kMTI4TWF4U2xvdHMpOworKyAgbWFzbS5zdG9yZVVuYWxpZ25l ZFNpbWQxMjgoc3JjLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgLTE2ICogKHNsb3QgKyAxKSkpOwor K30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KE1hY3JvQXNz ZW1ibGVyJiBtYXNtLCBpbnQgc2xvdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChzbG90ID49IDAg JiYgc2xvdCA8IGtSZWRab25lU2ltZDEyOE1heFNsb3RzKTsKKysgIG1hc20ubG9hZFVuYWxpZ25l ZFNpbWQxMjgoQWRkcmVzcyhTdGFja1BvaW50ZXIsIC0xNiAqIChzbG90ICsgMSkpLCBkZXN0KTsK Kyt9CisrCisrdHlwZWRlZiB2b2lkICgqVm14QmluYXJ5Rm4pKEFzc2VtYmxlciYsIHVpbnQ4X3Qs IHVpbnQ4X3QsIHVpbnQ4X3QpOworKworK3N0YXRpYyB2b2lkIEVtaXRWbXhCaW5hcnkoTWFjcm9B c3NlbWJsZXImIG1hc20sIFZteEJpbmFyeUZuIHZteE9wLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB2bXhPcChzdGF0aWNfY2Fz dDxBc3NlbWJsZXImPihtYXNtKSwgZGVzdC5lbmNvZGluZygpICYgMzEsCisrICAgICAgICBsaHMu ZW5jb2RpbmcoKSAmIDMxLCByaHMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrLy8gTWFjcm8g Zm9yIGRlZmluaW5nIFZNWCBiaW5hcnkgd3JhcHBlcnMuCisrI2RlZmluZSBWTVhfQklOQVJZX1dS QVBQRVIodm14SW5zdCkgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgW10oQXNzZW1ibGVy JiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKSB7IFwKKysgICAgYS5h c18jI3ZteEluc3QodnJ0LCB2cmEsIHZyYik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB9CisrCisrLy8gRW1pdCBvcCBkaXJlY3RseSBvbiBTaW1kMTI4IGRlc3QsIHRoZW4geHhsbm9y IGluIHBsYWNlLgorK3RlbXBsYXRlIDx0eXBlbmFtZSBWbXhCaW5hcnlGblQ+Cisrc3RhdGljIHZv aWQgRW1pdFZteEJpbmFyeU5vdChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgVm14QmluYXJ5Rm5UIHZt eE9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICB2bXhPcChzdGF0aWNfY2FzdDxBc3NlbWJsZXImPihtYXNtKSwgZGVz dC5lbmNvZGluZygpICYgMzEsCisrICAgICAgICBsaHMuZW5jb2RpbmcoKSAmIDMxLCByaHMuZW5j b2RpbmcoKSAmIDMxKTsKKysgIG1hc20uYXNfeHhsbm9yKGRlc3QsIGRlc3QsIGRlc3QpOworK30K KysKKysvLyBJbnRlZ2VyIFNJTUQgY29tcGFyZSBoZWxwZXIuIFZNWCBjb21wYXJlIGluc3RydWN0 aW9ucyBwcm9kdWNlIGFsbC1vbmVzCisrLy8gZm9yIHRydWUsIGFsbC16ZXJvcyBmb3IgZmFsc2Ug cGVyIGVsZW1lbnQuCisrLy8gQXZhaWxhYmxlIFZNWCBjb21wYXJlczogdmNtcGVxdSogKGVxKSwg dmNtcGd0cyogKHNpZ25lZCBndCksIHZjbXBndHUqCisrLy8gKHVuc2lnbmVkIGd0KS4gT3RoZXIg Y29uZGl0aW9ucyBkZXJpdmVkIGJ5IHN3YXBwaW5nIG9wZXJhbmRzIG9yCisrLy8gY29tcGxlbWVu dGluZy4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgRXFGbiwgdHlwZW5hbWUgR3RzRm4sIHR5cGVuYW1l IEd0dUZuPgorK3N0YXRpYyB2b2lkIEVtaXRWbXhDb21wYXJlKE1hY3JvQXNzZW1ibGVyJiBtYXNt LCBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEVxRm4gZXFGbiwgR3RzRm4gZ3RzRm4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3R1Rm4gZ3R1Rm4pIHsKKysgIHN3aXRjaCAoY29u ZCkgeworKyAgICBjYXNlIEFzc2VtYmxlcjo6RXF1YWw6CisrICAgICAgRW1pdFZteEJpbmFyeSht YXNtLCBlcUZuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNz ZW1ibGVyOjpOb3RFcXVhbDoKKysgICAgICBFbWl0Vm14QmluYXJ5Tm90KG1hc20sIGVxRm4sIGxo cywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0 ZXJUaGFuOgorKyAgICAgIEVtaXRWbXhCaW5hcnkobWFzbSwgZ3RzRm4sIGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVh bDoKKysgICAgICAvLyAhKHJocyA+IGxocykKKysgICAgICBFbWl0Vm14QmluYXJ5Tm90KG1hc20s IGd0c0ZuLCByaHMsIGxocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1i bGVyOjpMZXNzVGhhbjoKKysgICAgICAvLyByaHMgPiBsaHMgKHN3YXApCisrICAgICAgRW1pdFZt eEJpbmFyeShtYXNtLCBndHNGbiwgcmhzLCBsaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIEFzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgorKyAgICAgIC8vICEobGhzID4gcmhz KQorKyAgICAgIEVtaXRWbXhCaW5hcnlOb3QobWFzbSwgZ3RzRm4sIGxocywgcmhzLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkFib3ZlOgorKyAgICAgIEVtaXRW bXhCaW5hcnkobWFzbSwgZ3R1Rm4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBBc3NlbWJsZXI6OkFib3ZlT3JFcXVhbDoKKysgICAgICBFbWl0Vm14QmluYXJ5Tm90 KG1hc20sIGd0dUZuLCByaHMsIGxocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug QXNzZW1ibGVyOjpCZWxvdzoKKysgICAgICBFbWl0Vm14QmluYXJ5KG1hc20sIGd0dUZuLCByaHMs IGxocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpCZWxvd09y RXF1YWw6CisrICAgICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBndHVGbiwgbGhzLCByaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5l eHBlY3RlZCBTSU1EIGludGVnZXIgY29uZGl0aW9uIik7CisrICB9CisrfQorKworKy8vIEVtaXQg dGVybmFyeSBWTVggb3AgZGlyZWN0bHkgb24gU2ltZDEyOCByZWdzLCBubyBzdGFnaW5nLgorK3R5 cGVkZWYgdm9pZCAoKlZteFRlcm5hcnlGbikoQXNzZW1ibGVyJiwgdWludDhfdCwgdWludDhfdCwg dWludDhfdCwgdWludDhfdCk7CisrCisrc3RhdGljIHZvaWQgRW1pdFZteFRlcm5hcnkoTWFjcm9B c3NlbWJsZXImIG1hc20sIFZteFRlcm5hcnlGbiB2bXhPcCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGEsIEZsb2F0UmVnaXN0ZXIgYiwgRmxvYXRSZWdpc3RlciBj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg dm14T3Aoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIGRlc3QuZW5jb2RpbmcoKSAmIDMx LCBhLmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAgIGIuZW5jb2RpbmcoKSAmIDMxLCBjLmVuY29k aW5nKCkgJiAzMSk7CisrfQorKworKy8vIEVtaXQgdW5hcnkgVk1YIG9wIGRpcmVjdGx5IG9uIFNp bWQxMjggcmVncywgbm8gc3RhZ2luZy4KKyt0eXBlZGVmIHZvaWQgKCpWbXhVbmFyeUZuKShBc3Nl bWJsZXImLCB1aW50OF90LCB1aW50OF90KTsKKysKKytzdGF0aWMgdm9pZCBFbWl0Vm14VW5hcnko TWFjcm9Bc3NlbWJsZXImIG1hc20sIFZteFVuYXJ5Rm4gdm14T3AsCisrICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIHZt eE9wKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+KG1hc20pLCBkZXN0LmVuY29kaW5nKCkgJiAzMSwK KysgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOworK30KKysKKysvLyBIZWxwZXI6IGNyZWF0 ZSBhIHplcm8gU0lNRCByZWdpc3RlciB1c2luZyB4eGx4b3IuCisrc3RhdGljIHZvaWQgWmVyb1Np bWQxMjgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgbWFz bS5hc194eGx4b3IoZGVzdCwgZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om1vdmVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIGlmIChzcmMgIT0gZGVzdCkgeworKyAgICBhc194eGxvcihkZXN0LCBzcmMsIHNyYyk7Cisr ICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxvYWRDb25zdGFudFNpbWQxMjgoY29u c3QgU2ltZENvbnN0YW50JiB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBMb2FkIDEyOC1iaXQgY29uc3RhbnQg ZnJvbSBpbmxpbmUgY29uc3RhbnQgcG9vbC4KKysgIC8vIENsb2JiZXJzIFNlY29uZFNjcmF0Y2hS ZWcgKHIxMikuCisrICBsb2FkRnJvbVBvb2xTaW1kMTI4KGRlc3QsIHYpOworK30KKysKKysvLyBQ UEM2NCBMRSBsYW5lIG1hcHBpbmc6CisrLy8gV2FzbSBsYW5lIEsgPSBtZW1vcnkgYnl0ZSBLID0g cmVnaXN0ZXIgYnl0ZSAoMTUtSykuCisrLy8gbWZ2c3JkIGV4dHJhY3RzIHJlZ2lzdGVyIGJpdHNb MDo2M10gPSBCRSBkd29yZCAwID0gV2FzbSBsYW5lcyA4LTE1IChieXRlcykuCisrLy8gRm9yIFZN WCBieXRlIG9wcywgQkUgYnl0ZSBpbmRleCA9IDE1IC0gd2FzbV9sYW5lLgorKy8vIEZvciBWTVgg aGFsZndvcmQgb3BzLCBCRSBoYWxmd29yZCBpbmRleCA9IDcgLSB3YXNtX2hhbGZ3b3JkLgorKy8v IEZvciBWU1ggd29yZCBvcHMgKHh4c3BsdHcpLCBCRSB3b3JkIGluZGV4ID0gMyAtIHdhc21fd29y ZC4KKysvLyBGb3IgZG91Ymxld29yZCBvcHMsIEJFIGR3b3JkIGluZGV4ID0gMSAtIHdhc21fZHdv cmQuCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BsYXRYMTYoUmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIG10dnNyZCB3cml0ZXMgc3JjIGludG8gQkUgMC4uNjMg b2YgZGVzdCAobG93IGJ5dGUgYXQgQkUgYnl0ZSA3KTsKKysgIC8vIHZzcGx0YiB0aGVuIHNwbGF0 cyB0aGF0IGJ5dGUgb3ZlciBhbGwgMTYgbGFuZXMuIGRlc3QgYWxpYXNlcyBhcworKyAgLy8gYm90 aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIOKAlCB2c3BsdGIgdG9sZXJhdGVzIHRoaXMuIE5vIGV4 dHJhCisrICAvLyBzY3JhdGNoIHJlZ2lzdGVyIHJlcXVpcmVkLCBzbyBjYWxsZXJzIHRoYXQgYWxy ZWFkeSBob2xkIGEKKysgIC8vIFNjcmF0Y2hTaW1kMTI4U2NvcGUgKGV4dEFkZFBhaXJ3aXNlKiwg dmFyLXNoaWZ0IG5hcnJvdyBmb3JtcykgZG8KKysgIC8vIG5vdCBzZWUgYSBuZXN0ZWQtYWNxdWly ZSBjb2xsaXNpb24uCisrICBhc19tdHZzcmQoZGVzdCwgc3JjKTsKKysgIGFzX3ZzcGx0YihkZXN0 LCBkZXN0LCA3KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BsYXRYOChSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gU2FtZSBzaGFwZSBhcyBzcGxhdFgx NiB3aXRoIGhhbGZ3b3JkIGdyYW51bGFyaXR5LiBtdHZzcmQgcGxhY2VzCisrICAvLyB0aGUgbG93 IDE2IGJpdHMgYXQgQkUgaGFsZndvcmQgMyAoPSBCRSBieXRlcyA2Li43KTsgdnNwbHRoIHBpY2tz CisrICAvLyBpdCB1cCBhbmQgc3BsYXRzIGFjcm9zcyA4IGxhbmVzLiB2c3BsdGggcmVhZHMgb25s eSB0aGUgY2hvc2VuCisrICAvLyBoYWxmd29yZCwgc28gbmVnYXRpdmUgaTMyIGlucHV0cyBkbyBu b3QgbmVlZCBhIDE2LWJpdCBwcmUtbWFzaworKyAgLy8gKHdoaWNoIHRoZSBwcmV2aW91cyBHUFIt cmVwbGljYXRlIHBhdGggcmVxdWlyZWQpLgorKyAgYXNfbXR2c3JkKGRlc3QsIHNyYyk7CisrICBh c192c3BsdGgoZGVzdCwgZGVzdCwgMyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNw bGF0WDQoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChIYXNQT1dF UjkoKSkgeworKyAgICBhc19tdHZzcndzKGRlc3QsIHNyYyk7CisrICB9IGVsc2UgeworKyAgICBh c19tdHZzcmQoZGVzdCwgc3JjKTsKKysgICAgYXNfeHhzcGx0dyhkZXN0LCBkZXN0LCAxKTsKKysg IH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BsYXRYNChGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBzcmMgaXMgYSBkb3VibGUtcHJlY2lzaW9u IEZQUiBob2xkaW5nIGEgZmxvYXQgdmFsdWUgKHRoZSBKSVQga2VlcHMKKysgIC8vIEZQMzIgaW4g RFAtZXF1aXZhbGVudCBmb3JtIG9uIFBQQzY0KS4gQ29udmVydCBEUOKGklNQIGludG8gQkUgd29y ZCAwCisrICAvLyAoeHNjdmRwc3BuIGxheXMgdGhlIHNpbmdsZSBhdCBiaXRzWzA6MzFdIC8gQkUg d29yZCAwKSwgdGhlbiBzcGxhdAorKyAgLy8gd29yZCAwIHRvIGFsbCBmb3VyIGxhbmVzLgorKyAg YXNfeHNjdmRwc3BuKGRlc3QsIHNyYyk7CisrICBhc194eHNwbHR3KGRlc3QsIGRlc3QsIDApOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGxhdFgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFNwbGF0IHNjYWxhciBkb3VibGUgdG8gYm90aCBk b3VibGV3b3JkIGxhbmVzLgorKyAgLy8gU2NhbGFyIHZhbHVlIGlzIGluIHJlZ2lzdGVyIGJpdHNb MDo2M10gKEJFIGR3b3JkIDApLgorKyAgLy8geHhwZXJtZGkgZG09MDogZGVzdCA9IFtzcmMuZHcw LCBzcmMuZHcwXQorKyAgYXNfeHhwZXJtZGkoZGVzdCwgc3JjLCBzcmMsIDApOworK30KKysKKysv LyBIZWxwZXJzOiBzcGxhdCBJbW0zMiBpbnRvIFNJTUQgcmVnaXN0ZXIgYXQgdmFyaW91cyBlbGVt ZW50IHdpZHRocy4KKysvLyBWTVggc2hpZnQgaW5zdHJ1Y3Rpb25zIHJlYWQgdGhlIHNoaWZ0IGNv dW50IGZyb20gRUFDSCBlbGVtZW50IGluZGVwZW5kZW50bHksCisrLy8gc28gdGhlIGNvdW50IG11 c3QgYmUgcmVwbGljYXRlZCB0byBldmVyeSBieXRlL2hhbGZ3b3JkL3dvcmQgYXMgYXBwcm9wcmlh dGUuCisrLy8KKysvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGNvbnN0YW50czogdnNwbHRpc3tiLGgs d30gKFBPV0VSNyspIHNwbGF0cyBhIDUtYml0CisrLy8gc2lnbmVkIGltbWVkaWF0ZSB0byBhbGwg bGFuZXMgaW4gMSBpbnNuIHdpdGggbm8gcG9vbCBlbnRyeS4gRm9yIHZhbHVlcworKy8vIG91dHNp ZGUgWy0xNiwgMTVdIHdlIGZhbGwgYmFjayB0byB0aGUgaW5saW5lLXBvb2wgcGF0aC4KKytzdGF0 aWMgdm9pZCBTcGxhdEltbTgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEltbTMyIGltbSwgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICBpbnQ4X3QgdmFsID0gKGludDhfdClpbW0udmFsdWU7CisrICBp ZiAodmFsID49IC0xNiAmJiB2YWwgPD0gMTUpIHsKKysgICAgbWFzbS5hc192c3BsdGlzYihkZXN0 LmVuY29kaW5nKCkgJiAzMSwgdmFsKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaWYgKEhhc1BP V0VSOSgpKSB7CisrICAgIC8vIFA5IHh4c3BsdGliIGhhbmRsZXMgdGhlIGZ1bGwgOC1iaXQgcmFu Z2UgaW4gMSBpbnNuLgorKyAgICBtYXNtLmFzX3h4c3BsdGliKGRlc3QsICh1aW50OF90KXZhbCk7 CisrICAgIHJldHVybjsKKysgIH0KKysgIGludDhfdCBieXRlc1sxNl07CisrICBmb3IgKGludCBp ID0gMDsgaSA8IDE2OyBpKyspIGJ5dGVzW2ldID0gdmFsOworKyAgbWFzbS5sb2FkQ29uc3RhbnRT aW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKSwgZGVzdCk7CisrfQorKworK3N0 YXRpYyB2b2lkIFNwbGF0SW1tMTYoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEltbTMyIGltbSwgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBpbnQxNl90IHZhbCA9IChpbnQxNl90KWltbS52YWx1ZTsK KysgIGlmICh2YWwgPj0gLTE2ICYmIHZhbCA8PSAxNSkgeworKyAgICBtYXNtLmFzX3ZzcGx0aXNo KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCAoaW50OF90KXZhbCk7CisrICAgIHJldHVybjsKKysgIH0K KysgIGludDE2X3QgaGFsZnNbOF07CisrICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgaGFs ZnNbaV0gPSB2YWw7CisrICBtYXNtLmxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpD cmVhdGVYOChoYWxmcyksIGRlc3QpOworK30KKysKKytzdGF0aWMgdm9pZCBTcGxhdEltbTMyKE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBJbW0zMiBpbW0sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg aW50MzJfdCB2YWwgPSBpbW0udmFsdWU7CisrICBpZiAodmFsID49IC0xNiAmJiB2YWwgPD0gMTUp IHsKKysgICAgbWFzbS5hc192c3BsdGlzdyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgKGludDhfdCl2 YWwpOworKyAgICByZXR1cm47CisrICB9CisrICBpbnQzMl90IHdvcmRzWzRdID0ge3ZhbCwgdmFs LCB2YWwsIHZhbH07CisrICBtYXNtLmxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpD cmVhdGVYNCh3b3JkcyksIGRlc3QpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBFeHRyYWN0IGxh bmUKKysKKytzdGF0aWMgdm9pZCBFeHRyYWN0TGFuZVRvR1BSKE1hY3JvQXNzZW1ibGVyJiBtYXNt LCB1aW50MzJfdCBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsYW5lV2lkdGhCeXRlcywgdW5zaWduZWQgbGFuZVdpZHRoQml0cykgeworKyAgLy8g RXh0cmFjdCBXYXNtIGxhbmUgZnJvbSB2ZWN0b3IgcmVnaXN0ZXIgdG8gR1BSLgorKyAgLy8gV2Fz bSBsYW5lIEsg4oaSIHJlZ2lzdGVyIGJ5dGUgb2Zmc2V0ICgxNSAtIEsqbGFuZVdpZHRoQnl0ZXMp LgorKyAgLy8KKysgIC8vIFN0cmF0ZWd5OiB1c2UgbWZ2c3JkIHRvIGdldCBvbmUgNjQtYml0IGhh bGYgb2YgdGhlIHJlZ2lzdGVyLCB0aGVuIHNoaWZ0CisrICAvLyBhbmQgbWFzayB0byBpc29sYXRl IHRoZSBsYW5lLgorKyAgLy8KKysgIC8vIG1mdnNyZCBnZXRzIHJlZ2lzdGVyIGJpdHNbMDo2M10g KEJFIGR3b3JkIDApID0gV2FzbSBsYW5lcyBpbiB0aGUgaGlnaAorKyAgLy8gaGFsZiBvZiB0aGUg cmVnaXN0ZXIgKGhpZ2gtbnVtYmVyZWQgbGFuZXMgaW4gTEUgbWVtb3J5IG9yZGVyKS4KKysgIC8v IEZvciBhbiBOLWJpdCBsYW5lIGF0IFdhc20gaW5kZXggTDoKKysgIC8vICAgSWYgTCBpcyBpbiB0 aGUgaGlnaCBkd29yZCAoTCA+PSA4L2xhbmVXaWR0aEJ5dGVzKToKKysgIC8vICAgICB1c2UgbWZ2 c3JkOyBsYW5lIGlzIGF0IEdQUiBiaXQgb2Zmc2V0IGxhbmVXaWR0aEJpdHMqKEwgLQorKyAgLy8g ICAgIDgvbGFuZVdpZHRoQnl0ZXMpIGZyb20gTFNCCisrICAvLyAgIEVsc2UgKEwgaW4gbG93IGR3 b3JkKToKKysgIC8vICAgICBzd2FwIGR3b3JkcywgdGhlbiBtZnZzcmQ7IGxhbmUgaXMgYXQgR1BS IGJpdCBvZmZzZXQgbGFuZVdpZHRoQml0cypMCisrICAvLyAgICAgZnJvbSBMU0IKKysKKysgIHVu c2lnbmVkIGxhbmVzUGVyRHdvcmQgPSA4IC8gbGFuZVdpZHRoQnl0ZXM7CisrCisrICBpZiAobGFu ZSA+PSBsYW5lc1BlckR3b3JkKSB7CisrICAgIG1hc20uYXNfbWZ2c3JkKGRlc3QsIHNyYyk7Cisr ICAgIHVuc2lnbmVkIHNoaWZ0ID0gbGFuZVdpZHRoQml0cyAqIChsYW5lIC0gbGFuZXNQZXJEd29y ZCk7CisrICAgIGlmIChzaGlmdCkgeworKyAgICAgIG1hc20ueF9zcmRpKGRlc3QsIGRlc3QsIHNo aWZ0KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAg ICAgbWFzbS5hc19tZnZzcmxkKGRlc3QsIHNyYyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8g UE9XRVI4OiBzd2FwIGR3b3JkcyB0byBnZXQgZHcxIGludG8gc2NhbGFyIHBvc2l0aW9uLgorKyAg ICAgIC8vIEF2b2lkIFNjcmF0Y2hTaW1kMTI4U2NvcGUg4oCUIGNhbGxlcnMgbWF5IGFscmVhZHkg aG9sZCBpdC4KKysgICAgICAvLyBVc2UgeHhwZXJtZGkgZGlyZWN0bHkgb24gU2NyYXRjaFNpbWQx MjhSZWcgKHYwL1ZTUjMyLCBub24tYWxsb2NhdGFibGUpLgorKyAgICAgIG1hc20uYXNfeHhwZXJt ZGkoU2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgc3JjLCAyKTsKKysgICAgICBtYXNtLmFzX21mdnNy ZChkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgIH0KKysgICAgdW5zaWduZWQgc2hpZnQg PSBsYW5lV2lkdGhCaXRzICogbGFuZTsKKysgICAgaWYgKHNoaWZ0KSB7CisrICAgICAgbWFzbS54 X3NyZGkoZGVzdCwgZGVzdCwgc2hpZnQpOworKyAgICB9CisrICB9CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0cmFjdExhbmVJbnQ4eDE2KHVpbnQzMl90IGxhbmUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChsYW5lIDwgMTYpOworKyAgaWYgKEhh c1BPV0VSOSgpKSB7CisrICAgIC8vIHZleHRyYWN0dWIgcHV0cyBWUkIuQkVfYnl0ZVtVSU1dIGF0 IFZSVC5CRV9ieXRlWzddIHdpdGggdGhlIHJlc3QKKysgICAgLy8gemVyb2VkOyBtZnZzcmQgdGhl biByZWFkcyBCRSBieXRlcyAwLi43IOKGkiBsb3cgYnl0ZSBvZiBkZXN0LCBoaWdoCisrICAgIC8v IGJ5dGVzIGFscmVhZHkgMC4gTm8gbWFzayBuZWVkZWQuCisrICAgIGFzX3ZleHRyYWN0dWIoU2Ny YXRjaFNpbWQxMjhSZWcsIHNyYywgMTUgLSBsYW5lKTsKKysgICAgYXNfbWZ2c3JkKGRlc3QsIFNj cmF0Y2hTaW1kMTI4UmVnKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgRXh0cmFjdExhbmVUb0dQ UigqdGhpcywgbGFuZSwgc3JjLCBkZXN0LCAxLCA4KTsKKysgIGFzX3JsZGljbChkZXN0LCBkZXN0 LCAwLCA1Nik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0cmFjdExh bmVJbnQxNng4KHVpbnQzMl90IGxhbmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FT U0VSVChsYW5lIDwgOCk7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgYXNfdmV4dHJhY3R1 aChTY3JhdGNoU2ltZDEyOFJlZywgc3JjLCAxNCAtIDIgKiBsYW5lKTsKKysgICAgYXNfbWZ2c3Jk KGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgRXh0cmFj dExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0LCAyLCAxNik7CisrICBhc19ybGRpY2wo ZGVzdCwgZGVzdCwgMCwgNDgpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0 TGFuZUZsb2F0MzJ4NCh1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIE1PWl9BU1NFUlQobGFuZSA8IDQpOworKyAgLy8gQkUgd29yZCBpbmRleCA9IDMgLSBsYW5l LiB4eGV4dHJhY3R1dyBleHRyYWN0cyBhIHdvcmQgYnkgQkUgYnl0ZSBvZmZzZXQuCisrICAvLyBC RSBieXRlIG9mZnNldCBvZiBCRSB3b3JkIFcgPSBXKjQuIFNvIG9mZnNldCA9ICgzLWxhbmUpKjQu CisrICAvLyB4eGV4dHJhY3R1dyBwdXRzIHRoZSBleHRyYWN0ZWQgd29yZCBpbnRvIGJpdHNbMzI6 NjNdIG9mIGRlc3QgKHRoZSBsb3cKKysgIC8vIHdvcmQgb2YgdGhlIHNjYWxhciBkb3VibGV3b3Jk KSwgdGhlbiB4c2N2c3BkcG4gY29udmVydHMgU1DihpJEUC4KKysgIC8vIHh4c3BsdHcgcmVwbGlj YXRlcyBhIHdvcmQgaW50byBhbGwgNCBwb3NpdGlvbnMuIFRoZSBzY2FsYXIgU1AgdmFsdWUKKysg IC8vIGlzIHRoZW4gYXQgYml0c1swOjMxXSB3aGVyZSB4c2N2c3BkcG4gZXhwZWN0cyBpdC4KKysg IGFzX3h4c3BsdHcoZGVzdCwgc3JjLCAzIC0gbGFuZSk7CisrICBhc194c2N2c3BkcG4oZGVzdCwg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dHJhY3RMYW5lRmxvYXQ2NHgy KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VS VChsYW5lIDwgMik7CisrICBpZiAobGFuZSA9PSAwKSB7CisrICAgIC8vIExhbmUgMCA9IExFIGxv dyBkd29yZCA9IEJFIGR3b3JkIDEuIE5lZWQgdG8gc3dhcCB0byBzY2FsYXIgcG9zaXRpb24uCisr ICAgIGFzX3h4cGVybWRpKGRlc3QsIHNyYywgc3JjLCAyKTsKKysgIH0gZWxzZSB7CisrICAgIC8v IExhbmUgMSA9IExFIGhpZ2ggZHdvcmQgPSBCRSBkd29yZCAwID0gc2NhbGFyIHBvc2l0aW9uLgor KyAgICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAgICBhc194eGxvcihkZXN0LCBzcmMsIHNyYyk7 CisrICAgIH0KKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gUmVwbGFjZSBsYW5lCisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZUxhbmVJbnQ4eDE2KHVuc2lnbmVkIGxhbmUsIFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBNT1pfQVNTRVJUKGxhbmUgPCAxNik7CisrICBpZiAo SGFzUE9XRVIxMCgpKSB7CisrICAgIC8vIDIgaW5zbnMgKyAxIEdQUiBzY3JhdGNoOiBsb2FkIGxh bmUgaW5kZXgsIHZpbnNicnggKHJpZ2h0LWluZGV4ZWQKKysgICAgLy8gPSBMRS1uYXR1cmFsKS4g dmluc2JyeCBtYXNrcyBSQSAmIDB4Riwgc28gdGhlIGltbWVkaWF0ZSBmaXRzLgorKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIGlkeCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgeHNfbGkoaWR4LCBpbnQxNl90KGxhbmUpKTsKKysgICAg YXNfdmluc2JyeChsaHNEZXN0LCBpZHgsIHJocyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIGlm IChIYXNQT1dFUjkoKSkgeworKyAgICAvLyAyIGluc25zICsgMSBWU1Igc2NyYXRjaDogc3RhZ2Ug cmhzIGluIEJFIDAuLjYzIG9mIGEgc2NyYXRjaCBWU1IKKysgICAgLy8gKGxvdyBieXRlIG9mIHJo cyBsYW5kcyBhdCBCRSBieXRlIDcpLCB0aGVuIHZpbnNlcnRiIGNvcGllcyB0aGF0CisrICAgIC8v IEJFIGJ5dGUgNyBpbnRvIGxoc0Rlc3QncyBCRSBieXRlICgxNSAtIGxhbmUpID0gd2FzbSBsYW5l IEwuCisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICAgIGFzX210 dnNyZChzY3JhdGNoLCByaHMpOworKyAgICBhc192aW5zZXJ0YihsaHNEZXN0LCBzY3JhdGNoLCAx NSAtIGxhbmUpOworKyAgICByZXR1cm47CisrICB9CisrICB7CisrICAgIC8vIFBPV0VSODogZXh0 cmFjdCBkd29yZCwgdXNlIHJsZGltaSB0byBpbnNlcnQgYnl0ZSwgd3JpdGUgYmFjay4KKysgICAg Ly8gT25seSBuZWVkcyAxIEdQUiBzY3JhdGNoLgorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgq dGhpcyk7CisrICAgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgdW5zaWdu ZWQgZHdvcmQgPSBsYW5lIC8gODsKKysgICAgdW5zaWduZWQgYnl0ZUluRHdvcmQgPSBsYW5lICUg ODsKKysgICAgaWYgKGR3b3JkID09IDEpIHsKKysgICAgICBhc19tZnZzcmQodG1wLCBsaHNEZXN0 KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc194eHBlcm1kaShzY3JhdGNoMTI4LCBsaHNEZXN0 LCBsaHNEZXN0LCAyKTsKKysgICAgICBhc19tZnZzcmQodG1wLCBzY3JhdGNoMTI4KTsKKysgICAg fQorKyAgICAvLyBybGRpbWkgUlQsUlMsU0gsTUI6IGluc2VydCByb3RhdGVkIFJTIGJpdHMgaW50 byBSVCBhdCBwb3NpdGlvbnMKKysgICAgLy8gTUIuLjYzLVNILiBJbnNlcnQgcmhzIGJ5dGUgYXQg Yml0IG9mZnNldCA4KmJ5dGVJbkR3b3JkIGZyb20gTFNCOgorKyAgICAvLyAgIFNIID0gOCpieXRl SW5Ed29yZCwgTUIgPSA1NiAtIDgqYnl0ZUluRHdvcmQKKysgICAgYXNfcmxkaW1pKHRtcCwgcmhz LCA4ICogYnl0ZUluRHdvcmQsIDU2IC0gOCAqIGJ5dGVJbkR3b3JkKTsKKysgICAgYXNfbXR2c3Jk KHNjcmF0Y2gxMjgsIHRtcCk7CisrICAgIC8vIG10dnNyZCB3cml0ZXMgc2NyYXRjaDEyOC5kdzAg ZnJvbSBgdG1wYCBhbmQgbGVhdmVzIHNjcmF0Y2gxMjguZHcxCisrICAgIC8vIHVuZGVmaW5lZC4g Qm90aCB4eHBlcm1kaSBmb3JtcyBiZWxvdyBzZWxlY3Qgc2NyYXRjaDEyOC5kdzAgb25seToKKysg ICAgLy8gICBETT0wYjAxIOKGkiBbc2NyYXRjaC5kdzAsIGxoc0Rlc3QuZHcxXQorKyAgICAvLyAg IERNPTBiMDAg4oaSIFtsaHNEZXN0LmR3MCwgc2NyYXRjaC5kdzBdCisrICAgIC8vIFNvIHRoZSB1 bmRlZmluZWQgZHcxIGlzIG5ldmVyIHJlYWQuIElOVkFSSUFOVDogYW55IGZ1dHVyZSBjaGFuZ2UK KysgICAgLy8gdG8gZWl0aGVyIERNIGxpdGVyYWwgTVVTVCBmaXJzdCB6ZXJvIHNjcmF0Y2gxMjgu ZHcxIHZpYSB4eGx4b3Igb3IKKysgICAgLy8gYWRvcHQgYSBkaWZmZXJlbnQgc3RhZ2luZyBzY2hl bWU7IG90aGVyd2lzZSByZWFkcyBvZiBkdzEgcHJvZHVjZQorKyAgICAvLyBQT1dFUjktemVybyAv IFBPV0VSOC11bmRlZmluZWQgZ2FyYmFnZSBpbiB0aGUgb3V0cHV0LgorKyAgICBpZiAoZHdvcmQg PT0gMSkgeworKyAgICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIGxoc0Rlc3Qs IDEpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3Qs IHNjcmF0Y2gxMjgsIDApOworKyAgICB9CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnJlcGxhY2VMYW5lSW50MTZ4OCh1bnNpZ25lZCBsYW5lLCBSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkgeworKyAgTU9aX0FTU0VSVChsYW5lIDwgOCk7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7Cisr ICAgIC8vIDIgaW5zbnMgKyAxIEdQUiBzY3JhdGNoOiBsYW5lKjIg4oaSIGJ5dGUgcG9zaXRpb24s IHRoZW4gdmluc2hyeC4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgICBSZWdpc3RlciBpZHggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIHhzX2xpKGlk eCwgaW50MTZfdChsYW5lICogMikpOworKyAgICBhc192aW5zaHJ4KGxoc0Rlc3QsIGlkeCwgcmhz KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIC8vIDIg aW5zbnMgKyAxIFZTUiBzY3JhdGNoOiBzdGFnZSByaHMgaW4gQkUgMC4uNjMgKGxvdyAxNiBvZiBy aHMKKysgICAgLy8gbGFuZHMgYXQgQkUgYnl0ZXMgNi4uNyksIHRoZW4gdmluc2VydGggY29waWVz IHRob3NlIHR3byBieXRlcworKyAgICAvLyBpbnRvIGxoc0Rlc3QncyBCRSBieXRlcyAoMTQgLSAy TCkuLigxNSAtIDJMKSA9IHdhc20gbGFuZSBMLgorKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOworKyAgICBhc19tdHZzcmQoc2NyYXRjaCwgcmhzKTsKKysgICAgYXNfdmlu c2VydGgobGhzRGVzdCwgc2NyYXRjaCwgMTQgLSAyICogbGFuZSk7CisrICAgIHJldHVybjsKKysg IH0KKysgIHsKKysgICAgLy8gUE9XRVI4OiBleHRyYWN0IGR3b3JkLCBybGRpbWkgdG8gaW5zZXJ0 IGhhbGZ3b3JkLCB3cml0ZSBiYWNrLgorKyAgICAvLyBTYW1lIGR3MS11bmRlZiBpbnZhcmlhbnQg YXMgcmVwbGFjZUxhbmVJbnQ4eDE2IGFib3ZlLgorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgq dGhpcyk7CisrICAgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgdW5zaWdu ZWQgZHdvcmQgPSBsYW5lIC8gNDsKKysgICAgdW5zaWduZWQgaHdJbkR3b3JkID0gbGFuZSAlIDQ7 CisrICAgIGlmIChkd29yZCA9PSAxKSB7CisrICAgICAgYXNfbWZ2c3JkKHRtcCwgbGhzRGVzdCk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgbGhzRGVzdCwg bGhzRGVzdCwgMik7CisrICAgICAgYXNfbWZ2c3JkKHRtcCwgc2NyYXRjaDEyOCk7CisrICAgIH0K KysgICAgYXNfcmxkaW1pKHRtcCwgcmhzLCAxNiAqIGh3SW5Ed29yZCwgNDggLSAxNiAqIGh3SW5E d29yZCk7CisrICAgIGFzX210dnNyZChzY3JhdGNoMTI4LCB0bXApOworKyAgICBpZiAoZHdvcmQg PT0gMSkgeworKyAgICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIGxoc0Rlc3Qs IDEpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3Qs IHNjcmF0Y2gxMjgsIDApOworKyAgICB9CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnJlcGxhY2VMYW5lSW50MzJ4NCh1bnNpZ25lZCBsYW5lLCBSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkgeworKyAgTU9aX0FTU0VSVChsYW5lIDwgNCk7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7Cisr ICAgIC8vIDEgaW5zbiwgbm8gc2NyYXRjaCBWU1IuIFVJTSBpcyB0aGUgQkUgYnl0ZSBvZmZzZXQu CisrICAgIGFzX3ZpbnN3KGxoc0Rlc3QsIHJocywgKDMgLSBsYW5lKSAqIDQpOworKyAgICByZXR1 cm47CisrICB9CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgLy8gUE9XRVI5OiB4eGluc2Vy dHcgaW5zZXJ0cyB3b3JkIGZyb20gYml0c1szMjo2M10gb2YgWEIgYXQgQkUgYnl0ZQorKyAgICAv LyBvZmZzZXQgVUlNIGluIFhULiBtdHZzcmQgcHV0cyBHUFIgaW50byBiaXRzWzA6NjNdOyBsb3cg MzIgYml0cworKyAgICAvLyBsYW5kIGF0IGJpdHNbMzI6NjNdLiBCRSBieXRlIG9mZnNldCBvZiBX YXNtIHdvcmQgbGFuZSA9ICgzLWxhbmUpKjQuCisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2Ny YXRjaCgqdGhpcyk7CisrICAgIGFzX210dnNyZChzY3JhdGNoLCByaHMpOworKyAgICBhc194eGlu c2VydHcobGhzRGVzdCwgc2NyYXRjaCwgKDMgLSBsYW5lKSAqIDQpOworKyAgICByZXR1cm47Cisr ICB9CisrICAvLyBQT1dFUjg6IGV4dHJhY3QgZHdvcmQsIHJsZGltaSB0byBpbnNlcnQgd29yZCwg d3JpdGUgYmFjay4KKysgIC8vIE1vZGVsZWQgb24gcmVwbGFjZUxhbmVJbnQxNng4IGJlbG93Lgor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoMTI4KCp0aGlzKTsKKysgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIHVuc2lnbmVkIGR3b3JkID0gbGFuZSAvIDI7ICAgICAgICAvLyAwID0gbGFu ZXMgMCwxOyAxID0gbGFuZXMgMiwzLgorKyAgdW5zaWduZWQgd29yZEluRHdvcmQgPSBsYW5lICUg MjsgIC8vIDAgPSBsb3cgTEUgd29yZDsgMSA9IGhpZ2ggTEUgd29yZC4KKysgIGlmIChkd29yZCA9 PSAxKSB7CisrICAgIGFzX21mdnNyZCh0bXAsIGxoc0Rlc3QpOworKyAgfSBlbHNlIHsKKysgICAg YXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgbGhzRGVzdCwgbGhzRGVzdCwgMik7CisrICAgIGFzX21m dnNyZCh0bXAsIHNjcmF0Y2gxMjgpOworKyAgfQorKyAgYXNfcmxkaW1pKHRtcCwgcmhzLCAzMiAq IHdvcmRJbkR3b3JkLCAzMiAtIDMyICogd29yZEluRHdvcmQpOworKyAgYXNfbXR2c3JkKHNjcmF0 Y2gxMjgsIHRtcCk7CisrICBpZiAoZHdvcmQgPT0gMSkgeworKyAgICBhc194eHBlcm1kaShsaHNE ZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKKysgIH0gZWxzZSB7CisrICAgIGFzX3h4cGVy bWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIDApOworKyAgfQorK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlTGFuZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5lLCBGbG9h dFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDQpOworKyAg aWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhp cyk7CisrICAgIGFzX3hzY3ZkcHNwbihzY3JhdGNoLCByaHMpOworKyAgICBhc194eGluc2VydHco bGhzRGVzdCwgc2NyYXRjaCwgKDMgLSBsYW5lKSAqIDQpOworKyAgICByZXR1cm47CisrICB9Cisr ICAvLyBQT1dFUjg6IGNvbnZlcnQgZG91YmxlIHJocyB0byBzaW5nbGUgKGxhbmRzIGluIEJFIGJp dHMgMC4uMzEgb2YgRlBSKSwKKysgIC8vIGV4dHJhY3QgYml0cyB0byBhIEdQUiwgdGhlbiByb3V0 ZSB0aHJvdWdoIHRoZSBpbnRlZ2VyIGluc2VydCBwYXRoLgorKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgcmhzQml0cyA9IHRlbXBzLkFjcXVp cmUoKTsKKysgIHsKKysgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysg ICAgYXNfeHNjdmRwc3BuKHNjcmF0Y2gsIHJocyk7CisrICAgIGFzX21mdnNyZChyaHNCaXRzLCBz Y3JhdGNoKTsgICAvLyBzaW5nbGUgaXMgaW4gaGlnaCAzMiBiaXRzIG9mIEdQUgorKyAgICB4X3Ny ZGkocmhzQml0cywgcmhzQml0cywgMzIpOyAgLy8gc2luZ2xlIOKGkiBsb3cgMzIgYml0cworKyAg fQorKyAgLy8gSW5saW5lIHRoZSBpbnQtaW5zZXJ0IHNlcXVlbmNlIChjYW4ndCBjYWxsIHJlcGxh Y2VMYW5lSW50MzJ4NCBmcm9tCisrICAvLyBoZXJlIGJlY2F1c2Ugd2UncmUgYWxyZWFkeSBpbnNp ZGUgYSBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSBhbmQKKysgIC8vIG5lZWQgdG8gYWNxdWlyZSBh IHNlcGFyYXRlIHRtcCkuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMp OworKyAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgdW5zaWduZWQgZHdvcmQg PSBsYW5lIC8gMjsKKysgIHVuc2lnbmVkIHdvcmRJbkR3b3JkID0gbGFuZSAlIDI7CisrICBpZiAo ZHdvcmQgPT0gMSkgeworKyAgICBhc19tZnZzcmQodG1wLCBsaHNEZXN0KTsKKysgIH0gZWxzZSB7 CisrICAgIGFzX3h4cGVybWRpKHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIGxoc0Rlc3QsIDIpOworKyAg ICBhc19tZnZzcmQodG1wLCBzY3JhdGNoMTI4KTsKKysgIH0KKysgIGFzX3JsZGltaSh0bXAsIHJo c0JpdHMsIDMyICogd29yZEluRHdvcmQsIDMyIC0gMzIgKiB3b3JkSW5Ed29yZCk7CisrICBhc19t dHZzcmQoc2NyYXRjaDEyOCwgdG1wKTsKKysgIGlmIChkd29yZCA9PSAxKSB7CisrICAgIGFzX3h4 cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIDEpOworKyAgfSBlbHNlIHsKKysg ICAgYXNfeHhwZXJtZGkobGhzRGVzdCwgbGhzRGVzdCwgc2NyYXRjaDEyOCwgMCk7CisrICB9Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VMYW5lRmxvYXQ2NHgyKHVuc2lnbmVk IGxhbmUsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgTU9aX0FTU0VSVChsYW5l IDwgMik7CisrICAvLyB4eHBlcm1kaSB0byBwbGFjZSB0aGUgc2NhbGFyIGRvdWJsZSBpbnRvIHRo ZSBjb3JyZWN0IGxhbmUuCisrICBpZiAobGFuZSA9PSAwKSB7CisrICAgIC8vIFJlcGxhY2UgTEUg bG93IGR3b3JkICg9IGR3MSkuIEtlZXAgbGhzRGVzdCBkdzAgKGxhbmUgMSkuCisrICAgIC8vIHJo cyBzY2FsYXIgaXMgaW4gZHcwLiBkbT0wYjAwOiBbbGhzRGVzdC5kdzAsIHJocy5kdzBdCisrICAg IGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHJocywgMCk7CisrICB9IGVsc2UgeworKyAg ICAvLyBSZXBsYWNlIExFIGhpZ2ggZHdvcmQgKD0gZHcwKS4gS2VlcCBsaHNEZXN0IGR3MSAobGFu ZSAwKS4KKysgICAgLy8gcmhzIHNjYWxhciBpcyBpbiBkdzAuIGRtPTBiMDE6IFtyaHMuZHcwLCBs aHNEZXN0LmR3MV0KKysgICAgYXNfeHhwZXJtZGkobGhzRGVzdCwgcmhzLCBsaHNEZXN0LCAxKTsK KysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c2h1ZmZsZUludDh4MTYoY29uc3Qg dWludDhfdCBsYW5lc1sxNl0sIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgc2h1ZmZsZUlu dDh4MTYobGFuZXMsIGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnNodWZmbGVJbnQ4eDE2KGNvbnN0IHVpbnQ4X3QgbGFuZXNbMTZdLCBGbG9hdFJl Z2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOworKyAgLy8gUFBDNjQgdnBlcm0gdXNlcyBCRSBieXRlIGluZGljZXM6 IFZSQVswXT1NU0IsIFZSQVsxNV09TFNCLCBWUkJbMTYuLjMxXS4KKysgIC8vIENvbnZlcnQgV2Fz bSBMRSBsYW5lIGluZGljZXMgdG8gdnBlcm0gY29udHJvbDogbGhzIGxhbmUgTiA9IEJFIGluZGV4 CisrICAvLyAoMTUtTiksIHJocyBsYW5lIE4gPSBCRSBpbmRleCAoMzEtTikgPSAoNDcgLSAoTisx NikpLgorKyAgaW50OF90IGN0cmxbMTZdOworKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKKysgICAgdWludDhfdCBzcmMgPSBsYW5lc1tpXTsKKysgICAgaWYgKHNyYyA8IDE2 KSB7CisrICAgICAgY3RybFtpXSA9IDE1IC0gc3JjOworKyAgICB9IGVsc2UgeworKyAgICAgIGN0 cmxbaV0gPSA0NyAtIHNyYzsKKysgICAgfQorKyAgfQorKyAgbG9hZENvbnN0YW50U2ltZDEyOChT aW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdHJsKSwgc2NyYXRjaCk7CisrICAvLyB2cGVybSBkaXJl Y3RseSBvbiBTaW1kMTI4IHJlZ3MuCisrICBhc192cGVybShkZXN0LmVuY29kaW5nKCkgJiAzMSwg bGhzLmVuY29kaW5nKCkgJiAzMSwgcmhzLmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAgICAgIHNj cmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGFu ZVNlbGVjdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBtYXNrLCBGbG9hdFJlZ2lzdGVyIGxocywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywg RmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyB4eHNlbDogWEM9MOKGklhBLCBYQz0x4oaSWEIg 4oaSIFhUID0gKFhBICYgflhDKSB8IChYQiAmIFhDKQorKyAgLy8gbGFuZVNlbGVjdDogZGVzdCA9 IChsaHMgJiBtYXNrKSB8IChyaHMgJiB+bWFzaykKKysgIC8vIE5lZWQgWEE9cmhzLCBYQj1saHMs IFhDPW1hc2suCisrICBhc194eHNlbChkZXN0LCByaHMsIGxocywgbWFzayk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVIaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gT24gTEUsIHZtcmdoYihyaHMs IGxocykgZ2l2ZXMgV2FzbSBpbnRlcmxlYXZlX2hpZ2guCisrICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodm1yZ2hiKSwgcmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMs IFZNWF9CSU5BUllfV1JBUFBFUih2bXJnaGgpLCByaHMsIGxocywgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZtcmdodyksIHJocywgbGhzLCBkZXN0KTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6aW50ZXJsZWF2ZUhpZ2hJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyB4eHBlcm1kaSBETT0wOiBbWEEu ZHcwLCBYQi5kdzBdID0gbWVyZ2UgaGlnaCBkd29yZHMuCisrICAvLyBPbiBMRTogZHcwID0gaGln aCBXYXNtIGxhbmUgKGxhbmUgMSkuCisrICBhc194eHBlcm1kaShkZXN0LCByaHMsIGxocywgMCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVMb3dJbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXJnbGIpLCByaHMsIGxocywgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVMb3dJbnQxNng4KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnko KnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXJnbGgpLCByaHMsIGxocywgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVMb3dJbnQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXJnbHcpLCByaHMsIGxocywgZGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVMb3dJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIHh4cGVybWRpIERNPTM6IFtY QS5kdzEsIFhCLmR3MV0gPSBtZXJnZSBsb3cgZHdvcmRzLgorKyAgYXNfeHhwZXJtZGkoZGVzdCwg cmhzLCBsaHMsIDMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb25jYXRBbmRSaWdo dFNoaWZ0U2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3Qgc2hpZnQpIHsKKysgIC8vIHZzbGRvaShWUkEsIFZSQiwgU0gpIGV4dHJhY3RzIDE2IGJ5dGVz IHN0YXJ0aW5nIGF0IGJ5dGUgU0ggb2YgdGhlCisrICAvLyBiaWctZW5kaWFuIGNvbmNhdGVuYXRp b24gVlJBfHxWUkIuIEVuZGlhbm5lc3MgbWFwcGluZyBmb3IgdGhlIFdhc20KKysgIC8vIGB2MTI4 LnNodWZmbGVgIHJpZ2h0LXNoaWZ0LWNvbmNhdCBzZW1hbnRpYzoKKysgIC8vICAgV2FzbTogIHJl c3VsdFtpXSA9IChpICsgc2hpZnQgPCAxNikgPyByaHNbaSArIHNoaWZ0XQorKyAgLy8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxoc1tpICsgc2hpZnQgLSAxNl0KKysg IC8vICAgUFBDIExFOiB2c2xkb2kocmhzLCBsaHMsIHNoaWZ0KSBwcm9kdWNlcyBleGFjdGx5IHRo YXQg4oCUIHRoZSBMRSBieXRlCisrICAvLyAgIGxheW91dCByZXZlcnNlcyBmcm9tIEJFLCBzbyBw YXNzaW5nIChyaHMsIGxocywgc2hpZnQpIGhlcmUgaXMgdGhlIExFCisrICAvLyAgIGVxdWl2YWxl bnQgb2YgKGxocywgcmhzLCAxNiAtIHNoaWZ0KSBvbiBCRS4KKysgIE1PWl9BU1NFUlQoc2hpZnQg PCAxNik7CisrICBpZiAoc2hpZnQgPT0gMCkgeworKyAgICBtb3ZlU2ltZDEyOChyaHMsIGRlc3Qp OworKyAgICByZXR1cm47CisrICB9CisrICAvLyB2c2xkb2kgVlJULFZSQSxWUkIsU0g6IHJlc3Vs dFtpXSA9IChWUkF8fFZSQilbU0graV0KKysgIC8vIEVtaXQgdnNsZG9pIGRpcmVjdGx5IG9uIFNp bWQxMjggcmVncyAoVlJBID0gbGhzID0gaGlnaCBwYXJ0LCBWUkIgPQorKyAgLy8gcmhzID0gbG93 IHBhcnQpLiBUaGUgVk1YIGVtaXR0ZXIgbWFza3MgYCYgMzFgIGludGVybmFsbHkgdG8gZXh0cmFj dAorKyAgLy8gdGhlIDUtYml0IFZSIGZpZWxkIGZyb20gdGhlIFNpbWQxMjggZW5jb2RpbmcuCisr ICBhc192c2xkb2koZGVzdCwgbGhzLCByaHMsIHNoaWZ0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bGVmdFNoaWZ0U2ltZDEyOChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIE1PWl9BU1NFUlQoY291bnQudmFsdWUgPCAxNik7CisrICBpZiAoY291bnQudmFs dWUgPT0gMCkgeworKyAgICBtb3ZlU2ltZDEyOChzcmMsIGRlc3QpOworKyAgICByZXR1cm47Cisr ICB9CisrICAvLyB2c2xvIHNoaWZ0cyBsZWZ0IGJ5IGJ5dGVzIChjb3VudCBpbiBiaXRzIDEyMS0x MjQgb2YgVlJCLCBpLmUuIGJ5dGUgMTUgYml0cworKyAgLy8gMS00KS4gdnNsIHNoaWZ0cyBsZWZ0 IGJ5IGJpdHMgKGNvdW50IGluIGJpdHMgMTI1LTEyNyBvZiBWUkIsIGkuZS4gYnl0ZSAxNQorKyAg Ly8gYml0cyA1LTcpLiBGb3IgYnl0ZSBzaGlmdDogc3BsYXRYNChjb3VudCo4LCBzY3JhdGNoKSwg dGhlbiB2c2xvLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNw bGF0SW1tMzIoKnRoaXMsIEltbTMyKGNvdW50LnZhbHVlICogOCksIHNjcmF0Y2gpOworKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbG8pLCBzcmMsIHNjcmF0Y2gs IGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0U2ltZDEyOChJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGNvdW50 LnZhbHVlIDwgMTYpOworKyAgaWYgKGNvdW50LnZhbHVlID09IDApIHsKKysgICAgbW92ZVNpbWQx Mjgoc3JjLCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMzIoKnRoaXMsIEltbTMyKGNvdW50LnZhbHVl ICogOCksIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQ UEVSKHZzcm8pLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp6ZXJvRXh0ZW5kOHgxNlRvMTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IC8vIFVuc2lnbmVkIHdpZGVuIGxvdzogaW50ZXJsZWF2ZSBsb3cgYnl0ZXMgd2l0aCB6ZXJvIGJ5 dGVzLgorKyAgLy8gT24gTEUsIHZtcmdsYih6ZXJvLCBzcmMpIGludGVybGVhdmVzIHRoZSBsb3cg OCBieXRlcyBvZiBzcmMgd2l0aCB6ZXJvcy4KKysgIC8vIFVzZSBTY3JhdGNoU2ltZDEyOFJlZyBh cyB0aGUgemVyby4gT3JkZXIgbWF0dGVyczogcmVhZCBzcmMgaW50byB0aGUKKysgIC8vIG1lcmdl IEJFRk9SRSB3cml0aW5nIGRlc3QgKHdoaWNoIG1pZ2h0IGFsaWFzIHNyYykuIHZtcmdsYiByZWFk cworKyAgLy8gdnJhK3ZyYiwgd3JpdGVzIHZydCDigJQgc2luZ2xlLWN5Y2xlIGlzc3VlLgorKyAg U2NyYXRjaFNpbWQxMjhTY29wZSB6ZXJvKCp0aGlzKTsKKysgIGFzX3h4bHhvcih6ZXJvLCB6ZXJv LCB6ZXJvKTsKKysgIGFzX3ZtcmdsYihkZXN0LmVuY29kaW5nKCkgJiAzMSwgemVyby5lbmNvZGlu ZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp6ZXJvRXh0ZW5kOHgxNlRvMzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IHplcm9FeHRlbmQ4eDE2VG8xNng4KHNyYywgZGVzdCk7CisrICB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4 NChkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDh4 MTZUbzY0eDIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB6ZXJvRXh0ZW5kOHgxNlRv MzJ4NChzcmMsIGRlc3QpOworKyAgemVyb0V4dGVuZDMyeDRUbzY0eDIoZGVzdCwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQxNng4VG8zMng0KEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gVW5zaWduZWQgd2lkZW4gbG93OiBpbnRlcmxlYXZl IGxvdyBoYWxmd29yZHMgd2l0aCB6ZXJvIGhhbGZ3b3Jkcy4KKysgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgemVybygqdGhpcyk7CisrICBhc194eGx4b3IoemVybywgemVybywgemVybyk7CisrICBhc192 bXJnbGgoZGVzdC5lbmNvZGluZygpICYgMzEsIHplcm8uZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5j b2RpbmcoKSAmIDMxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDE2 eDhUbzY0eDIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB6ZXJvRXh0ZW5kMTZ4OFRv MzJ4NChzcmMsIGRlc3QpOworKyAgemVyb0V4dGVuZDMyeDRUbzY0eDIoZGVzdCwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQzMng0VG82NHgyKEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gVW5zaWduZWQgd2lkZW4gbG93OiBpbnRlcmxlYXZl IGxvdyB3b3JkcyB3aXRoIHplcm8gd29yZHMuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHplcm8o KnRoaXMpOworKyAgYXNfeHhseG9yKHplcm8sIHplcm8sIHplcm8pOworKyAgYXNfdm1yZ2x3KGRl c3QuZW5jb2RpbmcoKSAmIDMxLCB6ZXJvLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkg JiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJldmVyc2VJbnQxNng4KEZsb2F0 UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGNvbnN0IHVpbnQ4X3QgbGFu ZXNbXSA9IHsxNCwgMTUsIDEyLCAxMywgMTAsIDExLCA4LCA5LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIDYsICA3LCAgNCwgIDUsICAyLCAgMywgIDAsIDF9OworKyAgc2h1ZmZsZUludDh4 MTYobGFuZXMsIHNyYywgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cmV2ZXJzZUludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgY29uc3QgdWludDhfdCBsYW5lc1tdID0gezEyLCAxMywgMTQsIDE1LCA4LCA5LCAxMCwgMTEs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgIDUsICA2LCAgNywgIDAsIDEsIDIsICAz fTsKKysgIHNodWZmbGVJbnQ4eDE2KGxhbmVzLCBzcmMsIHNyYywgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnJldmVyc2VJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h4cGVybWRpKGRlc3QsIHNyYywgc3JjLCAyKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3dpenpsZUludDh4MTZSZWxheGVkKEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBzd2l6emxlSW50OHgx NihsaHMsIHJocywgZGVzdCk7CisrfQorKworKy8vIGV4dE11bHtMb3csSGlnaH1JbnR7OHgxNiwx Nng4fSB1c2UgUE9XRVI4KyB3aWRlbmluZyBtdWx0aXBsaWVzCisrLy8gKHZtdWx7ZSxvfXtzLHV9 e2IsaH0pIHBsdXMgYSBoYWxmd29yZC93b3JkIG1lcmdlIHRvIG1hcCBCRS1pbmRleGVkCisrLy8g ZXZlbi9vZGQgcHJvZHVjdHMgaW50byBXYXNtIGxhbmUgb3JkZXIgb24gUFBDNjQgTEUuCisrLy8K KysvLyBMYW5lIG1hcHBpbmc6CisrLy8gICBGb3IgTG93IChXYXNtIGxhbmVzIGZyb20gTEUgYnl0 ZXMvSFcgMC4uTi8yLTEgPSBCRSAxNS4uTi8yKToKKysvLyAgICAgdm1yZ2x7aCx3fShldmVuX3By b2R1Y3RzLCBvZGRfcHJvZHVjdHMpIHBsYWNlcyB0aGUgcmlnaHQgcHJvZHVjdHMKKysvLyAgICAg YXQgQkUgcmVzdWx0IGluZGljZXMsIHdoaWNoIG9uIExFIG1hcCB0byBXYXNtIGxhbmVzIDAuLk4v Mi0xLgorKy8vICAgRm9yIEhpZ2ggKFdhc20gbGFuZXMgZnJvbSBMRSBpbmRpY2VzIE4vMi4uTi0x ID0gQkUgTi8yLTEuLjApOgorKy8vICAgICB2bXJnaHtoLHd9IHRha2VzIHRoZSB1cHBlci1oYWxm IEJFIGluZGljZXMgaW5zdGVhZC4KKysvLworKy8vIEFsaWFzaW5nIHNhZmV0eTogdm11bCogcmVh ZHMgYm90aCBvcGVyYW5kcyBiZWZvcmUgd3JpdGluZywgc28KKysvLyBgZGVzdCA9IHZtdWxvKiBs aHMsIHJoc2AgaXMgc2FmZSBldmVuIHdoZW4gZGVzdCBhbGlhc2VzIGxocy9yaHMuCisrLy8gV2Ug dXNlIG9uZSBzY3JhdGNoIGZvciB0aGUgZXZlbi1wcm9kdWN0IGhhbGYgYmVjYXVzZSB2bXJnbHto LHd9CisrLy8gcmVhZHMgZGVzdCBhZnRlciB0aGUgb2RkIG11bHRpcGx5LgorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmV4dE11bExvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwor KyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYg MzE7CisrICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5j b2RpbmcoKSAmIDMxOworKyAgYXNfdm11bGVzYihzLCBsLCByKTsKKysgIGFzX3ZtdWxvc2IoZCwg bCwgcik7CisrICBhc192bXJnbGgoZCwgcywgZCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50 OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysg IHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygp ICYgMzE7CisrICBhc192bXVsZXNiKHMsIGwsIHIpOworKyAgYXNfdm11bG9zYihkLCBsLCByKTsK KysgIGFzX3ZtcmdoaChkLCBzLCBkKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5z aWduZWRFeHRNdWxMb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhf dCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1 aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAm IDMxOworKyAgYXNfdm11bGV1YihzLCBsLCByKTsKKysgIGFzX3ZtdWxvdWIoZCwgbCwgcik7Cisr ICBhc192bXJnbGgoZCwgcywgZCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkRXh0TXVsSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4 X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAg dWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkg JiAzMTsKKysgIGFzX3ZtdWxldWIocywgbCwgcik7CisrICBhc192bXVsb3ViKGQsIGwsIHIpOwor KyAgYXNfdm1yZ2hoKGQsIHMsIGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRN dWxMb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4X3QgbCA9IGxo cy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBk ID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysg IGFzX3ZtdWxlc2gocywgbCwgcik7CisrICBhc192bXVsb3NoKGQsIGwsIHIpOworKyAgYXNfdm1y Z2x3KGQsIHMsIGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxIaWdoSW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhfdCBsID0gbGhzLmVuY29k aW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IGQgPSBkZXN0 LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgYXNfdm11 bGVzaChzLCBsLCByKTsKKysgIGFzX3ZtdWxvc2goZCwgbCwgcik7CisrICBhc192bXJnaHcoZCwg cywgZCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0TXVsTG93SW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRj aFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGlu ZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBkID0gZGVzdC5l bmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIGFzX3ZtdWxl dWgocywgbCwgcik7CisrICBhc192bXVsb3VoKGQsIGwsIHIpOworKyAgYXNfdm1yZ2x3KGQsIHMs IGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bEhpZ2hJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBsaHMuZW5jb2Rp bmcoKSAmIDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZCA9IGRlc3Qu ZW5jb2RpbmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICBhc192bXVs ZXVoKHMsIGwsIHIpOworKyAgYXNfdm11bG91aChkLCBsLCByKTsKKysgIGFzX3ZtcmdodyhkLCBz LCBkKTsKKyt9CisrCisrLy8gRXh0TXVse0xvdyxIaWdofUludDMyeDQgdXNlIHZtdWx7ZSxvfXtz LHV9dyAoUE9XRVI4KykgcGx1cyB4eHBlcm1kaQorKy8vIHRvIGNvbWJpbmUgdGhlIHR3byBpNjQg cGFydGlhbCBwcm9kdWN0cyBpbnRvIFdhc20gbGFuZSBvcmRlciBvbiBQUEM2NAorKy8vIExFLiB4 eHBlcm1kaSBhY2NlcHRzIHRoZSBmdWxsIDYtYml0IFZTUiBlbmNvZGluZyBzbyBpdCB3b3JrcyBk aXJlY3RseQorKy8vIG9uIFNpbWQxMjggcmVncyAoZW5jb2RpbmcgMzItNjMpIHdpdGhvdXQgYW55 IFZSIHN0YWdpbmcuCisrLy8KKysvLyBBbGlhc2luZyBzYWZlOiBib3RoIHZtdWwqIHJlYWRzIGNv bXBsZXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZSB3cml0ZXMKKysvLyBkZXN0LCBhbmQgeHhwZXJt ZGkgcmVhZHMgYm90aCBpbnB1dHMgYmVmb3JlIHdyaXRpbmcuCisrCisrc3RhdGljIHZvaWQgRW1p dEV4dE11bEludDMyeDQoCisrICAgIE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgdm9pZCAo Km11bEV2ZW4pKEFzc2VtYmxlciYsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QpLAorKyAgICB2 b2lkICgqbXVsT2RkKShBc3NlbWJsZXImLCB1aW50OF90LCB1aW50OF90LCB1aW50OF90KSwgdWlu dDhfdCBkbSkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKG1hc20pOworKyAgdWlu dDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgciA9IHJocy5lbmNvZGlu ZygpICYgMzE7CisrICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4 X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgbXVsRXZlbihzdGF0aWNfY2FzdDxB c3NlbWJsZXImPihtYXNtKSwgcywgbCwgcik7CisrICBtdWxPZGQoc3RhdGljX2Nhc3Q8QXNzZW1i bGVyJj4obWFzbSksIGQsIGwsIHIpOworKyAgbWFzbS5hc194eHBlcm1kaShkZXN0LCBzY3JhdGNo LCBkZXN0LCBkbSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dE11bExvd0ludDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0RXh0 TXVsSW50MzJ4NCgKKysgICAgICAqdGhpcywgbGhzLCByaHMsIGRlc3QsCisrICAgICAgW10oQXNz ZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7CisrICAgICAgICBh LmFzX3ZtdWxlc3codCwgeCwgeSk7CisrICAgICAgfSwKKysgICAgICBbXShBc3NlbWJsZXImIGEs IHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkpIHsKKysgICAgICAgIGEuYXNfdm11bG9z dyh0LCB4LCB5KTsKKysgICAgICB9LAorKyAgICAgIDMpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpleHRNdWxIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBFbWl0RXh0TXVsSW50MzJ4NCgKKysgICAgICAqdGhpcywgbGhzLCBy aHMsIGRlc3QsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwg dWludDhfdCB5KSB7CisrICAgICAgICBhLmFzX3ZtdWxlc3codCwgeCwgeSk7CisrICAgICAgfSwK KysgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkp IHsKKysgICAgICAgIGEuYXNfdm11bG9zdyh0LCB4LCB5KTsKKysgICAgICB9LAorKyAgICAgIDAp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bExvd0ludDMyeDQo RmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRFeHRNdWxJ bnQzMng0KAorKyAgICAgICp0aGlzLCBsaHMsIHJocywgZGVzdCwKKysgICAgICBbXShBc3NlbWJs ZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkpIHsKKysgICAgICAgIGEuYXNf dm11bGV1dyh0LCB4LCB5KTsKKysgICAgICB9LAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWlu dDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgeworKyAgICAgICAgYS5hc192bXVsb3V3KHQs IHgsIHkpOworKyAgICAgIH0sCisrICAgICAgMyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnVuc2lnbmVkRXh0TXVsSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdEV4dE11bEludDMyeDQoCisrICAgICAgKnRoaXMsIGxo cywgcmhzLCBkZXN0LAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90 IHgsIHVpbnQ4X3QgeSkgeworKyAgICAgICAgYS5hc192bXVsZXV3KHQsIHgsIHkpOworKyAgICAg IH0sCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhf dCB5KSB7CisrICAgICAgICBhLmFzX3ZtdWxvdXcodCwgeCwgeSk7CisrICAgICAgfSwKKysgICAg ICAwKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cTE1TXVsclNhdEludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gUTE1IG11bHRp cGx5LXJvdW5kLXNhdHVyYXRlOiB2bWhyYWRkc2hzKGEsIGIsIHplcm8pIGNvbXB1dGVzCisrICAv LyBzYXR1cmF0ZSgoYVtpXSpiW2ldICsgMHg0MDAwKSA+PiAxNSkgZm9yIGVhY2ggaGFsZndvcmQu CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgWmVyb1NpbWQxMjgo KnRoaXMsIHNjcmF0Y2gpOworKyAgRW1pdFZteFRlcm5hcnkoCisrICAgICAgKnRoaXMsCisrICAg ICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi LCB1aW50OF90IHZyYykgeworKyAgICAgICAgYS5hc192bWhyYWRkc2hzKHZydCwgdnJhLCB2cmIs IHZyYyk7CisrICAgICAgfSwKKysgICAgICBsaHMsIHJocywgc2NyYXRjaCwgZGVzdCk7CisrfQor KworKy8vIG5lZyA9IDAgLSBzcmMuIFVzZSBTY3JhdGNoU2ltZDEyOFJlZyAoPSBWUjAsIG5vbi1h bGxvY2F0YWJsZSkgYXMgdGhlCisrLy8gemVybyBzb3VyY2Ugc28gdGhlIHJlZ2lzdGVyIGFsbG9j YXRvciBzZWVzIG5vIGNsb2JiZXJlZCBWUnMuCisrLy8gMiBpbnNuczogeHhseG9yIHNjcmF0Y2gg KyB2c3VidVhtIGRlc3QsIHNjcmF0Y2gsIHNyYy4gdm5lZ3tiLGh9CisrLy8gZG9lc24ndCBleGlz dCBpbiBhbnkgUE9XRVIgSVNBLCBoZW5jZSB0aGUgc3VidHJhY3QuCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bmVnSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgWmVyb1NpbWQxMjgo KnRoaXMsIHNjcmF0Y2gpOworKyAgYXNfdnN1YnVibShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2Ny YXRjaC5lbmNvZGluZygpICYgMzEsCisrICAgICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdJbnQxNng4KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7CisrICBaZXJvU2ltZDEyOCgqdGhpcywgc2NyYXRjaCk7CisrICBhc192c3VidWht KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAg ICAgICAgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om5lZ0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg aWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIEVtaXRWbXhVbmFyeSgKKysgICAgICAgICp0aGlzLAor KyAgICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5h c192bmVndyh2cnQsIHZyYik7IH0sCisrICAgICAgICBzcmMsIGRlc3QpOworKyAgICByZXR1cm47 CisrICB9CisrICAvLyBQT1dFUjggZmFsbGJhY2s6IDAgLSBzcmMgdmlhIFNjcmF0Y2hTaW1kMTI4 UmVnIChWUjApLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFpl cm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKKysgIGFzX3ZzdWJ1d20oZGVzdC5lbmNvZGluZygp ICYgMzEsIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAgICAgICBzcmMuZW5jb2Rp bmcoKSAmIDMxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnSW50NjR4MihGbG9h dFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoSGFzUE9XRVI5KCkp IHsKKysgICAgRW1pdFZteFVuYXJ5KAorKyAgICAgICAgKnRoaXMsCisrICAgICAgICBbXShBc3Nl bWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3ZuZWdkKHZydCwgdnJi KTsgfSwKKysgICAgICAgIHNyYywgZGVzdCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIC8vIFBP V0VSOCBmYWxsYmFjazogMCAtIHNyYyB2aWEgU2NyYXRjaFNpbWQxMjhSZWcgKFZSMCkuCisrICBT Y3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgWmVyb1NpbWQxMjgoKnRoaXMs IHNjcmF0Y2gpOworKyAgYXNfdnN1YnVkbShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5l bmNvZGluZygpICYgMzEsCisrICAgICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOworK30K KysjdW5kZWYgREVGX05FR19JTlROeE1fVlNVQgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkQWRkU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZh ZGR1YnMpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkQWRkU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZh ZGR1aHMpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkU3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZz dWJ1YnMpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkU3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZz dWJ1aHMpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkTWluSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW51Yiks IGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRN aW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1pbnVoKSwgbGhzLCBy aHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1pbkludDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRW bXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWludXcpLCBsaHMsIHJocywgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTWF4SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFy eSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtYXh1YiksIGxocywgcmhzLCBkZXN0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRNYXhJbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodm1heHVoKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9C SU5BUllfV1JBUFBFUih2bWF4dXcpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnVuc2lnbmVkQXZlcmFnZUludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQ UEVSKHZhdmd1YiksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dW5zaWduZWRBdmVyYWdlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmF2Z3Vo KSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKysvLyBhYnMoeCkgPSBtYXgoeCwgLXgpIHBlciBz aWduZWQgbGFuZS4gTm8gdmFic3tiLGgsdyxkfSBleGlzdHMgaW4gYW55IElTQS4KKysvLyB2bmVn e3csZH0gZXhpc3RzIG9ubHkgb24gUE9XRVI5LgorKy8vIFdlIHVzZSBTY3JhdGNoU2ltZDEyOFJl ZyBhcyBhIHRlbXAgZm9yIC1zcmMuIE9yZGVyIG1hdHRlcnM6IGNvbXB1dGUKKysvLyAtc3JjIGlu dG8gdGVtcCBmaXJzdCAocmVhZHMgc3JjKSwgdGhlbiBtYXgoc3JjLCB0ZW1wKSBpbnRvIGRlc3Qg KHJlYWRzCisrLy8gc3JjICsgdGVtcCwgd3JpdGVzIGRlc3QpLiBTYWZlIGV2ZW4gd2hlbiBkZXN0 ID09IHNyYyBiZWNhdXNlIHNyYyBpcworKy8vIHJlYWQgYmVmb3JlIGRlc3QgaXMgd3JpdHRlbiBi eSB2bWF4c1guCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzSW50OHgxNihGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHRt cCgqdGhpcyk7CisrICBhc194eGx4b3IodG1wLCB0bXAsIHRtcCk7ICAvLyB0bXAgPSAwCisrICBh c192c3VidWJtKHRtcC5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEsCisrICAg ICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOyAgLy8gdG1wID0gLXNyYworKyAgYXNfdm1h eHNiKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAg ICAgIHRtcC5lbmNvZGluZygpICYgMzEpOyAgLy8gZGVzdCA9IG1heChzcmMsIC1zcmMpCisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMpOwor KyAgYXNfeHhseG9yKHRtcCwgdG1wLCB0bXApOworKyAgYXNfdnN1YnVobSh0bXAuZW5jb2Rpbmco KSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKysgIGFz X3ZtYXhzaChkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgdG1wLmVu Y29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0ludDMyeDQo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQx MjhTY29wZSB0bXAoKnRoaXMpOworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX3ZuZWd3 KHRtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOyAgLy8gdG1wID0gLXNy YworKyAgfSBlbHNlIHsKKysgICAgYXNfeHhseG9yKHRtcCwgdG1wLCB0bXApOworKyAgICBhc192 c3VidXdtKHRtcC5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNv ZGluZygpICYgMzEpOworKyAgfQorKyAgYXNfdm1heHN3KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBz cmMuZW5jb2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YWJzSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHRtcCgqdGhpcyk7CisrICBpZiAoSGFz UE9XRVI5KCkpIHsKKysgICAgYXNfdm5lZ2QodG1wLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29k aW5nKCkgJiAzMSk7ICAvLyB0bXAgPSAtc3JjCisrICB9IGVsc2UgeworKyAgICBhc194eGx4b3Io dG1wLCB0bXAsIHRtcCk7CisrICAgIGFzX3ZzdWJ1ZG0odG1wLmVuY29kaW5nKCkgJiAzMSwgdG1w LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrICB9CisrICBhc192bWF4 c2QoZGVzdC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGlu ZygpICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQ4eDE2 KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhT Y29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tOCgqdGhpcywgY291bnQsIHNjcmF0Y2gp OworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbGIpLCBzcmMs IHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJ bnQxNng4KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMTYoKnRoaXMsIGNvdW50LCBz Y3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xo KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVm dFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTMyKCp0aGlzLCBj b3VudCwgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQ RVIodnNsdyksIHNyYywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmxlZnRTaGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgU3BsYXRJbW0zMigq dGhpcywgY291bnQsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZzbGQpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBz cmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgU3Bs YXRJbW04KCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodnNyYWIpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4eDE2KEltbTMyIGNvdW50 LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tOCgqdGhpcywgY291bnQsIHNjcmF0Y2gpOwor KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmIpLCBzcmMsIHNj cmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50 MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgU3BsYXRJbW0xNigqdGhpcywgY291bnQsIHNj cmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFo KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5z aWduZWRSaWdodFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBT cGxhdEltbTE2KCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodnNyaCksIHNyYywgc2NyYXRjaCwgZGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQzMng0KEltbTMyIGNvdW50LCBGbG9h dFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhp cyk7CisrICBTcGxhdEltbTMyKCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7CisrICBFbWl0Vm14Qmlu YXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYXcpLCBzcmMsIHNjcmF0Y2gsIGRlc3Qp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0 KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRj aFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMzIoKnRoaXMsIGNvdW50 LCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2 c3J3KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cmlnaHRTaGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMzIoKnRo aXMsIGNvdW50LCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllf V1JBUFBFUih2c3JhZCksIHNyYywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOworKyAgU3BsYXRJbW0zMigqdGhpcywgY291bnQsIHNjcmF0Y2gpOworKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmQpLCBzcmMsIHNjcmF0Y2gsIGRl c3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlQW5kU2ltZDEyOChGbG9h dFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIGFzX3h4bGFuZChsaHNEZXN0LCBsaHNEZXN0LCBy aHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlQW5kU2ltZDEyOChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc194eGxhbmQoZGVz dCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlT3JTaW1k MTI4KEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBhc194eGxvcihsaHNEZXN0LCBsaHNE ZXN0LCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlT3JTaW1kMTI4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHhsb3Io ZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlWG9y U2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIGFzX3h4bHhvcihsaHNEZXN0 LCBsaHNEZXN0LCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlWG9y U2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBh c194eGx4b3IoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi aXR3aXNlTm90U2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBhc194eGxub3IoZGVzdCwgc3JjLCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpiaXR3aXNlTm90QW5kU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsK KysgIC8vIG5vdGFuZChsaHMsIHJocykgPSB+bGhzICYgcmhzID0geHhsYW5kYyhyaHMsIGxocykK KysgIGFzX3h4bGFuZGMobGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YW55VHJ1ZVNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRl c3QpIHsKKysgIC8vIHZjbXBlcXVkLiAoUE9XRVI4KykgYWdhaW5zdCB6ZXJvIHNldHMgQ1I2Ogor KyAgLy8gICAtIENSNi5MVCAoQkUgYml0IDI0KSA9IDEgaWZmIHRoZSBwZXItbGFuZSByZXN1bHQg aXMgYWxsLTFzLCBpLmUuCisrICAvLyAgICAgZXZlcnkgZG91Ymxld29yZCBvZiBzcmMgZXF1YWxz IHplcm8gKD0gc3JjIGlzIGFsbC16ZXJvKS4KKysgIC8vICAgLSBDUjYuRVEgKEJFIGJpdCAyNikg PSAxIGlmZiBubyBsYW5lIHdhcyBlcXVhbCAoPSBhbnkgbm9uemVybykuCisrICAvLyBhbnktdHJ1 ZSA9ICFhbGwtemVybyA9ICFDUjYuTFQuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOworKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICBhc194 eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwgc2NyYXRjaCk7CisrICBhc192Y21wZXF1ZF9yYyhzLCBz cmMuZW5jb2RpbmcoKSAmIDMxLCBzKTsKKysgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgLy8g c2V0YmNyIG1hdGVyaWFsaXNlcyAoQ1JbQkldID09IDApID8gMSA6IDAgZGlyZWN0bHkgaW50byBk ZXN0LgorKyAgICAvLyBkZXN0ID0gKENSNi5MVCA9PSAwKSA9ICJub3QgYWxsLXplcm8iID0gYW55 LXRydWUuCisrICAgIGFzX3NldGJjcihkZXN0LCBBc3NlbWJsZXI6Okxlc3NUaGFuLCBjcjYpOwor KyAgICByZXR1cm47CisrICB9CisrICBhc19tZm9jcmYoZGVzdCwgY3I2KTsKKysgIC8vIENSNi5M VCBpcyBhdCBCRSBiaXQgMjQgb2YgdGhlIEdQUi4gcmx3aW5tIHNoPTI1IHJvdGF0ZXMgbGVmdCAy NToKKysgIC8vIGJpdCAoMjQgLSAyNSkgbW9kIDMyID0gMzEgKExTQikuIE1hc2sgMzEuLjMxIGtl ZXBzIGp1c3QgYml0IDMxLgorKyAgYXNfcmx3aW5tKGRlc3QsIGRlc3QsIDI1LCAzMSwgMzEpOwor KyAgYXNfeG9yaShkZXN0LCBkZXN0LCAxKTsKKyt9CisrCisrLy8gdmNtcGVxdVguIGFnYWluc3Qg emVybyBzZXRzIENSNjogTFQgPSBhbGwgaW5wdXQgbGFuZXMgd2VyZSB6ZXJvLAorKy8vIEVRID0g bm8gaW5wdXQgbGFuZSB3YXMgemVyby4gVGhlIGxhdHRlciBpcyBleGFjdGx5ICJhbGwtdHJ1ZSIu CisrLy8gbWZvY3JmIHBsYWNlcyBDUjYgYXQgYml0cyAyNC0yNyBvZiB0aGUgbG93IDMyLWJpdCBo YWxmIChMVD0yNCwgRVE9MjYpLgorKy8vIHJsd2lubSByZCxyZCwyNywzMSwzMSBleHRyYWN0cyBi aXQgMjYgKENSNi5FUSkgcmlnaHQtanVzdGlmaWVkLgorK3RlbXBsYXRlIDx0eXBlbmFtZSBWbXhD bXBSY0ZuPgorK3N0YXRpYyB2b2lkIEVtaXRBbGxUcnVlSW50KE1hY3JvQXNzZW1ibGVyJiBtYXNt LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBkZXN0LCBWbXhDbXBSY0ZuIHZteENtcFJjKSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2gobWFzbSk7CisrICBaZXJvU2ltZDEyOChtYXNtLCBzY3JhdGNoKTsKKysgIHVpbnQ4X3Qg cyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgdm14Q21wUmMoc3RhdGljX2Nhc3Q8QXNz ZW1ibGVyJj4obWFzbSksIHMsIHNyYy5lbmNvZGluZygpICYgMzEsIHMpOworKyAgaWYgKEhhc1BP V0VSMTAoKSkgeworKyAgICAvLyBzZXRiYyBtYXRlcmlhbGlzZXMgQ1I2LkVRIGRpcmVjdGx5IGlu dG8gZGVzdCAoMSBpbnNuIHZzIHRoZSAyLWluc24KKysgICAgLy8gbWZvY3JmICsgcmx3aW5tIGV4 dHJhY3QpLiBBbHJlYWR5IHdpcmVkIGluIG1hX2NtcF9zZXQuCisrICAgIG1hc20uYXNfc2V0YmMo ZGVzdCwgQXNzZW1ibGVyOjpFcXVhbCwgY3I2KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbWFz bS5hc19tZm9jcmYoZGVzdCwgY3I2KTsKKysgIG1hc20uYXNfcmx3aW5tKGRlc3QsIGRlc3QsIDI3 LCAzMSwgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbGxUcnVlSW50OHgxNihG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdEFsbFRydWVJbnQoKnRo aXMsIHNyYywgZGVzdCwKKysgICAgICAgICAgICAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhf dCB0LCB1aW50OF90IHIsIHVpbnQ4X3QgYikgeworKyAgICAgICAgICAgICAgICAgICBhLmFzX3Zj bXBlcXViX3JjKHQsIHIsIGIpOworKyAgICAgICAgICAgICAgICAgfSk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmFsbFRydWVJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7CisrICBFbWl0QWxsVHJ1ZUludCgqdGhpcywgc3JjLCBkZXN0LAorKyAgICAgICAg ICAgICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgciwgdWludDhfdCBi KSB7CisrICAgICAgICAgICAgICAgICAgIGEuYXNfdmNtcGVxdWhfcmModCwgciwgYik7CisrICAg ICAgICAgICAgICAgICB9KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWxsVHJ1ZUlu dDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRBbGxUcnVl SW50KCp0aGlzLCBzcmMsIGRlc3QsCisrICAgICAgICAgICAgICAgICBbXShBc3NlbWJsZXImIGEs IHVpbnQ4X3QgdCwgdWludDhfdCByLCB1aW50OF90IGIpIHsKKysgICAgICAgICAgICAgICAgICAg YS5hc192Y21wZXF1d19yYyh0LCByLCBiKTsKKysgICAgICAgICAgICAgICAgIH0pOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbGxUcnVlSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywg UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdEFsbFRydWVJbnQoKnRoaXMsIHNyYywgZGVzdCwKKysg ICAgICAgICAgICAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHIsIHVp bnQ4X3QgYikgeworKyAgICAgICAgICAgICAgICAgICBhLmFzX3ZjbXBlcXVkX3JjKHQsIHIsIGIp OworKyAgICAgICAgICAgICAgICAgfSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNv bXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhz RGVzdCkgeworKyAgY29tcGFyZUludDh4MTYoY29uZCwgbGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpD b25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoY29uZCA9PSBBc3Nl bWJsZXI6Ok5vdEVxdWFsICYmIEhhc1BPV0VSOSgpKSB7CisrICAgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wbmViKSwgbGhzLCByaHMsIGRlc3QpOworKyAgICBy ZXR1cm47CisrICB9CisrICBFbWl0Vm14Q29tcGFyZSgqdGhpcywgY29uZCwgbGhzLCByaHMsIGRl c3QsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZXF1YiksCisrICAgICAgICAgICAgICAgICBWTVhf QklOQVJZX1dSQVBQRVIodmNtcGd0c2IpLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0dWIpKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpD b25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBjb21wYXJlSW50MTZ4 OChjb25kLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIGlmIChjb25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwgJiYgSGFzUE9X RVI5KCkpIHsKKysgICAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZj bXBuZWgpLCBsaHMsIHJocywgZGVzdCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIEVtaXRWbXhD b21wYXJlKCp0aGlzLCBjb25kLCBsaHMsIHJocywgZGVzdCwgVk1YX0JJTkFSWV9XUkFQUEVSKHZj bXBlcXVoKSwKKysgICAgICAgICAgICAgICAgIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3RzaCks IFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3R1aCkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lz dGVyIGxoc0Rlc3QpIHsKKysgIGNvbXBhcmVJbnQzMng0KGNvbmQsIGxoc0Rlc3QsIHJocywgbGhz RGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQzMng0KEFzc2Vt Ymxlcjo6Q29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKGNvbmQg PT0gQXNzZW1ibGVyOjpOb3RFcXVhbCAmJiBIYXNQT1dFUjkoKSkgeworKyAgICBFbWl0Vm14Qmlu YXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcG5ldyksIGxocywgcmhzLCBkZXN0KTsK KysgICAgcmV0dXJuOworKyAgfQorKyAgRW1pdFZteENvbXBhcmUoKnRoaXMsIGNvbmQsIGxocywg cmhzLCBkZXN0LCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGVxdXcpLAorKyAgICAgICAgICAgICAg ICAgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBndHN3KSwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBn dHV3KSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9hdDMyeDQoQXNz ZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBjb21wYXJlRmxvYXQzMng0KGNv bmQsIGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgeworKyAgc3dpdGNoIChjb25kKSB7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpF cXVhbDoKKysgICAgICBhc194dmNtcGVxc3AoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIEFzc2VtYmxlcjo6Tm90RXF1YWw6CisrICAgICAgYXNfeHZjbXBlcXNwKGRl c3QsIGxocywgcmhzKTsKKysgICAgICBiaXR3aXNlTm90U2ltZDEyOChkZXN0LCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgorKyAgICAgIGFz X3h2Y21wZ3RzcChkZXN0LCBsaHMsIHJocyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNz ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6CisrICAgICAgYXNfeHZjbXBnZXNwKGRlc3QsIGxo cywgcmhzKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6Okxlc3NUaGFuOgor KyAgICAgIGFzX3h2Y21wZ3RzcChkZXN0LCByaHMsIGxocyk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6CisrICAgICAgYXNfeHZjbXBnZXNwKGRl c3QsIHJocywgbGhzKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pf Q1JBU0goIlVuZXhwZWN0ZWQgU0lNRCBmbG9hdCBjb25kaXRpb24iKTsKKysgIH0KKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlv biBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QpIHsKKysgIGNvbXBhcmVGbG9hdDY0eDIoY29uZCwgbGhzRGVzdCwgcmhz LCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUZsb2F0NjR4 MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBzd2l0Y2ggKGNvbmQpIHsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkVxdWFsOgorKyAgICAgIGFz X3h2Y21wZXFkcChkZXN0LCBsaHMsIHJocyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNz ZW1ibGVyOjpOb3RFcXVhbDoKKysgICAgICBhc194dmNtcGVxZHAoZGVzdCwgbGhzLCByaHMpOwor KyAgICAgIGJpdHdpc2VOb3RTaW1kMTI4KGRlc3QsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIEFzc2VtYmxlcjo6R3JlYXRlclRoYW46CisrICAgICAgYXNfeHZjbXBndGRwKGRlc3Qs IGxocywgcmhzKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJU aGFuT3JFcXVhbDoKKysgICAgICBhc194dmNtcGdlZHAoZGVzdCwgbGhzLCByaHMpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6TGVzc1RoYW46CisrICAgICAgYXNfeHZjbXBn dGRwKGRlc3QsIHJocywgbGhzKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBc3NlbWJsZXI6 Okxlc3NUaGFuT3JFcXVhbDoKKysgICAgICBhc194dmNtcGdlZHAoZGVzdCwgcmhzLCBsaHMpOwor KyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3Rl ZCBTSU1EIGZsb2F0IGNvbmRpdGlvbiIpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpuZWdGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgYXNfeHZuZWdzcChkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpuZWdGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgYXNfeHZuZWdkcChkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph YnNGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg YXNfeHZhYnNzcChkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNG bG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf eHZhYnNkcChkZXN0LCBzcmMpOworK30KKysKKysvLyBQZXIgc3BlYzoKKysvLyAgIHJlc3VsdFtr XSA9IChzfHUpZXh0X3dpZGVuKHNyY1sya10pICsgKHN8dSlleHRfd2lkZW4oc3JjWzJrKzFdKQor Ky8vIFBPV0VSIGxhY2tzIHBhaXJ3aXNlIG11bHRpcGx5LWFkZC4gRW11bGF0ZSB2aWEgdm11bFh7 ZSxvfVgoc3JjLCBzcGxhdCgxKSkKKysvLyArIHZhZGQuIEJvdGggdm11bHMgbmVlZCBgc3JjYCBB TkQgYHNwbGF0KDEpYCBhdmFpbGFibGUgc2ltdWx0YW5lb3VzbHkuCisrLy8KKysvLyBBdmFpbGFi bGUgU0lNRCBzbG90cyB3aXRob3V0IGludm9sdmluZyBMb3dlcmluZzoKKysvLyAgIC0gU2NyYXRj aFNpbWQxMjhSZWcgKFZSMCwgbm9uLWFsbG9jYXRhYmxlKQorKy8vICAgLSBkZXN0LCBzcmMKKysv LyBUaGF0J3MgMyByZWdzIHdoZW4gZGVzdCAhPSBzcmMg4oCUIGVub3VnaCBmb3Ige3NyYywgc3Bs YXQsIGludGVybWVkaWF0ZX0uCisrLy8gV2hlbiBkZXN0ID09IHNyYyB3ZSBzdGFzaCBzcmMgYW5k IHRoZSBldmVuIHByb2R1Y3QgdG8gdGhlIDI4OC1ieXRlIEVMRnYyCisrLy8gcmVkIHpvbmUgYW5k IHJlYnVpbGQgc3BsYXQoMSkuCisrLy8KKysvLyAoRWFybGllciBpbXBsZW1lbnRhdGlvbnMgb2Yg dGhlc2UgaGVscGVycyByb3V0ZWQgdGhyb3VnaCBoYXJkY29kZWQKKysvLyBWUjEvVlIyL1ZSMyB2 aWEgeHhsb3JfdnNyIOKAlCBmYXN0ZXIgYnV0IHN0b21wZWQgYWxsb2NhdG9yLW1hbmFnZWQgVlJz CisrLy8gYW5kIHNpbGVudGx5IGNvcnJ1cHRlZCBhbnkgbGl2ZSB3YXNtIHYxMjggdGhlIGFsbG9j YXRvciBoYWQgcGxhY2VkCisrLy8gdGhlcmUuIFNjcmF0Y2hTaW1kMTI4UmVnICsgcmVkLXpvbmUg c3Rhc2ggaXMgdGhlIHNhZmUgY29udHJhY3QuKQorKy8vIEFsd2F5cy1zYWZlIHBhdHRlcm46IHN0 YXNoIHNyYyB0byByZWQgem9uZSBzbyBkZXN0IGNhbiBiZSBmcmVlbHkgb3ZlcndyaXR0ZW4sCisr Ly8gc3Rhc2ggZXZlbiB0byByZWQgem9uZSBhZnRlciBmaXJzdCB2bXVsIHNvIHdlIGNhbiByZWJ1 aWxkIHNwbGF0KDEpIGZvciB0aGUKKysvLyBzZWNvbmQgdm11bC4gVGhlIHNwbGF0LW9mLTEgaXMg bm93IGB2c3BsdGlze2IsaH1gICg1LWJpdCBzaWduZWQgaW1tZWRpYXRlCisrLy8gc3BsYXQpIOKA lCAxIGluc24gdnMgdGhlIDMtaW5zbiBtb3ZlUHRyK210dnNyZCt2c3BsdCBzZXF1ZW5jZSB0aGUg cHJldmlvdXMKKysvLyBwYXRoIHVzZWQuCisrLy8gUGF0dGVybjogc3Rhc2ggc3JjIHRvIHJlZCB6 b25lIHNsb3QgMCBzbyBkZXN0IGNhbiBiZSBmcmVlbHkgb3ZlcndyaXR0ZW47CisrLy8gdm11bC1l dmVuIChzaWduZWQvdW5zaWduZWQpIG9mIHNyYyB3aXRoIHNwbGF0KDEpIHByb2R1Y2VzIHNpZ24v emVyby1leHRlbmRlZAorKy8vIGV2ZW4tbGFuZSBwcm9kdWN0cyBpbnRvIGRlc3Q7IHN0YXNoIHRo YXQgdG8gc2xvdCAxIGFuZCByZWJ1aWxkIHNjcmF0Y2g9c3JjCisrLy8gKHNsb3QgMCkgYW5kIGRl c3Q9c3BsYXQoMSk7IHZtdWwtb2RkIHByb2R1Y2VzIHRoZSBvZGQgcHJvZHVjdHM7IHJlc3RvcmUK KysvLyBldmVuIGZyb20gc2xvdCAxIGFuZCBwYWlyd2lzZS1hZGQuCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6ZXh0QWRkUGFpcndpc2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IHMgPSBz Y3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3Qgc3JjRW5jID0gc3JjLmVuY29kaW5n KCkgJiAzMTsKKysgIHVpbnQ4X3QgZGVzdEVuYyA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOworKyAg UmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgc3JjLCAwKTsKKysgIGFzX3ZzcGx0aXNiKHMsIDEp OworKyAgYXNfdm11bGVzYihkZXN0RW5jLCBzcmNFbmMsIHMpOworKyAgUmVkWm9uZVN0YXNoU2lt ZDEyOCgqdGhpcywgZGVzdCwgMSk7CisrICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDAs IHNjcmF0Y2gpOworKyAgYXNfdnNwbHRpc2IoZGVzdEVuYywgMSk7CisrICBhc192bXVsb3NiKGRl c3RFbmMsIHMsIGRlc3RFbmMpOworKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAxLCBz Y3JhdGNoKTsKKysgIGFzX3ZhZGR1aG0oZGVzdEVuYywgZGVzdEVuYywgcyk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3Jh dGNoKCp0aGlzKTsKKysgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAg dWludDhfdCBzcmNFbmMgPSBzcmMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBkZXN0RW5j ID0gZGVzdC5lbmNvZGluZygpICYgMzE7CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBz cmMsIDApOworKyAgYXNfdnNwbHRpc2IocywgMSk7CisrICBhc192bXVsZXViKGRlc3RFbmMsIHNy Y0VuYywgcyk7CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBkZXN0LCAxKTsKKysgIFJl ZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7CisrICBhc192c3BsdGlzYihk ZXN0RW5jLCAxKTsKKysgIGFzX3ZtdWxvdWIoZGVzdEVuYywgcywgZGVzdEVuYyk7CisrICBSZWRa b25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDEsIHNjcmF0Y2gpOworKyAgYXNfdmFkZHVobShkZXN0 RW5jLCBkZXN0RW5jLCBzKTsKKyt9CisrCisrLy8gdm1zdW1zaG0vdm1zdW11aG0gY29sbGFwc2Ug dGhlIGkxNng4IOKGkiBpMzJ4NCBwYWlyd2lzZS1hZGQgaW50byBhIHNpbmdsZQorKy8vIG11bHRp cGx5LXN1bTogVlQuaTMyW2tdID0gVlJBLmkxNlsya10qVlJCLmkxNlsya10gKworKy8vIFZSQS5p MTZbMmsrMV0qVlJCLmkxNlsyaysxXQorKy8vICsgVlJDLmkzMltrXS4gV2l0aCBWUkIgPSBzcGxh dCgxKSBhbmQgVlJDID0gMCB0aGlzIGlzIGV4YWN0bHkgdGhlIHdhc20KKysvLyBpMzJ4NC5leHRh ZGRfcGFpcndpc2VfaTE2eDhfe3MsdX0gY29udHJhY3QuIDMgaW5zbnMgd2hlbiBkZXN0ICE9IHNy YzsKKysvLyBMV2FzbVVuYXJ5U2ltZDEyOCB1c2VzIHVzZVJlZ2lzdGVyQXRTdGFydCBzbyBkZXN0 IG1heSBhbGlhcyBzcmMg4oCUIGluIHRoYXQKKysvLyBjYXNlIHdlIHB1dCBzcGxhdCgxKSBpbnRv IHNjcmF0Y2ggKHByZXNlcnZpbmcgc3JjIGluIGRlc3QpIGFuZCB1c2UgYQorKy8vIHJlZC16b25l IHNsb3QgZm9yIHRoZSB6ZXJvIFZSQyBvcGVyYW5kLgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4 dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgaWYgKGRlc3QgIT0gc3JjKSB7Cisr ICAgIGFzX3h4bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsgIC8vIHNjcmF0Y2ggPSAw IChWUkMgYWRkZW5kKQorKyAgICBhc192c3BsdGlzaChkZXN0LmVuY29kaW5nKCkgJiAzMSwgMSk7 ICAvLyBkZXN0ID0gc3BsYXQoMSkgKFZSQiBtdWx0aXBsaWVyKQorKyAgICBhc192bXN1bXNobShk ZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgZGVzdC5lbmNvZGluZygp ICYgMzEsCisrICAgICAgICAgICAgICAgIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsKKysgICAg cmV0dXJuOworKyAgfQorKyAgLy8gZGVzdCA9PSBzcmM6IGxvYWQgc3BsYXQoMSkgaW50byBzY3Jh dGNoIGluc3RlYWQsIHN0YXNoIHplcm8gdG8gdGhlIHJlZAorKyAgLy8gem9uZSwgcmVzdG9yZSB6 ZXJvIGludG8gc2NyYXRjaCBhZnRlciB0aGUgc3BsYXQgaXMgY29uc3VtZWQuLi4gYWN0dWFsbHkK KysgIC8vIHNpbXBsZXI6IHVzZSB2bXVsZS92bXVsbyArIHZhZGQgdHJpbyB3aXRoIHJlZCB6b25l LiBTYW1lIHNoYXBlIGFzIHRoZQorKyAgLy8gcHJlLXZtc3Vtc2htIGZhbGxiYWNrIGZvciBpOHgx Ni4KKysgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBz cmNFbmMgPSBzcmMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBkZXN0RW5jID0gZGVzdC5l bmNvZGluZygpICYgMzE7CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBzcmMsIDApOwor KyAgYXNfdnNwbHRpc2gocywgMSk7CisrICBhc192bXVsZXNoKGRlc3RFbmMsIHNyY0VuYywgcyk7 CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBkZXN0LCAxKTsKKysgIFJlZFpvbmVSZXN0 b3JlU2ltZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7CisrICBhc192c3BsdGlzaChkZXN0RW5jLCAx KTsKKysgIGFzX3ZtdWxvc2goZGVzdEVuYywgcywgZGVzdEVuYyk7CisrICBSZWRab25lUmVzdG9y ZVNpbWQxMjgoKnRoaXMsIDEsIHNjcmF0Y2gpOworKyAgYXNfdmFkZHV3bShkZXN0RW5jLCBkZXN0 RW5jLCBzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRFeHRBZGRQYWly d2lzZUludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgaWYgKGRlc3QgIT0gc3JjKSB7Cisr ICAgIGFzX3h4bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsKKysgICAgYXNfdnNwbHRp c2goZGVzdC5lbmNvZGluZygpICYgMzEsIDEpOworKyAgICBhc192bXN1bXVobShkZXN0LmVuY29k aW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgZGVzdC5lbmNvZGluZygpICYgMzEsCisr ICAgICAgICAgICAgICAgIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsKKysgICAgcmV0dXJuOwor KyAgfQorKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90 IHNyY0VuYyA9IHNyYy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IGRlc3RFbmMgPSBkZXN0 LmVuY29kaW5nKCkgJiAzMTsKKysgIFJlZFpvbmVTdGFzaFNpbWQxMjgoKnRoaXMsIHNyYywgMCk7 CisrICBhc192c3BsdGlzaChzLCAxKTsKKysgIGFzX3ZtdWxldWgoZGVzdEVuYywgc3JjRW5jLCBz KTsKKysgIFJlZFpvbmVTdGFzaFNpbWQxMjgoKnRoaXMsIGRlc3QsIDEpOworKyAgUmVkWm9uZVJl c3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBzY3JhdGNoKTsKKysgIGFzX3ZzcGx0aXNoKGRlc3RFbmMs IDEpOworKyAgYXNfdm11bG91aChkZXN0RW5jLCBzLCBkZXN0RW5jKTsKKysgIFJlZFpvbmVSZXN0 b3JlU2ltZDEyOCgqdGhpcywgMSwgc2NyYXRjaCk7CisrICBhc192YWRkdXdtKGRlc3RFbmMsIGRl c3RFbmMsIHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcXJ0RmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2c3FydHNwKGRl c3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNxcnRGbG9hdDY0eDIoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHZzcXJ0ZHAoZGVz dCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEludDMyeDRUb0Zs b2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHZjdnN4d3Nw KGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQ29udmVy dEludDMyeDRUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBhc194dmN2dXh3c3AoZGVzdCwgc3JjKTsKKyt9CisrCisrLy8gaTMyeDQgKGxvdyAy IGxhbmVzKSDihpIgZjY0eDIuIFdhc20gYGY2NHgyLmNvbnZlcnRfbG93X2kzMng0X3tzLHV9YC4K KysvLyB4dmN2e3MsdX14d2RwIGNvbnZlcnRzIEJFIHdvcmQgMCBhbmQgQkUgd29yZCAyIG9mIHNv dXJjZSB0byBkb3VibGVzIGluCisrLy8gQkUgZHdvcmRzIDAgYW5kIDEuIHZtcmdsdyBwbGFjZXMg c3JjLndvcmRfQkVbMiwzXSBhdCB0aGUgcmVhZCBwb3NpdGlvbnMsCisrLy8gbWF0Y2hpbmcgdGhl IGYzMuKGkmY2NCBwcm9tb3RlIHNoYXBlOgorKy8vICAgdm1yZ2x3ICAgIHNjcmF0Y2gsIHNyYywg c3JjICAgIDsgQkUgd29yZHMgMiwzIG9mIHNyYyDihpIgQkUgd29yZHMgMCwyIG9mCisrLy8gICBz Y3JhdGNoIHh2Y3YqeHdkcCBkZXN0LCBzY3JhdGNoICAgICAgICA7IGNvbnZlcnQgYm90aCwgcGxh Y2UgaW4gQkUgZHdvcmRzCisrLy8gICAwLDEKKysvLyBPdXRwdXQgQkUgZHdvcmRzIGxhbmQgYXMg W2NvbnZlcnQoaW5wdXQgbGFuZSAxKSwgY29udmVydChpbnB1dCBsYW5lIDApXSwKKysvLyB3aGlj aCBvbiBQUEM2NExFIHN0b3JhZ2UgSVMgdGhlIHdhc20gb3V0cHV0IGxheW91dC4KKysvLworKy8v IDIgaW5zbnMgZWFjaCwgc2luZ2xlIFNjcmF0Y2hTaW1kMTI4IHNjb3BlLCBubyBHUFIgb3IgRlBS IHNjcmF0Y2guCisrLy8gQWxsIG9wcyBQT1dFUjcrLiBkZXN0PT1zcmMgYWxpYXNpbmcgc2FmZSAo dm1yZ2x3IGNvbnN1bWVzIHNyYyBpbnRvCisrLy8gc2NyYXRjaCBiZWZvcmUgZGVzdCBpcyB3cml0 dGVuKS4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKEZs b2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOworKyAgYXNfdm1yZ2x3KHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLCBzcmMu ZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKysgIGFzX3h2Y3ZzeHdkcChk ZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRDb252 ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc192bXJn bHcoc2NyYXRjaC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNv ZGluZygpICYgMzEpOworKyAgYXNfeHZjdnV4d2RwKGRlc3QsIHNjcmF0Y2gpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIHh2Y3ZzcHN4d3MgZ2l2ZXMgSU5UMzJfTUlO IGZvciBOYU4sIGJ1dCBXYXNtIHJlcXVpcmVzIDAuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOworKyAgYXNfeHZjbXBlcXNwKHNjcmF0Y2gsIHNyYywgc3JjKTsgIC8vIH4w IGZvciBub24tTmFOLCAwIGZvciBOYU4KKysgIGFzX3h2Y3ZzcHN4d3MoZGVzdCwgc3JjKTsKKysg IGFzX3h4bGFuZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsgIC8vIHplcm8gTmFOIGxhbmVzCisrfQor KworKy8vIFBhY2sgdGhlIHR3byAiaW50ZXJlc3RpbmciIDMyLWJpdCByZXN1bHRzIHRoYXQgeHZj dip4d3MgLyB4dmN2ZHBzcCBsZWF2ZXMKKysvLyBhdCBzY3JhdGNoLndvcmRfQkVbMF0gKD0gQSkg YW5kIHNjcmF0Y2gud29yZF9CRVsyXSAoPSBCKSBpbnRvIGEgemVyb2VkIGRlc3QKKysvLyBhcyBk ZXN0LndvcmRfQkUgPSBbMCwgMCwgQSwgQl0uIFRoaXMgaXMgdGhlIGxheW91dCB3YXNtIHJlcXVp cmVzIGZvcgorKy8vIGY2NHgyIOKGkiB7aTMyeDQgdHJ1bmNfc2F0LCBmMzJ4NCBkZW1vdGV9LiBX cml0ZXMgZGVzdCwgY29uc3VtZXMgc2NyYXRjaC4KKysvLworKy8vIFBPV0VSOSBwYXRoICg0IGlu c25zKSB1c2VzIHh4aW5zZXJ0dy94eGV4dHJhY3R1dy4gUE9XRVI4IHBhdGggKDcgaW5zbnMpCisr Ly8gZ29lcyB2aWEgdHdvIEdQUiByb3VuZC10cmlwczogZXh0cmFjdCBBIGFuZCBCIHdpdGggbWZ2 c3JkLCBzcGxpY2UgdGhlbQorKy8vIGludG8gYSBzaW5nbGUgZHdvcmQgd2l0aCBybGRpbWksIG10 dnNyZCBiYWNrIGludG8gYSBTSU1EIHJlZywgYW5kCisrLy8geHhwZXJtZGkgdGhlIHJlc3VsdCBp bnRvIGRlc3QuZHcxIHdoaWxlIGtlZXBpbmcgZGVzdC5kdzAgemVyby4KKytzdGF0aWMgaW5saW5l IHZvaWQgUGFja1R3b1dvcmRzVG9Mb3dIYWxmKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzY3JhdGNo LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgbWFzbS5hc194eGluc2VydHco ZGVzdCwgc2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgOCk7ICAvLyBkZXN0LndvcmRf QkVbMl0g4oaQIHNjcmF0Y2gud29yZF9CRVsxXSAoPSBBKQorKyAgICBtYXNtLmFzX3h4ZXh0cmFj dHV3KHNjcmF0Y2gsIHNjcmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgOCk7ICAvLyBz Y3JhdGNoLndvcmRfQkVbMV0g4oaQIHNjcmF0Y2gud29yZF9CRVsyXSAoPSBCKQorKyAgICBtYXNt LmFzX3h4aW5zZXJ0dyhkZXN0LCBzY3JhdGNoLAorKyAgICAgICAgICAgICAgICAgICAgICAxMik7 ICAvLyBkZXN0LndvcmRfQkVbM10g4oaQIHNjcmF0Y2gud29yZF9CRVsxXSAoPSBCKQorKyAgICBy ZXR1cm47CisrICB9CisrICAvLyBQT1dFUjg6IHh4aW5zZXJ0dy94eGV4dHJhY3R1dyBhcmUgSVNB IDMuMC4gVGFrZSBhIEdQUiBkZXRvdXIgaW5zdGVhZC4KKysgIC8vIHNjcmF0Y2guZHdfQkVbMF0g PSAoQSA8PCAzMikgfCBBLCBzY3JhdGNoLmR3X0JFWzFdID0gKEIgPDwgMzIpIHwgQi4KKysgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgUmVnaXN0ZXIgdG1wQSA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRtcEIgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBt YXNtLmFzX21mdnNyZCh0bXBBLCBzY3JhdGNoKTsgIC8vIHRtcEEgPSAoQSA8PCAzMikgfCBBCisr ICBtYXNtLmFzX3h4cGVybWRpKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gsCisrICAgICAgICAg ICAgICAgICAgIDIpOyAgICAgICAgICAgIC8vIHN3YXAgZHdvcmRzOiBub3cgZHcwID0gKEI8PDMy KXxCCisrICBtYXNtLmFzX21mdnNyZCh0bXBCLCBzY3JhdGNoKTsgIC8vIHRtcEIgPSAoQiA8PCAz MikgfCBCCisrICBtYXNtLnhfc3JkaSh0bXBBLCB0bXBBLCAzMik7ICAgIC8vIHRtcEEgPSAweDAw MDAwMDAwX0FBQUFBQUFBCisrICBtYXNtLmFzX3JsZGltaSh0bXBCLCB0bXBBLCAzMiwKKysgICAg ICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgLy8gdG1wQlswLi4zMV0gPSBBOyB0bXBCWzMy Li42M10gPSBCIChrZXB0KQorKyAgbWFzbS5hc19tdHZzcmQoc2NyYXRjaCwgdG1wQik7ICAvLyBz Y3JhdGNoLmR3X0JFWzBdID0gKEEgPDwgMzIpIHwgQjsgZHcxID0gMAorKyAgbWFzbS5hc194eHBl cm1kaShkZXN0LCBkZXN0LCBzY3JhdGNoLAorKyAgICAgICAgICAgICAgICAgICAwKTsgIC8vIGRl c3QgPSB7ZGVzdC5kdzA9MCwgc2NyYXRjaC5kdzB9ID0gWzAsIDAsIEEsIEJdCisrfQorKworKy8v IGZjdGl3eiAvIGZjbXB1IC8gZmN0aWR1eiBhcmUgWC1mb3JtIHNjYWxhciBGUCBpbnN0cnVjdGlv bnMgdGhhdCBvbmx5CisrLy8gZW5jb2RlIDUtYml0IEZSVC9GUkIgZmllbGRzLCBzbyBlbWl0dGlu ZyB0aGVtIG9uIGEgU2ltZDEyOCByZWcKKysvLyAoZW5jb2RpbmcgMzIrKSB3b3VsZCBjb3JydXB0 IHRoZSBvcGNvZGUuIEJyaWRnZSB0aHJvdWdoCisrLy8gU2NyYXRjaERvdWJsZVJlZyAoRlBSIGYw KSBmb3IgdGhlIGNvbnZlcnNpb24uIEV4dHJhY3QgYm90aCBsYW5lcycgR1BSCisrLy8gcmVzdWx0 cyBiZWZvcmUgd3JpdGluZyBkZXN0IHNvIHRoYXQgZGVzdCA9PSBzcmMgaXMgc2FmZS4KKysvLwor Ky8vIEF2b2lkIHJlcGxhY2VMYW5lSW50MzJ4NCBvbiB0aGUgdGFpbDogb24gUE9XRVI4IGl0IG5l ZWRzIGFuIGV4dHJhCisrLy8gR1BSIHNjcmF0Y2gsIGJ1dCByMTEgYW5kIHIxMiBhcmUgYWxyZWFk eSBoZWxkIGFzIGEvYiBoZXJlLiBQYWNrIGJvdGgKKysvLyBpbnQzMnMgaW50byBgYWAgd2l0aCBy bGRpbWksIHRyYW5zZmVyIHZpYSBtdHZzcmQsIHRoZW4geHhwZXJtZGkgdGhlCisrLy8gRFdzIGlu dG8gdGhlIGxvdyBoYWxmIHNvIHdhc20gbGFuZSAwIChCRSBXMykgaG9sZHMgYSwgbGFuZSAxIChX MikgYi4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChG bG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7CisrICAvLyBXYXNt IGBpMzJ4NC50cnVuY19zYXRfZjY0eDJfc196ZXJvYC4geHZjdmRwc3h3cyBzYXR1cmF0ZXMgdG8g SU5UMzJfTUlOCisrICAvLyBvbiBvdmVyZmxvdy9OYU4gKHBlciBJU0EpOyB3YXNtIHJlcXVpcmVz IE5hTiDihpIgMCwgc28gYSBwZXItZHdvcmQgTmFOCisrICAvLyBtYXNrIHZpYSB4dmNtcGVxZHAg Y2xhbXBzIE5hTiBsYW5lcyB0byAwIGJlZm9yZSBsYXlpbmcgb3V0IHRoZSByZXN1bHQuCisrICAv LyBPdXRwdXQgQkUgd29yZCBwb3NpdGlvbnMgbmVlZCB3YXNtIGxhbmUgb3JkZXI6IGxhbmUgMSDi hpIgQkUgd29yZCAyLAorKyAgLy8gbGFuZSAwIOKGkiBCRSB3b3JkIDMuIHh2Y3ZkcHN4d3MgbGFu ZHMgaXRzIHJlc3VsdHMgYXQgQkUgd29yZHMgMCBhbmQgMgorKyAgLy8gKHdpdGggcmVwbGljYXRp b24gaW50byAxLzMpOyBQYWNrVHdvV29yZHNUb0xvd0hhbGYgbW92ZXMgdGhlbSBpbnRvCisrICAv LyB0aGUgcmlnaHQgcG9zaXRpb25zIHdoaWxlIHplcm9pbmcgdGhlIHJlc3QuCisrICAvLyBkZXN0 PT1zcmMgc2FmZTogc3JjIGlzIGNvbnN1bWVkIGJ5IHh2Y3ZkcHN4d3MgYW5kIHh2Y21wZXFkcCBi ZWZvcmUKKysgIC8vIGRlc3QgaXMgemVyb2VkLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3Jh dGNoKCp0aGlzKTsKKysgIGFzX3h2Y3ZkcHN4d3Moc2NyYXRjaCwgc3JjKTsKKysgIGFzX3h2Y21w ZXFkcChkZXN0LCBzcmMsCisrICAgICAgICAgICAgICAgc3JjKTsgIC8vIE5hTi1tYXNrOiAweEZG Li4uRiBwZXIgZHdvcmQgZm9yIG5vbi1OYU4sIDAgZm9yIE5hTgorKyAgYXNfeHhsYW5kKHNjcmF0 Y2gsIHNjcmF0Y2gsIGRlc3QpOworKyAgYXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOworKyAg UGFja1R3b1dvcmRzVG9Mb3dIYWxmKCp0aGlzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRUcnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChGbG9h dFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkg eworKyAgLy8gV2FzbSBgaTMyeDQudHJ1bmNfc2F0X2Y2NHgyX3VfemVyb2AuIHh2Y3ZkcHV4d3Mg c2VtYW50aWNzIGFscmVhZHkKKysgIC8vIG1hdGNoIHRoZSB3YXNtIHNwZWMgd2l0aG91dCBhbnkg bWFza2luZzogTmFOIOKGkiAwLCBuZWdhdGl2ZSDihpIgMCwKKysgIC8vIHBvc2l0aXZlIG92ZXJm bG93IOKGkiBVSU5UMzJfTUFYLiBTbyBubyBOYU4gbWFzayBuZWVkZWQ7IGp1c3QgcG9zaXRpb24K KysgIC8vIHRoZSBzYXR1cmF0ZWQgcmVzdWx0cyBpbnRvIEJFIHdvcmRzIDIsMyB3aXRoIHplcm9z IGF0IHdvcmRzIDAsMS4KKysgIC8vIGRlc3Q9PXNyYyBzYWZlOiBzcmMgY29uc3VtZWQgYnkgeHZj dmRwdXh3cyBiZWZvcmUgZGVzdCBpcyB6ZXJvZWQuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOworKyAgYXNfeHZjdmRwdXh3cyhzY3JhdGNoLCBzcmMpOworKyAgYXNfeHhs eG9yKGRlc3QsIGRlc3QsIGRlc3QpOworKyAgUGFja1R3b1dvcmRzVG9Mb3dIYWxmKCp0aGlzLCBz Y3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNGbG9hdDMy eDRUb0ludDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIHRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkVHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKAor KyAgICBGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB1bnNpZ25l ZFRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQ2NHgyVG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVy IHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChz cmMsIGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dW5zaWduZWRUcnVuY0Zsb2F0NjR4MlRvSW50MzJ4NFJlbGF4ZWQoCisrICAgIEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIHVuc2lnbmVkVHJ1bmNTYXRGbG9h dDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrfQorKworKy8v IGY2NHgyIOKGkiBmMzJ4NCAobG93IDIgbGFuZXM7IGhpZ2ggbGFuZXMgemVybykuIFdhc20gYGYz Mng0LmRlbW90ZV9mNjR4Ml96ZXJvYC4KKysvLyB4dmN2ZHBzcCBjb252ZXJ0cyBib3RoIGRvdWJs ZXMgaW4gb25lIHNob3QsIHJlcGxpY2F0aW5nIGVhY2ggcmVzdWx0IGFjcm9zcworKy8vIGl0cyBk d29yZDogQkUgd29yZCBsYW5lcyA9IFtzKGluLmR3MCksIHMoaW4uZHcwKSwgcyhpbi5kdzEpLCBz KGluLmR3MSldLgorKy8vIE9uIFBQQzY0TEUgd2FzbSBzdG9yYWdlIChseHZ4LWxvYWRlZCksIGlu cHV0LmR3X0JFWzBdID0gd2FzbSBsYW5lIDEgYW5kCisrLy8gaW5wdXQuZHdfQkVbMV0gPSB3YXNt IGxhbmUgMCwgc28gd2UgZ2V0IFtzKGwxKSwgcyhsMSksIHMobDApLCBzKGwwKV0gaW4KKysvLyBC RSB3b3JkIG9yZGVyLiBXZSB0aGVuIHplcm8gZGVzdCBhbmQgcGFjayBzKGwxKSBpbnRvIEJFIHdv cmQgMiAod2FzbQorKy8vIG91dHB1dCBsYW5lIDEpIGFuZCBzKGwwKSBpbnRvIEJFIHdvcmQgMyAo d2FzbSBvdXRwdXQgbGFuZSAwKSB2aWEgdGhlCisrLy8gc2hhcmVkIFBhY2tUd29Xb3Jkc1RvTG93 SGFsZiBoZWxwZXIsIHdoaWNoIGhhcyBQT1dFUjkgYW5kIFBPV0VSOCBwYXRocy4KKysvLworKy8v IGRlc3Q9PXNyYyBhbGlhc2luZyBzYWZlOiBzcmMgaXMgY29uc3VtZWQgYnkgeHZjdmRwc3AgYmVm b3JlIGRlc3QgaXMgemVyb2VkLgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRGbG9hdDY0 eDJUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgYXNfeHZjdmRwc3Aoc2NyYXRjaCwg c3JjKTsKKysgIFplcm9TaW1kMTI4KCp0aGlzLCBkZXN0KTsKKysgIFBhY2tUd29Xb3Jkc1RvTG93 SGFsZigqdGhpcywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworKy8vIGYzMng0IChsb3cgMiBsYW5l cykg4oaSIGY2NHgyLiBXYXNtIGBmNjR4Mi5wcm9tb3RlX2xvd19mMzJ4NGAuIHh2Y3ZzcGRwCisr Ly8gY29udmVydHMgYm90aCBCRSB3b3JkIDAgYW5kIEJFIHdvcmQgMiBvZiBpdHMgc291cmNlIHRv IGRvdWJsZXMgaW4gQkUKKysvLyBkd29yZHMgMCBhbmQgMSByZXNwZWN0aXZlbHkuIFRvIGdldCB3 YXNtIGxhbmVzIDAgYW5kIDEgKD0gaW5wdXQgQkUKKysvLyB3b3JkcyAzIGFuZCAyKSBpbnRvIHRo b3NlIHNvdXJjZSBwb3NpdGlvbnMsIHZtcmdsdyBtZXJnZXMgbG93IHdvcmRzOgorKy8vIFZSVC53 b3JkWzBdID0gVlJBLndvcmRbMl0gPSB3YXNtIGxhbmUgMSwgVlJULndvcmRbMl0gPSBWUkEud29y ZFszXSA9CisrLy8gd2FzbSBsYW5lIDAgKHdpdGggcmVwbGljYXRlZCBjb3BpZXMgaW4gb2RkIHdv cmQgc2xvdHMgdGhhdCB4dmN2c3BkcAorKy8vIGlnbm9yZXMpLiBPdXRwdXQgQkUgZHdvcmRzIGxh bmQgYXMgW2RvdWJsZShsYW5lMSksIGRvdWJsZShsYW5lMCldLAorKy8vIHdoaWNoIG9uIFBQQzY0 TEUgc3RvcmFnZSBpcyBleGFjdGx5IHRoZSB3YXNtIGY2NHgyIG91dHB1dCBsYXlvdXQuCisrLy8K KysvLyBkZXN0PT1zcmMgYWxpYXNpbmcgc2FmZTogdm1yZ2x3IGNvbnN1bWVzIHNyYyBpbnRvIGEg c2VwYXJhdGUgc2NyYXRjaAorKy8vIGJlZm9yZSBkZXN0IGlzIHdyaXR0ZW4uCisrLy8KKysvLyAy IGluc25zLCBzaW5nbGUgU2NyYXRjaFNpbWQxMjggc2NvcGUuIEFsbCBvcHMgUE9XRVI3Ky4KKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0RmxvYXQzMng0VG9GbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKKysgIGFzX3ZtcmdsdyhzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29k aW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc194dmN2c3BkcChkZXN0LCBz Y3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWROYXJyb3dJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAv LyBPbiBMRSwgVk1YIHBhY2sgc3dhcHMgb3BlcmFuZCBvcmRlciB2cyBXYXNtIGNvbnZlbnRpb24u CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnBrc2h1cyksIHJo cywgbGhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWROYXJy b3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICAvLyBPbiBMRSwgVk1YIHBhY2sgc3dhcHMgb3BlcmFuZCBvcmRlciB2cyBXYXNtIGNvbnZl bnRpb24uCisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnBrc3d1 cyksIHJocywgbGhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5M b3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8v IE9uIFBQQzY0IExFLCByYXcgdnVwa2xzYiB1bnBhY2tzIHRoZSBMT1cgV2FzbSBsYW5lcyAobm90 IHZ1cGtoc2IpLgorKyAgLy8gR0NDIHZlY191bnBhY2toIG1hcHMgdG8gdnVwa2xzYiBvbiBMRSAo c3dhcHBlZCBmcm9tIEJFIG5hbWluZykuCisrICAvLyBSYXcgdnVwa2xzYihbMS4uOCwtMS4uLThd KSA9IFsxLDIsMyw0LDUsNiw3LDhdLgorKyAgRW1pdFZteFVuYXJ5KAorKyAgICAgICp0aGlzLAor KyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNf dnVwa2xzYih2cnQsIHZyYik7IH0sCisrICAgICAgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6d2lkZW5IaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICAvLyBPbiBQUEM2NCBMRSwgcmF3IHZ1cGtoc2IgdW5wYWNrcyB0 aGUgSElHSCBXYXNtIGxhbmVzLgorKyAgRW1pdFZteFVuYXJ5KAorKyAgICAgICp0aGlzLAorKyAg ICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVw a2hzYih2cnQsIHZyYik7IH0sCisrICAgICAgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRlbkxvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICB6ZXJvRXh0ZW5kOHgxNlRvMTZ4OChzcmMsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdpc3Rl ciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gdm1yZ2hiKHplcm8sIHNyYykgaW50ZXJsZWF2ZXMg emVybyBieXRlcyB3aXRoIHRoZSBCRS1oaWdoIGhhbGYgb2Ygc3JjLAorKyAgLy8gcHJvZHVjaW5n IHplcm8tZXh0ZW5kZWQgaGFsZndvcmRzIG9mIHRoZSBMRS1oaWdoIChXYXNtLWhpZ2gpIGxhbmVz LgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h4bHhvcihz Y3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsKKysgIGFzX3ZtcmdoYihkZXN0LmVuY29kaW5nKCkg JiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3aWRlbkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gT24gUFBDNjQgTEUsIHJhdyB2dXBrbHNo IHVucGFja3MgTE9XIFdhc20gbGFuZXMgKEdDQyBzd2FwcyBoL2wgb24gTEUpLgorKyAgRW1pdFZt eFVuYXJ5KAorKyAgICAgICp0aGlzLAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVwa2xzaCh2cnQsIHZyYik7IH0sCisrICAgICAgc3Jj LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5IaWdoSW50MTZ4OChG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14VW5hcnko CisrICAgICAgKnRoaXMsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWlu dDhfdCB2cmIpIHsgYS5hc192dXBraHNoKHZydCwgdnJiKTsgfSwKKysgICAgICBzcmMsIGRlc3Qp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdpZGVuTG93SW50MTZ4OChG bG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIHplcm9FeHRlbmQxNng4VG8zMng0KHNy YywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkV2lkZW5IaWdo SW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEy OFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgYXNfeHhseG9yKHNjcmF0Y2gsIHNjcmF0Y2gsIHNj cmF0Y2gpOworKyAgYXNfdm1yZ2hoKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNoLmVuY29k aW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OndpZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICAvLyBPbiBQUEM2NCBMRSwgcmF3IHZ1cGtsc3cgdW5wYWNrcyBMT1cgV2FzbSBs YW5lcy4KKysgIEVtaXRWbXhVbmFyeSgKKysgICAgICAqdGhpcywKKysgICAgICBbXShBc3NlbWJs ZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtsc3codnJ0LCB2cmIp OyB9LAorKyAgICAgIHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVu c2lnbmVkV2lkZW5Mb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg emVyb0V4dGVuZDMyeDRUbzY0eDIoc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6d2lkZW5IaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBFbWl0Vm14VW5hcnkoCisrICAgICAgKnRoaXMsCisrICAgICAgW10oQXNzZW1i bGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192dXBraHN3KHZydCwgdnJi KTsgfSwKKysgICAgICBzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1 bnNpZ25lZFdpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgLy8gaTY0eDIuZXh0ZW5kX2hpZ2hfaTMyeDRfdTogdGFrZSBoaWdoIDIgaTMyIGxhbmVzIG9m IHNyYywgemVyby1leHRlbmQKKysgIC8vIHRvIGk2NCBlYWNoLiBVc2Ugdm1yZ2h3IHRvIGludGVy bGVhdmUgYSB6ZXJvIFZSIHdpdGggc3JjIOKAlCBzYW1lIHNoYXBlCisrICAvLyBhcyB0aGUgKGFs cmVhZHktY29ycmVjdCkgdW5zaWduZWRXaWRlbkhpZ2hJbnQxNng4IHNpYmxpbmcgYWJvdmUuCisr ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgWmVyb1NpbWQxMjgoKnRo aXMsIHNjcmF0Y2gpOworKyAgYXNfdm1yZ2h3KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNo LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnBzZXVkb01pbkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVz dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHNPckxoc0Rlc3QpIHsKKysgIC8vIHBtaW46IHJlc3VsdFtpXSA9IHJoc1tpXSA8IGxoc1tp XSA/IHJoc1tpXSA6IGxoc1tpXQorKyAgLy8geHZjbXBndHNwKG1hc2ssIGxocywgcmhzKSDihpIg MSB3aGVyZSBsaHMgPiByaHMgKGkuZS4sIHJocyA8IGxocykKKysgIC8vIHh4c2VsOiBtYXNrPTEg 4oaSIFhCPXJocy4gbWFzaz0wIOKGkiBYQT1saHMuCisrICAvLyBSZXN1bHQgZ29lcyB0byBsaHNP ckxoc0Rlc3QgKHNlY29uZCBwYXJhbSkuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOworKyAgYXNfeHZjbXBndHNwKHNjcmF0Y2gsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNE ZXN0KTsKKysgIGFzX3h4c2VsKGxoc09yTGhzRGVzdCwgbGhzT3JMaHNEZXN0LCByaHNPclJoc0Rl c3QsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwc2V1ZG9NaW5GbG9h dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8v IHBtaW4obGhzLCByaHMpID0gcmhzIDwgbGhzID8gcmhzIDogbGhzCisrICAvLyBJbmxpbmUgdG8g aGFuZGxlIGRlc3QgYWxpYXNpbmcgd2l0aCBlaXRoZXIgb3BlcmFuZC4KKysgIFNjcmF0Y2hTaW1k MTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc194dmNtcGd0c3Aoc2NyYXRjaCwgbGhzLCBy aHMpOworKyAgLy8gbWFzaz0xIHdoZXJlIGxocyA+IHJocy4gWEM9MSDihpIgc2VsZWN0IFhCPXJo cy4gWEM9MCDihpIgc2VsZWN0IFhBPWxocy4KKysgIGFzX3h4c2VsKGRlc3QsIGxocywgcmhzLCBz Y3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWluRmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkgeworKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCBsaHNP ckxoc0Rlc3QsIHJoc09yUmhzRGVzdCk7CisrICBhc194eHNlbChsaHNPckxoc0Rlc3QsIGxoc09y TGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cHNldWRvTWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAg YXNfeHZjbXBndGRwKHNjcmF0Y2gsIGxocywgcmhzKTsKKysgIGFzX3h4c2VsKGRlc3QsIGxocywg cmhzLCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4Rmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkgeworKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2Y21wZ3RzcChzY3JhdGNo LCByaHNPclJoc0Rlc3QsIGxoc09yTGhzRGVzdCk7CisrICBhc194eHNlbChsaHNPckxoc0Rlc3Qs IGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cHNldWRvTWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBwbWF4KGxocywgcmhzKSA9IGxocyA8IHJocyA/IHJo cyA6IGxocworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2 Y21wZ3RzcChzY3JhdGNoLCByaHMsIGxocyk7CisrICAvLyBtYXNrPTEgd2hlcmUgcmhzID4gbGhz IChsaHMgPCByaHMpLiBYQz0xIOKGkiBzZWxlY3QgWEI9cmhzLiBYQz0wIOKGkiBzZWxlY3QKKysg IC8vIFhBPWxocy4KKysgIGFzX3h4c2VsKGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIg cmhzT3JSaHNEZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3Jh dGNoKCp0aGlzKTsKKysgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCByaHNPclJoc0Rlc3QsIGxoc09y TGhzRGVzdCk7CisrICBhc194eHNlbChsaHNPckxoc0Rlc3QsIGxoc09yTGhzRGVzdCwgcmhzT3JS aHNEZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4 RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgYXNfeHZjbXBndGRwKHNj cmF0Y2gsIHJocywgbGhzKTsKKysgIGFzX3h4c2VsKGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZG90SW50OHgxNkludDd4MTYoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gcmVzdWx0W2tdID0gbGhz WzJrXSpyaHNbMmtdICsgbGhzWzJrKzFdKnJoc1syaysxXSBmb3Igaz0wLi43LgorKyAgLy8gdm11 bGVzYi92bXVsb3NiIHByb2R1Y2UgZXZlbi9vZGQgYnl0ZSBwcm9kdWN0cyBhcyBpMTYgaW4gbWF0 Y2hpbmcKKysgIC8vIGhhbGZ3b3JkIGxhbmVzOyB2YWRkdWhtIHN1bXMgdGhlbSBwYWlyd2lzZS4K KysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBs aHMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsK KysgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBzID0gc2Ny YXRjaC5lbmNvZGluZygpICYgMzE7CisrICBhc192bXVsZXNiKHMsIGwsIHIpOworKyAgYXNfdm11 bG9zYihkLCBsLCByKTsKKysgIGFzX3ZhZGR1aG0oZCwgcywgZCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNlaWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgYXNfeHZyc3BpcChkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjZWlsRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIGFzX3h2cmRwaXAoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Zmxvb3JGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgYXNfeHZyc3BpbShkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpmbG9vckZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBhc194dnJkcGltKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnRydW5jRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIGFzX3h2cnNwaXooZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6dHJ1bmNGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgYXNfeHZyZHBpeihkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpuZWFyZXN0RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIGFzX3h2cnNwaWMoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bmVhcmVzdEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBhc194dnJkcGljKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmZubWFGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNy YzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNy Y0Rlc3QpIHsKKysgIGFzX3h2bm1zdWJhc3Aoc3JjRGVzdCwgc3JjMSwgc3JjMik7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZubWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMxLCBG bG9hdFJlZ2lzdGVyIHNyYzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIGFzX3h2bm1zdWJhZHAoc3JjRGVzdCwgc3JjMSwg c3JjMik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0MzJ4NFJlbGF4ZWQo RmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIGFzX3h2bWluc3Aoc3JjRGVzdCwgc3Jj RGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQzMng0UmVs YXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFz X3h2bWluc3AoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt YXhGbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7CisrICBhc194 dm1heHNwKHNyY0Rlc3QsIHNyY0Rlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om1heEZsb2F0MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBhc194dm1heHNwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjRGVzdCkgeworKyAgYXNfeHZtaW5kcChzcmNEZXN0LCBzcmNEZXN0LCBzcmMpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHZtaW5kcChkZXN0LCBsaHMs IHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MlJlbGF4ZWQo RmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIGFzX3h2bWF4ZHAoc3JjRGVzdCwgc3Jj RGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgyUmVs YXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFz X3h2bWF4ZHAoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpx MTVNdWxySW50MTZ4OFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIHExNU11bHJTYXRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKyt9Cisr CisrLy8gU0lNRCBvdmVybG9hZHMgYWNjZXB0aW5nIGFuIGV4dHJhIEZsb2F0UmVnaXN0ZXIgdGVt cCAoc2hhcmVkLWhlYWRlciBzaWduYXR1cmUKKysvLyB1c2VkIGJ5IHg4Njsgb24gUFBDNjQgdGhl IHRlbXAgaXMgdW51c2VkIGZvciBtb3N0IG9mIHRoZXNlKS4KKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpwb3BjbnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsK KysgIHBvcGNudEludDh4MTYoc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgdW5zaWduZWRU cnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpkb3RJbnQ4eDE2SW50N3gxNlRoZW5BZGQoRmxvYXRSZWdpc3RlciBsaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgLy8gZGVzdCArPSBwYWlyd2lzZV93 aWRlbl9pMTZfdG9faTMyKGRvdF9pOHgxNihsaHMsIHJocykpLgorKyAgLy8KKysgIC8vIFN0ZXAg MTogaTE2eDggZG90IG9mIGk4IGJ5dGUgcGFpcnMgKHZtdWxlc2Ivdm11bG9zYi92YWRkdWhtKS4g S2VlcHMKKysgIC8vIHRoZSBleGlzdGluZyBzaWduZWQtYnl0ZSBtdWx0aXBseSBzZW1hbnRpY3Mg dGhhdCBtYXRjaCBBUk02NCBzZG90CisrICAvLyBhbmQgeDg2IHZwZHBic3NkICh2bXN1bW1ibSB3 b3VsZCBiZSBzaWduZWTDl3Vuc2lnbmVkIGFuZCBkaXZlcmdlIGZvcgorKyAgLy8gaTcgbGFuZXMg dGhhdCBiaXQtcGF0dGVybiBhcyBuZWdhdGl2ZSkuCisrICAvLworKyAgLy8gU3RlcCAyOiB2bXN1 bXNobSBkZXN0LCBkb3QsIHNwbGF0X2h3KDEpLCBkZXN0IGNvbXB1dGVzCisrICAvLyAgIGRlc3Qu aTMyW2tdID0gZGVzdC5pMzJba10gKyBkb3QuaTE2WzJrXSoxICsgZG90LmkxNlsyaysxXSoxCisr ICAvLyB3aGljaCBpcyBleGFjdGx5IHBhaXJ3aXNlIHdpZGVuICsgYWNjdW11bGF0ZSBpbiBhIHNp bmdsZSBpbnNuLgorKyAgLy8gc3BsYXRfaHcoMSkgaXMgYSBzaW5nbGUgdnNwbHRpc2ggKDUtYml0 IFNJTU0gc3BsYXQgdG8gYWxsIDggaGFsZndvcmRzKS4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxOworKyAg dWludDhfdCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZCA9IGRlc3QuZW5j b2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Cisr ICB1aW50OF90IHQgPSB0ZW1wLmVuY29kaW5nKCkgJiAzMTsKKysKKysgIGFzX3ZtdWxlc2Iocywg bCwgcik7CisrICBhc192bXVsb3NiKHQsIGwsIHIpOworKyAgYXNfdmFkZHVobSh0LCBzLCB0KTsK KysgIGFzX3ZzcGx0aXNoKHMsIDEpOworKyAgYXNfdm1zdW1zaG0oZCwgdCwgcywgZCk7CisrfQor KworKy8vIFNJTUQgb3BzIHBvcnRlZCBmcm9tIGFybTY0LSBhbmQgeDg2L3g2NC1zaGFwZWQgc2ln bmF0dXJlcy4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwZXJtdXRlSW50MTZ4OChjb25zdCB1 aW50MTZfdCBsYW5lc1s4XSwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB1aW50OF90IHNodWZm bGVMYW5lc1sxNl07CisrICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAg IHNodWZmbGVMYW5lc1tpICogMl0gPSBsYW5lc1tpXSAqIDI7CisrICAgIHNodWZmbGVMYW5lc1tp ICogMiArIDFdID0gbGFuZXNbaV0gKiAyICsgMTsKKysgIH0KKysgIHNodWZmbGVJbnQ4eDE2KHNo dWZmbGVMYW5lcywgc3JjLCBzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpyb3RhdGVSaWdodFNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hp ZnQpIHsKKysgIE1PWl9BU1NFUlQoc2hpZnQgPCAxNik7CisrICBpZiAoc2hpZnQgPT0gMCkgewor KyAgICBtb3ZlU2ltZDEyOChzcmMsIGRlc3QpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyB2 c2xkb2kgVlJULFZSQSxWUkIsU0g6IGNvbmNhdGVuYXRlIFZSQXx8VlJCLCB0YWtlIGJ5dGVzIFtT SC4uU0grMTVdLgorKyAgLy8gUm90YXRlIHJpZ2h0IGJ5IE4gPSB2c2xkb2koc3JjLCBzcmMsIDE2 LU4pLgorKyAgYXNfdnNsZG9pKGRlc3QsIHNyYywgc3JjLCAxNiAtIHNoaWZ0KTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSB7CisrICAvLyBQT1dFUjEwIGNvbGxhcHNlcyB0 aGUgZW50aXJlIGk2NHgyIG11bHRpcGx5IHRvIGEgc2luZ2xlIHZtdWxsZC4KKysgIC8vIFBPV0VS OS9QT1dFUjggZmFsbCBiYWNrIHRvIHRoZSBHUFIgcm91bmQtdHJpcCBwYXRoOiBleHRyYWN0IGVh Y2gKKysgIC8vIGxhbmUgcGFpciBpbnRvIEdQUnMgKG1mdnNybGQgZm9yIExFLWR3MC9XYXNtLWxh bmUtMCwgbWZ2c3JkIGZvcgorKyAgLy8gTEUtZHcxL2xhbmUtMSksIG11bHRpcGx5LCBhbmQgcmVh c3NlbWJsZSB2aWEgbXR2c3JkICsgeHhwZXJtZGkuCisrICBpZiAoSGFzUE9XRVIxMCgpKSB7Cisr ICAgIGFzX3ZtdWxsZChkZXN0LmVuY29kaW5nKCkgJiAzMSwgbGhzLmVuY29kaW5nKCkgJiAzMSwg cmhzLmVuY29kaW5nKCkgJiAzMSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIC8vIEFsaWFzaW5n IHNhZmV0eTogc3Rhc2ggdGhlIGxhbmUtMCBwcm9kdWN0IGluIFNjcmF0Y2hTaW1kMTI4ICh3aGlj aAorKyAgLy8gaXMgbm9uLWFsbG9jYXRhYmxlLCBzbyBjYW5ub3QgYWxpYXMgbGhzL3JocykgYW5k IG9ubHkgd3JpdGUgZGVzdCBhdAorKyAgLy8gdGhlIHZlcnkgZW5kLCBhZnRlciBib3RoIGxocyBh bmQgcmhzIGhhdmUgYmVlbiBmdWxseSBjb25zdW1lZC4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBhID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgYiA9IHRl bXBzLkFjcXVpcmUoKTsKKysKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBhc19tZnZzcmxk KGEsIGxocyk7CisrICAgIGFzX21mdnNybGQoYiwgcmhzKTsKKysgIH0gZWxzZSB7CisrICAgIGFz X3h4cGVybWRpKHNjcmF0Y2gsIGxocywgbGhzLCAyKTsKKysgICAgYXNfbWZ2c3JkKGEsIHNjcmF0 Y2gpOworKyAgICBhc194eHBlcm1kaShzY3JhdGNoLCByaHMsIHJocywgMik7CisrICAgIGFzX21m dnNyZChiLCBzY3JhdGNoKTsKKysgIH0KKysgIGFzX211bGxkKGEsIGEsIGIpOworKyAgYXNfbXR2 c3JkKHNjcmF0Y2gsIGEpOworKworKyAgYXNfbWZ2c3JkKGEsIGxocyk7CisrICBhc19tZnZzcmQo YiwgcmhzKTsKKysgIGFzX211bGxkKGEsIGEsIGIpOworKyAgYXNfbXR2c3JkKGRlc3QsIGEpOwor KyAgYXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwgc2NyYXRjaCwgMCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJpdHdpc2VBbmROb3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIGFuZG5vdChsaHMsIHJocykgPSBsaHMgJiB+ cmhzID0geHhsYW5kYyhsaHMsIHJocykKKysgIGFzX3h4bGFuZGMoZGVzdCwgbGhzLCByaHMpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlU2VsZWN0U2ltZDEyOChGbG9hdFJl Z2lzdGVyIG9uVHJ1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIG9uRmFsc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBtYXNrRGVzdCkgeworKyAgLy8gcmVzdWx0ID0gKG9u VHJ1ZSAmIG1hc2spIHwgKG9uRmFsc2UgJiB+bWFzaykKKysgIC8vIHh4c2VsOiBYQz0w4oaSWEEs IFhDPTHihpJYQiDihpIgWFQgPSAoWEEgJiB+WEMpIHwgKFhCICYgWEMpCisrICAvLyBOZWVkIFhB PW9uRmFsc2UsIFhCPW9uVHJ1ZSwgWEM9bWFzay4KKysgIGFzX3h4c2VsKG1hc2tEZXN0LCBvbkZh bHNlLCBvblRydWUsIG1hc2tEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cG9w Y250SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBF bWl0Vm14VW5hcnkoCisrICAgICAgKnRoaXMsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50 OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192cG9wY250Yih2cnQsIHZyYik7IH0sCisrICAg ICAgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0ludDh4 MTYoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7CisrICBpZiAoSGFzUE9XRVIx MCgpKSB7CisrICAgIC8vIFNpbmdsZS1pbnN0cnVjdGlvbiBjb2xsYXBzZSBvbiBQT1dFUjEwLgor KyAgICBhc192ZXh0cmFjdGJtKGRlc3QsIHNyYyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIC8v IFBPV0VSOCsgdmJwZXJtcS1iYXNlZCBiaXRtYXNrOiBjdGxbaV0gPSAoMTUtaSkqOCBwcm9kdWNl cyB0aGUgd2FzbS1zcGVjCisrICAvLyBiaXRtYXAgKGJpdCBpID0gTVNCIG9mIExFIGxhbmUgaSkg aW4gZHcwIGxvdyAxNiBiaXRzLgorKyAgaW50OF90IGN0bFsxNl0gPSB7MTIwLCAxMTIsIDEwNCwg OTYsIDg4LCA4MCwgNzIsIDY0LAorKyAgICAgICAgICAgICAgICAgICAgNTYsICA0OCwgIDQwLCAg MzIsIDI0LCAxNiwgOCwgIDB9OworKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6 OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsKKysgIGFzX3ZicGVybXEodGVtcC5lbmNvZGluZygpICYg MzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsKKysgIGFzX21m dnNyZChkZXN0LCB0ZW1wKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0lu dDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7CisrICBpZiAoSGFzUE9X RVIxMCgpKSB7CisrICAgIGFzX3ZleHRyYWN0aG0oZGVzdCwgc3JjKTsKKysgICAgcmV0dXJuOwor KyAgfQorKyAgLy8gU2FtZSByZWNpcGUgYXMgYml0bWFza0ludDh4MTYgYnV0IGN0bCBwaWNrcyBo YWxmd29yZCBNU0JzOgorKyAgLy8gQkUgYml0ICgxNC0yaSkqOCBmb3IgbGFuZSBpLCBwbHVzIDgg aWdub3JlLWJ5dGVzIChoaWdoIGJpdCBzZXQpLgorKyAgaW50OF90IGN0bFsxNl0gPSB7MTEyLCAg OTYsICAgODAsICAgNjQsICAgNDgsICAgMzIsICAgMTYsICAgMCwKKysgICAgICAgICAgICAgICAg ICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjh9OworKyAg bG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsK KysgIGFzX3ZicGVybXEodGVtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEs IHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsKKysgIGFzX21mdnNyZChkZXN0LCB0ZW1wKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB0ZW1wKSB7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIGFzX3ZleHRy YWN0d20oZGVzdCwgc3JjKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgLy8gU2FtZSByZWNpcGUg YXMgYml0bWFza0ludDh4MTYgYnV0IGN0bCBwaWNrcyB3b3JkIE1TQnM6CisrICAvLyBCRSBiaXQg KDEyLTRpKSo4IGZvciBsYW5lIGksIHBsdXMgMTIgaWdub3JlLWJ5dGVzIChoaWdoIGJpdCBzZXQp LgorKyAgaW50OF90IGN0bFsxNl0gPSB7OTYsICAgNjQsICAgMzIsICAgMCwgICAgLTEyOCwgLTEy OCwgLTEyOCwgLTEyOCwKKysgICAgICAgICAgICAgICAgICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0x MjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjh9OworKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1k Q29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsKKysgIGFzX3ZicGVybXEodGVtcC5lbmNv ZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsK KysgIGFzX21mdnNyZChkZXN0LCB0ZW1wKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 Yml0bWFza0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7CisrICBp ZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIGFzX3ZleHRyYWN0ZG0oZGVzdCwgc3JjKTsKKysgICAg cmV0dXJuOworKyAgfQorKyAgLy8gU2FtZSByZWNpcGUgYXMgdGhlIG90aGVyIGJpdG1hc2sgdmFy aWFudHMuIGN0bCBwaWNrcyBkd29yZCBNU0JzOgorKyAgLy8gQkUgYml0IDY0IGZvciBsYW5lIDAs IEJFIGJpdCAwIGZvciBsYW5lIDEsIHBsdXMgMTQgaWdub3JlLWJ5dGVzLgorKyAgaW50OF90IGN0 bFsxNl0gPSB7NjQsICAgMCwgICAgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwK KysgICAgICAgICAgICAgICAgICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgs IC0xMjgsIC0xMjh9OworKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0 ZVgxNihjdGwpLCB0ZW1wKTsKKysgIGFzX3ZicGVybXEodGVtcC5lbmNvZGluZygpICYgMzEsIHNy Yy5lbmNvZGluZygpICYgMzEsIHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsKKysgIGFzX21mdnNyZChk ZXN0LCB0ZW1wKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDY0eDIo QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBj b21wYXJlSW50NjR4Mihjb25kLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25k LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhDb21wYXJlKCp0aGlzLCBjb25kLCBs aHMsIHJocywgZGVzdCwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBlcXVkKSwKKysgICAgICAgICAg ICAgICAgIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3RzZCksIFZNWF9CSU5BUllfV1JBUFBFUih2 Y21wZ3R1ZCkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyeDQoRmxv YXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgbWluRmxvYXQzMng0 KGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1p bkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf eHZtaW5zcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1p bkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdp c3RlciB0ZW1wMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciB0ZW1wMikgeworKyAgLy8gV2FzbSBtaW4gd2l0aCBOYU4gcHJvcGFnYXRpb24uCisrICAv LyBEZXRlY3QgTmFOIGluIGVpdGhlciBvcGVyYW5kIChub3QgdmlhIGFkZCB3aGljaCBmYWxzZWx5 IGZsYWdzIGluZisoLWluZikpLgorKyAgLy8gQ29tcHV0ZSBtYXNrIGFuZCBhZGQgQkVGT1JFIG1p biAobWluIG1heSBjbG9iYmVyIGxocyB2aWEgZGVzdCBhbGlhc2luZykuCisrICBhc194dmNtcGVx c3AodGVtcDEsIGxocywgbGhzKTsKKysgIGFzX3h2Y21wZXFzcCh0ZW1wMiwgcmhzLCByaHMpOwor KyAgYXNfeHhsYW5kKHRlbXAxLCB0ZW1wMSwgdGVtcDIpOworKyAgYXNfeHZhZGRzcCh0ZW1wMiwg bGhzLCByaHMpOworKyAgYXNfeHZtaW5zcChkZXN0LCBsaHMsIHJocyk7CisrICBhc194eHNlbChk ZXN0LCB0ZW1wMiwgZGVzdCwgdGVtcDEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt aW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewor KyAgbWluRmxvYXQ2NHgyKGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgYXNfeHZtaW5kcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgeworKyAgLy8gTmFOIG1hc2sgYW5kIGFkZCBtdXN0 IGJlIGNvbXB1dGVkIEJFRk9SRSBtaW4gKHdoaWNoIG1heSBjbG9iYmVyIGxocyB2aWEKKysgIC8v IGRlc3QpLgorKyAgYXNfeHZjbXBlcWRwKHRlbXAxLCBsaHMsIGxocyk7CisrICBhc194dmNtcGVx ZHAodGVtcDIsIHJocywgcmhzKTsKKysgIGFzX3h4bGFuZCh0ZW1wMSwgdGVtcDEsIHRlbXAyKTsg IC8vIHRlbXAxID0gfjAgd2hlbiBib3RoIG5vbi1OYU4KKysgIGFzX3h2YWRkZHAodGVtcDIsIGxo cywgcmhzKTsgICAgIC8vIHRlbXAyID0gYWRkIChOYU4gc291cmNlKQorKyAgYXNfeHZtaW5kcChk ZXN0LCBsaHMsIHJocyk7ICAgICAgLy8gZGVzdCA9IG1pbiAobWF5IGNsb2JiZXIgbGhzKQorKyAg YXNfeHhzZWwoZGVzdCwgdGVtcDIsIGRlc3QsIHRlbXAxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxo c0Rlc3QpIHsKKysgIG1heEZsb2F0MzJ4NChsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2bWF4c3AoZGVzdCwgbGhzLCByaHMpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIHsKKysgIC8vIFdhc20gbWF4IHdp dGggTmFOIHByb3BhZ2F0aW9uLCB1c2luZyB0ZW1wIHJlZ2lzdGVycy4KKysgIGFzX3h2Y21wZXFz cCh0ZW1wMSwgbGhzLCBsaHMpOworKyAgYXNfeHZjbXBlcXNwKHRlbXAyLCByaHMsIHJocyk7Cisr ICBhc194eGxhbmQodGVtcDEsIHRlbXAxLCB0ZW1wMik7CisrICBhc194dmFkZHNwKHRlbXAyLCBs aHMsIHJocyk7CisrICBhc194dm1heHNwKGRlc3QsIGxocywgcmhzKTsKKysgIGFzX3h4c2VsKGRl c3QsIHRlbXAyLCBkZXN0LCB0ZW1wMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1h eEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Cisr ICBtYXhGbG9hdDY0eDIobGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7CisrICBhc194dm1heGRwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSB7CisrICBhc194dmNtcGVxZHAodGVtcDEsIGxocywg bGhzKTsKKysgIGFzX3h2Y21wZXFkcCh0ZW1wMiwgcmhzLCByaHMpOworKyAgYXNfeHhsYW5kKHRl bXAxLCB0ZW1wMSwgdGVtcDIpOworKyAgYXNfeHZhZGRkcCh0ZW1wMiwgbGhzLCByaHMpOworKyAg YXNfeHZtYXhkcChkZXN0LCBsaHMsIHJocyk7CisrICBhc194eHNlbChkZXN0LCB0ZW1wMiwgZGVz dCwgdGVtcDEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFRydW5jU2F0 RmxvYXQzMng0VG9JbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBhc194dmN2c3B1eHdzKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmV4dHJhY3RMYW5lSW50NjR4Mih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBk ZXN0KSB7CisrICBNT1pfQVNTRVJUKGxhbmUgPCAyKTsKKysgIGlmIChsYW5lID09IDEpIHsKKysg ICAgLy8gTGFuZSAxID0gQkUgZHdvcmQgMCA9IHJlZ2lzdGVyIGJpdHNbMDo2M10uCisrICAgIGFz X21mdnNyZChkZXN0LnJlZywgc3JjKTsKKysgIH0gZWxzZSB7CisrICAgIC8vIExhbmUgMCA9IEJF IGR3b3JkIDEuCisrICAgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgIGFzX21mdnNybGQoZGVz dC5yZWcsIHNyYyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKKysgICAgICBhc194eHBlcm1kaShzY3JhdGNoLCBzcmMsIHNyYywgMik7 CisrICAgICAgYXNfbWZ2c3JkKGRlc3QucmVnLCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlTGFuZUludDY0eDIodW5zaWduZWQgbGFu ZSwgUmVnaXN0ZXI2NCByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgTU9aX0FTU0VSVChsYW5lIDwgMik7Cisr ICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIC8vIDEgaW5zbiwgbm8gc2NyYXRjaCBWU1IuIFVJ TSBieXRlIG9mZnNldDogbGFuZSAwIOKGkiA4LCBsYW5lIDEg4oaSIDAuCisrICAgIGFzX3ZpbnNk KGxoc0Rlc3QsIHJocy5yZWcsICgxIC0gbGFuZSkgKiA4KTsKKysgICAgcmV0dXJuOworKyAgfQor KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX210dnNyZChzY3Jh dGNoLCByaHMucmVnKTsKKysgIGlmIChsYW5lID09IDApIHsKKysgICAgLy8gUmVwbGFjZSBkdzEg KExFIGxvdyA9IGxhbmUgMCkuIEtlZXAgZHcwIChsYW5lIDEpLgorKyAgICAvLyBkbT0wYjAwOiBb bGhzRGVzdC5kdzAsIHNjcmF0Y2guZHcwXQorKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNE ZXN0LCBzY3JhdGNoLCAwKTsKKysgIH0gZWxzZSB7CisrICAgIC8vIFJlcGxhY2UgZHcwIChMRSBo aWdoID0gbGFuZSAxKS4gS2VlcCBkdzEgKGxhbmUgMCkuCisrICAgIC8vIGRtPTBiMDE6IFtzY3Jh dGNoLmR3MCwgbGhzRGVzdC5kdzFdCisrICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gs IGxoc0Rlc3QsIDEpOworKyAgfQorK30KKysKKysvLyBTSU1EIDMtb3BlcmFuZCBhcml0aG1ldGlj ICh4ODZfc2hhcmVkLXN0eWxlIHNpZ25hdHVyZXMpLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFkZEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg YXNfeHZhZGRzcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFkZEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg YXNfeHZhZGRkcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFkZEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0 Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmFkZHVobSksIGxocywgcmhzLCBk ZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkSW50OHgxNihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9C SU5BUllfV1JBUFBFUih2YWRkdWJtKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpkaXZGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIGFzX3h2ZGl2c3AoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpleHRyYWN0TGFuZUludDE2eDgodWludDMyX3QgbGFuZSwgRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDgpOworKyAgaWYgKEhhc1BPV0VSOSgp KSB7CisrICAgIGFzX3ZleHRyYWN0dWgoU2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgMTQgLSAyICog bGFuZSk7CisrICAgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgIGFz X2V4dHNoKGRlc3QsIGRlc3QpOworKyAgICByZXR1cm47CisrICB9CisrICBFeHRyYWN0TGFuZVRv R1BSKCp0aGlzLCBsYW5lLCBzcmMsIGRlc3QsIDIsIDE2KTsKKysgIGFzX2V4dHNoKGRlc3QsIGRl c3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0TGFuZUludDMyeDQodWlu dDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDQp OworKyAgRXh0cmFjdExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0LCA0LCAzMik7Cisr ICAvLyBFeHRyYWN0TGFuZVRvR1BSIGxlYXZlcyB0aGUgYWRqYWNlbnQgbGFuZSBpbiB0aGUgaGln aCAzMiBiaXRzIGZvciB0aGUKKysgIC8vIHVuc2hpZnRlZCBsYW5lcyAoMCBhbmQgMik7IGNhbm9u aWNhbGl6ZSB0byBhIHNpZ24tZXh0ZW5kZWQgaTMyLCBhcyB0aGUKKysgIC8vIGk4eDE2L2kxNng4 IGV4dHJhY3RzIGRvIHdpdGggZXh0c2IvZXh0c2guIEEgY29uc3VtZXIgdGhhdCByZWFkcyB0aGUg ZnVsbAorKyAgLy8gNjQtYml0IHJlZ2lzdGVyIC0tIGUuZy4gdGhlIFBPV0VSOCBpMzIuY3R6IGVt dWxhdGlvbiwgd2hvc2UgNjQtYml0IG5lZy9hbmQuCisrICAvLyB3aXRoIGEgMzItYml0IGNudGx6 dyBvdGhlcndpc2UgbWlzLWhhbmRsZXMgYSB6ZXJvIGxvdyB3b3JkIG92ZXIgbm9uemVybworKyAg Ly8gaGlnaCBnYXJiYWdlIGFuZCByZXR1cm5zIC0xIC0tIHJlcXVpcmVzIHRoaXMuCisrICBhc19l eHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExh bmVJbnQ4eDE2KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNT RVJUKGxhbmUgPCAxNik7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgYXNfdmV4dHJhY3R1 YihTY3JhdGNoU2ltZDEyOFJlZywgc3JjLCAxNSAtIGxhbmUpOworKyAgICBhc19tZnZzcmQoZGVz dCwgU2NyYXRjaFNpbWQxMjhSZWcpOworKyAgICBhc19leHRzYihkZXN0LCBkZXN0KTsKKysgICAg cmV0dXJuOworKyAgfQorKyAgRXh0cmFjdExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0 LCAxLCA4KTsKKysgIGFzX2V4dHNiKGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjptYXhJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtYXhzaCksIGxocywg cmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4SW50MzJ4NChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMs IFZNWF9CSU5BUllfV1JBUFBFUih2bWF4c3cpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1h eHNiKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5J bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW5zYiksIGxocywgcmhzLCBkZXN0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllf V1JBUFBFUih2bXVsdXdtKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpuYXJyb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgLy8gT24gTEUsIFZNWCBwYWNrIHN3YXBzIG9wZXJhbmQgb3JkZXIgdnMgV2FzbSBj b252ZW50aW9uLgorKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZw a3Noc3MpLCByaHMsIGxocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNw bGF0WDIoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKEhhc1BP V0VSOSgpKSB7CisrICAgIGFzX210dnNyZGQoZGVzdCwgc3JjLnJlZywgc3JjLnJlZyk7CisrICB9 IGVsc2UgeworKyAgICBhc19tdHZzcmQoZGVzdCwgc3JjLnJlZyk7CisrICAgIGFzX3h4cGVybWRp KGRlc3QsIGRlc3QsIGRlc3QsIDApOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWJJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJ1d20pLCBsaHMsIHJocywg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN3aXp6bGVJbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFdhc20gaTh4MTYuc3dp enpsZTogcmVzdWx0W2ldID0gKHJoc1tpXSA8IDE2KSA/IGxoc1tyaHNbaV1dIDogMC4KKysgIC8v CisrICAvLyBTdHJhdGVneTogYnVpbGQgY3RybCBpbiBTY3JhdGNoU2ltZDEyOCAod2hpY2ggY2Fu J3QgYWxpYXMgaW5wdXRzCisrICAvLyBiZWNhdXNlIHYwIGlzIG5vbi1hbGxvY2F0YWJsZSkuIFVz ZSB2c3VidWJzKHNwbGF0KDE1KSwgcmhzKSB0bworKyAgLy8gcHJvZHVjZSBjdHJsID0gbWF4KDAs IDE1IC0gcmhzKTsgdGhlIHNhdHVyYXRpb24gY2xhbXBzIG91dC1vZi1yYW5nZQorKyAgLy8gaW5k aWNlcyB0byAwLCBhbmQgdGhvc2UgcG9zaXRpb25zIGdldCBtYXNrZWQgb2ZmIGJlbG93LgorKyAg Ly8KKysgIC8vIFRoZSBtYXNrIGlzIGNvbXB1dGVkIHZpYSB2Y21wZ3R1YihyaHMsIHNwbGF0KDE1 KSkgKyB4eGxub3Ig4oCUIDB4RkYKKysgIC8vIHdoZXJlIHJocyA8PSAxNS4gUmVmb3JtdWxhdGlu ZyAicmhzIDwgMTYiIGFzICIhKHJocyA+IDE1KSIgbGV0cyB1cworKyAgLy8gdXNlIHZzcGx0aXNi IHdpdGggYSA1LWJpdCBzaWduZWQgaW1tZWRpYXRlIChQNyssIDEgaW5zbiwgbm8gR1BSCisrICAv LyBzY3JhdGNoKSBmb3IgYm90aCBzcGxhdC1vZi0xNSBzaXRlcywgcmVwbGFjaW5nIHRoZSBwcmV2 aW91cworKyAgLy8gbW92ZVB0cigweDBGMEYwRjBGKS9tb3ZlUHRyKDB4MTAxMDEwMTApICsgc3Bs YXRYNCBkYW5jZS4KKysgIC8vCisrICAvLyBBbGlhc2luZzogZGVzdCBtYXkgZXF1YWwgbGhzICh3 YXNtIGJhc2VsaW5lIGNhbGxzIHN3aXp6bGVJbnQ4eDE2KAorKyAgLy8gcnNkLCBycywgcnNkKTsg SW9uJ3MgdXNlUmVnaXN0ZXJBdFN0YXJ0IHBlcm1pdHMgdGhlIHNhbWUpLiBXaGVuCisrICAvLyBk ZXN0ICE9IHJocywgY3RybCBjYW4gYmUgYnVpbHQgaW4gc2NyYXRjaCBhbmQgdGhlIG1hc2sgY29t cHV0ZWQKKysgIC8vIGFmdGVyIHRoZSBwZXJtdXRlIChyaHMgaXMgc3RpbGwgYWxpdmUpLiBXaGVu IGRlc3QgPT0gcmhzLCB0aGUKKysgIC8vIHBlcm11dGUgd291bGQgY2xvYmJlciByaHMgYmVmb3Jl IHdlIGNvdWxkIGNvbXB1dGUgdGhlIG1hc2ssIHNvIHRoZQorKyAgLy8gbWFzayBnb2VzIHRvIHRo ZSByZWQgem9uZSBmaXJzdC4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7 CisrICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgbCA9 IGxocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IHIgPSByaHMuZW5jb2RpbmcoKSAmIDMx OworKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzE7CisrCisrICBpZiAoZGVzdCAh PSByaHMpIHsKKysgICAgYXNfdnNwbHRpc2IocywgMTUpOworKyAgICBhc192c3VidWJzKHMsIHMs IHIpOyAgIC8vIHNjcmF0Y2ggPSBjdHJsCisrICAgIGFzX3ZwZXJtKGQsIGwsIGwsIHMpOyAgLy8g ZGVzdCA9IHZwZXJtKGxocywgbGhzLCBjdHJsKQorKyAgICBhc192c3BsdGlzYihzLCAxNSk7Cisr ICAgIGFzX3ZjbXBndHViKHMsIHIsIHMpOyAgICAgICAgICAgICAvLyBzY3JhdGNoID0gMHhGRiB3 aGVyZSByaHMgPiAxNQorKyAgICBhc194eGxhbmRjKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOyAgLy8g ZGVzdCAmPSB+c2NyYXRjaCAoPSBieXRlcy10by1rZWVwKQorKyAgICByZXR1cm47CisrICB9Cisr CisrICAvLyBkZXN0ID09IHJoczogdnBlcm0gY2xvYmJlcnMgcmhzLCBzbyBidWlsZCB0aGUgYnl0 ZXMtdG8temVybyBtYXNrIGZpcnN0CisrICAvLyBhbmQgc3Rhc2ggaXQuIFRoZSB4eGxhbmRjIGF0 IHRoZSBlbmQgY29uc3VtZXMgdGhlIHVuLWludmVydGVkIGZvcm0uCisrICBhc192c3BsdGlzYihz LCAxNSk7CisrICBhc192Y21wZ3R1YihzLCByLCBzKTsgIC8vIHNjcmF0Y2ggPSAweEZGIHdoZXJl IHJocyA+IDE1CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBzY3JhdGNoLCAwKTsKKysg IGFzX3ZzcGx0aXNiKHMsIDE1KTsKKysgIGFzX3ZzdWJ1YnMocywgcywgcik7ICAgLy8gc2NyYXRj aCA9IGN0cmwKKysgIGFzX3ZwZXJtKGQsIGwsIGwsIHMpOyAgLy8gZGVzdCA9IHZwZXJtKGxocywg bGhzLCBjdHJsKQorKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBzY3JhdGNoKTsK KysgIGFzX3h4bGFuZGMoZGVzdCwgZGVzdCwgc2NyYXRjaCk7ICAvLyBkZXN0ICY9IH5zY3JhdGNo ICg9IGJ5dGVzLXRvLWtlZXApCisrfQorKy8vIFNJTUQgMy1vcGVyYW5kIGFyaXRobWV0aWMgKGNv bnRpbnVlZCkuCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkSW50MzJ4NChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9C SU5BUllfV1JBUFBFUih2YWRkdXdtKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphZGRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGR1ZG0p LCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZFNhdElu dDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14 QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmFkZHNocyksIGxocywgcmhzLCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkU2F0SW50OHgxNihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZN WF9CSU5BUllfV1JBUFBFUih2YWRkc2JzKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpkaXZGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIGFzX3h2ZGl2ZHAoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW5z aCksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluSW50 MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWluc3cpLCBsaHMsIHJocywgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHZtdWxzcChkZXN0LCBsaHMsIHJocyk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHZtdWxkcChkZXN0LCBsaHMsIHJocyk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMp OworKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOworKyAgRW1pdFZteFRlcm5hcnkoCisr ICAgICAgKnRoaXMsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50OF90IHZyYykgeworKyAgICAgICAgYS5hc192bWxhZGR1 aG0odnJ0LCB2cmEsIHZyYiwgdnJjKTsKKysgICAgICB9LAorKyAgICAgIGxocywgcmhzLCBzY3Jh dGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmFycm93SW50MzJ4NChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnko KnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2cGtzd3NzKSwgcmhzLCBsaHMsIGRlc3QpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2c3Vic3AoZGVzdCwgbGhzLCByaHMpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2c3ViZHAoZGVzdCwgbGhzLCByaHMpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQ UEVSKHZzdWJ1aG0pLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnN1YkludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBF bWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnN1YnVkbSksIGxocywgcmhz LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViSW50OHgxNihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZN WF9CSU5BUllfV1JBUFBFUih2c3VidWJtKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpzdWJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVS KHZzdWJzaHMpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnN1YlNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnN1YnNicyksIGxocywg cmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5Eb3RJbnQxNng4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBpMzJ4NC5k b3RfaTE2eDhfczogcmVzdWx0W2tdID0gbGhzWzJrXSpyaHNbMmtdICsgbGhzWzJrKzFdKnJoc1sy aysxXS4KKysgIC8vIHZtc3Vtc2htIGNvbXB1dGVzIGV4YWN0bHkgdGhhdCBmb3IgZWFjaCBpMzIg bGFuZSBwbHVzIGFuIGFkZGVuZCAoVlJDKS4KKysgIC8vIFdpdGggVlJDID0gMCwgdGhlIGFkZGVu ZCBkaXNhcHBlYXJzIGFuZCB3ZSBnZXQgdGhlIHdhc20gc3BlYyByZXN1bHQgaW4KKysgIC8vIGEg c2luZ2xlIGluc3RydWN0aW9uLiB4eGx4b3IgemVyb3MgdGhlIHNjcmF0Y2ggaW4gMSBpbnNuLCBz byB0b3RhbCBpcworKyAgLy8gMiBpbnNucyB2cyB0aGUgb2xkIHZtdWxlc2gvdm11bG9zaC92YWRk dXdtIHRyaW8uCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgYXNf eHhseG9yKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gpOworKyAgYXNfdm1zdW1zaG0oZGVzdC5l bmNvZGluZygpICYgMzEsIGxocy5lbmNvZGluZygpICYgMzEsIHJocy5lbmNvZGluZygpICYgMzEs CisrICAgICAgICAgICAgICBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworKy8vIFNJ TUQgdmFyaWFibGUtc2hpZnQgYW5kIEZNQSBoZWxwZXJzLgorKy8vIFBhdHRlcm46IHNwbGF0IHRo ZSBHUFIgc2hpZnQgY291bnQgYWNyb3NzIGFsbCBsYW5lcyBvZiBhIHNjcmF0Y2ggVlNSLAorKy8v IHRoZW4gaXNzdWUgYSB2ZWN0b3Itc2hpZnQgb24gbGhzIGFuZCB0aGUgc3BsYXQuIHZzbHtiLGh9 IC8gdnNye2IsaH0gLworKy8vIHZzcmF7YixofSB1c2UgdGhlIGxvdyAzLW9yLTQgYml0cyBvZiBl YWNoIGxhbmUncyBzaGlmdCBjb3VudCwgZXhhY3RseQorKy8vIG1hdGNoaW5nIHdhc20gbW9kdWxv LU4gc2hpZnQgc2VtYW50aWNzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdElu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDE2KHJocywgc2NyYXRjaCk7Cisr ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNsYiksIGxocywgc2Ny YXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgc3BsYXRYMTYocmhzLCBzY3JhdGNoKTsKKysg IEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhYiksIGxocywgc2Ny YXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRT aGlmdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDE2KHJo cywgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIo dnNyYiksIGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmxlZnRTaGlmdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDgocmhzLCBz Y3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xo KSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmln aHRTaGlmdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFg4KHJocywgc2Ny YXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYWgp LCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNp Z25lZFJpZ2h0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBz cGxhdFg4KHJocywgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZ X1dSQVBQRVIodnNyaCksIGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmxlZnRTaGlmdEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0 WDQocmhzLCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2c2x3KSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bGVmdFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgc3BsYXRYNChy aHMsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVS KHZzbGQpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpyaWdodFNoaWZ0SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDQocmhz LCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2 c3JhdyksIGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnJpZ2h0U2hpZnRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgc3BsYXRYNChyaHMs IHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZz cmFkKSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 dW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwor KyAgc3BsYXRYNChyaHMsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZzcncpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2Ny YXRjaCgqdGhpcyk7CisrICBzcGxhdFg0KHJocywgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5 KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyZCksIGxocywgc2NyYXRjaCwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZtYUZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNy YzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7CisrICBhc194dm1hZGRhc3Aoc3JjRGVzdCwgc3Jj MSwgc3JjMik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZtYUZsb2F0NjR4MihGbG9h dFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7CisrICBhc194dm1hZGRhZHAo c3JjRGVzdCwgc3JjMSwgc3JjMik7CisrfQorKworKy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVy X3N0eWxlCisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcworKwor KyNlbmRpZiAvKiBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBjNjRfaW5sX2ggKi8KK2RpZmYg LS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCBiL2pzL3Ny Yy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0 NAoraW5kZXggMDAwMDAwMDAwMDAwLi43MDJmYjNjZDRjYmEKKy0tLSAvZGV2L251bGwKKysrKyBi L2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwCitAQCAtMCwwICsxLDM0 NjcgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6 IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBz dz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0 ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29w eSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91 IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysj aW5jbHVkZSAiaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgiCisrCisrI2luY2x1ZGUg ImppdC9CYWlsb3V0cy5oIgorKyNpbmNsdWRlICJqaXQvQmFzZWxpbmVGcmFtZS5oIgorKyNpbmNs dWRlICJqaXQvRmx1c2hJQ2FjaGUuaCIKKysjaW5jbHVkZSAiaml0L0ppdEZyYW1lcy5oIgorKyNp bmNsdWRlICJqaXQvSml0UnVudGltZS5oIgorKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXIu aCIKKysjaW5jbHVkZSAiaml0L01vdmVFbWl0dGVyLmgiCisrI2luY2x1ZGUgImppdC9wcGM2NC9T aGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oIgorKyNpbmNsdWRlICJ2bS9KaXRBY3RpdmF0aW9uLmgi CisrI2luY2x1ZGUgInZtL0pTQ29udGV4dC5oIgorKyNpbmNsdWRlICJ3YXNtL1dhc21TdHVicy5o IgorKworKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgiCisrCisrbmFtZXNwYWNl IGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKytNYWNyb0Fzc2VtYmxlciYgTWFjcm9Bc3NlbWJs ZXJQUEM2NDo6YXNNYXNtKCkgeworKyAgcmV0dXJuICpzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl cio+KHRoaXMpOworK30KKysKKytjb25zdCBNYWNyb0Fzc2VtYmxlciYgTWFjcm9Bc3NlbWJsZXJQ UEM2NDo6YXNNYXNtKCkgY29uc3QgeworKyAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBNYWNy b0Fzc2VtYmxlcio+KHRoaXMpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBPdXQtb2YtbGluZSBm YWtlIGV4aXQgZnJhbWUKKysKKytib29sIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmJ1aWxk T09MRmFrZUV4aXRGcmFtZSh2b2lkKiBmYWtlUmV0dXJuQWRkcikgeworKyAgYXNNYXNtKCkuUHVz aChGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBlOjpJb25KUykpOworKyAgYXNNYXNtKCkuUHVzaChJ bW1QdHIoZmFrZVJldHVybkFkZHIpKTsKKysgIGFzTWFzbSgpLlB1c2goRnJhbWVQb2ludGVyKTsK KysgIHJldHVybiB0cnVlOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBMb2FkIGludDMyIG9yIGRv dWJsZSBmcm9tIG1lbW9yeQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bG9h ZEludDMyT3JEb3VibGUoY29uc3QgQWRkcmVzcyYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTGFiZWwgZW5kOworKworKyAgLy8gTG9hZCB0aGUgYm94 ZWQgdmFsdWUgYW5kIHN0YXNoIGluIHRoZSBGUFIgaW1tZWRpYXRlbHksIHRoZW4gcmV1c2UgdGhl CisrICAvLyBHUFIgZm9yIHRoZSB0YWcgdGVzdC4gIE9ubHkgb25lIHNjcmF0Y2ggR1BSIGlzIGhl bGQgaGVyZSBzbyB0aGF0CisrICAvLyBicmFuY2hUZXN0SW50MzIgY2FuIGFjcXVpcmUgdGhlIHNl Y29uZCBvbmUgZm9yIHRoZSBJbW1UYWcgY29uc3RhbnQuCisrICBsb2FkUHRyKEFkZHJlc3Moc3Jj LmJhc2UsIHNyYy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgIGFzX210dnNyZChkZXN0LCBzY3JhdGNo KTsKKysgIHhfc3JkaShzY3JhdGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOworKyAgYXNN YXNtKCkuYnJhbmNoVGVzdEludDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gsICZlbmQp OworKyAgLy8gSXQgd2FzIGFuIGludDMyLiAgUmVjb3ZlciB0aGUgYm94ZWQgdmFsdWUgZnJvbSB0 aGUgRlBSLCBzaWduLWV4dGVuZAorKyAgLy8gdGhlIGxvdyAzMiBiaXRzLCBhbmQgY29udmVydCB0 byBkb3VibGUuCisrICBhc19tZnZzcmQoc2NyYXRjaCwgZGVzdCk7CisrICBhc19leHRzdyhzY3Jh dGNoLCBzY3JhdGNoKTsKKysgIGFzX210dnNyZChkZXN0LCBzY3JhdGNoKTsKKysgIGFzX2ZjZmlk KGRlc3QsIGRlc3QpOworKworKyAgYmluZCgmZW5kKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt YmxlclBQQzY0Q29tcGF0Ojpsb2FkSW50MzJPckRvdWJsZShjb25zdCBCYXNlSW5kZXgmIGFkZHIs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBMYWJlbCBlbmQ7 CisrCisrICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyLCBzY3JhdGNoKTsKKysgIGxvYWRQdHIo QWRkcmVzcyhzY3JhdGNoLCBhZGRyLm9mZnNldCksIHNjcmF0Y2gpOworKyAgYXNfbXR2c3JkKGRl c3QsIHNjcmF0Y2gpOworKyAgeF9zcmRpKHNjcmF0Y2gsIHNjcmF0Y2gsIEpTVkFMX1RBR19TSElG VCk7CisrICBhc01hc20oKS5icmFuY2hUZXN0SW50MzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny YXRjaCwgJmVuZCk7CisrICBhc19tZnZzcmQoc2NyYXRjaCwgZGVzdCk7CisrICBhc19leHRzdyhz Y3JhdGNoLCBzY3JhdGNoKTsKKysgIGFzX210dnNyZChkZXN0LCBzY3JhdGNoKTsKKysgIGFzX2Zj ZmlkKGRlc3QsIGRlc3QpOworKworKyAgYmluZCgmZW5kKTsKKyt9CisrCisrLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr Ly8gQ29udmVyc2lvbiBmdW5jdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21w YXQ6OmNvbnZlcnRVSW50MzJUb0RvdWJsZShSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICAvLyBtdHZzcnd6OiBWU1JbZGVzdF0uZHcwID0gemVyb19leHRfNjQoc3JjWzMyOjYz XSk7IFA4KyAoSVNBIDIuMDcpLgorKyAgLy8gUmVwbGFjZXMgcmxkaWNsICsgbXR2c3JkICgyIGlu c25zICsgc2NyYXRjaCkgd2l0aCAxIGluc24uCisrICBhc19tdHZzcnd6KGRlc3QsIHNyYyk7Cisr ICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0 Q29tcGF0Ojpjb252ZXJ0VUludDMyVG9GbG9hdDMyKFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICAvLyBtdHZzcnd6ICsgZmNmaWRzOyBzYW1lIHJlY2lwZSBhcyBjb252ZXJ0 VUludDMyVG9Eb3VibGUuCisrICBhc19tdHZzcnd6KGRlc3QsIHNyYyk7CisrICBhc19mY2ZpZHMo ZGVzdCwgZGVzdCk7CisrfQorKworKy8vIEhlbHBlciBmb3IgdGhlIG5lZ2F0aXZlLXplcm8gY2hl Y2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJvdW5kLXRyaXAuCisrLy8gUHJlY29uZGl0aW9uOiBgZGVz dGAgaG9sZHMgdGhlIGludGVnZXIgcm91bmQtdHJpcCByZXN1bHQ7IGlmIGl0IGVxdWFscworKy8v IHplcm8sIHRoZW4gYHNyY2Agd2FzIGVpdGhlciArMC4wIG9yIC0wLjAgKHRob3NlIGFyZSB0aGUg b25seSBkb3VibGVzCisrLy8gdGhhdCByb3VuZC10cmlwIHRvIGludCAwKS4gRGlzdGluZ3Vpc2gg dGhlbSBieSBpbnNwZWN0aW5nIHNyYydzIHNpZ24KKysvLyBiaXQ6IC0wLjAgaGFzIGl0cyBNU0Ig c2V0LCBzbyBhbiBtZnZzcmQtdGhlbi1zaWduZWQtY21wLWFnYWluc3QtemVybworKy8vIGJyYW5j aGVzIHRvIGBmYWlsYCBvbmx5IGZvciAtMC4wLiBOb24temVybyBgZGVzdGAgdmFsdWVzIChpbmNs dWRpbmcKKysvLyBldmVyeSBuZWdhdGl2ZSBpbnRlZ2VyKSBza2lwIHRoZSBjaGVjayBlbnRpcmVs eS4KKytzdGF0aWMgdm9pZCBFbWl0TmVnYXRpdmVaZXJvQ2hlY2soTWFjcm9Bc3NlbWJsZXJQUEM2 NENvbXBhdCYgbWFzbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBmYWlsKSB7CisrICBMYWJlbCBub3RaZXJvOworKyAgbWFzbS5hc19jbXBk aShkZXN0LCAwKTsKKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmbm90WmVybyk7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmFzX21mdnNyZChzY3JhdGNoLCBzcmMp OworKyAgbWFzbS5hc19jbXBkaShzY3JhdGNoLCAwKTsKKysgIG1hc20ubWFfYihBc3NlbWJsZXI6 Okxlc3NUaGFuLCBmYWlsKTsKKysgIG1hc20uYmluZCgmbm90WmVybyk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6Y29udmVydERvdWJsZVRvSW50MzIoRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkZXN0LCBMYWJlbCogZmFpbCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmVaZXJvQ2hlY2sp IHsKKysgIC8vIFRydW5jYXRlIHRvIGludDMyIChyb3VuZCB0b3dhcmQgemVybyksIHNpZ24tZXh0 ZW5kLCBhbmQgdmVyaWZ5CisrICAvLyBleGFjdG5lc3MgdmlhIHJvdW5kLXRyaXAgY29tcGFyZS4g ZmN0aXd6IHdyaXRlcyB0aGUgaW50MzIgdG8gQkUKKysgIC8vIGJpdHMgMzIuLjYzIG9mIHRoZSBG UFI7IG1mdnNyZCBleHRyYWN0cyBhbmQgZXh0c3cgc2lnbi1leHRlbmRzLgorKyAgLy8gVGhlIGNv bXBhcmUgYWxzbyBjYXRjaGVzIE5hTiAodW5vcmRlcmVkKSBhbmQgSW5mIChzYXR1cmF0ZWQgdG8K KysgIC8vIElOVDMyX3tNSU4sTUFYfSwgd29uJ3Qgcm91bmQtdHJpcCBlcXVhbCkuCisrICBhc19m Y3Rpd3ooU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKKysgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNo RG91YmxlUmVnKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgYXNfbXR2c3JkKFNjcmF0 Y2hEb3VibGVSZWcsIGRlc3QpOworKyAgYXNfZmNmaWQoU2NyYXRjaERvdWJsZVJlZywgU2NyYXRj aERvdWJsZVJlZyk7CisrICBhc19mY21wdShTY3JhdGNoRG91YmxlUmVnLCBzcmMpOworKyAgbWFf YihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZhaWwpOworKworKyAgaWYg KG5lZ2F0aXZlWmVyb0NoZWNrKSB7CisrICAgIEVtaXROZWdhdGl2ZVplcm9DaGVjaygqdGhpcywg c3JjLCBkZXN0LCBmYWlsKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0 Q29tcGF0Ojpjb252ZXJ0RG91YmxlVG9QdHIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwg TGFiZWwqIGZhaWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVjaykgeworKyAgLy8gU2FtZSBwYXR0ZXJuIGFz IGNvbnZlcnREb3VibGVUb0ludDMyIGJ1dCB0byBpbnQ2NCAobm8gc2lnbi1leHRlbmQKKysgIC8v IG5lZWRlZCBzaW5jZSBmY3RpZHogYWxyZWFkeSBwcm9kdWNlcyBhIDY0LWJpdCByZXN1bHQpLgor KyAgYXNfZmN0aWR6KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7CisrICBhc19tZnZzcmQoZGVzdCwg U2NyYXRjaERvdWJsZVJlZyk7CisrICBhc19tdHZzcmQoU2NyYXRjaERvdWJsZVJlZywgZGVzdCk7 CisrICBhc19mY2ZpZChTY3JhdGNoRG91YmxlUmVnLCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIGFz X2ZjbXB1KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7CisrICBtYV9iKEFzc2VtYmxlcjo6RG91Ymxl Tm90RXF1YWxPclVub3JkZXJlZCwgZmFpbCk7CisrCisrICBpZiAobmVnYXRpdmVaZXJvQ2hlY2sp IHsKKysgICAgRW1pdE5lZ2F0aXZlWmVyb0NoZWNrKCp0aGlzLCBzcmMsIGRlc3QsIGZhaWwpOwor KyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmNvbnZlcnRGbG9h dDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgbmVnYXRpdmVaZXJvQ2hlY2spIHsKKysgIC8vIFNhbWUgYXMgY29udmVydERvdWJsZVRvSW50 MzIgYnV0IHRoZSByb3VuZC10cmlwIHVzZXMgZmNmaWRzIHNvIHRoZQorKyAgLy8gY29tcGFyaXNv biBoYXBwZW5zIGF0IHNpbmdsZSBwcmVjaXNpb24gKG1hdGNoZXMgc3JjJ3MgYWN0dWFsIHdpZHRo KS4KKysgIGFzX2ZjdGl3eihTY3JhdGNoRG91YmxlUmVnLCBzcmMpOworKyAgYXNfbWZ2c3JkKGRl c3QsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICBhc19t dHZzcmQoU2NyYXRjaERvdWJsZVJlZywgZGVzdCk7CisrICBhc19mY2ZpZHMoU2NyYXRjaERvdWJs ZVJlZywgU2NyYXRjaERvdWJsZVJlZyk7CisrICBhc19mY21wdShTY3JhdGNoRG91YmxlUmVnLCBz cmMpOworKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZhaWwp OworKworKyAgaWYgKG5lZ2F0aXZlWmVyb0NoZWNrKSB7CisrICAgIEVtaXROZWdhdGl2ZVplcm9D aGVjaygqdGhpcywgc3JjLCBkZXN0LCBmYWlsKTsKKysgIH0KKyt9CisrCisrQ29kZU9mZnNldCBN YWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp0b2dnbGVkQ2FsbChKaXRDb2RlKiB0YXJnZXQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVu YWJsZWQpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAvLyBzdGFuemEoOCkgKyBt dGN0ci9iY3RybCgyKSA9IDEwIGluc3RydWN0aW9ucy4KKysgIG1fYnVmZmVyLmVudGVyTm9Qb29s KGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyk7CisrICBCdWZmZXJPZmZzZXQgYm9Mb2FkID0K KysgICAgICBlbWl0TG9hZDY0U3RhbnphKHNjcmF0Y2gsICh1aW50NjRfdCl1aW50cHRyX3QodGFy Z2V0LT5yYXcoKSkpOworKyAgQ29kZU9mZnNldCBvZmZzZXQoYm9Mb2FkLmdldE9mZnNldCgpKTsK KysgIGFkZFBlbmRpbmdKdW1wKGJvTG9hZCwgSW1tUHRyKHRhcmdldC0+cmF3KCkpLCBSZWxvY2F0 aW9uS2luZDo6SklUQ09ERSk7CisrICBpZiAoZW5hYmxlZCkgeworKyAgICB4c19tdGN0cihzY3Jh dGNoKTsKKysgICAgYXNfYmN0cihMaW5rQml0OjpMaW5rQik7CisrICB9IGVsc2UgeworKyAgICB3 cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIH0KKysgIG1f YnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICBNT1pfQVNTRVJUX0lGKCFvb20oKSwgbmV4dE9mZnNl dCgpLmdldE9mZnNldCgpIC0gb2Zmc2V0Lm9mZnNldCgpID09CisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRvZ2dsZWRDYWxsU2l6ZShudWxscHRyKSk7CisrICByZXR1cm4gb2Zmc2V0Owor K30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysvLyBFeGNlcHRpb24gaGFuZGxpbmcKKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyUFBDNjRDb21wYXQ6OmhhbmRsZUZhaWx1cmVXaXRoSGFuZGxlclRhaWwoCisrICAg IExhYmVsKiBwcm9maWxlckV4aXRUYWlsLCBMYWJlbCogYmFpbG91dFRhaWwsCisrICAgIHVpbnQz Ml90KiByZXR1cm5WYWx1ZUNoZWNrT2Zmc2V0KSB7CisrICAvLyBSb3VuZCBzaXplb2YoUmVzdW1l RnJvbUV4Y2VwdGlvbikgdXAgdG8gQUJJU3RhY2tBbGlnbm1lbnQuIFRoZQorKyAgLy8gY2Fub25p Y2FsIChzeiArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSkgZm9ybSBpcyBleGFjdDogd2hlbiBz egorKyAgLy8gaXMgYWxyZWFkeSBhIG11bHRpcGxlIG9mIGBhbGlnbmAgdGhlIHJvdW5kaW5nIGlz IGEgbm8tb3AuIFRoZQorKyAgLy8gcHJldmlvdXMgKHN6ICsgYWxpZ24pICYgfihhbGlnbiAtIDEp IG92ZXItYWxsb2NhdGVkIGJ5IGBhbGlnbmAKKysgIC8vIGJ5dGVzIHdoZW5ldmVyIHN6IHdhcyBh bHJlYWR5IGFsaWduZWQuCisrICBpbnQgc2l6ZSA9IChzaXplb2YoUmVzdW1lRnJvbUV4Y2VwdGlv bikgKyBBQklTdGFja0FsaWdubWVudCAtIDEpICYKKysgICAgICAgICAgICAgfihBQklTdGFja0Fs aWdubWVudCAtIDEpOworKyAgYXNNYXNtKCkuc3ViUHRyKEltbTMyKHNpemUpLCBTdGFja1BvaW50 ZXIpOworKyAgLy8gVXNlIHIzIChmaXJzdCBhcmd1bWVudCByZWdpc3RlcikuCisrICBtb3YoU3Rh Y2tQb2ludGVyLCByMyk7CisrCisrICB1c2luZyBGbiA9IHZvaWQgKCopKFJlc3VtZUZyb21FeGNl cHRpb24qIHJmZSk7CisrICBhc01hc20oKS5zZXR1cFVuYWxpZ25lZEFCSUNhbGwocjQpOworKyAg YXNNYXNtKCkucGFzc0FCSUFyZyhyMyk7CisrICBhc01hc20oKS5jYWxsV2l0aEFCSTxGbiwgSGFu ZGxlRXhjZXB0aW9uPigKKysgICAgICBBQklUeXBlOjpHZW5lcmFsLCBDaGVja1Vuc2FmZUNhbGxX aXRoQUJJOjpEb250Q2hlY2tIYXNFeGl0RnJhbWUpOworKworKyAgKnJldHVyblZhbHVlQ2hlY2tP ZmZzZXQgPSBhc01hc20oKS5jdXJyZW50T2Zmc2V0KCk7CisrCisrICBMYWJlbCBlbnRyeUZyYW1l OworKyAgTGFiZWwgY2F0Y2hfOworKyAgTGFiZWwgZmluYWxseTsKKysgIExhYmVsIHJldHVybkJh c2VsaW5lOworKyAgTGFiZWwgcmV0dXJuSW9uOworKyAgTGFiZWwgYmFpbG91dDsKKysgIExhYmVs IHdhc21JbnRlcnBFbnRyeTsKKysgIExhYmVsIHdhc21DYXRjaDsKKysKKysgIGxvYWQzMihBZGRy ZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZLaW5kKCkpLCBy Myk7CisrICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywKKysgICAgICAg ICAgICAgICAgICAgIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkVudHJ5RnJhbWUpLCAmZW50 cnlGcmFtZSk7CisrICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywgSW1t MzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6Q2F0Y2gpLAorKyAgICAgICAgICAgICAgICAgICAgJmNh dGNoXyk7CisrICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywgSW1tMzIo RXhjZXB0aW9uUmVzdW1lS2luZDo6RmluYWxseSksCisrICAgICAgICAgICAgICAgICAgICAmZmlu YWxseSk7CisrICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywKKysgICAg ICAgICAgICAgICAgICAgIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkZvcmNlZFJldHVybkJh c2VsaW5lKSwKKysgICAgICAgICAgICAgICAgICAgICZyZXR1cm5CYXNlbGluZSk7CisrICBhc01h c20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywKKysgICAgICAgICAgICAgICAgICAg IEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkZvcmNlZFJldHVybklvbiksICZyZXR1cm5Jb24p OworKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2Vw dGlvblJlc3VtZUtpbmQ6OkJhaWxvdXQpLAorKyAgICAgICAgICAgICAgICAgICAgJmJhaWxvdXQp OworKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsCisrICAgICAgICAg ICAgICAgICAgICBJbW0zMihFeGNlcHRpb25SZXN1bWVLaW5kOjpXYXNtSW50ZXJwRW50cnkpLAor KyAgICAgICAgICAgICAgICAgICAgJndhc21JbnRlcnBFbnRyeSk7CisrICBhc01hc20oKS5icmFu Y2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywgSW1tMzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6V2Fz bUNhdGNoKSwKKysgICAgICAgICAgICAgICAgICAgICZ3YXNtQ2F0Y2gpOworKworKyAgYnJlYWtw b2ludCgpOyAgLy8gSW52YWxpZCBraW5kLgorKworKyAgLy8gTm8gZXhjZXB0aW9uIGhhbmRsZXIu IFJldHVybiBlcnJvciBmcm9tIGVudHJ5IGZyYW1lLgorKyAgYmluZCgmZW50cnlGcmFtZSk7Cisr ICBhc01hc20oKS5tb3ZlVmFsdWUoTWFnaWNWYWx1ZShKU19JT05fRVJST1IpLCBKU1JldHVybk9w ZXJhbmQpOworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2Vw dGlvbjo6b2Zmc2V0T2ZGcmFtZVBvaW50ZXIoKSksCisrICAgICAgICAgIEZyYW1lUG9pbnRlcik7 CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpv ZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwKKysgICAgICAgICAgU3RhY2tQb2ludGVyKTsKKysgIHJl dCgpOworKworKyAgLy8gQ2F0Y2ggaGFuZGxlci4KKysgIGJpbmQoJmNhdGNoXyk7CisrICBsb2Fk UHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlRh cmdldCgpKSwgcjMpOworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJv bUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFtZVBvaW50ZXIoKSksCisrICAgICAgICAgIEZyYW1lUG9p bnRlcik7CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0 aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwKKysgICAgICAgICAgU3RhY2tQb2ludGVyKTsK KysgIGp1bXAocjMpOworKworKyAgLy8gRmluYWxseSBibG9jay4KKysgIGJpbmQoJmZpbmFsbHkp OworKyAgVmFsdWVPcGVyYW5kIGV4Y2VwdGlvbiA9IFZhbHVlT3BlcmFuZChyNCk7CisrICBsb2Fk VmFsdWUoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9m RXhjZXB0aW9uKCkpLAorKyAgICAgICAgICAgIGV4Y2VwdGlvbik7CisrCisrICBWYWx1ZU9wZXJh bmQgZXhjZXB0aW9uU3RhY2sgPSBWYWx1ZU9wZXJhbmQocjUpOworKyAgbG9hZFZhbHVlKAorKyAg ICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkV4 Y2VwdGlvblN0YWNrKCkpLAorKyAgICAgIGV4Y2VwdGlvblN0YWNrKTsKKysKKysgIGxvYWRQdHIo QWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mVGFyZ2V0 KCkpLCByMyk7CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhj ZXB0aW9uOjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKKysgICAgICAgICAgRnJhbWVQb2ludGVy KTsKKysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246 Om9mZnNldE9mU3RhY2tQb2ludGVyKCkpLAorKyAgICAgICAgICBTdGFja1BvaW50ZXIpOworKwor KyAgcHVzaFZhbHVlKGV4Y2VwdGlvbik7CisrICBwdXNoVmFsdWUoZXhjZXB0aW9uU3RhY2spOwor KyAgcHVzaFZhbHVlKEJvb2xlYW5WYWx1ZSh0cnVlKSk7CisrICBqdW1wKHIzKTsKKysKKysgIC8v IEZvcmNlZCByZXR1cm4gZnJvbSBiYXNlbGluZS4KKysgIExhYmVsIHByb2ZpbGluZ0luc3RydW1l bnRhdGlvbjsKKysgIGJpbmQoJnJldHVybkJhc2VsaW5lKTsKKysgIGxvYWRQdHIoQWRkcmVzcyhT dGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkp LAorKyAgICAgICAgICBGcmFtZVBvaW50ZXIpOworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9p bnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCisrICAg ICAgICAgIFN0YWNrUG9pbnRlcik7CisrICBsb2FkVmFsdWUoQWRkcmVzcyhGcmFtZVBvaW50ZXIs IEJhc2VsaW5lRnJhbWU6OnJldmVyc2VPZmZzZXRPZlJldHVyblZhbHVlKCkpLAorKyAgICAgICAg ICAgIEpTUmV0dXJuT3BlcmFuZCk7CisrICBqdW1wKCZwcm9maWxpbmdJbnN0cnVtZW50YXRpb24p OworKworKyAgLy8gRm9yY2VkIHJldHVybiBmcm9tIElvbi4KKysgIGJpbmQoJnJldHVybklvbik7 CisrICBsb2FkVmFsdWUoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246 Om9mZnNldE9mRXhjZXB0aW9uKCkpLAorKyAgICAgICAgICAgIEpTUmV0dXJuT3BlcmFuZCk7Cisr ICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZz ZXRPZkZyYW1lUG9pbnRlcigpKSwKKysgICAgICAgICAgRnJhbWVQb2ludGVyKTsKKysgIGxvYWRQ dHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mU3Rh Y2tQb2ludGVyKCkpLAorKyAgICAgICAgICBTdGFja1BvaW50ZXIpOworKworKyAgYmluZCgmcHJv ZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKKysgIHsKKysgICAgTGFiZWwgc2tpcFByb2ZpbGluZ0lu c3RydW1lbnRhdGlvbjsKKysgICAgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3NPZkVuYWJsZWQoCisr ICAgICAgICBhc01hc20oKS5ydW50aW1lKCktPmdlY2tvUHJvZmlsZXIoKS5hZGRyZXNzT2ZFbmFi bGVkKCkpOworKyAgICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBhZGRyZXNz T2ZFbmFibGVkLCBJbW0zMigwKSwKKysgICAgICAgICAgICAgICAgICAgICAgJnNraXBQcm9maWxp bmdJbnN0cnVtZW50YXRpb24pOworKyAgICBqdW1wKHByb2ZpbGVyRXhpdFRhaWwpOworKyAgICBi aW5kKCZza2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKKysgIH0KKysKKysgIHhzX21yKFN0 YWNrUG9pbnRlciwgRnJhbWVQb2ludGVyKTsKKysgIC8vIFBvcCBGUCBmcm9tIHN0YWNrLCB0aGVu IHJldHVybiAocG9wIExSICsgYmxyKS4KKysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIs IDApLCBGcmFtZVBvaW50ZXIpOworKyAgYXNNYXNtKCkuYWRkUHRyKEltbTMyKHNpemVvZih2b2lk KikpLCBTdGFja1BvaW50ZXIpOworKyAgcmV0KCk7CisrCisrICAvLyBCYWlsb3V0LgorKyAgYmlu ZCgmYmFpbG91dCk7CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9t RXhjZXB0aW9uOjpvZmZzZXRPZkJhaWxvdXRJbmZvKCkpLAorKyAgICAgICAgICByNSk7CisrICBs b2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRP ZlN0YWNrUG9pbnRlcigpKSwKKysgICAgICAgICAgU3RhY2tQb2ludGVyKTsKKysgIHhzX2xpKFJl dHVyblJlZywgMSk7CisrICBqdW1wKGJhaWxvdXRUYWlsKTsKKysKKysgIC8vIFdhc20gaW50ZXJw IGVudHJ5LgorKyAgYmluZCgmd2FzbUludGVycEVudHJ5KTsKKysgIGxvYWRQdHIoQWRkcmVzcyhT dGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkp LAorKyAgICAgICAgICBGcmFtZVBvaW50ZXIpOworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9p bnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCisrICAg ICAgICAgIFN0YWNrUG9pbnRlcik7CisrICBtb3ZlUHRyKEltbVdvcmQod2FzbTo6SW50ZXJwRmFp bEluc3RhbmNlUmVnKSwgSW5zdGFuY2VSZWcpOworKyAgcmV0KCk7CisrCisrICAvLyBXYXNtIGNh dGNoLgorKyAgYmluZCgmd2FzbUNhdGNoKTsKKysgIHdhc206OkdlbmVyYXRlSnVtcFRvQ2F0Y2hI YW5kbGVyKGFzTWFzbSgpLCBTdGFja1BvaW50ZXIsIHI0LCByNSwgcjYpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpjbGFtcERvdWJsZVRvVWludDgoRmxvYXRSZWdpc3RlciBpbnB1dCwg UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFz bSgpKTsKKysKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAvLyBQOSB4c21heGpkcCB1c2Vz IEphdmEvSlMgc2VtYW50aWNzIChJU0EgdjMuMEIpOiBhbnkgTmFOCisrICAgIC8vIGlzIHRyZWF0 ZWQgYXMgImxlc3MgdGhhbiBhbnkgbnVtYmVyIHRoYXQgaXMgbm90IGEgTmFOIiwgc28KKysgICAg Ly8geHNtYXhqZHAoaW5wdXQsIDApIGNvbGxhcHNlcyB7TmFOLCAtSW5mLCDiiaQgMH0gdG8gMCBp biBvbmUgaW5zbiDigJQKKysgICAgLy8gdGhlICLiiaQgMCBvciBOYU4g4oaSIDAiIGJyYW5jaCBk YW5jZSBkaXNhcHBlYXJzLgorKyAgICAvLworKyAgICAvLyBBZnRlciB0aGUgbWF4LCBmY3RpZCAo cm91bmQtdG8tbmVhcmVzdC1ldmVuIHBlciBGUFNDUiBkZWZhdWx0LAorKyAgICAvLyBtYXRjaGVz IEVDTUEgVWludDhDbGFtcGVkQXJyYXkncyByb3VuZC1oYWxmLXRvLWV2ZW4pIHNhdHVyYXRlcwor KyAgICAvLyBvdXQtb2YtaW50NjQgdmFsdWVzIHRvIElOVDY0X01BWC4gUmVtYWluaW5nIHVwcGVy IGNsYW1wCisrICAgIC8vIChvdXRwdXQgPiAyNTUg4oaSIDI1NSkgaXMgb25lIGNtcGRpICsgaXNl bC4KKysgICAgemVyb0RvdWJsZShmcHNjcmF0Y2gpOworKyAgICBhc194c21heGpkcChmcHNjcmF0 Y2gsIGlucHV0LCBmcHNjcmF0Y2gpOworKyAgICBhc19mY3RpZChmcHNjcmF0Y2gsIGZwc2NyYXRj aCk7CisrICAgIGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7CisrICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgbWF4MjU1ID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICB4c19saShtYXgyNTUsIDI1NSk7CisrICAgIGFzX2NtcGRpKG91 dHB1dCwgMjU1KTsKKysgICAgYXNfaXNlbChvdXRwdXQsIG1heDI1NSwgb3V0cHV0LCBHcmVhdGVy VGhhbik7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIC8vIFBPV0VSOCBmYWxsYmFjazogeHNt YXhqZHAgaXMgdW5hdmFpbGFibGUsIHNvIGZpbHRlciBOYU4gZXhwbGljaXRseQorKyAgLy8gYmVm b3JlIGZjdGlkLiBQZXIgUG93ZXIgSVNBLCBmY3RpZCBtYXBzIE5hTiB0byBJTlQ2NF9NQVgsIHdo aWNoCisrICAvLyB3b3VsZCBjbGFtcCB0byAyNTUgaW5zdGVhZCBvZiB0aGUgc3BlYy1yZXF1aXJl ZCAwLgorKyAgTGFiZWwgcG9zaXRpdmUsIGJlbG93MjU1LCBkb25lOworKyAgemVyb0RvdWJsZShm cHNjcmF0Y2gpOworKyAgYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuLCBpbnB1dCwgZnBz Y3JhdGNoLCAmcG9zaXRpdmUpOworKyAgeworKyAgICBtb3ZlMzIoSW1tMzIoMCksIG91dHB1dCk7 CisrICAgIGp1bXAoJmRvbmUpOworKyAgfQorKworKyAgYmluZCgmcG9zaXRpdmUpOworKworKyAg bG9hZENvbnN0YW50RG91YmxlKDI1NS4wLCBmcHNjcmF0Y2gpOworKyAgYnJhbmNoRG91YmxlKERv dWJsZUxlc3NUaGFuLCBpbnB1dCwgZnBzY3JhdGNoLCAmYmVsb3cyNTUpOworKyAgeworKyAgICBt b3ZlMzIoSW1tMzIoMjU1KSwgb3V0cHV0KTsKKysgICAganVtcCgmZG9uZSk7CisrICB9CisrCisr ICBiaW5kKCZiZWxvdzI1NSk7CisrCisrICBhc19mY3RpZChmcHNjcmF0Y2gsIGlucHV0KTsKKysg IGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7CisrICBiaW5kKCZkb25lKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRnJvbVN0YWNrUHRyKEltbTMyIGltbTMyKSB7CisrICBp ZiAoaW1tMzIudmFsdWUpIHsKKysgICAgYXNNYXNtKCkuc3ViUHRyKGltbTMyLCBTdGFja1BvaW50 ZXIpOworKyAgfQorK30KKysKKysvL3t7eyBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuSW50MzIoUmVnaXN0ZXIgcikgeworKyAgbW92ZTMy VG82NFNpZ25FeHRlbmQociwgUmVnaXN0ZXI2NChyKSk7CisrfQorKworKy8vIFN0YWNrIG9wZXJh dGlvbnMuCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVzaChSZWdpc3RlciByZWcpIHsKKysgIHB1 c2gocmVnKTsKKysgIGFkanVzdEZyYW1lKGludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30K Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoKGNvbnN0IEltbTMyIGltbSkgeworKyAgcHVzaChp bW0pOworKyAgYWRqdXN0RnJhbWUoaW50MzJfdChzaXplb2YoaW50cHRyX3QpKSk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1c2goY29uc3QgSW1tV29yZCBpbW0pIHsKKysgIHB1c2go aW1tKTsKKysgIGFkanVzdEZyYW1lKGludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoKGNvbnN0IEltbVB0ciBpbW0pIHsKKysgIFB1c2go SW1tV29yZCh1aW50cHRyX3QoaW1tLnZhbHVlKSkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpQdXNoKGNvbnN0IEltbUdDUHRyIHB0cikgeworKyAgcHVzaChwdHIpOworKyAgYWRqdXN0 RnJhbWUoaW50MzJfdChzaXplb2YoaW50cHRyX3QpKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OlB1c2hCb3hlZChGbG9hdFJlZ2lzdGVyIHJlZykgeworKyAgc3ViRnJvbVN0YWNrUHRy KEltbTMyKHNpemVvZihkb3VibGUpKSk7CisrICBib3hEb3VibGUocmVnLCBBZGRyZXNzKGdldFN0 YWNrUG9pbnRlcigpLCAwKSk7CisrICBhZGp1c3RGcmFtZShzaXplb2YoZG91YmxlKSk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlBvcChSZWdpc3RlciByZWcpIHsKKysgIHBvcChyZWcp OworKyAgYWRqdXN0RnJhbWUoLWludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30KKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpQdXNoUmVnc0luTWFzayhMaXZlUmVnaXN0ZXJTZXQgc2V0KSB7Cisr ICBpbnQzMl90IGRpZmYgPQorKyAgICAgIHNldC5ncHJzKCkuc2l6ZSgpICogc2l6ZW9mKGludHB0 cl90KSArIHNldC5mcHVzKCkuZ2V0UHVzaFNpemVJbkJ5dGVzKCk7CisrICBjb25zdCBpbnQzMl90 IHJlc2VydmVkID0gZGlmZjsKKysKKysgIHJlc2VydmVTdGFjayhyZXNlcnZlZCk7CisrICBmb3Ig KEdlbmVyYWxSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRlcihzZXQuZ3BycygpKTsgaXRlci5t b3JlKCk7ICsraXRlcikgeworKyAgICBkaWZmIC09IHNpemVvZihpbnRwdHJfdCk7CisrICAgIHN0 b3JlUHRyKCppdGVyLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZikpOworKyAgfQorKworKyAg Ly8gTmF0dXJhbCBwZXIta2luZCBzbG90IOKAlCA4IGJ5dGVzIGZvciBTaW5nbGUvRG91YmxlIHZp YSBzdGZkLCAxNiBieXRlcworKyAgLy8gZm9yIFNpbWQxMjggdmlhIHN0eHZ4LiBSZWdpc3RlckR1 bXA6OkZQVUFycmF5IGlzIHNpemVkIDMyIMOXIDggPSAyNTYKKysgIC8vIGJ5dGVzIChzaXplb2Yo UmVnaXN0ZXJDb250ZW50KSBpcyA4IOKAlCBubyB2MTI4IGluIHRoZSB1bmlvbiksIHNvCisrICAv LyBmX0sncyBzdGZkIHNsb3QgbGFuZHMgYXQgdGhlIHJpZ2h0IG9mZnNldC4gQmFpbG91dCBBbGxS ZWdzIGV4Y2x1ZGVzCisrICAvLyBTaW1kMTI4IChJb24gaGFzIG5vIFNJTUQgbGl2ZSksIHNvIHRo ZSBGUCByZWdpb24gaW4gYmFpbG91dCBmcmFtZXMKKysgIC8vIGlzIHN0cmljdGx5IEZsb2F0LW9u bHkuCisrICBmb3IgKEZsb2F0UmVnaXN0ZXJCYWNrd2FyZEl0ZXJhdG9yIGl0ZXIoc2V0LmZwdXMo KS5yZWR1Y2VTZXRGb3JQdXNoKCkpOworKyAgICAgICBpdGVyLm1vcmUoKTsgKytpdGVyKSB7Cisr ICAgIEZsb2F0UmVnaXN0ZXIgcmVnID0gKml0ZXI7CisrICAgIGRpZmYgLT0gcmVnLnNpemUoKTsK KysgICAgaWYgKHJlZy5pc1NpbWQxMjgoKSkgeworKyAgICAgIHN0b3JlVW5hbGlnbmVkU2ltZDEy OChyZWcsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSk7CisrICAgIH0gZWxzZSB7CisrICAg ICAgc3RvcmVEb3VibGUocmVnLmFzRG91YmxlKCksIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZm KSk7CisrICAgIH0KKysgIH0KKysgIE1PWl9BU1NFUlQoZGlmZiA9PSAwKTsKKyt9Cisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6UG9wUmVnc0luTWFza0lnbm9yZShMaXZlUmVnaXN0ZXJTZXQgc2V0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGl2ZVJlZ2lzdGVyU2V0 IGlnbm9yZSkgeworKyAgaW50MzJfdCBkaWZmID0KKysgICAgICBzZXQuZ3BycygpLnNpemUoKSAq IHNpemVvZihpbnRwdHJfdCkgKyBzZXQuZnB1cygpLmdldFB1c2hTaXplSW5CeXRlcygpOworKyAg Y29uc3QgaW50MzJfdCByZXNlcnZlZCA9IGRpZmY7CisrCisrICBmb3IgKEdlbmVyYWxSZWdpc3Rl ckJhY2t3YXJkSXRlcmF0b3IgaXRlcihzZXQuZ3BycygpKTsgaXRlci5tb3JlKCk7ICsraXRlcikg eworKyAgICBkaWZmIC09IHNpemVvZihpbnRwdHJfdCk7CisrICAgIGlmICghaWdub3JlLmhhcygq aXRlcikpIHsKKysgICAgICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSwgKml0 ZXIpOworKyAgICB9CisrICB9CisrCisrICAvLyBOYXR1cmFsIHBlci1raW5kIHNsb3QuIFNlZSBQ dXNoUmVnc0luTWFzayBjb21tZW50LgorKyAgZm9yIChGbG9hdFJlZ2lzdGVyQmFja3dhcmRJdGVy YXRvciBpdGVyKHNldC5mcHVzKCkucmVkdWNlU2V0Rm9yUHVzaCgpKTsKKysgICAgICAgaXRlci5t b3JlKCk7ICsraXRlcikgeworKyAgICBGbG9hdFJlZ2lzdGVyIHJlZyA9ICppdGVyOworKyAgICBk aWZmIC09IHJlZy5zaXplKCk7CisrICAgIGlmICghaWdub3JlLmhhcyhyZWcpKSB7CisrICAgICAg aWYgKHJlZy5pc1NpbWQxMjgoKSkgeworKyAgICAgICAgbG9hZFVuYWxpZ25lZFNpbWQxMjgoQWRk cmVzcyhTdGFja1BvaW50ZXIsIGRpZmYpLCByZWcpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICBsb2FkRG91YmxlKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSwgcmVnLmFzRG91YmxlKCkp OworKyAgICAgIH0KKysgICAgfQorKyAgfQorKyAgTU9aX0FTU0VSVChkaWZmID09IDApOworKyAg ZnJlZVN0YWNrKHJlc2VydmVkKTsKKyt9CisrCisrLy8gQ2FsbCBvcGVyYXRpb25zLgorK0NvZGVP ZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmNhbGwoUmVnaXN0ZXIgcmVnKSB7CisrICAvLyBFTEZ2MiBB Qkk6IHIxMiBtdXN0IGhvbGQgdGhlIHRhcmdldCBhZGRyZXNzIGF0IGZ1bmN0aW9uIGVudHJ5Cisr ICAvLyBzbyB0aGUgY2FsbGVlIGNhbiBjb21wdXRlIGl0cyBUT0MgcG9pbnRlciBmcm9tIHIxMi4K KysgIGlmIChyZWcgIT0gQ2FsbFJlZykgeworKyAgICBtb3ZlUHRyKHJlZywgQ2FsbFJlZyk7Cisr ICB9CisrICB4c19tdGN0cihDYWxsUmVnKTsKKysgIGFzX2JjdHIoTGlua0IpOworKyAgcmV0dXJu IENvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsKKyt9CisrQ29kZU9mZnNldCBNYWNyb0Fzc2Vt Ymxlcjo6Y2FsbChMYWJlbCogbGFiZWwpIHsKKysgIGlmIChsYWJlbC0+Ym91bmQoKSkgeworKyAg ICAvLyBPcGVuIHRoZSBuby1wb29sIHdpbmRvdyBCRUZPUkUgY29tcHV0aW5nIHRoZSBkaXNwbGFj ZW1lbnQuCisrICAgIC8vIGVudGVyTm9Qb29sKCkgY2FuIGl0c2VsZiB0cmlnZ2VyIGEgcGVuZGlu ZyBwb29sIGZsdXNoLCBhZHZhbmNpbmcKKysgICAgLy8gY3VycmVudE9mZnNldCgpLiBBIHByZS1m bHVzaCBkaXNwbGFjZW1lbnQgZW1pdHRlZCBhdCB0aGUgcG9zdC1mbHVzaAorKyAgICAvLyBwb3Np dGlvbiB3b3VsZCBvdmVyc2hvb3QgdGhlIHRhcmdldCBieSBwb29sU2l6ZSBieXRlcy4KKysgICAg bV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKKysgICAg aW50MzJfdCBvZmZzZXQgPSBsYWJlbC0+b2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0KCk7CisrICAg IC8vIENhbGwgaW5zdHJ1Y3Rpb24gZ29lcyBhdCBpbnN0WzldIGluIHRoZSAxMC13b3JkIHN0YW56 YS4KKysgICAgaW50MzJfdCBjYWxsT2Zmc2V0ID0gb2Zmc2V0IC0gOSAqIChpbnQzMl90KXNpemVv Zih1aW50MzJfdCk7CisrICAgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShjYWxsT2Zmc2V0KSkg eworKyAgICAgIC8vIFNob3J0OiA5IG5vcHMgKyBibCA9IDEwIGluc3RydWN0aW9ucy4KKysgICAg ICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICAg IHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgICAg d3JpdGVJbnN0KE5vcEluc3QpOworKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgICB3 cml0ZUluc3QoTm9wSW5zdCk7CisrICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKKysgICAgICBhc19iKEpPZmZJbW0yNihjYWxsT2Zmc2V0KSwgUmVs YXRpdmVCcmFuY2gsIExpbmtCKTsKKysgICAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAg ICAgIHJldHVybiBDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgLy8g TG9uZyBjYWxsIHRvIGJvdW5kIGxhYmVsOiBzdGFuemEoOCkgKyBtdGN0ciArIGJjdHJsID0gMTAg aW5zdHJ1Y3Rpb25zLgorKyAgICBCdWZmZXJPZmZzZXQgYm8gPQorKyAgICAgICAgZW1pdExvYWQ2 NFN0YW56YShTZWNvbmRTY3JhdGNoUmVnLCBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysg ICAgeHNfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgIGFzX2JjdHIoTGlua0IpOworKyAg ICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgICBhZGRMb25nSnVtcChibywgQnVmZmVyT2Zm c2V0KGxhYmVsLT5vZmZzZXQoKSkpOworKyAgICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zm c2V0KCkpOworKyAgfQorKyAgLy8gRW1pdCBhIENhbGxUYWcgc3RhbnphOiB0cmFwICsgY2hhaW4g KyA4IG5vcHMgKDEwIGluc3RydWN0aW9ucyB0b3RhbCkuCisrICBtX2J1ZmZlci5lbnRlck5vUG9v bChrTm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5zbnMpOworKyAgQnVmZmVyT2Zmc2V0IGJvID0geHNf dHJhcF90YWdnZWQoQ2FsbFRhZyk7CisrICB3cml0ZUluc3QobGFiZWwtPnVzZWQoKSA/IGxhYmVs LT5vZmZzZXQoKSA6IExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgd3JpdGVJbnN0KE5v cEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOwor KyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJ bnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcElu c3QpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgIGlmICghb29tKCkpIHsKKysgICAg bGFiZWwtPnVzZShiby5nZXRPZmZzZXQoKSk7CisrICB9CisrICByZXR1cm4gQ29kZU9mZnNldChj dXJyZW50T2Zmc2V0KCkpOworK30KKytDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsKGNv bnN0IEFkZHJlc3MmIGFkZHIpIHsKKysgIGxvYWRQdHIoYWRkciwgQ2FsbFJlZyk7CisrICByZXR1 cm4gY2FsbChDYWxsUmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChJbW1Q dHIgdGFyZ2V0KSB7CisrICB1aW50NjRfdCBhZGRyID0gdWludHB0cl90KHRhcmdldC52YWx1ZSk7 CisrICAvLyBzdGFuemEoOCkgKyBtdGN0ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rpb25zLgorKyAg bV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKKysgIEJ1 ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoQ2FsbFJlZywgYWRkcik7CisrICBhZGRQ ZW5kaW5nSnVtcChibywgdGFyZ2V0LCBSZWxvY2F0aW9uS2luZDo6SEFSRENPREVEKTsKKysgIHhz X210Y3RyKENhbGxSZWcpOworKyAgYXNfYmN0cihMaW5rQik7CisrICBtX2J1ZmZlci5sZWF2ZU5v UG9vbCgpOworK30KKysKKytDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsKHdhc206OlN5 bWJvbGljQWRkcmVzcyB0YXJnZXQpIHsKKysgIG1vdmVQdHIodGFyZ2V0LCBDYWxsUmVnKTsKKysg IHJldHVybiBjYWxsKENhbGxSZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxs V2l0aEFCSU5vUHJvZmlsZXIoY29uc3QgQWRkcmVzcyYgZnVuLCBBQklUeXBlIHJlc3VsdCkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIoZnVuLCBzY3JhdGNoKTsKKysK KysgIHVpbnQzMl90IHN0YWNrQWRqdXN0OworKyAgY2FsbFdpdGhBQklQcmUoJnN0YWNrQWRqdXN0 KTsKKysgIGNhbGwoc2NyYXRjaCk7CisrICBjYWxsV2l0aEFCSVBvc3Qoc3RhY2tBZGp1c3QsIHJl c3VsdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxXaXRoQUJJUHJlKHVpbnQz Ml90KiBzdGFja0FkanVzdCwgYm9vbCBjYWxsRnJvbVdhc20pIHsKKysgIE1PWl9BU1NFUlQoaW5D YWxsXyk7CisrICB1aW50MzJfdCBzdGFja0ZvckNhbGwgPSBhYmlBcmdzXy5zdGFja0J5dGVzQ29u c3VtZWRTb0ZhcigpOworKworKyAgLy8gUmVzZXJ2ZSBwbGFjZSBmb3IgTFIgc2F2ZS4KKysgIHN0 YWNrRm9yQ2FsbCArPSBzaXplb2YoaW50cHRyX3QpOworKworKyAgaWYgKGR5bmFtaWNBbGlnbm1l bnRfKSB7CisrICAgIHN0YWNrRm9yQ2FsbCArPSBDb21wdXRlQnl0ZUFsaWdubWVudChzdGFja0Zv ckNhbGwsIEFCSVN0YWNrQWxpZ25tZW50KTsKKysgIH0gZWxzZSB7CisrICAgIHVpbnQzMl90IGFs aWdubWVudEF0UHJvbG9ndWUgPSBjYWxsRnJvbVdhc20gPyBzaXplb2Yod2FzbTo6RnJhbWUpIDog MDsKKysgICAgc3RhY2tGb3JDYWxsICs9IENvbXB1dGVCeXRlQWxpZ25tZW50KAorKyAgICAgICAg c3RhY2tGb3JDYWxsICsgZnJhbWVQdXNoZWQoKSArIGFsaWdubWVudEF0UHJvbG9ndWUsIEFCSVN0 YWNrQWxpZ25tZW50KTsKKysgIH0KKysKKysgICpzdGFja0FkanVzdCA9IHN0YWNrRm9yQ2FsbDsK KysgIHJlc2VydmVTdGFjayhzdGFja0ZvckNhbGwpOworKworKyAgLy8gU2F2ZSBMUi4gUmVzdG9y ZSBpdCBpbiBjYWxsV2l0aEFCSVBvc3QuCisrICB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgeHNfbWZscihzY3JhdGNoKTsKKysgICAgc3RvcmVQdHIoc2NyYXRjaCwgQWRk cmVzcyhTdGFja1BvaW50ZXIsIHN0YWNrRm9yQ2FsbCAtIHNpemVvZihpbnRwdHJfdCkpKTsKKysg IH0KKysKKysgIC8vIFBvc2l0aW9uIGFsbCBhcmd1bWVudHMuCisrICB7CisrICAgIGVub3VnaE1l bW9yeV8gJj0gbW92ZVJlc29sdmVyXy5yZXNvbHZlKCk7CisrICAgIGlmICghZW5vdWdoTWVtb3J5 XykgeworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICBNb3ZlRW1pdHRlciBlbWl0dGVy KCp0aGlzKTsKKysgICAgZW1pdHRlci5lbWl0KG1vdmVSZXNvbHZlcl8pOworKyAgICBlbWl0dGVy LmZpbmlzaCgpOworKyAgfQorKworKyAgYXNzZXJ0U3RhY2tBbGlnbm1lbnQoQUJJU3RhY2tBbGln bm1lbnQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFCSVBvc3QodWlu dDMyX3Qgc3RhY2tBZGp1c3QsIEFCSVR5cGUgcmVzdWx0KSB7CisrICB7CisrICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgc3Rh Y2tBZGp1c3QgLSBzaXplb2YoaW50cHRyX3QpKSwgc2NyYXRjaCk7CisrICAgIHhzX210bHIoc2Ny YXRjaCk7CisrICB9CisrCisrICBpZiAoZHluYW1pY0FsaWdubWVudF8pIHsKKysgICAgLy8gUmVz dG9yZSBTUCBmcm9tIHN0YWNrIChhcyBzdG9yZWQgaW4gc2V0dXBVbmFsaWduZWRBQklDYWxsKS4K KysgICAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgc3RhY2tBZGp1c3QpLCBTdGFja1Bv aW50ZXIpOworKyAgICBhZGp1c3RGcmFtZSgtc3RhY2tBZGp1c3QpOworKyAgfSBlbHNlIHsKKysg ICAgZnJlZVN0YWNrKHN0YWNrQWRqdXN0KTsKKysgIH0KKysKKysjaWZkZWYgREVCVUcKKysgIE1P Wl9BU1NFUlQoaW5DYWxsXyk7CisrICBpbkNhbGxfID0gZmFsc2U7CisrI2VuZGlmCisrfQorKwor Ky8vIFZhbHVlIG9wZXJhdGlvbnMuCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZVZhbHVlKGNv bnN0IFZhbHVlT3BlcmFuZCYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBWYWx1ZU9wZXJhbmQmIGRlc3QpIHsKKysgIGlmIChzcmMudmFsdWVSZWcoKSAhPSBkZXN0 LnZhbHVlUmVnKCkpIHsKKysgICAgbW92ZVB0cihzcmMudmFsdWVSZWcoKSwgZGVzdC52YWx1ZVJl ZygpKTsKKysgIH0KKyt9Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZVZhbHVlKGNvbnN0IFZh bHVlJiBzcmMsIGNvbnN0IFZhbHVlT3BlcmFuZCYgZGVzdCkgeworKyAgaWYgKCFzcmMuaXNHQ1Ro aW5nKCkpIHsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHNyYy5hc1Jhd0JpdHMoKSksIGRlc3QudmFs dWVSZWcoKSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIENvZGVPZmZzZXQgb2ZmID0gbW92V2l0 aFBhdGNoKEltbVdvcmQoc3JjLmFzUmF3Qml0cygpKSwgZGVzdC52YWx1ZVJlZygpKTsKKysgIHdy aXRlRGF0YVJlbG9jYXRpb24ob2ZmLCBzcmMpOworK30KKysKKysvLyBCcmFuY2ggb3BlcmF0aW9u cy4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0VmFsdWUoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IFZhbHVlT3BlcmFuZCYgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBWYWx1ZSYgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQo Y29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIE1PWl9BU1NFUlQoIXJocy5p c05hTigpKTsKKysKKysgIGlmICghcmhzLmlzR0NUaGluZygpKSB7CisrICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChsaHMudmFsdWVSZWcoKSAhPSBzY3JhdGNo KTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHJocy5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOworKyAg ICBicmFuY2hQdHIoY29uZCwgbGhzLnZhbHVlUmVnKCksIHNjcmF0Y2gsIGxhYmVsKTsKKysgIH0g ZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChs aHMudmFsdWVSZWcoKSAhPSBzY3JhdGNoKTsKKysgICAgbW92ZVZhbHVlKHJocywgVmFsdWVPcGVy YW5kKHNjcmF0Y2gpKTsKKysgICAgYnJhbmNoUHRyKGNvbmQsIGxocy52YWx1ZVJlZygpLCBzY3Jh dGNoLCBsYWJlbCk7CisrICB9CisrfQorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RO YU5WYWx1ZShDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWwsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBs YWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwp OworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIE1PWl9BU1NFUlQodmFsLnZhbHVlUmVn KCkgIT0gc2NyYXRjaCk7CisrCisrICAvLyBTdHJpcCB0aGUgSUVFRSBzaWduIGJpdCAoTFNCLW51 bWJlcmluZyBiaXQgNjMgPSBQUEMtbnVtYmVyaW5nIGJpdCAwKQorKyAgLy8gd2l0aCBybGRpY2wg U0g9MCwgTUI9MTogcm90YXRlIGJ5IHplcm8gKG5vLW9wKSB0aGVuIGtlZXAgYml0cyAxLi42MyBv ZgorKyAgLy8gUFBDLW51bWJlcmluZywgY2xlYXJpbmcgYml0IDAuIFJvdGF0aW5nIGJ5IDEgaW5z dGVhZCB3b3VsZCBhbHNvIHNoaWZ0CisrICAvLyB0aGUgcXVpZXQtTmFOIGJpdCBvdXQgb2YgcG9z aXRpb24gYW5kIGNhdXNlIDEuNSAoMHgzRkY4Li4uKSBhbmQgTmFOCisrICAvLyAoMHg3RkY4Li4u KSB0byBjb2xsaWRlIGFmdGVyIG1hc2tpbmcg4oCUIGJ1ZyAxOTQzNzA0IFBQQzY0IHJlZ3Jlc3Np b24uCisrICBhc19ybGRpY2wodGVtcCwgdmFsLnZhbHVlUmVnKCksIDAsIDEpOworKworKyAgLy8g TG9hZCBjYW5vbmljYWwgTmFOICh3aXRoIHNpZ24gYml0IDApIGFuZCBzdHJpcCBpdHMgc2lnbiBi aXQgdG9vLgorKyAgc3RhdGljX2Fzc2VydChKUzo6ZGV0YWlsOjpDYW5vbmljYWxpemVkTmFOU2ln bkJpdCA9PSAwKTsKKysgIG1vdmVWYWx1ZShEb3VibGVWYWx1ZShKUzo6R2VuZXJpY05hTigpKSwg VmFsdWVPcGVyYW5kKHNjcmF0Y2gpKTsKKysgIGFzX3JsZGljbChzY3JhdGNoLCBzY3JhdGNoLCAw LCAxKTsKKysKKysgIGJyYW5jaFB0cihjb25kLCB0ZW1wLCBzY3JhdGNoLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0ckluTnVyc2VyeUNodW5rKENvbmRpdGlv biBjb25kLCBSZWdpc3RlciBwdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJU KGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVhbCB8fCBjb25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwp OworKyAgTU9aX0FTU0VSVChwdHIgIT0gdGVtcCk7CisrICBNT1pfQVNTRVJUKHRlbXAgIT0gSW52 YWxpZFJlZyk7CisrCisrICBhbmRQdHIoSW1tMzIoaW50MzJfdCh+Z2M6OkNodW5rTWFzaykpLCBw dHIsIHRlbXApOworKyAgYnJhbmNoUHRyKEludmVydENvbmRpdGlvbihjb25kKSwgQWRkcmVzcyh0 ZW1wLCBnYzo6Q2h1bmtTdG9yZUJ1ZmZlck9mZnNldCksCisrICAgICAgICAgICAgSW1tV29yZCgw KSwgbGFiZWwpOworK30KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hWYWx1ZUlzTnVyc2Vy eUNlbGwoQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSwgUmVnaXN0ZXIgdGVtcCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Cisr ICBicmFuY2hWYWx1ZUlzTnVyc2VyeUNlbGxJbXBsKGNvbmQsIHZhbHVlLCB0ZW1wLCBsYWJlbCk7 CisrfQorKworKy8vIFBhdGNoaW5nIC8gbmVhciBhZGRyZXNzIG9wZXJhdGlvbnMuCisrQ29kZU9m ZnNldCBNYWNyb0Fzc2VtYmxlcjo6bm9wUGF0Y2hhYmxlVG9DYWxsKCkgeworKyAgLy8gRW1pdCAx MCBub3BzIHRoYXQgY2FuIGJlIHBhdGNoZWQgdG8gYSBjYWxsIHN0YW56YToKKysgIC8vIDggbG9h ZDY0IG5vcHMgKyBtdGN0ciBub3AgKyBiY3RybCBub3AKKysgIC8vIFJldHVybiBvZmZzZXQgQUZU RVIgdGhlIHN0YW56YSAoPSB0aGUgcmV0dXJuIGFkZHJlc3MpLgorKyAgbV9idWZmZXIuZW50ZXJO b1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKKysgIHdyaXRlSW5zdChOb3BJbnN0 KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdy aXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChO b3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsK KysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIG1fYnVm ZmVyLmxlYXZlTm9Qb29sKCk7CisrICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkp OworK30KKytDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjptb3ZlTmVhckFkZHJlc3NXaXRoUGF0 Y2goUmVnaXN0ZXIgZGVzdCkgeworKyAgQ29kZU9mZnNldCBvZmZzZXQoY3VycmVudE9mZnNldCgp KTsKKysgIGVtaXRMb2FkNjRTdGFuemEoZGVzdCwgMCk7CisrICByZXR1cm4gb2Zmc2V0OworK30K KysvLyBzdGF0aWMKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaE5lYXJBZGRyZXNzTW92ZShD b2RlTG9jYXRpb25MYWJlbCBsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KSB7CisrICBJbnN0cnVjdGlvbiogaW5z dCA9IChJbnN0cnVjdGlvbiopbG9jLnJhdygpOworKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwg KHVpbnQ2NF90KXRhcmdldC5yYXcoKSk7CisrfQorKworKy8vIFJldHVybiBhZGRyZXNzIG9wZXJh dGlvbnMgKGxpbmsgcmVnaXN0ZXIgYXJjaGl0ZWN0dXJlcykuCisrLy8KKysvLyBOb3RlOiB0aGVz ZSBNVVNUIGRlY3JlbWVudCBTUCBieSBleGFjdGx5IDggYnl0ZXMuIHdhc206OkZyYW1lIGlzIDE2 IGJ5dGVzCisrLy8gKGNhbGxlckZQXyArIHJldHVybkFkZHJlc3NfKSBhbmQgR2VuZXJhdGVDYWxs YWJsZVByb2xvZ3VlIHBhaXJzIHRoaXMgd2l0aAorKy8vIHB1c2goRnJhbWVQb2ludGVyKSB0byBt YXRjaCB0aGF0IGxheW91dCBleGFjdGx5IOKAlCBhIDE2LWJ5dGUgZGVjcmVtZW50IGhlcmUKKysv LyB3b3VsZCBpbnNlcnQgOCBieXRlcyBvZiBwYWRkaW5nIGFuZCBicmVhayBGUC1jaGFpbiB1bndp bmRpbmcuIFRoZSA4LWJ5dGUKKysvLyBpbnRlcm1lZGlhdGUgbWlzYWxpZ25tZW50IGJldHdlZW4g dGhpcyBzYXZlIGFuZCB0aGUgZm9sbG93aW5nIHB1c2goRlApIGlzCisrLy8gbmV2ZXIgb2JzZXJ2 ZWQgYnkgYSBDIGNhbGwgKG5vIGludGVydmVuaW5nIHRyYW5zaXRpb24pLCBhbmQgYW55IGNhbGxl ciB0aGF0CisrLy8gZG9lcyBtYWtlIGEgQyBjYWxsIGFmdGVyIHB1c2hSZXR1cm5BZGRyZXNzIHJv dXRlcyB0aHJvdWdoCisrLy8gc2V0dXBVbmFsaWduZWRBQklDYWxsIHdoaWNoIHJlLWFsaWducy4K Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwdXNoUmV0dXJuQWRkcmVzcygpIHsKKysgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICB4c19tZmxyKHNjcmF0Y2gpOworKyAgcHVzaChzY3JhdGNoKTsK Kyt9Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cG9wUmV0dXJuQWRkcmVzcygpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBwb3Aoc2NyYXRjaCk7CisrICB4c19tdGxyKHNjcmF0Y2gp OworK30KKysKKysvLyBBQkkgc2V0dXAuCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c2V0dXBVbmFs aWduZWRBQklDYWxsKFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgIE1PWl9BU1NFUlQoIUlzQ29tcGls aW5nV2FzbSgpLCAid2FzbSBzaG91bGQgb25seSB1c2UgYWxpZ25lZCBBQkkgY2FsbHMiKTsKKysg IHNldHVwTmF0aXZlQUJJQ2FsbCgpOworKyAgZHluYW1pY0FsaWdubWVudF8gPSB0cnVlOworKwor KyAgbW92ZVB0cihTdGFja1BvaW50ZXIsIHNjcmF0Y2gpOworKworKyAgLy8gRm9yY2Ugc3AgdG8g YmUgYWxpZ25lZC4KKysgIHN1YlB0cihJbW0zMihzaXplb2YodWludHB0cl90KSksIFN0YWNrUG9p bnRlcik7CisrICBhbmRQdHIoSW1tMzIofihBQklTdGFja0FsaWdubWVudCAtIDEpKSwgU3RhY2tQ b2ludGVyKTsKKysgIHN0b3JlUHRyKHNjcmF0Y2gsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSk7 CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKy8vIEFyaXRobWV0aWMgaGVscGVycy4KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpmbGV4aWJsZURpdk1vZDMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGl2T3V0 cHV0LCBSZWdpc3RlciByZW1PdXRwdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGlzVW5zaWduZWQsIGNvbnN0IExpdmVSZWdpc3RlclNldCYpIHsKKysgIE1P Wl9BU1NFUlQobGhzICE9IGRpdk91dHB1dCAmJiBsaHMgIT0gcmVtT3V0cHV0LCAibGhzIGlzIHBy ZXNlcnZlZCIpOworKyAgTU9aX0FTU0VSVChyaHMgIT0gZGl2T3V0cHV0ICYmIHJocyAhPSByZW1P dXRwdXQsICJyaHMgaXMgcHJlc2VydmVkIik7CisrCisrICAvLyBQUEM2NCBoYXMgbm8gbW9kdWx1 cyBpbnN0cnVjdGlvbi4gQ29tcHV0ZTogcmVtID0gbGhzIC0gKGxocy9yaHMpKnJocworKyAgLy8g UFBDNjQgZGl2dyhJTlQzMl9NSU4sIC0xKSBpcyB1bmRlZmluZWQ7IHF1b3RpZW50PUlOVDMyX01J TiwgcmVtYWluZGVyPTAuCisrICBMYWJlbCBkb25lOworKyAgaWYgKCFpc1Vuc2lnbmVkKSB7Cisr ICAgIExhYmVsIG5vdE1pbk92ZXJmbG93OworKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIGJy YW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3Zl cmZsb3cpOworKyAgICBtb3ZlMzIoSW1tMzIoSU5UMzJfTUlOKSwgZGl2T3V0cHV0KTsKKysgICAg bW92ZTMyKEltbTMyKDApLCByZW1PdXRwdXQpOworKyAgICBqdW1wKCZkb25lKTsKKysgICAgYmlu ZCgmbm90TWluT3ZlcmZsb3cpOworKyAgfQorKyAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgYXNf ZGl2d3UoZGl2T3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc19kaXZ3KGRp dk91dHB1dCwgbGhzLCByaHMpOworKyAgfQorKyAgYXNfZXh0c3coZGl2T3V0cHV0LCBkaXZPdXRw dXQpOworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAg ICAgYXNfbW9kdXcocmVtT3V0cHV0LCBsaHMsIHJocyk7CisrICAgIH0gZWxzZSB7CisrICAgICAg YXNfbW9kc3cocmVtT3V0cHV0LCBsaHMsIHJocyk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAg IGFzX211bGx3KHJlbU91dHB1dCwgZGl2T3V0cHV0LCByaHMpOworKyAgICBhc19zdWJmKHJlbU91 dHB1dCwgcmVtT3V0cHV0LCBsaHMpOworKyAgfQorKyAgYXNfZXh0c3cocmVtT3V0cHV0LCByZW1P dXRwdXQpOworKyAgYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNo aWZ0SW5kZXgzMkFuZEFkZChSZWdpc3RlciBpbmRleFRlbXAzMiwgaW50IHNoaWZ0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBwb2ludGVyKSB7Cisr ICBpZiAoSXNTaGlmdEluU2NhbGVSYW5nZShzaGlmdCkpIHsKKysgICAgY29tcHV0ZUVmZmVjdGl2 ZUFkZHJlc3MoCisrICAgICAgICBCYXNlSW5kZXgocG9pbnRlciwgaW5kZXhUZW1wMzIsIFNoaWZ0 VG9TY2FsZShzaGlmdCkpLCBwb2ludGVyKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbHNoaWZ0 MzIoSW1tMzIoc2hpZnQpLCBpbmRleFRlbXAzMik7CisrICBhZGRQdHIoaW5kZXhUZW1wMzIsIHBv aW50ZXIpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0SW50NjRUb0RvdWJs ZShSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19tdHZzcmQoZGVz dCwgc3JjLnJlZyk7CisrICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bmVhcmJ5SW50RG91YmxlKFJvdW5kaW5nTW9kZSBtb2RlLCBGbG9hdFJlZ2lz dGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBzd2l0Y2ggKG1vZGUpIHsKKysgICAgY2FzZSBSb3VuZGluZ01vZGU6 Ok5lYXJlc3RUaWVzVG9FdmVuOiB7CisrICAgICAgLy8gUFBDNjQncyBmcmluIHJvdW5kcyB0aWVz IGF3YXkgZnJvbSB6ZXJvLCBOT1QgdG8gZXZlbiAoSVNBIHYzLjEpLgorKyAgICAgIC8vIFVzZSBm Y3RpZCtmY2ZpZCB3aGljaCB1c2VzIEZQU0NSIFJOIChkZWZhdWx0ID0gcm91bmQtdG8tbmVhcmVz dC1ldmVuKS4KKysgICAgICAvLyBHdWFyZDogaWYgfHNyY3wgPj0gMl41MiwgdmFsdWUgaXMgYWxy ZWFkeSBpbnRlZ3JhbCAob3IgTmFOL0luZikg4oCUCisrICAgICAgLy8ganVzdCBjb3B5IHNyYy4g VGhpcyBwcmVzZXJ2ZXMgTmFOLCBJbmYsIGFuZCAtMC4KKysgICAgICAvLyBDaGVjayB2aWEgaW50 ZWdlciBleHBvbmVudCBleHRyYWN0aW9uIHRvIGF2b2lkIEZQIHRlbXAgY29uZmxpY3RzLgorKyAg ICAgIExhYmVsIGRvbmU7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAg bW92ZURvdWJsZShzcmMsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgICAgIGlmIChzcmMgIT0gZGVz dCkgeworKyAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOworKyAgICAgIH0KKysgICAgICBp ZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgICAgIC8vIHhzeGV4cGRwIGxheXMgdGhlIDExLWJpdCBi aWFzZWQgZXhwb25lbnQgaW4gWFQuZHcwIHdpdGggdGhlCisrICAgICAgICAvLyByZXN0IHplcm9l ZCwgc28gbWZ2c3JkIHJlYWRzIGl0IGRpcmVjdGx5IOKAlCBkcm9wcyB0aGUKKysgICAgICAgIC8v IHNyZGkrYW5kaS4gbWFza2luZyBwYWlyLgorKyAgICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBl eHBTY3JhdGNoKCp0aGlzKTsKKysgICAgICAgIGFzX3hzeGV4cGRwKGV4cFNjcmF0Y2gsIFNjcmF0 Y2hEb3VibGVSZWcpOworKyAgICAgICAgYXNfbWZ2c3JkKHNjcmF0Y2gsIGV4cFNjcmF0Y2gpOwor KyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc19tZnZzcmQoc2NyYXRjaCwgU2NyYXRjaERvdWJs ZVJlZyk7CisrICAgICAgICB4X3NyZGkoc2NyYXRjaCwgc2NyYXRjaCwgNTIpOworKyAgICAgICAg YXNfYW5kaV9yYyhzY3JhdGNoLCBzY3JhdGNoLCAweDdGRik7CisrICAgICAgfQorKyAgICAgIC8v IEJpYXNlZCBleHBvbmVudCA+PSAxMDc1ICg9IDEwMjMrNTIpIG1lYW5zIHx2YWx8ID49IDJeNTIu CisrICAgICAgLy8gQWxzbyBjYXRjaGVzIEluZiAoZXhwPTIwNDcpIGFuZCBOYU4gKGV4cD0yMDQ3 KS4KKysgICAgICBtYV9jbXAoc2NyYXRjaCwgSW1tMzIoMTA3NSksIEFzc2VtYmxlcjo6R3JlYXRl clRoYW5PckVxdWFsKTsKKysgICAgICBtYV9iKEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFs LCAmZG9uZSk7CisrICAgICAgYXNfZmN0aWQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICAg ICAgYXNfZmNmaWQoZGVzdCwgZGVzdCk7CisrICAgICAgYXNfZmNwc2duKGRlc3QsIFNjcmF0Y2hE b3VibGVSZWcsIGRlc3QpOworKyAgICAgIGJpbmQoJmRvbmUpOworKyAgICAgIGJyZWFrOworKyAg ICB9CisrICAgIGNhc2UgUm91bmRpbmdNb2RlOjpUb3dhcmRzWmVybzoKKysgICAgICBhc19mcml6 KGRlc3QsIHNyYyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgUm91bmRpbmdNb2RlOjpVcDoK KysgICAgICBhc19mcmlwKGRlc3QsIHNyYyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgUm91 bmRpbmdNb2RlOjpEb3duOgorKyAgICAgIGFzX2ZyaW0oZGVzdCwgc3JjKTsKKysgICAgICBicmVh azsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgcm91bmRpbmcg bW9kZSIpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWFyYnlJbnRGbG9h dDMyKFJvdW5kaW5nTW9kZSBtb2RlLCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gUFBD IEZQIHJvdW5kaW5nIGluc3RydWN0aW9ucyBvcGVyYXRlIG9uIGRvdWJsZS1wcmVjaXNpb24uCisr ICAvLyBGb3Igc2luZ2xlLXByZWNpc2lvbiwgd2Ugcm91bmQgYXMgZG91YmxlIHRoZW4gcm91bmQg YmFjayB0byBzaW5nbGUuCisrICAvLyBUaGUgZnJzcCBpbnN0cnVjdGlvbiBoYW5kbGVzIHRoZSBk b3VibGUtPnNpbmdsZSBjb252ZXJzaW9uLgorKyAgbmVhcmJ5SW50RG91YmxlKG1vZGUsIHNyYywg ZGVzdCk7CisrICBhc19mcnNwKGRlc3QsIGRlc3QpOworK30KKysKKysvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBG YXIganVtcCBzdXBwb3J0LgorKworK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmZhckp1bXBX aXRoUGF0Y2goKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAgLy8gc3Rhbnph KDgpICsgbXRjdHIgKyBiY3RyID0gMTAgaW5zdHJ1Y3Rpb25zLgorKyAgQ29kZU9mZnNldCBsb2Fk T2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29s UGF0Y2hhYmxlQnJhbmNoSW5zbnMpOworKyAgZW1pdExvYWQ2NFN0YW56YShzY3JhdGNoLCAwKTsK KysgIHhzX210Y3RyKHNjcmF0Y2gpOworKyAgYXNfYmN0cigpOworKyAgbV9idWZmZXIubGVhdmVO b1Bvb2woKTsKKysKKysgIHJldHVybiBsb2FkT2Zmc2V0OworK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpmbHVzaCgpIHsgQXNzZW1ibGVyOjpmbHVzaCgpOyB9CisrCisr Ly8gV2FzbSBzdXBwb3J0LgorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6 d2FzbVRyYXBJbnN0cnVjdGlvbigpIHsKKysgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOyAgLy8gc2Vl IGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNvID0gRmF1 bHRpbmdDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrICB4c190cmFwKCk7CisrICByZXR1 cm4gZmNvOworK30KKysKKysvLyBQUEM2NCBTbG93Q2FsbE1hcmtlcjogYG9yaSByMCwgcjAsIDBg IC0tIGEgTk9QLWxpa2UgaW5zdHJ1Y3Rpb24KKysvLyB0aGF0IHdvbid0IGFwcGVhciBpbiBub3Jt YWwgY29kZSBnZW5lcmF0aW9uLgorKy8vIG9yaSByMCwgcjAsIDAgPSAweDYwMDAwMDAwIC0tIHRo YXQncyBhY3R1YWxseSBQUENfbm9wLgorKy8vIFVzZSBhIGRpc3Rpbmd1aXNoYWJsZSBlbmNvZGlu ZzogYG9yaSByMTIsIHIxMiwgMGAgPSAweDYxOEMwMDAwCisrc3RhdGljIGNvbnN0IGludDMyX3Qg U2xvd0NhbGxNYXJrZXIgPSAweDYxOEMwMDAwOworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondh c21NYXJrQ2FsbEFzU2xvdygpIHsKKysgIC8vIEVtaXQ6IG9yaSByMTIsIHIxMiwgMAorKyAgYXNf b3JpKENhbGxSZWcsIENhbGxSZWcsIDApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3 YXNtQ2hlY2tTbG93Q2FsbHNpdGUoUmVnaXN0ZXIgcmFfLCBMYWJlbCogbm90U2xvdywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcDEsIFJl Z2lzdGVyIHRlbXAyKSB7CisrICBNT1pfQVNTRVJUKHJhXyAhPSB0ZW1wMik7CisrICBsb2FkMzIo QWRkcmVzcyhyYV8sIDApLCB0ZW1wMik7CisrICBicmFuY2gzMihBc3NlbWJsZXI6Ok5vdEVxdWFs LCB0ZW1wMiwgSW1tMzIoU2xvd0NhbGxNYXJrZXIpLCBub3RTbG93KTsKKyt9CisrCisrQ29kZU9m ZnNldCBNYWNyb0Fzc2VtYmxlcjo6d2FzbU1hcmtlZFNsb3dDYWxsKGNvbnN0IHdhc206OkNhbGxT aXRlRGVzYyYgZGVzYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUmVnaXN0ZXIgcmVnKSB7CisrICBDb2RlT2Zmc2V0IG9mZnNldCA9IGNhbGwo ZGVzYywgcmVnKTsKKysgIHdhc21NYXJrQ2FsbEFzU2xvdygpOworKyAgcmV0dXJuIG9mZnNldDsK Kyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrLy8gQWRkaXRpb25hbCBzdGFjayBvcGVyYXRpb25zLgorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1c2goRmxvYXRSZWdpc3RlciBmKSB7CisrICBwdXNoKGYp OworKyAgYWRqdXN0RnJhbWUoaW50MzJfdChzaXplb2YoZG91YmxlKSkpOworK30KKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpQb3AoRmxvYXRSZWdpc3RlciBmKSB7CisrICBwb3AoZik7CisrICBhZGp1 c3RGcmFtZSgtaW50MzJfdChzaXplb2YoZG91YmxlKSkpOworK30KKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpQb3AoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWwpIHsKKysgIHBvcFZhbHVlKHZhbCk7Cisr ICBhZGp1c3RGcmFtZSgtaW50MzJfdChzaXplb2YoVmFsdWUpKSk7CisrfQorKworKy8vIHN0YXRp YworK3NpemVfdCBNYWNyb0Fzc2VtYmxlcjo6UHVzaFJlZ3NJbk1hc2tTaXplSW5CeXRlcyhMaXZl UmVnaXN0ZXJTZXQgc2V0KSB7CisrICByZXR1cm4gc2V0LmdwcnMoKS5zaXplKCkgKiBzaXplb2Yo aW50cHRyX3QpICsgc2V0LmZwdXMoKS5nZXRQdXNoU2l6ZUluQnl0ZXMoKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVSZWdzSW5NYXNrKExpdmVSZWdpc3RlclNldCBzZXQsIEFk ZHJlc3MgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgc2NyYXRjaCkgeworKyAgRmxvYXRSZWdpc3RlclNldCBmcHVTZXQoc2V0LmZwdXMoKS5yZWR1 Y2VTZXRGb3JQdXNoKCkpOworKyAgbW96aWxsYTo6RGVidWdPbmx5PHVuc2lnbmVkPiBudW1GcHUg PSBmcHVTZXQuc2l6ZSgpOworKyAgbW96aWxsYTo6RGVidWdPbmx5PGludDMyX3Q+IGRpZmZGID0g ZnB1U2V0LmdldFB1c2hTaXplSW5CeXRlcygpOworKyAgbW96aWxsYTo6RGVidWdPbmx5PGludDMy X3Q+IGRpZmZHID0gc2V0LmdwcnMoKS5zaXplKCkgKiBzaXplb2YoaW50cHRyX3QpOworKworKyAg TU9aX0FTU0VSVChkZXN0Lm9mZnNldCA+PSBkaWZmRyArIGRpZmZGKTsKKysKKysgIGZvciAoR2Vu ZXJhbFJlZ2lzdGVyQmFja3dhcmRJdGVyYXRvciBpdGVyKHNldC5ncHJzKCkpOyBpdGVyLm1vcmUo KTsgKytpdGVyKSB7CisrICAgIGRpZmZHIC09IHNpemVvZihpbnRwdHJfdCk7CisrICAgIGRlc3Qu b2Zmc2V0IC09IHNpemVvZihpbnRwdHJfdCk7CisrICAgIHN0b3JlUHRyKCppdGVyLCBkZXN0KTsK KysgIH0KKysgIE1PWl9BU1NFUlQoZGlmZkcgPT0gMCk7CisrCisrICAvLyBOYXR1cmFsIHBlci1r aW5kIHNsb3QuIFNlZSBQdXNoUmVnc0luTWFzayBjb21tZW50LgorKyAgZm9yIChGbG9hdFJlZ2lz dGVyQmFja3dhcmRJdGVyYXRvciBpdGVyKGZwdVNldCk7IGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsK KysgICAgRmxvYXRSZWdpc3RlciByZWcgPSAqaXRlcjsKKysgICAgZGlmZkYgLT0gcmVnLnNpemUo KTsKKysgICAgbnVtRnB1IC09IDE7CisrICAgIGRlc3Qub2Zmc2V0IC09IHJlZy5zaXplKCk7Cisr ICAgIGlmIChyZWcuaXNTaW1kMTI4KCkpIHsKKysgICAgICBzdG9yZVVuYWxpZ25lZFNpbWQxMjgo cmVnLCBkZXN0KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBzdG9yZURvdWJsZShyZWcuYXNEb3Vi bGUoKSwgZGVzdCk7CisrICAgIH0KKysgIH0KKysgIE1PWl9BU1NFUlQoZGlmZkYgPT0gMCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZyZWVTdGFja1RvKHVpbnQzMl90IGZyYW1lUHVz aGVkKSB7CisrICBNT1pfQVNTRVJUKGZyYW1lUHVzaGVkIDw9IGZyYW1lUHVzaGVkXyk7CisrICAv LyBTUCA9IEZQIC0gZnJhbWVQdXNoZWQKKysgIG1vdmVQdHIoRnJhbWVQb2ludGVyLCBTdGFja1Bv aW50ZXIpOworKyAgaWYgKGZyYW1lUHVzaGVkKSB7CisrICAgIHN1YlB0cihJbW0zMihmcmFtZVB1 c2hlZCksIFN0YWNrUG9pbnRlcik7CisrICB9CisrICBmcmFtZVB1c2hlZF8gPSBmcmFtZVB1c2hl ZDsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrLy8gQWRkaXRpb25hbCBjYWxsIC8gcGF0Y2ggb3BlcmF0 aW9ucy4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsKEppdENvZGUqIGMpIHsKKysgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICB1aW50NjRfdCBhZGRyID0gdWludHB0cl90KGMt PnJhdygpKTsKKysgIEJ1ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoc2NyYXRjaCwg YWRkcik7CisrICBhZGRQZW5kaW5nSnVtcChibywgSW1tUHRyKGMtPnJhdygpKSwgUmVsb2NhdGlv bktpbmQ6OkpJVENPREUpOworKworKyAgY2FsbEppdE5vUHJvZmlsZXIoc2NyYXRjaCk7CisrfQor KworK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxXaXRoUGF0Y2goKSB7CisrICAvLyBF bWl0IGEgQ2FsbFRhZy1zaXplZCBzdGFuemEgb2Ygbm9wcy4gV2lsbCBiZSBwYXRjaGVkIGJ5IHBh dGNoQ2FsbC4KKysgIC8vIFJldHVybiBvZmZzZXQgQUZURVIgdGhlIHN0YW56YSAoPSB0aGUgcmV0 dXJuIGFkZHJlc3Mgd2hlbiBibCBleGVjdXRlcykuCisrICBtX2J1ZmZlci5lbnRlck5vUG9vbChr Tm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5zbnMpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAg d3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0 KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3Qp OworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgd3Jp dGVJbnN0KE5vcEluc3QpOworKyAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgbV9idWZmZXIubGVh dmVOb1Bvb2woKTsKKysgIHJldHVybiBDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoQ2FsbCh1aW50MzJfdCBjYWxsZXJPZmZzZXQs IHVpbnQzMl90IGNhbGxlZU9mZnNldCkgeworKyAgLy8gY2FsbGVyT2Zmc2V0IHBvaW50cyBBRlRF UiB0aGUgMTAtaW5zdHJ1Y3Rpb24gc3RhbnphICh0aGUgcmV0dXJuIGFkZHJlc3MpLgorKyAgLy8g U3VidHJhY3QgdG8gZmluZCB0aGUgc3RhbnphIHN0YXJ0LiBUaGUgYGJsYCBnb2VzIGF0IGluc3Rb OV0uCisrICB1aW50MzJfdCBzdGFuemFTdGFydCA9IGNhbGxlck9mZnNldCAtIDEwICogc2l6ZW9m KHVpbnQzMl90KTsKKysgIEluc3RydWN0aW9uKiBpMCA9IChJbnN0cnVjdGlvbiopKG1fYnVmZmVy LmdldEluc3QoQnVmZmVyT2Zmc2V0KHN0YW56YVN0YXJ0KSkpOworKyAgLy8gYmwgb2Zmc2V0IGlz IHJlbGF0aXZlIHRvIGluc3RbOV0sIHdoaWNoIGlzIGF0IHN0YW56YVN0YXJ0ICsgMzYuCisrICBp bnRwdHJfdCBibEFkZHIgPSAoaW50cHRyX3Qpc3RhbnphU3RhcnQgKyA5ICogKGludHB0cl90KXNp emVvZih1aW50MzJfdCk7CisrICBpbnRwdHJfdCBjYWxsT2Zmc2V0ID0gKGludHB0cl90KWNhbGxl ZU9mZnNldCAtIGJsQWRkcjsKKysgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShjYWxsT2Zmc2V0 KSkgeworKyAgICBpMFswXS5tYWtlTm9wKCk7CisrICAgIGkwWzFdLm1ha2VOb3AoKTsKKysgICAg aTBbMl0ubWFrZU5vcCgpOworKyAgICBpMFszXS5tYWtlTm9wKCk7CisrICAgIGkwWzRdLm1ha2VO b3AoKTsKKysgICAgaTBbNV0ubWFrZU5vcCgpOworKyAgICBpMFs2XS5tYWtlTm9wKCk7CisrICAg IGkwWzddLm1ha2VOb3AoKTsKKysgICAgaTBbOF0ubWFrZU5vcCgpOworKyAgICBpMFs5XS5zZXRE YXRhKFBQQ19iIHwgSk9mZkltbTI2KGNhbGxPZmZzZXQpLmVuY29kZSgpIHwgTGlua0IpOworKyAg fSBlbHNlIHsKKysgICAgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KHN0YW56YVN0YXJ0KSwgQnVm ZmVyT2Zmc2V0KGNhbGxlZU9mZnNldCkpOworKyAgICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhp MCwgU2Vjb25kU2NyYXRjaFJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgIGkw WzhdLm1ha2VPcF9tdGN0cihTZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgaTBbOV0ubWFrZU9wX2Jj dHIoTGlua0IpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaEZhckp1 bXAoQ29kZU9mZnNldCBmYXJKdW1wLCB1aW50MzJfdCB0YXJnZXRPZmZzZXQpIHsKKysgIEluc3Ry dWN0aW9uKiBpbnN0ID0KKysgICAgICAoSW5zdHJ1Y3Rpb24qKW1fYnVmZmVyLmdldEluc3QoQnVm ZmVyT2Zmc2V0KGZhckp1bXAub2Zmc2V0KCkpKTsKKysgIC8vIEV4dHJhY3QgdGhlIGRlc3RpbmF0 aW9uIHJlZ2lzdGVyIGZyb20gdGhlIGV4aXN0aW5nIHN0YW56YS4gQm90aCBzaGFwZXMKKysgIC8v IGVuY29kZSByRCBhdCBMRSBiaXRzIFsyMS4uMjVdIG9mIHRoZWlyIGZpcnN0ICJyZWdpc3Rlci10 b3VjaGluZyIgc2xvdDoKKysgIC8vIFA4ID0gbWZsciByRCBhdCBbMl0sIFA5KyA9IGFkZHBjaXMg ckQgYXQgWzBdLiBNYWpvciBvcGNvZGUgb2Ygc2xvdCBbMF0KKysgIC8vIGRpc3Rpbmd1aXNoZXMg KDMxID0gbWZzcHIsIDE5ID0gYWRkcGNpcykuCisrICB1aW50MzJfdCBpMCA9IGluc3RbMF0uZW5j b2RlKCk7CisrICB1aW50MzJfdCByZWdDb2RlID0gKCgoaTAgPj4gMjYpICYgMHgzZikgPT0gMTkp CisrICAgICAgICAgICAgICAgICAgICAgICAgID8gKChpMCA+PiAyMSkgJiAweDFmKQorKyAgICAg ICAgICAgICAgICAgICAgICAgICA6ICgoaW5zdFsyXS5lbmNvZGUoKSA+PiAyMSkgJiAweDFmKTsK KysgIFJlZ2lzdGVyIHJlZyA9IFJlZ2lzdGVyOjpGcm9tQ29kZShyZWdDb2RlKTsKKysgIFdyaXRl TG9hZDY0SW5zdHJ1Y3Rpb25zKGluc3QsIHJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7 CisrICBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQoZmFySnVtcC5vZmZzZXQoKSksIEJ1ZmZlck9m ZnNldCh0YXJnZXRPZmZzZXQpKTsKKyt9CisrCisrLy8gc3RhdGljCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cGF0Y2hGYXJKdW1wKHVpbnQ4X3QqIGZhckp1bXAsIHVpbnQ4X3QqIHRhcmdldCkgewor KyAgVXBkYXRlTG9hZDY0VmFsdWUoKEluc3RydWN0aW9uKilmYXJKdW1wLCAodWludDY0X3QpKHVp bnRwdHJfdCl0YXJnZXQpOworKyAgRmx1c2hJQ2FjaGUoZmFySnVtcCwgOCAqIHNpemVvZihJbnN0 cnVjdGlvbikpOworK30KKysKKysvLyBzdGF0aWMKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRj aE5vcFRvQ2FsbCh1aW50OF90KiBjYWxsc2l0ZSwgdWludDhfdCogdGFyZ2V0KSB7CisrICAvLyBj YWxsc2l0ZSBwb2ludHMgQUZURVIgdGhlIDEwLWluc3RydWN0aW9uIHN0YW56YS4gU3VidHJhY3Qg dG8gZmluZCBzdGFydC4KKysgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKiljYWxs c2l0ZSAtIDEwOworKyAgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaW5zdCwgU2Vjb25kU2NyYXRj aFJlZywgKHVpbnQ2NF90KSh1aW50cHRyX3QpdGFyZ2V0KTsKKysgIGluc3RbOF0ubWFrZU9wX210 Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgaW5zdFs5XS5tYWtlT3BfYmN0cihMaW5rQik7Cisr ICBGbHVzaElDYWNoZShpbnN0LCAxMCAqIHNpemVvZihJbnN0cnVjdGlvbikpOworK30KKysKKysv LyBzdGF0aWMKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaENhbGxUb05vcCh1aW50OF90KiBj YWxsc2l0ZSkgeworKyAgLy8gY2FsbHNpdGUgcG9pbnRzIEFGVEVSIHRoZSAxMC1pbnN0cnVjdGlv biBzdGFuemEuIFN1YnRyYWN0IHRvIGZpbmQgc3RhcnQuCisrICBJbnN0cnVjdGlvbiogaW5zdCA9 IChJbnN0cnVjdGlvbiopY2FsbHNpdGUgLSAxMDsKKysgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7 IGkrKykgeworKyAgICBpbnN0W2ldLm1ha2VOb3AoKTsKKysgIH0KKysgIEZsdXNoSUNhY2hlKGlu c3QsIDEwICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnBhdGNoTW92ZTMyKENvZGVPZmZzZXQgb2Zmc2V0LCBJbW0zMiBuKSB7CisrICAvLyBQYXRj aCBhbiA4LWluc3RydWN0aW9uIGxvYWQ2NCBzZXF1ZW5jZSB3aXRoIGEgMzItYml0IHZhbHVlLgor KyAgSW5zdHJ1Y3Rpb24qIGluc3QgPQorKyAgICAgIChJbnN0cnVjdGlvbiopbV9idWZmZXIuZ2V0 SW5zdChCdWZmZXJPZmZzZXQob2Zmc2V0Lm9mZnNldCgpKSk7CisrICBVcGRhdGVMb2FkNjRWYWx1 ZShpbnN0LCB1aW50NjRfdChpbnQ2NF90KG4udmFsdWUpKSk7CisrfQorKworK3VpbnQzMl90IE1h Y3JvQXNzZW1ibGVyOjpwdXNoRmFrZVJldHVybkFkZHJlc3MoUmVnaXN0ZXIgc2NyYXRjaCkgewor KyAgQ29kZUxhYmVsIGNsOworKworKyAgLy8gVXNlIG1vdihDb2RlTGFiZWwqLCBSZWdpc3Rlcikg d2hpY2ggYWx3YXlzIGVtaXRzIGEgZnVsbCA4LWluc3RydWN0aW9uCisrICAvLyBsb2FkNjQgc2Vx dWVuY2UgKHZpYSBOT1BzICsgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMpLiBUaGlzIGlzIGNyaXRp Y2FsCisrICAvLyBiZWNhdXNlIG1vdmVQdHIoSW1tV29yZCgwKSkgd291bGQgb3B0aW1pemUgdG8g YSBzaW5nbGUgbGkgaW5zdHJ1Y3Rpb24sCisrICAvLyBidXQgcHJvY2Vzc0NvZGVMYWJlbHMtPkJp bmQtPlVwZGF0ZUxvYWQ2NFZhbHVlIGV4cGVjdHMgdGhlIGZ1bGwKKysgIC8vIDgtaW5zdHJ1Y3Rp b24gbGl0ZXJhbCBwb29sIHNlcXVlbmNlIGF0IHRoZSBwYXRjaEF0IG9mZnNldC4KKysgIG1vdigm Y2wsIHNjcmF0Y2gpOworKworKyAgUHVzaChzY3JhdGNoKTsKKysKKysgIGJpbmQoJmNsKTsKKysg IHVpbnQzMl90IHJldEFkZHIgPSBjdXJyZW50T2Zmc2V0KCk7CisrCisrICBhZGRDb2RlTGFiZWwo Y2wpOworKyAgcmV0dXJuIHJldEFkZHI7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNh bGxXaXRoQUJJTm9Qcm9maWxlcihSZWdpc3RlciBmdW4sIEFCSVR5cGUgcmVzdWx0KSB7CisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gU2F2ZSBmdW4gdG8gc2NyYXRjaCBzaW5jZSBm dW4gbWlnaHQgYmUgY2xvYmJlcmVkIGJ5IGNhbGxXaXRoQUJJUHJlLgorKyAgbW92ZVB0cihmdW4s IHNjcmF0Y2gpOworKworKyAgdWludDMyX3Qgc3RhY2tBZGp1c3Q7CisrICBjYWxsV2l0aEFCSVBy ZSgmc3RhY2tBZGp1c3QpOworKyAgY2FsbChzY3JhdGNoKTsKKysgIGNhbGxXaXRoQUJJUG9zdChz dGFja0FkanVzdCwgcmVzdWx0KTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gQWRkaXRpb25hbCBh cml0aG1ldGljIGhlbHBlcnMuCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVSZW1h aW5kZXIzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIGJvb2wgaXNVbnNpZ25lZCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExpdmVSZWdpc3Rl clNldCYpIHsKKysgIC8vIHJlbSA9IGxocyAtIChsaHMvcmhzKSpyaHMKKysgIC8vIFBQQzY0IGRp dncoSU5UMzJfTUlOLCAtMSkgaXMgdW5kZWZpbmVkOyByZXN1bHQgaXMgMC4KKysgIExhYmVsIGRv bmU7CisrICBpZiAoIWlzVW5zaWduZWQpIHsKKysgICAgTGFiZWwgbm90TWluT3ZlcmZsb3c7Cisr ICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdvcmQoSU5UMzJfTUlO KSwgJm5vdE1pbk92ZXJmbG93KTsKKysgICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWws IHJocywgSW1tV29yZCgtMSksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIG1vdmUzMihJbW0zMigw KSwgZGVzdCk7CisrICAgIGp1bXAoJmRvbmUpOworKyAgICBiaW5kKCZub3RNaW5PdmVyZmxvdyk7 CisrICB9CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysg ICAgICBhc19tb2R1dyhkZXN0LCBsaHMsIHJocyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNf bW9kc3coZGVzdCwgbGhzLCByaHMpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgICAgYXNfZGl2 d3Uoc2NyYXRjaCwgbGhzLCByaHMpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX2Rpdncoc2Ny YXRjaCwgbGhzLCByaHMpOworKyAgICB9CisrICAgIGFzX211bGx3KHNjcmF0Y2gsIHNjcmF0Y2gs IHJocyk7CisrICAgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgbGhzKTsKKysgIH0KKysgIGFzX2V4 dHN3KGRlc3QsIGRlc3QpOworKyAgYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmZsZXhpYmxlUXVvdGllbnRQdHIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBi b29sIGlzVW5zaWduZWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmKSB7CisrICAvLyBQUEM2NCBkaXZkKElOVDY0X01JTiwg LTEpIGlzIHVuZGVmaW5lZDsgcmV0dXJuIElOVDY0X01JTiB0byBtYXRjaAorKyAgLy8gQVJNNjQv TG9vbmdBcmNoNjQgaGFyZHdhcmUgc2RpdiBiZWhhdmlvci4KKysgIExhYmVsIGRvbmU7CisrICBp ZiAoIWlzVW5zaWduZWQpIHsKKysgICAgTGFiZWwgbm90TWluT3ZlcmZsb3c7CisrICAgIGJyYW5j aFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdvcmQoSU5UNjRfTUlOKSwgJm5vdE1p bk92ZXJmbG93KTsKKysgICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1t V29yZCgtMSksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIG1vdmVQdHIoSW1tV29yZChJTlQ2NF9N SU4pLCBkZXN0KTsKKysgICAganVtcCgmZG9uZSk7CisrICAgIGJpbmQoJm5vdE1pbk92ZXJmbG93 KTsKKysgIH0KKysgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgIGFzX2RpdmR1KGRlc3QsIGxocywg cmhzKTsKKysgIH0gZWxzZSB7CisrICAgIGFzX2RpdmQoZGVzdCwgbGhzLCByaHMpOworKyAgfQor KyAgYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUmVt YWluZGVyUHRyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIGJvb2wgaXNVbnNpZ25lZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMaXZlUmVn aXN0ZXJTZXQmKSB7CisrICAvLyByZW0gPSBsaHMgLSAobGhzL3JocykqcmhzCisrICAvLyBQUEM2 NCBkaXZkKElOVDY0X01JTiwgLTEpIGlzIHVuZGVmaW5lZDsgcmVzdWx0IGlzIDAuCisrICBMYWJl bCBkb25lOworKyAgaWYgKCFpc1Vuc2lnbmVkKSB7CisrICAgIExhYmVsIG5vdE1pbk92ZXJmbG93 OworKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDY0 X01JTiksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVx dWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBtb3ZlUHRyKElt bVdvcmQoMCksIGRlc3QpOworKyAgICBqdW1wKCZkb25lKTsKKysgICAgYmluZCgmbm90TWluT3Zl cmZsb3cpOworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGlmIChpc1Vuc2lnbmVk KSB7CisrICAgICAgYXNfbW9kdWQoZGVzdCwgbGhzLCByaHMpOworKyAgICB9IGVsc2UgeworKyAg ICAgIGFzX21vZHNkKGRlc3QsIGxocywgcmhzKTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAg IGFzX2RpdmR1KHNjcmF0Y2gsIGxocywgcmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19k aXZkKHNjcmF0Y2gsIGxocywgcmhzKTsKKysgICAgfQorKyAgICBhc19tdWxsZChzY3JhdGNoLCBz Y3JhdGNoLCByaHMpOworKyAgICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7CisrICB9Cisr ICBiaW5kKCZkb25lKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gUm91bmRpbmcgaGVscGVycy4K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbG9vckRvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBmYWlsKSB7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFz TWFzbSgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICAvLyBSb3VuZCB0b3dh cmQgbmVnYXRpdmUgaW5maW5pdHksIHRoZW4gY29udmVydCB0byBpbnQ2NC4KKysgIGFzX2ZyaW0o ZnBzY3JhdGNoLCBzcmMpOworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKKysg IGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZp dHMgaW4gaW50MzIuCisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgIGFzX2NtcGQoZGVz dCwgc2NyYXRjaCk7CisrICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysKKysgIC8vIENoZWNrIGZv ciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBub3RaZXJvOworKyAg YXNfY21wZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7CisrICB7Cisr ICAgIC8vIElmIHRvcCAyIGJpdHMgb2Ygc3JjIGFyZSBzZXQsIGl0J3MgbmVnYXRpdmUgb3IgTmFO LgorKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKKysgICAgLy8gcmxkaWNsLiA9IHhfc3JkaSAr IHJlY29yZCBmb3JtOiBkZXN0ID0gdG9wIDIgYml0cywgQ1IwW2VxXT0oZGVzdD09MCkuCisrICAg IC8vIEZvbGRzIHRoZSBleHBsaWNpdCBjbXBkaSBzcmMsMCB0aGF0IHdvdWxkIG90aGVyd2lzZSBk cml2ZSB0aGUgYnJhbmNoLgorKyAgICBhc19ybGRpY2xfcmMoZGVzdCwgZGVzdCwgMiwgNjIpOwor KyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysgIH0KKysgIGJpbmQoJm5vdFplcm8pOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbG9vckZsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2go YXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIC8vIFBQQyBGUCBy b3VuZGluZyB3b3JrcyBvbiBkb3VibGVzLiBTaW5nbGUtcHJlY2lzaW9uIEZQUnMgYXJlCisrICAv LyBhbHJlYWR5IGluIGRvdWJsZS13aWR0aCByZWdpc3RlcnMsIHNvIGZyaW0gd29ya3MgZmluZS4K KysgIGFzX2ZyaW0oZnBzY3JhdGNoLCBzcmMpOworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBz Y3JhdGNoKTsKKysgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAgLy8gQ2hlY2sg aWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysg IGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysKKysg IC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBu b3RaZXJvOworKyAgYXNfY21wZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVy byk7CisrICB7CisrICAgIC8vIHNyYyBpcyBoZWxkIGluIHRoZSBGUFIgYXMgYSA2NC1iaXQgZG91 YmxlIChsZnMgd2lkZW5zIGZsb2F0MzIgdG8KKysgICAgLy8gZG91YmxlIG9uIGxvYWQpLCBzbyB0 aGUgc2FtZSB0b3AtMi1iaXRzIGNoZWNrIHVzZWQgZm9yIGRvdWJsZXMKKysgICAgLy8gYXBwbGll czogYml0IDYzID0gc2lnbiwgYml0IDYyID0gZXhwb25lbnQgTVNCLiBOb256ZXJvIG1lYW5zIC0w LAorKyAgICAvLyDCsUluZiwgTmFOLCBvciBhIGxhcmdlIG1hZ25pdHVkZSDigJQgbm9uZSBvZiB3 aGljaCBpcyArMC4KKysgICAgYXNfbWZ2c3JkKGRlc3QsIHNyYyk7CisrICAgIC8vIHJsZGljbC4g PSB4X3NyZGkgKyByZWNvcmQgZm9ybTogZGVzdCA9IHRvcCAyIGJpdHMsIENSMFtlcV09KGRlc3Q9 PTApLgorKyAgICAvLyBGb2xkcyB0aGUgZXhwbGljaXQgY21wZGkgc3JjLDAgdGhhdCB3b3VsZCBv dGhlcndpc2UgZHJpdmUgdGhlIGJyYW5jaC4KKysgICAgYXNfcmxkaWNsX3JjKGRlc3QsIGRlc3Qs IDIsIDYyKTsKKysgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBiaW5kKCZub3Ra ZXJvKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2VpbERvdWJsZVRvSW50MzIoRmxv YXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNj cmF0Y2goYXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIGFzX2Zy aXAoZnBzY3JhdGNoLCBzcmMpOworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsK KysgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAgLy8gQ2hlY2sgaWYgcmVzdWx0 IGZpdHMgaW4gaW50MzIuCisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgIGFzX2NtcGQo ZGVzdCwgc2NyYXRjaCk7CisrICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysKKysgIC8vIENoZWNr IGZvciAoLTEsIC0wXSBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBub3Ra ZXJvOworKyAgYXNfY21wZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7 CisrICB7CisrICAgIC8vIElmIGJpbmFyeSB2YWx1ZSBpcyBub3QgemVybywgaW5wdXQgd2FzIG5v dCAwIChjb3VsZCBiZSAtMCBvciBOYU4pLgorKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKKysg ICAgYXNfY21wZGkoZGVzdCwgMCk7CisrICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOworKyAgfQor KyAgYmluZCgmbm90WmVybyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNlaWxGbG9h dDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hE b3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysKKysgIGFzX2ZyaXAoZnBzY3JhdGNoLCBzcmMpOworKyAgYXNfZmN0aWR6KGZwc2NyYXRj aCwgZnBzY3JhdGNoKTsKKysgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAgLy8g Q2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0 KTsKKysgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsK KysKKysgIC8vIENoZWNrIGZvciAoLTEsIC0wXSBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8u CisrICBMYWJlbCBub3RaZXJvOworKyAgYXNfY21wZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVx dWFsLCAmbm90WmVybyk7CisrICB7CisrICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOworKyAgICBh c19jbXBkaShkZXN0LCAwKTsKKysgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBi aW5kKCZub3RaZXJvKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNEb3VibGVU b0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgeworKyAgU2NyYXRjaERvdWJs ZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgc3JjKTsKKysgIGFzX21mdnNyZChkZXN0LCBmcHNj cmF0Y2gpOworKworKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCisrICBhc19l eHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICBtYV9i KE5vdEVxdWFsLCBmYWlsKTsKKysKKysgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVz dWx0IGlzIHplcm8uCisrICBMYWJlbCBub3RaZXJvOworKyAgYXNfY21wZGkoZGVzdCwgMCk7Cisr ICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7CisrICB7CisrICAgIGFzX21mdnNyZChkZXN0LCBz cmMpOworKyAgICAvLyBybGRpY2wuID0geF9zcmRpICsgcmVjb3JkIGZvcm06IGRlc3QgPSB0b3Ag MiBiaXRzLCBDUjBbZXFdPShkZXN0PT0wKS4KKysgICAgLy8gRm9sZHMgdGhlIGV4cGxpY2l0IGNt cGRpIHNyYywwIHRoYXQgd291bGQgb3RoZXJ3aXNlIGRyaXZlIHRoZSBicmFuY2guCisrICAgIGFz X3JsZGljbF9yYyhkZXN0LCBkZXN0LCAyLCA2Mik7CisrICAgIG1hX2IoTm90RXF1YWwsIGZhaWwp OworKyAgfQorKyAgYmluZCgmbm90WmVybyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnRydW5jRmxvYXQzMlRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgewor KyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgc3JjKTsKKysgIGFzX21m dnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4g aW50MzIuCisrICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgIGFzX2NtcGQoZGVzdCwgc2Ny YXRjaCk7CisrICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysKKysgIC8vIENoZWNrIGZvciAtMCBh bmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBub3RaZXJvOworKyAgYXNfY21w ZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7CisrICB7CisrICAgIGFz X21mdnNyZChkZXN0LCBzcmMpOworKyAgICAvLyBybGRpY2wuID0geF9zcmRpICsgcmVjb3JkIGZv cm06IGRlc3QgPSB0b3AgMiBiaXRzLCBDUjBbZXFdPShkZXN0PT0wKS4KKysgICAgLy8gRm9sZHMg dGhlIGV4cGxpY2l0IGNtcGRpIHNyYywwIHRoYXQgd291bGQgb3RoZXJ3aXNlIGRyaXZlIHRoZSBi cmFuY2guCisrICAgIGFzX3JsZGljbF9yYyhkZXN0LCBkZXN0LCAyLCA2Mik7CisrICAgIG1hX2Io Tm90RXF1YWwsIGZhaWwpOworKyAgfQorKyAgYmluZCgmbm90WmVybyk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnJvdW5kRG91YmxlVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB0ZW1wLCBMYWJlbCogZmFpbCkgeworKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZw c2NyYXRjaChhc01hc20oKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAgTGFi ZWwgbmVnYXRpdmUsIGVuZCwgcGVyZm9ybVJvdW5kOworKworKyAgLy8gQnJhbmNoIGZvciBuZWdh dGl2ZSBpbnB1dHMuCisrICB6ZXJvRG91YmxlKGZwc2NyYXRjaCk7CisrICBicmFuY2hEb3VibGUo RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBzcmMsIGZwc2NyYXRjaCwgJnBlcmZvcm1Sb3VuZCk7 CisrCisrICAvLyBJbnB1dCBpcyBuZWdhdGl2ZS4KKysgIGxvYWRDb25zdGFudERvdWJsZSgtMC41 LCBmcHNjcmF0Y2gpOworKyAgYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwg c3JjLCBmcHNjcmF0Y2gsIGZhaWwpOworKyAganVtcCgmcGVyZm9ybVJvdW5kKTsKKysKKysgIGJp bmQoJnBlcmZvcm1Sb3VuZCk7CisrICB7CisrICAgIGxvYWRDb25zdGFudERvdWJsZShHZXRCaWdn ZXN0TnVtYmVyTGVzc1RoYW4oMC41KSwgdGVtcCk7CisrICAgIGFzX2ZhZGQoZnBzY3JhdGNoLCBz cmMsIHRlbXApOworKyAgICBhc19mcmltKGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKKysgICAgYXNf ZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKKysgICAgYXNfbWZ2c3JkKGRlc3QsIGZwc2Ny YXRjaCk7CisrCisrICAgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgorKyAgICBh c19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgICAgYXNfY21wZChkZXN0LCBzY3JhdGNoKTsKKysg ICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBiaW5kKCZlbmQpOworKworKyAgLy8g Q2hlY2sgZm9yIC0wIGFuZCBOYU4gd2hlbiByZXN1bHQgaXMgemVyby4KKysgIExhYmVsIG5vdFpl cm87CisrICBhc19jbXBkaShkZXN0LCAwKTsKKysgIG1hX2IoTm90RXF1YWwsICZub3RaZXJvKTsK KysgIHsKKysgICAgYXNfbWZ2c3JkKGRlc3QsIHNyYyk7CisrICAgIGFzX2NtcGRpKGRlc3QsIDAp OworKyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysgIH0KKysgIGJpbmQoJm5vdFplcm8pOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3VuZEZsb2F0MzJUb0ludDMyKEZsb2F0UmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wLCBMYWJlbCogZmFpbCkgeworKyAgU2NyYXRj aERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKworKyAgTGFiZWwgbmVnYXRpdmUsIGVuZCwgcGVyZm9ybVJvdW5kOworKworKyAgLy8g QnJhbmNoIGZvciBub24tbmVnYXRpdmUgaW5wdXRzLgorKyAgbG9hZENvbnN0YW50RmxvYXQzMigw LjBmLCBmcHNjcmF0Y2gpOworKyAgYnJhbmNoRmxvYXQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFs LCBzcmMsIGZwc2NyYXRjaCwgJnBlcmZvcm1Sb3VuZCk7CisrCisrICAvLyBJbnB1dCBpcyBuZWdh dGl2ZS4KKysgIGxvYWRDb25zdGFudEZsb2F0MzIoLTAuNWYsIGZwc2NyYXRjaCk7CisrICBicmFu Y2hGbG9hdChEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIHNyYywgZnBzY3JhdGNoLCBmYWlsKTsK KysgIGp1bXAoJnBlcmZvcm1Sb3VuZCk7CisrCisrICBiaW5kKCZwZXJmb3JtUm91bmQpOworKyAg eworKyAgICBsb2FkQ29uc3RhbnRGbG9hdDMyKGZsb2F0KEdldEJpZ2dlc3ROdW1iZXJMZXNzVGhh bigwLjUpKSwgdGVtcCk7CisrICAgIGFzX2ZhZGRzKGZwc2NyYXRjaCwgc3JjLCB0ZW1wKTsKKysg ICAgYXNfZnJpbShmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7CisrICAgIGFzX2ZjdGlkeihmcHNjcmF0 Y2gsIGZwc2NyYXRjaCk7CisrICAgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOworKworKyAg ICAvLyBDaGVjayBpZiByZXN1bHQgZml0cyBpbiBpbnQzMi4KKysgICAgYXNfZXh0c3coc2NyYXRj aCwgZGVzdCk7CisrICAgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICAgIG1hX2IoTm90RXF1 YWwsIGZhaWwpOworKyAgfQorKyAgYmluZCgmZW5kKTsKKysKKysgIC8vIENoZWNrIGZvciAtMCBh bmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBub3RaZXJvOworKyAgYXNfY21w ZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7CisrICB7CisrICAgIGFz X21mdnNyZChkZXN0LCBzcmMpOworKyAgICBhc19jbXBkaShkZXN0LCAwKTsKKysgICAgbWFfYihO b3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBiaW5kKCZub3RaZXJvKTsKKyt9CisrCisrLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrLy8gRlAgY29udmVyc2lvbiAvIGNvcHktc2lnbi4KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb252ZXJ0SW50UHRyVG9Eb3VibGUoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIGNvbnZlcnRJbnQ2NFRvRG91YmxlKFJlZ2lzdGVyNjQoc3JjKSwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvcHlTaWduRG91YmxlKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIG91dHB1dCkgeworKyAgLy8gZmNwc2duIGZydCwgZnJhLCBmcmI6 IGNvcGllcyBzaWduIG9mIGZyYSB0byBtYWduaXR1ZGUgb2YgZnJiLgorKyAgLy8gbGhzID0gbWFn bml0dWRlIHNvdXJjZSwgcmhzID0gc2lnbiBzb3VyY2UuCisrICBhc19mY3BzZ24ob3V0cHV0LCBy aHMsIGxocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvcHlTaWduRmxvYXQzMihG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBhc19mY3BzZ24o b3V0cHV0LCByaHMsIGxocyk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIEdDIC8gbnVyc2VyeSBo ZWxwZXJzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxvYWRTdG9yZUJ1ZmZlcihSZWdpc3Rl ciBwdHIsIFJlZ2lzdGVyIGJ1ZmZlcikgeworKyAgYW5kUHRyKEltbTMyKGludDMyX3QofmdjOjpD aHVua01hc2spKSwgcHRyLCBidWZmZXIpOworKyAgbG9hZFB0cihBZGRyZXNzKGJ1ZmZlciwgZ2M6 OkNodW5rU3RvcmVCdWZmZXJPZmZzZXQpLCBidWZmZXIpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hWYWx1ZUlzTnVyc2VyeUNlbGwoQ29uZGl0aW9uIGNvbmQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGFk ZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHRlbXAsIExhYmVsKiBsYWJlbCkgeworKyAgYnJhbmNoVmFsdWVJc051cnNlcnlDZWxs SW1wbChjb25kLCBhZGRyZXNzLCB0ZW1wLCBsYWJlbCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBl bmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFZhbHVlSXNOdXJzZXJ5Q2VsbElt cGwoQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBUJiB2YWx1ZSwgUmVnaXN0ZXIgdGVtcCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewor KyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6RXF1YWwgfHwgY29uZCA9PSBBc3NlbWJs ZXI6Ok5vdEVxdWFsKTsKKysgIE1PWl9BU1NFUlQodGVtcCAhPSBJbnZhbGlkUmVnKTsKKysgIExh YmVsIGRvbmU7CisrICBicmFuY2hUZXN0R0NUaGluZyhBc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1 ZSwKKysgICAgICAgICAgICAgICAgICAgIGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVhbCA/ICZkb25l IDogbGFiZWwpOworKworKyAgZ2V0R0NUaGluZ1ZhbHVlQ2h1bmsodmFsdWUsIHRlbXApOworKyAg bG9hZFB0cihBZGRyZXNzKHRlbXAsIGdjOjpDaHVua1N0b3JlQnVmZmVyT2Zmc2V0KSwgdGVtcCk7 CisrICBicmFuY2hQdHIoSW52ZXJ0Q29uZGl0aW9uKGNvbmQpLCB0ZW1wLCBJbW1Xb3JkKDApLCBs YWJlbCk7CisrCisrICBiaW5kKCZkb25lKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVGVtcGxh dGUgaW5zdGFudGlhdGlvbnMuCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6c3RvcmVVbmJveGVkVmFsdWUoY29uc3QgQ29uc3RhbnRPclJlZ2lzdGVyJiB2 YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVJUeXBlIHZh bHVlVHlwZSwgY29uc3QgVCYgZGVzdCkgeworKyAgTU9aX0FTU0VSVCh2YWx1ZVR5cGUgPCBNSVJU eXBlOjpWYWx1ZSk7CisrCisrICBpZiAodmFsdWVUeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewor KyAgICBib3hEb3VibGUodmFsdWUucmVnKCkudHlwZWRSZWcoKS5mcHUoKSwgZGVzdCk7CisrICAg IHJldHVybjsKKysgIH0KKysKKysgIGlmICh2YWx1ZS5jb25zdGFudCgpKSB7CisrICAgIHN0b3Jl VmFsdWUodmFsdWUudmFsdWUoKSwgZGVzdCk7CisrICB9IGVsc2UgeworKyAgICBzdG9yZVZhbHVl KFZhbHVlVHlwZUZyb21NSVJUeXBlKHZhbHVlVHlwZSksIHZhbHVlLnJlZygpLnR5cGVkUmVnKCku Z3ByKCksCisrICAgICAgICAgICAgICAgZGVzdCk7CisrICB9CisrfQorKworK3RlbXBsYXRlIHZv aWQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlVW5ib3hlZFZhbHVlKGNvbnN0IENvbnN0YW50T3JSZWdp c3RlciYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTUlSVHlwZSB2YWx1ZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgZGVzdCk7CisrdGVtcGxhdGUgdm9pZCBN YWNyb0Fzc2VtYmxlcjo6c3RvcmVVbmJveGVkVmFsdWUoCisrICAgIGNvbnN0IENvbnN0YW50T3JS ZWdpc3RlciYgdmFsdWUsIE1JUlR5cGUgdmFsdWVUeXBlLAorKyAgICBjb25zdCBCYXNlT2JqZWN0 RWxlbWVudEluZGV4JiBkZXN0KTsKKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBNaXNjIHN0dWJzLgorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbW1lbnQoY29uc3QgY2hhciogbXNnKSB7fQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN1bGF0aW9uQmFycmllcigpIHsKKysgIC8vIGlzeW5jIHBy b3ZpZGVzIGV4ZWN1dGlvbiBzeW5jaHJvbml6YXRpb246IGRpc2NhcmRzIHByZWZldGNoZWQKKysg IC8vIGluc3RydWN0aW9ucyBhbmQgZm9yY2VzIGEgcmVmZXRjaCtyZWV4ZWN1dGUgcGFzdCB0aGUg YmFycmllci4KKysgIC8vIE5vIGluc3RydWN0aW9uIGZvbGxvd2luZyBpc3luYyBtYXkgYmVnaW4g KGFyY2hpdGVjdHVyYWxseSkgdW50aWwKKysgIC8vIGlzeW5jIGNvbXBsZXRlcywgYmxvY2tpbmcg c3BlY3VsYXRpdmUgYnlwYXNzIOKAlCBleGFjdGx5IHRoZQorKyAgLy8gU3BlY3RyZSB2MSBndWFy YW50ZWUgbmVlZGVkIGFmdGVyIGEgQyBjYWxsIHJldHVybnMgYSB2YWx1ZSB0aGF0CisrICAvLyBt YXkgaW5mbHVlbmNlIHN1YnNlcXVlbnQgbG9hZHMuIFJlYWNoYWJsZSBmcm9tIHNoYXJlZAorKyAg Ly8gQ29kZUdlbmVyYXRvciB1bmRlciBKaXRPcHRpb25zLnNwZWN0cmVKaXRUb0N4eENhbGxzLgor KyAgYXNfaXN5bmMoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljUGF1c2Uo KSB7IG5vcCgpOyB9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZW50ZXJGYWtlRXhpdEZyYW1l Rm9yV2FzbShSZWdpc3RlciBjeHJlZywgUmVnaXN0ZXIgc2NyYXRjaCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXRGcmFtZVR5cGUgdHlwZSkgewor KyAgZW50ZXJGYWtlRXhpdEZyYW1lKGN4cmVnLCBzY3JhdGNoLCB0eXBlKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUJvdW5kc0NoZWNrMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyIGluZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGJvdW5kc0NoZWNrTGltaXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBtYV9jbXAoaW5kZXgsIGJvdW5kc0NoZWNrTGltaXQs IGNvbmQpOworKyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Ondhc21Cb3VuZHNDaGVjazMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBpbmRleCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIGJvdW5kc0NoZWNr TGltaXQsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxv YWQzMihib3VuZHNDaGVja0xpbWl0LCBzY3JhdGNoKTsKKysgIG1hX2NtcChpbmRleCwgc2NyYXRj aCwgY29uZCk7CisrICBtYV9iKGNvbmQsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6d2FzbUJvdW5kc0NoZWNrNjQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgaW5kZXgs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBib3Vu ZHNDaGVja0xpbWl0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgbWFfY21wKGluZGV4LnJlZywgYm91bmRzQ2hlY2tMaW1pdC5yZWcs IGNvbmQpOworKyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Ondhc21Cb3VuZHNDaGVjazY0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGluZGV4LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgYm91bmRzQ2hl Y2tMaW1pdCwgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg bG9hZFB0cihib3VuZHNDaGVja0xpbWl0LCBzY3JhdGNoKTsKKysgIG1hX2NtcChpbmRleC5yZWcs IHNjcmF0Y2gsIGNvbmQpOworKyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK0NvZGVPZmZz ZXQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMldpdGhQYXRjaChSZWdpc3RlciBkZXN0KSB7CisrICBD b2RlT2Zmc2V0IG9mZnNldChjdXJyZW50T2Zmc2V0KCkpOworKyAgZW1pdExvYWQ2NFN0YW56YShk ZXN0LCAwKTsKKysgIHJldHVybiBvZmZzZXQ7CisrfQorKworK0NvZGVPZmZzZXQgTWFjcm9Bc3Nl bWJsZXI6OnN1YjMyRnJvbU1lbUFuZEJyYW5jaElmTmVnYXRpdmVXaXRoUGF0Y2goCisrICAgIEFk ZHJlc3MgYWRkcmVzcywgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGFkZHJlc3MuYmFzZSk7CisrICBsb2FkMzIoYWRk cmVzcywgc2NyYXRjaCk7CisrICAvLyBTdWJ0cmFjdCBhIHBsYWNlaG9sZGVyIHZhbHVlICh3aWxs IGJlIHBhdGNoZWQpLgorKyAgLy8gVXNlIGFkZGkgd2l0aCBwb3NpdGl2ZSBwbGFjZWhvbGRlciAo MTI4KSwgd2hpY2ggd2lsbCBiZSBwYXRjaGVkIHRvCisrICAvLyBhZGRpIHdpdGggbmVnYXRpdmUg dmFsdWUuIFRoZSBpbW1lZGlhdGUgaXMgaW4gdGhlIGFkZGkgaW5zdHJ1Y3Rpb24uCisrICBhc19h ZGRpKHNjcmF0Y2gsIHNjcmF0Y2gsIDEyOCk7CisrICBDb2RlT2Zmc2V0IHBhdGNoUG9pbnQgPSBD b2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrICBzdG9yZTMyKHNjcmF0Y2gsIGFkZHJlc3Mp OworKyAgLy8gQnJhbmNoIGlmIHJlc3VsdCBpcyBuZWdhdGl2ZSAoc2lnbmVkKS4KKysgIGFzX2Nt cHdpKHNjcmF0Y2gsIDApOworKyAgbWFfYihMZXNzVGhhbiwgbGFiZWwpOworKyAgcmV0dXJuIHBh dGNoUG9pbnQ7CisrfQorKworK2Jvb2wgTWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRVSW50NjRUb0Rv dWJsZU5lZWRzVGVtcCgpIHsgcmV0dXJuIGZhbHNlOyB9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y2FsbChJbW1Xb3JkIGltbSkgeyBjYWxsKEltbVB0cigodm9pZCopaW1tLnZhbHVlKSk7IH0K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0VUludDY0VG9Eb3VibGUoUmVnaXN0ZXI2 NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgeworKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJl Z2lzdGVyOjpJbnZhbGlkKCkpOworKyAgLy8gUE9XRVI3KyBoYXMgZmNmaWR1ICh1bnNpZ25lZCBp NjQg4oaSIGY2NCkgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb247IG5vCisrICAvLyBzaWduLXNwbGl0 IC8gYnJhbmNoIC8gR1BSIHNjcmF0Y2ggbmVlZGVkLgorKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5y ZWcpOworKyAgYXNfZmNmaWR1KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb252ZXJ0SW50NjRUb0Zsb2F0MzIoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOworKyAgYXNfZmNmaWRzKGRlc3Qs IGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0VUludDY0VG9GbG9h dDMyKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7CisrICBNT1pfQVNT RVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7CisrICAvLyBQT1dFUjcrIGhhcyBmY2Zp ZHVzICh1bnNpZ25lZCBpNjQg4oaSIGYzMikgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCisrICBh c19tdHZzcmQoZGVzdCwgc3JjLnJlZyk7CisrICBhc19mY2ZpZHVzKGRlc3QsIGRlc3QpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVF1b3RpZW50MzIoCisrICAgIFJlZ2lz dGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LCBib29sIGlzVW5zaWduZWQsCisr ICAgIGNvbnN0IExpdmVSZWdpc3RlclNldCYgdm9sYXRpbGVMaXZlUmVncykgeworKyAgLy8gUFBD NjQgZGl2dyhJTlQzMl9NSU4sIC0xKSBpcyB1bmRlZmluZWQ7IHJldHVybiBJTlQzMl9NSU4gdG8g bWF0Y2gKKysgIC8vIEFSTTY0L0xvb25nQXJjaDY0IGhhcmR3YXJlIHNkaXYgYmVoYXZpb3IuCisr ICBMYWJlbCBkb25lOworKyAgaWYgKCFpc1Vuc2lnbmVkKSB7CisrICAgIExhYmVsIG5vdE1pbk92 ZXJmbG93OworKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3Jk KElOVDMyX01JTiksICZub3RNaW5PdmVyZmxvdyk7CisrICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBtb3Zl MzIoSW1tMzIoSU5UMzJfTUlOKSwgZGVzdCk7CisrICAgIGp1bXAoJmRvbmUpOworKyAgICBiaW5k KCZub3RNaW5PdmVyZmxvdyk7CisrICB9CisrICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICBhc19k aXZ3dShkZXN0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc19kaXZ3KGRlc3QsIGxo cywgcmhzKTsKKysgIH0KKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgYmluZCgmZG9uZSk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9vbFdhc21UcnVuY2F0ZUNoZWNrRjMyVG9J MzIoCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIG91dHB1dCwgVHJ1bmNGbGFn cyBmbGFncywKKysgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsIExh YmVsKiByZWpvaW4pIHsKKysgIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50MzJDaGVjayhpbnB1 dCwgb3V0cHV0LCBNSVJUeXBlOjpGbG9hdDMyLCBmbGFncywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWpvaW4sIHRyYXBTaXRlRGVzYyk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om9vbFdhc21UcnVuY2F0ZUNoZWNrRjMyVG9JNjQoCisrICAgIEZsb2F0UmVn aXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBUcnVuY0ZsYWdzIGZsYWdzLAorKyAgICBj b25zdCB3YXNtOjpUcmFwU2l0ZURlc2MmIHRyYXBTaXRlRGVzYywgTGFiZWwqIHJlam9pbikgewor KyAgb3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKGlucHV0LCBvdXRwdXQsIE1JUlR5 cGU6OkZsb2F0MzIsIGZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlam9pbiwgdHJhcFNpdGVEZXNjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b29s V2FzbVRydW5jYXRlQ2hlY2tGNjRUb0kzMigKKysgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVn aXN0ZXIgb3V0cHV0LCBUcnVuY0ZsYWdzIGZsYWdzLAorKyAgICBjb25zdCB3YXNtOjpUcmFwU2l0 ZURlc2MmIHRyYXBTaXRlRGVzYywgTGFiZWwqIHJlam9pbikgeworKyAgb3V0T2ZMaW5lV2FzbVRy dW5jYXRlVG9JbnQzMkNoZWNrKGlucHV0LCBvdXRwdXQsIE1JUlR5cGU6OkRvdWJsZSwgZmxhZ3Ms CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqb2luLCB0cmFwU2l0ZURl c2MpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvb2xXYXNtVHJ1bmNhdGVDaGVja0Y2 NFRvSTY0KAorKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwgVHJ1 bmNGbGFncyBmbGFncywKKysgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURl c2MsIExhYmVsKiByZWpvaW4pIHsKKysgIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50NjRDaGVj ayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBlOjpEb3VibGUsIGZsYWdzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlam9pbiwgdHJhcFNpdGVEZXNjKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDMy Q2hlY2soCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIG91dHB1dCwgTUlSVHlw ZSBmcm9tVHlwZSwgVHJ1bmNGbGFncyBmbGFncywKKysgICAgTGFiZWwqIHJlam9pbiwgY29uc3Qg d2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MpIHsKKysgIGJvb2wgaXNVbnNpZ25lZCA9 IGZsYWdzICYgVFJVTkNfVU5TSUdORUQ7CisrICBib29sIGlzU2F0dXJhdGluZyA9IGZsYWdzICYg VFJVTkNfU0FUVVJBVElORzsKKysKKysgIGlmIChpc1NhdHVyYXRpbmcpIHsKKysgICAgU2NyYXRj aERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICAgIGlmIChmcm9tVHlwZSA9PSBN SVJUeXBlOjpEb3VibGUpIHsKKysgICAgICBhc01hc20oKS5sb2FkQ29uc3RhbnREb3VibGUoMC4w LCBmcHNjcmF0Y2gpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzTWFzbSgpLmxvYWRDb25zdGFu dEZsb2F0MzIoMC4wZiwgZnBzY3JhdGNoKTsKKysgICAgfQorKworKyAgICBpZiAoaXNVbnNpZ25l ZCkgeworKyAgICAgIC8vIElmIGlucHV0IDwgMCBvciBOYU4sIG91dHB1dCA9IDA7IGVsc2Ugb3V0 cHV0ID0gVUlOVDMyX01BWC4KKysgICAgICBMYWJlbCBub3ROZWdPck5hTjsKKysgICAgICBpZiAo ZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgICAgICBhc01hc20oKS5icmFuY2hE b3VibGUoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgJm5vdE5lZ09yTmFOKTsKKysgICAg ICB9IGVsc2UgeworKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3Vi bGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnBzY3JhdGNoLCAmbm90TmVnT3JOYU4pOworKyAgICAgIH0KKysgICAgICBhc01hc20oKS5t b3ZlMzIoSW1tMzIoMCksIG91dHB1dCk7CisrICAgICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOwor KyAgICAgIGFzTWFzbSgpLmJpbmQoJm5vdE5lZ09yTmFOKTsKKysgICAgICBhc01hc20oKS5tb3Zl MzIoSW1tMzIoVUlOVDMyX01BWCksIG91dHB1dCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8g U2lnbmVkOiBOYU4gLT4gMCwgbmVnYXRpdmUgb3ZlcmZsb3cgLT4gSU5UMzJfTUlOLAorKyAgICAg IC8vIHBvc2l0aXZlIG92ZXJmbG93IGFscmVhZHkgc2F0dXJhdGVkIHRvIElOVDMyX01BWC4KKysg ICAgICBMYWJlbCBub3ROYU4sIGRvbmU7CisrICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6 OkRvdWJsZSkgeworKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91 YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0LCAmbm90TmFOKTsKKysgICAgICB9IGVsc2UgeworKyAg ICAgICAgYXNNYXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3VibGVPcmRlcmVkLCBpbnB1 dCwgaW5wdXQsICZub3ROYU4pOworKyAgICAgIH0KKysgICAgICBhc01hc20oKS5tb3ZlMzIoSW1t MzIoMCksIG91dHB1dCk7CisrICAgICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOworKworKyAgICAg IGFzTWFzbSgpLmJpbmQoJm5vdE5hTik7CisrICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6 OkRvdWJsZSkgeworKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91 YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcHNjcmF0Y2gsIHJlam9pbik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzTWFz bSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1 dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgcmVqb2luKTsKKysg ICAgICB9CisrICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMyKElOVDMyX01JTiksIG91dHB1dCk7 CisrICAgIH0KKysKKysgICAgTU9aX0FTU0VSVChyZWpvaW4tPmJvdW5kKCkpOworKyAgICBhc01h c20oKS5qdW1wKHJlam9pbik7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIExhYmVsIGlucHV0 SXNOYU47CisrICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgIGFzTWFz bSgpLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgaW5wdXQsIGlucHV0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0SXNOYU4pOworKyAgfSBlbHNlIHsK KysgICAgYXNNYXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3VibGVVbm9yZGVyZWQsIGlu cHV0LCBpbnB1dCwgJmlucHV0SXNOYU4pOworKyAgfQorKworKyAgYXNNYXNtKCkud2FzbVRyYXAo d2FzbTo6VHJhcDo6SW50ZWdlck92ZXJmbG93LCB0cmFwU2l0ZURlc2MpOworKyAgYXNNYXNtKCku YmluZCgmaW5wdXRJc05hTik7CisrICBhc01hc20oKS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnZh bGlkQ29udmVyc2lvblRvSW50ZWdlciwgdHJhcFNpdGVEZXNjKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2so CisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0XywgTUlSVHlwZSBm cm9tVHlwZSwgVHJ1bmNGbGFncyBmbGFncywKKysgICAgTGFiZWwqIHJlam9pbiwgY29uc3Qgd2Fz bTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MpIHsKKysgIGJvb2wgaXNVbnNpZ25lZCA9IGZs YWdzICYgVFJVTkNfVU5TSUdORUQ7CisrICBib29sIGlzU2F0dXJhdGluZyA9IGZsYWdzICYgVFJV TkNfU0FUVVJBVElORzsKKysKKysgIGlmIChpc1NhdHVyYXRpbmcpIHsKKysgICAgU2NyYXRjaERv dWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIG91dHB1dCA9IG91 dHB1dF8ucmVnOworKworKyAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Cisr ICAgICAgYXNNYXNtKCkubG9hZENvbnN0YW50RG91YmxlKDAuMCwgZnBzY3JhdGNoKTsKKysgICAg fSBlbHNlIHsKKysgICAgICBhc01hc20oKS5sb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIGZwc2Ny YXRjaCk7CisrICAgIH0KKysKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBMYWJlbCBu b3ROZWdPck5hTjsKKysgICAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Cisr ICAgICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh bk9yRXF1YWwsIGlucHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRj aCwgJm5vdE5lZ09yTmFOKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgYXNNYXNtKCkuYnJh bmNoRmxvYXQoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCAmbm90TmVnT3JOYU4pOworKyAg ICAgIH0KKysgICAgICBhc01hc20oKS5tb3ZlUHRyKEltbVdvcmQoMCksIG91dHB1dCk7CisrICAg ICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOworKyAgICAgIGFzTWFzbSgpLmJpbmQoJm5vdE5lZ09y TmFOKTsKKysgICAgICBhc01hc20oKS5tb3ZlUHRyKEltbVdvcmQoVUlOVDY0X01BWCksIG91dHB1 dCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTGFiZWwgbm90TmFOOworKyAgICAgIGlmIChmcm9t VHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaERvdWJs ZShBc3NlbWJsZXI6OkRvdWJsZU9yZGVyZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5hTik7CisrICAg ICAgfSBlbHNlIHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91 YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0LCAmbm90TmFOKTsKKysgICAgICB9CisrICAgICAgYXNN YXNtKCkubW92ZVB0cihJbW1Xb3JkKDApLCBvdXRwdXQpOworKyAgICAgIGFzTWFzbSgpLmp1bXAo cmVqb2luKTsKKysKKysgICAgICBhc01hc20oKS5iaW5kKCZub3ROYU4pOworKyAgICAgIGlmIChm cm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaERv dWJsZShBc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCByZWpvaW4pOworKyAgICAgIH0gZWxz ZSB7CisrICAgICAgICBhc01hc20oKS5icmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZUdyZWF0 ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNj cmF0Y2gsIHJlam9pbik7CisrICAgICAgfQorKyAgICAgIGFzTWFzbSgpLm1vdmVQdHIoSW1tV29y ZChJTlQ2NF9NSU4pLCBvdXRwdXQpOworKyAgICB9CisrCisrICAgIE1PWl9BU1NFUlQocmVqb2lu LT5ib3VuZCgpKTsKKysgICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOworKyAgICByZXR1cm47Cisr ICB9CisrCisrICBMYWJlbCBpbnB1dElzTmFOOworKyAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6 OkRvdWJsZSkgeworKyAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVV bm9yZGVyZWQsIGlucHV0LCBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1 dElzTmFOKTsKKysgIH0gZWxzZSB7CisrICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxl cjo6RG91YmxlVW5vcmRlcmVkLCBpbnB1dCwgaW5wdXQsICZpbnB1dElzTmFOKTsKKysgIH0KKysK KysgIGFzTWFzbSgpLndhc21UcmFwKHdhc206OlRyYXA6OkludGVnZXJPdmVyZmxvdywgdHJhcFNp dGVEZXNjKTsKKysgIGFzTWFzbSgpLmJpbmQoJmlucHV0SXNOYU4pOworKyAgYXNNYXNtKCkud2Fz bVRyYXAod2FzbTo6VHJhcDo6SW52YWxpZENvbnZlcnNpb25Ub0ludGVnZXIsIHRyYXBTaXRlRGVz Yyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlBvcFN0YWNrUHRyKCkgeworKyAgbG9h ZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCksIFN0YWNrUG9pbnRlcik7CisrICBhZGp1c3RG cmFtZSgtaW50MzJfdChzaXplb2YoaW50cHRyX3QpKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnBhdGNoU3ViMzJGcm9tTWVtQW5kQnJhbmNoSWZOZWdhdGl2ZShDb2RlT2Zmc2V0IG9m ZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW1tMzIgaW1tKSB7CisrICBpbnQzMl90IHZhbCA9IGltbS52YWx1ZTsKKysgIE1P Wl9SRUxFQVNFX0FTU0VSVCh2YWwgPj0gMSAmJiB2YWwgPD0gMTI3KTsKKysgIC8vIFBhdGNoIHRo ZSBhZGRpIGluc3RydWN0aW9uIHRoYXQncyByaWdodCBiZWZvcmUgcGF0Y2hQb2ludC4KKysgIC8v IGFkZGkgaXMgMSBpbnN0cnVjdGlvbiBiZWZvcmUgdGhlIENvZGVPZmZzZXQgKHdoaWNoIGlzIGFm dGVyIHRoZSBhZGRpKS4KKysgIEluc3RydWN0aW9uKiBpbnN0ID0KKysgICAgICAoSW5zdHJ1Y3Rp b24qKW1fYnVmZmVyLmdldEluc3QoQnVmZmVyT2Zmc2V0KG9mZnNldC5vZmZzZXQoKSAtIDQpKTsK KysgIC8vIFJld3JpdGUgdGhlIGltbWVkaWF0ZSBmaWVsZCB0byAtdmFsLgorKyAgLy8gUFBDIGFk ZGk6IG9wY29kZSg2KSB8IFJUKDUpIHwgUkEoNSkgfCBTSSgxNikKKysgIHVpbnQzMl90IGluc3RX b3JkID0gaW5zdC0+ZW5jb2RlKCk7CisrICB1aW50MzJfdCBiYXNlID0gaW5zdFdvcmQgJiAweGZm ZmYwMDAwOworKyAgaW5zdC0+c2V0RGF0YShiYXNlIHwgKHVpbnQxNl90KSgtdmFsICYgMHhmZmZm KSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRvSW50 MzIoRmxvYXRSZWdpc3RlciBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1cmF0aW5nLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbEVudHJ5KSB7Cisr ICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIC8vIENsZWFyIFZY Q1ZJIChiaXQgMjMpIGJlZm9yZSB0aGUgY29udmVyc2lvbiBzbyB3ZSBjYW4gZGV0ZWN0IG92ZXJm bG93LgorKyAgYXNfbXRmc2IwKDIzKTsKKysgIGFzX2ZjdGl3eihmcHNjcmF0Y2gsIGlucHV0KTsK KysgIGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7CisrICBhc19leHRzdyhvdXRwdXQsIG91 dHB1dCk7CisrICAvLyBNb3ZlIEZQU0NSIGZpZWxkIDUgKHdoaWNoIGNvbnRhaW5zIFZYQ1ZJKSB0 byBDUjAuCisrICAvLyBJZiB0aGUgY29udmVyc2lvbiB3YXMgaW52YWxpZCAoTmFOIG9yIG91dC1v Zi1yYW5nZSksIFZYQ1ZJPTEg4oaSIFNPIHNldC4KKysgIGFzX21jcmZzKGNyMCwgNSk7CisrICBt YV9iKFNPQml0LCBvb2xFbnRyeSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21U cnVuY2F0ZURvdWJsZVRvVUludDMyKEZsb2F0UmVnaXN0ZXIgaW5wdXQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1 cmF0aW5nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBvb2xFbnRyeSkgeworKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01h c20oKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gQWx3YXlzIGNoZWNrIGZv ciBOYU4g4oCUIHRoZSBvb2wgaGFuZGxlciBjbGFtcHMgZm9yIHNhdHVyYXRpbmcgbW9kZS4KKysg IGFzX2ZjbXB1KGlucHV0LCBpbnB1dCk7CisrICBtYV9iKERvdWJsZVVub3JkZXJlZCwgb29sRW50 cnkpOworKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgaW5wdXQpOworKyAgYXNfbWZ2c3JkKG91dHB1 dCwgZnBzY3JhdGNoKTsKKysgIHhfc3JkaShzY3JhdGNoLCBvdXRwdXQsIDMyKTsKKysgIGFzX2V4 dHN3KG91dHB1dCwgb3V0cHV0KTsKKysgIGFzX2NtcGRpKHNjcmF0Y2gsIDApOworKyAgbWFfYihO b3RFcXVhbCwgb29sRW50cnkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1 bmNhdGVGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIGlucHV0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJh dGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogb29sRW50cnkpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNt KCkpOworKyAgYXNfbXRmc2IwKDIzKTsKKysgIGFzX2ZjdGl3eihmcHNjcmF0Y2gsIGlucHV0KTsK KysgIGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7CisrICBhc19leHRzdyhvdXRwdXQsIG91 dHB1dCk7CisrICBhc19tY3JmcyhjcjAsIDUpOworKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMyVG9VSW50MzIo RmxvYXRSZWdpc3RlciBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbEVudHJ5KSB7 CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICBhc19mY21wdShpbnB1dCwgaW5wdXQpOworKyAgbWFfYihEb3Vi bGVVbm9yZGVyZWQsIG9vbEVudHJ5KTsKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGlucHV0KTsK KysgIGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7CisrICB4X3NyZGkoc2NyYXRjaCwgb3V0 cHV0LCAzMik7CisrICBhc19leHRzdyhvdXRwdXQsIG91dHB1dCk7CisrICBhc19jbXBkaShzY3Jh dGNoLCAwKTsKKysgIG1hX2IoTm90RXF1YWwsIG9vbEVudHJ5KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRG91YmxlVG9JbnQ2NCgKKysgICAgRmxvYXRSZWdpc3Rl ciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29s RW50cnksCisrICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkg eworKyAgTU9aX0FTU0VSVCh0ZW1wRG91YmxlLmlzSW52YWxpZCgpKTsKKysgIFNjcmF0Y2hEb3Vi bGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgYXNfbXRmc2IwKDIzKTsKKysgIGFzX2Zj dGlkeihmcHNjcmF0Y2gsIGlucHV0KTsKKysgIGFzX21mdnNyZChvdXRwdXQucmVnLCBmcHNjcmF0 Y2gpOworKyAgYXNfbWNyZnMoY3IwLCA1KTsKKysgIG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKKysg IGlmIChpc1NhdHVyYXRpbmcpIHsKKysgICAgYmluZChvb2xSZWpvaW4pOworKyAgfQorK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMyVG9JbnQ2NCgKKysgICAg RmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIGJvb2wgaXNTYXR1cmF0aW5n LCBMYWJlbCogb29sRW50cnksCisrICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIg dGVtcEZsb2F0KSB7CisrICBNT1pfQVNTRVJUKHRlbXBGbG9hdC5pc0ludmFsaWQoKSk7CisrICBT Y3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIGFzX210ZnNiMCgyMyk7 CisrICBhc19mY3RpZHooZnBzY3JhdGNoLCBpbnB1dCk7CisrICBhc19tZnZzcmQob3V0cHV0LnJl ZywgZnBzY3JhdGNoKTsKKysgIGFzX21jcmZzKGNyMCwgNSk7CisrICBtYV9iKFNPQml0LCBvb2xF bnRyeSk7CisrICBpZiAoaXNTYXR1cmF0aW5nKSB7CisrICAgIGJpbmQob29sUmVqb2luKTsKKysg IH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRG91YmxlVG9VSW50 NjQoCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBib29sIGlz U2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAorKyAgICBMYWJlbCogb29sUmVqb2luLCBGbG9h dFJlZ2lzdGVyIHRlbXBEb3VibGUpIHsKKysgIE1PWl9BU1NFUlQodGVtcERvdWJsZS5pc0ludmFs aWQoKSk7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIGFz X210ZnNiMCgyMyk7CisrICBhc19mY3RpZHV6KGZwc2NyYXRjaCwgaW5wdXQpOworKyAgYXNfbWZ2 c3JkKG91dHB1dC5yZWcsIGZwc2NyYXRjaCk7CisrICBhc19tY3JmcyhjcjAsIDUpOworKyAgbWFf YihTT0JpdCwgb29sRW50cnkpOworKyAgaWYgKGlzU2F0dXJhdGluZykgeworKyAgICBiaW5kKG9v bFJlam9pbik7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0 ZUZsb2F0MzJUb1VJbnQ2NCgKKysgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBv dXRwdXQsIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCisrICAgIExhYmVsKiBv b2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcEZsb2F0KSB7CisrICBNT1pfQVNTRVJUKHRlbXBG bG9hdC5pc0ludmFsaWQoKSk7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFz bSgpKTsKKysgIGFzX210ZnNiMCgyMyk7CisrICBhc19mY3RpZHV6KGZwc2NyYXRjaCwgaW5wdXQp OworKyAgYXNfbWZ2c3JkKG91dHB1dC5yZWcsIGZwc2NyYXRjaCk7CisrICBhc19tY3JmcyhjcjAs IDUpOworKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOworKyAgaWYgKGlzU2F0dXJhdGluZykgewor KyAgICBiaW5kKG9vbFJlam9pbik7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQ UEM2NENvbXBhdDo6cHJvZmlsZXJFbnRlckZyYW1lKFJlZ2lzdGVyIGZyYW1lUHRyLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNj cmF0Y2gpIHsKKysgIGFzTWFzbSgpLmxvYWRKU0NvbnRleHQoc2NyYXRjaCk7CisrICBsb2FkUHRy KEFkZHJlc3Moc2NyYXRjaCwgb2Zmc2V0b2YoSlNDb250ZXh0LCBwcm9maWxpbmdBY3RpdmF0aW9u XykpLCBzY3JhdGNoKTsKKysgIHN0b3JlUHRyKGZyYW1lUHRyLAorKyAgICAgICAgICAgQWRkcmVz cyhzY3JhdGNoLCBKaXRBY3RpdmF0aW9uOjpvZmZzZXRPZkxhc3RQcm9maWxpbmdGcmFtZSgpKSk7 CisrICBzdG9yZVB0cihJbW1QdHIobnVsbHB0ciksCisrICAgICAgICAgICBBZGRyZXNzKHNjcmF0 Y2gsIEppdEFjdGl2YXRpb246Om9mZnNldE9mTGFzdFByb2ZpbGluZ0NhbGxTaXRlKCkpKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpwcm9maWxlckV4aXRGcmFtZSgp IHsKKysgIGp1bXAoYXNNYXNtKCkucnVudGltZSgpLT5qaXRSdW50aW1lKCktPmdldFByb2ZpbGVy RXhpdEZyYW1lVGFpbCgpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0 OjptYV9tb2RfbWFzayhSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBob2xkLCBSZWdpc3RlciBy ZW1haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz Ml90IHNoaWZ0LCBMYWJlbCogbmVnWmVybykgeworKyAgLy8gQ29tcHV0ZSB4ICUgKCgxPDxzaGlm dCkgLSAxKSBieSBkaWdpdC1zdW1taW5nIGluIGJhc2UgYiA9IDE8PHNoaWZ0LgorKyAgLy8gU2lu Y2UgYiAlIChiLTEpID09IDEsIHggJSAoYi0xKSA9PSBzdW0gb2YgYmFzZS1iIGRpZ2l0cyBvZiB4 LCBtb2QgKGItMSkuCisrICBpbnQzMl90IG1hc2sgPSAoMSA8PCBzaGlmdCkgLSAxOworKyAgTGFi ZWwgaGVhZCwgbmVnYXRpdmUsIHN1bVNpZ25lZCwgZG9uZTsKKysKKysgIGFzX29yXyhyZW1haW4s IHNyYywgc3JjKTsgIC8vIG1vdmUgc3JjIC0+IHJlbWFpbgorKyAgeHNfbGkoZGVzdCwgMCk7Cisr CisrICAvLyBDaGVjayBzaWduICgzMi1iaXQgc2lnbmVkIGNvbXBhcmlzb24pCisrICBhc19jbXB3 aShyZW1haW4sIDApOworKyAgbWFfYihBc3NlbWJsZXI6Okxlc3NUaGFuLCAmbmVnYXRpdmUpOwor KyAgeHNfbGkoaG9sZCwgMSk7CisrICBqdW1wKCZoZWFkKTsKKysKKysgIGJpbmQoJm5lZ2F0aXZl KTsKKysgIHhzX2xpKGhvbGQsIC0xKTsKKysgIGFzX25lZyhyZW1haW4sIHJlbWFpbik7CisrICBh c19ybGRpY2wocmVtYWluLCByZW1haW4sIDAsIDMyKTsKKysKKysgIGJpbmQoJmhlYWQpOworKyAg eworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICAgIC8vIEV4dHJhY3QgYm90 dG9tICdzaGlmdCcgYml0czogc2NyYXRjaCA9IHJlbWFpbiAmIG1hc2sKKysgICAgbW92ZTMyKElt bTMyKG1hc2spLCBzY3JhdGNoKTsKKysgICAgYXNfYW5kXyhzY3JhdGNoLCByZW1haW4sIHNjcmF0 Y2gpOworKworKyAgICAvLyBBZGQgdG8gYWNjdW11bGF0b3IKKysgICAgYXNfYWRkKGRlc3QsIGRl c3QsIHNjcmF0Y2gpOworKworKyAgICAvLyBUcmlhbCBzdWJ0cmFjdGlvbjogc2NyYXRjaCA9IGRl c3QgLSBtYXNrCisrICAgIG1vdmUzMihJbW0zMihtYXNrKSwgc2NyYXRjaCk7CisrICAgIGFzX3N1 YmYoc2NyYXRjaCwgc2NyYXRjaCwgZGVzdCk7ICAvLyBzY3JhdGNoID0gZGVzdCAtIHNjcmF0Y2gK KysKKysgICAgLy8gSWYgKGRlc3QgLSBtYXNrKSA+IDAsIGtlZXAgdGhlIHN1YnRyYWN0ZWQgdmFs dWUKKysgICAgYXNfY21wd2koc2NyYXRjaCwgMCk7CisrICAgIG1hX2IoQXNzZW1ibGVyOjpMZXNz VGhhbiwgJnN1bVNpZ25lZCk7CisrICAgIGFzX29yXyhkZXN0LCBzY3JhdGNoLCBzY3JhdGNoKTsg IC8vIGRlc3QgPSBzY3JhdGNoCisrICAgIGJpbmQoJnN1bVNpZ25lZCk7CisrCisrICAgIC8vIFNo aWZ0IG91dCB0aGUgYml0cyB3ZSBqdXN0IHByb2Nlc3NlZAorKyAgICB4X3Nyd2kocmVtYWluLCBy ZW1haW4sIHNoaWZ0KTsKKysKKysgICAgLy8gQ29udGludWUgaWYgcmVtYWluICE9IDAKKysgICAg YXNfY21wd2kocmVtYWluLCAwKTsKKysgICAgbWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmaGVh ZCk7CisrICB9CisrCisrICAvLyBJZiBpbnB1dCB3YXMgbmVnYXRpdmUsIG5lZ2F0ZSByZXN1bHQK KysgIGFzX2NtcHdpKGhvbGQsIDApOworKyAgbWFfYihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JF cXVhbCwgJmRvbmUpOworKworKyAgaWYgKG5lZ1plcm8gIT0gbnVsbHB0cikgeworKyAgICBhc19j bXB3aShkZXN0LCAwKTsKKysgICAgbWFfYihBc3NlbWJsZXI6OkVxdWFsLCBuZWdaZXJvKTsKKysg IH0KKysKKysgIGFzX25lZyhkZXN0LCBkZXN0KTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwor KworKyAgYmluZCgmZG9uZSk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIEF0b21p YyBvcGVyYXRpb25zLgorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIENv bXBhcmVFeGNoYW5nZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5 bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIg b2xkdmFsLCBSZWdpc3RlciBuZXd2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICBib29sIHNpZ25FeHRlbmQgPSBT Y2FsYXI6OmlzU2lnbmVkSW50VHlwZSh0eXBlKTsKKysgIHVuc2lnbmVkIG5ieXRlcyA9IFNjYWxh cjo6Ynl0ZVNpemUodHlwZSk7CisrCisrICBzd2l0Y2ggKG5ieXRlcykgeworKyAgICBjYXNlIDE6 CisrICAgIGNhc2UgMjoKKysgICAgICBicmVhazsKKysgICAgY2FzZSA0OgorKyAgICAgIE1PWl9B U1NFUlQodmFsdWVUZW1wID09IEludmFsaWRSZWcpOworKyAgICAgIE1PWl9BU1NFUlQob2Zmc2V0 VGVtcCA9PSBJbnZhbGlkUmVnKTsKKysgICAgICBNT1pfQVNTRVJUKG1hc2tUZW1wID09IEludmFs aWRSZWcpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgp OworKyAgfQorKworKyAgTGFiZWwgYWdhaW4sIGVuZDsKKysKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwg c2NyYXRjaCk7CisrCisrICBpZiAobmJ5dGVzID09IDQpIHsKKysgICAgbWFzbS5tZW1vcnlCYXJy aWVyQmVmb3JlKHN5bmMpOworKyAgICBtYXNtLmJpbmQoJmFnYWluKTsKKysKKysgICAgaWYgKGFj Y2VzcykgeworKyAgICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdh c21Mb2FkSW1wbAorKyAgICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5l SW5zbjo6QXRvbWljLAorKyAgICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNt LmN1cnJlbnRPZmZzZXQoKSkpOworKyAgICB9CisrCisrICAgIG1hc20uYXNfbHdhcngob3V0cHV0 LCByMCwgc2NyYXRjaCk7CisrICAgIC8vIG1hX2NtcCguLi4sIGlzMzJiaXQ9dHJ1ZSkgZW1pdHMg Y21wdywgd2hpY2ggY29tcGFyZXMgb25seSBiaXRzCisrICAgIC8vIDMyOjYzIChsb3cgMzIpIG9m IGJvdGggb3BlcmFuZHMgcGVyIElTQSB2My4wQi4gVGhlIHVwcGVyCisrICAgIC8vIDMyIGJpdHMg b2Ygb2xkdmFsIGFyZSBpZ25vcmVkLCBzbyBubyBjYW5vbmljYWxpc2luZyBleHRzdyBuZWVkZWQu CisrICAgIG1hc20ubWFfY21wKG91dHB1dCwgb2xkdmFsLCBBc3NlbWJsZXI6Ok5vdEVxdWFsLCAv KiBpczMyYml0ICovIHRydWUpOworKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwg JmVuZCk7CisrICAgIG1hc20uYXNfc3R3Y3gobmV3dmFsLCByMCwgc2NyYXRjaCk7CisrICAgIG1h c20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOworKworKyAgICBtYXNtLm1lbW9y eUJhcnJpZXJBZnRlcihzeW5jKTsKKysgICAgbWFzbS5iaW5kKCZlbmQpOworKyAgICAvLyBsd2Fy eCB6ZXJvLWV4dGVuZHM7IHNpZ24tZXh0ZW5kIGZvciAzMi1iaXQgY2Fub25pY2FsIGZvcm0uCisr ICAgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOworKworKyAgICByZXR1cm47CisrICB9 CisrCisrICAvLyBTdWItd29yZCAoMSBvciAyIGJ5dGUpIGNvbXBhcmUtZXhjaGFuZ2UgdmlhIG5h dGl2ZSBsYmFyeC9saGFyeCArCisrICAvLyBzdGJjeC4vc3RoY3guIFBPV0VSNysgKHdlbGwgYmVs b3cgb3VyIFBPV0VSOCBiYXNlbGluZSkuIFJlcGxhY2VzIHRoZSBwcmlvcgorKyAgLy8gcm91bmQt ZG93bi10by13b3JkCisrICAvLyArIG1hc2sgKyBSTVcgZGFuY2UuIGxYYXJ4IHplcm8tZXh0ZW5k cyB0aGUgbG9hZGVkIGJ5dGUvaGFsZjsgc3RYY3guIHN0b3JlcworKyAgLy8gb25seSB0aGUgbG93 IDgvMTYgYml0cyBvZiBSUywgc28gbm8gcHJlLW1hc2tpbmcgaXMgbmVlZGVkIG9uIHRoZSBzdG9y ZQorKyAgLy8gc2lkZS4gb2Zmc2V0VGVtcCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQg YnkgdGhlIGxvd2VyaW5nIGJ1dCB1bnVzZWQKKysgIC8vIGhlcmUuCisrICAodm9pZClvZmZzZXRU ZW1wOworKyAgKHZvaWQpbWFza1RlbXA7CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUo c3luYyk7CisrCisrICBtYXNtLmJpbmQoJmFnYWluKTsKKysKKysgIGlmIChhY2Nlc3MpIHsKKysg ICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisr ICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAor KyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkp KTsKKysgIH0KKysKKysgIHN3aXRjaCAobmJ5dGVzKSB7CisrICAgIGNhc2UgMToKKysgICAgICBt YXNtLmFzX2xiYXJ4KG91dHB1dCwgcjAsIHNjcmF0Y2gpOworKyAgICAgIGlmIChzaWduRXh0ZW5k KSB7CisrICAgICAgICBtYXNtLmFzX2V4dHNiKHZhbHVlVGVtcCwgb2xkdmFsKTsKKysgICAgICAg IG1hc20uYXNfZXh0c2Iob3V0cHV0LCBvdXRwdXQpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICBtYXNtLmFzX2FuZGlfcmModmFsdWVUZW1wLCBvbGR2YWwsIDB4ZmYpOworKyAgICAgIH0KKysg ICAgICBicmVhazsKKysgICAgY2FzZSAyOgorKyAgICAgIG1hc20uYXNfbGhhcngob3V0cHV0LCBy MCwgc2NyYXRjaCk7CisrICAgICAgaWYgKHNpZ25FeHRlbmQpIHsKKysgICAgICAgIG1hc20uYXNf ZXh0c2godmFsdWVUZW1wLCBvbGR2YWwpOworKyAgICAgICAgbWFzbS5hc19leHRzaChvdXRwdXQs IG91dHB1dCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNfcmx3aW5tKHZhbHVl VGVtcCwgb2xkdmFsLCAwLCAxNiwgMzEpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgIH0K KysKKysgIG1hc20ubWFfY21wKG91dHB1dCwgdmFsdWVUZW1wLCBBc3NlbWJsZXI6Ok5vdEVxdWFs LCAvKiBpczMyYml0ICovIHRydWUpOworKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWws ICZlbmQpOworKworKyAgaWYgKG5ieXRlcyA9PSAxKSB7CisrICAgIG1hc20uYXNfc3RiY3gobmV3 dmFsLCByMCwgc2NyYXRjaCk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX3N0aGN4KG5ld3Zh bCwgcjAsIHNjcmF0Y2gpOworKyAgfQorKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWws ICZhZ2Fpbik7CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKKysKKysgIG1h c20uYmluZCgmZW5kKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RhdGljIHZv aWQgQ29tcGFyZUV4Y2hhbmdlNjQoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25z dCBUJiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBleHBl Y3QsIFJlZ2lzdGVyNjQgcmVwbGFjZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlcjY0IG91dHB1dCkgeworKyAgTU9aX0FTU0VSVChleHBlY3QgIT0gb3V0cHV0ICYmIHJl cGxhY2UgIT0gb3V0cHV0KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1hc20uY29tcHV0 ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBzY3JhdGNoKTsKKysKKysgIExhYmVsIHRyeUFnYWluOwor KyAgTGFiZWwgZXhpdDsKKysKKysgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysK KysgIG1hc20uYmluZCgmdHJ5QWdhaW4pOworKworKyAgaWYgKGFjY2VzcykgeworKyAgICBtYXNt LmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKKysgICAgbWFz bS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCisrICAgICAg ICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOworKyAg fQorKworKyAgbWFzbS5hc19sZGFyeChvdXRwdXQucmVnLCByMCwgc2NyYXRjaCk7CisrCisrICBt YXNtLm1hX2NtcChvdXRwdXQucmVnLCBleHBlY3QucmVnLCBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsK KysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmZXhpdCk7CisrICBtYXNtLmFzX3N0 ZGN4KHJlcGxhY2UucmVnLCByMCwgc2NyYXRjaCk7CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpO b3RFcXVhbCwgJnRyeUFnYWluKTsKKysKKysgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMp OworKworKyAgbWFzbS5iaW5kKCZleGl0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Cisrc3RhdGljIHZvaWQgQXRvbWljRXhjaGFuZ2UoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNj ZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5j aHJvbml6YXRpb24gc3luYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBt ZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIGJvb2wgc2lnbkV4dGVuZCA9IFNjYWxhcjo6 aXNTaWduZWRJbnRUeXBlKHR5cGUpOworKyAgdW5zaWduZWQgbmJ5dGVzID0gU2NhbGFyOjpieXRl U2l6ZSh0eXBlKTsKKysKKysgIHN3aXRjaCAobmJ5dGVzKSB7CisrICAgIGNhc2UgMToKKysgICAg Y2FzZSAyOgorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDQ6CisrICAgICAgTU9aX0FTU0VSVCh2 YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7CisrICAgICAgTU9aX0FTU0VSVChvZmZzZXRUZW1wID09 IEludmFsaWRSZWcpOworKyAgICAgIE1PWl9BU1NFUlQobWFza1RlbXAgPT0gSW52YWxpZFJlZyk7 CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9 CisrCisrICBMYWJlbCBhZ2FpbjsKKysKKysgIFJlZ2lzdGVyIG1lbVRlbXAgPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgbWVtVGVtcCk7Cisr CisrICBpZiAobmJ5dGVzID09IDQpIHsKKysgICAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5 bmMpOworKyAgICBtYXNtLmJpbmQoJmFnYWluKTsKKysKKysgICAgaWYgKGFjY2VzcykgeworKyAg ICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAor KyAgICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWlj LAorKyAgICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZz ZXQoKSkpOworKyAgICB9CisrCisrICAgIG1hc20uYXNfbHdhcngob3V0cHV0LCByMCwgbWVtVGVt cCk7CisrICAgIG1hc20uYXNfc3R3Y3godmFsdWUsIHIwLCBtZW1UZW1wKTsKKysgICAgbWFzbS5t YV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7CisrCisrICAgIG1hc20ubWVtb3J5QmFy cmllckFmdGVyKHN5bmMpOworKyAgICAvLyBsd2FyeCB6ZXJvLWV4dGVuZHM7IHNpZ24tZXh0ZW5k IGZvciAzMi1iaXQgY2Fub25pY2FsIGZvcm0uCisrICAgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBv dXRwdXQpOworKworKyAgICByZXR1cm47CisrICB9CisrCisrICAvLyBTdWItd29yZCBleGNoYW5n ZSB2aWEgbmF0aXZlIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCisrICAv LyB2YWx1ZVRlbXAgLyBvZmZzZXRUZW1wIC8gbWFza1RlbXAgYXJlIHN0aWxsIGFsbG9jYXRlZCBi eSB0aGUgbG93ZXJpbmcgYnV0CisrICAvLyB1bnVzZWQgaGVyZS4KKysgICh2b2lkKXZhbHVlVGVt cDsKKysgICh2b2lkKW9mZnNldFRlbXA7CisrICAodm9pZCltYXNrVGVtcDsKKysKKysgIG1hc20u bWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysKKysgIG1hc20uYmluZCgmYWdhaW4pOworKwor KyAgaWYgKGFjY2VzcykgeworKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVu dCBpbiB3YXNtTG9hZEltcGwKKysgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1h Y2hpbmVJbnNuOjpBdG9taWMsCisrICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldCht YXNtLmN1cnJlbnRPZmZzZXQoKSkpOworKyAgfQorKworKyAgaWYgKG5ieXRlcyA9PSAxKSB7Cisr ICAgIG1hc20uYXNfbGJhcngob3V0cHV0LCByMCwgbWVtVGVtcCk7CisrICAgIG1hc20uYXNfc3Ri Y3godmFsdWUsIHIwLCBtZW1UZW1wKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfbGhhcngo b3V0cHV0LCByMCwgbWVtVGVtcCk7CisrICAgIG1hc20uYXNfc3RoY3godmFsdWUsIHIwLCBtZW1U ZW1wKTsKKysgIH0KKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOwor KworKyAgaWYgKHNpZ25FeHRlbmQpIHsKKysgICAgaWYgKG5ieXRlcyA9PSAxKSB7CisrICAgICAg bWFzbS5hc19leHRzYihvdXRwdXQsIG91dHB1dCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFz bS5hc19leHRzaChvdXRwdXQsIG91dHB1dCk7CisrICAgIH0KKysgIH0KKysgIC8vIFVuc2lnbmVk OiBsYmFyeC9saGFyeCBhbHJlYWR5IHplcm8tZXh0ZW5kOyBvdXRwdXQgaXMgY2Fub25pY2FsLgor KworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7CisrfQorKworK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIEF0b21pY0V4Y2hhbmdlNjQoTWFjcm9Bc3NlbWJsZXIm IG1hc20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpNZW1vcnlB Y2Nlc3NEZXNjKiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJv bml6YXRpb24gc3luYywgY29uc3QgVCYgbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIE1PWl9BU1NFUlQo dmFsdWUgIT0gb3V0cHV0KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OworKworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1hc20uY29t cHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBzY3JhdGNoKTsKKysKKysgIExhYmVsIHRyeUFnYWlu OworKworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOworKworKyAgbWFzbS5iaW5k KCZ0cnlBZ2Fpbik7CisrCisrICBpZiAoYWNjZXNzKSB7CisrICAgIG1hc20uZmx1c2hCdWZmZXIo KTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAorKyAgICBtYXNtLmFwcGVuZCgqYWNj ZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKKysgICAgICAgICAgICAgICAgRmF1 bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7CisrICB9CisrCisrICBtYXNt LmFzX2xkYXJ4KG91dHB1dC5yZWcsIHIwLCBzY3JhdGNoKTsKKysKKysgIG1hc20uYXNfc3RkY3go dmFsdWUucmVnLCByMCwgc2NyYXRjaCk7CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVh bCwgJnRyeUFnYWluKTsKKysKKysgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOworK30K KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdGF0aWMgdm9pZCBBdG9taWNGZXRjaE9wKE1h Y3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Fz bTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg U2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJl Z2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9m ZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNt KTsKKysgIGJvb2wgc2lnbkV4dGVuZCA9IFNjYWxhcjo6aXNTaWduZWRJbnRUeXBlKHR5cGUpOwor KyAgdW5zaWduZWQgbmJ5dGVzID0gU2NhbGFyOjpieXRlU2l6ZSh0eXBlKTsKKysKKysgIHN3aXRj aCAobmJ5dGVzKSB7CisrICAgIGNhc2UgMToKKysgICAgY2FzZSAyOgorKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIDQ6CisrICAgICAgTU9aX0FTU0VSVCh2YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7 CisrICAgICAgTU9aX0FTU0VSVChvZmZzZXRUZW1wID09IEludmFsaWRSZWcpOworKyAgICAgIE1P Wl9BU1NFUlQobWFza1RlbXAgPT0gSW52YWxpZFJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIGRl ZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9CisrCisrICBMYWJlbCBhZ2FpbjsKKysK KysgIFJlZ2lzdGVyIG1lbVRlbXAgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmNvbXB1dGVF ZmZlY3RpdmVBZGRyZXNzKG1lbSwgbWVtVGVtcCk7CisrCisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKworKyAgaWYgKG5ieXRlcyA9PSA0KSB7CisrICAgIG1hc20ubWVt b3J5QmFycmllckJlZm9yZShzeW5jKTsKKysgICAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisrICAg IGlmIChhY2Nlc3MpIHsKKysgICAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVu dCBpbiB3YXNtTG9hZEltcGwKKysgICAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFw TWFjaGluZUluc246OkF0b21pYywKKysgICAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZz ZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKKysgICAgfQorKworKyAgICBtYXNtLmFzX2x3YXJ4 KG91dHB1dCwgcjAsIG1lbVRlbXApOworKworKyAgICBzd2l0Y2ggKG9wKSB7CisrICAgICAgY2Fz ZSBBdG9taWNPcDo6QWRkOgorKyAgICAgICAgbWFzbS5hc19hZGQoc2NyYXRjaCwgb3V0cHV0LCB2 YWx1ZSk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEF0b21pY09wOjpTdWI6CisrICAg ICAgICBtYXNtLmFzX3N1YmYoc2NyYXRjaCwgdmFsdWUsIG91dHB1dCk7CisrICAgICAgICBicmVh azsKKysgICAgICBjYXNlIEF0b21pY09wOjpBbmQ6CisrICAgICAgICBtYXNtLmFzX2FuZF8oc2Ny YXRjaCwgb3V0cHV0LCB2YWx1ZSk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEF0b21p Y09wOjpPcjoKKysgICAgICAgIG1hc20uYXNfb3JfKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOwor KyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBBdG9taWNPcDo6WG9yOgorKyAgICAgICAgbWFz bS5hc194b3JfKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgpOworKyAgICB9CisrCisrICAgIG1hc20u YXNfc3R3Y3goc2NyYXRjaCwgcjAsIG1lbVRlbXApOworKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVy OjpOb3RFcXVhbCwgJmFnYWluKTsKKysKKysgICAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3lu Yyk7CisrICAgIC8vIGx3YXJ4IHplcm8tZXh0ZW5kczsgc2lnbi1leHRlbmQgZm9yIDMyLWJpdCBj YW5vbmljYWwgZm9ybS4KKysgICAgbWFzbS5hc19leHRzdyhvdXRwdXQsIG91dHB1dCk7CisrCisr ICAgIHJldHVybjsKKysgIH0KKysKKysgIC8vIFN1Yi13b3JkIGZldGNoLWFuZC1vcCB2aWEgbmF0 aXZlIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCisrICAvLyBgb3V0cHV0 YCBob2xkcyB0aGUgcHJlLW9wIGxvYWRlZCB2YWx1ZSAocmV0dXJuZWQgdG8gY2FsbGVyKTsgYHZh bHVlVGVtcGAKKysgIC8vIGlzIHRoZSBwb3N0LW9wIHZhbHVlIHdlIGNvbmRpdGlvbi1zdG9yZS4g c3RYY3guIG9ubHkgc3RvcmVzIGxvdyA4LzE2IGJpdHMKKysgIC8vIG9mIFJTLCBzbyBubyBwcmUt bWFzayBvZiB2YWx1ZVRlbXAgaXMgbmVlZGVkLgorKyAgLy8gb2Zmc2V0VGVtcCAvIG1hc2tUZW1w IGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkgdGhlIGxvd2VyaW5nIGJ1dCB1bnVzZWQ7IHRoZQorKyAg Ly8gbG9jYWwgYHNjcmF0Y2hgIGlzIG9ubHkgdXNlZCBpbiB0aGUgNC1ieXRlIGJyYW5jaCBhYm92 ZS4KKysgICh2b2lkKW9mZnNldFRlbXA7CisrICAodm9pZCltYXNrVGVtcDsKKysKKysgIG1hc20u bWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysKKysgIG1hc20uYmluZCgmYWdhaW4pOworKwor KyAgaWYgKGFjY2VzcykgeworKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVu dCBpbiB3YXNtTG9hZEltcGwKKysgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1h Y2hpbmVJbnNuOjpBdG9taWMsCisrICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldCht YXNtLmN1cnJlbnRPZmZzZXQoKSkpOworKyAgfQorKworKyAgaWYgKG5ieXRlcyA9PSAxKSB7Cisr ICAgIG1hc20uYXNfbGJhcngob3V0cHV0LCByMCwgbWVtVGVtcCk7CisrICB9IGVsc2UgeworKyAg ICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOworKyAgfQorKworKyAgc3dpdGNo IChvcCkgeworKyAgICBjYXNlIEF0b21pY09wOjpBZGQ6CisrICAgICAgbWFzbS5hc19hZGQodmFs dWVUZW1wLCBvdXRwdXQsIHZhbHVlKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBdG9taWNP cDo6U3ViOgorKyAgICAgIG1hc20uYXNfc3ViZih2YWx1ZVRlbXAsIHZhbHVlLCBvdXRwdXQpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIEF0b21pY09wOjpBbmQ6CisrICAgICAgbWFzbS5hc19h bmRfKHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug QXRvbWljT3A6Ok9yOgorKyAgICAgIG1hc20uYXNfb3JfKHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1 ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRvbWljT3A6OlhvcjoKKysgICAgICBtYXNt LmFzX3hvcl8odmFsdWVUZW1wLCBvdXRwdXQsIHZhbHVlKTsKKysgICAgICBicmVhazsKKysgICAg ZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goKTsKKysgIH0KKysKKysgIGlmIChuYnl0ZXMgPT0g MSkgeworKyAgICBtYXNtLmFzX3N0YmN4KHZhbHVlVGVtcCwgcjAsIG1lbVRlbXApOworKyAgfSBl bHNlIHsKKysgICAgbWFzbS5hc19zdGhjeCh2YWx1ZVRlbXAsIHIwLCBtZW1UZW1wKTsKKysgIH0K KysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOworKworKyAgaWYgKHNp Z25FeHRlbmQpIHsKKysgICAgaWYgKG5ieXRlcyA9PSAxKSB7CisrICAgICAgbWFzbS5hc19leHRz YihvdXRwdXQsIG91dHB1dCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5hc19leHRzaChv dXRwdXQsIG91dHB1dCk7CisrICAgIH0KKysgIH0KKysgIC8vIFVuc2lnbmVkOiBsYmFyeC9saGFy eCBhbHJlYWR5IHplcm8tZXh0ZW5kOyBvdXRwdXQgaXMgY2Fub25pY2FsLgorKworKyAgbWFzbS5t ZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor K3N0YXRpYyB2b2lkIEF0b21pY0ZldGNoT3A2NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNj ZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywg QXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkgewor KyAgTU9aX0FTU0VSVCh2YWx1ZSAhPSBvdXRwdXQpOworKyAgTU9aX0FTU0VSVCh2YWx1ZSAhPSB0 ZW1wKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFk ZHJlc3MobWVtLCBzY3JhdGNoKTsKKysKKysgIExhYmVsIHRyeUFnYWluOworKworKyAgbWFzbS5t ZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOworKworKyAgbWFzbS5iaW5kKCZ0cnlBZ2Fpbik7Cisr CisrICBpZiAoYWNjZXNzKSB7CisrICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21t ZW50IGluIHdhc21Mb2FkSW1wbAorKyAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFw TWFjaGluZUluc246OkF0b21pYywKKysgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0 KG1hc20uY3VycmVudE9mZnNldCgpKSk7CisrICB9CisrCisrICBtYXNtLmFzX2xkYXJ4KG91dHB1 dC5yZWcsIHIwLCBzY3JhdGNoKTsKKysKKysgIHN3aXRjaCAob3ApIHsKKysgICAgY2FzZSBBdG9t aWNPcDo6QWRkOgorKyAgICAgIG1hc20uYXNfYWRkKHRlbXAucmVnLCBvdXRwdXQucmVnLCB2YWx1 ZS5yZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEF0b21pY09wOjpTdWI6CisrICAgICAg bWFzbS5hc19zdWJmKHRlbXAucmVnLCB2YWx1ZS5yZWcsIG91dHB1dC5yZWcpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIEF0b21pY09wOjpBbmQ6CisrICAgICAgbWFzbS5hc19hbmRfKHRlbXAu cmVnLCBvdXRwdXQucmVnLCB2YWx1ZS5yZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEF0 b21pY09wOjpPcjoKKysgICAgICBtYXNtLmFzX29yXyh0ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFs dWUucmVnKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBdG9taWNPcDo6WG9yOgorKyAgICAg IG1hc20uYXNfeG9yXyh0ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFsdWUucmVnKTsKKysgICAgICBi cmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goKTsKKysgIH0KKysKKysgIG1h c20uYXNfc3RkY3godGVtcC5yZWcsIHIwLCBzY3JhdGNoKTsKKysgIG1hc20ubWFfYihBc3NlbWJs ZXI6Ok5vdEVxdWFsLCAmdHJ5QWdhaW4pOworKworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIo c3luYyk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIEF0b21p Y0VmZmVjdE9wKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICBTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0 b21pY09wIG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVn aXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICB1bnNpZ25lZCBuYnl0ZXMgPSBTY2Fs YXI6OmJ5dGVTaXplKHR5cGUpOworKworKyAgc3dpdGNoIChuYnl0ZXMpIHsKKysgICAgY2FzZSAx OgorKyAgICBjYXNlIDI6CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDoKKysgICAgICBNT1pf QVNTRVJUKHZhbHVlVGVtcCA9PSBJbnZhbGlkUmVnKTsKKysgICAgICBNT1pfQVNTRVJUKG9mZnNl dFRlbXAgPT0gSW52YWxpZFJlZyk7CisrICAgICAgTU9aX0FTU0VSVChtYXNrVGVtcCA9PSBJbnZh bGlkUmVnKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0go KTsKKysgIH0KKysKKysgIExhYmVsIGFnYWluOworKworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBzY3Jh dGNoKTsKKysKKysgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAg aWYgKG5ieXRlcyA9PSA0KSB7CisrICAgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsK KysgICAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisrICAgIGlmIChhY2Nlc3MpIHsKKysgICAgICBt YXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKKysgICAg ICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKKysg ICAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkp KTsKKysgICAgfQorKworKyAgICBtYXNtLmFzX2x3YXJ4KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7 CisrCisrICAgIHN3aXRjaCAob3ApIHsKKysgICAgICBjYXNlIEF0b21pY09wOjpBZGQ6CisrICAg ICAgICBtYXNtLmFzX2FkZChzY3JhdGNoMiwgc2NyYXRjaDIsIHZhbHVlKTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIGNhc2UgQXRvbWljT3A6OlN1YjoKKysgICAgICAgIG1hc20uYXNfc3ViZihz Y3JhdGNoMiwgdmFsdWUsIHNjcmF0Y2gyKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2Ug QXRvbWljT3A6OkFuZDoKKysgICAgICAgIG1hc20uYXNfYW5kXyhzY3JhdGNoMiwgc2NyYXRjaDIs IHZhbHVlKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgQXRvbWljT3A6Ok9yOgorKyAg ICAgICAgbWFzbS5hc19vcl8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgICBi cmVhazsKKysgICAgICBjYXNlIEF0b21pY09wOjpYb3I6CisrICAgICAgICBtYXNtLmFzX3hvcl8o c2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZh dWx0OgorKyAgICAgICAgTU9aX0NSQVNIKCk7CisrICAgIH0KKysKKysgICAgbWFzbS5hc19zdHdj eChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOworKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RF cXVhbCwgJmFnYWluKTsKKysKKysgICAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7Cisr CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIC8vIFN1Yi13b3JkIGVmZmVjdC1vbmx5IG9wIHZp YSBuYXRpdmUgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guIChQT1dFUjcrKS4KKysgIC8vIE5v IG91dHB1dCB0byByZXR1cm47IHNjcmF0Y2gyIGhvbGRzIHRoZSBsb2FkK29wK3N0b3JlIHZhbHVl LgorKyAgLy8gdmFsdWVUZW1wIC8gb2Zmc2V0VGVtcCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxv Y2F0ZWQgYnkgdGhlIGxvd2VyaW5nIGJ1dAorKyAgLy8gdW51c2VkIGhlcmUuCisrICAodm9pZCl2 YWx1ZVRlbXA7CisrICAodm9pZClvZmZzZXRUZW1wOworKyAgKHZvaWQpbWFza1RlbXA7CisrCisr ICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7CisrCisrICBtYXNtLmJpbmQoJmFnYWlu KTsKKysKKysgIGlmIChhY2Nlc3MpIHsKKysgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2Vl IGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206 OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAorKyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVP ZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKKysgIH0KKysKKysgIGlmIChuYnl0ZXMgPT0g MSkgeworKyAgICBtYXNtLmFzX2xiYXJ4KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7CisrICB9IGVs c2UgeworKyAgICBtYXNtLmFzX2xoYXJ4KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7CisrICB9Cisr CisrICBzd2l0Y2ggKG9wKSB7CisrICAgIGNhc2UgQXRvbWljT3A6OkFkZDoKKysgICAgICBtYXNt LmFzX2FkZChzY3JhdGNoMiwgc2NyYXRjaDIsIHZhbHVlKTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSBBdG9taWNPcDo6U3ViOgorKyAgICAgIG1hc20uYXNfc3ViZihzY3JhdGNoMiwgdmFsdWUs IHNjcmF0Y2gyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBdG9taWNPcDo6QW5kOgorKyAg ICAgIG1hc20uYXNfYW5kXyhzY3JhdGNoMiwgc2NyYXRjaDIsIHZhbHVlKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBBdG9taWNPcDo6T3I6CisrICAgICAgbWFzbS5hc19vcl8oc2NyYXRjaDIs IHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRvbWljT3A6Olhv cjoKKysgICAgICBtYXNtLmFzX3hvcl8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAg ICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9CisrCisr ICBpZiAobmJ5dGVzID09IDEpIHsKKysgICAgbWFzbS5hc19zdGJjeChzY3JhdGNoMiwgcjAsIHNj cmF0Y2gpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hc19zdGhjeChzY3JhdGNoMiwgcjAsIHNj cmF0Y2gpOworKyAgfQorKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7 CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKKyt9CisrCisrLy8gUHVibGlj IE1hY3JvQXNzZW1ibGVyIG1ldGhvZHMuCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFy ZUV4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdp c3RlciBvbGR2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIG5ld3ZhbCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7Cisr ICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG1lbSwgb2xkdmFs LCBuZXd2YWwsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNr VGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hh bmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVy IG9sZHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg bmV3dmFsLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKKysgIENv bXBhcmVFeGNoYW5nZSgqdGhpcywgbnVsbHB0ciwgdHlwZSwgc3luYywgbWVtLCBvbGR2YWwsIG5l d3ZhbCwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1w LCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRXhjaGFuZ2U2 NChTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgQWRkcmVzcyYgbWVtLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0LCBSZWdpc3RlcjY0 IHJlcGxhY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXI2NCBvdXRwdXQpIHsKKysgIENvbXBhcmVFeGNoYW5nZTY0KCp0aGlzLCBudWxscHRyLCBzeW5j LCBtZW0sIGV4cGVjdCwgcmVwbGFjZSwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y29tcGFyZUV4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lz dGVyNjQgZXhwZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyNjQgcmVwbGFjZSwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIENvbXBhcmVFeGNoYW5n ZTY0KCp0aGlzLCBudWxscHRyLCBzeW5jLCBtZW0sIGV4cGVjdCwgcmVwbGFjZSwgb3V0cHV0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZShjb25zdCB3 YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG5ld3ZhbCwg UmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKKysgIENv bXBhcmVFeGNoYW5nZSgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMo KSwgbWVtLCBvbGR2YWwsCisrICAgICAgICAgICAgICAgICAgbmV3dmFsLCB2YWx1ZVRlbXAsIG9m ZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp3YXNtQ29tcGFyZUV4Y2hhbmdlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vz cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJ bmRleCYgbWVtLCBSZWdpc3RlciBvbGR2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAs IFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMsICZhY2Nl c3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG1lbSwgb2xkdmFsLAorKyAgICAgICAg ICAgICAgICAgIG5ld3ZhbCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZTY0KGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGV4cGVjdCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByZXBsYWNl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0 IG91dHB1dCkgeworKyAgQ29tcGFyZUV4Y2hhbmdlNjQoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy5z eW5jKCksIG1lbSwgZXhwZWN0LCByZXBsYWNlLAorKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZTY0KGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJlcGxh Y2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy NjQgb3V0cHV0KSB7CisrICBDb21wYXJlRXhjaGFuZ2U2NCgqdGhpcywgJmFjY2VzcywgYWNjZXNz LnN5bmMoKSwgbWVtLCBleHBlY3QsIHJlcGxhY2UsCisrICAgICAgICAgICAgICAgICAgICBvdXRw dXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZShTY2FsYXI6 OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lz dGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgQXRvbWljRXhjaGFuZ2UoKnRo aXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVt cCwKKysgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25p emF0aW9uIHN5bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVn aXN0ZXIgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZSgqdGhpcywgbnVsbHB0ciwgdHlwZSwg c3luYywgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAg ICAgbWFza1RlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21p Y0V4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIFJl Z2lzdGVyNjQgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZTY0KCp0aGlzLCBudWxscHRyLCBz eW5jLCBtZW0sIHZhbHVlLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph dG9taWNFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgdmFs dWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91 dHB1dCkgeworKyAgQXRvbWljRXhjaGFuZ2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCB2 YWx1ZSwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0V4 Y2hhbmdlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3Rl ciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KSB7 CisrICBBdG9taWNFeGNoYW5nZSgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNz LnN5bmMoKSwgbWVtLCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0 VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondh c21BdG9taWNFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYg bWVtLCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0 ZXIgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZSgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5 cGUoKSwgYWNjZXNzLnN5bmMoKSwgbWVtLCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgIHZhbHVl VGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7CisrfQorKworK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIFdhc21BdG9taWNFeGNoYW5nZTY0KE1hY3JvQXNzZW1i bGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206 Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyNjQgdmFsdWUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIEF0b21pY0V4Y2hhbmdlNjQo bWFzbSwgJmFjY2VzcywgYWNjZXNzLnN5bmMoKSwgbWVtLCB2YWx1ZSwgb3V0cHV0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0V4Y2hhbmdlNjQoY29uc3Qgd2FzbTo6 TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2NCBzcmMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsK KysgIFdhc21BdG9taWNFeGNoYW5nZTY0KCp0aGlzLCBhY2Nlc3MsIG1lbSwgc3JjLCBvdXRwdXQp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRXhjaGFuZ2U2NChjb25z dCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQg b3V0cHV0KSB7CisrICBXYXNtQXRvbWljRXhjaGFuZ2U2NCgqdGhpcywgYWNjZXNzLCBtZW0sIHNy Yywgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcChT Y2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVy IHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBBdG9taWNGZXRjaE9wKCp0aGlzLCBu dWxscHRyLCB0eXBlLCBzeW5jLCBvcCwgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLAorKyAgICAgICAg ICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcChTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0 aW9uIHN5bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBv cCwgUmVnaXN0ZXIgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1Rl bXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQp IHsKKysgIEF0b21pY0ZldGNoT3AoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG9wLCBtZW0s IHZhbHVlLCB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1w LCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNGZXRjaE9wNjQo U3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdGVtcCwgUmVn aXN0ZXI2NCBvdXRwdXQpIHsKKysgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywgbnVsbHB0ciwgc3lu Yywgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmF0b21pY0ZldGNoT3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3As CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUs IGNvbnN0IEJhc2VJbmRleCYgbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7CisrICBBdG9taWNGZXRj aE9wNjQoKnRoaXMsIG51bGxwdHIsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB0ZW1wLCBvdXRwdXQp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFZmZlY3RPcDY0KFN5bmNocm9u aXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdGVtcCkgeworKyAgQXRv bWljRmV0Y2hPcDY0KCp0aGlzLCBudWxscHRyLCBzeW5jLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwg dGVtcCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0VmZmVjdE9wNjQoU3lu Y2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXApIHsK KysgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgb3AsIHZhbHVlLCBtZW0s IHRlbXAsIHRlbXApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRmV0 Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1l bSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgQXRv bWljRmV0Y2hPcCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwg b3AsIG1lbSwgdmFsdWUsCisrICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwg bWFza1RlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9t aWNGZXRjaE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFs dWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUlu ZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsK KysgIEF0b21pY0ZldGNoT3AoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5z eW5jKCksIG9wLCBtZW0sIHZhbHVlLAorKyAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNl dFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3 YXNtQXRvbWljRmV0Y2hPcDY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBS ZWdpc3RlcjY0IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlcjY0IHRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgeworKyAgQXRvbWlj RmV0Y2hPcDY0KCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3Muc3luYygpLCBvcCwgdmFsdWUsIG1lbSwg dGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0Zl dGNoT3A2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2 YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJh c2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IHRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgeworKyAgQXRvbWljRmV0Y2hPcDY0 KCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3Muc3luYygpLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwgb3V0 cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0VmZmVjdE9wKGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJl Z2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApIHsKKysgIEF0b21pY0VmZmVjdE9wKCp0aGlzLCAm YWNjZXNzLCBhY2Nlc3MudHlwZSgpLCBhY2Nlc3Muc3luYygpLCBvcCwgbWVtLCB2YWx1ZSwKKysg ICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRWZmZWN0T3AoY29uc3Qgd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVy IG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG1hc2tUZW1wKSB7CisrICBBdG9taWNFZmZlY3RPcCgqdGhpcywgJmFjY2VzcywgYWNj ZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgb3AsIG1lbSwgdmFsdWUsCisrICAgICAgICAgICAg ICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKyt9CisrCisrLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrLy8gSlMgYXRvbWljIG9wZXJhdGlvbnMuCisrCisrdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Cisrc3RhdGljIHZvaWQgQ29tcGFyZUV4Y2hhbmdlSlMoTWFjcm9Bc3NlbWJsZXImIG1h c20sIFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IFQmIG1lbSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvbGR2YWwsIFJlZ2lzdGVyIG5ld3ZhbCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNl dFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAs IFJlZ2lzdGVyIHRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0 ZXIgb3V0cHV0KSB7CisrICBpZiAoYXJyYXlUeXBlID09IFNjYWxhcjo6VWludDMyKSB7CisrICAg IG1hc20uY29tcGFyZUV4Y2hhbmdlKGFycmF5VHlwZSwgc3luYywgbWVtLCBvbGR2YWwsIG5ld3Zh bCwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNr VGVtcCwgdGVtcCk7CisrICAgIG1hc20uY29udmVydFVJbnQzMlRvRG91YmxlKHRlbXAsIG91dHB1 dC5mcHUoKSk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmNvbXBhcmVFeGNoYW5nZShhcnJheVR5 cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dC5ncHIoKSk7CisrICB9Cisr fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIEF0b21pY0V4Y2hhbmdl SlMoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgVCYgbWVt LCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBpZiAoYXJyYXlUeXBlID09 IFNjYWxhcjo6VWludDMyKSB7CisrICAgIG1hc20uYXRvbWljRXhjaGFuZ2UoYXJyYXlUeXBlLCBz eW5jLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgbWFza1RlbXAsIHRlbXApOworKyAgICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJs ZSh0ZW1wLCBvdXRwdXQuZnB1KCkpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hdG9taWNFeGNo YW5nZShhcnJheVR5cGUsIHN5bmMsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwK KysgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgb3V0cHV0LmdwcigpKTsKKysgIH0K Kyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RhdGljIHZvaWQgQXRvbWljRmV0Y2hP cEpTKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3As IFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBt ZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIEFueVJlZ2lzdGVyIG91dHB1dCkgeworKyAgaWYgKGFy cmF5VHlwZSA9PSBTY2FsYXI6OlVpbnQzMikgeworKyAgICBtYXNtLmF0b21pY0ZldGNoT3AoYXJy YXlUeXBlLCBzeW5jLCBvcCwgdmFsdWUsIG1lbSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAorKyAg ICAgICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIHRlbXApOworKyAgICBtYXNtLmNvbnZlcnRV SW50MzJUb0RvdWJsZSh0ZW1wLCBvdXRwdXQuZnB1KCkpOworKyAgfSBlbHNlIHsKKysgICAgbWFz bS5hdG9taWNGZXRjaE9wKGFycmF5VHlwZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZhbHVlVGVt cCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCBvdXRwdXQu Z3ByKCkpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRXhjaGFu Z2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2xkdmFsLCBS ZWdpc3RlciBuZXd2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1w LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91 dHB1dCkgeworKyAgQ29tcGFyZUV4Y2hhbmdlSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgbWVt LCBvbGR2YWwsIG5ld3ZhbCwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0 VGVtcCwgbWFza1RlbXAsIHRlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNvbXBhcmVFeGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0s IFJlZ2lzdGVyIG9sZHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNr VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0 ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQpIHsKKysgIENvbXBhcmVFeGNoYW5nZUpTKCp0aGlzLCBh cnJheVR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKKysgICAgICAg ICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCB0ZW1wLCBvdXRwdXQpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJh eVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6 YXRpb24gc3luYywgY29uc3QgQWRkcmVzcyYgbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJl Z2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZUpT KCp0aGlzLCBhcnJheVR5cGUsIHN5bmMsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVt cCwKKysgICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIHRlbXAsIG91dHB1dCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0V4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5 VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXph dGlvbiBzeW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAs IFJlZ2lzdGVyIHRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB bnlSZWdpc3RlciBvdXRwdXQpIHsKKysgIEF0b21pY0V4Y2hhbmdlSlMoKnRoaXMsIGFycmF5VHlw ZSwgc3luYywgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAorKyAgICAgICAgICAg ICAgICAgICBtYXNrVGVtcCwgdGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YXRvbWljRmV0Y2hPcEpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNP cCBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFs dWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIg dGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIg b3V0cHV0KSB7CisrICBBdG9taWNGZXRjaE9wSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgb3As IHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICBt YXNrVGVtcCwgdGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRv bWljRmV0Y2hPcEpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0 IEJhc2VJbmRleCYgbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQp IHsKKysgIEF0b21pY0ZldGNoT3BKUygqdGhpcywgYXJyYXlUeXBlLCBzeW5jLCBvcCwgdmFsdWUs IG1lbSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgIG1hc2tUZW1w LCB0ZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFZmZl Y3RPcEpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFz ZUluZGV4JiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkgeworKyAgQXRvbWljRWZmZWN0 T3AoKnRoaXMsIG51bGxwdHIsIGFycmF5VHlwZSwgc3luYywgb3AsIG1lbSwgdmFsdWUsIHZhbHVl VGVtcCwKKysgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRWZmZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlU eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0 aW9uIHN5bmMsIEF0b21pY09wIG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zm c2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG1hc2tUZW1wKSB7CisrICBBdG9taWNFZmZlY3RPcCgqdGhpcywgbnVsbHB0ciwgYXJyYXlUeXBl LCBzeW5jLCBvcCwgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgb2Zm c2V0VGVtcCwgbWFza1RlbXApOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBXYXNt IGFkZHJlc3Mgb2Zmc2V0IGNhcnJ5IHRlc3RzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2 NENvbXBhdDo6bWFfYWRkMzJUZXN0Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgcnMsIEltbTMyIGltbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExhYmVsKiBvdmVyZmxvdykgeworKyAgTU9aX0FTU0VSVChjb25kID09IEFz c2VtYmxlcjo6Q2FycnlTZXQgfHwgY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5Q2xlYXIpOworKyAg aWYgKHJkICE9IHJzKSB7CisrICAgIGFzTWFzbSgpLm1vdmUzMihycywgcmQpOworKyAgICBhc01h c20oKS5hZGQzMihpbW0sIHJkKTsKKysgICAgYXNfY21wbHcocmQsIHJzKTsKKysgIH0gZWxzZSB7 CisrICAgIC8vIHZpc2l0V2FzbUFkZE9mZnNldCB1c2VzIHVzZVJlZ2lzdGVyQXRTdGFydCwgc28g dGhlIExJUiBhbGxvY2F0b3IgbWF5CisrICAgIC8vIGNvbGxhcHNlIHJkIG9udG8gcnMuIG1vdmUz MiArIGFkZDMyIHdvdWxkIGNsb2JiZXIgcnMgYmVmb3JlIHRoZQorKyAgICAvLyBjb21wYXJlOyBz YXZlIHJzIHRvIGEgc2NyYXRjaCBmaXJzdC4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBhc01hc20oKS5tb3ZlMzIocnMsIHNjcmF0Y2gpOworKyAgICBhc01hc20oKS5hZGQzMihp bW0sIHJkKTsKKysgICAgYXNfY21wbHcocmQsIHNjcmF0Y2gpOworKyAgfQorKyAgbWFfYihjb25k ID09IEFzc2VtYmxlcjo6Q2FycnlTZXQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwg b3ZlcmZsb3cpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Om1hX2Fk ZFB0clRlc3RDYXJyeShDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgcmQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcnMsIEltbVdv cmQgaW1tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBvdmVyZmxvdykgeworKyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6 Q2FycnlTZXQgfHwgY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5Q2xlYXIpOworKyAgaWYgKHJkICE9 IHJzKSB7CisrICAgIGFzTWFzbSgpLm1vdmVQdHIocnMsIHJkKTsKKysgICAgYXNNYXNtKCkuYWRk UHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgcmQpOworKyAgICBhc19jbXBsZChyZCwgcnMpOworKyAg fSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBhc01hc20oKS5tb3Zl UHRyKHJzLCBzY3JhdGNoKTsKKysgICAgYXNNYXNtKCkuYWRkUHRyKEltbVdvcmQoaW1tLnZhbHVl KSwgcmQpOworKyAgICBhc19jbXBsZChyZCwgc2NyYXRjaCk7CisrICB9CisrICBtYV9iKGNvbmQg PT0gQXNzZW1ibGVyOjpDYXJyeVNldCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBv dmVyZmxvdyk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFdhc20gbG9hZC9zdG9y ZSBoZWxwZXJzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbVByb2Jl TGFzdEJ5dGUoCisrICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVn aXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyKSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsK KysgICAgcmV0dXJuOworKyAgfQorKyAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IFNjYWxhcjo6Ynl0 ZVNpemUoYWNjZXNzLnR5cGUoKSk7CisrICBpZiAoc2l6ZSA8PSAxKSB7CisrICAgIHJldHVybjsK KysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJl Z2lzdGVyIHByb2JlQWRkciA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIC8vIHNpemUgaXMgYXQgbW9z dCAxNiAoU2ltZDEyOCksIHdlbGwgd2l0aGluIHRoZSBpbnQxNl90IHJhbmdlIG9mIGFzX2FkZGku CisrICBhc19hZGRpKHByb2JlQWRkciwgcHRyLCBpbnQxNl90KHNpemUgLSAxKSk7CisrICAvLyBS ZWNvcmQgdGhlIHByb2JlIGFzIGEgd2FzbSB0cmFwIHNpdGUgc28gaXRzIFNJR1NFR1YgZGlzcGF0 Y2hlcworKyAgLy8gdGhyb3VnaCB0aGUgd2FzbSBzaWduYWwgaGFuZGxlciB0aGUgc2FtZSB3YXkg dGhlIHJlYWwgYWNjZXNzIHdvdWxkLgorKyAgbV9idWZmZXIuZmx1c2hQb29sKCk7CisrICBhcHBl bmQoYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkxvYWQ4LAorKyAgICAgICAgIEZhdWx0 aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKKysgIC8vIFByb2JpbmcgMS1ieXRlIGxv YWQ7IHJlc3VsdCBkaXNjYXJkZWQuCisrICBhc19sYnp4KHByb2JlQWRkciwgbWVtb3J5QmFzZSwg cHJvYmVBZGRyKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp3YXNt TG9hZEltcGwoCisrICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVn aXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLAorKyAgICBSZWdpc3RlciBwdHJTY3JhdGNo LCBBbnlSZWdpc3RlciBvdXRwdXQpIHsKKysgIGFjY2Vzcy5hc3NlcnRPZmZzZXRJbkd1YXJkUGFn ZXMoKTsKKysgIHVpbnQzMl90IG9mZnNldCA9IGFjY2Vzcy5vZmZzZXQzMigpOworKyAgTU9aX0FT U0VSVF9JRihvZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyk7CisrCisrICBpZiAob2Zm c2V0KSB7CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gp OworKyAgICBwdHIgPSBwdHJTY3JhdGNoOworKyAgfQorKworKyAgd2FzbVByb2JlTGFzdEJ5dGUo YWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIpOworKworKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJl Zm9yZShhY2Nlc3Muc3luYygpKTsKKysgIC8vIEZsdXNoIGFueSBwZW5kaW5nIGNvbnN0YW50IHBv b2wgZW50cmllcyBiZWZvcmUgcmVjb3JkaW5nIHRoZSB0cmFwIHNpdGUsCisrICAvLyBvdGhlcndp c2UgYSBwb29sIGJvZHkgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgcmVjb3JkZWQgb2Zmc2V0IGFuZCB0 aGUKKysgIC8vIGVtaXR0ZWQgbG9hZCBzaGlmdHMgdGhlIGxvYWQgYW5kIGxlYXZlcyB0aGUgcG9v bCBndWFyZCBicmFuY2ggYXQgdGhlCisrICAvLyByZWNvcmRlZCBvZmZzZXQgKFN1bW1hcml6ZVRy YXBJbnN0cnVjdGlvbiB0aGVuIHJlamVjdHMgdGhlIHRyYXAgc2l0ZSkuCisrICBtX2J1ZmZlci5m bHVzaFBvb2woKTsKKysgIGFwcGVuZChhY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvckxv YWQoU2NhbGFyOjpieXRlU2l6ZShhY2Nlc3MudHlwZSgpKSksCisrICAgICAgICAgRmF1bHRpbmdD b2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSkpOworKworKyAgc3dpdGNoIChhY2Nlc3MudHlwZSgp KSB7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQ4OgorKyAgICAgIGFzX2xiengob3V0cHV0Lmdwcigp LCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGFzX2V4dHNiKG91dHB1dC5ncHIoKSwgb3V0cHV0 LmdwcigpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgorKyAgICAg IGFzX2xiengob3V0cHV0LmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIFNjYWxhcjo6SW50MTY6CisrICAgICAgYXNfbGhheChvdXRwdXQuZ3ByKCksIG1l bW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6 CisrICAgICAgYXNfbGh6eChvdXRwdXQuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQz MjoKKysgICAgICBhc19sd3p4KG91dHB1dC5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAg ICBhc19leHRzdyhvdXRwdXQuZ3ByKCksIG91dHB1dC5ncHIoKSk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgU2NhbGFyOjpGbG9hdDY0OgorKyAgICAgIGlmIChhY2Nlc3MuaXNaZXJvRXh0ZW5k U2ltZDEyOExvYWQoKSB8fCBhY2Nlc3MuaXNTcGxhdFNpbWQxMjhMb2FkKCkgfHwKKysgICAgICAg ICAgYWNjZXNzLmlzV2lkZW5TaW1kMTI4TG9hZCgpKSB7CisrICAgICAgICAvLyBsZmR4IGlzIFgt Zm9ybSBzY2FsYXIgRlAg4oCUIGVuY29kZXMgb25seSA1LWJpdCBGUlQsIHNvIGEKKysgICAgICAg IC8vIFNpbWQxMjggZGVzdCAoZW5jb2RpbmcgMzIrKSBjb3JydXB0cyB0aGUgb3Bjb2RlLiBCcmlk Z2UKKysgICAgICAgIC8vIHRocm91Z2ggU2NyYXRjaERvdWJsZVJlZyAoRlBSIGYwLCBlbmNvZGlu ZyAwKS4KKysgICAgICAgIFNjcmF0Y2hEb3VibGVTY29wZSBkc2NyYXRjaChhc01hc20oKSk7Cisr ICAgICAgICBhc19sZmR4KGRzY3JhdGNoLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgICAgaWYg KGFjY2Vzcy5pc1plcm9FeHRlbmRTaW1kMTI4TG9hZCgpKSB7CisrICAgICAgICAgIC8vIExvYWRl ZCB2YWx1ZSBnb2VzIHRvIEJFIGR3MSAoPSBMRSBkdzAgPSBsYW5lIDApOyBCRSBkdzAgPSAwLgor KyAgICAgICAgICBhc194eGx4b3IoU2NyYXRjaFNpbWQxMjhSZWcsIFNjcmF0Y2hTaW1kMTI4UmVn LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgICAgIGFzX3h4cGVybWRpKG91dHB1dC5mcHUo KSwgU2NyYXRjaFNpbWQxMjhSZWcsIGRzY3JhdGNoLCAwKTsKKysgICAgICAgIH0gZWxzZSBpZiAo YWNjZXNzLmlzU3BsYXRTaW1kMTI4TG9hZCgpKSB7CisrICAgICAgICAgIGFzX3h4cGVybWRpKG91 dHB1dC5mcHUoKSwgZHNjcmF0Y2gsIGRzY3JhdGNoLCAwKTsKKysgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgIC8vIHdpZGVuOiBwbGFjZSBsb2FkZWQgNjQgYml0cyBpbiBMRSBkdzAgKD0gQkUg ZHcxKSBmb3Igd2lkZW5Mb3cuCisrICAgICAgICAgIGFzX3h4cGVybWRpKG91dHB1dC5mcHUoKSwg ZHNjcmF0Y2gsIGRzY3JhdGNoLCAyKTsKKysgICAgICAgICAgc3dpdGNoIChhY2Nlc3Mud2lkZW5T aW1kT3AoKSkgeworKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDh4OFM6 CisrICAgICAgICAgICAgICBhc01hc20oKS53aWRlbkxvd0ludDh4MTYob3V0cHV0LmZwdSgpLCBv dXRwdXQuZnB1KCkpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OlYxMjhMb2FkOHg4VToKKysgICAgICAgICAgICAgIGFzTWFzbSgpLnVuc2ln bmVkV2lkZW5Mb3dJbnQ4eDE2KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKKysgICAgICAg ICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDE2 eDRTOgorKyAgICAgICAgICAgICAgYXNNYXNtKCkud2lkZW5Mb3dJbnQxNng4KG91dHB1dC5mcHUo KSwgb3V0cHV0LmZwdSgpKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDE2eDRVOgorKyAgICAgICAgICAgICAgYXNNYXNtKCku dW5zaWduZWRXaWRlbkxvd0ludDE2eDgob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOworKyAg ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhM b2FkMzJ4MlM6CisrICAgICAgICAgICAgICBhc01hc20oKS53aWRlbkxvd0ludDMyeDQob3V0cHV0 LmZwdSgpLCBvdXRwdXQuZnB1KCkpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhMb2FkMzJ4MlU6CisrICAgICAgICAgICAgICBhc01h c20oKS51bnNpZ25lZFdpZGVuTG93SW50MzJ4NChvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSk7 CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAg ICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIHdpZGVuIG9wIik7CisrICAgICAgICAgIH0KKysg ICAgICAgIH0KKysgICAgICB9IGVsc2UgeworKyAgICAgICAgYXNfbGZkeChvdXRwdXQuZnB1KCks IG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNj YWxhcjo6RmxvYXQzMjoKKysgICAgICBpZiAoYWNjZXNzLmlzWmVyb0V4dGVuZFNpbWQxMjhMb2Fk KCkpIHsKKysgICAgICAgIC8vIHYxMjgubG9hZDMyX3plcm86IGxvYWQgMzIgcmF3IGJpdHMgaW50 byBsYW5lIDAsIHplcm8gdGhlIHJlc3QuCisrICAgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICAgICAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgICAgICBhc19sd3p4KHRtcCwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICAgIGFz X3h4bHhvcihvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKKysgICAg ICAgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgICAgICBhc19tdHZzcndzKFNjcmF0Y2hTaW1k MTI4UmVnLCB0bXApOworKyAgICAgICAgICBhc194eGluc2VydHcob3V0cHV0LmZwdSgpLCBTY3Jh dGNoU2ltZDEyOFJlZywgMTIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgLy8gUE9X RVI4OiBtdHZzcmQgcHV0cyB2YWx1ZSBpbiBCRSBkdzAgbG93IDMyIGJpdHMuCisrICAgICAgICAg IC8vIHh4cGVybWRpKGRlc3QsIHplcm8sIHNjcmF0Y2gsIDApID0ge3plcm9bZHcwXSwgc2NyYXRj aFtkdzBdfQorKyAgICAgICAgICAvLyBpbiBCRSwgcGxhY2luZyB0aGUgdmFsdWUgaW4gTEUgd29y ZCAwIHdpdGggdGhlIHJlc3QgemVyby4KKysgICAgICAgICAgYXNfbXR2c3JkKFNjcmF0Y2hTaW1k MTI4UmVnLCB0bXApOworKyAgICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIG91dHB1 dC5mcHUoKSwgU2NyYXRjaFNpbWQxMjhSZWcsIDApOworKyAgICAgICAgfQorKyAgICAgIH0gZWxz ZSB7CisrICAgICAgICBhc19sZnN4KG91dHB1dC5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsKKysg ICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpTaW1kMTI4OgorKyAgICAg IGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgICAgYXNfbHh2eChvdXRwdXQuZnB1KCksIG1lbW9y eUJhc2UsIHB0cik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX2x4dmQyeChvdXRwdXQu ZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1 KCksIG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpLCAyKTsKKysgICAgICB9CisrICAgICAgYnJl YWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGFycmF5IHR5 cGUiKTsKKysgIH0KKysKKysgIGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJBZnRlcihhY2Nlc3Muc3lu YygpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp3YXNtU3RvcmVJ bXBsKAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEFueVJlZ2lz dGVyIHZhbHVlLAorKyAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsIFJlZ2lz dGVyIHB0clNjcmF0Y2gpIHsKKysgIGFjY2Vzcy5hc3NlcnRPZmZzZXRJbkd1YXJkUGFnZXMoKTsK KysgIHVpbnQzMl90IG9mZnNldCA9IGFjY2Vzcy5vZmZzZXQzMigpOworKyAgTU9aX0FTU0VSVF9J RihvZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyk7CisrCisrICBpZiAob2Zmc2V0KSB7 CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gpOworKyAg ICBwdHIgPSBwdHJTY3JhdGNoOworKyAgfQorKworKyAgd2FzbVByb2JlTGFzdEJ5dGUoYWNjZXNz LCBtZW1vcnlCYXNlLCBwdHIpOworKworKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJlZm9yZShh Y2Nlc3Muc3luYygpKTsKKysgIC8vIFJlY29yZCB0cmFwIHNpdGUgYXQgdGhlIGZhdWx0aW5nIG1l bW9yeSBpbnN0cnVjdGlvbi4gRm9yIFA4IFNpbWQxMjgKKysgIC8vIHN0b3JlLCB0aGUgZmF1bHRp bmcgaW5zdHJ1Y3Rpb24gKHN0eHZkMngpIGlzIGFmdGVyIGEgYnl0ZS1zd2FwCisrICAvLyAoeHhw ZXJtZGkpLCBzbyB3ZSBkZWZlciB0aGUgdHJhcCBzaXRlIHJlY29yZGluZy4KKysgIC8vIEZsdXNo IHBvb2wgZmlyc3Q7IHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbC4KKysgIGlmIChhY2Nlc3Mu dHlwZSgpICE9IFNjYWxhcjo6U2ltZDEyOCB8fCBIYXNQT1dFUjkoKSkgeworKyAgICBtX2J1ZmZl ci5mbHVzaFBvb2woKTsKKysgICAgYXBwZW5kKGFjY2VzcywKKysgICAgICAgICAgIHdhc206OlRy YXBNYWNoaW5lSW5zbkZvclN0b3JlKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAor KyAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSkpOworKyAgfQor KworKyAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQ4Ogor KyAgICBjYXNlIFNjYWxhcjo6VWludDg6CisrICAgICAgYXNfc3RieCh2YWx1ZS5ncHIoKSwgbWVt b3J5QmFzZSwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkludDE2Ogor KyAgICBjYXNlIFNjYWxhcjo6VWludDE2OgorKyAgICAgIGFzX3N0aHgodmFsdWUuZ3ByKCksIG1l bW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoK KysgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKKysgICAgICBhc19zdHd4KHZhbHVlLmdwcigpLCBt ZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50NjQ6 CisrICAgICAgYXNfc3RkeCh2YWx1ZS5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkZsb2F0NjQ6CisrICAgICAgYXNfc3RmZHgodmFsdWUu ZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFy OjpGbG9hdDMyOgorKyAgICAgIGFzX3N0ZnN4KHZhbHVlLmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6U2ltZDEyODoKKysgICAgICBpZiAo SGFzUE9XRVI5KCkpIHsKKysgICAgICAgIGFzX3N0eHZ4KHZhbHVlLmZwdSgpLCBtZW1vcnlCYXNl LCBwdHIpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc194eHBlcm1kaShTY3JhdGNoU2lt ZDEyOFJlZywgdmFsdWUuZnB1KCksIHZhbHVlLmZwdSgpLCAyKTsKKysgICAgICAgIG1fYnVmZmVy LmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICAgICAgICBh cHBlbmQoYWNjZXNzLAorKyAgICAgICAgICAgICAgIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvclN0 b3JlKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAorKyAgICAgICAgICAgICAgIEZh dWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKKysgICAgICAgIGFzX3N0eHZkMngo U2NyYXRjaFNpbWQxMjhSZWcsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgfQorKyAgICAgIGJy ZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0 eXBlIik7CisrICB9CisrCisrICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5 bmMoKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbUxvYWRJ NjRJbXBsKAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lz dGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwKKysgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwg UmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIHVpbnQzMl90IG9mZnNldCA9IGFjY2Vzcy5vZmZzZXQz MigpOworKyAgTU9aX0FTU0VSVF9JRihvZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyk7 CisrCisrICBpZiAob2Zmc2V0KSB7CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKG9mZnNl dCksIHB0clNjcmF0Y2gpOworKyAgICBwdHIgPSBwdHJTY3JhdGNoOworKyAgfQorKworKyAgd2Fz bVByb2JlTGFzdEJ5dGUoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIpOworKworKyAgYXNNYXNtKCku bWVtb3J5QmFycmllckJlZm9yZShhY2Nlc3Muc3luYygpKTsKKysgIG1fYnVmZmVyLmZsdXNoUG9v bCgpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICBhcHBlbmQoYWNjZXNzLCB3 YXNtOjpUcmFwTWFjaGluZUluc25Gb3JMb2FkKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUo KSkpLAorKyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKKysK KysgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKKysg ICAgICBhc19sYnp4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYXNfZXh0 c2Iob3V0cHV0LnJlZywgb3V0cHV0LnJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2Nh bGFyOjpVaW50ODoKKysgICAgICBhc19sYnp4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoKKysgICAgICBhc19saGF4 KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug U2NhbGFyOjpVaW50MTY6CisrICAgICAgYXNfbGh6eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBw dHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50MzI6CisrICAgICAgYXNf bHd6eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGFzX2V4dHN3KG91dHB1 dC5yZWcsIG91dHB1dC5yZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6VWlu dDMyOgorKyAgICAgIGFzX2x3engob3V0cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAg ICAvLyBaZXJvLWV4dGVuZGVkIGJ5IGx3enggYWxyZWFkeQorKyAgICAgIGJyZWFrOworKyAgICBj YXNlIFNjYWxhcjo6SW50NjQ6CisrICAgICAgYXNfbGR4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2Us IHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJ1 bmV4cGVjdGVkIGFycmF5IHR5cGUiKTsKKysgIH0KKysKKysgIGFzTWFzbSgpLm1lbW9yeUJhcnJp ZXJBZnRlcihhY2Nlc3Muc3luYygpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0 Q29tcGF0Ojp3YXNtU3RvcmVJNjRJbXBsKAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NE ZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsCisrICAg IFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCkgeworKyAgdWludDMyX3Qgb2Zmc2V0 ID0gYWNjZXNzLm9mZnNldDMyKCk7CisrICBNT1pfQVNTRVJUX0lGKG9mZnNldCwgcHRyU2NyYXRj aCAhPSBJbnZhbGlkUmVnKTsKKysKKysgIGlmIChvZmZzZXQpIHsKKysgICAgYXNNYXNtKCkuYWRk UHRyKEltbVdvcmQob2Zmc2V0KSwgcHRyU2NyYXRjaCk7CisrICAgIHB0ciA9IHB0clNjcmF0Y2g7 CisrICB9CisrCisrICB3YXNtUHJvYmVMYXN0Qnl0ZShhY2Nlc3MsIG1lbW9yeUJhc2UsIHB0cik7 CisrCisrICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQmVmb3JlKGFjY2Vzcy5zeW5jKCkpOworKyAg bV9idWZmZXIuZmx1c2hQb29sKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKKysg IGFwcGVuZChhY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvclN0b3JlKFNjYWxhcjo6Ynl0 ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAorKyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJy ZW50T2Zmc2V0KCkpKTsKKysKKysgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworKyAgICBjYXNl IFNjYWxhcjo6SW50ODoKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgorKyAgICAgIGFzX3N0Yngo dmFsdWUucmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNj YWxhcjo6SW50MTY6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6CisrICAgICAgYXNfc3RoeCh2 YWx1ZS5yZWcsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2Nh bGFyOjpJbnQzMjoKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKKysgICAgICBhc19zdHd4KHZh bHVlLnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2Fs YXI6OkludDY0OgorKyAgICAgIGFzX3N0ZHgodmFsdWUucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwor KyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3Rl ZCBhcnJheSB0eXBlIik7CisrICB9CisrCisrICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIo YWNjZXNzLnN5bmMoKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Mb2FkKGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0ZXIgb3V0 cHV0KSB7CisrICB3YXNtTG9hZEltcGwoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0 Y2gsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Mb2FkSTY0KGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgUmVnaXN0ZXI2 NCBvdXRwdXQpIHsKKysgIHdhc21Mb2FkSTY0SW1wbChhY2Nlc3MsIG1lbW9yeUJhc2UsIHB0ciwg cHRyU2NyYXRjaCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVN0 b3JlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIG1lbW9yeUJhc2Us CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIg cHRyU2NyYXRjaCkgeworKyAgd2FzbVN0b3JlSW1wbChhY2Nlc3MsIHZhbHVlLCBtZW1vcnlCYXNl LCBwdHIsIHB0clNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtU3Rv cmVJNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBSZWdpc3RlciBtZW1vcnlC YXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBwdHIsIFJl Z2lzdGVyIHB0clNjcmF0Y2gpIHsKKysgIHdhc21TdG9yZUk2NEltcGwoYWNjZXNzLCB2YWx1ZSwg bWVtb3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNoKTsKKyt9CisrCisrLy99fX0gY2hlY2tfbWFjcm9h c3NlbWJsZXJfc3R5bGUKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNwYWNl IGpzCisrCisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysvLyBzdGF0aWMKKytib29sIE1hY3Jv QXNzZW1ibGVyOjpNdXN0TWFza1NoaWZ0Q291bnRTaW1kMTI4KHdhc206OlNpbWRPcCBvcCwgaW50 MzJfdCogbWFzaykgeworKyAgcmV0dXJuIGZhbHNlOworK30KKysjZW5kaWYKK2RpZmYgLS1naXQg YS9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmggYi9qcy9zcmMvaml0L3Bw YzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwMDAwMDAuLmJjMjE0M2I2NzQ2NQorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2pp dC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oCitAQCAtMCwwICsxLDIwMzEgQEAKKysvKiAt Ki0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNp Yy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgor KyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUg TW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBM IHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4g b25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaWZuZGVmIGppdF9w cGM2NF9NYWNyb0Fzc2VtYmxlcl9wcGM2NF9oCisrI2RlZmluZSBqaXRfcHBjNjRfTWFjcm9Bc3Nl bWJsZXJfcHBjNjRfaAorKworKyNpbmNsdWRlICJqaXQvTW92ZVJlc29sdmVyLmgiCisrI2luY2x1 ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKKysjaW5jbHVkZSAid2FzbS9XYXNtQnVp bHRpbnMuaCIKKysKKytuYW1lc3BhY2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworK2lubGlu ZSBib29sIGlzX2ludE4oaW50NjRfdCB4LCB1bnNpZ25lZCBuKSB7CisrICBNT1pfQVNTRVJUKCgw IDwgbikgJiYgKG4gPCA2NCkpOworKyAgaW50NjRfdCBsaW1pdCA9IHN0YXRpY19jYXN0PGludDY0 X3Q+KDEpIDw8IChuIC0gMSk7CisrICByZXR1cm4gKC1saW1pdCA8PSB4KSAmJiAoeCA8IGxpbWl0 KTsKKyt9CisrCisraW5saW5lIGJvb2wgaXNfdWludE4odWludDY0X3QgeCwgdW5zaWduZWQgbikg eworKyAgTU9aX0FTU0VSVCgoMCA8IG4pICYmIChuIDwgNjQpKTsKKysgIHJldHVybiAhKHggPj4g bik7CisrfQorKworKy8vIGVudGVyTm9Qb29sKCkgZ3VhcmQgc2l6ZXMuIEluaGliaXRpbmcgdGhl IGNvbnN0YW50IHBvb2wga2VlcHMgdGhlc2UKKysvLyBzdGFuemFzIGF0IGEgZml4ZWQgaW5zdHJ1 Y3Rpb24gY291bnQsIHdoaWNoIHBhdGNoZXJzIGFuZCBsb25nLWJyYW5jaAorKy8vIHJlc29sdmVy cyByZWx5IG9uLiBFYWNoIGNvbnN0YW50IG5hbWVzIGEgZGlzdGluY3Qgc3RhbnphIHNoYXBlOyBz ZWUKKysvLyB0aGUgZW1pdHRpbmcgY2FsbCBzaXRlIGZvciB0aGUgZXhhY3QgbGF5b3V0LgorKy8v CisrLy8ga05vUG9vbExvYWQ2NFN0YW56YUluc25zICg4KTogZW1pdExvYWQ2NFN0YW56YSBib2R5 IOKAlCA4IE5PUHMgdGhhdAorKy8vICAgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMgbGF0ZXIgb3Zl cndyaXRlcyBpbiBwbGFjZS4gVHdvIHNoYXBlcyBzaGFyZQorKy8vICAgdGhlIHNhbWUgOC1zbG90 IGZvb3RwcmludCB3aXRoIHRoZSAucXVhZCBmaXhlZCBhdCBzbG90cyBbNi4uN106CisrLy8gICAg IC0gUE9XRVI5KyAoSGFzUE9XRVI5KCkpOiBhZGRwY2lzICsgbGQgKyBiICsgMyBOT1BzICgyIGR5 bmFtaWMgaW5zbnMsCisrLy8gICAgICAgbm8gTFIgY2xvYmJlcikuIFByZWZlcnJlZCBwYXRoLgor Ky8vICAgICAtIFBPV0VSOCBmYWxsYmFjazogbWZsci9iY2wvbWZsci9tdGxyL2xkL2IgTFItYm91 bmNpbmcgc2VxdWVuY2UKKysvLyAgICAgICAoNiBkeW5hbWljIGluc25zLCBSQVMtdGhyYXNoaW5n IOKAlCBrZXB0IG9ubHkgYmVjYXVzZSBQOCBoYXMgbm8KKysvLyAgICAgICBhZGRwY2lzKS4KKysv LworKy8vIGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyAoMTApOiBwYXRjaGFibGUgZmFyIGNh bGwgLyBqdW1wIC8KKysvLyAgIHVuY29uZGl0aW9uYWwgYnJhbmNoLiBUaHJlZSBhbHRlcm5hdGl2 ZSBzaGFwZXMsIGFsbCBmaXR0aW5nIHRoZQorKy8vICAgc2FtZSBidWRnZXQ6CisrLy8gICAgIC0g bG9hZDY0IHN0YW56YSAoOCkgKyBtdGN0ciArIGJjdHJbbF0gID0gMTAgIChib3VuZCBjYWxsL2p1 bXApCisrLy8gICAgIC0gOSBOT1BzICsgYmwgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTAg IChzaG9ydCBib3VuZCBjYWxsKQorKy8vICAgICAtIHhzX3RyYXBfdGFnZ2VkKFRBRykgKyBjaGFp biArIDggTk9QcyA9IDEwICAoZndkLXJlZiBzdGFuemEpCisrLy8KKysvLyBrTm9Qb29sQ29uZExv bmdCcmFuY2hJbnNuc1A4TWF4ICgxNCk6IGNvbmRpdGlvbmFsIGxvbmcgYnJhbmNoLCBQT1dFUjgK KysvLyAgIE92ZXJmbG93IHdvcnN0IGNhc2UuIFBPV0VSOCBoYXMgbm8gbWNyeHJ4IHNvIG92ZXJm bG93L2NhcnJ5IHRlc3QgaXMKKysvLyAgIG1meGVyK3Jsd2lubSttdGNyZiAoMyBpbnNucykgb24g dG9wIG9mIHRoZSBiYXNlIHNoYXBlLiBCdWRnZXQgPQorKy8vICAgMyAoWEVSIGluc3BlY3Rpb24p ICsgMSAoYmMpICsgOCAobG9hZDY0IHN0YW56YSkgKyAyIChtdGN0citiY3RyKSA9IDE0LgorK3N0 YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtOb1Bvb2xMb2FkNjRTdGFuemFJbnNucyA9IDg7Cisrc3Rh dGljIGNvbnN0ZXhwciBzaXplX3Qga05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zID0gMTA7Cisr c3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga05vUG9vbENvbmRMb25nQnJhbmNoSW5zbnNQOE1heCA9 IDE0OworKworK2VudW0gTG9hZFN0b3JlU2l6ZSB7CisrICBTaXplQnl0ZSA9IDgsCisrICBTaXpl SGFsZldvcmQgPSAxNiwKKysgIFNpemVXb3JkID0gMzIsCisrICBTaXplRG91YmxlID0gNjQKKyt9 OworKworK2VudW0gTG9hZFN0b3JlRXh0ZW5zaW9uIHsgWmVyb0V4dGVuZCA9IDAsIFNpZ25FeHRl bmQgPSAxIH07CisrCisrc3RhdGljIFJlZ2lzdGVyIENhbGxSZWcgPSByMTI7CisrCisrc3RydWN0 IEltbVNoaWZ0ZWRUYWcgOiBwdWJsaWMgSW1tV29yZCB7CisrICBleHBsaWNpdCBJbW1TaGlmdGVk VGFnKEpTVmFsdWVTaGlmdGVkVGFnIHNodGFnKSA6IEltbVdvcmQoKHVpbnRwdHJfdClzaHRhZykg e30KKysgIGV4cGxpY2l0IEltbVNoaWZ0ZWRUYWcoSlNWYWx1ZVR5cGUgdHlwZSkKKysgICAgICA6 IEltbVdvcmQoKCh1aW50cHRyX3QpSlNWQUxfVFlQRV9UT19TSElGVEVEX1RBRyh0eXBlKSkpIHt9 CisrfTsKKysKKytzdHJ1Y3QgSW1tVGFnIDogcHVibGljIEltbTMyIHsKKysgIGV4cGxpY2l0IElt bVRhZyhKU1ZhbHVlVGFnIHRhZykgOiBJbW0zMih0YWcpIHt9CisrfTsKKysKKytjbGFzcyBTY3Jh dGNoVGFnU2NvcGUgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHNfOworKyAgUmVn aXN0ZXIgc2NyYXRjaF87CisrICBib29sIG93bmVkXzsKKysgIG1vemlsbGE6OkRlYnVnT25seTxi b29sPiByZWxlYXNlZF87CisrCisrIHB1YmxpYzoKKysgIFNjcmF0Y2hUYWdTY29wZShBc3NlbWJs ZXImIG1hc20sIGNvbnN0IFZhbHVlT3BlcmFuZCYpCisrICAgICAgOiB0ZW1wc18obWFzbSksIG93 bmVkXyh0cnVlKSwgcmVsZWFzZWRfKGZhbHNlKSB7CisrICAgIHNjcmF0Y2hfID0gdGVtcHNfLkFj cXVpcmUoKTsKKysgIH0KKysKKysgIG9wZXJhdG9yIFJlZ2lzdGVyKCkgeworKyAgICBNT1pfQVNT RVJUKCFyZWxlYXNlZF8pOworKyAgICByZXR1cm4gc2NyYXRjaF87CisrICB9CisrCisrICB2b2lk IHJlbGVhc2UoKSB7CisrICAgIE1PWl9BU1NFUlQoIXJlbGVhc2VkXyk7CisrICAgIHJlbGVhc2Vk XyA9IHRydWU7CisrICAgIGlmIChvd25lZF8pIHsKKysgICAgICB0ZW1wc18uUmVsZWFzZShzY3Jh dGNoXyk7CisrICAgICAgb3duZWRfID0gZmFsc2U7CisrICAgIH0KKysgIH0KKysKKysgIHZvaWQg cmVhY3F1aXJlKCkgeworKyAgICBNT1pfQVNTRVJUKHJlbGVhc2VkXyk7CisrICAgIHJlbGVhc2Vk XyA9IGZhbHNlOworKyAgICBpZiAoIW93bmVkXykgeworKyAgICAgIHNjcmF0Y2hfID0gdGVtcHNf LkFjcXVpcmUoKTsKKysgICAgICBvd25lZF8gPSB0cnVlOworKyAgICB9CisrICB9CisrfTsKKysK KytjbGFzcyBTY3JhdGNoVGFnU2NvcGVSZWxlYXNlIHsKKysgIFNjcmF0Y2hUYWdTY29wZSogdHNf OworKworKyBwdWJsaWM6CisrICBleHBsaWNpdCBTY3JhdGNoVGFnU2NvcGVSZWxlYXNlKFNjcmF0 Y2hUYWdTY29wZSogdHMpIDogdHNfKHRzKSB7CisrICAgIHRzXy0+cmVsZWFzZSgpOworKyAgfQor KyAgflNjcmF0Y2hUYWdTY29wZVJlbGVhc2UoKSB7IHRzXy0+cmVhY3F1aXJlKCk7IH0KKyt9Owor KworK2NsYXNzIE1hY3JvQXNzZW1ibGVyUFBDNjQgOiBwdWJsaWMgQXNzZW1ibGVyIHsKKysgcHJv dGVjdGVkOgorKyAgTWFjcm9Bc3NlbWJsZXImIGFzTWFzbSgpOworKyAgY29uc3QgTWFjcm9Bc3Nl bWJsZXImIGFzTWFzbSgpIGNvbnN0OworK307CisrCisrY2xhc3MgTWFjcm9Bc3NlbWJsZXJQUEM2 NENvbXBhdCA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclBQQzY0IHsKKysgcHVibGljOgorKyAgdXNp bmcgTWFjcm9Bc3NlbWJsZXJQUEM2NDo6TWFjcm9Bc3NlbWJsZXJQUEM2NDsKKysKKysgIE1hY3Jv QXNzZW1ibGVyUFBDNjRDb21wYXQoKSB7fQorKworKyAgYm9vbCBidWlsZE9PTEZha2VFeGl0RnJh bWUodm9pZCogZmFrZVJldHVybkFkZHIpOworKworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICAvLyBDb252ZXJz aW9uIGZ1bmN0aW9ucworKworKyAgdm9pZCBjb252ZXJ0Qm9vbFRvSW50MzIoUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGFzX3Jsd2lubShkZXN0LCBzcmMsIDAsIDMxLCAzMSk7 CisrICB9CisrICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICAgIC8vIG10dnNyd2E6IFZTUltkZXN0XS5kdzAgPSBzaWduX2V4 dF82NChzcmNbMzI6NjNdKTsgUDgrIChJU0EgMi4wNykuCisrICAgIC8vIFJlcGxhY2VzIGV4dHN3 ICsgbXR2c3JkICgyIGluc25zICsgc2NyYXRjaCBHUFIpIHdpdGggMSBpbnNuLgorKyAgICBhc19t dHZzcndhKGRlc3QsIHNyYyk7CisrICAgIGFzX2ZjZmlkKGRlc3QsIGRlc3QpOworKyAgfQorKyAg dm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShjb25zdCBBZGRyZXNzJiBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgICAvLyBsZml3YXggKFA3Kyk6IEZQUi5kd1swXSA9IHNpZ25fZXh0XzY0 KE1FTVthZGRyLCA0XSkuIFgtZm9ybSBpbmRleGVkCisrICAgIC8vIOKAlCBubyBpbW1lZGlhdGUg b2Zmc2V0LCBzbyB3aGVuIG9mZnNldCAhPSAwIHdlIGFkZCBpdCBpbnRvIGEgc2NyYXRjaAorKyAg ICAvLyBmaXJzdC4gUmVwbGFjZXMgbHd6ICsgZXh0c3cgKyBtdHZzcmQgd2l0aCBsZml3YXggKG9u ZSBpbnNuKSBwbHVzCisrICAgIC8vIG9wdGlvbmFsIGFkZHJlc3MgYWRkLgorKyAgICBpZiAoc3Jj Lm9mZnNldCA9PSAwKSB7CisrICAgICAgYXNfbGZpd2F4KGRlc3QsIHIwLCBzcmMuYmFzZSk7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMp OworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgaWYg KGlzX2ludE4oc3JjLm9mZnNldCwgMTYpKSB7CisrICAgICAgICBhc19hZGRpKHNjcmF0Y2gsIHNy Yy5iYXNlLCBzcmMub2Zmc2V0KTsKKysgICAgICAgIGFzX2xmaXdheChkZXN0LCByMCwgc2NyYXRj aCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIC8vIFgtZm9ybSBpbmRleGVkOiBsZml3YXgg Y29tcHV0ZXMgYmFzZSArIHNjcmF0Y2ggZGlyZWN0bHksIG5vIGFkZC4KKysgICAgICAgIG1vdmVQ dHIoSW1tV29yZChzcmMub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgICAgICBhc19sZml3YXgoZGVz dCwgc3JjLmJhc2UsIHNjcmF0Y2gpOworKyAgICAgIH0KKysgICAgfQorKyAgICBhc19mY2ZpZChk ZXN0LCBkZXN0KTsKKysgIH0KKysgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoY29uc3QgQmFz ZUluZGV4JiBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKHNyYywgc2NyYXRjaCk7CisrICAgIGNv bnZlcnRJbnQzMlRvRG91YmxlKEFkZHJlc3Moc2NyYXRjaCwgc3JjLm9mZnNldCksIGRlc3QpOwor KyAgfQorKyAgdm9pZCBjb252ZXJ0VUludDMyVG9Eb3VibGUoUmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpOworKyAgdm9pZCBjb252ZXJ0VUludDMyVG9GbG9hdDMyKFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KTsKKysgIHZvaWQgY29udmVydERvdWJsZVRvRmxvYXQzMihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIGFzX2Zyc3AoZGVz dCwgc3JjKTsKKysgIH0KKysgIC8vIFBPV0VSOSBGUDE2IGNvbnZlcnNpb25zICgxIGluc24gZWFj aCkuIENhbGxlciBtdXN0IGhhdmUgdmVyaWZpZWQKKysgIC8vIEhhc1BPV0VSOSgpIOKAlCBTdXBw b3J0c0Zsb2F0ezY0LDMyfVRvMTYgZ2F0ZXMgdGhhdC4gUFBDNjQgRlBScyBob2xkCisrICAvLyBk b3VibGVzIGludGVybmFsbHk7IGFuICJGUDMyLWluLUZQUiIgaXMganVzdCB0aGUgRlAzMiB2YWx1 ZSBzdG9yZWQKKysgIC8vIGFzIGV4YWN0IEZQNjQsIHNvIHhzY3ZkcGhwL3hzY3ZocGRwIHdvcmsg Zm9yIGJvdGggRlAzMuKGlEZQMTYgYW5kCisrICAvLyBGUDY04oaURlAxNiAoRlAxNiBmaXRzIGV4 YWN0bHkgaW4gRlAzMiB3aGljaCBmaXRzIGV4YWN0bHkgaW4gRlA2NCkuCisrICB2b2lkIGNvbnZl cnREb3VibGVUb0Zsb2F0MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgICAgYXNfeHNjdmRwaHAoZGVzdCwg c3JjKTsKKysgIH0KKysgIHZvaWQgY29udmVydEZsb2F0MTZUb0RvdWJsZShGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkp OworKyAgICBhc194c2N2aHBkcChkZXN0LCBzcmMpOworKyAgfQorKyAgdm9pZCBjb252ZXJ0Rmxv YXQzMlRvRmxvYXQxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOworKyAgICBhc194c2N2ZHBocChkZXN0LCBzcmMp OworKyAgfQorKyAgdm9pZCBjb252ZXJ0RmxvYXQxNlRvRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOwor KyAgICBhc194c2N2aHBkcChkZXN0LCBzcmMpOworKyAgfQorKyAgdm9pZCBjb252ZXJ0SW50MzJU b0Zsb2F0MTYoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgTU9aX0FT U0VSVChIYXNQT1dFUjkoKSk7CisrICAgIGNvbnZlcnRJbnQzMlRvRmxvYXQzMihzcmMsIGRlc3Qp OworKyAgICBjb252ZXJ0RmxvYXQzMlRvRmxvYXQxNihkZXN0LCBkZXN0KTsKKysgIH0KKysgIHZv aWQgY29udmVydERvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qs IExhYmVsKiBmYWlsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZl WmVyb0NoZWNrID0gdHJ1ZSk7CisrICB2b2lkIGNvbnZlcnREb3VibGVUb1B0cihGbG9hdFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrID0gdHJ1ZSk7CisrICB2b2lkIGNvbnZlcnRG bG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZh aWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNr ID0gdHJ1ZSk7CisrICB2b2lkIGNvbnZlcnRGbG9hdDMyVG9Eb3VibGUoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICAvLyBQUEM2NCBGUFJzIGhvbGQgZXZlcnkg RlAzMiB2YWx1ZSBpbiBpdHMgRlA2NC1lcXVpdmFsZW50IHJlcHJlc2VudGF0aW9uLAorKyAgICAv LyBzbyBmNjQucHJvbW90ZV9mMzIgaXMgY29uY2VwdHVhbGx5IGEgbm8tb3AgZXhjZXB0IHRoYXQg d2FzbSByZXF1aXJlcworKyAgICAvLyBzTmFOIGlucHV0cyB0byBiZSBxdWlldGVkLiBmcnNwIChS b3VuZCB0byBTaW5nbGUtUHJlY2lzaW9uKSBpcyB0aGUKKysgICAgLy8gaWRlbnRpdHkgZm9yIFNQ LXJlcHJlc2VudGFibGUgaW5wdXRzIGJ1dCBhcHBsaWVzIElFRUUgTmFOLXF1aWV0aW5nIGFzCisr ICAgIC8vIGEgc2lkZSBlZmZlY3QsIHJlcGxhY2luZyB0aGUgcHJpb3IgZm1yICsgZmNtcHUgKyBi cmFuY2ggKyBjYW5vbmljYWwtCisrICAgIC8vIE5hTi1sb2FkICg1KyBpbnNucyArIHNjcmF0Y2gg R1BSKSB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLiBSZXN1bHQKKysgICAgLy8gbWF0Y2hlcyB3 aGF0IHg4NiB2Y3Z0c3Myc2QgLyBBUk0gZmN2dCBwcm9kdWNlLgorKyAgICBhc19mcnNwKGRlc3Qs IHNyYyk7CisrICB9CisrICB2b2lkIGNvbnZlcnRJbnQzMlRvRmxvYXQzMihSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICAvLyBtdHZzcndhICsgZmNmaWRzOyBzYW1lIHJl Y2lwZSBhcyBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcikuCisrICAgIGFzX210dnNyd2Eo ZGVzdCwgc3JjKTsKKysgICAgYXNfZmNmaWRzKGRlc3QsIGRlc3QpOworKyAgfQorKyAgdm9pZCBj b252ZXJ0SW50MzJUb0Zsb2F0MzIoY29uc3QgQWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgICAgLy8gbGZpd2F4ICsgZmNmaWRzOyBzYW1lIHJlY2lwZSBhcyBjb252ZXJ0SW50 MzJUb0RvdWJsZShBZGRyZXNzKS4KKysgICAgaWYgKHNyYy5vZmZzZXQgPT0gMCkgeworKyAgICAg IGFzX2xmaXdheChkZXN0LCByMCwgc3JjLmJhc2UpOworKyAgICB9IGVsc2UgeworKyAgICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2 KSkgeworKyAgICAgICAgYXNfYWRkaShzY3JhdGNoLCBzcmMuYmFzZSwgc3JjLm9mZnNldCk7Cisr ICAgICAgICBhc19sZml3YXgoZGVzdCwgcjAsIHNjcmF0Y2gpOworKyAgICAgIH0gZWxzZSB7Cisr ICAgICAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICAgICAg YXNfbGZpd2F4KGRlc3QsIHNyYy5iYXNlLCBzY3JhdGNoKTsKKysgICAgICB9CisrICAgIH0KKysg ICAgYXNfZmNmaWRzKGRlc3QsIGRlc3QpOworKyAgfQorKworKyAgLy8gUE9XRVI5IEZQMTYgbG9h ZDogbHhzaWh6eCB3cml0ZXMgdGhlIDIgbWVtb3J5IGJ5dGVzIGRpcmVjdGx5IGludG8KKysgIC8v IGR3WzBdIGxvdyAxNiBiaXRzIHdpdGggdGhlIHJlc3QgemVyb2VkIOKAlCBtYXRjaGluZyB0aGUg bGF5b3V0IHRoYXQKKysgIC8vIHhzY3ZocGRwIGV4cGVjdHMsIGluIGEgc2luZ2xlIGluc3RydWN0 aW9uLgorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRGbG9hdDE2KGNvbnN0IEFkZHJlc3MmIGFk ZHIsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciB0ZW1wKSB7CisrICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOworKyAgICBp ZiAoYWRkci5vZmZzZXQgPT0gMCkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo YXNfbHhzaWh6eChkZXN0LCByMCwgYWRkci5iYXNlKS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysg ICAgaWYgKGlzX2ludE4oYWRkci5vZmZzZXQsIDE2KSkgeworKyAgICAgIGFzX2FkZGkodGVtcCwg YWRkci5iYXNlLCBhZGRyLm9mZnNldCk7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNl dChhc19seHNpaHp4KGRlc3QsIHIwLCB0ZW1wKS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAg bW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zmc2V0KSwgdGVtcCk7CisrICAgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoYXNfbHhzaWh6eChkZXN0LCBhZGRyLmJhc2UsIHRlbXApLmdldE9mZnNldCgp KTsKKysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRmxvYXQxNihjb25zdCBCYXNlSW5k ZXgmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHRlbXApIHsKKysgICAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7Cisr ICAgIGNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKHNyYywgdGVtcCk7CisrICAgIHJldHVybiBGYXVs dGluZ0NvZGVPZmZzZXQoYXNfbHhzaWh6eChkZXN0LCByMCwgdGVtcCkuZ2V0T2Zmc2V0KCkpOwor KyAgfQorKworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICAvLyBFZmZlY3RpdmUgYWRkcmVzcyBjb21wdXRhdGlv bgorKworKyAgdm9pZCBjb21wdXRlU2NhbGVkQWRkcmVzcyhjb25zdCBCYXNlSW5kZXgmIGFkZHJl c3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0gVGltZXNPbmUp IHsKKysgICAgICBhc19hZGQoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4KTsKKysg ICAgfSBlbHNlIGlmIChkZXN0ICE9IGFkZHJlc3MuYmFzZSAmJiBkZXN0ICE9IGFkZHJlc3MuaW5k ZXgpIHsKKysgICAgICB4X3NsZGkoZGVzdCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7 CisrICAgICAgYXNfYWRkKGRlc3QsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CisrICAgIH0gZWxzZSB7 CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgeF9zbGRpKHNjcmF0Y2gs IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworKyAgICAgIGFzX2FkZChkZXN0LCBhZGRy ZXNzLmJhc2UsIHNjcmF0Y2gpOworKyAgICB9CisrICB9CisrCisrICB2b2lkIGNvbXB1dGVFZmZl Y3RpdmVBZGRyZXNzKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysg ICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID09IDApIHsKKysgICAgICBpZiAoZGVzdCAhPSBhZGRyZXNz LmJhc2UpIHsKKysgICAgICAgIHhzX21yKGRlc3QsIGFkZHJlc3MuYmFzZSk7CisrICAgICAgfQor KyAgICB9IGVsc2UgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgeworKyAgICAgIGFz X2FkZGkoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisrICAgIH0gZWxzZSBp ZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDM0KSkgeworKyAgICAg IC8vIFNpbmdsZS1pbnNuIDM0LWJpdC1zaWduZWQgcmVnK2ltbSBhZGQuIEF2b2lkcyB0aGUgc2Ny YXRjaCBHUFIuCisrICAgICAgYXNfcGFkZGkoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9m ZnNldCwgLypSPSovZmFsc2UpOworKyAgICB9IGVsc2UgeworKyAgICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgICBt b3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgICBhc19hZGQo ZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBjb21w dXRlRWZmZWN0aXZlQWRkcmVzcyhjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVyIGRl c3QpIHsKKysgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywgZGVzdCk7CisrICAgIGlm IChhZGRyZXNzLm9mZnNldCkgeworKyAgICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAx NikpIHsKKysgICAgICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgYWRkcmVzcy5vZmZzZXQpOworKyAg ICAgIH0gZWxzZSBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDM0 KSkgeworKyAgICAgICAgYXNfcGFkZGkoZGVzdCwgZGVzdCwgYWRkcmVzcy5vZmZzZXQsIC8qUj0q L2ZhbHNlKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgICAgIG1v dmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICAgICAgYXNfYWRk KGRlc3QsIGRlc3QsIHNjcmF0Y2gpOworKyAgICAgIH0KKysgICAgfQorKyAgfQorKworKyAgLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICAvLyBNb3ZlIGluc3RydWN0aW9ucworKworKyAgdm9pZCBtb3YoUmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0KSB7IHhzX21yKGRlc3QsIHNyYyk7IH0KKysgIHZvaWQgbW92KElt bVdvcmQgaW1tLCBSZWdpc3RlciBkZXN0KSB7IG1vdmVQdHIoaW1tLCBkZXN0KTsgfQorKyAgdm9p ZCBtb3YoSW1tUHRyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBtb3YoSW1tV29yZCh1aW50 cHRyX3QoaW1tLnZhbHVlKSksIGRlc3QpOworKyAgfQorKyAgLy8gRW1pdCBhbiA4LWluc3RydWN0 aW9uIE5PUCBzdGFuemEgZm9yIGEgcGF0Y2hhYmxlIDY0LWJpdCBsb2FkLgorKyAgLy8gUG9vbCBm bHVzaGVzIGFyZSBpbmhpYml0ZWQgZHVyaW5nIGVtaXNzaW9uIHRvIHByZXZlbnQgcG9vbCBkYXRh CisrICAvLyBmcm9tIGJlaW5nIGluc2VydGVkIG1pZC1zdGFuemEuCisrICBCdWZmZXJPZmZzZXQg ZW1pdExvYWQ2NFN0YW56YShSZWdpc3RlciBkZXN0LCB1aW50NjRfdCB2YWx1ZSkgeworKyAgICBt X2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sTG9hZDY0U3RhbnphSW5zbnMpOworKyAgICBCdWZm ZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0 KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Cisr ICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3 cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgbV9idWZm ZXIubGVhdmVOb1Bvb2woKTsKKysgICAgLy8gSWYgYW55IG9mIHRoZSA4IHdyaXRlSW5zdCBjYWxs cyBoaXQgT09NLCBvbmx5IHNvbWUgb2YgdGhlIHN0YW56YQorKyAgICAvLyB3YXMgcmVzZXJ2ZWQg aW4gdGhlIGJ1ZmZlci4gV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMgd3JpdGVzIDMyIGJ5dGVzCisr ICAgIC8vIHVuY29uZGl0aW9uYWxseSwgc28gY2FsbGluZyBpdCBoZXJlIHdvdWxkIG92ZXJmbG93 IHRoZSBWZWN0b3IncworKyAgICAvLyBiYWNraW5nIHN0b3JlIGFuZCBjb3JydXB0IHRoZSBuZXh0 IGhlYXAgY2h1bmsncyBtZXRhZGF0YSwgc3VyZmFjaW5nCisrICAgIC8vIGxhdGVyIGFzIGEgbWFs bG9jLWRldGVjdGVkIGZyZWUtdGltZSBjcmFzaC4KKysgICAgaWYgKG1fYnVmZmVyLm9vbSgpKSB7 CisrICAgICAgcmV0dXJuIGJvOworKyAgICB9CisrICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25z KChJbnN0cnVjdGlvbiopZWRpdFNyYyhibyksIGRlc3QsIHZhbHVlKTsKKysgICAgcmV0dXJuIGJv OworKyAgfQorKworKyAgdm9pZCBtb3YoQ29kZUxhYmVsKiBsYWJlbCwgUmVnaXN0ZXIgZGVzdCkg eworKyAgICBCdWZmZXJPZmZzZXQgYm8gPSBlbWl0TG9hZDY0U3RhbnphKGRlc3QsIExhYmVsQmFz ZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICBsYWJlbC0+cGF0Y2hBdCgpLT5iaW5kKGJvLmdldE9m ZnNldCgpKTsKKysgICAgbGFiZWwtPnNldExpbmtNb2RlKENvZGVMYWJlbDo6TW92ZUltbWVkaWF0 ZSk7CisrICB9CisrICB2b2lkIG1vdihSZWdpc3RlciBzcmMsIEFkZHJlc3MgZGVzdCkgeyBzdG9y ZVB0cihzcmMsIGRlc3QpOyB9CisrICB2b2lkIG1vdihBZGRyZXNzIHNyYywgUmVnaXN0ZXIgZGVz dCkgeyBsb2FkUHRyKHNyYywgZGVzdCk7IH0KKysKKysgIHZvaWQgbW92ZTMyKEltbTMyIGltbSwg UmVnaXN0ZXIgZGVzdCkgeworKyAgICBpZiAoaXNfaW50TihpbW0udmFsdWUsIDE2KSkgeworKyAg ICAgIHhzX2xpKGRlc3QsIChpbnQxNl90KWltbS52YWx1ZSk7CisrICAgIH0gZWxzZSBpZiAoaXNf dWludE4oKHVpbnQzMl90KWltbS52YWx1ZSwgMTYpKSB7CisrICAgICAgeHNfbGkoZGVzdCwgMCk7 CisrICAgICAgYXNfb3JpKGRlc3QsIGRlc3QsICh1aW50MTZfdClpbW0udmFsdWUpOworKyAgICB9 IGVsc2UgeworKyAgICAgIHhzX2xpcyhkZXN0LCAoaW50MTZfdCkoKHVpbnQzMl90KWltbS52YWx1 ZSA+PiAxNikpOworKyAgICAgIGlmIChpbW0udmFsdWUgJiAweGZmZmYpIHsKKysgICAgICAgIGFz X29yaShkZXN0LCBkZXN0LCAodWludDE2X3QpaW1tLnZhbHVlKTsKKysgICAgICB9CisrICAgIH0K KysgIH0KKysgIHZvaWQgbW92ZTMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBhc19l eHRzdyhkZXN0LCBzcmMpOyB9CisrCisrICB2b2lkIG1vdmVQdHIoUmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICAgIGlmIChzcmMgIT0gZGVzdCkgeworKyAgICAgIHhzX21yKGRlc3Qs IHNyYyk7CisrICAgIH0KKysgIH0KKysgIHZvaWQgbW92ZVB0cihJbW1Xb3JkIGltbSwgUmVnaXN0 ZXIgZGVzdCkgeworKyAgICBpZiAoaW1tLnZhbHVlID09IDApIHsKKysgICAgICB4c19saShkZXN0 LCAwKTsKKysgICAgfSBlbHNlIGlmIChpc19pbnROKChpbnRwdHJfdClpbW0udmFsdWUsIDE2KSkg eworKyAgICAgIHhzX2xpKGRlc3QsIChpbnQxNl90KWltbS52YWx1ZSk7CisrICAgIH0gZWxzZSBp ZiAoaXNfdWludE4oaW1tLnZhbHVlLCAxNikpIHsKKysgICAgICB4c19saShkZXN0LCAwKTsKKysg ICAgICBhc19vcmkoZGVzdCwgZGVzdCwgKHVpbnQxNl90KWltbS52YWx1ZSk7CisrICAgIH0gZWxz ZSBpZiAoaXNfaW50TigoaW50cHRyX3QpaW1tLnZhbHVlLCAzMikpIHsKKysgICAgICAvLyAzMi1i aXQgc2lnbmVkOiBsaXMgKyBvcmkgKDIgaW5zdHJ1Y3Rpb25zKS4KKysgICAgICB4c19saXMoZGVz dCwgKGludDE2X3QpKCh1aW50MzJfdClpbW0udmFsdWUgPj4gMTYpKTsKKysgICAgICBpZiAoaW1t LnZhbHVlICYgMHhGRkZGKSB7CisrICAgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgKHVpbnQxNl90 KWltbS52YWx1ZSk7CisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKEhhc1BPV0VSMTAoKSAmJiBp c19pbnROKChpbnRwdHJfdClpbW0udmFsdWUsIDM0KSkgeworKyAgICAgIC8vIFBPV0VSMTAgc2lu Z2xlLWluc3RydWN0aW9uIDM0LWJpdCBzaWduZWQgaW1tZWRpYXRlLiBSZXBsYWNlcyB0aGUKKysg ICAgICAvLyA1LWluc24gZmFsbGJhY2sgZm9yIHZhbHVlcyBpbiAoMzMtMzQpLWJpdCBzaWduZWQg cmFuZ2UuCisrICAgICAgLy8gOCBieXRlcyB2cyAyMCBieXRlczsgb25lIHNsb3QgdGVtcCByZWdp c3RlciBpcyBubyBsb25nZXIgbmVlZGVkLgorKyAgICAgIGFzX3BhZGRpKGRlc3QsIHIwLCAoaW50 NjRfdClpbW0udmFsdWUsIC8qUj0qL2ZhbHNlKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAvLyBG dWxsIDY0LWJpdDogR0NDLXN0eWxlIGxpcytvcmkrbGlzK29yaStybGRpbWkgKDUgaW5zdHJ1Y3Rp b25zKS4KKysgICAgICAvLyBObyBMUiBjbG9iYmVyLCBubyBlbWJlZGRlZCBkYXRhIOKAlCBwdXJl IGluc3RydWN0aW9uIHNlcXVlbmNlLgorKyAgICAgIHVpbnQzMl90IGxvMzIgPSAodWludDMyX3Qp KGltbS52YWx1ZSk7CisrICAgICAgdWludDMyX3QgaGkzMiA9ICh1aW50MzJfdCkoaW1tLnZhbHVl ID4+IDMyKTsKKysgICAgICBSZWdpc3RlciB0ZW1wID0gKGRlc3QgIT0gU2Vjb25kU2NyYXRjaFJl ZykgPyBTZWNvbmRTY3JhdGNoUmVnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogU2F2ZWRTY3JhdGNoUmVnaXN0ZXI7CisrICAgICAgbV9idWZmZXIu ZW5zdXJlU3BhY2UoNSAqIHNpemVvZih1aW50MzJfdCkpOworKyAgICAgIHhzX2xpcyhkZXN0LCAo aW50MTZfdCkobG8zMiA+PiAxNikpOworKyAgICAgIGFzX29yaShkZXN0LCBkZXN0LCBsbzMyICYg MHhGRkZGKTsKKysgICAgICB4c19saXModGVtcCwgKGludDE2X3QpKGhpMzIgPj4gMTYpKTsKKysg ICAgICBhc19vcmkodGVtcCwgdGVtcCwgaGkzMiAmIDB4RkZGRik7CisrICAgICAgYXNfcmxkaW1p KGRlc3QsIHRlbXAsIDMyLCAwKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBtb3ZlUHRyKEltbVB0 ciBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHVpbnRwdHJfdChp bW0udmFsdWUpKSwgZGVzdCk7CisrICB9CisrCisrICAvLyBMb2FkIGEgNjQtYml0IEZQUiBjb25z dGFudCBmcm9tIHRoZSBpbmxpbmUgY29uc3RhbnQgcG9vbC4KKysgIC8vIFBPV0VSOTogMiBpbnN0 cnVjdGlvbnMgKGFkZHBjaXMgKyBsZmQpIC0tIG5vIGFsaWdubWVudCBjb25zdHJhaW50LgorKyAg Ly8gUE9XRVIxMDogMSBwcmVmaXhlZCBpbnN0cnVjdGlvbiAocGxmZCwgMiBzbG90cyksIG9yIDMg c2xvdHMgaW4gdGhlCisrICAvLyAgIChsb2FkQWRkciAmIDYzKSA9PSA2MCBhbGlnbm1lbnQtbGVh ZGluZy1ub3AgY2FzZS4gUmVzZXJ2ZSAzIHRvCisrICAvLyAgIGNvdmVyIGJvdGggY2FzZXMgY29u c2VydmF0aXZlbHkuCisrICAvLyBQT1dFUjg6IG5vdCB1c2VkIC0tIGxvYWRDb25zdGFudERvdWJs ZSBpbmxpbmVzIHRoZSBjb25zdGFudC4KKysgIEJ1ZmZlck9mZnNldCBsb2FkRnJvbVBvb2xGbG9h dDY0KEZsb2F0UmVnaXN0ZXIgZGVzdCwgZG91YmxlIHZhbHVlKSB7CisrICAgIHNpemVfdCBzbG90 cyA9IEhhc1BPV0VSMTAoKSA/IDMgOiAyOworKyAgICB1aW50MzJfdCBoaW50ID0gKHVpbnQzMl90 KGRlc3QuZW5jb2RpbmcoKSkgPDwgMTYpIHwKKysgICAgICAgICAgICAgICAgICAgICh1aW50MzJf dChQb29sTG9hZEZQUjY0KSA8PCAyMSkgfCAweEYwMDAwMDAwOworKyAgICB1aW50MzJfdCBpbnN0 WzNdID0ge2hpbnQsIE5vcEluc3QsIE5vcEluc3R9OworKyAgICByZXR1cm4gbV9idWZmZXIuYWxs b2NFbnRyeShzbG90cywgMiwgKHVpbnQ4X3QqKWluc3QsICh1aW50OF90KikmdmFsdWUpOworKyAg fQorKyAgLy8gTG9hZCBhIDMyLWJpdCBGUFIgY29uc3RhbnQgZnJvbSB0aGUgaW5saW5lIGNvbnN0 YW50IHBvb2wuCisrICAvLyBTYW1lIHNoYXBlIGFzIGxvYWRGcm9tUG9vbEZsb2F0NjQgKGFib3Zl KS4gbGZzL3BsZnMgYXV0by1leHBhbmQgdGhlCisrICAvLyAzMi1iaXQgc2luZ2xlLXByZWNpc2lv biB2YWx1ZSB0byBkb3VibGUgaW4gdGhlIEZQUiwgc28gbm8gZm9sbG93LXVwCisrICAvLyB4c2N2 c3BkcG4gaXMgbmVlZGVkLgorKyAgQnVmZmVyT2Zmc2V0IGxvYWRGcm9tUG9vbEZsb2F0MzIoRmxv YXRSZWdpc3RlciBkZXN0LCBmbG9hdCB2YWx1ZSkgeworKyAgICBzaXplX3Qgc2xvdHMgPSBIYXNQ T1dFUjEwKCkgPyAzIDogMjsKKysgICAgdWludDMyX3QgaGludCA9ICh1aW50MzJfdChkZXN0LmVu Y29kaW5nKCkpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExv YWRGUFIzMikgPDwgMjEpIHwgMHhGMDAwMDAwMDsKKysgICAgdWludDMyX3QgaW5zdFszXSA9IHto aW50LCBOb3BJbnN0LCBOb3BJbnN0fTsKKysgICAgcmV0dXJuIG1fYnVmZmVyLmFsbG9jRW50cnko c2xvdHMsIDEsICh1aW50OF90KilpbnN0LCAodWludDhfdCopJnZhbHVlKTsKKysgIH0KKysgIC8v IExvYWQgYSAxMjgtYml0IFNJTUQgY29uc3RhbnQgZnJvbSB0aGUgaW5saW5lIGNvbnN0YW50IHBv b2wuCisrICAvLyBQZXItYXJjaCBzbG90IHJlc2VydmF0aW9uIC0tIHRoZSBwYXRjaGVyIHdyaXRl cyBvbmx5IHRoZSBzbG90cworKyAgLy8gZWFjaCBtaWNyby1hcmNoIGFjdHVhbGx5IG5lZWRzOgor KyAgLy8gICBQODogNSAoYmNsICsgbWZsciArIGFkZGkgKyBseHZkMnggKyB4eHBlcm1kaSkKKysg IC8vICAgUDk6IDMgKGFkZHBjaXMgKyBhZGRpICsgbHh2eCkgLS0gbm8gTFIgdG91Y2gsIG5vIFJB UyBoYXphcmQKKysgIC8vICAgUDEwOiAzIChhbGlnbm1lbnQtc2FmZTogcHJlZml4ICsgc3VmZml4 ICsgMSByZXNlcnZlIGZvciB0aGUKKysgIC8vICAgICAgICAgIChsb2FkQWRkciAmIDYzKSA9PSA2 MCBsZWFkaW5nLW5vcCBjYXNlKQorKyAgLy8gUG9vbCBlbnRyeSBpcyA0IMOXIDQtYnl0ZSB3b3Jk cyA9IDE2IGJ5dGVzLiBQOSB1c2VzCisrICAvLyBTYXZlZFNjcmF0Y2hSZWdpc3RlciAocjE2KSBh cyB0aGUgUEMgYmFzZTsgUDEwIGVtaXRzIGEgc2luZ2xlCisrICAvLyBQQy1yZWxhdGl2ZSBwbHh2 IHdpdGggbm8gc2NyYXRjaCBhbmQgbm8gTFIgdG91Y2guIE9ubHkgUDggc3RpbGwKKysgIC8vIGNs b2JiZXJzIExSIChjb3JyZWN0bmVzcy1vbmx5IGZhbGxiYWNrOyBsaXZlIGJ5IGRlc2lnbikuCisr ICBCdWZmZXJPZmZzZXQgbG9hZEZyb21Qb29sU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGRlc3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1kQ29uc3RhbnQmIHYp IHsKKysgICAgc2l6ZV90IHNsb3RzOworKyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgICAg c2xvdHMgPSAzOworKyAgICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgICAgc2xvdHMg PSAzOworKyAgICB9IGVsc2UgeworKyAgICAgIHNsb3RzID0gNTsKKysgICAgfQorKyAgICAvLyBT aW1kMTI4IGVuY29kaW5nIGlzIDMyLTYzOyBtYXNrIHRvIDUgYml0cyBmb3IgaGludC4KKysgICAg Ly8gUGF0Y2hDb25zdGFudFBvb2xMb2FkIHNldHMgVFggYml0IHVuY29uZGl0aW9uYWxseSBmb3Ig U2ltZDEyOC4KKysgICAgdWludDMyX3QgaGludCA9ICgodWludDMyX3QoZGVzdC5lbmNvZGluZygp KSAmIDB4MUYpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExv YWRTaW1kMTI4KSA8PCAyMSkgfCAweEYwMDAwMDAwOworKyAgICB1aW50MzJfdCBpbnN0WzVdID0g e2hpbnQsIE5vcEluc3QsIE5vcEluc3QsIE5vcEluc3QsIE5vcEluc3R9OworKyAgICByZXR1cm4g bV9idWZmZXIuYWxsb2NFbnRyeShzbG90cywgNCwgKHVpbnQ4X3QqKWluc3QsICh1aW50OF90Kil2 LmJ5dGVzKCkpOworKyAgfQorKyAgdm9pZCBtb3ZlUHRyKHdhc206OlN5bWJvbGljQWRkcmVzcyBp bW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0 YW56YShkZXN0LCAodWludDY0X3QpLTEpOworKyAgICBhcHBlbmQod2FzbTo6U3ltYm9saWNBY2Nl c3MoQ29kZU9mZnNldChiby5nZXRPZmZzZXQoKSksIGltbSkpOworKyAgfQorKyAgdm9pZCBtb3Zl UHRyKEltbUdDUHRyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBCdWZmZXJPZmZzZXQgYm8g PSBlbWl0TG9hZDY0U3RhbnphKGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHVpbnQ2NF90KXVpbnRwdHJfdChpbW0udmFsdWUpKTsKKysgICAgQXNzZW1ibGVy Ojp3cml0ZURhdGFSZWxvY2F0aW9uKGJvLCBpbW0pOworKyAgfQorKworKyAgdm9pZCBtb3ZlRmxv YXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmIChz cmMgIT0gZGVzdCkgeworKyAgICAgIGFzX2ZtcihkZXN0LCBzcmMpOworKyAgICB9CisrICB9Cisr ICB2b2lkIG1vdmVEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAgICBhc19mbXIoZGVzdCwgc3JjKTsKKysg ICAgfQorKyAgfQorKworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICAvLyBCcmFuY2ggZnVuY3Rpb25zCisrCisr ICB2b2lkIGJyYW5jaChKaXRDb2RlKiBjKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0YW56YShzY3JhdGNoLCAodWludDY0 X3QpdWludHB0cl90KGMtPnJhdygpKSk7CisrICAgIGFkZFBlbmRpbmdKdW1wKGJvLCBJbW1QdHIo Yy0+cmF3KCkpLCBSZWxvY2F0aW9uS2luZDo6SklUQ09ERSk7CisrICAgIHhzX210Y3RyKHNjcmF0 Y2gpOworKyAgICBhc19iY3RyKCk7CisrICB9CisrICB2b2lkIGJyYW5jaChjb25zdCBSZWdpc3Rl ciByZWcpIHsKKysgICAgeHNfbXRjdHIocmVnKTsKKysgICAgYXNfYmN0cigpOworKyAgfQorKwor KyAgdm9pZCBqdW1wKExhYmVsKiBsYWJlbCkgeworKyAgICBpZiAobGFiZWwtPmJvdW5kKCkpIHsK KysgICAgICAvLyBPcGVuIHRoZSBuby1wb29sIHdpbmRvdyBCRUZPUkUgY29tcHV0aW5nIHRoZSBk aXNwbGFjZW1lbnQuIFRoZQorKyAgICAgIC8vIGVudGVyTm9Qb29sKCkgY2FsbCBpdHNlbGYgY2Fu IHRyaWdnZXIgYSBwb29sIGZsdXNoLCB3aGljaCBhZHZhbmNlcworKyAgICAgIC8vIGN1cnJlbnRP ZmZzZXQoKS4gQ29tcHV0aW5nIHRoZSBkaXNwbGFjZW1lbnQgYWdhaW5zdCB0aGUgcHJlLWZsdXNo CisrICAgICAgLy8gb2Zmc2V0IGFuZCB0aGVuIGVtaXR0aW5nIHRoZSBiIGF0IHRoZSBwb3N0LWZs dXNoIG9mZnNldCB3b3VsZCBsYW5kCisrICAgICAgLy8gdGhlIGJyYW5jaCAocG9vbFNpemUpIGJ5 dGVzIHBhc3QgdGhlIGludGVuZGVkIHRhcmdldC4KKysgICAgICBtX2J1ZmZlci5lbnRlck5vUG9v bCgyKTsKKysgICAgICBpbnQzMl90IG9mZnNldCA9IGxhYmVsLT5vZmZzZXQoKSAtIGN1cnJlbnRP ZmZzZXQoKTsKKysgICAgICBpZiAoSk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zmc2V0KSkgeworKyAg ICAgICAgYXNfYihvZmZzZXQpOworKyAgICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICAg ICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgICAgICAgIHJldHVybjsKKysgICAgICB9Cisr ICAgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgICAgICAvLyBMb25nIGp1bXAgdG8gYm91 bmQgbGFiZWwuCisrICAgICAgQnVmZmVyT2Zmc2V0IGJvID0KKysgICAgICAgICAgZW1pdExvYWQ2 NFN0YW56YShTZWNvbmRTY3JhdGNoUmVnLCBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysg ICAgICB4c19tdGN0cihTZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgICBhc19iY3RyKCk7CisrICAg ICAgYWRkTG9uZ0p1bXAoYm8sIEJ1ZmZlck9mZnNldChsYWJlbC0+b2Zmc2V0KCkpKTsKKysgICAg ICByZXR1cm47CisrICAgIH0KKysgICAgLy8gVW5ib3VuZCBsYWJlbDogZW1pdCB0cmFwLXRhZ2dl ZCBzdGFuemEgKDEwIHNsb3RzKS4KKysgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBh dGNoYWJsZUJyYW5jaEluc25zKTsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0geHNfdHJhcF90YWdn ZWQoQlRhZyk7CisrICAgIHdyaXRlSW5zdChsYWJlbC0+dXNlZCgpID8gbGFiZWwtPm9mZnNldCgp IDogTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsK KysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAg IHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0 ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0 KE5vcEluc3QpOworKyAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgICBpZiAoIW9vbSgp KSB7CisrICAgICAgbGFiZWwtPnVzZShiby5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgIH0KKysg IHZvaWQganVtcChSZWdpc3RlciByZWcpIHsKKysgICAgeHNfbXRjdHIocmVnKTsKKysgICAgYXNf YmN0cigpOworKyAgfQorKyAgdm9pZCBqdW1wKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKKysg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBsb2FkUHRyKGFkZHJlc3MsIHNjcmF0Y2gp OworKyAgICB4c19tdGN0cihzY3JhdGNoKTsKKysgICAgYXNfYmN0cigpOworKyAgfQorKyAgdm9p ZCBqdW1wKEppdENvZGUqIGNvZGUpIHsgYnJhbmNoKGNvZGUpOyB9CisrICB2b2lkIGp1bXAoSW1t UHRyIHB0cikgeworKyAgICBCdWZmZXJPZmZzZXQgYm8gPQorKyAgICAgICAgZW1pdExvYWQ2NFN0 YW56YShTZWNvbmRTY3JhdGNoUmVnLCAodWludDY0X3QpdWludHB0cl90KHB0ci52YWx1ZSkpOwor KyAgICBhZGRQZW5kaW5nSnVtcChibywgcHRyLCBSZWxvY2F0aW9uS2luZDo6SEFSRENPREVEKTsK KysgICAgeHNfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgIGFzX2JjdHIoKTsKKysgIH0K KysgIHZvaWQganVtcChUcmFtcG9saW5lUHRyIGNvZGUpIHsganVtcChJbW1QdHIoY29kZS52YWx1 ZSkpOyB9CisrCisrICAvLyBDb25kaXRpb25hbCBicmFuY2ggdG8gbGFiZWwuIEFzc3VtZXMgYSBj b21wYXJlIGluc3RydWN0aW9uIGhhcyBhbHJlYWR5CisrICAvLyBiZWVuIGVtaXR0ZWQgdGhhdCBz ZXRzIENSMC4KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb25kVD4KKysgIHZvaWQgbWFfYihDb25k VCBjb25kLCBMYWJlbCogbGFiZWwpIHsKKysgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf djxDb25kVCwgQ29uZGl0aW9uPikgeworKyAgICAgIGlmIChjb25kID09IEFsd2F5cykgeworKyAg ICAgICAganVtcChsYWJlbCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAgICB9Cisr ICAgIGlmIChsYWJlbC0+Ym91bmQoKSkgeworKyAgICAgIC8vIE9wZW4gdGhlIG5vLXBvb2wgd2lu ZG93IEJFRk9SRSBjb21wdXRpbmcgdGhlIGRpc3BsYWNlbWVudC4gU2FtZQorKyAgICAgIC8vIGhh emFyZCBhcyBqdW1wKCk6IGVudGVyTm9Qb29sIG1heSBpdHNlbGYgZmx1c2ggYSBwZW5kaW5nIHBv b2wsCisrICAgICAgLy8gYWR2YW5jaW5nIGN1cnJlbnRPZmZzZXQoKTsgdGhlIGJjIG11c3QgZW1p dCB3aXRoIGEgZGlzcGxhY2VtZW50CisrICAgICAgLy8gY29tcHV0ZWQgYWdhaW5zdCB0aGUgcG9z dC1mbHVzaCBvZmZzZXQuIEJ1ZGdldCBjb3ZlcnMgbWF4IDYKKysgICAgICAvLyBpbnN0cnVjdGlv bnM6IFBPV0VSOCBPdmVyZmxvdyBYRVIgb3BzICgzKSArIGNyb3IgKDEpICsgYmMgKDEpICsKKysg ICAgICAvLyBub3AgKDEpIGZvciB0aGUgd29yc3QtY2FzZSBEb3VibGVDb25kaXRpb24rT3ZlcmZs b3cgc2hvcnQgcGF0aC4KKysgICAgICBtX2J1ZmZlci5lbnRlck5vUG9vbCg2KTsKKysgICAgICAv LyBGb3IgRG91YmxlQ29uZGl0aW9uLCBhc19iYyBlbWl0cyBjcm9yL2NyYW5kYyBiZWZvcmUgdGhl IGJjCisrICAgICAgLy8gaW5zdHJ1Y3Rpb24sIGFkdmFuY2luZyBjdXJyZW50T2Zmc2V0KCkgYnkg NC4gQWNjb3VudCBmb3IgdGhpcworKyAgICAgIC8vIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24u CisrICAgICAgaW50MzJfdCBjckFkanVzdCA9IDA7CisrICAgICAgaWYgY29uc3RleHByIChzdGQ6 OmlzX3NhbWVfdjxDb25kVCwgRG91YmxlQ29uZGl0aW9uPikgeworKyAgICAgICAgY3JBZGp1c3Qg PSAtKGludDMyX3Qpc2l6ZW9mKHVpbnQzMl90KTsKKysgICAgICB9CisrICAgICAgaW50MzJfdCBv ZmZzZXQgPSBsYWJlbC0+b2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0KCkgKyBjckFkanVzdDsKKysg ICAgICBpZiAoQk9mZkltbTE2OjpJc0luUmFuZ2Uob2Zmc2V0KSkgeworKyAgICAgICAgYXNfYmMo KGludDE2X3Qpb2Zmc2V0LCBjb25kKTsKKysgICAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysg ICAgICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgICAgICByZXR1cm47CisrICAgICAg fQorKyAgICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgICAgLy8gTG9uZyBjb25kaXRp b25hbCBicmFuY2ggZm9yIGJvdW5kIGxhYmVsLgorKyAgICAgIC8vIFhFUiBvcHMoMC0zKSArIGNy b3IoMC0xKSArIGJjKDEpICsgc3RhbnphKDgpICsgbXRjdHIoMSkgKyBiY3RyKDEpLgorKyAgICAg IC8vIFA4IE92ZXJmbG93OiBtZnhlcitybHdpbm0rbXRjcmYrYmMrc3RhbnphK210Y3RyK2JjdHIg PSAxNCBtYXguCisrICAgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbENvbmRMb25nQnJh bmNoSW5zbnNQOE1heCk7CisrICAgICAgYXNfYmMoKGludDE2X3QpNDQsIEludmVydENvbmRpdGlv bihjb25kKSk7CisrICAgICAgQnVmZmVyT2Zmc2V0IGJvTG9hZCA9CisrICAgICAgICAgIGVtaXRM b2FkNjRTdGFuemEoU2Vjb25kU2NyYXRjaFJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7 CisrICAgICAgeHNfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgICAgYXNfYmN0cigpOwor KyAgICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgICAgYWRkTG9uZ0p1bXAoYm9Mb2Fk LCBCdWZmZXJPZmZzZXQobGFiZWwtPm9mZnNldCgpKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9 CisrICAgIC8vIEZvcndhcmQgcmVmZXJlbmNlOiBlbWl0IEJDVGFnIHN0YW56YS4KKysgICAgLy8g WEVSIG9wcygwLTMpICsgY3JvcigwLTEpICsgYmMoMSkgKyB0cmFwX3RhZ2dlZCgxKSArIGNoYWlu KDEpICsgOCBOT1BzLgorKyAgICAvLyBQOCBPdmVyZmxvdzogbWZ4ZXIrcmx3aW5tK210Y3JmK2Jj K3RyYXArY2hhaW4rOE5PUHMgPSAxNCBtYXguCisrICAgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtO b1Bvb2xDb25kTG9uZ0JyYW5jaEluc25zUDhNYXgpOworKyAgICBhc19iYygoaW50MTZfdCk0NCwg SW52ZXJ0Q29uZGl0aW9uKGNvbmQpKTsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0geHNfdHJhcF90 YWdnZWQoQkNUYWcpOworKyAgICB3cml0ZUluc3QobGFiZWwtPnVzZWQoKSA/IGxhYmVsLT5vZmZz ZXQoKSA6IExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICB3cml0ZUluc3QoTm9wSW5z dCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOwor KyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAg d3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRl SW5zdChOb3BJbnN0KTsKKysgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgICAgaWYgKCFv b20oKSkgeworKyAgICAgIGxhYmVsLT51c2UoYm8uZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICB9 CisrCisrICAvLyBTZXQgZGVzdCA9IDEgaWYgQ1IwIHNhdGlzZmllcyBjb25kLCBlbHNlIGRlc3Qg PSAwLgorKyAgLy8gUE9XRVIxMDogc2V0YmMvc2V0YmNyICgxIGluc24pLiBQOC9QOTogaXNlbC1i YXNlZCBwYXRoIHdpdGggdGhlCisrICAvLyByMC1hcy16ZXJvIHRyaWNrIG9uIHRoZSBCcmFuY2hP bkNsZWFyIGhhbGYuCisrICB2b2lkIG1hX2NtcF9zZXQoUmVnaXN0ZXIgZGVzdCwgQ29uZGl0aW9u IGNvbmQpIHsKKysgICAgdWludDMyX3QgYmFzZSA9IHVpbnQzMl90KGNvbmQpICYgMHhmZjsKKysg ICAgdWludDMyX3Qgc2V0YmFzZSA9IChiYXNlICYgfkJyYW5jaE9wdGlvbk1hc2spIHwgQnJhbmNo T25TZXQ7CisrICAgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgICBpZiAoKGJhc2UgJiBCcmFu Y2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkgeworKyAgICAgICAgYXNfc2V0YmMoZGVzdCwg c2V0YmFzZSwgY3IwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgYXNfc2V0YmNyKGRlc3Qs IHNldGJhc2UsIGNyMCk7CisrICAgICAgfQorKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIHhzX2xpKHNjcmF0Y2gsIDEpOworKyAgICBpZiAo KGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkgeworKyAgICAgIHhzX2xp KGRlc3QsIDApOworKyAgICAgIGFzX2lzZWwoZGVzdCwgc2NyYXRjaCwgZGVzdCwgc2V0YmFzZSwg Y3IwKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19pc2VsMChkZXN0LCByMCwgc2NyYXRjaCwg c2V0YmFzZSwgY3IwKTsKKysgICAgfQorKyAgfQorKworKyAgdm9pZCBtYV9jbXBfc2V0X2RibChS ZWdpc3RlciBkZXN0LCBEb3VibGVDb25kaXRpb24gY29uZCkgeworKyAgICB1aW50MzJfdCBiYXNl ID0gdWludDMyX3QoY29uZCkgJiAweGZmOworKyAgICBib29sIGhhc1Vub3JkZXJlZEZsYWcgPSB1 aW50MzJfdChjb25kKSAmIERvdWJsZUNvbmRpdGlvblVub3JkZXJlZDsKKysgICAgdWludDMyX3Qg c2V0YmFzZSA9IChiYXNlICYgfkJyYW5jaE9wdGlvbk1hc2spIHwgQnJhbmNoT25TZXQ7CisrICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAg IGlmICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJyYW5jaE9uU2V0KSB7CisrICAgICAg ICBhc19zZXRiYyhkZXN0LCBzZXRiYXNlLCBjcjApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICBhc19zZXRiY3IoZGVzdCwgc2V0YmFzZSwgY3IwKTsKKysgICAgICB9CisrICAgICAgLy8gRml4 dXAgcGF0aHMgYmVsb3cgc3RpbGwgbmVlZCBzY3JhdGNoPTEgZm9yIHRoZSBTTy1pc2VsLgorKyAg ICAgIGlmIChoYXNVbm9yZGVyZWRGbGFnIHx8ICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spICE9 IEJyYW5jaE9uU2V0ICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQgIT0g RG91YmxlT3JkZXJlZCkpIHsKKysgICAgICAgIHhzX2xpKHNjcmF0Y2gsIDEpOworKyAgICAgIH0K KysgICAgfSBlbHNlIHsKKysgICAgICB4c19saShzY3JhdGNoLCAxKTsKKysgICAgICBpZiAoKGJh c2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkgeworKyAgICAgICAgeHNfbGko ZGVzdCwgMCk7CisrICAgICAgICBhc19pc2VsKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIHNldGJhc2Us IGNyMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX2lzZWwwKGRlc3QsIHIwLCBzY3Jh dGNoLCBzZXRiYXNlLCBjcjApOworKyAgICAgIH0KKysgICAgfQorKyAgICBpZiAoaGFzVW5vcmRl cmVkRmxhZykgeworKyAgICAgIC8vIENvbmRpdGlvbiBpbmNsdWRlcyB1bm9yZGVyZWQgKE5hTik6 IGZvcmNlIGRlc3Q9MSB3aGVuIFNPIGlzIHNldC4KKysgICAgICAvLyBpc2VsIGRlc3QsIHNjcmF0 Y2goPTEpLCBkZXN0LCBTTworKyAgICAgIGFzX2lzZWwoZGVzdCwgc2NyYXRjaCwgZGVzdCwgdWlu dDE2X3QoU09CaXQpLCBjcjApOworKyAgICB9IGVsc2UgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9u TWFzaykgIT0gQnJhbmNoT25TZXQgJiYKKysgICAgICAgICAgICAgICBjb25kICE9IERvdWJsZU9y ZGVyZWQpIHsKKysgICAgICAvLyBPcmRlcmVkIGNvbXBhcmlzb24gdGhhdCBuZWdhdGVzIGEgQ1Ig Yml0IChCcmFuY2hPbkNsZWFyKTogTmFOCisrICAgICAgLy8gcHJvZHVjZXMgYWxsLXplcm8gTFQv R1QvRVEgYml0cyB3aGljaCBtYWtlcyB0aGUgbmVnYXRpb24gcmV0dXJuCisrICAgICAgLy8gdHJ1 ZS4gIEZpeCBieSBmb3JjaW5nIGRlc3Q9MCB3aGVuIFNPIGlzIHNldC4KKysgICAgICBhc19pc2Vs MChkZXN0LCByMCwgZGVzdCwgdWludDE2X3QoU09CaXQpLCBjcjApOworKyAgICB9CisrICB9Cisr CisrICAvLyBDb25kaXRpb25hbCBtb3ZlOiBpZiBDUjAgc2F0aXNmaWVzIGNvbmQsIGRlc3QgPSBz cmMuCisrICB2b2lkIG1hX2NtcF9tb3ZlKFJlZ2lzdGVyIGRlc3QsIFJlZ2lzdGVyIHNyYywgQ29u ZGl0aW9uIGNvbmQpIHsKKysgICAgdWludDMyX3QgYmFzZSA9IHVpbnQzMl90KGNvbmQpICYgMHhm ZjsKKysgICAgdWludDMyX3Qgc2V0YmFzZSA9IChiYXNlICYgfkJyYW5jaE9wdGlvbk1hc2spIHwg QnJhbmNoT25TZXQ7CisrICAgIGlmICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJyYW5j aE9uU2V0KSB7CisrICAgICAgYXNfaXNlbChkZXN0LCBzcmMsIGRlc3QsIHNldGJhc2UsIGNyMCk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfaXNlbChkZXN0LCBkZXN0LCBzcmMsIHNldGJhc2Us IGNyMCk7CisrICAgIH0KKysgIH0KKysKKysgIC8vIElmIGNvbmQgPT0gMCwgbW92ZSBzcmMgdG8g ZHN0OyBvdGhlcndpc2UgZHN0IGlzIHVuY2hhbmdlZC4gVGhlIG9ubHkKKysgIC8vIGNhbGxlcnMg YXJlIHdhc20gc2VsZWN0LCB3aG9zZSBjb25kaXRpb24gaXMgYSAzMi1iaXQgdmFsdWU6IHRlc3Qg aXRzCisrICAvLyAzMi1iaXQgc2lnbiB3aXRoIGNtcHdpIHNvIGhpZ2gtYml0IGdhcmJhZ2UgKGUu Zy4gdW5kZXIgcmVnaXN0ZXIgcHJlc3N1cmUpCisrICAvLyBkb2VzIG5vdCBtYWtlIGEgemVybyBj b25kaXRpb24gcmVhZCBhcyBub24temVyby4KKysgIHZvaWQgbW92ZUlmWmVybyhSZWdpc3RlciBk c3QsIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgY29uZCkgeworKyAgICBhc19jbXB3aShjb25kLCAw KTsKKysgICAgYXNfaXNlbChkc3QsIHNyYywgZHN0LCBFcXVhbCwgY3IwKTsKKysgIH0KKysKKysg IHZvaWQgbWFfYWRkMzJUZXN0Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycywgSW1tMzIgaW1tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3Zl cmZsb3cpOworKyAgdm9pZCBtYV9hZGRQdHJUZXN0Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyIHJkLCBSZWdpc3RlciBycywgSW1tV29yZCBpbW0sCisrICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogb3ZlcmZsb3cpOworKworKyAgLy8gSXNzdWUgdGhlIGNvcnJlY3QgY29tcGFy ZSBpbnN0cnVjdGlvbiBmb3IgdGhlIGdpdmVuIGNvbmRpdGlvbiBhbmQKKysgIC8vIG9wZXJhbmQg c2l6ZXMuIFJldHVybnMgdGhlIGNvbmRpdGlvbiB0byB1c2Ugd2l0aCBtYV9iIG9yIG1hX2NtcF9z ZXQKKysgIC8vICh1c3VhbGx5IHRoZSBzYW1lLCBidXQgdW5zaWduZWQgY29uZGl0aW9ucyB1c2Ug Y21wbCogdmFyaWFudHMpLgorKyAgQ29uZGl0aW9uIG1hX2NtcChSZWdpc3RlciBsaHMsIFJlZ2lz dGVyIHJocywgQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgIGJvb2wgaXMzMmJp dCA9IGZhbHNlKSB7CisrICAgIENvbmRpdGlvbiBiYXNlID0KKysgICAgICAgIHN0YXRpY19jYXN0 PENvbmRpdGlvbj4oY29uZCAmIH4oQ29uZGl0aW9uVW5zaWduZWQgfCBDb25kaXRpb25aZXJvKSk7 CisrICAgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25kICYgQ29uZGl0aW9uVW5zaWduZWQpICE9IDA7 CisrICAgIC8vIENvbmRpdGlvblplcm8tZmxhZ2dlZCBjb25kaXRpb25zIChTaWduZWQsIE5vdFNp Z25lZCwgWmVybywgTm9uWmVybykKKysgICAgLy8gdGVzdCBhIHNpbmdsZSByZWdpc3RlciBhZ2Fp bnN0IHplcm8sIG5vdCB0d28gcmVnaXN0ZXJzIGFnYWluc3QgZWFjaAorKyAgICAvLyBvdGhlci4g Q29tcGFyZSBhZ2FpbnN0IGltbWVkaWF0ZSAwLgorKyAgICBpZiAoKGNvbmQgJiBDb25kaXRpb25a ZXJvKSAhPSAwKSB7CisrICAgICAgaWYgKGlzMzJiaXQpIHsKKysgICAgICAgIGFzX2NtcHdpKGxo cywgMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX2NtcGRpKGxocywgMCk7CisrICAg ICAgfQorKyAgICAgIHJldHVybiBiYXNlOworKyAgICB9CisrICAgIGlmIChpczMyYml0KSB7Cisr ICAgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICAgIGFzX2NtcGx3KGxocywgcmhzKTsKKysg ICAgICB9IGVsc2UgeworKyAgICAgICAgYXNfY21wdyhsaHMsIHJocyk7CisrICAgICAgfQorKyAg ICB9IGVsc2UgeworKyAgICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgICAgICBhc19jbXBsZChs aHMsIHJocyk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX2NtcGQobGhzLCByaHMpOwor KyAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gYmFzZTsKKysgIH0KKysKKysgIENvbmRpdGlv biBtYV9jbXAoUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsIENvbmRpdGlvbiBjb25kLAorKyAgICAg ICAgICAgICAgICAgICBib29sIGlzMzJiaXQgPSBmYWxzZSkgeworKyAgICBDb25kaXRpb24gYmFz ZSA9CisrICAgICAgICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+KENvbmRpdGlvblVu c2lnbmVkIHwgQ29uZGl0aW9uWmVybykpOworKyAgICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAm IENvbmRpdGlvblVuc2lnbmVkKSAhPSAwOworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAg IGlmIChpc191aW50TihyaHMudmFsdWUsIDE2KSkgeworKyAgICAgICAgaWYgKGlzMzJiaXQpIHsK KysgICAgICAgICAgYXNfY21wbHdpKGxocywgcmhzLnZhbHVlKTsKKysgICAgICAgIH0gZWxzZSB7 CisrICAgICAgICAgIGFzX2NtcGxkaShsaHMsIHJocy52YWx1ZSk7CisrICAgICAgICB9CisrICAg ICAgICByZXR1cm4gYmFzZTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgaWYgKGlz X2ludE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAgICAgIGlmIChpczMyYml0KSB7CisrICAgICAg ICAgIGFzX2NtcHdpKGxocywgcmhzLnZhbHVlKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAg ICAgIGFzX2NtcGRpKGxocywgcmhzLnZhbHVlKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVy biBiYXNlOworKyAgICAgIH0KKysgICAgfQorKyAgICAvLyBJbW1lZGlhdGUgZG9lc24ndCBmaXQg 4oCUIG1hdGVyaWFsaXplIGludG8gc2NyYXRjaCBhbmQgY29tcGFyZS4KKysgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIocmhzLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIG1h X2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQsIGlzMzJiaXQpOworKyAgfQorKworKyAgQ29uZGl0aW9u IG1hX2NtcChSZWdpc3RlciBsaHMsIEltbVdvcmQgcmhzLCBDb25kaXRpb24gY29uZCkgeworKyAg ICBDb25kaXRpb24gYmFzZSA9CisrICAgICAgICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQg JiB+KENvbmRpdGlvblVuc2lnbmVkIHwgQ29uZGl0aW9uWmVybykpOworKyAgICBib29sIGlzVW5z aWduZWQgPSAoY29uZCAmIENvbmRpdGlvblVuc2lnbmVkKSAhPSAwOworKyAgICBpZiAoaXNVbnNp Z25lZCkgeworKyAgICAgIGlmIChpc191aW50TihyaHMudmFsdWUsIDE2KSkgeworKyAgICAgICAg YXNfY21wbGRpKGxocywgcmhzLnZhbHVlKTsKKysgICAgICAgIHJldHVybiBiYXNlOworKyAgICAg IH0KKysgICAgfSBlbHNlIHsKKysgICAgICBpZiAoaXNfaW50TihyaHMudmFsdWUsIDE2KSkgewor KyAgICAgICAgYXNfY21wZGkobGhzLCByaHMudmFsdWUpOworKyAgICAgICAgcmV0dXJuIGJhc2U7 CisrICAgICAgfQorKyAgICB9CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92 ZVB0cihyaHMsIHNjcmF0Y2gpOworKyAgICByZXR1cm4gbWFfY21wKGxocywgc2NyYXRjaCwgY29u ZCk7CisrICB9CisrCisrICBDb25kaXRpb24gbWFfY21wKFJlZ2lzdGVyIGxocywgSW1tUHRyIHJo cywgQ29uZGl0aW9uIGNvbmQpIHsKKysgICAgcmV0dXJuIG1hX2NtcChsaHMsIEltbVdvcmQodWlu dHB0cl90KHJocy52YWx1ZSkpLCBjb25kKTsKKysgIH0KKysKKysgIENvbmRpdGlvbiBtYV9jbXAo UmVnaXN0ZXIgbGhzLCBJbW1HQ1B0ciByaHMsIENvbmRpdGlvbiBjb25kKSB7CisrICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihyaHMsIHNjcmF0Y2gpOworKyAgICByZXR1 cm4gbWFfY21wKGxocywgc2NyYXRjaCwgY29uZCk7CisrICB9CisrCisrICBDb25kaXRpb24gbWFf Y21wKFJlZ2lzdGVyIGxocywgSW1tVGFnIHJocywgQ29uZGl0aW9uIGNvbmQpIHsKKysgICAgLy8g VGFnIHZhbHVlcyBvbiBQVU5CT1g2NCBhcmUgMTctYml0ICgweDFGRkYwKyksIHRvbyBsYXJnZSBm b3IgMTYtYml0CisrICAgIC8vIHNpZ25lZCBvciB1bnNpZ25lZCBpbW1lZGlhdGVzLgorKyAgICBD b25kaXRpb24gYmFzZSA9CisrICAgICAgICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+ KENvbmRpdGlvblVuc2lnbmVkIHwgQ29uZGl0aW9uWmVybykpOworKyAgICBib29sIGlzVW5zaWdu ZWQgPSAoY29uZCAmIENvbmRpdGlvblVuc2lnbmVkKSAhPSAwOworKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIG1vdmUzMihJbW0zMihyaHMudmFsdWUpLCBzY3JhdGNoKTsKKysgICAg aWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19jbXBsZChsaHMsIHNjcmF0Y2gpOworKyAgICB9 IGVsc2UgeworKyAgICAgIGFzX2NtcGQobGhzLCBzY3JhdGNoKTsKKysgICAgfQorKyAgICByZXR1 cm4gYmFzZTsKKysgIH0KKysKKysgIC8vIENvbXBhcmUgYSB0YWcgcmVnaXN0ZXIgYWdhaW5zdCBh biBJbW1UYWcgY29uc3RhbnQgYW5kIGJyYW5jaCwgV0lUSE9VVAorKyAgLy8gYWNxdWlyaW5nIGEg c2NyYXRjaCByZWdpc3Rlci4gIFVzZXMgeG9yaXMrY21wbHdpIHdoaWNoIE1PRElGSUVTIHRhZ1Jl Zy4KKysgIC8vIE9ubHkgc2FmZSB3aGVuIHRhZ1JlZyBpcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgb3du ZWQgYnkgdGhlIGNhbGxlci4KKysgIHZvaWQgYnJhbmNoVGVzdFRhZyhDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgdGFnUmVnLCBJbW1UYWcgdGFnLCBMYWJlbCogbGFiZWwpIHsKKysgICAgTU9aX0FT U0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgICB1aW50MzJfdCB0 ID0gdGFnLnZhbHVlOworKyAgICBhc194b3Jpcyh0YWdSZWcsIHRhZ1JlZywgdCA+PiAxNik7Cisr ICAgIGFzX2NtcGx3aSh0YWdSZWcsIHQgJiAweEZGRkYpOworKyAgICBDb25kaXRpb24gYyA9IChj b25kID09IEVxdWFsKSA/IEVxdWFsIDogTm90RXF1YWw7CisrICAgIG1hX2IoYywgbGFiZWwpOwor KyAgfQorKworKyAgdm9pZCBtYV9tb2RfbWFzayhSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qs IFJlZ2lzdGVyIGhvbGQsIFJlZ2lzdGVyIHJlbWFpbiwKKysgICAgICAgICAgICAgICAgICAgaW50 MzJfdCBzaGlmdCwgTGFiZWwqIG5lZ1plcm8gPSBudWxscHRyKTsKKysKKysgIHZvaWQgbm9wKCkg eyB3cml0ZUluc3QoTm9wSW5zdCk7IH0KKysgIHZvaWQgYnJlYWtwb2ludCh1aW50MzJfdCB2YWx1 ZSA9IDApIHsgeHNfdHJhcCgpOyB9CisrCisrICBpbmxpbmUgdm9pZCByZXRuKEltbTMyIG4pOwor KworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICAvLyBTdGFjayBvcGVyYXRpb25zCisrCisrICB2b2lkIHB1c2go SW1tMzIgaW1tKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK KysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKGlt bSwgc2NyYXRjaCk7CisrICAgIHB1c2goc2NyYXRjaCk7CisrICB9CisrICB2b2lkIHB1c2goSW1t V29yZCBpbW0pIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwor KyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKGlt bSwgc2NyYXRjaCk7CisrICAgIHB1c2goc2NyYXRjaCk7CisrICB9CisrICB2b2lkIHB1c2goSW1t R0NQdHIgaW1tKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK KysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihp bW0sIHNjcmF0Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCBwdXNoKGNv bnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICBsb2FkUHRyKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQor KyAgdm9pZCBwdXNoKFJlZ2lzdGVyIHJlZykgeyBhc19zdGR1KHJlZywgU3RhY2tQb2ludGVyLCAt OCk7IH0KKysgIHZvaWQgcHVzaChGbG9hdFJlZ2lzdGVyIHJlZykgeworKyAgICAvLyBzdGZkdS9z dGZzdSBmdXNlcyB0aGUgU1AgZGVjcmVtZW50IGFuZCB0aGUgRlAgc3RvcmU6IEVBPVNQLTgsCisr ICAgIC8vIE1FTVtFQV09cmVnLCBTUD1FQS4gMSBpbnNuIGluc3RlYWQgb2YgYWRkaStzdGZkL3N0 ZnMuCisrICAgIGlmIChyZWcuaXNTaW5nbGUoKSkgeworKyAgICAgIGFzX3N0ZnN1KHJlZywgU3Rh Y2tQb2ludGVyLCAtOCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfc3RmZHUocmVnLCBTdGFj a1BvaW50ZXIsIC04KTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBwb3AoUmVnaXN0ZXIgcmVnKSB7 CisrICAgIGFzX2xkKHJlZywgU3RhY2tQb2ludGVyLCAwKTsKKysgICAgYXNfYWRkaShTdGFja1Bv aW50ZXIsIFN0YWNrUG9pbnRlciwgOCk7CisrICB9CisrICB2b2lkIHBvcChGbG9hdFJlZ2lzdGVy IHJlZykgeworKyAgICBpZiAocmVnLmlzU2luZ2xlKCkpIHsKKysgICAgICBhc19sZnMocmVnLCBT dGFja1BvaW50ZXIsIDApOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX2xmZChyZWcsIFN0YWNr UG9pbnRlciwgMCk7CisrICAgIH0KKysgICAgYXNfYWRkaShTdGFja1BvaW50ZXIsIFN0YWNrUG9p bnRlciwgOCk7CisrICB9CisrCisrICBDb2RlT2Zmc2V0IHB1c2hXaXRoUGF0Y2goSW1tV29yZCBp bW0pIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBDb2RlT2Zmc2V0IG9mZnNl dCA9IG1vdldpdGhQYXRjaChpbW0sIHNjcmF0Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAg ICByZXR1cm4gb2Zmc2V0OworKyAgfQorKyAgQ29kZU9mZnNldCBtb3ZXaXRoUGF0Y2goSW1tV29y ZCBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2 NFN0YW56YShkZXN0LCAodWludDY0X3QpaW1tLnZhbHVlKTsKKysgICAgcmV0dXJuIENvZGVPZmZz ZXQoYm8uZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgQ29kZU9mZnNldCBtb3ZXaXRoUGF0Y2goSW1t UHRyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICByZXR1cm4gbW92V2l0aFBhdGNoKEltbVdv cmQodWludHB0cl90KGltbS52YWx1ZSkpLCBkZXN0KTsKKysgIH0KKysKKysgIC8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAgLy8gVGFnL3VuYm94IG9wZXJhdGlvbnMKKysKKysgIHZvaWQgc3BsaXRUYWcoUmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIHhfc3JkaShkZXN0LCBzcmMsIEpTVkFMX1RBR19T SElGVCk7CisrICB9CisrICB2b2lkIHNwbGl0VGFnKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFu ZCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBzcGxpdFRhZyhvcGVyYW5kLnZhbHVlUmVnKCksIGRl c3QpOworKyAgfQorKyAgdm9pZCBzcGxpdFRhZ0ZvclRlc3QoY29uc3QgVmFsdWVPcGVyYW5kJiB2 YWx1ZSwgU2NyYXRjaFRhZ1Njb3BlJiB0YWcpIHsKKysgICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7 CisrICB9CisrCisrICB2b2lkIHVuYm94Tm9uRG91YmxlKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3Bl cmFuZCwgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5cGUg dHlwZSkgeworKyAgICB1bmJveE5vbkRvdWJsZShvcGVyYW5kLnZhbHVlUmVnKCksIGRlc3QsIHR5 cGUpOworKyAgfQorKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICB2b2lkIHVuYm94Tm9uRG91 YmxlKFQgc3JjLCBSZWdpc3RlciBkZXN0LCBKU1ZhbHVlVHlwZSB0eXBlKSB7CisrICAgIE1PWl9B U1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX0RPVUJMRSk7CisrICAgIGlmICh0eXBlID09IEpTVkFM X1RZUEVfSU5UMzIgfHwgdHlwZSA9PSBKU1ZBTF9UWVBFX0JPT0xFQU4pIHsKKysgICAgICBsb2Fk MzIoc3JjLCBkZXN0KTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgbG9hZFB0cihzcmMs IGRlc3QpOworKyAgICB1bmJveE5vbkRvdWJsZShkZXN0LCBkZXN0LCB0eXBlKTsKKysgIH0KKysg IHZvaWQgdW5ib3hOb25Eb3VibGUoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBKU1ZhbHVl VHlwZSB0eXBlKSB7CisrICAgIE1PWl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX0RPVUJMRSk7 CisrICAgIGlmICh0eXBlID09IEpTVkFMX1RZUEVfSU5UMzIgfHwgdHlwZSA9PSBKU1ZBTF9UWVBF X0JPT0xFQU4pIHsKKysgICAgICBhc19leHRzdyhkZXN0LCBzcmMpOworKyAgICAgIHJldHVybjsK KysgICAgfQorKyAgICAvLyBFeHRyYWN0IHRoZSBwYXlsb2FkIChsb3dlciA0NyBiaXRzKSBieSBj bGVhcmluZyB0aGUgdGFnLgorKyAgICAvLyBUaGlzIGF2b2lkcyBhY3F1aXJpbmcgYSBzY3JhdGNo IHJlZ2lzdGVyLCBwcmV2ZW50aW5nIHBvb2wgZXhoYXVzdGlvbgorKyAgICAvLyB3aGVuIGNhbGxl ZCBmcm9tIG5lc3RlZCBzY3JhdGNoIHNjb3BlcyAoZS5nLiwgU2NyYXRjaFRhZ1Njb3BlIOKGkgor KyAgICAvLyBicmFuY2hUZXN0U3RyaW5nVHJ1dGh5IOKGkiB1bmJveFN0cmluZyDihpIgaGVyZSku CisrICAgIC8vIHJsZGljbCBkZXN0LCBzcmMsIDAsIDE3IOKAlCBjbGVhciB1cHBlciAxNyBiaXRz ICh0YWcpLCBrZWVwIGxvd2VyIDQ3LgorKyAgICBhc19ybGRpY2woZGVzdCwgc3JjLCAwLCAxNyk7 CisrICB9CisrICB2b2lkIHVuYm94R0NUaGluZ0ZvckdDQmFycmllcihjb25zdCBBZGRyZXNzJiBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbG9hZFB0cihzcmMsIGRlc3QpOworKyAgICAvLyBD bGVhciB0YWcgYml0cyAodG9wIDE3IGJpdHMgb24gNjQtYml0KS4KKysgICAgYXNfcmxkaWNsKGRl c3QsIGRlc3QsIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZUKTsKKysgIH0KKysgIHZvaWQgdW5ib3hH Q1RoaW5nRm9yR0NCYXJyaWVyKGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0 KSB7CisrICAgIGFzX3JsZGljbChkZXN0LCBzcmMudmFsdWVSZWcoKSwgMCwgNjQgLSBKU1ZBTF9U QUdfU0hJRlQpOworKyAgfQorKyAgdm9pZCB1bmJveFdhc21BbnlSZWZHQ1RoaW5nRm9yR0NCYXJy aWVyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBzdGF0aWNfYXNz ZXJ0KHdhc206OkFueVJlZjo6VGFnU2hpZnQgPT0gMik7CisrICAgIGxvYWRQdHIoc3JjLCBkZXN0 KTsKKysgICAgYXNfcmxkaWNyKGRlc3QsIGRlc3QsIDAsIDYxKTsKKysgIH0KKysgIHZvaWQgZ2V0 R0NUaGluZ1ZhbHVlQ2h1bmsoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Cisr ICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsKKysgICAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDE3 KTsKKysgICAgYXNfcmxkaWNyKGRlc3QsIGRlc3QsIDAsIDQzKTsKKysgIH0KKysgIHZvaWQgZ2V0 R0NUaGluZ1ZhbHVlQ2h1bmsoY29uc3QgVmFsdWVPcGVyYW5kJiBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKKysgICAgYXNfcmxkaWNsKGRlc3QsIHNyYy52YWx1ZVJlZygpLCAwLCAxNyk7CisrICAgIGFz X3JsZGljcihkZXN0LCBkZXN0LCAwLCA0Myk7CisrICB9CisrCisrICB2b2lkIGJveERvdWJsZShG bG9hdFJlZ2lzdGVyIHNyYywgY29uc3QgVmFsdWVPcGVyYW5kJiBkZXN0LCBGbG9hdFJlZ2lzdGVy KSB7CisrICAgIGFzX21mdnNyZChkZXN0LnZhbHVlUmVnKCksIHNyYyk7CisrICB9CisrICB2b2lk IGJveE5vbkRvdWJsZShKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciBzcmMsIGNvbnN0IFZhbHVl T3BlcmFuZCYgZGVzdCkgeworKyAgICBib3hWYWx1ZSh0eXBlLCBzcmMsIGRlc3QudmFsdWVSZWco KSk7CisrICB9CisrICB2b2lkIGJveE5vbkRvdWJsZShSZWdpc3RlciB0eXBlLCBSZWdpc3RlciBz cmMsIGNvbnN0IFZhbHVlT3BlcmFuZCYgZGVzdCkgeworKyAgICBib3hWYWx1ZSh0eXBlLCBzcmMs IGRlc3QudmFsdWVSZWcoKSk7CisrICB9CisrICB2b2lkIHVuYm94SW50MzIoY29uc3QgVmFsdWVP cGVyYW5kJiBvcGVyYW5kLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGFzX2V4dHN3KGRlc3QsIG9w ZXJhbmQudmFsdWVSZWcoKSk7CisrICB9CisrICB2b2lkIHVuYm94SW50MzIoY29uc3QgQWRkcmVz cyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7IGxvYWQzMihzcmMsIGRlc3QpOyB9CisrICB2b2lkIHVu Ym94SW50MzIoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgbG9hZDMyKHNy YywgZGVzdCk7IH0KKysgIHZvaWQgdW5ib3hCb29sZWFuKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3Bl cmFuZCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBhc19leHRzdyhkZXN0LCBvcGVyYW5kLnZhbHVl UmVnKCkpOworKyAgfQorKyAgdm9pZCB1bmJveEJvb2xlYW4oY29uc3QgQWRkcmVzcyYgc3JjLCBS ZWdpc3RlciBkZXN0KSB7IGxvYWQzMihzcmMsIGRlc3QpOyB9CisrICB2b2lkIHVuYm94Qm9vbGVh bihjb25zdCBCYXNlSW5kZXgmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBsb2FkMzIoc3JjLCBkZXN0 KTsgfQorKyAgdm9pZCB1bmJveERvdWJsZShjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBhc19tdHZzcmQoZGVzdCwgb3BlcmFuZC52YWx1ZVJl ZygpKTsKKysgIH0KKysgIHZvaWQgdW5ib3hEb3VibGUoY29uc3QgQWRkcmVzcyYgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbG9hZERvdWJsZShzcmMsIGRlc3QpOworKyAgfQorKyAg dm9pZCB1bmJveERvdWJsZShjb25zdCBCYXNlSW5kZXgmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICAgIGxvYWREb3VibGUoc3JjLCBkZXN0KTsKKysgIH0KKysgIHZvaWQgdW5ib3hTdHJp bmcoY29uc3QgVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIHVu Ym94Tm9uRG91YmxlKG9wZXJhbmQsIGRlc3QsIEpTVkFMX1RZUEVfU1RSSU5HKTsKKysgIH0KKysg IHZvaWQgdW5ib3hTdHJpbmcoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Cisr ICAgIHVuYm94Tm9uRG91YmxlKHNyYywgZGVzdCwgSlNWQUxfVFlQRV9TVFJJTkcpOworKyAgfQor KyAgdm9pZCB1bmJveFN5bWJvbChjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVy IGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3VibGUob3BlcmFuZCwgZGVzdCwgSlNWQUxfVFlQRV9T WU1CT0wpOworKyAgfQorKyAgdm9pZCB1bmJveFN5bWJvbChjb25zdCBBZGRyZXNzJiBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBF X1NZTUJPTCk7CisrICB9CisrICB2b2lkIHVuYm94QmlnSW50KGNvbnN0IFZhbHVlT3BlcmFuZCYg b3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICB1bmJveE5vbkRvdWJsZShvcGVyYW5kLCBk ZXN0LCBKU1ZBTF9UWVBFX0JJR0lOVCk7CisrICB9CisrICB2b2lkIHVuYm94QmlnSW50KGNvbnN0 IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICB1bmJveE5vbkRvdWJsZShzcmMs IGRlc3QsIEpTVkFMX1RZUEVfQklHSU5UKTsKKysgIH0KKysgIHZvaWQgdW5ib3hPYmplY3QoY29u c3QgVmFsdWVPcGVyYW5kJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3Vi bGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBFX09CSkVDVCk7CisrICB9CisrICB2b2lkIHVuYm94T2Jq ZWN0KGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICB1bmJveE5vbkRv dWJsZShzcmMsIGRlc3QsIEpTVkFMX1RZUEVfT0JKRUNUKTsKKysgIH0KKysgIHZvaWQgdW5ib3hP YmplY3QoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hO b25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBFX09CSkVDVCk7CisrICB9CisrICB2b2lkIHVu Ym94VmFsdWUoY29uc3QgVmFsdWVPcGVyYW5kJiBzcmMsIEFueVJlZ2lzdGVyIGRlc3QsIEpTVmFs dWVUeXBlIHR5cGUpIHsKKysgICAgaWYgKGRlc3QuaXNGbG9hdCgpKSB7CisrICAgICAgdW5ib3hE b3VibGUoc3JjLCBkZXN0LmZwdSgpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICB1bmJveE5vbkRv dWJsZShzcmMsIGRlc3QuZ3ByKCksIHR5cGUpOworKyAgICB9CisrICB9CisrICB2b2lkIHVuYm94 T2JqZWN0T3JOdWxsKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBs b2FkUHRyKHNyYywgZGVzdCk7CisrICAgIC8vIE9iamVjdCBwb2ludGVycyBoYXZlIHRoZSBvYmpl Y3QgdGFnIGluIGhpZ2ggYml0czsgbnVsbCBoYXMgYSBkaWZmZXJlbnQKKysgICAgLy8gdGFnLiBD bGVhciB0aGUgdG9wIGJpdHMgdG8gZ2V0IGVpdGhlciBhIHZhbGlkIHBvaW50ZXIgb3IgemVyby4K KysgICAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZUKTsKKysg IH0KKysKKysgIHZvaWQgdGFnVmFsdWUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcGF5bG9h ZCwgVmFsdWVPcGVyYW5kIGRlc3QpIHsKKysgICAgTU9aX0FTU0VSVCh0eXBlICE9IEpTVkFMX1RZ UEVfVU5ERUZJTkVEICYmIHR5cGUgIT0gSlNWQUxfVFlQRV9OVUxMKTsKKysgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gcGF5bG9hZCAmJiBzY3Jh dGNoICE9IGRlc3QudmFsdWVSZWcoKSk7CisrICAgIHRhZ1ZhbHVlV2l0aFNjcmF0Y2godHlwZSwg cGF5bG9hZCwgZGVzdCwgc2NyYXRjaCk7CisrICB9CisrICB2b2lkIHRhZ1ZhbHVlV2l0aFNjcmF0 Y2goSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcGF5bG9hZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZU9wZXJhbmQgZGVzdCwgUmVnaXN0ZXIgc2NyYXRjaCkgeworKyAgICBt b3ZlUHRyKEltbVNoaWZ0ZWRUYWcodHlwZSksIHNjcmF0Y2gpOworKyAgICBpZiAodHlwZSA9PSBK U1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9CT09MRUFOIHx8CisrICAgICAg ICB0eXBlID09IEpTVkFMX1RZUEVfTUFHSUMpIHsKKysgICAgICBpZiAocGF5bG9hZCAhPSBkZXN0 LnZhbHVlUmVnKCkpIHsKKysgICAgICAgIG1vdmVQdHIocGF5bG9hZCwgZGVzdC52YWx1ZVJlZygp KTsKKysgICAgICB9CisrICAgICAgYXNfcmxkaWNsKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1 ZVJlZygpLCAwLCAzMik7CisrICAgICAgYXNfb3JfKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1 ZVJlZygpLCBzY3JhdGNoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBpZiAocGF5bG9hZCAhPSBk ZXN0LnZhbHVlUmVnKCkpIHsKKysgICAgICAgIG1vdmVQdHIocGF5bG9hZCwgZGVzdC52YWx1ZVJl ZygpKTsKKysgICAgICB9CisrICAgICAgYXNfb3JfKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1 ZVJlZygpLCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBib3hWYWx1ZShKU1ZhbHVl VHlwZSB0eXBlLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgTU9aX0FTU0VS VChzcmMgIT0gZGVzdCk7CisrICAgIE1PWl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX1VOREVG SU5FRCAmJiB0eXBlICE9IEpTVkFMX1RZUEVfTlVMTCk7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgYm94VmFsdWVXaXRoU2NyYXRjaCh0eXBlLCBzcmMsIGRlc3QsIHNjcmF0Y2gp OworKyAgfQorKyAgdm9pZCBib3hWYWx1ZVdpdGhTY3JhdGNoKEpTVmFsdWVUeXBlIHR5cGUsIFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIGlmICh0eXBlID09IEpTVkFMX1RZUEVfSU5UMzIgfHwg dHlwZSA9PSBKU1ZBTF9UWVBFX0JPT0xFQU4gfHwKKysgICAgICAgIHR5cGUgPT0gSlNWQUxfVFlQ RV9NQUdJQykgeworKyAgICAgIGFzX3JsZGljbChkZXN0LCBzcmMsIDAsIDMyKTsKKysgICAgICBt b3ZlUHRyKEltbVNoaWZ0ZWRUYWcodHlwZSksIHNjcmF0Y2gpOworKyAgICAgIGFzX29yXyhkZXN0 LCBkZXN0LCBzY3JhdGNoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBtb3ZlUHRyKEltbVNoaWZ0 ZWRUYWcodHlwZSksIHNjcmF0Y2gpOworKyAgICAgIHhzX21yKGRlc3QsIHNyYyk7CisrICAgICAg YXNfb3JfKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOworKyAgICB9CisrICB9CisrICB2b2lkIGJveFZh bHVlKFJlZ2lzdGVyIHR5cGUsIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBN T1pfQVNTRVJUKHNyYyAhPSBkZXN0KTsKKysKKysjaWZkZWYgREVCVUcKKysgICAgTGFiZWwgZG9u ZSwgaXNOdWxsT3JVbmRlZmluZWQsIGlzQm9vbGVhbiwgaXNJbnQzMk9yTWFnaWM7CisrCisrICAg IC8vIFVzZSBtYV9jbXAgKyBtYV9iIGluc3RlYWQgb2YgYXNNYXNtKCkuYnJhbmNoMzIoKSBiZWNh dXNlCisrICAgIC8vIE1hY3JvQXNzZW1ibGVyIGlzIG5vdCB5ZXQgZnVsbHkgZGVmaW5lZCBhdCB0 aGlzIHBvaW50LgorKyAgICBDb25kaXRpb24gY29uZDsKKysgICAgY29uZCA9IG1hX2NtcCh0eXBl LCBJbW0zMihKU1ZBTF9UWVBFX05VTEwpLCBFcXVhbCwgdHJ1ZSk7CisrICAgIG1hX2IoY29uZCwg JmlzTnVsbE9yVW5kZWZpbmVkKTsKKysgICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJbW0zMihKU1ZB TF9UWVBFX1VOREVGSU5FRCksIEVxdWFsLCB0cnVlKTsKKysgICAgbWFfYihjb25kLCAmaXNOdWxs T3JVbmRlZmluZWQpOworKyAgICBjb25kID0gbWFfY21wKHR5cGUsIEltbTMyKEpTVkFMX1RZUEVf Qk9PTEVBTiksIEVxdWFsLCB0cnVlKTsKKysgICAgbWFfYihjb25kLCAmaXNCb29sZWFuKTsKKysg ICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJbW0zMihKU1ZBTF9UWVBFX0lOVDMyKSwgRXF1YWwsIHRy dWUpOworKyAgICBtYV9iKGNvbmQsICZpc0ludDMyT3JNYWdpYyk7CisrICAgIGNvbmQgPSBtYV9j bXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQRV9NQUdJQyksIEVxdWFsLCB0cnVlKTsKKysgICAgbWFf Yihjb25kLCAmaXNJbnQzMk9yTWFnaWMpOworKyAgICAvLyBHQ1RoaW5nIHR5cGVzIGFyZW4ndCBz dXBwb3J0ZWQsIGJlY2F1c2UgYXNfcmxkaWNsIHRydW5jYXRlcworKyAgICAvLyBwYXlsb2FkcyBh Ym92ZSBVSU5UMzJfTUFYLgorKyAgICBicmVha3BvaW50KCk7CisrICAgIHsKKysgICAgICBiaW5k KCZpc051bGxPclVuZGVmaW5lZCk7CisrCisrICAgICAgLy8gRW5zdXJlIG5vIHBheWxvYWQgZm9y IG51bGwgYW5kIHVuZGVmaW5lZC4KKysgICAgICBjb25kID0gbWFfY21wKHNyYywgSW1tV29yZCgw KSwgRXF1YWwpOworKyAgICAgIG1hX2IoY29uZCwgJmRvbmUpOworKyAgICAgIGJyZWFrcG9pbnQo KTsKKysgICAgfQorKyAgICB7CisrICAgICAgYmluZCgmaXNCb29sZWFuKTsKKysKKysgICAgICAv LyBFbnN1cmUgYm9vbGVhbiB2YWx1ZXMgYXJlIGVpdGhlciAwIG9yIDEuCisrICAgICAgY29uZCA9 IG1hX2NtcChzcmMsIEltbTMyKDEpLCBCZWxvd09yRXF1YWwsIHRydWUpOworKyAgICAgIG1hX2Io Y29uZCwgJmRvbmUpOworKyAgICAgIGJyZWFrcG9pbnQoKTsKKysgICAgfQorKyAgICB7CisrICAg ICAgYmluZCgmaXNJbnQzMk9yTWFnaWMpOworKworKyAgICAgIC8vIEVuc3VyZSB8c3JjfCBpcyBz aWduLWV4dGVuZGVkLgorKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIGRlYnVnVGVtcHMo KnRoaXMpOworKyAgICAgIFJlZ2lzdGVyIGRlYnVnU2NyYXRjaCA9IGRlYnVnVGVtcHMuQWNxdWly ZSgpOworKyAgICAgIGFzX2V4dHN3KGRlYnVnU2NyYXRjaCwgc3JjKTsKKysgICAgICBjb25kID0g bWFfY21wKHNyYywgZGVidWdTY3JhdGNoLCBFcXVhbCk7CisrICAgICAgbWFfYihjb25kLCAmZG9u ZSk7CisrICAgICAgYnJlYWtwb2ludCgpOworKyAgICB9CisrICAgIGJpbmQoJmRvbmUpOworKyNl bmRpZgorKworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIE1PWl9BU1NFUlQoc2Ny YXRjaCAhPSBkZXN0ICYmIHNjcmF0Y2ggIT0gc3JjICYmIHNjcmF0Y2ggIT0gdHlwZSk7CisrICAg IC8vIEJ1aWxkIHRhZzogKHR5cGUgfCBKU1ZBTF9UQUdfTUFYX0RPVUJMRSkgPDwgSlNWQUxfVEFH X1NISUZUCisrICAgIG1vdmUzMihJbW0zMihKU1ZBTF9UQUdfTUFYX0RPVUJMRSksIHNjcmF0Y2gp OworKyAgICBhc19vcl8oc2NyYXRjaCwgc2NyYXRjaCwgdHlwZSk7CisrICAgIHhfc2xkaShzY3Jh dGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOworKyAgICAvLyBJbnNlcnQgMzItYml0IHBh eWxvYWQuCisrICAgIGFzX3JsZGljbChkZXN0LCBzcmMsIDAsIDMyKTsKKysgICAgYXNfb3JfKGRl c3QsIGRlc3QsIHNjcmF0Y2gpOworKyAgfQorKworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICAvLyBWYWx1ZSBz dG9yZS9sb2FkL3B1c2gvcG9wCisrCisrICB2b2lkIHN0b3JlVmFsdWUoVmFsdWVPcGVyYW5kIHZh bCwgY29uc3QgQWRkcmVzcyYgZGVzdCkgeworKyAgICBzdG9yZVB0cih2YWwudmFsdWVSZWcoKSwg ZGVzdCk7CisrICB9CisrICB2b2lkIHN0b3JlVmFsdWUoVmFsdWVPcGVyYW5kIHZhbCwgY29uc3Qg QmFzZUluZGV4JiBkZXN0KSB7CisrICAgIHN0b3JlUHRyKHZhbC52YWx1ZVJlZygpLCBkZXN0KTsK KysgIH0KKysgIHZvaWQgc3RvcmVWYWx1ZShKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciByZWcs IEFkZHJlc3MgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIE1PWl9B U1NFUlQoZGVzdC5iYXNlICE9IHNjcmF0Y2gpOworKyAgICBib3hWYWx1ZSh0eXBlLCByZWcsIHNj cmF0Y2gpOworKyAgICBzdG9yZVB0cihzY3JhdGNoLCBkZXN0KTsKKysgIH0KKysgIHZvaWQgc3Rv cmVWYWx1ZShKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciByZWcsIEJhc2VJbmRleCBkZXN0KSB7 CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChkZXN0LmJhc2Ug IT0gc2NyYXRjaCk7CisrICAgIGJveFZhbHVlKHR5cGUsIHJlZywgc2NyYXRjaCk7CisrICAgIHN0 b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOworKyAgfQorKyAgdm9pZCBzdG9yZVZhbHVlKGNvbnN0IFZh bHVlJiB2YWwsIEFkZHJlc3MgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgIE1PWl9BU1NFUlQoZGVzdC5iYXNlICE9IHNjcmF0Y2gpOworKyAgICBpZiAodmFsLmlzR0NU aGluZygpKSB7CisrICAgICAgQ29kZU9mZnNldCBvZmYgPSBtb3ZXaXRoUGF0Y2goSW1tV29yZCh2 YWwuYXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKKysgICAgICB3cml0ZURhdGFSZWxvY2F0aW9uKG9m ZiwgdmFsKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBtb3ZlUHRyKEltbVdvcmQodmFsLmFzUmF3 Qml0cygpKSwgc2NyYXRjaCk7CisrICAgIH0KKysgICAgc3RvcmVQdHIoc2NyYXRjaCwgZGVzdCk7 CisrICB9CisrICB2b2lkIHN0b3JlVmFsdWUoY29uc3QgVmFsdWUmIHZhbCwgQmFzZUluZGV4IGRl c3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pfQVNTRVJUKGRlc3Qu YmFzZSAhPSBzY3JhdGNoKTsKKysgICAgaWYgKHZhbC5pc0dDVGhpbmcoKSkgeworKyAgICAgIENv ZGVPZmZzZXQgb2ZmID0gbW92V2l0aFBhdGNoKEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2Ny YXRjaCk7CisrICAgICAgd3JpdGVEYXRhUmVsb2NhdGlvbihvZmYsIHZhbCk7CisrICAgIH0gZWxz ZSB7CisrICAgICAgbW92ZVB0cihJbW1Xb3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwor KyAgICB9CisrICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOworKyAgfQorKyAgdm9pZCBzdG9y ZVZhbHVlKGNvbnN0IEFkZHJlc3MmIHNyYywgY29uc3QgQWRkcmVzcyYgZGVzdCwgUmVnaXN0ZXIg dGVtcCkgeworKyAgICBsb2FkUHRyKHNyYywgdGVtcCk7CisrICAgIHN0b3JlUHRyKHRlbXAsIGRl c3QpOworKyAgfQorKworKyAgdm9pZCBzdG9yZVByaXZhdGVWYWx1ZShSZWdpc3RlciBzcmMsIGNv bnN0IEFkZHJlc3MmIGRlc3QpIHsKKysgICAgc3RvcmVQdHIoc3JjLCBkZXN0KTsKKysgIH0KKysg IHZvaWQgc3RvcmVQcml2YXRlVmFsdWUoSW1tR0NQdHIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0 KSB7CisrICAgIHN0b3JlUHRyKGltbSwgZGVzdCk7CisrICB9CisrCisrICB2b2lkIGxvYWRWYWx1 ZShBZGRyZXNzIHNyYywgVmFsdWVPcGVyYW5kIHZhbCkgeworKyAgICBsb2FkUHRyKHNyYywgdmFs LnZhbHVlUmVnKCkpOworKyAgfQorKyAgdm9pZCBsb2FkVmFsdWUoY29uc3QgQmFzZUluZGV4JiBz cmMsIFZhbHVlT3BlcmFuZCB2YWwpIHsKKysgICAgbG9hZFB0cihzcmMsIHZhbC52YWx1ZVJlZygp KTsKKysgIH0KKysgIHZvaWQgbG9hZFVuYWxpZ25lZFZhbHVlKGNvbnN0IEFkZHJlc3MmIHNyYywg VmFsdWVPcGVyYW5kIGRlc3QpIHsKKysgICAgbG9hZFB0cihzcmMsIGRlc3QudmFsdWVSZWcoKSk7 CisrICB9CisrCisrICB2b2lkIHB1c2hWYWx1ZShWYWx1ZU9wZXJhbmQgdmFsKSB7IHB1c2godmFs LnZhbHVlUmVnKCkpOyB9CisrICB2b2lkIHBvcFZhbHVlKFZhbHVlT3BlcmFuZCB2YWwpIHsgcG9w KHZhbC52YWx1ZVJlZygpKTsgfQorKyAgdm9pZCBwdXNoVmFsdWUoY29uc3QgVmFsdWUmIHZhbCkg eworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGlmICh2YWwuaXNHQ1RoaW5nKCkp IHsKKysgICAgICBDb2RlT2Zmc2V0IG9mZiA9IG1vdldpdGhQYXRjaChJbW1Xb3JkKHZhbC5hc1Jh d0JpdHMoKSksIHNjcmF0Y2gpOworKyAgICAgIHdyaXRlRGF0YVJlbG9jYXRpb24ob2ZmLCB2YWwp OworKyAgICB9IGVsc2UgeworKyAgICAgIG1vdmVQdHIoSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkp LCBzY3JhdGNoKTsKKysgICAgfQorKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCBw dXNoVmFsdWUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcmVnKSB7CisrICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgICAgYm94VmFsdWUodHlwZSwgcmVnLCBzY3JhdGNoKTsKKysgICAg cHVzaChzY3JhdGNoKTsKKysgIH0KKysgIHZvaWQgcHVzaFZhbHVlKGNvbnN0IEFkZHJlc3MmIGFk ZHIpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBsb2FkUHRyKGFkZHIsIHNj cmF0Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCBwdXNoVmFsdWUoY29u c3QgQmFzZUluZGV4JiBhZGRyLCBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIGxvYWRQdHIoYWRk ciwgc2NyYXRjaCk7CisrICAgIHB1c2goc2NyYXRjaCk7CisrICB9CisrCisrICAvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgIC8vIExvYWQgaW5zdHJ1Y3Rpb25zCisrCisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDhT aWduRXh0ZW5kKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg RmF1bHRpbmdDb2RlT2Zmc2V0IGZjbzsKKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQs IDE2KSkgeworKyAgICAgIGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNf bGJ6KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBNT1pf QVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mu b2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgICAgZmNvID0KKysgICAgICAgICAgRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX2xiengoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7 CisrICAgIH0KKysgICAgYXNfZXh0c2IoZGVzdCwgZGVzdCk7CisrICAgIHJldHVybiBmY287Cisr ICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDhTaWduRXh0ZW5kKGNvbnN0IEJhc2VJbmRl eCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg ICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgICAgRmF1bHRpbmdDb2Rl T2Zmc2V0IGZjbzsKKysgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYpKSB7CisrICAgICAg ZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xieihkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0 KS5nZXRPZmZzZXQoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0FTU0VSVChzY3JhdGNo ICE9IGRlc3QpOworKyAgICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVzdCk7Cisr ICAgICAgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xiengoZGVzdCwgc2NyYXRjaCwgZGVz dCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGFzX2V4dHNiKGRlc3QsIGRlc3QpOworKyAg ICByZXR1cm4gZmNvOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4WmVyb0V4dGVu ZChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmIChpc19p bnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KAorKyAgICAgICAgICBhc19sYnooZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNl dCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg ICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRk cmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChh c19sYnp4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgfQor KyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4WmVyb0V4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNy YywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygq dGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGNv bXB1dGVTY2FsZWRBZGRyZXNzKHNyYywgc2NyYXRjaCk7CisrICAgIGlmIChpc19pbnROKHNyYy5v ZmZzZXQsIDE2KSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6KGRl c3QsIHNjcmF0Y2gsIHNyYy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBNT1pf QVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0 KSwgZGVzdCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6eChkZXN0LCBz Y3JhdGNoLCBkZXN0KS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQg bG9hZDE2U2lnbkV4dGVuZChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7 CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19saGEoZGVzdCwgYWRkcmVzcy5iYXNl LCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOworKyAgICBtb3Zl UHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0 aW5nQ29kZU9mZnNldChhc19saGF4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zm c2V0KCkpOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQxNlNpZ25FeHRlbmQoY29u c3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBp ZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX2xoYShkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Cisr ICAgIH0KKysgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOworKyAgICBtb3ZlUHRyKElt bVdvcmQoc3JjLm9mZnNldCksIGRlc3QpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KGFzX2xoYXgoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgdGVt cGxhdGUgPHR5cGVuYW1lIFM+CisrICB2b2lkIGxvYWQxNlVuYWxpZ25lZFNpZ25FeHRlbmQoY29u c3QgUyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGxvYWQxNlNpZ25FeHRlbmQoc3JjLCBk ZXN0KTsKKysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkMTZaZXJvRXh0ZW5kKGNvbnN0 IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgaWYgKGlzX2ludE4oYWRk cmVzcy5vZmZzZXQsIDE2KSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisr ICAgICAgICAgIGFzX2xoeihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRP ZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pf QVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9m ZnNldCksIHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoengo ZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVs dGluZ0NvZGVPZmZzZXQgbG9hZDE2WmVyb0V4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNyYywgUmVn aXN0ZXIgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGNvbXB1dGVT Y2FsZWRBZGRyZXNzKHNyYywgc2NyYXRjaCk7CisrICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQs IDE2KSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGh6KGRlc3QsIHNj cmF0Y2gsIHNyYy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBNT1pfQVNTRVJU KHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVz dCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGh6eChkZXN0LCBzY3JhdGNo LCBkZXN0KS5nZXRPZmZzZXQoKSk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KKysg IHZvaWQgbG9hZDE2VW5hbGlnbmVkWmVyb0V4dGVuZChjb25zdCBTJiBzcmMsIFJlZ2lzdGVyIGRl c3QpIHsKKysgICAgbG9hZDE2WmVyb0V4dGVuZChzcmMsIGRlc3QpOworKyAgfQorKworKyAgRmF1 bHRpbmdDb2RlT2Zmc2V0IGxvYWQzMihjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBk ZXN0KSB7CisrICAgIC8vIGx3YSBpcyBEUy1mb3JtICgxNC1iaXQgZGlzcGxhY2VtZW50IMOXIDQg PSAxNi1iaXQtc2lnbmVkIGVmZmVjdGl2ZQorKyAgICAvLyByYW5nZSwgNC1ieXRlIGFsaWdubWVu dCByZXF1aXJlZCkuIGx3YXggaXMgWC1mb3JtIGluZGV4ZWQsIG5vCisrICAgIC8vIGFsaWdubWVu dCBjb25zdHJhaW50LiBCb3RoIHNpZ24tZXh0ZW5kIGluIG9uZSBpbnN0cnVjdGlvbjsgb25seQor KyAgICAvLyB0aGUgbWlzYWxpZ25lZCAxNi1iaXQtZml0dGluZyBjYXNlIHN0aWxsIG5lZWRzIGx3 eiArIGV4dHN3LgorKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmIChhZGRy ZXNzLm9mZnNldCAmIDMpID09IDApIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KAorKyAgICAgICAgICBhc19sd2EoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCku Z2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAx NikpIHsKKysgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNvKAorKyAgICAgICAgICBhc19sd3oo ZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICAg IGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIHJldHVybiBmY287CisrICAgIH0KKysgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7 CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x3YXgoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3Jh dGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDMyKGNv bnN0IEJhc2VJbmRleCYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7CisrICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gp OworKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmIChhZGRyZXNzLm9mZnNl dCAmIDMpID09IDApIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAg ICAgICBhc19sd2EoZGVzdCwgc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsK KysgICAgfQorKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7CisrICAgICAg RmF1bHRpbmdDb2RlT2Zmc2V0IGZjbyhhc19sd3ooZGVzdCwgc2NyYXRjaCwgYWRkcmVzcy5vZmZz ZXQpLmdldE9mZnNldCgpKTsKKysgICAgICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgICBy ZXR1cm4gZmNvOworKyAgICB9CisrICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysg ICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgZGVzdCk7CisrICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfbHdheChkZXN0LCBzY3JhdGNoLCBkZXN0KS5nZXRPZmZzZXQo KSk7CisrICB9CisrICB2b2lkIGxvYWQzMihBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0 ZXIgZGVzdCkgeworKyAgICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClhZGRyZXNzLmFkZHIp LCBkZXN0KTsKKysgICAgYXNfbHdhKGRlc3QsIGRlc3QsIDApOworKyAgfQorKyAgdm9pZCBsb2Fk MzIod2FzbTo6U3ltYm9saWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg bW92ZVB0cihhZGRyZXNzLCBkZXN0KTsKKysgICAgYXNfbHdhKGRlc3QsIGRlc3QsIDApOworKyAg fQorKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CisrICB2b2lkIGxvYWQzMlVuYWxpZ25lZChjb25z dCBTJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbG9hZDMyKHNyYywgZGVzdCk7CisrICB9 CisrCisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDY0KGNvbnN0IEFkZHJlc3MmIGFkZHJlc3Ms IFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgICByZXR1cm4gbG9hZFB0cihhZGRyZXNzLCBkZXN0LnJl Zyk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDY0KGNvbnN0IEJhc2VJbmRleCYg YWRkcmVzcywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICAgIHJldHVybiBsb2FkUHRyKGFkZHJlc3Ms IGRlc3QucmVnKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBTPgorKyAgdm9pZCBsb2Fk NjRVbmFsaWduZWQoY29uc3QgUyYgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgICAgbG9hZDY0 KHNyYywgZGVzdCk7CisrICB9CisrCisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZFB0cihjb25z dCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIC8vIGFzX2xkIChEUy1m b3JtKSByZXF1aXJlcyA0LWJ5dGUgYWxpZ25lZCBvZmZzZXQuCisrICAgIGlmIChpc19pbnROKGFk ZHJlc3Mub2Zmc2V0LCAxNikgJiYgIShhZGRyZXNzLm9mZnNldCAmIDB4MykpIHsKKysgICAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19sZChkZXN0LCBhZGRyZXNz LmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgaWYgKEhh c1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRyZXNzLm9mZnNldCwgMzQpKSB7Cisr ICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfcGxkKGRlc3Qs IGFkZHJlc3MuYmFzZSwgKGludDY0X3QpYWRkcmVzcy5vZmZzZXQsIC8qUj0qL2ZhbHNlKQorKyAg ICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgbW92ZVB0cihJ bW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVsdGluZ0Nv ZGVPZmZzZXQoYXNfbGR4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkp OworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRQdHIoY29uc3QgQmFzZUluZGV4JiBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo KnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBj b21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50TihzcmMu b2Zmc2V0LCAxNikgJiYgIShzcmMub2Zmc2V0ICYgMHgzKSkgeworKyAgICAgIHJldHVybiBGYXVs dGluZ0NvZGVPZmZzZXQoYXNfbGQoZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0 KCkpOworKyAgICB9CisrICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgbW92 ZVB0cihJbW1Xb3JkKHNyYy5vZmZzZXQpLCBkZXN0KTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldChhc19sZHgoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOworKyAgfQor KyAgdm9pZCBsb2FkUHRyKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7 CisrICAgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWFkZHJlc3MuYWRkciksIGRlc3QpOwor KyAgICBhc19sZChkZXN0LCBkZXN0LCAwKTsKKysgIH0KKysgIHZvaWQgbG9hZFB0cih3YXNtOjpT eW1ib2xpY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBtb3ZlUHRyKGFk ZHJlc3MsIGRlc3QpOworKyAgICBhc19sZChkZXN0LCBkZXN0LCAwKTsKKysgIH0KKysKKysgIHZv aWQgbG9hZFByaXZhdGUoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewor KyAgICBsb2FkUHRyKGFkZHJlc3MsIGRlc3QpOworKyAgfQorKworKyAgRmF1bHRpbmdDb2RlT2Zm c2V0IGxvYWREb3VibGUoY29uc3QgQWRkcmVzcyYgYWRkciwgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICAgIGlmIChpc19pbnROKGFkZHIub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1 bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19sZmQoZGVzdCwgYWRkci5iYXNlLCBhZGRy Lm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGlmIChIYXNQT1dFUjEwKCkgJiYg aXNfaW50TigoaW50cHRyX3QpYWRkci5vZmZzZXQsIDM0KSkgeworKyAgICAgIHJldHVybiBGYXVs dGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3BsZmQoZGVzdCwgYWRkci5iYXNlLCAoaW50 NjRfdClhZGRyLm9mZnNldCwgLypSPSovZmFsc2UpCisrICAgICAgICAgICAgICAuZ2V0T2Zmc2V0 KCkpOworKyAgICB9CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK KysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihJ bW1Xb3JkKGFkZHIub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVP ZmZzZXQoYXNfbGZkeChkZXN0LCBhZGRyLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysg IH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRG91YmxlKGNvbnN0IEJhc2VJbmRleCYgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50Tihz cmMub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xm ZChkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAg UmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29y ZChzcmMub2Zmc2V0KSwgc2NyYXRjaDIpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KGFzX2xmZHgoZGVzdCwgc2NyYXRjaCwgc2NyYXRjaDIpLmdldE9mZnNldCgpKTsKKysgIH0KKysg IEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRmxvYXQzMihjb25zdCBBZGRyZXNzJiBhZGRyLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgaWYgKGlzX2ludE4oYWRkci5vZmZzZXQsIDE2KSkgewor KyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX2xmcyhkZXN0 LCBhZGRyLmJhc2UsIGFkZHIub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgaWYg KEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRyLm9mZnNldCwgMzQpKSB7Cisr ICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfcGxmcyhkZXN0 LCBhZGRyLmJhc2UsIChpbnQ2NF90KWFkZHIub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAg ICAgICAgIC5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkci5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgcmV0 dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZnN4KGRlc3QsIGFkZHIuYmFzZSwgc2NyYXRjaCku Z2V0T2Zmc2V0KCkpOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRGbG9hdDMyKGNv bnN0IEJhc2VJbmRleCYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOwor KyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRp bmdDb2RlT2Zmc2V0KGFzX2xmcyhkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQo KSk7CisrICAgIH0KKysgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgc2NyYXRjaDIpOworKyAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xmc3goZGVzdCwgc2NyYXRjaCwgc2NyYXRjaDIpLmdldE9m ZnNldCgpKTsKKysgIH0KKysgIC8vIExvYWQgYSBGUCBjb25zdGFudCBpbnRvIGBkZXN0YC4KKysg IC8vCisrICAvLyArMC4wIC8gKzAuMGY6IGB4eGx4b3IgZGVzdCwgZGVzdCwgZGVzdGAgKDEgaW5z bikuIE5vIHJlZ2lzdGVyIGNsb2JiZXJzLgorKyAgLy8KKysgIC8vIFBPV0VSOSBub24temVybzog Y29uc3RhbnQgcG9vbCBsb2FkIHZpYSBgYWRkcGNpcyByMTYsIGhpOyBsZmQvbGZzIGZELAorKyAg Ly8gbG8ocjE2KTsgbm9wYC4gMiByZWFsIGluc25zICsgbm9wLCBubyBMUiBjbG9iYmVyLCBubyBS ZXR1cm4gQWRkcmVzcworKyAgLy8gU3RhY2sgY29ycnVwdGlvbi4gbGZzIGF1dG8tZXhwYW5kcyBz aW5nbGUtcHJlY2lzaW9uIHRvIGRvdWJsZSwgc28gbm8KKysgIC8vIHNlcGFyYXRlIHhzY3ZzcGRw biBzdGVwLiBDbG9iYmVycyByMTYgKFNhdmVkU2NyYXRjaFJlZ2lzdGVyKS4gUG9vbAorKyAgLy8g ZW50cmllcyBhcmUgc2hhcmVkIGFjcm9zcyBkdXBsaWNhdGUgY29uc3RhbnRzLgorKyAgLy8KKysg IC8vIFBPV0VSOCBub24temVybzogaW5saW5lIGBtb3ZlUHRyICsgbXR2c3JkKCt4c2N2c3BkcG4p YCBwYXRoLiBXZSBkbyBOT1QKKysgIC8vIHVzZSB0aGUgYmNsLWJhc2VkIHBvb2wgcGF0aCBvbiBQ T1dFUjg6IGJjbCBjbG9iYmVycyBMUiBhbmQgY29ycnVwdHMKKysgIC8vIHRoZSBSZXR1cm4gQWRk cmVzcyBTdGFjaywgd2hpY2ggY2F1c2VzIGNhdGFzdHJvcGhpYyBtaXNwcmVkaWN0cyBpbgorKyAg Ly8gaG90IEZQLWNvbnN0YW50IGxvb3BzICh+MjAweCBzbG93ZG93biBvYnNlcnZlZCBvbiBjbXAt Yml0c2VsZWN0LmpzKS4KKysgIC8vCisrICAvLyBQcmVjb25kaXRpb246IG11c3Qgbm90IGJlIGNh bGxlZCBpbnNpZGUgYW4gYGVudGVyTm9Qb29sYCByZWdpb24gd2hlbgorKyAgLy8gSGFzUE9XRVI5 KCkgaXMgdHJ1ZSAodGhlIHBvb2wgcGF0aCBjYWxscyBgYWxsb2NFbnRyeWAgd2hpY2ggYXNzZXJ0 cworKyAgLy8gYGluaGliaXRQb29sc18gPT0gMGApLiBBdWRpdC12ZXJpZmllZCB0aGF0IG5vIHN1 Y2ggY2FsbCBzaXRlIGV4aXN0cworKyAgLy8gdG9kYXk7IHRoZSBQT1dFUjggaW5saW5lIHBhdGgg aXMgdW5hZmZlY3RlZC4KKysgIHZvaWQgbG9hZENvbnN0YW50RG91YmxlKGRvdWJsZSBkcCwgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmIChtb3ppbGxhOjpJc1Bvc2l0aXZlWmVybyhkcCkp IHsKKysgICAgICBhc194eGx4b3IoZGVzdCwgZGVzdCwgZGVzdCk7CisrICAgICAgcmV0dXJuOwor KyAgICB9CisrICAgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgIGxvYWRGcm9tUG9vbEZsb2F0 NjQoZGVzdCwgZHApOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIHVuaW9uIHsKKysgICAgICBkb3VibGUgZDsKKysgICAgICB1aW50NjRf dCB1OworKyAgICB9IHU7CisrICAgIHUuZCA9IGRwOworKyAgICBtb3ZlUHRyKEltbVdvcmQodS51 KSwgc2NyYXRjaCk7CisrICAgIGFzX210dnNyZChkZXN0LCBzY3JhdGNoKTsKKysgIH0KKysgIHZv aWQgbG9hZENvbnN0YW50RmxvYXQzMihmbG9hdCBmLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg ICAgaWYgKG1vemlsbGE6OklzUG9zaXRpdmVaZXJvKGYpKSB7CisrICAgICAgYXNfeHhseG9yKGRl c3QsIGRlc3QsIGRlc3QpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBpZiAoSGFzUE9X RVI5KCkpIHsKKysgICAgICBsb2FkRnJvbVBvb2xGbG9hdDMyKGRlc3QsIGYpOworKyAgICAgIHJl dHVybjsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIHVuaW9uIHsK KysgICAgICBmbG9hdCBmOworKyAgICAgIHVpbnQzMl90IHU7CisrICAgIH0gdTsKKysgICAgdS5m ID0gZjsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHUudSksIHNjcmF0Y2gpOworKyAgICB4X3NsZGko c2NyYXRjaCwgc2NyYXRjaCwgMzIpOworKyAgICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7Cisr ICAgIGFzX3hzY3ZzcGRwbihkZXN0LCBkZXN0KTsKKysgIH0KKysKKysgIHZvaWQgbm90Qm9vbGVh bihjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbCkgeworKyAgICBhc194b3JpKHZhbC52YWx1ZVJlZygp LCB2YWwudmFsdWVSZWcoKSwgMSk7CisrICB9CisrCisrICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVy IGV4dHJhY3RUYWcoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgc2NyYXRjaCkgewor KyAgICBsb2FkUHRyKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgICB4X3NyZGkoc2NyYXRjaCwgc2Ny YXRjaCwgSlNWQUxfVEFHX1NISUZUKTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrICBb W25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RUYWcoY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gp IHsKKysgICAgaWYgKHNjcmF0Y2ggPT0gcjApIHsKKysgICAgICAvLyByMCBjYW5ub3QgYmUgdXNl ZCBhcyBhIGJhc2UgcmVnaXN0ZXIgaW4gRC1mb3JtL1gtZm9ybSBsb2FkcywKKysgICAgICAvLyBz byB3ZSBuZWVkIGEgc2VwYXJhdGUgdGVtcCBmb3IgdGhlIGludGVybWVkaWF0ZSBhZGRyZXNzLgor KyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdp c3RlciBiYXNlID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNz KGFkZHJlc3MsIGJhc2UpOworKyAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBhZGRyZXNzLm9m ZnNldCksIHNjcmF0Y2gpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIHNjcmF0Y2ggaXMgYSBw b29sIHJlZ2lzdGVyIChyMTEvcjEyKSBvciBhbm90aGVyIEdQUiB0aGF0IGNhbgorKyAgICAgIC8v IHNlcnZlIGFzIGEgYmFzZSByZWdpc3Rlciwgc28gcmV1c2UgaXQgZm9yIHRoZSBhZGRyZXNzIGNv bXB1dGF0aW9uLgorKyAgICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gp OworKyAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCksIHNjcmF0 Y2gpOworKyAgICB9CisrICAgIHhfc3JkaShzY3JhdGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJ RlQpOworKyAgICByZXR1cm4gc2NyYXRjaDsKKysgIH0KKysgIFtbbm9kaXNjYXJkXV0gUmVnaXN0 ZXIgZXh0cmFjdFRhZyhjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgICAgc3BsaXRUYWco dmFsdWUsIHNjcmF0Y2gpOworKyAgICByZXR1cm4gc2NyYXRjaDsKKysgIH0KKysKKysgIFtbbm9k aXNjYXJkXV0gUmVnaXN0ZXIgZXh0cmFjdE9iamVjdChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gp IHsKKysgICAgbG9hZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAgYXNfcmxkaWNsKHNjcmF0 Y2gsIHNjcmF0Y2gsIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZUKTsKKysgICAgcmV0dXJuIHNjcmF0 Y2g7CisrICB9CisrICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RPYmplY3QoY29uc3Qg VmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIHVuYm94T2JqZWN0KHZhbHVlLCBzY3JhdGNo KTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVy IGV4dHJhY3RJbnQzMihjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgeworKyAgICB1bmJveElu dDMyKHZhbHVlLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrICBbW25v ZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RTdHJpbmcoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1 ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3Jh dGNoKSB7CisrICAgIHVuYm94U3RyaW5nKHZhbHVlLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIHNj cmF0Y2g7CisrICB9CisrICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RTeW1ib2woY29u c3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIHVuYm94U3ltYm9sKHZhbHVlLCBzY3Jh dGNoKTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrICBbW25vZGlzY2FyZF1dIFJlZ2lz dGVyIGV4dHJhY3RCb29sZWFuKGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgICAg dW5ib3hCb29sZWFuKHZhbHVlLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9 CisrCisrICB2b2lkIHRlc3RPYmplY3RTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3Bl cmFuZCYgdmFsdWUsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgTU9aX0FTU0VSVChjb25kID09IEVx dWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgICB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICAgIFJlZ2lzdGVyIHRhZyA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgICBzcGxpdFRhZyh2YWx1ZSwgdGFnKTsKKysgICAgICB1aW50MzJfdCB0ID0g SlNWQUxfVEFHX09CSkVDVDsKKysgICAgICBhc194b3Jpcyh0YWcsIHRhZywgdCA+PiAxNik7Cisr ICAgICAgYXNfY21wbHdpKHRhZywgdCAmIDB4RkZGRik7CisrICAgIH0KKysgICAgbWFfY21wX3Nl dChkZXN0LCBjb25kKTsKKysgIH0KKysgIHZvaWQgdGVzdFVuZGVmaW5lZFNldChDb25kaXRpb24g Y29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25k ID09IE5vdEVxdWFsKTsKKysgICAgeworKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciB0YWcgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAg ICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7CisrICAgICAgLy8gVXNlIHhvcmlzK2NtcGx3aSB0byBj b21wYXJlIHdpdGhvdXQgYSBzZWNvbmQgc2NyYXRjaC4KKysgICAgICB1aW50MzJfdCB0ID0gSlNW QUxfVEFHX1VOREVGSU5FRDsKKysgICAgICBhc194b3Jpcyh0YWcsIHRhZywgdCA+PiAxNik7Cisr ICAgICAgYXNfY21wbHdpKHRhZywgdCAmIDB4RkZGRik7CisrICAgIH0KKysgICAgbWFfY21wX3Nl dChkZXN0LCBjb25kKTsKKysgIH0KKysgIHZvaWQgdGVzdE51bGxTZXQoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgTU9aX0FT U0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgICB7CisrICAgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICAgIFJlZ2lzdGVyIHRh ZyA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBzcGxpdFRhZyh2YWx1ZSwgdGFnKTsKKysgICAg ICB1aW50MzJfdCB0ID0gSlNWQUxfVEFHX05VTEw7CisrICAgICAgYXNfeG9yaXModGFnLCB0YWcs IHQgPj4gMTYpOworKyAgICAgIGFzX2NtcGx3aSh0YWcsIHQgJiAweEZGRkYpOworKyAgICB9Cisr ICAgIG1hX2NtcF9zZXQoZGVzdCwgY29uZCk7CisrICB9CisrCisrICBCdWZmZXJPZmZzZXQgcmV0 KCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGFzX2xkKHNjcmF0Y2gsIFN0 YWNrUG9pbnRlciwgMCk7CisrICAgIGFzX2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIs IDgpOworKyAgICB4c19tdGxyKHNjcmF0Y2gpOworKyAgICByZXR1cm4gYXNfYmxyKCk7CisrICB9 CisrCisrICB2b2lkIGooTGFiZWwqIGRlc3QpIHsganVtcChkZXN0KTsgfQorKworKyAgdm9pZCBn ZXRXYXNtQW55UmVmR0NUaGluZ0NodW5rKFJlZ2lzdGVyIGFueXJlZiwgUmVnaXN0ZXIgZGVzdCkg eworKyAgICBzdGF0aWNfYXNzZXJ0KGpzOjpnYzo6Q2h1bmtTaGlmdCA9PSAyMCk7CisrICAgIGFz X3JsZGljcihkZXN0LCBhbnlyZWYsIDAsIDQzKTsKKysgIH0KKysKKysgIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgorKyAgdm9pZCBsb2FkVW5ib3hlZFZhbHVlKGNvbnN0IFQmIGFkZHJlc3MsIE1JUlR5 cGUgdHlwZSwgQW55UmVnaXN0ZXIgZGVzdCkgeworKyAgICBpZiAoZGVzdC5pc0Zsb2F0KCkpIHsK KysgICAgICBsb2FkSW50MzJPckRvdWJsZShhZGRyZXNzLCBkZXN0LmZwdSgpKTsKKysgICAgfSBl bHNlIHsKKysgICAgICB1bmJveE5vbkRvdWJsZShhZGRyZXNzLCBkZXN0LmdwcigpLCBWYWx1ZVR5 cGVGcm9tTUlSVHlwZSh0eXBlKSk7CisrICAgIH0KKysgIH0KKysKKysgIHZvaWQgbG9hZEludDMy T3JEb3VibGUoY29uc3QgQWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpOworKyAgdm9p ZCBsb2FkSW50MzJPckRvdWJsZShjb25zdCBCYXNlSW5kZXgmIGFkZHIsIEZsb2F0UmVnaXN0ZXIg ZGVzdCk7CisrCisrICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgIC8vIFN0b3JlIGluc3RydWN0aW9ucworKworKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlOChSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFk ZHJlc3MpIHsKKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgeworKyAgICAg IHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3N0YihzcmMsIGFkZHJl c3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCks IHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0Yngoc3JjLCBh ZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIEZhdWx0aW5nQ29k ZU9mZnNldCBzdG9yZTgoUmVnaXN0ZXIgc3JjLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsK KysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhh ZGRyZXNzLCBzY3JhdGNoKTsKKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkg eworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3N0Yihz cmMsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAg UmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29y ZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gyKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19zdGJ4KHNyYywgc2NyYXRjaCwgc2NyYXRjaDIpLmdldE9mZnNldCgpKTsKKysgIH0K KysgIHZvaWQgc3RvcmU4KEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcykgeworKyAg ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOworKyAg ICBzdG9yZTgoc2NyYXRjaCwgYWRkcmVzcyk7CisrICB9CisrICB2b2lkIHN0b3JlOChJbW0zMiBp bW0sIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOworKyAgICBzdG9yZTgoc2NyYXRjaCwgYWRk cmVzcyk7CisrICB9CisrCisrICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmUxNihSZWdpc3RlciBz cmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5v ZmZzZXQsIDE2KSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAg ICAgIGFzX3N0aChzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgp KTsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Cisr ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1t V29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX3N0aHgoc3JjLCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsK KysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZTE2KFJlZ2lzdGVyIHNyYywgY29uc3Qg QmFzZUluZGV4JiBhZGRyZXNzKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAg Y29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywgc2NyYXRjaCk7CisrICAgIGlmIChpc19pbnRO KGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KAorKyAgICAgICAgICBhc19zdGgoc3JjLCBzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zm c2V0KCkpOworKyAgICB9CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoMik7CisrICAg IHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RoeChzcmMsIHNjcmF0Y2gsIHNjcmF0Y2gy KS5nZXRPZmZzZXQoKSk7CisrICB9CisrICB2b2lkIHN0b3JlMTYoSW1tMzIgaW1tLCBjb25zdCBB ZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92 ZTMyKGltbSwgc2NyYXRjaCk7CisrICAgIHN0b3JlMTYoc2NyYXRjaCwgYWRkcmVzcyk7CisrICB9 CisrICB2b2lkIHN0b3JlMTYoSW1tMzIgaW1tLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsK KysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsK KysgICAgc3RvcmUxNihzY3JhdGNoLCBhZGRyZXNzKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgorKyAgdm9pZCBzdG9yZTE2VW5hbGlnbmVkKFJlZ2lzdGVyIHNyYywgY29uc3QgVCYg ZGVzdCkgeworKyAgICBzdG9yZTE2KHNyYywgZGVzdCk7CisrICB9CisrCisrICBGYXVsdGluZ0Nv ZGVPZmZzZXQgc3RvcmUzMihSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsK KysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgeworKyAgICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3N0dyhzcmMsIGFkZHJlc3MuYmFzZSwg YWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gp OworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0d3goc3JjLCBhZGRyZXNzLmJh c2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBz dG9yZTMyKFJlZ2lzdGVyIHNyYywgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7CisrICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywg c2NyYXRjaCk7CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19zdHcoc3JjLCBzY3Jh dGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFJlZ2lzdGVy IHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVz cy5vZmZzZXQpLCBzY3JhdGNoMik7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf c3R3eChzcmMsIHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICB2b2lk IHN0b3JlMzIoUmVnaXN0ZXIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykgeworKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWFk ZHJlc3MuYWRkciksIHNjcmF0Y2gpOworKyAgICBhc19zdHcoc3JjLCBzY3JhdGNoLCAwKTsKKysg IH0KKysgIHZvaWQgc3RvcmUzMihJbW0zMiBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsK KysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIoc3JjLCBzY3JhdGNoKTsK KysgICAgc3RvcmUzMihzY3JhdGNoLCBhZGRyZXNzKTsKKysgIH0KKysgIHZvaWQgc3RvcmUzMihJ bW0zMiBzcmMsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIG1vdmUzMihzcmMsIHNjcmF0Y2gpOworKyAgICBzdG9yZTMyKHNjcmF0 Y2gsIGFkZHJlc3MpOworKyAgfQorKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICB2b2lkIHN0 b3JlMzJVbmFsaWduZWQoUmVnaXN0ZXIgc3JjLCBjb25zdCBUJiBkZXN0KSB7CisrICAgIHN0b3Jl MzIoc3JjLCBkZXN0KTsKKysgIH0KKysKKysgIHZvaWQgc3RvcmU2NChJbW02NCBpbW0sIEFkZHJl c3MgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIo SW1tV29yZChpbW0udmFsdWUpLCBzY3JhdGNoKTsKKysgICAgc3RvcmVQdHIoc2NyYXRjaCwgYWRk cmVzcyk7CisrICB9CisrICB2b2lkIHN0b3JlNjQoSW1tNjQgaW1tLCBjb25zdCBCYXNlSW5kZXgm IGFkZHJlc3MpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwor KyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKElt bVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7CisrICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGFkZHJl c3MpOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlNjQoUmVnaXN0ZXI2NCBzcmMs IEFkZHJlc3MgYWRkcmVzcykgeworKyAgICByZXR1cm4gc3RvcmVQdHIoc3JjLnJlZywgYWRkcmVz cyk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmU2NChSZWdpc3RlcjY0IHNyYywg Y29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7CisrICAgIHJldHVybiBzdG9yZVB0cihzcmMucmVn LCBhZGRyZXNzKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBzdG9y ZTY0VW5hbGlnbmVkKFJlZ2lzdGVyNjQgc3JjLCBjb25zdCBUJiBkZXN0KSB7CisrICAgIHN0b3Jl NjQoc3JjLCBkZXN0KTsKKysgIH0KKysKKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9p ZCBzdG9yZVB0cihJbW1Xb3JkIGltbSwgVCBhZGRyZXNzKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgICAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOworKyAgICBzdG9yZVB0cihzY3Jh dGNoLCBhZGRyZXNzKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBz dG9yZVB0cihJbW1QdHIgaW1tLCBUIGFkZHJlc3MpIHsKKysgICAgc3RvcmVQdHIoSW1tV29yZCh1 aW50cHRyX3QoaW1tLnZhbHVlKSksIGFkZHJlc3MpOworKyAgfQorKyAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CisrICB2b2lkIHN0b3JlUHRyKEltbUdDUHRyIGltbSwgVCBhZGRyZXNzKSB7CisrICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOworKyAg ICBzdG9yZVB0cihzY3JhdGNoLCBhZGRyZXNzKTsKKysgIH0KKysgIHZvaWQgc3RvcmVQdHIoUmVn aXN0ZXIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWRlc3QuYWRkciksIHNjcmF0 Y2gpOworKyAgICBhc19zdGQoc3JjLCBzY3JhdGNoLCAwKTsKKysgIH0KKysgIEZhdWx0aW5nQ29k ZU9mZnNldCBzdG9yZVB0cihSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsK KysgICAgLy8gYXNfc3RkIChEUy1mb3JtKSByZXF1aXJlcyA0LWJ5dGUgYWxpZ25lZCBvZmZzZXQu CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikgJiYgIShhZGRyZXNzLm9mZnNl dCAmIDB4MykpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAg ICBhc19zdGQoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7 CisrICAgIH0KKysgICAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRy ZXNzLm9mZnNldCwgMzQpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysg ICAgICAgICAgYXNfcHN0ZChzcmMsIGFkZHJlc3MuYmFzZSwgKGludDY0X3QpYWRkcmVzcy5vZmZz ZXQsIC8qUj0qL2ZhbHNlKQorKyAgICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKKysgICAgfQor KyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNz Lm9mZnNldCksIHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0 ZHgoc3JjLCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIEZh dWx0aW5nQ29kZU9mZnNldCBzdG9yZVB0cihSZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJbmRleCYg YWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Cisr ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGNvbXB1dGVTY2Fs ZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9m ZnNldCwgMTYpICYmICEoYWRkcmVzcy5vZmZzZXQgJiAweDMpKSB7CisrICAgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfc3RkKHNyYywgc2NyYXRjaCwgYWRkcmVz cy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBSZWdpc3RlciBzY3JhdGNoMiA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwg c2NyYXRjaDIpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZHgoc3JjLCBz Y3JhdGNoLCBzY3JhdGNoMikuZ2V0T2Zmc2V0KCkpOworKyAgfQorKworKyAgLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICAvLyBNaXNjCisrCisrICB2b2lkIGhhbmRsZUZhaWx1cmVXaXRoSGFuZGxlclRhaWwoTGFiZWwq IHByb2ZpbGVyRXhpdFRhaWwsIExhYmVsKiBiYWlsb3V0VGFpbCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogcmV0dXJuVmFsdWVDaGVja09mZnNldCk7Cisr CisrICBpbmxpbmUgdm9pZCBpbmNyZW1lbnRJbnQzMlZhbHVlKGNvbnN0IEFkZHJlc3MmIGFkZHIp OworKworKyAgdm9pZCB6ZXJvRG91YmxlKEZsb2F0UmVnaXN0ZXIgcmVnKSB7IGFzX3h4bHhvcihy ZWcsIHJlZywgcmVnKTsgfQorKworKyAgdm9pZCB3cml0ZUNvZGVQb2ludGVyKENvZGVMYWJlbCog bGFiZWwpIHsKKysgICAgbGFiZWwtPnBhdGNoQXQoKS0+YmluZChjdXJyZW50T2Zmc2V0KCkpOwor KyAgICBsYWJlbC0+c2V0TGlua01vZGUoQ29kZUxhYmVsOjpSYXdQb2ludGVyKTsKKysgICAgbV9i dWZmZXIuZW5zdXJlU3BhY2Uoc2l6ZW9mKHZvaWQqKSk7CisrICAgIHdyaXRlSW5zdCgtMSk7Cisr ICAgIHdyaXRlSW5zdCgtMSk7CisrICB9CisrICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRpb24oY29u c3QgVmFsdWUmIHZhbCkgeworKyAgICBpZiAodmFsLmlzR0NUaGluZygpKSB7CisrICAgICAgZ2M6 OkNlbGwqIGNlbGwgPSB2YWwudG9HQ1RoaW5nKCk7CisrICAgICAgaWYgKGNlbGwgJiYgZ2M6Oklz SW5zaWRlTnVyc2VyeShjZWxsKSkgeworKyAgICAgICAgZW1iZWRzTnVyc2VyeVBvaW50ZXJzXyA9 IHRydWU7CisrICAgICAgfQorKyAgICAgIGRhdGFSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25lZChj dXJyZW50T2Zmc2V0KCkpOworKyAgICB9CisrICB9CisrICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRp b24oQ29kZU9mZnNldCBvZmYsIGNvbnN0IFZhbHVlJiB2YWwpIHsKKysgICAgaWYgKHZhbC5pc0dD VGhpbmcoKSkgeworKyAgICAgIGdjOjpDZWxsKiBjZWxsID0gdmFsLnRvR0NUaGluZygpOworKyAg ICAgIGlmIChjZWxsICYmIGdjOjpJc0luc2lkZU51cnNlcnkoY2VsbCkpIHsKKysgICAgICAgIGVt YmVkc051cnNlcnlQb2ludGVyc18gPSB0cnVlOworKyAgICAgIH0KKysgICAgICBkYXRhUmVsb2Nh dGlvbnNfLndyaXRlVW5zaWduZWQob2ZmLm9mZnNldCgpKTsKKysgICAgfQorKyAgfQorKworKyAg Q29kZU9mZnNldCB0b2dnbGVkSnVtcChMYWJlbCogbGFiZWwpIHsKKysgICAgQ29kZU9mZnNldCBy ZXQobmV4dE9mZnNldCgpLmdldE9mZnNldCgpKTsKKysgICAganVtcChsYWJlbCk7CisrICAgIHJl dHVybiByZXQ7CisrICB9CisrICBDb2RlT2Zmc2V0IHRvZ2dsZWRDYWxsKEppdENvZGUqIHRhcmdl dCwgYm9vbCBlbmFibGVkKTsKKysgIC8vIDggaW5zdHJ1Y3Rpb25zIGZvciBsb2FkNjQgKyBtdGN0 ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rpb25zIHRvdGFsLgorKyAgc3RhdGljIHNpemVfdCBUb2dn bGVkQ2FsbFNpemUodWludDhfdCogY29kZSkgeyByZXR1cm4gMTAgKiBzaXplb2YodWludDMyX3Qp OyB9CisrCisrICB2b2lkIGNoZWNrU3RhY2tBbGlnbm1lbnQoKSB7fQorKworKyAgc3RhdGljIHZv aWQgY2FsY3VsYXRlQWxpZ25lZFN0YWNrUG9pbnRlcih2b2lkKiogc3RhY2tQb2ludGVyKSB7Cisr ICAgICpzdGFja1BvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigodWludHB0cl90KCpz dGFja1BvaW50ZXIpKSAmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB+KEFCSVN0YWNrQWxpZ25tZW50IC0gMSkpOworKyAgfQorKworKyAgdm9pZCBsZWEoT3Bl cmFuZCBhZGRyLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIC8vIHg4Ni1pc207IG9uIFBQQywgY29t cHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBtYW51YWxseS4KKysgICAgTU9aX0NSQVNIKCJQUEM2NDog bGVhIG5vdCBzdXBwb3J0ZWQ7IHVzZSBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyIpOworKyAgfQor KworKyAgdm9pZCBhYmlyZXQoKSB7IGFzX2JscigpOyB9CisrCisrICB2b2lkIHByb2ZpbGVyRW50 ZXJGcmFtZShSZWdpc3RlciBmcmFtZVB0ciwgUmVnaXN0ZXIgc2NyYXRjaCk7CisrICB2b2lkIHBy b2ZpbGVyRXhpdEZyYW1lKCk7CisrCisrICB2b2lkIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50 MzJDaGVjaygKKysgICAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBvdXRwdXQsIE1J UlR5cGUgZnJvbVR5cGUsIFRydW5jRmxhZ3MgZmxhZ3MsCisrICAgICAgTGFiZWwqIHJlam9pbiwg Y29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MpOworKyAgdm9pZCBvdXRPZkxp bmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2soCisrICAgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwg UmVnaXN0ZXI2NCBvdXRwdXQsIE1JUlR5cGUgZnJvbVR5cGUsCisrICAgICAgVHJ1bmNGbGFncyBm bGFncywgTGFiZWwqIHJlam9pbiwgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURl c2MpOworKworKyAgdm9pZCB3YXNtTG9hZEltcGwoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVz YyYgYWNjZXNzLCBSZWdpc3RlciBtZW1vcnlCYXNlLAorKyAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoLCBBbnlSZWdpc3RlciBvdXRwdXQpOworKyAg dm9pZCB3YXNtU3RvcmVJbXBsKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vzcywg QW55UmVnaXN0ZXIgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5 QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKTsKKysgIHZvaWQgd2FzbUxv YWRJNjRJbXBsKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVnaXN0 ZXIgcHRyU2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0 KTsKKysgIHZvaWQgd2FzbVN0b3JlSTY0SW1wbChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNj JiBhY2Nlc3MsIFJlZ2lzdGVyNjQgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKTsKKysK KysgIC8vIExhc3QtYnl0ZSBwcm9iaW5nIGxvYWQgdG8gZW5mb3JjZSB3YXNtLXNwZWMgYXRvbWlj aXR5IGZvciBtdWx0aS1ieXRlCisrICAvLyB3YXNtIGFjY2Vzc2VzIG9uIFBPV0VSIElTQS4gUE9X RVIgcGVybWl0cyB1bmFsaWduZWQgcGFnZS1zcGFubmluZworKyAgLy8gYWNjZXNzZXMgdG8gY29t bWl0IG9uZSBoYWxmIGJlZm9yZSB0aGUgb3RoZXIgaGFsZiB0YWtlcyBhIERTSTsgd2FzbQorKyAg Ly8gcmVxdWlyZXMgYXRvbWljaXR5LiBUb3VjaGluZyB0aGUgbGFzdCBieXRlIG9mIHRoZSB1cGNv bWluZyBhY2Nlc3MKKysgIC8vIHdpdGggYSAxLWJ5dGUgbGJ6eCB0cmlnZ2VycyBTSUdTRUdWICji hpIgd2FzbSB0cmFwIHZpYSB0aGUgc2lnbmFsCisrICAvLyBoYW5kbGVyKSBiZWZvcmUgdGhlIGFj dHVhbCBhY2Nlc3MgZXhlY3V0ZXMg4oCUIFBPV0VSJ3MgcHJlY2lzZS0KKysgIC8vIGludGVycnVw dCBtb2RlbCBndWFyYW50ZWVzIHRoZSBzdWJzZXF1ZW50IGFjY2VzcyBpcyBuZXZlcgorKyAgLy8g YXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVkIGlmIHRoZSBwcm9iZSBmYXVsdHMuCisrICAvLworKyAg Ly8gV2FzbSBsaW5lYXIgbWVtb3J5IGlzIG9uZSBjb250aWd1b3VzIG1hcHBlZCByZWdpb24gZm9s bG93ZWQgYnkgYW4KKysgIC8vIG1wcm90ZWN0J2QgZ3VhcmQsIHNvIGxhc3QtYnl0ZS1tYXBwZWQg 4oeSIGFsbC1ieXRlcy1tYXBwZWQsIGFuZCBhCisrICAvLyBzaW5nbGUtYnl0ZSBwcm9iZSBpcyBz dWZmaWNpZW50IHJlZ2FyZGxlc3Mgb2YgYWNjZXNzIHNpemUuCisrICAvLworKyAgLy8gTm8tb3Ag d2hlbiBIYXNQT1dFUjkoKSAocmVhbCBQT1dFUjkvUE9XRVIxMCBzaWxpY29uIGhhbmRsZXMgcGFn ZS0KKysgIC8vIHNwYW5uaW5nIHVuYWxpZ25lZCBzdG9yZXMgYXRvbWljYWxseSBhdCB0aGUgwrVh cmNoIGxldmVsKSwgYW5kIHdoZW4KKysgIC8vIGFjY2VzcyBzaXplIGlzIDEuIE5ldmVyIGNhbGxl ZCBvbiB0aGUgYXRvbWljIHBhdGg6IGF0b21pYyBvcHMgYXJlCisrICAvLyBuYXR1cmFsbHkgYWxp Z25lZCBwZXIgd2FzbSBzcGVjICsgSVNBLWVuZm9yY2VkIGx3YXJ4IGFsaWdubWVudCwgc28KKysg IC8vIHRoZXkgY2Fubm90IHNwYW4gcGFnZXM7IG1pc2FsaWduZWQgYXRvbWljcyB0YWtlIGEgcHJl Y2lzZSBTSUdCVVMKKysgIC8vIGJlZm9yZSBhbnkgY29tbWl0LgorKyAgLy8KKysgIC8vIDIgaW5z dHJ1Y3Rpb25zIHdoZW4gZW1pdHRlZCAoYWRkaSArIGxiengpLgorKyAgdm9pZCB3YXNtUHJvYmVM YXN0Qnl0ZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0cik7CisrfTsK KysKKyt0eXBlZGVmIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYzsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNwYWNlIGpzCisrCisr I2VuZGlmIC8qIGppdF9wcGM2NF9NYWNyb0Fzc2VtYmxlcl9wcGM2NF9oICovCitkaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3Bw YzY0L01vdmVFbWl0dGVyLXBwYzY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwMC4uOTg5ZDNmNjFmMTIxCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0 L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmNwcAorQEAgLTAsMCArMSwzNTcgQEAKKysvKiAtKi0g TW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v ZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAq IFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96 aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdh cyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25l IGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaW5jbHVkZSAiaml0L3Bw YzY0L01vdmVFbWl0dGVyLXBwYzY0LmgiCisrCisrI2luY2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxl ci1pbmwuaCIKKysKKyt1c2luZyBuYW1lc3BhY2UganM7CisrdXNpbmcgbmFtZXNwYWNlIGpzOjpq aXQ7CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjpicmVha0N5Y2xlKGNvbnN0IE1vdmVPcGVy YW5kJiBmcm9tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3Zl T3BlcmFuZCYgdG8sIE1vdmVPcDo6VHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBzbG90SWQpIHsKKysgIHN3aXRjaCAodHlwZSkgeworKyAgICBj YXNlIE1vdmVPcDo6RkxPQVQzMjoKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAg ICAgU2NyYXRjaEZsb2F0MzJTY29wZSBmcHNjcmF0Y2gzMihtYXNtKTsKKysgICAgICAgIG1hc20u bG9hZEZsb2F0MzIoZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSwgZnBzY3JhdGNoMzIpOworKyAgICAg ICAgbWFzbS5zdG9yZUZsb2F0MzIoZnBzY3JhdGNoMzIsIGN5Y2xlU2xvdChzbG90SWQpKTsKKysg ICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5zdG9yZUZsb2F0MzIodG8uZmxvYXRSZWcoKSwg Y3ljbGVTbG90KHNsb3RJZCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBN b3ZlT3A6OkRPVUJMRToKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgICAgU2Ny YXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaDY0KG1hc20pOworKyAgICAgICAgbWFzbS5sb2FkRG91 YmxlKGdldEFkanVzdGVkQWRkcmVzcyh0byksIGZwc2NyYXRjaDY0KTsKKysgICAgICAgIG1hc20u c3RvcmVEb3VibGUoZnBzY3JhdGNoNjQsIGN5Y2xlU2xvdChzbG90SWQpKTsKKysgICAgICB9IGVs c2UgeworKyAgICAgICAgbWFzbS5zdG9yZURvdWJsZSh0by5mbG9hdFJlZygpLCBjeWNsZVNsb3Qo c2xvdElkKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6SU5U MzI6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgICAgICAgIG1hc20ubG9hZDMyKGdldEFkanVzdGVkQWRkcmVzcyh0byks IHNjcmF0Y2gpOworKyAgICAgICAgbWFzbS5zdG9yZTMyKHNjcmF0Y2gsIGN5Y2xlU2xvdCgwKSk7 CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uc3RvcmUzMih0by5yZWcoKSwgY3ljbGVT bG90KDApKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9wOjpHRU5F UkFMOgorKyAgICAgIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAgICAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7CisrICAgICAgICBtYXNtLmxvYWRQdHIoZ2V0QWRqdXN0ZWRBZGRyZXNzKHRv KSwgc2NyYXRjaCk7CisrICAgICAgICBtYXNtLnN0b3JlUHRyKHNjcmF0Y2gsIGN5Y2xlU2xvdCgw KSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uc3RvcmVQdHIodG8ucmVnKCksIGN5 Y2xlU2xvdCgwKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6 U0lNRDEyODoKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgICAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKG1hc20pOworKyAgICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2lt ZDEyOChnZXRBZGp1c3RlZEFkZHJlc3ModG8pLCBzY3JhdGNoKTsKKysgICAgICAgIG1hc20uc3Rv cmVVbmFsaWduZWRTaW1kMTI4KHNjcmF0Y2gsIGN5Y2xlU2xvdChzbG90SWQpKTsKKysgICAgICB9 IGVsc2UgeworKyAgICAgICAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgodG8uZmxvYXRSZWco KSwgY3ljbGVTbG90KHNsb3RJZCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgZGVm YXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgbW92ZSB0eXBlIik7CisrICB9Cisr fQorKworK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6Y29tcGxldGVDeWNsZShjb25zdCBNb3ZlT3Bl cmFuZCYgZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TW92ZU9wZXJhbmQmIHRvLCBNb3ZlT3A6OlR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xvdElkKSB7CisrICBzd2l0Y2ggKHR5cGUpIHsK KysgICAgY2FzZSBNb3ZlT3A6OkZMT0FUMzI6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsK KysgICAgICAgIFNjcmF0Y2hGbG9hdDMyU2NvcGUgZnBzY3JhdGNoMzIobWFzbSk7CisrICAgICAg ICBtYXNtLmxvYWRGbG9hdDMyKGN5Y2xlU2xvdChzbG90SWQpLCBmcHNjcmF0Y2gzMik7CisrICAg ICAgICBtYXNtLnN0b3JlRmxvYXQzMihmcHNjcmF0Y2gzMiwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRv KSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20ubG9hZEZsb2F0MzIoY3ljbGVTbG90 KHNsb3RJZCksIHRvLmZsb2F0UmVnKCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAg Y2FzZSBNb3ZlT3A6OkRPVUJMRToKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAg ICAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaDY0KG1hc20pOworKyAgICAgICAgbWFzbS5s b2FkRG91YmxlKGN5Y2xlU2xvdChzbG90SWQpLCBmcHNjcmF0Y2g2NCk7CisrICAgICAgICBtYXNt LnN0b3JlRG91YmxlKGZwc2NyYXRjaDY0LCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAg ICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5sb2FkRG91YmxlKGN5Y2xlU2xvdChzbG90SWQpLCB0 by5mbG9hdFJlZygpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9w OjpJTlQzMjoKKysgICAgICBNT1pfQVNTRVJUKHNsb3RJZCA9PSAwKTsKKysgICAgICBpZiAodG8u aXNNZW1vcnkoKSkgeworKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFz bSk7CisrICAgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAg ICAgbWFzbS5sb2FkMzIoY3ljbGVTbG90KDApLCBzY3JhdGNoKTsKKysgICAgICAgIG1hc20uc3Rv cmUzMihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgICB9IGVsc2Ugewor KyAgICAgICAgbWFzbS5sb2FkMzIoY3ljbGVTbG90KDApLCB0by5yZWcoKSk7CisrICAgICAgfQor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6R0VORVJBTDoKKysgICAgICBNT1pfQVNT RVJUKHNsb3RJZCA9PSAwKTsKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAgICAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgICAgbWFzbS5sb2FkUHRyKGN5Y2xlU2xv dCgwKSwgc2NyYXRjaCk7CisrICAgICAgICBtYXNtLnN0b3JlUHRyKHNjcmF0Y2gsIGdldEFkanVz dGVkQWRkcmVzcyh0bykpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLmxvYWRQdHIo Y3ljbGVTbG90KDApLCB0by5yZWcoKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBj YXNlIE1vdmVPcDo6U0lNRDEyODoKKysgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAg ICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKG1hc20pOworKyAgICAgICAgbWFzbS5sb2Fk VW5hbGlnbmVkU2ltZDEyOChjeWNsZVNsb3Qoc2xvdElkKSwgc2NyYXRjaCk7CisrICAgICAgICBt YXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEyOChzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8p KTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChj eWNsZVNsb3Qoc2xvdElkKSwgdG8uZmxvYXRSZWcoKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFr OworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBtb3ZlIHR5cGUi KTsKKysgIH0KKyt9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0KGNvbnN0IE1vdmVS ZXNvbHZlciYgbW92ZXMpIHsKKysgIGlmIChtb3Zlcy5udW1DeWNsZXMoKSkgeworKyAgICAvLyBT cGlsbFNsb3RTaXplIG11c3QgYmUgd2lkZSBlbm91Z2ggZm9yIHRoZSB3aWRlc3QgY3ljbGVkIHZh bHVlCisrICAgIC8vIChTSU1EMTI4ID0gMTYgYnl0ZXMpLiBUaGUgc3RyaWRlIGJlbG93IGFzc3Vt ZXMgdGhlIHNhbWUuIFNlZQorKyAgICAvLyBBcmNoaXRlY3R1cmUtcHBjNjQuaCBmb3IgdGhlIHJh dGlvbmFsZS4KKysgICAgc3RhdGljX2Fzc2VydChTcGlsbFNsb3RTaXplID09IDE2KTsKKysgICAg bWFzbS5yZXNlcnZlU3RhY2sobW92ZXMubnVtQ3ljbGVzKCkgKiBTcGlsbFNsb3RTaXplKTsKKysg ICAgcHVzaGVkQXRDeWNsZV8gPSBtYXNtLmZyYW1lUHVzaGVkKCk7CisrICB9CisrCisrICBmb3Ig KHNpemVfdCBpID0gMDsgaSA8IG1vdmVzLm51bU1vdmVzKCk7IGkrKykgeworKyAgICBlbWl0KG1v dmVzLmdldE1vdmUoaSkpOworKyAgfQorK30KKysKKytBZGRyZXNzIE1vdmVFbWl0dGVyUFBDNjQ6 OmN5Y2xlU2xvdCh1aW50MzJfdCBzbG90LCB1aW50MzJfdCBzdWJzbG90KSBjb25zdCB7CisrICBp bnQzMl90IG9mZnNldCA9IG1hc20uZnJhbWVQdXNoZWQoKSAtIHB1c2hlZEF0Q3ljbGVfOworKyAg Ly8gU3RyaWRlIG11c3QgbWF0Y2ggdGhlIHBlci1jeWNsZSByZXNlcnZhdGlvbiBpbiBlbWl0KCk7 IHVzaW5nIGEKKysgIC8vIG5hcnJvd2VyIHN0cmlkZSBjYXVzZXMgYWRqYWNlbnQgU0lNRDEyOCBz bG90cyB0byBvdmVybGFwLgorKyAgcmV0dXJuIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBvZmZzZXQg KyBzbG90ICogU3BpbGxTbG90U2l6ZSArIHN1YnNsb3QpOworK30KKysKKytpbnQzMl90IE1vdmVF bWl0dGVyUFBDNjQ6OmdldEFkanVzdGVkT2Zmc2V0KGNvbnN0IE1vdmVPcGVyYW5kJiBvcGVyYW5k KSB7CisrICBNT1pfQVNTRVJUKG9wZXJhbmQuaXNNZW1vcnlPckVmZmVjdGl2ZUFkZHJlc3MoKSk7 CisrICBpZiAob3BlcmFuZC5iYXNlKCkgIT0gU3RhY2tQb2ludGVyKSB7CisrICAgIHJldHVybiBv cGVyYW5kLmRpc3AoKTsKKysgIH0KKysKKysgIHJldHVybiBvcGVyYW5kLmRpc3AoKSArIG1hc20u ZnJhbWVQdXNoZWQoKSAtIHB1c2hlZEF0U3RhcnRfOworK30KKysKKytBZGRyZXNzIE1vdmVFbWl0 dGVyUFBDNjQ6OmdldEFkanVzdGVkQWRkcmVzcyhjb25zdCBNb3ZlT3BlcmFuZCYgb3BlcmFuZCkg eworKyAgcmV0dXJuIEFkZHJlc3Mob3BlcmFuZC5iYXNlKCksIGdldEFkanVzdGVkT2Zmc2V0KG9w ZXJhbmQpKTsKKyt9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0TW92ZShjb25zdCBN b3ZlT3BlcmFuZCYgZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE1vdmVPcGVyYW5kJiB0bykgeworKyAgaWYgKGZyb20uaXNHZW5lcmFsUmVnKCkpIHsKKysgICAg aWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7CisrICAgICAgbWFzbS5tb3ZlUHRyKGZyb20ucmVnKCks IHRvLnJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAgICAgbWFz bS5zdG9yZVB0cihmcm9tLnJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgfSBl bHNlIHsKKysgICAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOwor KyAgICB9CisrICB9IGVsc2UgaWYgKGZyb20uaXNNZW1vcnkoKSkgeworKyAgICBpZiAodG8uaXNH ZW5lcmFsUmVnKCkpIHsKKysgICAgICBtYXNtLmxvYWRQdHIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZy b20pLCB0by5yZWcoKSk7CisrICAgIH0gZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbWFzbS5sb2FkUHRyKGdldEFkanVzdGVk QWRkcmVzcyhmcm9tKSwgc2NyYXRjaCk7CisrICAgICAgbWFzbS5zdG9yZVB0cihzY3JhdGNoLCBn ZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQ1JBU0go IkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOworKyAgICB9CisrICB9IGVsc2UgaWYgKGZy b20uaXNFZmZlY3RpdmVBZGRyZXNzKCkpIHsKKysgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7 CisrICAgICAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhnZXRBZGp1c3RlZEFkZHJlc3Mo ZnJvbSksIHRvLnJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVB ZGRyZXNzKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgc2NyYXRjaCk7CisrICAgICAgbWFzbS5z dG9yZVB0cihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgfSBlbHNlIHsK KysgICAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOworKyAgICB9 CisrICB9IGVsc2UgeworKyAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRz LiIpOworKyAgfQorK30KKysKKyt2b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXRJbnQzMk1vdmUo Y29uc3QgTW92ZU9wZXJhbmQmIGZyb20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0bykgeworKyAgaWYgKGZyb20uaXNHZW5lcmFsUmVn KCkpIHsKKysgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7CisrICAgICAgbWFzbS5tb3ZlMzIo ZnJvbS5yZWcoKSwgdG8ucmVnKCkpOworKyAgICB9IGVsc2UgaWYgKHRvLmlzTWVtb3J5KCkpIHsK KysgICAgICBtYXNtLnN0b3JlMzIoZnJvbS5yZWcoKSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUg YXJndW1lbnRzLiIpOworKyAgICB9CisrICB9IGVsc2UgaWYgKGZyb20uaXNNZW1vcnkoKSkgewor KyAgICBpZiAodG8uaXNHZW5lcmFsUmVnKCkpIHsKKysgICAgICBtYXNtLmxvYWQzMihnZXRBZGp1 c3RlZEFkZHJlc3MoZnJvbSksIHRvLnJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc01lbW9y eSgpKSB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBtYXNtLmxvYWQz MihnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHNjcmF0Y2gpOworKyAgICAgIG1hc20uc3RvcmUz MihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgfSBlbHNlIHsKKysgICAg ICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdEludDMyTW92ZSBhcmd1bWVudHMuIik7CisrICAgIH0K KysgIH0gZWxzZSBpZiAoZnJvbS5pc0VmZmVjdGl2ZUFkZHJlc3MoKSkgeworKyAgICBpZiAodG8u aXNHZW5lcmFsUmVnKCkpIHsKKysgICAgICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGdl dEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgdG8ucmVnKCkpOworKyAgICB9IGVsc2UgaWYgKHRvLmlz TWVtb3J5KCkpIHsKKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsK KysgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1hc20u Y29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBzY3JhdGNo KTsKKysgICAgICBtYXNtLnN0b3JlMzIoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUg YXJndW1lbnRzLiIpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBNT1pfQ1JBU0goIkludmFs aWQgZW1pdEludDMyTW92ZSBhcmd1bWVudHMuIik7CisrICB9CisrfQorKworK3ZvaWQgTW92ZUVt aXR0ZXJQUEM2NDo6ZW1pdEZsb2F0MzJNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0 bykgeworKyAgaWYgKGZyb20uaXNGbG9hdFJlZygpKSB7CisrICAgIGlmICh0by5pc0Zsb2F0UmVn KCkpIHsKKysgICAgICBtYXNtLm1vdmVGbG9hdDMyKGZyb20uZmxvYXRSZWcoKSwgdG8uZmxvYXRS ZWcoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsK KysgICAgICBtYXNtLnN0b3JlRmxvYXQzMihmcm9tLmZsb2F0UmVnKCksIGdldEFkanVzdGVkQWRk cmVzcyh0bykpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHRvLmlzRmxvYXRSZWcoKSkgeworKyAg ICBNT1pfQVNTRVJUKGZyb20uaXNNZW1vcnkoKSk7CisrICAgIG1hc20ubG9hZEZsb2F0MzIoZ2V0 QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0by5mbG9hdFJlZygpKTsKKysgIH0gZWxzZSB7CisrICAg IE1PWl9BU1NFUlQoZnJvbS5pc01lbW9yeSgpKTsKKysgICAgTU9aX0FTU0VSVCh0by5pc01lbW9y eSgpKTsKKysgICAgU2NyYXRjaEZsb2F0MzJTY29wZSBmcHNjcmF0Y2gzMihtYXNtKTsKKysgICAg bWFzbS5sb2FkRmxvYXQzMihnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIGZwc2NyYXRjaDMyKTsK KysgICAgbWFzbS5zdG9yZUZsb2F0MzIoZnBzY3JhdGNoMzIsIGdldEFkanVzdGVkQWRkcmVzcyh0 bykpOworKyAgfQorK30KKysKKyt2b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXREb3VibGVNb3Zl KGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgTW92ZU9wZXJhbmQmIHRvKSB7CisrICBpZiAoZnJvbS5pc0Zsb2F0UmVn KCkpIHsKKysgICAgaWYgKHRvLmlzRmxvYXRSZWcoKSkgeworKyAgICAgIG1hc20ubW92ZURvdWJs ZShmcm9tLmZsb2F0UmVnKCksIHRvLmZsb2F0UmVnKCkpOworKyAgICB9IGVsc2UgaWYgKHRvLmlz R2VuZXJhbFJlZygpKSB7CisrICAgICAgLy8gRlBSIC0+IEdQUjogdXNlIG1mdnNyZCBkaXJlY3Rs eS4KKysgICAgICBtYXNtLmFzX21mdnNyZCh0by5yZWcoKSwgZnJvbS5mbG9hdFJlZygpKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKHRvLmlzTWVtb3J5KCkpOworKyAgICAgIG1h c20uc3RvcmVEb3VibGUoZnJvbS5mbG9hdFJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsK KysgICAgfQorKyAgfSBlbHNlIGlmICh0by5pc0Zsb2F0UmVnKCkpIHsKKysgICAgaWYgKGZyb20u aXNNZW1vcnkoKSkgeworKyAgICAgIG1hc20ubG9hZERvdWJsZShnZXRBZGp1c3RlZEFkZHJlc3Mo ZnJvbSksIHRvLmZsb2F0UmVnKCkpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIEdQUiAtPiBG UFI6IHVzZSBtdHZzcmQgZGlyZWN0bHkuCisrICAgICAgbWFzbS5hc19tdHZzcmQodG8uZmxvYXRS ZWcoKSwgZnJvbS5yZWcoKSk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIE1PWl9BU1NFUlQo ZnJvbS5pc01lbW9yeSgpKTsKKysgICAgTU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsKKysgICAg U2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaDY0KG1hc20pOworKyAgICBtYXNtLmxvYWREb3Vi bGUoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBmcHNjcmF0Y2g2NCk7CisrICAgIG1hc20uc3Rv cmVEb3VibGUoZnBzY3JhdGNoNjQsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOworKyAgfQorK30K KysKKyt2b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXRTaW1kMTI4TW92ZShjb25zdCBNb3ZlT3Bl cmFuZCYgZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBNb3ZlT3BlcmFuZCYgdG8pIHsKKysgIGlmIChmcm9tLmlzRmxvYXRSZWcoKSkgeworKyAgICBp ZiAodG8uaXNGbG9hdFJlZygpKSB7CisrICAgICAgbWFzbS5tb3ZlU2ltZDEyOChmcm9tLmZsb2F0 UmVnKCksIHRvLmZsb2F0UmVnKCkpOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NFUlQo dG8uaXNNZW1vcnkoKSk7CisrICAgICAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgoZnJvbS5m bG9hdFJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgICAgfQorKyAgfSBlbHNlIGlm ICh0by5pc0Zsb2F0UmVnKCkpIHsKKysgICAgTU9aX0FTU0VSVChmcm9tLmlzTWVtb3J5KCkpOwor KyAgICBtYXNtLmxvYWRVbmFsaWduZWRTaW1kMTI4KGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwg dG8uZmxvYXRSZWcoKSk7CisrICB9IGVsc2UgeworKyAgICBNT1pfQVNTRVJUKGZyb20uaXNNZW1v cnkoKSk7CisrICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7CisrICAgIFNjcmF0Y2hTaW1k MTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKKysgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChn ZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHNjcmF0Y2gpOworKyAgICBtYXNtLnN0b3JlVW5hbGln bmVkU2ltZDEyOChzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgIH0KKyt9Cisr Cisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0KGNvbnN0IE1vdmVPcCYgbW92ZSkgeworKyAg Y29uc3QgTW92ZU9wZXJhbmQmIGZyb20gPSBtb3ZlLmZyb20oKTsKKysgIGNvbnN0IE1vdmVPcGVy YW5kJiB0byA9IG1vdmUudG8oKTsKKysKKysgIGlmIChtb3ZlLmlzQ3ljbGVFbmQoKSAmJiBtb3Zl LmlzQ3ljbGVCZWdpbigpKSB7CisrICAgIGJyZWFrQ3ljbGUoZnJvbSwgdG8sIG1vdmUuZW5kQ3lj bGVUeXBlKCksIG1vdmUuY3ljbGVCZWdpblNsb3QoKSk7CisrICAgIGNvbXBsZXRlQ3ljbGUoZnJv bSwgdG8sIG1vdmUudHlwZSgpLCBtb3ZlLmN5Y2xlRW5kU2xvdCgpKTsKKysgICAgcmV0dXJuOwor KyAgfQorKworKyAgaWYgKG1vdmUuaXNDeWNsZUVuZCgpKSB7CisrICAgIE1PWl9BU1NFUlQoaW5D eWNsZV8pOworKyAgICBjb21wbGV0ZUN5Y2xlKGZyb20sIHRvLCBtb3ZlLnR5cGUoKSwgbW92ZS5j eWNsZUVuZFNsb3QoKSk7CisrICAgIE1PWl9BU1NFUlQoaW5DeWNsZV8gPiAwKTsKKysgICAgaW5D eWNsZV8tLTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgaWYgKG1vdmUuaXNDeWNsZUJlZ2lu KCkpIHsKKysgICAgYnJlYWtDeWNsZShmcm9tLCB0bywgbW92ZS5lbmRDeWNsZVR5cGUoKSwgbW92 ZS5jeWNsZUJlZ2luU2xvdCgpKTsKKysgICAgaW5DeWNsZV8rKzsKKysgIH0KKysKKysgIHN3aXRj aCAobW92ZS50eXBlKCkpIHsKKysgICAgY2FzZSBNb3ZlT3A6OkZMT0FUMzI6CisrICAgICAgZW1p dEZsb2F0MzJNb3ZlKGZyb20sIHRvKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBNb3ZlT3A6 OkRPVUJMRToKKysgICAgICBlbWl0RG91YmxlTW92ZShmcm9tLCB0byk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2UgTW92ZU9wOjpTSU1EMTI4OgorKyAgICAgIGVtaXRTaW1kMTI4TW92ZShmcm9t LCB0byk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9wOjpJTlQzMjoKKysgICAgICBl bWl0SW50MzJNb3ZlKGZyb20sIHRvKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBNb3ZlT3A6 OkdFTkVSQUw6CisrICAgICAgZW1pdE1vdmUoZnJvbSwgdG8pOworKyAgICAgIGJyZWFrOworKyAg ICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBtb3ZlIHR5cGUiKTsKKysg IH0KKyt9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0Ojphc3NlcnREb25lKCkgeyBNT1pfQVNT RVJUKGluQ3ljbGVfID09IDApOyB9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjpmaW5pc2go KSB7CisrICBhc3NlcnREb25lKCk7CisrCisrICBtYXNtLmZyZWVTdGFjayhtYXNtLmZyYW1lUHVz aGVkKCkgLSBwdXNoZWRBdFN0YXJ0Xyk7CisrfQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBj NjQvTW92ZUVtaXR0ZXItcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBj NjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uYTlmYWEzNGRl NmJiCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBw YzY0LmgKK0BAIC0wLDAgKzEsNjQgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7 IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBz ZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBp cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNl LCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0 aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9N UEwvMi4wLy4gKi8KKysKKysjaWZuZGVmIGppdF9wcGM2NF9Nb3ZlRW1pdHRlcl9wcGM2NF9oCisr I2RlZmluZSBqaXRfcHBjNjRfTW92ZUVtaXR0ZXJfcHBjNjRfaAorKworKyNpbmNsdWRlICJqaXQv TWFjcm9Bc3NlbWJsZXIuaCIKKysjaW5jbHVkZSAiaml0L01vdmVSZXNvbHZlci5oIgorKworK25h bWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrY2xhc3MgTW92ZUVtaXR0ZXJQUEM2 NCB7CisrICB2b2lkIGVtaXREb3VibGVNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25z dCBNb3ZlT3BlcmFuZCYgdG8pOworKyAgdm9pZCBlbWl0U2ltZDEyOE1vdmUoY29uc3QgTW92ZU9w ZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0byk7CisrICB2b2lkIGJyZWFrQ3ljbGUo Y29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0bywKKysgICAgICAg ICAgICAgICAgICBNb3ZlT3A6OlR5cGUgdHlwZSwgdWludDMyX3Qgc2xvdCk7CisrICB2b2lkIGNv bXBsZXRlQ3ljbGUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0 bywKKysgICAgICAgICAgICAgICAgICAgICBNb3ZlT3A6OlR5cGUgdHlwZSwgdWludDMyX3Qgc2xv dCk7CisrCisrIHByb3RlY3RlZDoKKysgIHVpbnQzMl90IGluQ3ljbGVfOworKyAgTWFjcm9Bc3Nl bWJsZXImIG1hc207CisrCisrICB1aW50MzJfdCBwdXNoZWRBdFN0YXJ0XzsKKysKKysgIGludDMy X3QgcHVzaGVkQXRDeWNsZV87CisrCisrICB2b2lkIGFzc2VydERvbmUoKTsKKysgIEFkZHJlc3Mg Y3ljbGVTbG90KHVpbnQzMl90IHNsb3QsIHVpbnQzMl90IHN1YnNsb3QgPSAwKSBjb25zdDsKKysg IGludDMyX3QgZ2V0QWRqdXN0ZWRPZmZzZXQoY29uc3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQpOwor KyAgQWRkcmVzcyBnZXRBZGp1c3RlZEFkZHJlc3MoY29uc3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQp OworKworKyAgdm9pZCBlbWl0TW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92 ZU9wZXJhbmQmIHRvKTsKKysgIHZvaWQgZW1pdEludDMyTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYg ZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQmIHRvKTsKKysgIHZvaWQgZW1pdEZsb2F0MzJNb3ZlKGNv bnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pOworKyAgdm9pZCBl bWl0KGNvbnN0IE1vdmVPcCYgbW92ZSk7CisrCisrIHB1YmxpYzoKKysgIGV4cGxpY2l0IE1vdmVF bWl0dGVyUFBDNjQoTWFjcm9Bc3NlbWJsZXImIG1hc20pCisrICAgICAgOiBpbkN5Y2xlXygwKSwK KysgICAgICAgIG1hc20obWFzbSksCisrICAgICAgICBwdXNoZWRBdFN0YXJ0XyhtYXNtLmZyYW1l UHVzaGVkKCkpLAorKyAgICAgICAgcHVzaGVkQXRDeWNsZV8oLTEpIHt9CisrCisrICB+TW92ZUVt aXR0ZXJQUEM2NCgpIHsgYXNzZXJ0RG9uZSgpOyB9CisrCisrICB2b2lkIGVtaXQoY29uc3QgTW92 ZVJlc29sdmVyJiBtb3Zlcyk7CisrICB2b2lkIGZpbmlzaCgpOworKyAgLy8gc2V0U2NyYXRjaFJl Z2lzdGVyIGlzIHBhcnQgb2YgdGhlIGNyb3NzLWFyY2ggTW92ZUVtaXR0ZXIgaW50ZXJmYWNlCisr ICAvLyBidXQgd2UgbmV2ZXIgc3BpbGwsIHNvIHRoZXJlJ3Mgbm8gc2NyYXRjaCB0byBzZXQuIE5v LW9wIGtlcHQgZm9yCisrICAvLyBzaGFyZWQtY29kZSBjb21wYXRpYmlsaXR5LgorKyAgdm9pZCBz ZXRTY3JhdGNoUmVnaXN0ZXIoUmVnaXN0ZXIgcmVnKSB7fQorK307CisrCisrdHlwZWRlZiBNb3Zl RW1pdHRlclBQQzY0IE1vdmVFbWl0dGVyOworKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAv LyBuYW1lc3BhY2UganMKKysKKysjZW5kaWYgLyogaml0X3BwYzY0X01vdmVFbWl0dGVyX3BwYzY0 X2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2 NC1pbmwuaCBiL2pzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi5hYTg3NGRmZDY3MzIKKy0t LSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0 LWlubC5oCitAQCAtMCwwICsxLDgzIEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4 OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTog c2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0g aXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5z ZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGgg dGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcv TVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0 X2lubF9oCisrI2RlZmluZSBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2lubF9oCisr CisrI2luY2x1ZGUgImppdC9CYXNlbGluZUZyYW1lLmgiCisrI2luY2x1ZGUgImppdC9TaGFyZWRJ Q0hlbHBlcnMuaCIKKysKKysjaW5jbHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLWlubC5oIgorKwor K25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisraW5saW5lIHZvaWQgRW1pdEJh c2VsaW5lVGFpbENhbGxWTShUcmFtcG9saW5lUHRyIHRhcmdldCwgTWFjcm9Bc3NlbWJsZXImIG1h c20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdTaXpl KSB7CisrI2lmZGVmIERFQlVHCisrICBSZWdpc3RlciBzY3JhdGNoID0gUjIuc2NyYXRjaFJlZygp OworKworKyAgLy8gQ29tcHV0ZSBmcmFtZSBzaXplLgorKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9p bnRlciwgc2NyYXRjaCk7CisrICBtYXNtLnN1YlB0cihTdGFja1BvaW50ZXIsIHNjcmF0Y2gpOwor KworKyAgLy8gU3RvcmUgZnJhbWUgc2l6ZSB3aXRob3V0IFZNRnVuY3Rpb24gYXJndW1lbnRzIGZv ciBkZWJ1ZyBhc3NlcnRpb25zLgorKyAgbWFzbS5zdWJQdHIoSW1tMzIoYXJnU2l6ZSksIHNjcmF0 Y2gpOworKyAgQWRkcmVzcyBmcmFtZVNpemVBZGRyKEZyYW1lUG9pbnRlciwKKysgICAgICAgICAg ICAgICAgICAgICAgICBCYXNlbGluZUZyYW1lOjpyZXZlcnNlT2Zmc2V0T2ZEZWJ1Z0ZyYW1lU2l6 ZSgpKTsKKysgIG1hc20uc3RvcmUzMihzY3JhdGNoLCBmcmFtZVNpemVBZGRyKTsKKysgIG1hc20u YWRkUHRyKEltbTMyKGFyZ1NpemUpLCBzY3JhdGNoKTsKKysjZW5kaWYKKysKKysgIC8vIFB1c2gg ZnJhbWUgZGVzY3JpcHRvciBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsLgorKyAgbWFzbS5wdXNo KEZyYW1lRGVzY3JpcHRvcihGcmFtZVR5cGU6OkJhc2VsaW5lSlMpKTsKKysKKysgIC8vIFRoZSBy ZXR1cm4gYWRkcmVzcyBpcyBpbiBMUiAoc2V0IGJ5IHRoZSBvcmlnaW5hbCBibC9iY3RybCBjYWxs KS4KKysgIC8vIFRoZSBWTVdyYXBwZXIgY29kZSB3aWxsIHB1c2ggaXQgdmlhIHB1c2hSZXR1cm5B ZGRyZXNzKCkuCisrCisrICBtYXNtLmp1bXAodGFyZ2V0KTsKKyt9CisrCisraW5saW5lIHZvaWQg RW1pdEJhc2VsaW5lQ2FsbFZNKFRyYW1wb2xpbmVQdHIgdGFyZ2V0LCBNYWNyb0Fzc2VtYmxlciYg bWFzbSkgeworKyAgbWFzbS5wdXNoKEZyYW1lRGVzY3JpcHRvcihGcmFtZVR5cGU6OkJhc2VsaW5l U3R1YikpOworKyAgbWFzbS5jYWxsKHRhcmdldCk7CisrfQorKworK2lubGluZSB2b2lkIEVtaXRC YXNlbGluZUVudGVyU3R1YkZyYW1lKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdpc3RlciBzY3Jh dGNoKSB7CisrICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gSUNUYWlsQ2FsbFJlZyk7CisrCisrI2lm ZGVmIERFQlVHCisrICAvLyBDb21wdXRlIGZyYW1lIHNpemUuCisrICBtYXNtLm1vdmVQdHIoRnJh bWVQb2ludGVyLCBzY3JhdGNoKTsKKysgIG1hc20uc3ViUHRyKFN0YWNrUG9pbnRlciwgc2NyYXRj aCk7CisrCisrICBBZGRyZXNzIGZyYW1lU2l6ZUFkZHIoRnJhbWVQb2ludGVyLAorKyAgICAgICAg ICAgICAgICAgICAgICAgIEJhc2VsaW5lRnJhbWU6OnJldmVyc2VPZmZzZXRPZkRlYnVnRnJhbWVT aXplKCkpOworKyAgbWFzbS5zdG9yZTMyKHNjcmF0Y2gsIGZyYW1lU2l6ZUFkZHIpOworKyNlbmRp ZgorKworKyAgLy8gTm90ZTogd2hlbiBtYWtpbmcgY2hhbmdlcyBoZXJlLCBkb24ndCBmb3JnZXQg dG8gdXBkYXRlCisrICAvLyBCYXNlbGluZVN0dWJGcmFtZSBpZiBuZWVkZWQuCisrCisrICAvLyBQ dXNoIGZyYW1lIGRlc2NyaXB0b3IgYW5kIHJldHVybiBhZGRyZXNzLgorKyAgLy8gTFIgaG9sZHMg dGhlIHJldHVybiBhZGRyZXNzOyByZWFkIGl0IGludG8gSUNUYWlsQ2FsbFJlZyB0byBwdXNoLgor KyAgbWFzbS5QdXNoKEZyYW1lRGVzY3JpcHRvcihGcmFtZVR5cGU6OkJhc2VsaW5lSlMpKTsKKysg IG1hc20ueHNfbWZscihJQ1RhaWxDYWxsUmVnKTsKKysgIG1hc20uUHVzaChJQ1RhaWxDYWxsUmVn KTsKKysKKysgIC8vIFNhdmUgb2xkIGZyYW1lIHBvaW50ZXIsIHN0YWNrIHBvaW50ZXIgYW5kIHN0 dWIgcmVnLgorKyAgbWFzbS5QdXNoKEZyYW1lUG9pbnRlcik7CisrICBtYXNtLm1vdmVQdHIoU3Rh Y2tQb2ludGVyLCBGcmFtZVBvaW50ZXIpOworKyAgbWFzbS5QdXNoKElDU3R1YlJlZyk7CisrCisr ICAvLyBTdGFjayBzaG91bGQgcmVtYWluIGFsaWduZWQuCisrICBtYXNtLmFzc2VydFN0YWNrQWxp Z25tZW50KHNpemVvZihWYWx1ZSksIDApOworK30KKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0Cisr fSAgLy8gbmFtZXNwYWNlIGpzCisrCisrI2VuZGlmIC8qIGppdF9wcGM2NF9TaGFyZWRJQ0hlbHBl cnNfcHBjNjRfaW5sX2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElD SGVscGVycy1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQu aAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMzFiYTgzMGQyNjA5 CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1w cGM2NC5oCitAQCAtMCwwICsxLDk3IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4 OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTog c2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0g aXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5z ZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGgg dGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcv TVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0 X2gKKysjZGVmaW5lIGppdF9wcGM2NF9TaGFyZWRJQ0hlbHBlcnNfcHBjNjRfaAorKworKyNpbmNs dWRlICJqaXQvQmFzZWxpbmVJQy5oIgorKyNpbmNsdWRlICJqaXQvSml0RnJhbWVzLmgiCisrI2lu Y2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxlci5oIgorKyNpbmNsdWRlICJqaXQvU2hhcmVkSUNSZWdp c3RlcnMuaCIKKysKKytuYW1lc3BhY2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworKy8vIERp c3RhbmNlIGZyb20gc3AgdG8gdGhlIHRvcCBWYWx1ZSBpbnNpZGUgYW4gSUMgc3R1YiAobm8gcmV0 dXJuIGFkZHJlc3Mgb24KKysvLyB0aGUgc3RhY2sgb24gUFBDNjQpLgorK3N0YXRpYyBjb25zdCBz aXplX3QgSUNTdGFja1ZhbHVlT2Zmc2V0ID0gMDsKKysKKytzdHJ1Y3QgQmFzZWxpbmVTdHViRnJh bWUgeworKyAgdWludHB0cl90IHNhdmVkRnJhbWU7CisrICB1aW50cHRyX3Qgc2F2ZWRTdHViOwor KyAgdWludHB0cl90IHJldHVybkFkZHJlc3M7CisrICB1aW50cHRyX3QgZGVzY3JpcHRvcjsKKyt9 OworKworK2lubGluZSB2b2lkIEVtaXRSZXN0b3JlVGFpbENhbGxSZWcoTWFjcm9Bc3NlbWJsZXIm IG1hc20pIHsKKysgIC8vIE9uIFBQQzY0LCBMUiBhbHdheXMgaG9sZHMgdGhlIHJldHVybiBhZGRy ZXNzIGFmdGVyIGEgYmwvYmN0cmwgY2FsbC4KKysgIC8vIE5vLW9wOiBMUiBpcyB0aGUgaGFyZHdh cmUgbGluayByZWdpc3Rlciwgbm90IGEgR1BSIG9uIHRoZSBzdGFjay4KKyt9CisrCisraW5saW5l IHZvaWQgRW1pdFJlcHVzaFRhaWxDYWxsUmVnKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7CisrICAv LyBOby1vcDogTFIgYWxyZWFkeSBob2xkcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisrfQorKworK2lu bGluZSB2b2lkIEVtaXRDYWxsSUMoTWFjcm9Bc3NlbWJsZXImIG1hc20sIENvZGVPZmZzZXQqIGNh bGxPZmZzZXQpIHsKKysgIC8vIFRoZSBzdHViIHBvaW50ZXIgbXVzdCBhbHJlYWR5IGJlIGluIElD U3R1YlJlZy4KKysgIC8vIExvYWQgc3R1YmNvZGUgcG9pbnRlciBmcm9tIHRoZSBJQ1N0dWIuCisr ICAvLyBSMiB3b24ndCBiZSBhY3RpdmUgd2hlbiB3ZSBjYWxsIElDcywgc28gd2UgY2FuIHVzZSBp dCBhcyBzY3JhdGNoLgorKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoSUNTdHViUmVnLCBJQ1N0dWI6 Om9mZnNldE9mU3R1YkNvZGUoKSksIFIyLnNjcmF0Y2hSZWcoKSk7CisrCisrICAvLyBDYWxsIHRo ZSBzdHViY29kZS4gT24gUFBDNjQgY2FsbChSZWdpc3RlcikgZW1pdHMgbXRjdHIgKyBiY3RybCwK KysgIC8vIHdoaWNoIHNldHMgTFIgdG8gdGhlIGFkZHJlc3MgYWZ0ZXIgYmN0cmwuCisrICBtYXNt LmNhbGwoUjIuc2NyYXRjaFJlZygpKTsKKysgICpjYWxsT2Zmc2V0ID0gQ29kZU9mZnNldChtYXNt LmN1cnJlbnRPZmZzZXQoKSk7CisrfQorKworK2lubGluZSB2b2lkIEVtaXRSZXR1cm5Gcm9tSUMo TWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKKysgIC8vIFJldHVybiB2aWEgaGFyZHdhcmUgTFIgKHNl dCBieSB0aGUgb3JpZ2luYWwgYmwvYmN0cmwgY2FsbCkuCisrICBtYXNtLmFzX2JscigpOworK30K KysKKytpbmxpbmUgdm9pZCBFbWl0QmFzZWxpbmVMZWF2ZVN0dWJGcmFtZShNYWNyb0Fzc2VtYmxl ciYgbWFzbSkgeworKyAgbWFzbS5sb2FkUHRyKAorKyAgICAgIEFkZHJlc3MoRnJhbWVQb2ludGVy LCBCYXNlbGluZVN0dWJGcmFtZUxheW91dDo6SUNTdHViT2Zmc2V0RnJvbUZQKSwKKysgICAgICBJ Q1N0dWJSZWcpOworKworKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9pbnRlciwgU3RhY2tQb2ludGVy KTsKKysgIG1hc20uUG9wKEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBMb2FkIHRoZSByZXR1cm4g YWRkcmVzcyBhbmQgcmVzdG9yZSBpdCB0byBMUi4KKysgIG1hc20uUG9wKElDVGFpbENhbGxSZWcp OworKyAgbWFzbS54c19tdGxyKElDVGFpbENhbGxSZWcpOworKworKyAgLy8gRGlzY2FyZCB0aGUg ZnJhbWUgZGVzY3JpcHRvci4KKysgIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMobWFzbSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAg IG1hc20uUG9wKHNjcmF0Y2gpOworKyAgfQorK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgQWRk clR5cGU+CisraW5saW5lIHZvaWQgRW1pdFByZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIG1hc20s IGNvbnN0IEFkZHJUeXBlJiBhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JUlR5 cGUgdHlwZSkgeworKyAgLy8gT24gUFBDNjQsIExSIGlzIGNsb2JiZXJlZCBieSBndWFyZGVkQ2Fs bFByZUJhcnJpZXIuIFNhdmUgaXQgZmlyc3QuCisrICBtYXNtLnhzX21mbHIocjApOworKyAgbWFz bS5wdXNoKHIwKTsKKysgIG1hc20uZ3VhcmRlZENhbGxQcmVCYXJyaWVyKGFkZHIsIHR5cGUpOwor KyAgbWFzbS5wb3AocjApOworKyAgbWFzbS54c19tdGxyKHIwKTsKKyt9CisrCisraW5saW5lIHZv aWQgRW1pdFN0dWJHdWFyZEZhaWx1cmUoTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKKysgIC8vIExv YWQgbmV4dCBzdHViIGludG8gSUNTdHViUmVnLgorKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoSUNT dHViUmVnLCBJQ0NhY2hlSVJTdHViOjpvZmZzZXRPZk5leHQoKSksIElDU3R1YlJlZyk7CisrCisr ICAvLyBSZXR1cm4gYWRkcmVzcyBpcyBpbiBMUi4gSnVtcCB0byB0aGUgbmV4dCBzdHViY29kZS4K KysgIG1hc20uanVtcChBZGRyZXNzKElDU3R1YlJlZywgSUNTdHViOjpvZmZzZXRPZlN0dWJDb2Rl KCkpKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcwor KworKyNlbmRpZiAvKiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2ggKi8KK2RpZmYg LS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmggYi9qcy9z cmMvaml0L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmgKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmRkZjY3MzQyZjg1NQorLS0tIC9kZXYvbnVsbAorKysr IGIvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oCitAQCAtMCwwICsx LDQ2IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2Rl OiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQg c3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUg dGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNv cHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlv dSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisr I2lmbmRlZiBqaXRfcHBjNjRfU2hhcmVkSUNSZWdpc3RlcnNfcHBjNjRfaAorKyNkZWZpbmUgaml0 X3BwYzY0X1NoYXJlZElDUmVnaXN0ZXJzX3BwYzY0X2gKKysKKysjaW5jbHVkZSAiaml0L3BwYzY0 L0Fzc2VtYmxlci1wcGM2NC5oIgorKyNpbmNsdWRlICJqaXQvUmVnaXN0ZXJzLmgiCisrI2luY2x1 ZGUgImppdC9SZWdpc3RlclNldHMuaCIKKysKKytuYW1lc3BhY2UganMgeworK25hbWVzcGFjZSBq aXQgeworKworKy8vIFZhbHVlT3BlcmFuZHMgUjAsIFIxLCBhbmQgUjIuCisrLy8gUjAgPT0gSlNS ZXR1cm5SZWcsIGFuZCBSMiB1c2VzIHJlZ2lzdGVycyBub3QgcHJlc2VydmVkIGFjcm9zcyBjYWxs cy4gUjEgdmFsdWUKKysvLyBzaG91bGQgYmUgcHJlc2VydmVkIGFjcm9zcyBjYWxscy4KKytzdGF0 aWMgY29uc3RleHByIFZhbHVlT3BlcmFuZCBSMChyNSk7Cisrc3RhdGljIGNvbnN0ZXhwciBWYWx1 ZU9wZXJhbmQgUjEocjE1KTsKKytzdGF0aWMgY29uc3RleHByIFZhbHVlT3BlcmFuZCBSMihyNCk7 CisrCisrLy8gSUNUYWlsQ2FsbFJlZyBhbmQgSUNTdHViUmVnLgorKy8vIE9uIFBQQzY0LCBMUiBp cyBub3QgYSBHUFIsIHNvIElDVGFpbENhbGxSZWcgbXVzdCBiZSBhIG5vcm1hbCBHUFIuCisrLy8g UFBDNjQgRUxGdjIgaGFzIG5vIHZvbGF0aWxlIG5vbi1hcmcgR1BScyAocjMtcjEwIGFyZSBhbGwg YXJnIHJlZ3MpLCBzbworKy8vIHVzaW5nIGFuIGFyZyByZWdpc3RlciByaXNrcyBjbG9iYmVyaW5n IGJ5IEFCSSBjYWxscyB3aXRoIGVub3VnaCBhcmd1bWVudHMuCisrLy8gV2UgdXNlIGNhbGxlZS1z YXZlZCByZWdpc3RlcnMgaW5zdGVhZCwgbWF0Y2hpbmcgTUlQUzY0L1JJU0MtViBzdHJhdGVneS4K KysvLyBUaGVzZSBhcmUgZXhjbHVkZWQgZnJvbSBCYXNlbGluZUlDQXZhaWxhYmxlR2VuZXJhbFJl Z3MuCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBJQ1RhaWxDYWxsUmVnID0gcjI3OworK3N0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSUNTdHViUmVnID0gcjI2OworKworKy8vIEZsb2F0UmVn MCBtdXN0IGJlIGVxdWFsIHRvIFJldHVybkZsb2F0UmVnLgorK3N0YXRpYyBjb25zdGV4cHIgRmxv YXRSZWdpc3RlciBGbG9hdFJlZzAgPSB7RmxvYXRSZWdpc3RlcnM6OmYxLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07 Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIEZsb2F0UmVnMSA9IHtGbG9hdFJlZ2lz dGVyczo6ZjIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIg RmxvYXRSZWcyID0ge0Zsb2F0UmVnaXN0ZXJzOjpmMywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBj b25zdGV4cHIgRmxvYXRSZWdpc3RlciBGbG9hdFJlZzMgPSB7RmxvYXRSZWdpc3RlcnM6OmY0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl cnM6OkRvdWJsZX07CisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBq cworKworKyNlbmRpZiAvKiBqaXRfcHBjNjRfU2hhcmVkSUNSZWdpc3RlcnNfcHBjNjRfaCAqLwor ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNwcCBiL2pzL3Ny Yy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu ZGV4IDAwMDAwMDAwMDAwMC4uOGIyOWViM2FkZDA0CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9z cmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5jcHAKK0BAIC0wLDAgKzEsNzI5NiBAQAorKy8q IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh c2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6 CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo ZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBN UEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFp biBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNpbmNsdWRlICJq aXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmgiCisrCisrI2luY2x1ZGUgPGNpbnR0eXBlcz4KKysj aW5jbHVkZSA8Y21hdGg+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGZsb2F0Lmg+ CisrI2luY2x1ZGUgPGxpbWl0cz4KKysKKysjaW5jbHVkZSAiaml0L0F0b21pY09wZXJhdGlvbnMu aCIKKysjaW5jbHVkZSAiaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIgorKyNpbmNsdWRlICJq cy9Db252ZXJzaW9ucy5oIgorKyNpbmNsdWRlICJ0aHJlYWRpbmcvTG9ja0d1YXJkLmgiCisrI2lu Y2x1ZGUgInZtL0Zsb2F0MTYuaCIKKysjaW5jbHVkZSAidm0vSlNDb250ZXh0LmgiCisrI2luY2x1 ZGUgInZtL1J1bnRpbWUuaCIKKysjaW5jbHVkZSAid2FzbS9XYXNtSW5zdGFuY2UuaCIKKysjaW5j bHVkZSAid2FzbS9XYXNtU2lnbmFsSGFuZGxlcnMuaCIKKysKKysjZGVmaW5lIEk4KHYpIHN0YXRp Y19jYXN0PGludDhfdD4odikKKysjZGVmaW5lIEkxNih2KSBzdGF0aWNfY2FzdDxpbnQxNl90Pih2 KQorKyNkZWZpbmUgVTE2KHYpIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2KQorKyNkZWZpbmUgSTMy KHYpIHN0YXRpY19jYXN0PGludDMyX3Q+KHYpCisrI2RlZmluZSBVMzIodikgc3RhdGljX2Nhc3Q8 dWludDMyX3Q+KHYpCisrI2RlZmluZSBJNjQodikgc3RhdGljX2Nhc3Q8aW50NjRfdD4odikKKysj ZGVmaW5lIFU2NCh2KSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odikKKysjZGVmaW5lIEkxMjgodikg c3RhdGljX2Nhc3Q8X19pbnQxMjhfdD4odikKKysjZGVmaW5lIFUxMjgodikgc3RhdGljX2Nhc3Q8 X191aW50MTI4X3Q+KHYpCisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysK KytzdGF0aWMgaW50NjRfdCBNdWx0aXBseUhpZ2hTaWduZWQoaW50NjRfdCB1LCBpbnQ2NF90IHYp IHsKKysgIHVpbnQ2NF90IHUwLCB2MCwgdzA7CisrICBpbnQ2NF90IHUxLCB2MSwgdzEsIHcyLCB0 OworKworKyAgdTAgPSB1ICYgMHhGRkZGRkZGRkw7CisrICB1MSA9IHUgPj4gMzI7CisrICB2MCA9 IHYgJiAweEZGRkZGRkZGTDsKKysgIHYxID0gdiA+PiAzMjsKKysKKysgIHcwID0gdTAgKiB2MDsK KysgIHQgPSB1MSAqIHYwICsgKHcwID4+IDMyKTsKKysgIHcxID0gdCAmIDB4RkZGRkZGRkZMOwor KyAgdzIgPSB0ID4+IDMyOworKyAgdzEgPSB1MCAqIHYxICsgdzE7CisrCisrICByZXR1cm4gdTEg KiB2MSArIHcyICsgKHcxID4+IDMyKTsKKyt9CisrCisrc3RhdGljIHVpbnQ2NF90IE11bHRpcGx5 SGlnaFVuc2lnbmVkKHVpbnQ2NF90IHUsIHVpbnQ2NF90IHYpIHsKKysgIHVpbnQ2NF90IHUwLCB2 MCwgdzA7CisrICB1aW50NjRfdCB1MSwgdjEsIHcxLCB3MiwgdDsKKysKKysgIHUwID0gdSAmIDB4 RkZGRkZGRkZMOworKyAgdTEgPSB1ID4+IDMyOworKyAgdjAgPSB2ICYgMHhGRkZGRkZGRkw7Cisr ICB2MSA9IHYgPj4gMzI7CisrCisrICB3MCA9IHUwICogdjA7CisrICB0ID0gdTEgKiB2MCArICh3 MCA+PiAzMik7CisrICB3MSA9IHQgJiAweEZGRkZGRkZGTDsKKysgIHcyID0gdCA+PiAzMjsKKysg IHcxID0gdTAgKiB2MSArIHcxOworKworKyAgcmV0dXJuIHUxICogdjEgKyB3MiArICh3MSA+PiAz Mik7CisrfQorKworK2lubGluZSBjb25zdGV4cHIgdWludDMyX3QgUm90YXRlTGVmdDMyKHVpbnQz Ml90IHZhbHVlLCB1aW50MzJfdCBzaGlmdCkgeworKyAgcmV0dXJuICh2YWx1ZSA8PCBzaGlmdCkg fCAodmFsdWUgPj4gKCgzMiAtIHNoaWZ0KSAmIDMxKSk7CisrfQorKworK2lubGluZSBjb25zdGV4 cHIgdWludDY0X3QgUm90YXRlTGVmdDY0KHVpbnQ2NF90IHZhbHVlLCB1aW50NjRfdCBzaGlmdCkg eworKyAgcmV0dXJuICh2YWx1ZSA8PCBzaGlmdCkgfCAodmFsdWUgPj4gKCg2NCAtIHNoaWZ0KSAm IDYzKSk7CisrfQorKworKy8vIEdlbmVyYXRlIGEgNjQtYml0IG1hc2sgd2l0aCBiaXRzIG1iLi5t ZSBzZXQgKFBQQyBudW1iZXJpbmc6IDAgPSBNU0IgPSBiaXQKKysvLyA2MyBpbiBDKS4gIFdoZW4g bWIgPD0gbWUsIGEgY29udGlndW91cyByYW5nZSBpcyBzZXQ7IHdoZW4gbWIgPiBtZSwgdGhlCisr Ly8gbWFzayB3cmFwcyBhcm91bmQgKGJpdHMgMC4ubWUgYW5kIG1iLi42MyBhcmUgc2V0KS4KKytz dGF0aWMgaW5saW5lIHVpbnQ2NF90IE1BU0s2NCh1bnNpZ25lZCBtYiwgdW5zaWduZWQgbWUpIHsK KysgIE1PWl9BU1NFUlQobWIgPCA2NCAmJiBtZSA8IDY0KTsKKysgIHVpbnQ2NF90IG1hc2tfYmVn aW4gPSB+MFVMTCA+PiBtYjsKKysgIHVpbnQ2NF90IG1hc2tfZW5kID0gfjBVTEwgPDwgKDYzIC0g bWUpOworKyAgaWYgKG1iIDw9IG1lKSB7CisrICAgIHJldHVybiBtYXNrX2JlZ2luICYgbWFza19l bmQ7CisrICB9CisrICByZXR1cm4gbWFza19iZWdpbiB8IG1hc2tfZW5kOworK30KKysKKytzdGF0 aWMgaW5saW5lIHVpbnQzMl90IE1BU0szMih1bnNpZ25lZCBtYiwgdW5zaWduZWQgbWUpIHsKKysg IE1PWl9BU1NFUlQobWIgPCAzMiAmJiBtZSA8IDMyKTsKKysgIHVpbnQzMl90IG1hc2tfYmVnaW4g PSB+MFUgPj4gbWI7CisrICB1aW50MzJfdCBtYXNrX2VuZCA9IH4wVSA8PCAoMzEgLSBtZSk7Cisr ICBpZiAobWIgPD0gbWUpIHsKKysgICAgcmV0dXJuIG1hc2tfYmVnaW4gJiBtYXNrX2VuZDsKKysg IH0KKysgIHJldHVybiBtYXNrX2JlZ2luIHwgbWFza19lbmQ7CisrfQorKworKy8vIENvdW50IGxl YWRpbmcgemVyb3MuCisrc3RhdGljIGlubGluZSBpbnQgQ291bnRMZWFkaW5nWmVyb3M2NCh1aW50 NjRfdCB2YWx1ZSkgeworKyAgaWYgKHZhbHVlID09IDApIHJldHVybiA2NDsKKysgIHJldHVybiBf X2J1aWx0aW5fY2x6bGwodmFsdWUpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludCBDb3VudExl YWRpbmdaZXJvczMyKHVpbnQzMl90IHZhbHVlKSB7CisrICBpZiAodmFsdWUgPT0gMCkgcmV0dXJu IDMyOworKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHoodmFsdWUpOworK30KKysKKytzdGF0aWMgaW5s aW5lIGludCBDb3VudFRyYWlsaW5nWmVyb3M2NCh1aW50NjRfdCB2YWx1ZSkgeworKyAgaWYgKHZh bHVlID09IDApIHJldHVybiA2NDsKKysgIHJldHVybiBfX2J1aWx0aW5fY3R6bGwodmFsdWUpOwor K30KKysKKytzdGF0aWMgaW5saW5lIGludCBDb3VudFRyYWlsaW5nWmVyb3MzMih1aW50MzJfdCB2 YWx1ZSkgeworKyAgaWYgKHZhbHVlID09IDApIHJldHVybiAzMjsKKysgIHJldHVybiBfX2J1aWx0 aW5fY3R6KHZhbHVlKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQgUG9wQ291bnQ2NCh1aW50 NjRfdCB2YWx1ZSkgeworKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsKKyt9 CisrCisrc3RhdGljIGlubGluZSBpbnQgUG9wQ291bnQzMih1aW50MzJfdCB2YWx1ZSkgeworKyAg cmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh2YWx1ZSk7CisrfQorKworK3N0YXRpYyBpbmxpbmUg dWludDY0X3QgUG9wQ291bnRQZXJCeXRlKHVpbnQ2NF90IHZhbHVlKSB7CisrICB1aW50NjRfdCBy ZXN1bHQgPSAwOworKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgdWludDhf dCBieXRlID0gKHZhbHVlID4+IChpICogOCkpICYgMHhGRjsKKysgICAgcmVzdWx0IHw9ICh1aW50 NjRfdClfX2J1aWx0aW5fcG9wY291bnQoYnl0ZSkgPDwgKGkgKiA4KTsKKysgIH0KKysgIHJldHVy biByZXN1bHQ7CisrfQorKworKy8vIFBQQzY0IEMgYXJndW1lbnQgc2xvdHM6IFBQQzY0IEVMRnYy IEFCSSBkb2VzIG5vdCByZXF1aXJlIEMgYXJndW1lbnQKKysvLyBzbG90cyBvbiB0aGUgc3RhY2sg Zm9yIHJlZ2lzdGVyLXBhc3NlZCBhcmd1bWVudHMsIGJ1dCB3ZSByZXNlcnZlIHRoZQorKy8vIGxp bmsgYXJlYSAoMzIgYnl0ZXMpLgorK2NvbnN0IGludCBrQ0FyZ1Nsb3RDb3VudCA9IDA7CisrY29u c3QgaW50IGtDQXJnc1Nsb3RzU2l6ZSA9IGtDQXJnU2xvdENvdW50ICogc2l6ZW9mKHVpbnRwdHJf dCk7CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBQUEM2NCBTaW1JbnN0cnVjdGlv bi4KKysKKytjbGFzcyBTaW1JbnN0cnVjdGlvbiB7CisrIHB1YmxpYzoKKysgIGVudW0geworKyAg ICBrSW5zdHJTaXplID0gNCwKKysgICAga1BDUmVhZE9mZnNldCA9IDAKKysgIH07CisrCisrICBp bmxpbmUgSW5zdHIgaW5zdHJ1Y3Rpb25CaXRzKCkgY29uc3QgeworKyAgICByZXR1cm4gKnJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHIqPih0aGlzKTsKKysgIH0KKysKKysgIGlubGluZSB2b2lk IHNldEluc3RydWN0aW9uQml0cyhJbnN0ciB2YWx1ZSkgeworKyAgICAqcmVpbnRlcnByZXRfY2Fz dDxJbnN0cio+KHRoaXMpID0gdmFsdWU7CisrICB9CisrCisrICBpbmxpbmUgaW50IGJpdChpbnQg bnIpIGNvbnN0IHsgcmV0dXJuIChpbnN0cnVjdGlvbkJpdHMoKSA+PiBucikgJiAxOyB9CisrCisr ICBpbmxpbmUgdWludDMyX3QgYml0cyhpbnQgaGksIGludCBsbykgY29uc3QgeworKyAgICByZXR1 cm4gKGluc3RydWN0aW9uQml0cygpID4+IGxvKSAmICgoMlUgPDwgKGhpIC0gbG8pKSAtIDEpOwor KyAgfQorKworKyAgaW5saW5lIHVpbnQzMl90IG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMo MzEsIDI2KTsgfQorKworKyAgaW5saW5lIHVpbnQzMl90IHJ0VmFsdWUoKSBjb25zdCB7IHJldHVy biBiaXRzKDI1LCAyMSk7IH0KKysgIGlubGluZSB1aW50MzJfdCByc1ZhbHVlKCkgY29uc3QgeyBy ZXR1cm4gYml0cygyNSwgMjEpOyB9CisrICBpbmxpbmUgdWludDMyX3QgcmFWYWx1ZSgpIGNvbnN0 IHsgcmV0dXJuIGJpdHMoMjAsIDE2KTsgfQorKyAgaW5saW5lIHVpbnQzMl90IHJiVmFsdWUoKSBj b25zdCB7IHJldHVybiBiaXRzKDE1LCAxMSk7IH0KKysgIGlubGluZSB1aW50MzJfdCByY1ZhbHVl KCkgY29uc3QgeyByZXR1cm4gYml0cygxMCwgNik7IH0KKysKKysgIGlubGluZSB1aW50MzJfdCBi b1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygyNSwgMjEpOyB9CisrICBpbmxpbmUgdWludDMy X3QgYmlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMjAsIDE2KTsgfQorKworKyAgLy8gRC1m b3JtIDE2LWJpdCBpbW1lZGlhdGUgKHNpZ24tZXh0ZW5kIHRvIGdldCBzaWduZWQgdmFsdWUpLgor KyAgaW5saW5lIGludDE2X3QgaW1tMTZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIEkxNihiaXRzKDE1 LCAwKSk7IH0KKysgIGlubGluZSB1aW50MTZfdCB1aW1tMTZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu IFUxNihiaXRzKDE1LCAwKSk7IH0KKysKKysgIC8vIERTLWZvcm0gMTQtYml0IGRpc3BsYWNlbWVu dCAoYml0cyAyLi4xNSwgNC1ieXRlIGFsaWduZWQpLgorKyAgaW5saW5lIGludDE2X3QgZHMxNFZh bHVlKCkgY29uc3QgeworKyAgICByZXR1cm4gSTE2KGJpdHMoMTUsIDIpIDw8IDIpOworKyAgfQor KworKyAgLy8gQi1mb3JtIDE0LWJpdCBicmFuY2ggZGlzcGxhY2VtZW50IChiaXRzIDIuLjE1LCA0 LWJ5dGUgYWxpZ25lZCkuCisrICBpbmxpbmUgaW50MzJfdCBiZDE2VmFsdWUoKSBjb25zdCB7Cisr ICAgIGludDE2X3QgcmF3ID0gSTE2KGJpdHMoMTUsIDIpIDw8IDIpOworKyAgICByZXR1cm4gKGlu dDMyX3QpcmF3OworKyAgfQorKworKyAgLy8gSS1mb3JtIDI0LWJpdCBicmFuY2ggb2Zmc2V0IChi aXRzIDIuLjI1LCBzaWduLWV4dGVuZGVkLCA0LWJ5dGUgYWxpZ25lZCkuCisrICBpbmxpbmUgaW50 MzJfdCBsaTI2VmFsdWUoKSBjb25zdCB7CisrICAgIGludDMyX3QgcmF3ID0gSTMyKGJpdHMoMjUs IDIpIDw8IDIpOworKyAgICAvLyBTaWduLWV4dGVuZCBmcm9tIDI2IGJpdHMuCisrICAgIHJldHVy biAocmF3IDw8IDYpID4+IDY7CisrICB9CisrCisrICAvLyBFeHRlbmRlZCBvcGNvZGUgZm9yIFgt Zm9ybSAvIFhPLWZvcm0gKGJpdHMgMS4uMTApLgorKyAgaW5saW5lIHVpbnQzMl90IHhvVmFsdWUo KSBjb25zdCB7IHJldHVybiBiaXRzKDEwLCAxKTsgfQorKworKyAgLy8gRXh0ZW5kZWQgb3Bjb2Rl IGZvciBYTC1mb3JtIChiaXRzIDEuLjEwKS4KKysgIGlubGluZSB1aW50MzJfdCB4bFZhbHVlKCkg Y29uc3QgeyByZXR1cm4gYml0cygxMCwgMSk7IH0KKysKKysgIC8vIE1ELWZvcm0gU0ggZmllbGQ6 IHNoWzA6NF0gaW4gaW5zdHJ1Y3Rpb24gYml0cyAxNToxMSwgc2hbNV0gaW4gYml0IDEuCisrICAv LyBBc3NlbWJsZXIgZW5jb2RlczogKChzaCAmIDB4MWYpIDw8IDExKSB8ICgoc2ggJiAweDIwKSA+ PiA0KS4KKysgIGlubGluZSB1aW50MzJfdCBtZFNIVmFsdWUoKSBjb25zdCB7CisrICAgIHJldHVy biBiaXRzKDE1LCAxMSkgfCAoYml0KDEpIDw8IDUpOworKyAgfQorKyAgLy8gbWIvbWUgZm9yIE1E LWZvcm0gKHJsZGljbC9ybGRpY3IvcmxkaWMvcmxkaW1pKTogNi1iaXQgZmllbGQgc3BsaXQgYXMK KysgIC8vIG1iWzA6NF0gaW4gaW5zdHJ1Y3Rpb24gYml0cyAxMDo2IGFuZCBtYls1XSBpbiBiaXQg NS4KKysgIGlubGluZSB1aW50MzJfdCBtZE1CVmFsdWUoKSBjb25zdCB7CisrICAgIHJldHVybiBi aXRzKDEwLCA2KSB8IChiaXQoNSkgPDwgNSk7CisrICB9CisrICBpbmxpbmUgdWludDMyX3QgbWRN RVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbWRNQlZhbHVlKCk7IH0KKysKKysgIC8vIE1ELWZvcm0g WE8gKGJpdHMgMi4uNCkuCisrICBpbmxpbmUgdWludDMyX3QgbWRYT1ZhbHVlKCkgY29uc3QgeyBy ZXR1cm4gYml0cyg0LCAyKTsgfQorKworKyAgLy8gTURTLWZvcm0gKHJsZGNsLCBybGRjcik6IG1i WzA6NF0gaW4gYml0cyAxMDo2LCBtYls1XSBpbiBiaXQgNS4KKysgIGlubGluZSB1aW50MzJfdCBt ZHNNQlZhbHVlKCkgY29uc3QgeworKyAgICByZXR1cm4gYml0cygxMCwgNikgfCAoYml0KDUpIDw8 IDUpOworKyAgfQorKworKyAgLy8gTS1mb3JtIGZpZWxkcyAoMzItYml0IHJvdGF0ZS9tYXNrKS4K KysgIGlubGluZSB1aW50MzJfdCBtU0hWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTUsIDEx KTsgfQorKyAgaW5saW5lIHVpbnQzMl90IG1NQlZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygx MCwgNik7IH0KKysgIGlubGluZSB1aW50MzJfdCBtTUVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJp dHMoNSwgMSk7IH0KKysKKysgIC8vIFJjIGJpdC4KKysgIGlubGluZSBib29sIHJjQml0KCkgY29u c3QgeyByZXR1cm4gYml0KDApOyB9CisrCisrICAvLyBBQSBiaXQgZm9yIGJyYW5jaCBpbnN0cnVj dGlvbnMuCisrICBpbmxpbmUgYm9vbCBhYUJpdCgpIGNvbnN0IHsgcmV0dXJuIGJpdCgxKTsgfQor KworKyAgLy8gTEsgYml0IGZvciBicmFuY2ggaW5zdHJ1Y3Rpb25zLgorKyAgaW5saW5lIGJvb2wg bGtCaXQoKSBjb25zdCB7IHJldHVybiBiaXQoMCk7IH0KKysKKysgIC8vIE9FIGJpdCBmb3IgWE8t Zm9ybSBhcml0aG1ldGljLgorKyAgaW5saW5lIGJvb2wgb2VCaXQoKSBjb25zdCB7IHJldHVybiBi aXQoMTApOyB9CisrCisrICAvLyBMIGJpdCBmb3IgY29tcGFyZSBpbnN0cnVjdGlvbnMgKGJpdCAy MSkuCisrICBpbmxpbmUgYm9vbCBsQml0KCkgY29uc3QgeyByZXR1cm4gYml0KDIxKTsgfQorKwor KyAgLy8gQkYgZmllbGQgKGJpdHMgMjMuLjI1KSBmb3IgY29tcGFyZXMuCisrICBpbmxpbmUgdWlu dDMyX3QgYmZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMjUsIDIzKTsgfQorKworKyAgYm9v bCBpc1RyYXAoKSBjb25zdCB7CisrICAgIHVpbnQzMl90IGluc3RyID0gaW5zdHJ1Y3Rpb25CaXRz KCk7CisrICAgIC8vIFBQQ190cmFwID0gMHg3RkUwMDAwOCAodHcgMzEsMCwwKS4KKysgICAgLy8g RG9uJ3QgdHJlYXQgdGhlIGNhbGwtcmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb24gb3Igd2FzbSB0cmFw IGFzIGEKKysgICAgLy8gZGVidWdnZXIgdHJhcC4KKysgICAgaWYgKGluc3RyID09IGtDYWxsUmVk aXJJbnN0cikgcmV0dXJuIGZhbHNlOworKyAgICBpZiAoaW5zdHIgPT0gMHg3RkUwMDAwOCkgcmV0 dXJuIGZhbHNlOworKyAgICAvLyBBbnkgb3RoZXIgdHcgaW5zdHJ1Y3Rpb24gd2l0aCBUTz0zMSBp cyBhIHRyYXAuCisrICAgIGlmIChvcGNvZGUoKSA9PSAzMSAmJiAoeG9WYWx1ZSgpID09IDQpKSBy ZXR1cm4gdHJ1ZTsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyBwcml2YXRlOgorKyAg U2ltSW5zdHJ1Y3Rpb24oKSA9IGRlbGV0ZTsKKysgIFNpbUluc3RydWN0aW9uKGNvbnN0IFNpbUlu c3RydWN0aW9uJiBvdGhlcikgPSBkZWxldGU7CisrICB2b2lkIG9wZXJhdG9yPShjb25zdCBTaW1J bnN0cnVjdGlvbiYgb3RoZXIpID0gZGVsZXRlOworK307CisrCisrLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKysvLyBJQ2FjaGUuCisrCisrY2xhc3MgQ2FjaGVQYWdlIHsKKysgcHVibGljOgorKyAg c3RhdGljIGNvbnN0IGludCBMSU5FX1ZBTElEID0gMDsKKysgIHN0YXRpYyBjb25zdCBpbnQgTElO RV9JTlZBTElEID0gMTsKKysKKysgIHN0YXRpYyBjb25zdCBpbnQga1BhZ2VTaGlmdCA9IDEyOwor KyAgc3RhdGljIGNvbnN0IGludCBrUGFnZVNpemUgPSAxIDw8IGtQYWdlU2hpZnQ7CisrICBzdGF0 aWMgY29uc3QgaW50IGtQYWdlTWFzayA9IGtQYWdlU2l6ZSAtIDE7CisrICBzdGF0aWMgY29uc3Qg aW50IGtMaW5lU2hpZnQgPSAyOworKyAgc3RhdGljIGNvbnN0IGludCBrTGluZUxlbmd0aCA9IDEg PDwga0xpbmVTaGlmdDsKKysgIHN0YXRpYyBjb25zdCBpbnQga0xpbmVNYXNrID0ga0xpbmVMZW5n dGggLSAxOworKworKyAgQ2FjaGVQYWdlKCkgeyBtZW1zZXQoJnZhbGlkaXR5X21hcF8sIExJTkVf SU5WQUxJRCwgc2l6ZW9mKHZhbGlkaXR5X21hcF8pKTsgfQorKworKyAgY2hhciogdmFsaWRpdHlC eXRlKGludCBvZmZzZXQpIHsKKysgICAgcmV0dXJuICZ2YWxpZGl0eV9tYXBfW29mZnNldCA+PiBr TGluZVNoaWZ0XTsKKysgIH0KKysKKysgIGNoYXIqIGNhY2hlZERhdGEoaW50IG9mZnNldCkgeyBy ZXR1cm4gJmRhdGFfW29mZnNldF07IH0KKysKKysgcHJpdmF0ZToKKysgIGNoYXIgZGF0YV9ba1Bh Z2VTaXplXTsKKysgIHN0YXRpYyBjb25zdCBpbnQga1ZhbGlkaXR5TWFwU2l6ZSA9IGtQYWdlU2l6 ZSA+PiBrTGluZVNoaWZ0OworKyAgY2hhciB2YWxpZGl0eV9tYXBfW2tWYWxpZGl0eU1hcFNpemVd OworK307CisrCisrY2xhc3MgQXV0b0xvY2tTaW11bGF0b3JDYWNoZSA6IHB1YmxpYyBMb2NrR3Vh cmQ8TXV0ZXg+IHsKKysgIHVzaW5nIEJhc2UgPSBMb2NrR3VhcmQ8TXV0ZXg+OworKworKyBwdWJs aWM6CisrICBleHBsaWNpdCBBdXRvTG9ja1NpbXVsYXRvckNhY2hlKCkKKysgICAgICA6IEJhc2Uo U2ltdWxhdG9yUHJvY2Vzczo6c2luZ2xldG9uXy0+Y2FjaGVMb2NrXykge30KKyt9OworKworK21v emlsbGE6OkF0b21pYzxzaXplX3QsIG1vemlsbGE6OlJlbGVhc2VBY3F1aXJlPgorKyAgICBTaW11 bGF0b3JQcm9jZXNzOjpJQ2FjaGVDaGVja2luZ0Rpc2FibGVDb3VudCgxKTsKKytTaW11bGF0b3JQ cm9jZXNzKiBTaW11bGF0b3JQcm9jZXNzOjpzaW5nbGV0b25fID0gbnVsbHB0cjsKKysKKytpbnQ2 NF90IFNpbXVsYXRvcjo6U3RvcFNpbUF0ID0gLTE7CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysvLyBTaW11bGF0b3IgQ3JlYXRlIC8gRGVzdHJveS4KKysKKytTaW11bGF0b3IqIFNpbXVs YXRvcjo6Q3JlYXRlKCkgeworKyAgYXV0byBzaW0gPSBNYWtlVW5pcXVlPFNpbXVsYXRvcj4oKTsK KysgIGlmICghc2ltKSB7CisrICAgIHJldHVybiBudWxscHRyOworKyAgfQorKworKyAgaWYgKCFz aW0tPmluaXQoKSkgeworKyAgICByZXR1cm4gbnVsbHB0cjsKKysgIH0KKysKKysgIGludDY0X3Qg c3RvcEF0OworKyAgY2hhciogc3RvcEF0U3RyID0gZ2V0ZW52KCJQUEM2NF9TSU1fU1RPUF9BVCIp OworKyAgaWYgKHN0b3BBdFN0ciAmJiBzc2NhbmYoc3RvcEF0U3RyLCAiJSIgUFJJaTY0LCAmc3Rv cEF0KSA9PSAxKSB7CisrICAgIGZwcmludGYoc3RkZXJyLCAiXG5TdG9wcGluZyBzaW11bGF0aW9u IGF0IGljb3VudCAlIiBQUklpNjQgIlxuIiwgc3RvcEF0KTsKKysgICAgU2ltdWxhdG9yOjpTdG9w U2ltQXQgPSBzdG9wQXQ7CisrICB9CisrCisrICByZXR1cm4gc2ltLnJlbGVhc2UoKTsKKyt9Cisr Cisrdm9pZCBTaW11bGF0b3I6OkRlc3Ryb3koU2ltdWxhdG9yKiBzaW0pIHsganNfZGVsZXRlKHNp bSk7IH0KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIERlYnVnZ2VyLgorKworK2Ns YXNzIHBwYzY0RGVidWdnZXIgeworKyBwdWJsaWM6CisrICBleHBsaWNpdCBwcGM2NERlYnVnZ2Vy KFNpbXVsYXRvciogc2ltKSA6IHNpbV8oc2ltKSB7fQorKworKyAgdm9pZCBzdG9wKFNpbUluc3Ry dWN0aW9uKiBpbnN0cik7CisrICB2b2lkIGRlYnVnKCk7CisrICB2b2lkIHByaW50QWxsUmVncygp OworKyAgdm9pZCBwcmludEFsbFJlZ3NJbmNsdWRpbmdGUFUoKTsKKysKKysgcHJpdmF0ZToKKysg IHN0YXRpYyBjb25zdCBJbnN0ciBrQnJlYWtwb2ludEluc3RyID0gMHg3RkUwMDAwODsgIC8vIFBQ Q190cmFwCisrICBzdGF0aWMgY29uc3QgSW5zdHIga05vcEluc3RyID0gMHg2MDAwMDAwMDsgICAg ICAgICAgLy8gUFBDX25vcAorKworKyAgU2ltdWxhdG9yKiBzaW1fOworKworKyAgaW50NjRfdCBn ZXRSZWdpc3RlclZhbHVlKGludCByZWdudW0pOworKyAgaW50NjRfdCBnZXRGUFVSZWdpc3RlclZh bHVlTG9uZyhpbnQgcmVnbnVtKTsKKysgIGZsb2F0IGdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChp bnQgcmVnbnVtKTsKKysgIGRvdWJsZSBnZXRGUFVSZWdpc3RlclZhbHVlRG91YmxlKGludCByZWdu dW0pOworKyAgYm9vbCBnZXRWYWx1ZShjb25zdCBjaGFyKiBkZXNjLCBpbnQ2NF90KiB2YWx1ZSk7 CisrCisrICBib29sIHNldEJyZWFrcG9pbnQoU2ltSW5zdHJ1Y3Rpb24qIGJyZWFrcGMpOworKyAg Ym9vbCBkZWxldGVCcmVha3BvaW50KFNpbUluc3RydWN0aW9uKiBicmVha3BjKTsKKysKKysgIHZv aWQgdW5kb0JyZWFrcG9pbnRzKCk7CisrICB2b2lkIHJlZG9CcmVha3BvaW50cygpOworK307Cisr CisrW1ttYXliZV91bnVzZWRdXSBzdGF0aWMgdm9pZCBVTklNUExFTUVOVEVEKCkgeworKyAgcHJp bnRmKCJVTklNUExFTUVOVEVEIGluc3RydWN0aW9uLlxuIik7CisrICBNT1pfQ1JBU0goKTsKKyt9 CisrW1ttYXliZV91bnVzZWRdXSBzdGF0aWMgdm9pZCBVTlJFQUNIQUJMRSgpIHsKKysgIHByaW50 ZigiVU5SRUFDSEFCTEUgaW5zdHJ1Y3Rpb24uXG4iKTsKKysgIE1PWl9DUkFTSCgpOworK30KKytb W21heWJlX3VudXNlZF1dIHN0YXRpYyB2b2lkIFVOU1VQUE9SVEVEKCkgeworKyAgcHJpbnRmKCJV bnN1cHBvcnRlZCBpbnN0cnVjdGlvbi5cbiIpOworKyAgTU9aX0NSQVNIKCk7CisrfQorKworK3Zv aWQgcHBjNjREZWJ1Z2dlcjo6c3RvcChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQz Ml90IGNvZGUgPSAwOworKyAgY2hhciogbXNnID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihz aW1fLT5nZXRfcGMoKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgIGlmICghc2ltXy0+d2F0Y2hlZFN0b3Bz X1tjb2RlXS5kZXNjXykgeworKyAgICBzaW1fLT53YXRjaGVkU3RvcHNfW2NvZGVdLmRlc2NfID0g bXNnOworKyAgfQorKyAgaWYgKGNvZGUgIT0ga01heFN0b3BDb2RlKSB7CisrICAgIHByaW50Zigi U2ltdWxhdG9yIGhpdCBzdG9wICV1OiAlc1xuIiwgY29kZSwgbXNnKTsKKysgIH0gZWxzZSB7Cisr ICAgIHByaW50ZigiU2ltdWxhdG9yIGhpdCAlc1xuIiwgbXNnKTsKKysgIH0KKysgIHNpbV8tPnNl dF9wYyhzaW1fLT5nZXRfcGMoKSArIDIgKiBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Cisr ICBkZWJ1ZygpOworK30KKysKKytpbnQ2NF90IHBwYzY0RGVidWdnZXI6OmdldFJlZ2lzdGVyVmFs dWUoaW50IHJlZ251bSkgeworKyAgaWYgKHJlZ251bSA9PSBrUENSZWdpc3RlcikgeworKyAgICBy ZXR1cm4gc2ltXy0+Z2V0X3BjKCk7CisrICB9CisrICByZXR1cm4gc2ltXy0+Z2V0UmVnaXN0ZXIo cmVnbnVtKTsKKyt9CisrCisraW50NjRfdCBwcGM2NERlYnVnZ2VyOjpnZXRGUFVSZWdpc3RlclZh bHVlTG9uZyhpbnQgcmVnbnVtKSB7CisrICByZXR1cm4gc2ltXy0+Z2V0RnB1UmVnaXN0ZXIocmVn bnVtKTsKKyt9CisrCisrZmxvYXQgcHBjNjREZWJ1Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZUZs b2F0KGludCByZWdudW0pIHsKKysgIHJldHVybiBzaW1fLT5nZXRGcHVSZWdpc3RlckZsb2F0KHJl Z251bSk7CisrfQorKworK2RvdWJsZSBwcGM2NERlYnVnZ2VyOjpnZXRGUFVSZWdpc3RlclZhbHVl RG91YmxlKGludCByZWdudW0pIHsKKysgIHJldHVybiBzaW1fLT5nZXRGcHVSZWdpc3RlckRvdWJs ZShyZWdudW0pOworK30KKysKKytib29sIHBwYzY0RGVidWdnZXI6OmdldFZhbHVlKGNvbnN0IGNo YXIqIGRlc2MsIGludDY0X3QqIHZhbHVlKSB7CisrICBSZWdpc3RlciByZWcgPSBSZWdpc3Rlcjo6 RnJvbU5hbWUoZGVzYyk7CisrICBpZiAocmVnICE9IEludmFsaWRSZWcpIHsKKysgICAgKnZhbHVl ID0gZ2V0UmVnaXN0ZXJWYWx1ZShyZWcuY29kZSgpKTsKKysgICAgcmV0dXJuIHRydWU7CisrICB9 CisrCisrICBpZiAoc3RybmNtcChkZXNjLCAiMHgiLCAyKSA9PSAwKSB7CisrICAgIHJldHVybiBz c2NhbmYoZGVzYyArIDIsICIlIiBQUkl4NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPih2 YWx1ZSkpID09CisrICAgICAgICAgICAxOworKyAgfQorKyAgcmV0dXJuIHNzY2FuZihkZXNjLCAi JSIgUFJJdTY0LCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4odmFsdWUpKSA9PSAxOworK30K KysKKytib29sIHBwYzY0RGVidWdnZXI6OnNldEJyZWFrcG9pbnQoU2ltSW5zdHJ1Y3Rpb24qIGJy ZWFrcGMpIHsKKysgIGlmIChzaW1fLT5icmVha19wY18gIT0gbnVsbHB0cikgeworKyAgICByZXR1 cm4gZmFsc2U7CisrICB9CisrCisrICBzaW1fLT5icmVha19wY18gPSBicmVha3BjOworKyAgc2lt Xy0+YnJlYWtfaW5zdHJfID0gYnJlYWtwYy0+aW5zdHJ1Y3Rpb25CaXRzKCk7CisrICByZXR1cm4g dHJ1ZTsKKyt9CisrCisrYm9vbCBwcGM2NERlYnVnZ2VyOjpkZWxldGVCcmVha3BvaW50KFNpbUlu c3RydWN0aW9uKiBicmVha3BjKSB7CisrICBpZiAoc2ltXy0+YnJlYWtfcGNfICE9IG51bGxwdHIp IHsKKysgICAgc2ltXy0+YnJlYWtfcGNfLT5zZXRJbnN0cnVjdGlvbkJpdHMoc2ltXy0+YnJlYWtf aW5zdHJfKTsKKysgIH0KKysKKysgIHNpbV8tPmJyZWFrX3BjXyA9IG51bGxwdHI7CisrICBzaW1f LT5icmVha19pbnN0cl8gPSAwOworKyAgcmV0dXJuIHRydWU7CisrfQorKworK3ZvaWQgcHBjNjRE ZWJ1Z2dlcjo6dW5kb0JyZWFrcG9pbnRzKCkgeworKyAgaWYgKHNpbV8tPmJyZWFrX3BjXykgewor KyAgICBzaW1fLT5icmVha19wY18tPnNldEluc3RydWN0aW9uQml0cyhzaW1fLT5icmVha19pbnN0 cl8pOworKyAgfQorK30KKysKKyt2b2lkIHBwYzY0RGVidWdnZXI6OnJlZG9CcmVha3BvaW50cygp IHsKKysgIGlmIChzaW1fLT5icmVha19wY18pIHsKKysgICAgc2ltXy0+YnJlYWtfcGNfLT5zZXRJ bnN0cnVjdGlvbkJpdHMoa0JyZWFrcG9pbnRJbnN0cik7CisrICB9CisrfQorKworK3ZvaWQgcHBj NjREZWJ1Z2dlcjo6cHJpbnRBbGxSZWdzKCkgeworKyAgaW50NjRfdCB2YWx1ZTsKKysgIGZvciAo dWludDMyX3QgaSA9IDA7IGkgPCBSZWdpc3RlcnM6OlRvdGFsOyBpKyspIHsKKysgICAgdmFsdWUg PSBnZXRSZWdpc3RlclZhbHVlKGkpOworKyAgICBwcmludGYoIiUzczogMHglMDE2IiBQUkl4NjQg IiAlMjAiIFBSSWk2NCAiICAgIiwgUmVnaXN0ZXJzOjpHZXROYW1lKGkpLAorKyAgICAgICAgICAg dmFsdWUsIHZhbHVlKTsKKysKKysgICAgaWYgKGkgJSAyKSB7CisrICAgICAgcHJpbnRmKCJcbiIp OworKyAgICB9CisrICB9CisrICBwcmludGYoIlxuIik7CisrCisrICB2YWx1ZSA9IGdldFJlZ2lz dGVyVmFsdWUoU2ltdWxhdG9yOjpwYyk7CisrICBwcmludGYoIiAgcGM6IDB4JTAxNiIgUFJJeDY0 ICJcbiIsIHZhbHVlKTsKKysgIHByaW50ZigiICBscjogMHglMDE2IiBQUkl4NjQgIlxuIiwgc2lt Xy0+Z2V0TFIoKSk7CisrICBwcmludGYoIiBjdHI6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8t PmdldENUUigpKTsKKysgIHByaW50ZigiICBjcjogMHglMDh4XG4iLCBzaW1fLT5nZXRDUigpKTsK KysgIHByaW50ZigiIHhlcjogMHglMDE2IiBQUkl4NjQgIlxuIiwgc2ltXy0+Z2V0WEVSKCkpOwor K30KKysKKyt2b2lkIHBwYzY0RGVidWdnZXI6OnByaW50QWxsUmVnc0luY2x1ZGluZ0ZQVSgpIHsK KysgIHByaW50QWxsUmVncygpOworKworKyAgcHJpbnRmKCJcblxuIik7CisrICBmb3IgKHVpbnQz Ml90IGkgPSAwOyBpIDwgRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5czsgaSsrKSB7CisrICAgIHBy aW50ZigiJTNzOiAweCUwMTYiIFBSSXg2NCAiXHRmbHQ6ICUtOC40Z1x0ZGJsOiAlLTE2LjRnXG4i LAorKyAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkdldE5hbWUoaSksIGdldEZQVVJlZ2lzdGVy VmFsdWVMb25nKGkpLAorKyAgICAgICAgICAgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUZsb2F0KGkpLCBn ZXRGUFVSZWdpc3RlclZhbHVlRG91YmxlKGkpKTsKKysgIH0KKyt9CisrCisrc3RhdGljIGNoYXIq IFJlYWRMaW5lKGNvbnN0IGNoYXIqIHByb21wdCkgeworKyAgVW5pcXVlQ2hhcnMgcmVzdWx0Owor KyAgY2hhciBsaW5lQnVmWzI1Nl07CisrICBpbnQgb2Zmc2V0ID0gMDsKKysgIGJvb2wga2VlcEdv aW5nID0gdHJ1ZTsKKysgIGZwcmludGYoc3Rkb3V0LCAiJXMiLCBwcm9tcHQpOworKyAgZmZsdXNo KHN0ZG91dCk7CisrICB3aGlsZSAoa2VlcEdvaW5nKSB7CisrICAgIGlmIChmZ2V0cyhsaW5lQnVm LCBzaXplb2YobGluZUJ1ZiksIHN0ZGluKSA9PSBudWxscHRyKSB7CisrICAgICAgcmV0dXJuIG51 bGxwdHI7CisrICAgIH0KKysgICAgaW50IGxlbiA9IHN0cmxlbihsaW5lQnVmKTsKKysgICAgaWYg KGxlbiA+IDAgJiYgbGluZUJ1ZltsZW4gLSAxXSA9PSAnXG4nKSB7CisrICAgICAga2VlcEdvaW5n ID0gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFyZXN1bHQpIHsKKysgICAgICByZXN1bHQucmVz ZXQoanNfcG9kX21hbGxvYzxjaGFyPihsZW4gKyAxKSk7CisrICAgICAgaWYgKCFyZXN1bHQpIHsK KysgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAg ICBpbnQgbmV3X2xlbiA9IG9mZnNldCArIGxlbiArIDE7CisrICAgICAgY2hhciogbmV3X3Jlc3Vs dCA9IGpzX3BvZF9tYWxsb2M8Y2hhcj4obmV3X2xlbik7CisrICAgICAgaWYgKCFuZXdfcmVzdWx0 KSB7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICB9CisrICAgICAgbWVtY3B5KG5l d19yZXN1bHQsIHJlc3VsdC5nZXQoKSwgb2Zmc2V0ICogc2l6ZW9mKGNoYXIpKTsKKysgICAgICBy ZXN1bHQucmVzZXQobmV3X3Jlc3VsdCk7CisrICAgIH0KKysgICAgbWVtY3B5KHJlc3VsdC5nZXQo KSArIG9mZnNldCwgbGluZUJ1ZiwgbGVuICogc2l6ZW9mKGNoYXIpKTsKKysgICAgb2Zmc2V0ICs9 IGxlbjsKKysgIH0KKysKKysgIE1PWl9BU1NFUlQocmVzdWx0KTsKKysgIHJlc3VsdFtvZmZzZXRd ID0gJ1wwJzsKKysgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworK30KKysKKytzdGF0aWMgdm9p ZCBEaXNhc3NlbWJsZUluc3RydWN0aW9uKHVpbnQ2NF90IHBjKSB7CisrICBwcmludGYoIiAgMHgl MDE2IiBQUkl4NjQgIjogICUwOHhcbiIsIHBjLAorKyAgICAgICAgICpyZWludGVycHJldF9jYXN0 PHVpbnQzMl90Kj4ocGMpKTsKKyt9CisrCisrdm9pZCBwcGM2NERlYnVnZ2VyOjpkZWJ1ZygpIHsK KysgIGludHB0cl90IGxhc3RQQyA9IC0xOworKyAgYm9vbCBkb25lID0gZmFsc2U7CisrCisrI2Rl ZmluZSBDT01NQU5EX1NJWkUgNjMKKysjZGVmaW5lIEFSR19TSVpFIDI1NQorKworKyNkZWZpbmUg U1RSKGEpICNhCisrI2RlZmluZSBYU1RSKGEpIFNUUihhKQorKworKyAgY2hhciBjbWRbQ09NTUFO RF9TSVpFICsgMV07CisrICBjaGFyIGFyZzFbQVJHX1NJWkUgKyAxXTsKKysgIGNoYXIgYXJnMltB UkdfU0laRSArIDFdOworKyAgY2hhciogYXJndlszXSA9IHtjbWQsIGFyZzEsIGFyZzJ9OworKwor KyAgY21kW0NPTU1BTkRfU0laRV0gPSAwOworKyAgYXJnMVtBUkdfU0laRV0gPSAwOworKyAgYXJn MltBUkdfU0laRV0gPSAwOworKworKyAgdW5kb0JyZWFrcG9pbnRzKCk7CisrCisrICB3aGlsZSAo IWRvbmUgJiYgKHNpbV8tPmdldF9wYygpICE9IFNpbXVsYXRvcjo6ZW5kX3NpbV9wYykpIHsKKysg ICAgaWYgKGxhc3RQQyAhPSBzaW1fLT5nZXRfcGMoKSkgeworKyAgICAgIERpc2Fzc2VtYmxlSW5z dHJ1Y3Rpb24oc2ltXy0+Z2V0X3BjKCkpOworKyAgICAgIGxhc3RQQyA9IHNpbV8tPmdldF9wYygp OworKyAgICB9CisrICAgIGNoYXIqIGxpbmUgPSBSZWFkTGluZSgic2ltPiAiKTsKKysgICAgaWYg KGxpbmUgPT0gbnVsbHB0cikgeworKyAgICAgIGJyZWFrOworKyAgICB9IGVsc2UgeworKyAgICAg IGNoYXIqIGxhc3RfaW5wdXQgPSBzaW1fLT5sYXN0RGVidWdnZXJJbnB1dCgpOworKyAgICAgIGlm IChzdHJjbXAobGluZSwgIlxuIikgPT0gMCAmJiBsYXN0X2lucHV0ICE9IG51bGxwdHIpIHsKKysg ICAgICAgIGxpbmUgPSBsYXN0X2lucHV0OworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzaW1f LT5zZXRMYXN0RGVidWdnZXJJbnB1dChsaW5lKTsKKysgICAgICB9CisrICAgICAgaW50IGFyZ2Mg PSBzc2NhbmYobGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgWFNUUihD T01NQU5EX1NJWkUpICJzICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgWFNU UihBUkdfU0laRSkgInMgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBYU1RS KEFSR19TSVpFKSAicyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBhcmcx LCBhcmcyKTsKKysgICAgICBpZiAoKHN0cmNtcChjbWQsICJzaSIpID09IDApIHx8IChzdHJjbXAo Y21kLCAic3RlcGkiKSA9PSAwKSkgeworKyAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyID0K KysgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFNpbUluc3RydWN0aW9uKj4oc2ltXy0+Z2V0 X3BjKCkpOworKyAgICAgICAgaWYgKCFpbnN0ci0+aXNUcmFwKCkpIHsKKysgICAgICAgICAgc2lt Xy0+aW5zdHJ1Y3Rpb25EZWNvZGUoaW5zdHIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgcHJpbnRmKCIvIVxcIEp1bXBpbmcgb3ZlciBnZW5lcmF0ZWQgYnJlYWtwb2ludC5cbiIpOwor KyAgICAgICAgICBzaW1fLT5zZXRfcGMoc2ltXy0+Z2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6 a0luc3RyU2l6ZSk7CisrICAgICAgICB9CisrICAgICAgICBzaW1fLT5pY291bnRfKys7CisrICAg ICAgfSBlbHNlIGlmICgoc3RyY21wKGNtZCwgImMiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgImNv bnQiKSA9PSAwKSkgeworKyAgICAgICAgc2ltXy0+aW5zdHJ1Y3Rpb25EZWNvZGUoCisrICAgICAg ICAgICAgcmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KHNpbV8tPmdldF9wYygpKSk7 CisrICAgICAgICBzaW1fLT5pY291bnRfKys7CisrICAgICAgICBkb25lID0gdHJ1ZTsKKysgICAg ICB9IGVsc2UgaWYgKChzdHJjbXAoY21kLCAicCIpID09IDApIHx8IChzdHJjbXAoY21kLCAicHJp bnQiKSA9PSAwKSkgeworKyAgICAgICAgaWYgKGFyZ2MgPT0gMikgeworKyAgICAgICAgICBpbnQ2 NF90IHZhbHVlOworKyAgICAgICAgICBpZiAoc3RyY21wKGFyZzEsICJhbGwiKSA9PSAwKSB7Cisr ICAgICAgICAgICAgcHJpbnRBbGxSZWdzKCk7CisrICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21w KGFyZzEsICJhbGxmIikgPT0gMCkgeworKyAgICAgICAgICAgIHByaW50QWxsUmVnc0luY2x1ZGlu Z0ZQVSgpOworKyAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIFJlZ2lzdGVyIHJlZyA9 IFJlZ2lzdGVyOjpGcm9tTmFtZShhcmcxKTsKKysgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6 Q29kZSBmUmVnID0gRmxvYXRSZWdpc3RlcnM6OkZyb21OYW1lKGFyZzEpOworKyAgICAgICAgICAg IGlmIChyZWcgIT0gSW52YWxpZFJlZykgeworKyAgICAgICAgICAgICAgdmFsdWUgPSBnZXRSZWdp c3RlclZhbHVlKHJlZy5jb2RlKCkpOworKyAgICAgICAgICAgICAgcHJpbnRmKCIlczogMHglMDE2 IiBQUkl4NjQgIiAlMjAiIFBSSWk2NCAiIFxuIiwgYXJnMSwgdmFsdWUsCisrICAgICAgICAgICAg ICAgICAgICAgdmFsdWUpOworKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZlJlZyAhPSBGbG9hdFJl Z2lzdGVyczo6SW52YWxpZCkgeworKyAgICAgICAgICAgICAgcHJpbnRmKCIlM3M6IDB4JTAxNiIg UFJJeDY0ICJcdGZsdDogJS04LjRnXHRkYmw6ICUtMTYuNGdcbiIsCisrICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlcnM6OkdldE5hbWUoZlJlZyksCisrICAgICAgICAgICAgICAgICAg ICAgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUxvbmcoZlJlZyksCisrICAgICAgICAgICAgICAgICAgICAg Z2V0RlBVUmVnaXN0ZXJWYWx1ZUZsb2F0KGZSZWcpLAorKyAgICAgICAgICAgICAgICAgICAgIGdl dEZQVVJlZ2lzdGVyVmFsdWVEb3VibGUoZlJlZykpOworKyAgICAgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgICAgICBwcmludGYoIiVzIHVucmVjb2duaXplZFxuIiwgYXJnMSk7CisrICAgICAg ICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBwcmlu dGYoInByaW50IDxyZWdpc3Rlcj4gb3IgcHJpbnQgPGZwdSByZWdpc3Rlcj4gc2luZ2xlXG4iKTsK KysgICAgICAgIH0KKysgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJzdGFjayIpID09IDAg fHwgc3RyY21wKGNtZCwgIm1lbSIpID09IDApIHsKKysgICAgICAgIGludDY0X3QqIGN1ciA9IG51 bGxwdHI7CisrICAgICAgICBpbnQ2NF90KiBlbmQgPSBudWxscHRyOworKyAgICAgICAgaW50IG5l eHRfYXJnID0gMTsKKysKKysgICAgICAgIGlmIChzdHJjbXAoY21kLCAic3RhY2siKSA9PSAwKSB7 CisrICAgICAgICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KHNpbV8tPmdldFJl Z2lzdGVyKFNpbXVsYXRvcjo6c3ApKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIGlu dDY0X3QgdmFsdWU7CisrICAgICAgICAgIGlmICghZ2V0VmFsdWUoYXJnMSwgJnZhbHVlKSkgewor KyAgICAgICAgICAgIHByaW50ZigiJXMgdW5yZWNvZ25pemVkXG4iLCBhcmcxKTsKKysgICAgICAg ICAgICBjb250aW51ZTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBjdXIgPSByZWludGVycHJl dF9jYXN0PGludDY0X3QqPih2YWx1ZSk7CisrICAgICAgICAgIG5leHRfYXJnKys7CisrICAgICAg ICB9CisrCisrICAgICAgICBpbnQ2NF90IHdvcmRzOworKyAgICAgICAgaWYgKGFyZ2MgPT0gbmV4 dF9hcmcpIHsKKysgICAgICAgICAgd29yZHMgPSAxMDsKKysgICAgICAgIH0gZWxzZSB7CisrICAg ICAgICAgIGlmICghZ2V0VmFsdWUoYXJndltuZXh0X2FyZ10sICZ3b3JkcykpIHsKKysgICAgICAg ICAgICB3b3JkcyA9IDEwOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbmQg PSBjdXIgKyB3b3JkczsKKysKKysgICAgICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKKysgICAgICAg ICAgcHJpbnRmKCIgICVwOiAgMHglMDE2IiBQUkl4NjQgIiAlMjAiIFBSSWk2NCwgY3VyLCAqY3Vy LCAqY3VyKTsKKysgICAgICAgICAgcHJpbnRmKCJcbiIpOworKyAgICAgICAgICBjdXIrKzsKKysg ICAgICAgIH0KKysKKysgICAgICB9IGVsc2UgaWYgKChzdHJjbXAoY21kLCAiZGlzYXNtIikgPT0g MCkgfHwgKHN0cmNtcChjbWQsICJkcGMiKSA9PSAwKSB8fAorKyAgICAgICAgICAgICAgICAgKHN0 cmNtcChjbWQsICJkaSIpID09IDApKSB7CisrICAgICAgICB1aW50OF90KiBjdXIgPSBudWxscHRy OworKyAgICAgICAgdWludDhfdCogZW5kID0gbnVsbHB0cjsKKysKKysgICAgICAgIGlmIChhcmdj ID09IDEpIHsKKysgICAgICAgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2lt Xy0+Z2V0X3BjKCkpOworKyAgICAgICAgICBlbmQgPSBjdXIgKyAoMTAgKiBTaW1JbnN0cnVjdGlv bjo6a0luc3RyU2l6ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKGFyZ2MgPT0gMikgeworKyAgICAg ICAgICBSZWdpc3RlciByZWcgPSBSZWdpc3Rlcjo6RnJvbU5hbWUoYXJnMSk7CisrICAgICAgICAg IGlmIChyZWcgIT0gSW52YWxpZFJlZyB8fCBzdHJuY21wKGFyZzEsICIweCIsIDIpID09IDApIHsK KysgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworKyAgICAgICAgICAgIGlmIChnZXRWYWx1ZShh cmcxLCAmdmFsdWUpKSB7CisrICAgICAgICAgICAgICBjdXIgPSByZWludGVycHJldF9jYXN0PHVp bnQ4X3QqPih2YWx1ZSk7CisrICAgICAgICAgICAgICBlbmQgPSBjdXIgKyAoMTAgKiBTaW1JbnN0 cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9IGVsc2Ug eworKyAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisrICAgICAgICAgICAgaWYgKGdldFZhbHVl KGFyZzEsICZ2YWx1ZSkpIHsKKysgICAgICAgICAgICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8 dWludDhfdCo+KHNpbV8tPmdldF9wYygpKTsKKysgICAgICAgICAgICAgIGVuZCA9IGN1ciArICh2 YWx1ZSAqIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgICAgICB9CisrICAg ICAgICAgIH0KKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIGludDY0X3QgdmFsdWUxOwor KyAgICAgICAgICBpbnQ2NF90IHZhbHVlMjsKKysgICAgICAgICAgaWYgKGdldFZhbHVlKGFyZzEs ICZ2YWx1ZTEpICYmIGdldFZhbHVlKGFyZzIsICZ2YWx1ZTIpKSB7CisrICAgICAgICAgICAgY3Vy ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmFsdWUxKTsKKysgICAgICAgICAgICBlbmQg PSBjdXIgKyAodmFsdWUyICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICAgICAg ICB9CisrICAgICAgICB9CisrCisrICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CisrICAgICAg ICAgIERpc2Fzc2VtYmxlSW5zdHJ1Y3Rpb24odWludDY0X3QoY3VyKSk7CisrICAgICAgICAgIGN1 ciArPSBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZTsKKysgICAgICAgIH0KKysgICAgICB9IGVs c2UgaWYgKHN0cmNtcChjbWQsICJnZGIiKSA9PSAwKSB7CisrICAgICAgICBwcmludGYoInJlbGlu cXVpc2hpbmcgY29udHJvbCB0byBnZGJcbiIpOworKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisr ICAgICAgICBhc20oImludCAkMyIpOworKyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCisrICAg ICAgICBhc20oImJyayAjMHhmMDAwIik7CisrI2VuZGlmCisrICAgICAgICBwcmludGYoInJlZ2Fp bmluZyBjb250cm9sIGZyb20gZ2RiXG4iKTsKKysgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQs ICJicmVhayIpID09IDApIHsKKysgICAgICAgIGlmIChhcmdjID09IDIpIHsKKysgICAgICAgICAg aW50NjRfdCB2YWx1ZTsKKysgICAgICAgICAgaWYgKGdldFZhbHVlKGFyZzEsICZ2YWx1ZSkpIHsK KysgICAgICAgICAgICBpZiAoIXNldEJyZWFrcG9pbnQocmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0 cnVjdGlvbio+KHZhbHVlKSkpIHsKKysgICAgICAgICAgICAgIHByaW50Zigic2V0dGluZyBicmVh a3BvaW50IGZhaWxlZFxuIik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9IGVsc2Ugewor KyAgICAgICAgICAgIHByaW50ZigiJXMgdW5yZWNvZ25pemVkXG4iLCBhcmcxKTsKKysgICAgICAg ICAgfQorKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgcHJpbnRmKCJicmVhayA8YWRkcmVz cz5cbiIpOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgImRlbCIp ID09IDApIHsKKysgICAgICAgIGlmICghZGVsZXRlQnJlYWtwb2ludChudWxscHRyKSkgeworKyAg ICAgICAgICBwcmludGYoImRlbGV0aW5nIGJyZWFrcG9pbnQgZmFpbGVkXG4iKTsKKysgICAgICAg IH0KKysgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJmbGFncyIpID09IDApIHsKKysgICAg ICAgIHByaW50ZigiQ1I6IDB4JTA4eCAgIFhFUjogMHglMDE2IiBQUkl4NjQgIlxuIiwgc2ltXy0+ Z2V0Q1IoKSwKKysgICAgICAgICAgICAgICBzaW1fLT5nZXRYRVIoKSk7CisrICAgICAgfSBlbHNl IGlmIChzdHJjbXAoY21kLCAic3RvcCIpID09IDApIHsKKysgICAgICAgIGludDY0X3QgdmFsdWU7 CisrICAgICAgICBpbnRwdHJfdCBzdG9wX3BjID0gc2ltXy0+Z2V0X3BjKCkgLSAyICogU2ltSW5z dHJ1Y3Rpb246OmtJbnN0clNpemU7CisrICAgICAgICBTaW1JbnN0cnVjdGlvbiogc3RvcF9pbnN0 ciA9CisrICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KHN0b3Bf cGMpOworKyAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIG1zZ19hZGRyZXNzID0gcmVpbnRlcnByZXRf Y2FzdDxTaW1JbnN0cnVjdGlvbio+KAorKyAgICAgICAgICAgIHN0b3BfcGMgKyBTaW1JbnN0cnVj dGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgICBpZiAoKGFyZ2MgPT0gMikgJiYgKHN0cmNtcChh cmcxLCAidW5zdG9wIikgPT0gMCkpIHsKKysgICAgICAgICAgaWYgKHNpbV8tPmlzU3RvcEluc3Ry dWN0aW9uKHN0b3BfaW5zdHIpKSB7CisrICAgICAgICAgICAgc3RvcF9pbnN0ci0+c2V0SW5zdHJ1 Y3Rpb25CaXRzKGtOb3BJbnN0cik7CisrICAgICAgICAgICAgbXNnX2FkZHJlc3MtPnNldEluc3Ry dWN0aW9uQml0cyhrTm9wSW5zdHIpOworKyAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAg IHByaW50ZigiTm90IGF0IGRlYnVnZ2VyIHN0b3AuXG4iKTsKKysgICAgICAgICAgfQorKyAgICAg ICAgfSBlbHNlIGlmIChhcmdjID09IDMpIHsKKysgICAgICAgICAgaWYgKHN0cmNtcChhcmcxLCAi aW5mbyIpID09IDApIHsKKysgICAgICAgICAgICBpZiAoc3RyY21wKGFyZzIsICJhbGwiKSA9PSAw KSB7CisrICAgICAgICAgICAgICBwcmludGYoIlN0b3AgaW5mb3JtYXRpb246XG4iKTsKKysgICAg ICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IGtNYXhXYXRjaHBvaW50Q29kZSArIDE7IGkgPD0g a01heFN0b3BDb2RlOworKyAgICAgICAgICAgICAgICAgICBpKyspIHsKKysgICAgICAgICAgICAg ICAgc2ltXy0+cHJpbnRTdG9wSW5mbyhpKTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAg ICB9IGVsc2UgaWYgKGdldFZhbHVlKGFyZzIsICZ2YWx1ZSkpIHsKKysgICAgICAgICAgICAgIHNp bV8tPnByaW50U3RvcEluZm8odmFsdWUpOworKyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAg ICAgICAgICBwcmludGYoIlVucmVjb2duaXplZCBhcmd1bWVudC5cbiIpOworKyAgICAgICAgICAg IH0KKysgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJnMSwgImVuYWJsZSIpID09IDApIHsK KysgICAgICAgICAgICBpZiAoc3RyY21wKGFyZzIsICJhbGwiKSA9PSAwKSB7CisrICAgICAgICAg ICAgICBmb3IgKHVpbnQzMl90IGkgPSBrTWF4V2F0Y2hwb2ludENvZGUgKyAxOyBpIDw9IGtNYXhT dG9wQ29kZTsKKysgICAgICAgICAgICAgICAgICAgaSsrKSB7CisrICAgICAgICAgICAgICAgIHNp bV8tPmVuYWJsZVN0b3AoaSk7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfSBlbHNl IGlmIChnZXRWYWx1ZShhcmcyLCAmdmFsdWUpKSB7CisrICAgICAgICAgICAgICBzaW1fLT5lbmFi bGVTdG9wKHZhbHVlKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgcHJp bnRmKCJVbnJlY29nbml6ZWQgYXJndW1lbnQuXG4iKTsKKysgICAgICAgICAgICB9CisrICAgICAg ICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZzEsICJkaXNhYmxlIikgPT0gMCkgeworKyAgICAgICAg ICAgIGlmIChzdHJjbXAoYXJnMiwgImFsbCIpID09IDApIHsKKysgICAgICAgICAgICAgIGZvciAo dWludDMyX3QgaSA9IGtNYXhXYXRjaHBvaW50Q29kZSArIDE7IGkgPD0ga01heFN0b3BDb2RlOwor KyAgICAgICAgICAgICAgICAgICBpKyspIHsKKysgICAgICAgICAgICAgICAgc2ltXy0+ZGlzYWJs ZVN0b3AoaSk7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRW YWx1ZShhcmcyLCAmdmFsdWUpKSB7CisrICAgICAgICAgICAgICBzaW1fLT5kaXNhYmxlU3RvcCh2 YWx1ZSk7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgIHByaW50ZigiVW5y ZWNvZ25pemVkIGFyZ3VtZW50LlxuIik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9Cisr ICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBwcmludGYoIldyb25nIHVzYWdlLiBVc2UgaGVs cCBjb21tYW5kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIik7CisrICAgICAgICB9CisrICAgICAg fSBlbHNlIGlmICgoc3RyY21wKGNtZCwgImgiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgImhlbHAi KSA9PSAwKSkgeworKyAgICAgICAgcHJpbnRmKCJjb250XG4iKTsKKysgICAgICAgIHByaW50Zigi ICBjb250aW51ZSBleGVjdXRpb24gKGFsaWFzICdjJylcbiIpOworKyAgICAgICAgcHJpbnRmKCJz dGVwaVxuIik7CisrICAgICAgICBwcmludGYoIiAgc3RlcCBvbmUgaW5zdHJ1Y3Rpb24gKGFsaWFz ICdzaScpXG4iKTsKKysgICAgICAgIHByaW50ZigicHJpbnQgPHJlZ2lzdGVyPlxuIik7CisrICAg ICAgICBwcmludGYoIiAgcHJpbnQgcmVnaXN0ZXIgY29udGVudCAoYWxpYXMgJ3AnKVxuIik7Cisr ICAgICAgICBwcmludGYoIiAgdXNlIHJlZ2lzdGVyIG5hbWUgJ2FsbCcgdG8gcHJpbnQgYWxsIHJl Z2lzdGVyc1xuIik7CisrICAgICAgICBwcmludGYoInN0YWNrIFs8d29yZHM+XVxuIik7CisrICAg ICAgICBwcmludGYoIiAgZHVtcCBzdGFjayBjb250ZW50LCBkZWZhdWx0IGR1bXAgMTAgd29yZHMp XG4iKTsKKysgICAgICAgIHByaW50ZigibWVtIDxhZGRyZXNzPiBbPHdvcmRzPl1cbiIpOworKyAg ICAgICAgcHJpbnRmKCIgIGR1bXAgbWVtb3J5IGNvbnRlbnQsIGRlZmF1bHQgZHVtcCAxMCB3b3Jk cylcbiIpOworKyAgICAgICAgcHJpbnRmKCJmbGFnc1xuIik7CisrICAgICAgICBwcmludGYoIiAg cHJpbnQgQ1IgYW5kIFhFUlxuIik7CisrICAgICAgICBwcmludGYoImRpc2FzbSBbPGluc3RydWN0 aW9ucz5dXG4iKTsKKysgICAgICAgIHByaW50ZigiZGlzYXNtIFs8YWRkcmVzcy9yZWdpc3Rlcj5d XG4iKTsKKysgICAgICAgIHByaW50ZigiZGlzYXNtIFtbPGFkZHJlc3MvcmVnaXN0ZXI+XSA8aW5z dHJ1Y3Rpb25zPl1cbiIpOworKyAgICAgICAgcHJpbnRmKCIgIGRpc2Fzc2VtYmxlIGNvZGUsIGRl ZmF1bHQgaXMgMTAgaW5zdHJ1Y3Rpb25zXG4iKTsKKysgICAgICAgIHByaW50ZigiICBmcm9tIHBj IChhbGlhcyAnZGknKVxuIik7CisrICAgICAgICBwcmludGYoImdkYlxuIik7CisrICAgICAgICBw cmludGYoIiAgZW50ZXIgZ2RiXG4iKTsKKysgICAgICAgIHByaW50ZigiYnJlYWsgPGFkZHJlc3M+ XG4iKTsKKysgICAgICAgIHByaW50ZigiICBzZXQgYSBicmVhayBwb2ludCBvbiB0aGUgYWRkcmVz c1xuIik7CisrICAgICAgICBwcmludGYoImRlbFxuIik7CisrICAgICAgICBwcmludGYoIiAgZGVs ZXRlIHRoZSBicmVha3BvaW50XG4iKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcHJpbnRm KCJVbmtub3duIGNvbW1hbmQ6ICVzXG4iLCBjbWQpOworKyAgICAgIH0KKysgICAgfQorKyAgfQor KworKyAgcmVkb0JyZWFrcG9pbnRzKCk7CisrCisrI3VuZGVmIENPTU1BTkRfU0laRQorKyN1bmRl ZiBBUkdfU0laRQorKworKyN1bmRlZiBTVFIKKysjdW5kZWYgWFNUUgorK30KKysKKysvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorKy8vIElDYWNoZSBoZWxwZXJzLgorKworK3N0YXRpYyBib29sIEFs bE9uT25lUGFnZSh1aW50cHRyX3Qgc3RhcnQsIGludCBzaXplKSB7CisrICBpbnRwdHJfdCBzdGFy dF9wYWdlID0gKHN0YXJ0ICYgfkNhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKKysgIGludHB0cl90IGVu ZF9wYWdlID0gKChzdGFydCArIHNpemUpICYgfkNhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKKysgIHJl dHVybiBzdGFydF9wYWdlID09IGVuZF9wYWdlOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6c2V0 TGFzdERlYnVnZ2VySW5wdXQoY2hhciogaW5wdXQpIHsKKysgIGpzX2ZyZWUobGFzdERlYnVnZ2Vy SW5wdXRfKTsKKysgIGxhc3REZWJ1Z2dlcklucHV0XyA9IGlucHV0OworK30KKysKKytzdGF0aWMg Q2FjaGVQYWdlKiBHZXRDYWNoZVBhZ2VMb2NrZWQoU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlTWFw JiBpX2NhY2hlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBw YWdlKSB7CisrICBTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVNYXA6OkFkZFB0ciBwID0gaV9jYWNo ZS5sb29rdXBGb3JBZGQocGFnZSk7CisrICBpZiAocCkgeworKyAgICByZXR1cm4gcC0+dmFsdWUo KTsKKysgIH0KKysgIEF1dG9FbnRlck9PTVVuc2FmZVJlZ2lvbiBvb21VbnNhZmU7CisrICBDYWNo ZVBhZ2UqIG5ld19wYWdlID0ganNfbmV3PENhY2hlUGFnZT4oKTsKKysgIGlmICghbmV3X3BhZ2Ug fHwgIWlfY2FjaGUuYWRkKHAsIHBhZ2UsIG5ld19wYWdlKSkgeworKyAgICBvb21VbnNhZmUuY3Jh c2goIlNpbXVsYXRvciBDYWNoZVBhZ2UiKTsKKysgIH0KKysgIHJldHVybiBuZXdfcGFnZTsKKyt9 CisrCisrc3RhdGljIHZvaWQgRmx1c2hPbmVQYWdlTG9ja2VkKFNpbXVsYXRvclByb2Nlc3M6OklD YWNoZU1hcCYgaV9jYWNoZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cHRy X3Qgc3RhcnQsIGludCBzaXplKSB7CisrICBNT1pfQVNTRVJUKHNpemUgPD0gQ2FjaGVQYWdlOjpr UGFnZVNpemUpOworKyAgTU9aX0FTU0VSVChBbGxPbk9uZVBhZ2Uoc3RhcnQsIHNpemUgLSAxKSk7 CisrICBNT1pfQVNTRVJUKChzdGFydCAmIENhY2hlUGFnZTo6a0xpbmVNYXNrKSA9PSAwKTsKKysg IE1PWl9BU1NFUlQoKHNpemUgJiBDYWNoZVBhZ2U6OmtMaW5lTWFzaykgPT0gMCk7CisrICB2b2lk KiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnQgJiAofkNhY2hlUGFnZTo6a1Bh Z2VNYXNrKSk7CisrICBpbnQgb2Zmc2V0ID0gKHN0YXJ0ICYgQ2FjaGVQYWdlOjprUGFnZU1hc2sp OworKyAgQ2FjaGVQYWdlKiBjYWNoZV9wYWdlID0gR2V0Q2FjaGVQYWdlTG9ja2VkKGlfY2FjaGUs IHBhZ2UpOworKyAgY2hhciogdmFsaWRfYnl0ZW1hcCA9IGNhY2hlX3BhZ2UtPnZhbGlkaXR5Qnl0 ZShvZmZzZXQpOworKyAgbWVtc2V0KHZhbGlkX2J5dGVtYXAsIENhY2hlUGFnZTo6TElORV9JTlZB TElELCBzaXplID4+IENhY2hlUGFnZTo6a0xpbmVTaGlmdCk7CisrfQorKworK3N0YXRpYyB2b2lk IEZsdXNoSUNhY2hlTG9ja2VkKFNpbXVsYXRvclByb2Nlc3M6OklDYWNoZU1hcCYgaV9jYWNoZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBzdGFydF9hZGRyLCBzaXplX3Qg c2l6ZSkgeworKyAgaW50cHRyX3Qgc3RhcnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihz dGFydF9hZGRyKTsKKysgIGludCBpbnRyYV9saW5lID0gKHN0YXJ0ICYgQ2FjaGVQYWdlOjprTGlu ZU1hc2spOworKyAgc3RhcnQgLT0gaW50cmFfbGluZTsKKysgIHNpemUgKz0gaW50cmFfbGluZTsK KysgIHNpemUgPSAoKHNpemUgLSAxKSB8IENhY2hlUGFnZTo6a0xpbmVNYXNrKSArIDE7CisrICBp bnQgb2Zmc2V0ID0gKHN0YXJ0ICYgQ2FjaGVQYWdlOjprUGFnZU1hc2spOworKyAgd2hpbGUgKCFB bGxPbk9uZVBhZ2Uoc3RhcnQsIHNpemUgLSAxKSkgeworKyAgICBpbnQgYnl0ZXNfdG9fZmx1c2gg PSBDYWNoZVBhZ2U6OmtQYWdlU2l6ZSAtIG9mZnNldDsKKysgICAgRmx1c2hPbmVQYWdlTG9ja2Vk KGlfY2FjaGUsIHN0YXJ0LCBieXRlc190b19mbHVzaCk7CisrICAgIHN0YXJ0ICs9IGJ5dGVzX3Rv X2ZsdXNoOworKyAgICBzaXplIC09IGJ5dGVzX3RvX2ZsdXNoOworKyAgICBNT1pfQVNTRVJUKChz dGFydCAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKSA9PSAwKTsKKysgICAgb2Zmc2V0ID0gMDsKKysg IH0KKysgIGlmIChzaXplICE9IDApIHsKKysgICAgRmx1c2hPbmVQYWdlTG9ja2VkKGlfY2FjaGUs IHN0YXJ0LCBzaXplKTsKKysgIH0KKyt9CisrCisrLyogc3RhdGljICovCisrdm9pZCBTaW11bGF0 b3JQcm9jZXNzOjpjaGVja0lDYWNoZUxvY2tlZChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysg IGludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cik7Cisr ICB2b2lkKiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyAmICh+Q2FjaGVQ YWdlOjprUGFnZU1hc2spKTsKKysgIHZvaWQqIGxpbmUgPSByZWludGVycHJldF9jYXN0PHZvaWQq PihhZGRyZXNzICYgKH5DYWNoZVBhZ2U6OmtMaW5lTWFzaykpOworKyAgaW50IG9mZnNldCA9IChh ZGRyZXNzICYgQ2FjaGVQYWdlOjprUGFnZU1hc2spOworKyAgQ2FjaGVQYWdlKiBjYWNoZV9wYWdl ID0gR2V0Q2FjaGVQYWdlTG9ja2VkKGljYWNoZSgpLCBwYWdlKTsKKysgIGNoYXIqIGNhY2hlX3Zh bGlkX2J5dGUgPSBjYWNoZV9wYWdlLT52YWxpZGl0eUJ5dGUob2Zmc2V0KTsKKysgIGJvb2wgY2Fj aGVfaGl0ID0gKCpjYWNoZV92YWxpZF9ieXRlID09IENhY2hlUGFnZTo6TElORV9WQUxJRCk7Cisr ICBjaGFyKiBjYWNoZWRfbGluZSA9IGNhY2hlX3BhZ2UtPmNhY2hlZERhdGEob2Zmc2V0ICYgfkNh Y2hlUGFnZTo6a0xpbmVNYXNrKTsKKysKKysgIGlmIChjYWNoZV9oaXQpIHsKKysgICAgbW96aWxs YTo6RGVidWdPbmx5PGludD4gY21wcmV0ID0KKysgICAgICAgIG1lbWNtcChyZWludGVycHJldF9j YXN0PHZvaWQqPihpbnN0ciksIGNhY2hlX3BhZ2UtPmNhY2hlZERhdGEob2Zmc2V0KSwKKysgICAg ICAgICAgICAgICBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgIE1PWl9BU1NFUlQo Y21wcmV0ID09IDApOworKyAgfSBlbHNlIHsKKysgICAgbWVtY3B5KGNhY2hlZF9saW5lLCBsaW5l LCBDYWNoZVBhZ2U6OmtMaW5lTGVuZ3RoKTsKKysgICAgKmNhY2hlX3ZhbGlkX2J5dGUgPSBDYWNo ZVBhZ2U6OkxJTkVfVkFMSUQ7CisrICB9CisrfQorKworK0hhc2hOdW1iZXIgU2ltdWxhdG9yUHJv Y2Vzczo6SUNhY2hlSGFzaGVyOjpoYXNoKGNvbnN0IExvb2t1cCYgbCkgeworKyAgcmV0dXJuIFUz MihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obCkpID4+IDI7CisrfQorKworK2Jvb2wgU2lt dWxhdG9yUHJvY2Vzczo6SUNhY2hlSGFzaGVyOjptYXRjaChjb25zdCBLZXkmIGssIGNvbnN0IExv b2t1cCYgbCkgeworKyAgTU9aX0FTU0VSVCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaykg JiBDYWNoZVBhZ2U6OmtQYWdlTWFzaykgPT0gMCk7CisrICBNT1pfQVNTRVJUKChyZWludGVycHJl dF9jYXN0PGludHB0cl90PihsKSAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKSA9PSAwKTsKKysgIHJl dHVybiBrID09IGw7CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQgU2ltdWxhdG9yUHJvY2Vz czo6Rmx1c2hJQ2FjaGUodm9pZCogc3RhcnRfYWRkciwgc2l6ZV90IHNpemUpIHsKKysgIGlmICgh SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQpIHsKKysgICAgQXV0b0xvY2tTaW11bGF0b3JDYWNo ZSBhbHM7CisrICAgIGpzOjpqaXQ6OkZsdXNoSUNhY2hlTG9ja2VkKGljYWNoZSgpLCBzdGFydF9h ZGRyLCBzaXplKTsKKysgIH0KKyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBS ZWRpcmVjdGlvbi4KKysKKytjbGFzcyBSZWRpcmVjdGlvbiB7CisrICBmcmllbmQgY2xhc3MgU2lt dWxhdG9yUHJvY2VzczsKKysKKysgIFJlZGlyZWN0aW9uKHZvaWQqIG5hdGl2ZUZ1bmN0aW9uLCBB QklGdW5jdGlvblR5cGUgdHlwZSkKKysgICAgICA6IG5hdGl2ZUZ1bmN0aW9uXyhuYXRpdmVGdW5j dGlvbiksCisrICAgICAgICBzd2lJbnN0cnVjdGlvbl8oa0NhbGxSZWRpckluc3RyKSwKKysgICAg ICAgIHR5cGVfKHR5cGUpLAorKyAgICAgICAgbmV4dF8obnVsbHB0cikgeworKyAgICBuZXh0XyA9 IFNpbXVsYXRvclByb2Nlc3M6OnJlZGlyZWN0aW9uKCk7CisrICAgIGlmICghU2ltdWxhdG9yUHJv Y2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQpIHsKKysgICAgICBGbHVzaElDYWNoZUxv Y2tlZChTaW11bGF0b3JQcm9jZXNzOjppY2FjaGUoKSwgYWRkcmVzc09mU3dpSW5zdHJ1Y3Rpb24o KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7 CisrICAgIH0KKysgICAgU2ltdWxhdG9yUHJvY2Vzczo6c2V0UmVkaXJlY3Rpb24odGhpcyk7Cisr ICB9CisrCisrIHB1YmxpYzoKKysgIHZvaWQqIGFkZHJlc3NPZlN3aUluc3RydWN0aW9uKCkgeyBy ZXR1cm4gJnN3aUluc3RydWN0aW9uXzsgfQorKyAgdm9pZCogbmF0aXZlRnVuY3Rpb24oKSBjb25z dCB7IHJldHVybiBuYXRpdmVGdW5jdGlvbl87IH0KKysgIEFCSUZ1bmN0aW9uVHlwZSB0eXBlKCkg Y29uc3QgeyByZXR1cm4gdHlwZV87IH0KKysKKysgIHN0YXRpYyBSZWRpcmVjdGlvbiogR2V0KHZv aWQqIG5hdGl2ZUZ1bmN0aW9uLCBBQklGdW5jdGlvblR5cGUgdHlwZSkgeworKyAgICBBdXRvTG9j a1NpbXVsYXRvckNhY2hlIGFsczsKKysKKysgICAgUmVkaXJlY3Rpb24qIGN1cnJlbnQgPSBTaW11 bGF0b3JQcm9jZXNzOjpyZWRpcmVjdGlvbigpOworKyAgICBmb3IgKDsgY3VycmVudCAhPSBudWxs cHRyOyBjdXJyZW50ID0gY3VycmVudC0+bmV4dF8pIHsKKysgICAgICBpZiAoY3VycmVudC0+bmF0 aXZlRnVuY3Rpb25fID09IG5hdGl2ZUZ1bmN0aW9uKSB7CisrICAgICAgICBNT1pfQVNTRVJUKGN1 cnJlbnQtPnR5cGUoKSA9PSB0eXBlKTsKKysgICAgICAgIHJldHVybiBjdXJyZW50OworKyAgICAg IH0KKysgICAgfQorKworKyAgICBBdXRvRW50ZXJPT01VbnNhZmVSZWdpb24gb29tVW5zYWZlOwor KyAgICBSZWRpcmVjdGlvbiogcmVkaXIgPSBqc19wb2RfbWFsbG9jPFJlZGlyZWN0aW9uPigxKTsK KysgICAgaWYgKCFyZWRpcikgeworKyAgICAgIG9vbVVuc2FmZS5jcmFzaCgiU2ltdWxhdG9yIHJl ZGlyZWN0aW9uIik7CisrICAgIH0KKysgICAgbmV3IChyZWRpcikgUmVkaXJlY3Rpb24obmF0aXZl RnVuY3Rpb24sIHR5cGUpOworKyAgICByZXR1cm4gcmVkaXI7CisrICB9CisrCisrICBzdGF0aWMg UmVkaXJlY3Rpb24qIEZyb21Td2lJbnN0cnVjdGlvbihTaW1JbnN0cnVjdGlvbiogc3dpSW5zdHJ1 Y3Rpb24pIHsKKysgICAgdWludDhfdCogYWRkck9mU3dpID0gcmVpbnRlcnByZXRfY2FzdDx1aW50 OF90Kj4oc3dpSW5zdHJ1Y3Rpb24pOworKyAgICB1aW50OF90KiBhZGRyT2ZSZWRpcmVjdGlvbiA9 CisrICAgICAgICBhZGRyT2ZTd2kgLSBvZmZzZXRvZihSZWRpcmVjdGlvbiwgc3dpSW5zdHJ1Y3Rp b25fKTsKKysgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVkaXJlY3Rpb24qPihhZGRyT2ZS ZWRpcmVjdGlvbik7CisrICB9CisrCisrIHByaXZhdGU6CisrICB2b2lkKiBuYXRpdmVGdW5jdGlv bl87CisrICB1aW50MzJfdCBzd2lJbnN0cnVjdGlvbl87CisrICBBQklGdW5jdGlvblR5cGUgdHlw ZV87CisrICBSZWRpcmVjdGlvbiogbmV4dF87CisrfTsKKysKKysvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorKy8vIFNpbXVsYXRvciBjb25zdHJ1Y3RvciAvIGRlc3RydWN0b3IgLyBpbml0LgorKwor K1NpbXVsYXRvcjo6U2ltdWxhdG9yKCkgeworKyAgc3RhY2tfID0gbnVsbHB0cjsKKysgIHN0YWNr TGltaXRfID0gMDsKKysgIHBjX21vZGlmaWVkXyA9IGZhbHNlOworKyAgaWNvdW50XyA9IDA7Cisr ICBicmVha19jb3VudF8gPSAwOworKyAgYnJlYWtfcGNfID0gbnVsbHB0cjsKKysgIGJyZWFrX2lu c3RyXyA9IDA7CisrICBzaW5nbGVfc3RlcHBpbmdfID0gZmFsc2U7CisrICBzaW5nbGVfc3RlcF9j YWxsYmFja18gPSBudWxscHRyOworKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXyA9IG51bGxw dHI7CisrCisrICBmb3IgKGludCBpID0gMDsgaSA8IFJlZ2lzdGVyOjprTnVtU2ltdVJlZ2lzdGVy czsgaSsrKSB7CisrICAgIHJlZ2lzdGVyc19baV0gPSAwOworKyAgfQorKyAgZm9yIChpbnQgaSA9 IDA7IGkgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzOyBpKyspIHsK KysgICAgRlBVcmVnaXN0ZXJzX1tpXSA9IDA7CisrICB9CisrCisrICBMUl8gPSAwOworKyAgQ1RS XyA9IDA7CisrICBDUl8gPSAwOworKyAgWEVSXyA9IDA7CisrICBGUFNDUl8gPSAwOworKyAgTExC aXRfID0gZmFsc2U7CisrICBMTEFkZHJfID0gMDsKKysgIGxhc3RMTFZhbHVlXyA9IDA7CisrCisr ICAvLyBJbml0aWFsaXplIFBDIGFuZCBMUiB0byBhIGtub3duIGJhZCB2YWx1ZSB0aGF0IHdpbGwg Y2F1c2UgYW4KKysgIC8vIGFjY2VzcyB2aW9sYXRpb24gaWYgdGhlIHNpbXVsYXRvciBldmVyIHRy aWVzIHRvIGV4ZWN1dGUgaXQuCisrICByZWdpc3RlcnNfW3BjXSA9IGJhZF9yYTsKKysgIExSXyA9 IGJhZF9yYTsKKysKKysgIGxhc3REZWJ1Z2dlcklucHV0XyA9IG51bGxwdHI7CisrfQorKworK2Jv b2wgU2ltdWxhdG9yOjppbml0KCkgeworKyAgc3RhdGljIGNvbnN0IHNpemVfdCBzdGFja1NpemUg PSAyICogMTAyNCAqIDEwMjQ7CisrICBzdGFja18gPSBqc19wb2RfbWFsbG9jPGNoYXI+KHN0YWNr U2l6ZSk7CisrICBpZiAoIXN0YWNrXykgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrCisr ICAvLyBMZWF2ZSBhIHNhZmV0eSBtYXJnaW4gb2YgMU1CIHRvIHByZXZlbnQgb3ZlcnJ1bm5pbmcg dGhlIHN0YWNrLgorKyAgc3RhY2tMaW1pdF8gPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o c3RhY2tfKSArIDEwMjQgKiAxMDI0OworKworKyAgLy8gVGhlIHNwIGlzIGluaXRpYWxpemVkIHRv IHBvaW50IHRvIHRoZSBib3R0b20gKGhpZ2ggYWRkcmVzcykgb2YgdGhlCisrICAvLyBhbGxvY2F0 ZWQgc3RhY2sgYXJlYS4KKysgIHJlZ2lzdGVyc19bc3BdID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2 NF90PihzdGFja18pICsgc3RhY2tTaXplIC0gNjQ7CisrCisrICAvLyBaZXJvLWluaXRpYWxpemUg VlIgbmFtZXNwYWNlLiBTaW11bGF0ZWQgUFBDNjQgZG9lcyBub3QgZ3VhcmFudGVlIGFueQorKyAg Ly8gdmFsdWUgaW4gVlJzIGF0IGVudHJ5LCBidXQgemVyb2luZyBhdm9pZHMgdW5pbml0aWFsaXpl ZC1yZWFkIGZhbHNlCisrICAvLyBwb3NpdGl2ZXMgaW4gdG9vbHMgYW5kIG1ha2VzIHJlZ3Jlc3Np b24gdHJhY2VzIGRldGVybWluaXN0aWMuCisrICBtZW1zZXQoVlJyZWdpc3RlcnNfLCAwLCBzaXpl b2YoVlJyZWdpc3RlcnNfKSk7CisrCisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrU2ltdWxhdG9y Ojp+U2ltdWxhdG9yKCkgeyBqc19mcmVlKHN0YWNrXyk7IH0KKysKKytTaW11bGF0b3JQcm9jZXNz OjpTaW11bGF0b3JQcm9jZXNzKCkKKysgICAgOiBjYWNoZUxvY2tfKG11dGV4aWQ6OlNpbXVsYXRv ckNhY2hlTG9jayksIHJlZGlyZWN0aW9uXyhudWxscHRyKSB7CisrICBpZiAoZ2V0ZW52KCJQUEM2 NF9TSU1fSUNBQ0hFX0NIRUNLUyIpKSB7CisrICAgIElDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50 ID0gMDsKKysgIH0KKyt9CisrCisrU2ltdWxhdG9yUHJvY2Vzczo6flNpbXVsYXRvclByb2Nlc3Mo KSB7CisrICBSZWRpcmVjdGlvbiogciA9IHJlZGlyZWN0aW9uXzsKKysgIHdoaWxlIChyKSB7Cisr ICAgIFJlZGlyZWN0aW9uKiBuZXh0ID0gci0+bmV4dF87CisrICAgIGpzX2RlbGV0ZShyKTsKKysg ICAgciA9IG5leHQ7CisrICB9CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQqIFNpbXVsYXRv cjo6UmVkaXJlY3ROYXRpdmVGdW5jdGlvbih2b2lkKiBuYXRpdmVGdW5jdGlvbiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJRnVuY3Rpb25UeXBlIHR5cGUpIHsK KysgIFJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbiA9IFJlZGlyZWN0aW9uOjpHZXQobmF0aXZlRnVu Y3Rpb24sIHR5cGUpOworKyAgcmV0dXJuIHJlZGlyZWN0aW9uLT5hZGRyZXNzT2ZTd2lJbnN0cnVj dGlvbigpOworK30KKysKKytTaW11bGF0b3IqIFNpbXVsYXRvcjo6Q3VycmVudCgpIHsKKysgIEpT Q29udGV4dCogY3ggPSBUbHNDb250ZXh0LmdldCgpOworKyAgTU9aX0FTU0VSVChDdXJyZW50VGhy ZWFkQ2FuQWNjZXNzUnVudGltZShjeC0+cnVudGltZSgpKSk7CisrICByZXR1cm4gY3gtPnNpbXVs YXRvcigpOworK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFJlZ2lzdGVyIGFj Y2Vzc29ycy4KKysKKyt2b2lkIFNpbXVsYXRvcjo6c2V0UmVnaXN0ZXIoaW50IHJlZywgaW50NjRf dCB2YWx1ZSkgeworKyAgTU9aX0FTU0VSVCgocmVnID49IDApICYmIChyZWcgPCBSZWdpc3Rlcjo6 a051bVNpbXVSZWdpc3RlcnMpKTsKKysgIGlmIChyZWcgPT0gcGMpIHsKKysgICAgcGNfbW9kaWZp ZWRfID0gdHJ1ZTsKKysgIH0KKysgIHJlZ2lzdGVyc19bcmVnXSA9IHZhbHVlOworK30KKysKKytp bnQ2NF90IFNpbXVsYXRvcjo6Z2V0UmVnaXN0ZXIoaW50IHJlZykgY29uc3QgeworKyAgTU9aX0FT U0VSVCgocmVnID49IDApICYmIChyZWcgPCBSZWdpc3Rlcjo6a051bVNpbXVSZWdpc3RlcnMpKTsK KysgIHJldHVybiByZWdpc3RlcnNfW3JlZ10gKyAoKHJlZyA9PSBwYykgPyBTaW1JbnN0cnVjdGlv bjo6a1BDUmVhZE9mZnNldCA6IDApOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6c2V0RnB1UmVn aXN0ZXIoaW50IGZwdXJlZywgaW50NjRfdCB2YWx1ZSkgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVn ID49IDApICYmCisrICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVy OjprTnVtRlBVUmVnaXN0ZXJzKSk7CisrICBGUFVyZWdpc3RlcnNfW2ZwdXJlZ10gPSB2YWx1ZTsK Kyt9CisrCisrdm9pZCBTaW11bGF0b3I6OnNldEZwdVJlZ2lzdGVyV29yZChpbnQgZnB1cmVnLCBp bnQzMl90IHZhbHVlKSB7CisrICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAg ICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMp KTsKKysgIGludDMyX3QqIHB3b3JkOworKyAgcHdvcmQgPSByZWludGVycHJldF9jYXN0PGludDMy X3QqPigmRlBVcmVnaXN0ZXJzX1tmcHVyZWddKTsKKysgICpwd29yZCA9IHZhbHVlOworK30KKysK KysvLyBQcm9tb3RlIGYzMiDihpIgZjY0IHByZXNlcnZpbmcgTmFOIHBheWxvYWQsIGxpa2UgUFBD NjQncyBgbGZzYCBhbmQKKysvLyBgeHNjdnNwZHBuYC4gVGhlIHBsYWluIEMgY2FzdCBgKGRvdWJs ZSlmMzJfbmFuYCBpcyBwZXJtaXR0ZWQgYnkgdGhlCisrLy8gc3RhbmRhcmQgdG8gcXVpZXQgYSBz aWduYWxpbmcgTmFOLCB3aGljaCBvbiB4ODYvQVJNIGhvc3RzIHZpc2libHkKKysvLyB0cmFuc2Zv cm1zIDB4N0ZBMDAwMDAgKHNOYU4pIGludG8gYSBxTmFOIHN1Y2ggYXMgMHg3RkUwMDAwMCDigJQg YnJlYWtpbmcKKysvLyBldmVyeSB3YXNtIHRlc3QgdGhhdCBsb2FkcyBhIGNvbnN0YW50IHNOYU4g Yml0IHBhdHRlcm4uIE1hbnVhbGx5CisrLy8gcmVjb25zdHJ1Y3QgdGhlIGY2NCBOYU4gd2l0aCB0 aGUgc2FtZSBzaWduICsgcGF5bG9hZCAocGF5bG9hZCBzaGlmdGVkCisrLy8gbGVmdCBieSAyOSB0 byBmaWxsIHRoZSB3aWRlciBtYW50aXNzYSkuCisrc3RhdGljIGRvdWJsZSBwcm9tb3RlRmxvYXRQ cmVzZXJ2aW5nTmFOKGZsb2F0IGYpIHsKKysgIHVpbnQzMl90IGJpdHM7CisrICBtZW1jcHkoJmJp dHMsICZmLCBzaXplb2YoYml0cykpOworKyAgaWYgKChiaXRzICYgMHg3RjgwMDAwMHUpID09IDB4 N0Y4MDAwMDB1ICYmIChiaXRzICYgMHgwMDdGRkZGRnUpICE9IDB1KSB7CisrICAgIHVpbnQ2NF90 IHNpZ24gPSB1aW50NjRfdChiaXRzID4+IDMxKSAmIDF1OworKyAgICB1aW50NjRfdCBwYXlsb2Fk ID0gdWludDY0X3QoYml0cyAmIDB4MDA3RkZGRkZ1KTsKKysgICAgdWludDY0X3QgZGJpdHMgPSAo c2lnbiA8PCA2MykgfCAodWludDY0X3QoMHg3RkZ1KSA8PCA1MikgfCAocGF5bG9hZCA8PCAyOSk7 CisrICAgIGRvdWJsZSBkOworKyAgICBtZW1jcHkoJmQsICZkYml0cywgc2l6ZW9mKGQpKTsKKysg ICAgcmV0dXJuIGQ7CisrICB9CisrICByZXR1cm4gKGRvdWJsZSlmOworK30KKysKKysvLyBEZW1v dGUgZjY0IOKGkiBmMzIgcHJlc2VydmluZyBOYU4gcGF5bG9hZCAobm9uLXNpZ25hbGluZzogbWF0 Y2hlcyBQUEM2NAorKy8vIGBzdGZzYCAvIGB4c2N2ZHBzcG5gLCBhbmQgd2FzbSBgbGZzYC1lcXVp dmFsZW50IHN0b3JlcykuIFRydW5jYXRlcyB0aGUKKysvLyBsb3dlciAyOSBiaXRzIG9mIHRoZSBm NjQgcGF5bG9hZCAodGhvc2UgYml0cyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4KKysvLyB0aGUg bmFycm93ZXIgZjMyIG1hbnRpc3NhKTsgaWYgdGhlIHRydW5jYXRpb24gd291bGQgeWllbGQgYSBw YXlsb2FkIG9mCisrLy8gemVybyAod2hpY2ggd291bGQgZGVncmFkZSB0aGUgTmFOIHRvIGFuIElu ZmluaXR5KSwgZm9yY2UgdGhlIExTQiBzbworKy8vIHRoZSByZXN1bHQgaXMgc3RpbGwgYSBOYU4u IFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIE5PVCBzZXQgdGhlIHF1aWV0CisrLy8gYml0IOKAlCB0 aGF0J3MgdGhlIGpvYiBvZiB0aGUgZXhwbGljaXQtcXVpZXRpbmcgb3AgYHhzY3ZkcHNwYCBhbmQK KysvLyBmMzIuZGVtb3RlX2Y2NCdzIHdhc20tbGV2ZWwgbG93ZXJpbmcuCisrc3RhdGljIGZsb2F0 IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZG91YmxlIGQpIHsKKysgIHVpbnQ2NF90IGJpdHM7 CisrICBtZW1jcHkoJmJpdHMsICZkLCBzaXplb2YoYml0cykpOworKyAgaWYgKChiaXRzICYgMHg3 RkYwMDAwMDAwMDAwMDAwVUxMKSA9PSAweDdGRjAwMDAwMDAwMDAwMDBVTEwgJiYKKysgICAgICAo Yml0cyAmIDB4MDAwRkZGRkZGRkZGRkZGRlVMTCkgIT0gMCkgeworKyAgICB1aW50MzJfdCBzaWdu ID0gdWludDMyX3QoYml0cyA+PiA2MykgJiAxdTsKKysgICAgdWludDMyX3QgcGF5bG9hZCA9IHVp bnQzMl90KChiaXRzID4+IDI5KSAmIDB4MDA3RkZGRkZ1KTsKKysgICAgaWYgKHBheWxvYWQgPT0g MCkgcGF5bG9hZCA9IDE7CisrICAgIHVpbnQzMl90IGZiaXRzID0gKHNpZ24gPDwgMzEpIHwgMHg3 RjgwMDAwMHUgfCBwYXlsb2FkOworKyAgICBmbG9hdCBmOworKyAgICBtZW1jcHkoJmYsICZmYml0 cywgc2l6ZW9mKGYpKTsKKysgICAgcmV0dXJuIGY7CisrICB9CisrICByZXR1cm4gKGZsb2F0KWQ7 CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRGcHVSZWdpc3RlckZsb2F0KGludCBmcHVyZWcs IGZsb2F0IHZhbHVlKSB7CisrICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAg ICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMp KTsKKysgIC8vIEVMRnYyIEFCSTogc2luZ2xlLXByZWNpc2lvbiB2YWx1ZXMgaW4gRlBScyBhcmUg c3RvcmVkIGFzIHRoZWlyCisrICAvLyBkb3VibGUtcHJlY2lzaW9uIHJlcHJlc2VudGF0aW9uLiBQ cm9tb3RlIGFuZCBzdG9yZSB0aGUgZnVsbCA4IGJ5dGVzLAorKyAgLy8gbm90IGp1c3QgdGhlIGxv dyA0LiAoT3RoZXJ3aXNlIHRoZSB1cHBlciA0IGJ5dGVzIGFyZSBzdGFsZSwgbWF0Y2hpbmcKKysg IC8vIHRoZSBsYXlvdXQgdGhhdCBmY3RpZC9mY2ZpZC9sZmQgd291bGQgcmVhZCBidXQgTk9UIHdo YXQgdGhlIEpJVCBhbmQKKysgIC8vIHRoZSBDIEFCSSBleHBlY3QgZm9yIGEgJ2Zsb2F0JyBwYXJh bWV0ZXIuKSBVc2UgdGhlIE5hTi1wcmVzZXJ2aW5nCisrICAvLyBoZWxwZXIgc28gYSBzaWduYWxp bmctTmFOIHJldHVybiB2YWx1ZSBpc24ndCBxdWlldGVkIGludG8gYSBxTmFOLgorKyAgZG91Ymxl IHByb21vdGVkID0gcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTih2YWx1ZSk7CisrICBtZW1jcHko JkZQVXJlZ2lzdGVyc19bZnB1cmVnXSwgJnByb21vdGVkLCBzaXplb2YocHJvbW90ZWQpKTsKKyt9 CisrCisrdm9pZCBTaW11bGF0b3I6OnNldEZwdVJlZ2lzdGVyRG91YmxlKGludCBmcHVyZWcsIGRv dWJsZSB2YWx1ZSkgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCisrICAgICAgICAg ICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7 CisrICAqbW96aWxsYTo6Qml0d2lzZUNhc3Q8ZG91YmxlKj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVn XSkgPSB2YWx1ZTsKKyt9CisrCisraW50NjRfdCBTaW11bGF0b3I6OmdldEZwdVJlZ2lzdGVyKGlu dCBmcHVyZWcpIGNvbnN0IHsKKysgIE1PWl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAmJgorKyAgICAg ICAgICAgICAoZnB1cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVy cykpOworKyAgcmV0dXJuIEZQVXJlZ2lzdGVyc19bZnB1cmVnXTsKKyt9CisrCisraW50MzJfdCBT aW11bGF0b3I6OmdldEZwdVJlZ2lzdGVyV29yZChpbnQgZnB1cmVnKSBjb25zdCB7CisrICBNT1pf QVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRv cjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKKysgIHJldHVybiAqbW96aWxsYTo6 Qml0d2lzZUNhc3Q8aW50MzJfdCo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pOworK30KKysKKytp bnQzMl90IFNpbXVsYXRvcjo6Z2V0RnB1UmVnaXN0ZXJTaWduZWRXb3JkKGludCBmcHVyZWcpIGNv bnN0IHsKKysgIE1PWl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAmJgorKyAgICAgICAgICAgICAoZnB1 cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOworKyAgcmV0 dXJuICptb3ppbGxhOjpCaXR3aXNlQ2FzdDxpbnQzMl90Kj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVn XSk7CisrfQorKworK2Zsb2F0IFNpbXVsYXRvcjo6Z2V0RnB1UmVnaXN0ZXJGbG9hdChpbnQgZnB1 cmVnKSBjb25zdCB7CisrICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAgICAg ICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsK KysgIC8vIEVMRnYyIEFCSTogc2luZ2xlLXByZWNpc2lvbiB2YWx1ZXMgYXJlIHBhc3NlZC9yZXR1 cm5lZCBpbiBGUFJzIGFzIHRoZWlyCisrICAvLyBkb3VibGUtcHJlY2lzaW9uIHJlcHJlc2VudGF0 aW9uLiBSZWFkIHRoZSBmdWxsIDggYnl0ZXMgYXMgZG91YmxlLCB0aGVuCisrICAvLyBuYXJyb3cg dG8gZmxvYXQg4oCUIG1hdGNoaW5nIHRoZSBgZnJzcGAgdGhlIEMgY2FsbGVlIHdvdWxkIGRvLCBh bmQgbWF0Y2hpbmcKKysgIC8vIHdoYXQgcmVhbCBQUEM2NCBoYXJkd2FyZSBzZWVzIHdoZW4gdGhl IEZQUiB3YXMgbG9hZGVkIHZpYSBgbGZzYC4gVXNlIHRoZQorKyAgLy8gTmFOLXByZXNlcnZpbmcg aGVscGVyIHNvIGEgc2lnbmFsaW5nLU5hTiBwYXJhbWV0ZXIgaXNuJ3QgcXVpZXRlZC4KKysgIGRv dWJsZSBwcm9tb3RlZDsKKysgIG1lbWNweSgmcHJvbW90ZWQsICZGUFVyZWdpc3RlcnNfW2ZwdXJl Z10sIHNpemVvZihwcm9tb3RlZCkpOworKyAgcmV0dXJuIGRlbW90ZURvdWJsZVByZXNlcnZpbmdO YU4ocHJvbW90ZWQpOworK30KKysKKytkb3VibGUgU2ltdWxhdG9yOjpnZXRGcHVSZWdpc3RlckRv dWJsZShpbnQgZnB1cmVnKSBjb25zdCB7CisrICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYK KysgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVS ZWdpc3RlcnMpKTsKKysgIHJldHVybiAqbW96aWxsYTo6Qml0d2lzZUNhc3Q8ZG91YmxlKj4oJkZQ VXJlZ2lzdGVyc19bZnB1cmVnXSk7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRWUkJ5dGVz KGludCB2cmVnLCBjb25zdCB1aW50OF90IGJ5dGVzWzE2XSkgeworKyAgTU9aX0FTU0VSVCgodnJl ZyA+PSAwKSAmJiAodnJlZyA8IGtOdW1WUlJlZ2lzdGVycykpOworKyAgbWVtY3B5KFZScmVnaXN0 ZXJzX1t2cmVnXSwgYnl0ZXMsIDE2KTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmdldFZSQnl0 ZXMoaW50IHZyZWcsIHVpbnQ4X3QgYnl0ZXNbMTZdKSBjb25zdCB7CisrICBNT1pfQVNTRVJUKCh2 cmVnID49IDApICYmICh2cmVnIDwga051bVZSUmVnaXN0ZXJzKSk7CisrICBtZW1jcHkoYnl0ZXMs IFZScmVnaXN0ZXJzX1t2cmVnXSwgMTYpOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6Z2V0VlNS MTI4KGludCB2c3IsIHVpbnQ4X3QgYnl0ZXNbMTZdKSBjb25zdCB7CisrICBNT1pfQVNTRVJUKCh2 c3IgPj0gMCkgJiYgKHZzciA8IGtOdW1GUFVSZWdpc3RlcnMgKyBrTnVtVlJSZWdpc3RlcnMpKTsK KysgIGlmICh2c3IgPCBrTnVtRlBVUmVnaXN0ZXJzKSB7CisrICAgIC8vIFZTUiAwLTMxOiBGUFIg dmlldy4gVGhlIEZQUiBzY2FsYXIgbGl2ZXMgaW4gQkUgRFcwIG9mIHRoZSBWU1IsCisrICAgIC8v IHdoaWNoIG9uIFBQQzY0TEUgcmVnaXN0ZXIgc3RvcmFnZSBtYXBzIHRvIExFIGJ5dGVzIDgtMTUu CisrICAgIC8vIERXMSBpcyB1bmRlZmluZWQgcGVyIElTQTsgd2UgbW9kZWwgaXQgYXMgemVyby4K KysgICAgLy8gYGxmZCBmMCwobWVtKTsgeHhsb3IgPHZyPixmMCxmMDsgc3R4dnggPHZyPiwuLi5g IHdyaXRlcyB0aGUKKysgICAgLy8gZG91YmxlJ3MgOCBieXRlcyB0byB0aGUgSElHSCBoYWxmIG9m IHRoZSAxNi1ieXRlIHN0b3JlIChMRQorKyAgICAvLyBieXRlcyA4LTE1KS4KKysgICAgaW50NjRf dCB2YWwgPSBGUFVyZWdpc3RlcnNfW3Zzcl07CisrICAgIG1lbXNldChieXRlcywgMCwgOCk7Cisr ICAgIG1lbWNweShieXRlcyArIDgsICZ2YWwsIDgpOworKyAgfSBlbHNlIHsKKysgICAgbWVtY3B5 KGJ5dGVzLCBWUnJlZ2lzdGVyc19bdnNyIC0ga051bUZQVVJlZ2lzdGVyc10sIDE2KTsKKysgIH0K Kyt9CisrCisrdm9pZCBTaW11bGF0b3I6OnNldFZTUjEyOChpbnQgdnNyLCBjb25zdCB1aW50OF90 IGJ5dGVzWzE2XSkgeworKyAgTU9aX0FTU0VSVCgodnNyID49IDApICYmICh2c3IgPCBrTnVtRlBV UmVnaXN0ZXJzICsga051bVZSUmVnaXN0ZXJzKSk7CisrICBpZiAodnNyIDwga051bUZQVVJlZ2lz dGVycykgeworKyAgICAvLyBGUFIgc2NhbGFyIGF0IEJFIERXMCA9IExFIGJ5dGVzIDgtMTUuIERX MSBpcyBhcmNoaXRlY3R1cmFsbHkKKysgICAgLy8gZGlzY2FyZGVkIG9uIFZTUi10by1GUFIgd3Jp dGVzLgorKyAgICBpbnQ2NF90IHZhbDsKKysgICAgbWVtY3B5KCZ2YWwsIGJ5dGVzICsgOCwgOCk7 CisrICAgIEZQVXJlZ2lzdGVyc19bdnNyXSA9IHZhbDsKKysgIH0gZWxzZSB7CisrICAgIG1lbWNw eShWUnJlZ2lzdGVyc19bdnNyIC0ga051bUZQVVJlZ2lzdGVyc10sIGJ5dGVzLCAxNik7CisrICB9 CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxsUmVzdWx0RG91YmxlKGRvdWJsZSByZXN1 bHQpIHsKKysgIHNldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEsIHJlc3VsdCk7Cisr fQorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxsUmVzdWx0RmxvYXQoZmxvYXQgcmVzdWx0KSB7 CisrICBzZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjEsIHJlc3VsdCk7CisrfQorKwor K3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxsUmVzdWx0KGludDY0X3QgcmVzKSB7IHNldFJlZ2lzdGVy KHIzLCByZXMpOyB9CisrCisrI2lmZGVmIFhQX0RBUldJTgorK3ZvaWQgU2ltdWxhdG9yOjpzZXRD YWxsUmVzdWx0KGludHB0cl90IHJlcykgeworKyAgc2V0UmVnaXN0ZXIocjMsIEk2NChyZXMpKTsK Kyt9CisrI2VuZGlmCisrCisrdm9pZCBTaW11bGF0b3I6OnNldENhbGxSZXN1bHQoX19pbnQxMjgg cmVzKSB7CisrICBzZXRSZWdpc3RlcihyMywgSTY0KHJlcykpOworKyAgc2V0UmVnaXN0ZXIocjQs IEk2NChyZXMgPj4gNjQpKTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OnNldF9wYyhpbnQ2NF90 IHZhbHVlKSB7CisrICBwY19tb2RpZmllZF8gPSB0cnVlOworKyAgcmVnaXN0ZXJzX1twY10gPSB2 YWx1ZTsKKyt9CisrCisrYm9vbCBTaW11bGF0b3I6Omhhc19iYWRfcGMoKSBjb25zdCB7CisrICBy ZXR1cm4gKChyZWdpc3RlcnNfW3BjXSA9PSBiYWRfcmEpIHx8IChyZWdpc3RlcnNfW3BjXSA9PSBl bmRfc2ltX3BjKSk7CisrfQorKworK2ludDY0X3QgU2ltdWxhdG9yOjpnZXRfcGMoKSBjb25zdCB7 IHJldHVybiByZWdpc3RlcnNfW3BjXTsgfQorKworK0pTOjpQcm9maWxpbmdGcmFtZUl0ZXJhdG9y OjpSZWdpc3RlclN0YXRlIFNpbXVsYXRvcjo6cmVnaXN0ZXJTdGF0ZSgpIHsKKysgIHdhc206OlJl Z2lzdGVyU3RhdGUgc3RhdGU7CisrICBzdGF0ZS5wYyA9ICh2b2lkKilnZXRfcGMoKTsKKysgIHN0 YXRlLmZwID0gKHZvaWQqKWdldFJlZ2lzdGVyKGZwKTsKKysgIHN0YXRlLnNwID0gKHZvaWQqKWdl dFJlZ2lzdGVyKHNwKTsKKysgIHN0YXRlLmxyID0gKHZvaWQqKWdldExSKCk7CisrICByZXR1cm4g c3RhdGU7CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gTWVtb3J5IGFjY2Vz cyBoZWxwZXJzLgorKworK3VpbnQ4X3QgU2ltdWxhdG9yOjpyZWFkQlUodWludDY0X3QgYWRkcikg eworKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAxKSkgeworKyAgICByZXR1cm4gMHhm ZjsKKysgIH0KKysgIHVpbnQ4X3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGFk ZHIpOworKyAgcmV0dXJuICpwdHI7CisrfQorKworK2ludDhfdCBTaW11bGF0b3I6OnJlYWRCKHVp bnQ2NF90IGFkZHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKKysg ICAgcmV0dXJuIC0xOworKyAgfQorKyAgaW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGlu dDhfdCo+KGFkZHIpOworKyAgcmV0dXJuICpwdHI7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjp3 cml0ZUIodWludDY0X3QgYWRkciwgdWludDhfdCB2YWx1ZSkgeworKyAgaWYgKGhhbmRsZVdhc21T ZWdGYXVsdChhZGRyLCAxKSkgeworKyAgICByZXR1cm47CisrICB9CisrICB1aW50OF90KiBwdHIg PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihhZGRyKTsKKysgICpwdHIgPSB2YWx1ZTsKKyt9 CisrCisrdm9pZCBTaW11bGF0b3I6OndyaXRlQih1aW50NjRfdCBhZGRyLCBpbnQ4X3QgdmFsdWUp IHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKKysgICAgcmV0dXJuOwor KyAgfQorKyAgaW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KGFkZHIpOwor KyAgKnB0ciA9IHZhbHVlOworK30KKysKKyt1aW50MTZfdCBTaW11bGF0b3I6OnJlYWRIVSh1aW50 NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2Vn RmF1bHQoYWRkciwgMikpIHsKKysgICAgcmV0dXJuIDB4ZmZmZjsKKysgIH0KKysgIHVpbnQxNl90 KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYWRkcik7CisrICByZXR1cm4gKnB0 cjsKKyt9CisrCisraW50MTZfdCBTaW11bGF0b3I6OnJlYWRIKHVpbnQ2NF90IGFkZHIsIFNpbUlu c3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAyKSkg eworKyAgICByZXR1cm4gLTE7CisrICB9CisrICBpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9j YXN0PGludDE2X3QqPihhZGRyKTsKKysgIHJldHVybiAqcHRyOworK30KKysKKyt2b2lkIFNpbXVs YXRvcjo6d3JpdGVIKHVpbnQ2NF90IGFkZHIsIHVpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKKysgICAg cmV0dXJuOworKyAgfQorKyAgdWludDE2X3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2 X3QqPihhZGRyKTsKKysgIExMQml0XyA9IGZhbHNlOworKyAgKnB0ciA9IHZhbHVlOworK30KKysK Kyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVIKHVpbnQ2NF90IGFkZHIsIGludDE2X3QgdmFsdWUsIFNp bUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAy KSkgeworKyAgICByZXR1cm47CisrICB9CisrICBpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9j YXN0PGludDE2X3QqPihhZGRyKTsKKysgIExMQml0XyA9IGZhbHNlOworKyAgKnB0ciA9IHZhbHVl OworK30KKysKKyt1aW50MzJfdCBTaW11bGF0b3I6OnJlYWRXVSh1aW50NjRfdCBhZGRyLCBTaW1J bnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgNCkp IHsKKysgICAgcmV0dXJuIC0xOworKyAgfQorKyAgdWludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0 X2Nhc3Q8dWludDMyX3QqPihhZGRyKTsKKysgIHJldHVybiAqcHRyOworK30KKysKKytpbnQzMl90 IFNpbXVsYXRvcjo6cmVhZFcodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7 CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDQpKSB7CisrICAgIHJldHVybiAtMTsK KysgIH0KKysgIGludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGFkZHIp OworKyAgcmV0dXJuICpwdHI7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZVcodWludDY0 X3QgYWRkciwgdWludDMyX3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA0KSkgeworKyAgICByZXR1cm47CisrICB9CisrICB1 aW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGFkZHIpOworKyAgTExC aXRfID0gZmFsc2U7CisrICAqcHRyID0gdmFsdWU7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjp3 cml0ZVcodWludDY0X3QgYWRkciwgaW50MzJfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDQpKSB7CisrICAgIHJldHVybjsK KysgIH0KKysgIGludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGFkZHIp OworKyAgTExCaXRfID0gZmFsc2U7CisrICAqcHRyID0gdmFsdWU7CisrfQorKworK2ludDY0X3Qg U2ltdWxhdG9yOjpyZWFkRFcodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7 CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDgpKSB7CisrICAgIHJldHVybiAtMTsK KysgIH0KKysgIGludDY0X3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KGFkZHIp OworKyAgcmV0dXJuICpwdHI7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZURXKHVpbnQ2 NF90IGFkZHIsIGludDY0X3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA4KSkgeworKyAgICByZXR1cm47CisrICB9CisrICBp bnQ2NF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihhZGRyKTsKKysgIExMQml0 XyA9IGZhbHNlOworKyAgKnB0ciA9IHZhbHVlOworK30KKysKKytkb3VibGUgU2ltdWxhdG9yOjpy ZWFkRCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5k bGVXYXNtU2VnRmF1bHQoYWRkciwgOCkpIHsKKysgICAgcmV0dXJuIE5BTjsKKysgIH0KKysgIGRv dWJsZSogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihhZGRyKTsKKysgIHJldHVybiAq cHRyOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVEKHVpbnQ2NF90IGFkZHIsIGRvdWJs ZSB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0Zh dWx0KGFkZHIsIDgpKSB7CisrICAgIHJldHVybjsKKysgIH0KKysgIGRvdWJsZSogcHRyID0gcmVp bnRlcnByZXRfY2FzdDxkb3VibGUqPihhZGRyKTsKKysgIExMQml0XyA9IGZhbHNlOworKyAgKnB0 ciA9IHZhbHVlOworK30KKysKKysvLyBCeXRlLXdpZGUgbG9hZC1yZXNlcnZlIC8gc3RvcmUtY29u ZGl0aW9uYWwgKGxiYXJ4IC8gc3RiY3guKS4KKysvLyBCeXRlIGFjY2Vzc2VzIGhhdmUgbm8gYWxp Z25tZW50IHJlcXVpcmVtZW50LgorK3VpbnQ4X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkQih1aW50 NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2Vn RmF1bHQoYWRkciwgMSkpIHsKKysgICAgcmV0dXJuIDA7CisrICB9CisrICB2b2xhdGlsZSB1aW50 OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIHVpbnQ4X3QqPihhZGRyKTsKKysg IHVpbnQ4X3QgdmFsdWUgPSAqcHRyOworKyAgbGFzdExMVmFsdWVfID0gdmFsdWU7CisrICBMTEFk ZHJfID0gYWRkcjsKKysgIExMQml0XyA9IHRydWU7CisrICByZXR1cm4gdmFsdWU7CisrfQorKwor K2ludCBTaW11bGF0b3I6OnN0b3JlQ29uZGl0aW9uYWxCKHVpbnQ2NF90IGFkZHIsIHVpbnQ4X3Qg dmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKSB7CisrICBpZiAoYWRkciAhPSBMTEFkZHJfKSB7CisrICAgIHByaW50Zigic3RiY3gu IHRvIGJhZCBhZGRyZXNzOiAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIKKysg ICAgICAgICAgICIsIGV4cGVjdGVkOiAweCUwMTYiIFBSSXhQVFIgIlxuIiwKKysgICAgICAgICAg IGFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwgTExBZGRyXyk7CisrICAg IE1PWl9DUkFTSCgpOworKyAgfQorKyAgU2hhcmVkTWVtPHVpbnQ4X3QqPiBwdHIgPQorKyAgICAg IFNoYXJlZE1lbTx1aW50OF90Kj46OnNoYXJlZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihh ZGRyKSk7CisrICBpZiAoIUxMQml0XykgeworKyAgICByZXR1cm4gMDsKKysgIH0KKysgIExMQml0 XyA9IGZhbHNlOworKyAgTExBZGRyXyA9IDA7CisrICB1aW50OF90IGV4cGVjdGVkID0gdWludDhf dChsYXN0TExWYWx1ZV8pOworKyAgdWludDhfdCBvbGQgPQorKyAgICAgIEF0b21pY09wZXJhdGlv bnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNzdChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7CisrICByZXR1 cm4gKG9sZCA9PSBleHBlY3RlZCkgPyAxIDogMDsKKyt9CisrCisrLy8gSGFsZndvcmQtd2lkZSBs b2FkLXJlc2VydmUgLyBzdG9yZS1jb25kaXRpb25hbCAobGhhcnggLyBzdGhjeC4pLgorKy8vIDIt Ynl0ZSBhbGlnbmVkIHBlciBJU0EuCisrdWludDE2X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkSCh1 aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmICgoYWRkciAmIDEp ID09IDApIHsKKysgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAyKSkgeworKyAgICAg IHJldHVybiAwOworKyAgICB9CisrICAgIHZvbGF0aWxlIHVpbnQxNl90KiBwdHIgPSByZWludGVy cHJldF9jYXN0PHZvbGF0aWxlIHVpbnQxNl90Kj4oYWRkcik7CisrICAgIHVpbnQxNl90IHZhbHVl ID0gKnB0cjsKKysgICAgbGFzdExMVmFsdWVfID0gdmFsdWU7CisrICAgIExMQWRkcl8gPSBhZGRy OworKyAgICBMTEJpdF8gPSB0cnVlOworKyAgICByZXR1cm4gdmFsdWU7CisrICB9CisrICBwcmlu dGYoIlVuYWxpZ25lZCBsaGFyeCBhdCAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQ VFIgIlxuIiwgYWRkciwKKysgICAgICAgICByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0 cikpOworKyAgTU9aX0NSQVNIKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisraW50IFNpbXVsYXRv cjo6c3RvcmVDb25kaXRpb25hbEgodWludDY0X3QgYWRkciwgdWludDE2X3QgdmFsdWUsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Cisr ICBpZiAoYWRkciAhPSBMTEFkZHJfKSB7CisrICAgIHByaW50Zigic3RoY3guIHRvIGJhZCBhZGRy ZXNzOiAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIKKysgICAgICAgICAgICIs IGV4cGVjdGVkOiAweCUwMTYiIFBSSXhQVFIgIlxuIiwKKysgICAgICAgICAgIGFkZHIsIHJlaW50 ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwgTExBZGRyXyk7CisrICAgIE1PWl9DUkFTSCgp OworKyAgfQorKyAgaWYgKChhZGRyICYgMSkgPT0gMCkgeworKyAgICBTaGFyZWRNZW08dWludDE2 X3QqPiBwdHIgPQorKyAgICAgICAgU2hhcmVkTWVtPHVpbnQxNl90Kj46OnNoYXJlZChyZWludGVy cHJldF9jYXN0PHVpbnQxNl90Kj4oYWRkcikpOworKyAgICBpZiAoIUxMQml0XykgeworKyAgICAg IHJldHVybiAwOworKyAgICB9CisrICAgIExMQml0XyA9IGZhbHNlOworKyAgICBMTEFkZHJfID0g MDsKKysgICAgdWludDE2X3QgZXhwZWN0ZWQgPSB1aW50MTZfdChsYXN0TExWYWx1ZV8pOworKyAg ICB1aW50MTZfdCBvbGQgPQorKyAgICAgICAgQXRvbWljT3BlcmF0aW9uczo6Y29tcGFyZUV4Y2hh bmdlU2VxQ3N0KHB0ciwgZXhwZWN0ZWQsIHZhbHVlKTsKKysgICAgcmV0dXJuIChvbGQgPT0gZXhw ZWN0ZWQpID8gMSA6IDA7CisrICB9CisrICBwcmludGYoIlVuYWxpZ25lZCBzdGhjeC4gYXQgMHgl MDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIsIGFkZHIsCisrICAgICAgICAg cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKKysgIE1PWl9DUkFTSCgpOworKyAg cmV0dXJuIDA7CisrfQorKworK2ludDMyX3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkVyh1aW50NjRf dCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmICgoYWRkciAmIDMpID09IDAp IHsKKysgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA0KSkgeworKyAgICAgIHJldHVy biAtMTsKKysgICAgfQorKworKyAgICB2b2xhdGlsZSBpbnQzMl90KiBwdHIgPSByZWludGVycHJl dF9jYXN0PHZvbGF0aWxlIGludDMyX3QqPihhZGRyKTsKKysgICAgaW50MzJfdCB2YWx1ZSA9ICpw dHI7CisrICAgIGxhc3RMTFZhbHVlXyA9IHZhbHVlOworKyAgICBMTEFkZHJfID0gYWRkcjsKKysg ICAgTExCaXRfID0gdHJ1ZTsKKysgICAgcmV0dXJuIHZhbHVlOworKyAgfQorKyAgcHJpbnRmKCJV bmFsaWduZWQgbHdhcnggYXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJc biIsIGFkZHIsCisrICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsK KysgIE1PWl9DUkFTSCgpOworKyAgcmV0dXJuIDA7CisrfQorKworK2ludCBTaW11bGF0b3I6OnN0 b3JlQ29uZGl0aW9uYWxXKHVpbnQ2NF90IGFkZHIsIGludDMyX3QgdmFsdWUsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAo YWRkciAhPSBMTEFkZHJfKSB7CisrICAgIHByaW50Zigic3R3Y3guIHRvIGJhZCBhZGRyZXNzOiAw eCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIKKysgICAgICAgICAgICIsIGV4cGVj dGVkOiAweCUwMTYiIFBSSXhQVFIgIlxuIiwKKysgICAgICAgICAgIGFkZHIsIHJlaW50ZXJwcmV0 X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwgTExBZGRyXyk7CisrICAgIE1PWl9DUkFTSCgpOworKyAg fQorKworKyAgaWYgKChhZGRyICYgMykgPT0gMCkgeworKyAgICBTaGFyZWRNZW08aW50MzJfdCo+ IHB0ciA9CisrICAgICAgICBTaGFyZWRNZW08aW50MzJfdCo+OjpzaGFyZWQocmVpbnRlcnByZXRf Y2FzdDxpbnQzMl90Kj4oYWRkcikpOworKworKyAgICBpZiAoIUxMQml0XykgeworKyAgICAgIHJl dHVybiAwOworKyAgICB9CisrCisrICAgIExMQml0XyA9IGZhbHNlOworKyAgICBMTEFkZHJfID0g MDsKKysgICAgaW50MzJfdCBleHBlY3RlZCA9IGludDMyX3QobGFzdExMVmFsdWVfKTsKKysgICAg aW50MzJfdCBvbGQgPQorKyAgICAgICAgQXRvbWljT3BlcmF0aW9uczo6Y29tcGFyZUV4Y2hhbmdl U2VxQ3N0KHB0ciwgZXhwZWN0ZWQsIHZhbHVlKTsKKysgICAgcmV0dXJuIChvbGQgPT0gZXhwZWN0 ZWQpID8gMSA6IDA7CisrICB9CisrICBwcmludGYoIlVuYWxpZ25lZCBzdHdjeC4gYXQgMHglMDE2 IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIsIGFkZHIsCisrICAgICAgICAgcmVp bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKKysgIE1PWl9DUkFTSCgpOworKyAgcmV0 dXJuIDA7CisrfQorKworK2ludDY0X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkRCh1aW50NjRfdCBh ZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmICgoYWRkciAmIGtQb2ludGVyQWxp Z25tZW50TWFzaykgPT0gMCkgeworKyAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDgp KSB7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHZvbGF0aWxlIGludDY0X3Qq IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgaW50NjRfdCo+KGFkZHIpOworKyAgICBp bnQ2NF90IHZhbHVlID0gKnB0cjsKKysgICAgbGFzdExMVmFsdWVfID0gdmFsdWU7CisrICAgIExM QWRkcl8gPSBhZGRyOworKyAgICBMTEJpdF8gPSB0cnVlOworKyAgICByZXR1cm4gdmFsdWU7Cisr ICB9CisrICBwcmludGYoIlVuYWxpZ25lZCBsZGFyeCBhdCAweCUwMTYiIFBSSXg2NCAiLCBwYz0w eCUwMTYiIFBSSXhQVFIgIlxuIiwgYWRkciwKKysgICAgICAgICByZWludGVycHJldF9jYXN0PGlu dHB0cl90PihpbnN0cikpOworKyAgTU9aX0NSQVNIKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisr aW50IFNpbXVsYXRvcjo6c3RvcmVDb25kaXRpb25hbEQodWludDY0X3QgYWRkciwgaW50NjRfdCB2 YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbiog aW5zdHIpIHsKKysgIGlmIChhZGRyICE9IExMQWRkcl8pIHsKKysgICAgcHJpbnRmKCJzdGRjeC4g dG8gYmFkIGFkZHJlc3M6IDB4JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUgorKyAg ICAgICAgICAgIiwgZXhwZWN0ZWQ6IDB4JTAxNiIgUFJJeFBUUiAiXG4iLAorKyAgICAgICAgICAg YWRkciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpLCBMTEFkZHJfKTsKKysgICAg TU9aX0NSQVNIKCk7CisrICB9CisrCisrICBpZiAoKGFkZHIgJiBrUG9pbnRlckFsaWdubWVudE1h c2spID09IDApIHsKKysgICAgU2hhcmVkTWVtPGludDY0X3QqPiBwdHIgPQorKyAgICAgICAgU2hh cmVkTWVtPGludDY0X3QqPjo6c2hhcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KGFkZHIp KTsKKysKKysgICAgaWYgKCFMTEJpdF8pIHsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKwor KyAgICBMTEJpdF8gPSBmYWxzZTsKKysgICAgTExBZGRyXyA9IDA7CisrICAgIGludDY0X3QgZXhw ZWN0ZWQgPSBsYXN0TExWYWx1ZV87CisrICAgIGludDY0X3Qgb2xkID0KKysgICAgICAgIEF0b21p Y09wZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNzdChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7 CisrICAgIHJldHVybiAob2xkID09IGV4cGVjdGVkKSA/IDEgOiAwOworKyAgfQorKyAgcHJpbnRm KCJVbmFsaWduZWQgc3RkY3guIGF0IDB4JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBU UiAiXG4iLCBhZGRyLAorKyAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry KSk7CisrICBNT1pfQ1JBU0goKTsKKysgIHJldHVybiAwOworK30KKysKKysvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorKy8vIFN0YWNrIGxpbWl0IC8gcmVjdXJzaW9uIGhlbHBlcnMuCisrCisrdWlu dHB0cl90IFNpbXVsYXRvcjo6c3RhY2tMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrTGltaXRf OyB9CisrCisrdWludHB0cl90KiBTaW11bGF0b3I6OmFkZHJlc3NPZlN0YWNrTGltaXQoKSB7IHJl dHVybiAmc3RhY2tMaW1pdF87IH0KKysKKytib29sIFNpbXVsYXRvcjo6b3ZlclJlY3Vyc2VkKHVp bnRwdHJfdCBuZXdzcCkgY29uc3QgeworKyAgaWYgKG5ld3NwID09IDApIHsKKysgICAgbmV3c3Ag PSBnZXRSZWdpc3RlcihzcCk7CisrICB9CisrICByZXR1cm4gbmV3c3AgPD0gc3RhY2tMaW1pdCgp OworK30KKysKKytib29sIFNpbXVsYXRvcjo6b3ZlclJlY3Vyc2VkV2l0aEV4dHJhKHVpbnQzMl90 IGV4dHJhKSBjb25zdCB7CisrICB1aW50cHRyX3QgbmV3c3AgPSBnZXRSZWdpc3RlcihzcCkgLSBl eHRyYTsKKysgIHJldHVybiBuZXdzcCA8PSBzdGFja0xpbWl0KCk7CisrfQorKworK3ZvaWQgU2lt dWxhdG9yOjpmb3JtYXQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyLCBjb25zdCBjaGFyKiBmb3JtYXQp IHsKKysgIHByaW50ZigiU2ltdWxhdG9yIGZvdW5kIHVuc3VwcG9ydGVkIGluc3RydWN0aW9uOlxu IDB4JTAxNiIgUFJJeFBUUgorKyAgICAgICAgICI6ICUwOHggJXNcbiIsCisrICAgICAgICAgcmVp bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpLCBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCks IGZvcm1hdCk7CisrICBNT1pfQ1JBU0goKTsKKyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysvLyBzb2Z0d2FyZUludGVycnVwdCAtIGhhbmRsZSBrQ2FsbFJlZGlySW5zdHIgKFBQQ19z dG9wKSBhbmQgUFBDX3RyYXAuCisrCisrQUJJX0ZVTkNUSU9OX1RZUEVfU0lNX1BST1RPVFlQRVMK KysKKyt2b2lkIFNpbXVsYXRvcjo6c29mdHdhcmVJbnRlcnJ1cHQoU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKSB7CisrICB1aW50MzJfdCBpbnN0ckJpdHMgPSBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCk7 CisrCisrICBpZiAoaW5zdHJCaXRzID09IGtDYWxsUmVkaXJJbnN0cikgeworKyAgICBSZWRpcmVj dGlvbiogcmVkaXJlY3Rpb24gPSBSZWRpcmVjdGlvbjo6RnJvbVN3aUluc3RydWN0aW9uKGluc3Ry KTsKKysgICAgdWludHB0cl90IG5hdGl2ZUZuID0KKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8 dWludHB0cl90PihyZWRpcmVjdGlvbi0+bmF0aXZlRnVuY3Rpb24oKSk7CisrCisrICAgIC8vIEdl dCB0aGUgU1AgZm9yIHJlYWRpbmcgc3RhY2sgYXJndW1lbnRzLgorKyAgICBpbnQ2NF90KiBzcF8g PSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihnZXRSZWdpc3RlcihzcCkpOworKyAgICAvLyBT a2lwIHBhc3QgdGhlIFBQQzY0IEVMRnYyIGxpbmsgYXJlYSAoNCBkb3VibGV3b3JkcyA9IDMyIGJ5 dGVzKS4KKysgICAgc3BfID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4ocmVpbnRlcnByZXRf Y2FzdDx1aW50cHRyX3Q+KHNwXykgKyAzMik7CisrCisrICAgIC8vIFBQQzY0IEVMRnYyOiBpbnRl Z2VyIGFyZ3MgaW4gcjMtcjEwLCBGUCBhcmdzIGluIGYxLWYxMy4KKysgICAgaW50NjRfdCBhMF8g PSBnZXRSZWdpc3RlcihyMyk7CisrICAgIGludDY0X3QgYTFfID0gZ2V0UmVnaXN0ZXIocjQpOwor KyAgICBpbnQ2NF90IGEyXyA9IGdldFJlZ2lzdGVyKHI1KTsKKysgICAgaW50NjRfdCBhM18gPSBn ZXRSZWdpc3RlcihyNik7CisrICAgIGludDY0X3QgYTRfID0gZ2V0UmVnaXN0ZXIocjcpOworKyAg ICBpbnQ2NF90IGE1XyA9IGdldFJlZ2lzdGVyKHI4KTsKKysgICAgaW50NjRfdCBhNl8gPSBnZXRS ZWdpc3RlcihyOSk7CisrICAgIGludDY0X3QgYTdfID0gZ2V0UmVnaXN0ZXIocjEwKTsKKysgICAg Ly8gUFBDNjQgRUxGdjI6IEZQIGFyZ3MgaW4gZjEtZjEzLCBtYXBwZWQgdG8gZjBfcy4uZjEyX3Mg YW5kIGYwX2QuLmYxMl9kLgorKyAgICBmbG9hdCBmMF9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChT aW11bGF0b3I6OmYxKTsKKysgICAgZmxvYXQgZjFfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2lt dWxhdG9yOjpmMik7CisrICAgIGZsb2F0IGYyX3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVs YXRvcjo6ZjMpOworKyAgICBmbG9hdCBmM19zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0 b3I6OmY0KTsKKysgICAgZmxvYXQgZjRfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9y OjpmNSk7CisrICAgIGZsb2F0IGY1X3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6 ZjYpOworKyAgICBmbG9hdCBmNl9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY3 KTsKKysgICAgZmxvYXQgZjdfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmOCk7 CisrICAgIGZsb2F0IGY4X3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjkpOwor KyAgICBmbG9hdCBmOV9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMCk7Cisr ICAgIGZsb2F0IGYxMF9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMSk7Cisr ICAgIGZsb2F0IGYxMV9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMik7Cisr ICAgIGZsb2F0IGYxMl9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMyk7Cisr ICAgIGRvdWJsZSBmMF9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMSk7Cisr ICAgIGRvdWJsZSBmMV9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMik7Cisr ICAgIGRvdWJsZSBmMl9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMyk7Cisr ICAgIGRvdWJsZSBmM19kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNCk7Cisr ICAgIGRvdWJsZSBmNF9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNSk7Cisr ICAgIGRvdWJsZSBmNV9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNik7Cisr ICAgIGRvdWJsZSBmNl9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNyk7Cisr ICAgIGRvdWJsZSBmN19kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmOCk7Cisr ICAgIGRvdWJsZSBmOF9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmOSk7Cisr ICAgIGRvdWJsZSBmOV9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMTApOwor KyAgICBkb3VibGUgZjEwX2QgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShTaW11bGF0b3I6OmYxMSk7 CisrICAgIGRvdWJsZSBmMTFfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEy KTsKKysgICAgZG91YmxlIGYxMl9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpm MTMpOworKworKyAgICAvLyBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgZm9yIGhp Z2hlciBGUCBhcmcgcmVnaXN0ZXJzLgorKyAgICAvLyBUaGV5IGV4aXN0IGZvciBBQkkgY29tcGxl dGVuZXNzIGJ1dCBmZXcgZnVuY3Rpb24gdHlwZXMgdXNlID41IEZQIGFyZ3MuCisrICAgICh2b2lk KWY0X3M7ICh2b2lkKWY1X3M7ICh2b2lkKWY2X3M7ICh2b2lkKWY3X3M7ICh2b2lkKWY4X3M7ICh2 b2lkKWY5X3M7CisrICAgICh2b2lkKWYxMF9zOyAodm9pZClmMTFfczsgKHZvaWQpZjEyX3M7Cisr ICAgICh2b2lkKWY0X2Q7ICh2b2lkKWY1X2Q7ICh2b2lkKWY2X2Q7ICh2b2lkKWY3X2Q7ICh2b2lk KWY4X2Q7ICh2b2lkKWY5X2Q7CisrICAgICh2b2lkKWYxMF9kOyAodm9pZClmMTFfZDsgKHZvaWQp ZjEyX2Q7CisrCisrICAgIGludDY0X3Qgc2F2ZWRfbHIgPSBnZXRMUigpOworKworKyAgICBib29s IHN0YWNrX2FsaWduZWQgPSAoZ2V0UmVnaXN0ZXIoc3ApICYgKEFCSVN0YWNrQWxpZ25tZW50IC0g MSkpID09IDA7CisrICAgIGlmICghc3RhY2tfYWxpZ25lZCkgeworKyAgICAgIGZwcmludGYoc3Rk ZXJyLCAiUnVudGltZSBjYWxsIHdpdGggdW5hbGlnbmVkIHN0YWNrIVxuIik7CisrICAgICAgTU9a X0NSQVNIKCk7CisrICAgIH0KKysKKysgICAgaWYgKHNpbmdsZV9zdGVwcGluZ18pIHsKKysgICAg ICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywg bnVsbHB0cik7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChyZWRpcmVjdGlvbi0+dHlwZSgpKSB7 CisrICAgICAgQUJJX0ZVTkNUSU9OX1RZUEVfUFBDNjRfU0lNX0RJU1BBVENICisrCisrICAgICAg ZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgiVW5rbm93biBmdW5jdGlvbiB0eXBlLiIpOwor KyAgICB9CisrCisrICAgIGlmIChzaW5nbGVfc3RlcHBpbmdfKSB7CisrICAgICAgc2luZ2xlX3N0 ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIpOwor KyAgICB9CisrCisrICAgIHNldExSKHNhdmVkX2xyKTsKKysgICAgc2V0X3BjKGdldExSKCkpOwor KyAgfSBlbHNlIGlmIChpbnN0ckJpdHMgPT0gMHg3RkUwMDAwOCkgeworKyAgICAvLyBQUENfdHJh cDogdXNlZCBmb3Igd2FzbSB0cmFwcy4KKysgICAgdWludDhfdCogbmV3UEM7CisrICAgIGlmICh3 YXNtOjpIYW5kbGVJbGxlZ2FsSW5zdHJ1Y3Rpb24ocmVnaXN0ZXJTdGF0ZSgpLCAmbmV3UEMpKSB7 CisrICAgICAgc2V0X3BjKGludDY0X3QobmV3UEMpKTsKKysgICAgICByZXR1cm47CisrICAgIH0K KysgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIHRyYXAgaW5zdHJ1Y3Rpb24iKTsKKysgIH0gZWxz ZSB7CisrICAgIC8vIE90aGVyIHRyYXAtbGlrZSBpbnN0cnVjdGlvbnM6IGVudGVyIGRlYnVnZ2Vy LgorKyAgICBwcGM2NERlYnVnZ2VyIGRiZyh0aGlzKTsKKysgICAgZGJnLmRlYnVnKCk7CisrICB9 CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gU3RvcC9icmVha3BvaW50IGhl bHBlcnMuCisrCisrYm9vbCBTaW11bGF0b3I6OmlzV2F0Y2hwb2ludCh1aW50MzJfdCBjb2RlKSB7 CisrICByZXR1cm4gKGNvZGUgPD0ga01heFdhdGNocG9pbnRDb2RlKTsKKyt9CisrCisrdm9pZCBT aW11bGF0b3I6OnByaW50V2F0Y2hwb2ludCh1aW50MzJfdCBjb2RlKSB7CisrICBwcGM2NERlYnVn Z2VyIGRiZyh0aGlzKTsKKysgICsrYnJlYWtfY291bnRfOworKyAgcHJpbnRmKCJcbi0tLS0gYnJl YWsgJWQgbWFya2VyOiAlMjAiIFBSSWk2NCAiICAoaW5zdHIgY291bnQ6ICUyMCIgUFJJaTY0Cisr ICAgICAgICAgIikgLS0tLVxuIiwKKysgICAgICAgICBjb2RlLCBicmVha19jb3VudF8sIGljb3Vu dF8pOworKyAgZGJnLnByaW50QWxsUmVncygpOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6aGFu ZGxlU3RvcCh1aW50MzJfdCBjb2RlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChp c0VuYWJsZWRTdG9wKGNvZGUpKSB7CisrICAgIHBwYzY0RGVidWdnZXIgZGJnKHRoaXMpOworKyAg ICBkYmcuc3RvcChpbnN0cik7CisrICB9IGVsc2UgeworKyAgICBzZXRfcGMoZ2V0X3BjKCkgKyBT aW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICB9CisrfQorKworK2Jvb2wgU2ltdWxhdG9y Ojppc1N0b3BJbnN0cnVjdGlvbihTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHJldHVybiBp bnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPT0ga0NhbGxSZWRpckluc3RyOworK30KKysKKytib29s IFNpbXVsYXRvcjo6aXNFbmFibGVkU3RvcCh1aW50MzJfdCBjb2RlKSB7CisrICBNT1pfQVNTRVJU KGNvZGUgPD0ga01heFN0b3BDb2RlKTsKKysgIE1PWl9BU1NFUlQoY29kZSA+IGtNYXhXYXRjaHBv aW50Q29kZSk7CisrICByZXR1cm4gISh3YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XyAmIGtTdG9w RGlzYWJsZWRCaXQpOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6ZW5hYmxlU3RvcCh1aW50MzJf dCBjb2RlKSB7CisrICBpZiAoIWlzRW5hYmxlZFN0b3AoY29kZSkpIHsKKysgICAgd2F0Y2hlZFN0 b3BzX1tjb2RlXS5jb3VudF8gJj0gfmtTdG9wRGlzYWJsZWRCaXQ7CisrICB9CisrfQorKworK3Zv aWQgU2ltdWxhdG9yOjpkaXNhYmxlU3RvcCh1aW50MzJfdCBjb2RlKSB7CisrICBpZiAoaXNFbmFi bGVkU3RvcChjb2RlKSkgeworKyAgICB3YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XyB8PSBrU3Rv cERpc2FibGVkQml0OworKyAgfQorK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6aW5jcmVhc2VTdG9w Q291bnRlcih1aW50MzJfdCBjb2RlKSB7CisrICBNT1pfQVNTRVJUKGNvZGUgPD0ga01heFN0b3BD b2RlKTsKKysgIGlmICgod2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gJiB+KDEgPDwgMzEpKSA9 PSAweDdmZmZmZmZmKSB7CisrICAgIHByaW50ZigKKysgICAgICAgICJTdG9wIGNvdW50ZXIgZm9y IGNvZGUgJWkgaGFzIG92ZXJmbG93ZWQuXG4iCisrICAgICAgICAiRW5hYmxpbmcgdGhpcyBjb2Rl IGFuZCByZXNldGluZyB0aGUgY291bnRlciB0byAwLlxuIiwKKysgICAgICAgIGNvZGUpOworKyAg ICB3YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XyA9IDA7CisrICAgIGVuYWJsZVN0b3AoY29kZSk7 CisrICB9IGVsc2UgeworKyAgICB3YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XysrOworKyAgfQor K30KKysKKyt2b2lkIFNpbXVsYXRvcjo6cHJpbnRTdG9wSW5mbyh1aW50MzJfdCBjb2RlKSB7Cisr ICBpZiAoY29kZSA8PSBrTWF4V2F0Y2hwb2ludENvZGUpIHsKKysgICAgcHJpbnRmKCJUaGF0IGlz IGEgd2F0Y2hwb2ludCwgbm90IGEgc3RvcC5cbiIpOworKyAgICByZXR1cm47CisrICB9IGVsc2Ug aWYgKGNvZGUgPiBrTWF4U3RvcENvZGUpIHsKKysgICAgcHJpbnRmKCJDb2RlIHRvbyBsYXJnZSwg b25seSAldSBzdG9wcyBjYW4gYmUgdXNlZFxuIiwga01heFN0b3BDb2RlICsgMSk7CisrICAgIHJl dHVybjsKKysgIH0KKysgIGNvbnN0IGNoYXIqIHN0YXRlID0gaXNFbmFibGVkU3RvcChjb2RlKSA/ ICJFbmFibGVkIiA6ICJEaXNhYmxlZCI7CisrICBpbnQzMl90IGNvdW50ID0gd2F0Y2hlZFN0b3Bz X1tjb2RlXS5jb3VudF8gJiB+a1N0b3BEaXNhYmxlZEJpdDsKKysgIGlmIChjb3VudCAhPSAwKSB7 CisrICAgIGlmICh3YXRjaGVkU3RvcHNfW2NvZGVdLmRlc2NfKSB7CisrICAgICAgcHJpbnRmKCJz dG9wICVpIC0gMHgleDogXHQlcywgXHRjb3VudGVyID0gJWksIFx0JXNcbiIsIGNvZGUsIGNvZGUs CisrICAgICAgICAgICAgIHN0YXRlLCBjb3VudCwgd2F0Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXyk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgcHJpbnRmKCJzdG9wICVpIC0gMHgleDogXHQlcywgXHRj b3VudGVyID0gJWlcbiIsIGNvZGUsIGNvZGUsIHN0YXRlLAorKyAgICAgICAgICAgICBjb3VudCk7 CisrICAgIH0KKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBJbnN0 cnVjdGlvbiBkZWNvZGVycy4KKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKy8vIENvbXB1 dGUgZWZmZWN0aXZlIGFkZHJlc3MgZm9yIEQtZm9ybSBpbnN0cnVjdGlvbnMuCisrLy8gSWYgUkE9 PTAsIHRoZSBiYXNlIGlzIDAgKG5vdCBHUFJbMF0pLgorK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBE Rm9ybUVBKFNpbXVsYXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBvZmZzZXQpIHsKKysgIHVpbnQzMl90IHJhID0g aW5zdHItPnJhVmFsdWUoKTsKKysgIGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBzaW0t PmdldFJlZ2lzdGVyKHJhKTsKKysgIHJldHVybiBiYXNlICsgb2Zmc2V0OworK30KKysKKysvLyBD b21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBEUy1mb3JtIGluc3RydWN0aW9ucy4KKytzdGF0 aWMgaW5saW5lIGludDY0X3QgRFNGb3JtRUEoU2ltdWxhdG9yKiBzaW0sIFNpbUluc3RydWN0aW9u KiBpbnN0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBvZmZzZXQp IHsKKysgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKKysgIGludDY0X3QgYmFzZSA9 IChyYSA9PSAwKSA/IDAgOiBzaW0tPmdldFJlZ2lzdGVyKHJhKTsKKysgIHJldHVybiBiYXNlICsg b2Zmc2V0OworK30KKysKKysvLyBDb21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBYLWZvcm0g aW5kZXhlZCBpbnN0cnVjdGlvbnMuCisrLy8gSWYgUkE9PTAsIGJhc2UgaXMgMCAobm90IEdQUlsw XSkuCisrc3RhdGljIGlubGluZSBpbnQ2NF90IFhGb3JtRUEoU2ltdWxhdG9yKiBzaW0sIFNpbUlu c3RydWN0aW9uKiBpbnN0cikgeworKyAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwor KyAgdWludDMyX3QgcmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgaW50NjRfdCBiYXNlID0gKHJh ID09IDApID8gMCA6IHNpbS0+Z2V0UmVnaXN0ZXIocmEpOworKyAgcmV0dXJuIGJhc2UgKyBzaW0t PmdldFJlZ2lzdGVyKHJiKTsKKyt9CisrCisrLy8gQ29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBm b3IgWC1mb3JtIGluZGV4ZWQgdXBkYXRlcyAoUkEgIT0gMCByZXF1aXJlZCkuCisrc3RhdGljIGlu bGluZSBpbnQ2NF90IFhGb3JtRUFVcGRhdGUoU2ltdWxhdG9yKiBzaW0sIFNpbUluc3RydWN0aW9u KiBpbnN0cikgeworKyAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgdWludDMy X3QgcmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgcmV0dXJuIHNpbS0+Z2V0UmVnaXN0ZXIocmEp ICsgc2ltLT5nZXRSZWdpc3RlcihyYik7CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisrLy8gZGVjb2RlREZvcm1BTFU6IGFkZGksIGFkZGlzLCBvcmksIG9yaXMsIHhvcmksIHhvcmlz LCBhbmRpLiwgYW5kaXMuLAorKy8vICAgICAgICAgICAgICAgICBjbXBpLCBjbXBsaSwgc3ViZmlj LCBhZGRpYywgYWRkaWMuLCBtdWxsaSwgdHdpCisrCisrdm9pZCBTaW11bGF0b3I6OmRlY29kZURG b3JtQUxVKFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5z dHItPm9wY29kZSgpOworKyAgdWludDMyX3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgdWlu dDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgaW50MTZfdCBzaSA9IGluc3RyLT5pbW0x NlZhbHVlKCk7CisrICB1aW50MTZfdCB1aSA9IGluc3RyLT51aW1tMTZWYWx1ZSgpOworKworKyAg c3dpdGNoIChvcGNvZGUpIHsKKysgICAgY2FzZSAxNDogeworKyAgICAgIC8vIGFkZGk6IFJUID0g KFJBfDApICsgU0kKKysgICAgICBpbnQ2NF90IGJhc2UgPSAocmEgPT0gMCkgPyAwIDogZ2V0UmVn aXN0ZXIocmEpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBiYXNlICsgKGludDY0X3Qpc2kpOwor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTU6IHsKKysgICAgICAvLyBhZGRpczog UlQgPSAoUkF8MCkgKyAoU0kgPDwgMTYpCisrICAgICAgaW50NjRfdCBiYXNlID0gKHJhID09IDAp ID8gMCA6IGdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgYmFzZSArICgo aW50NjRfdClzaSA8PCAxNikpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjQ6 IHsKKysgICAgICAvLyBvcmk6IFJBID0gUlMgfCBVSQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBn ZXRSZWdpc3RlcihydCkgfCAodWludDY0X3QpdWkpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgMjU6IHsKKysgICAgICAvLyBvcmlzOiBSQSA9IFJTIHwgKFVJIDw8IDE2KQorKyAg ICAgIHNldFJlZ2lzdGVyKHJhLCBnZXRSZWdpc3RlcihydCkgfCAoKHVpbnQ2NF90KXVpIDw8IDE2 KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyNjogeworKyAgICAgIC8vIHhv cmk6IFJBID0gUlMgXiBVSQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBnZXRSZWdpc3RlcihydCkg XiAodWludDY0X3QpdWkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjc6IHsK KysgICAgICAvLyB4b3JpczogUkEgPSBSUyBeIChVSSA8PCAxNikKKysgICAgICBzZXRSZWdpc3Rl cihyYSwgZ2V0UmVnaXN0ZXIocnQpIF4gKCh1aW50NjRfdCl1aSA8PCAxNikpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrICAgIGNhc2UgMjg6IHsKKysgICAgICAvLyBhbmRpLjogUkEgPSBSUyAm IFVJLCB1cGRhdGUgQ1IwCisrICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkg JiAodWludDY0X3QpdWk7CisrICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAg dXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyOTog eworKyAgICAgIC8vIGFuZGlzLjogUkEgPSBSUyAmIChVSSA8PCAxNiksIHVwZGF0ZSBDUjAKKysg ICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJ0KSAmICgodWludDY0X3QpdWkgPDwg MTYpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAgIHVwZGF0ZUNSMChy ZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTE6IHsKKysgICAgICAv LyBjbXBpOiBjb21wYXJlIFJBIHdpdGggU0ksIHNpZ25lZAorKyAgICAgIHVpbnQzMl90IGJmID0g aW5zdHItPmJmVmFsdWUoKTsKKysgICAgICBib29sIGwgPSBpbnN0ci0+bEJpdCgpOworKyAgICAg IGlmIChsKSB7CisrICAgICAgICAvLyA2NC1iaXQgY29tcGFyZQorKyAgICAgICAgc2V0Q1JGaWVs ZENtcChiZiwgZ2V0UmVnaXN0ZXIocmEpLCAoaW50NjRfdClzaSk7CisrICAgICAgfSBlbHNlIHsK KysgICAgICAgIC8vIDMyLWJpdCBjb21wYXJlCisrICAgICAgICBpbnQzMl90IHJhMzIgPSBJMzIo Z2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICAgIHNldENSRmllbGRDbXAoYmYsIChpbnQ2NF90KXJh MzIsIChpbnQ2NF90KShpbnQzMl90KXNpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSAxMDogeworKyAgICAgIC8vIGNtcGxpOiBjb21wYXJlIFJBIHdpdGggVUks IHVuc2lnbmVkCisrICAgICAgdWludDMyX3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgpOworKyAgICAg IGJvb2wgbCA9IGluc3RyLT5sQml0KCk7CisrICAgICAgaWYgKGwpIHsKKysgICAgICAgIC8vIDY0 LWJpdCB1bnNpZ25lZCBjb21wYXJlCisrICAgICAgICBzZXRDUkZpZWxkQ21wVShiZiwgVTY0KGdl dFJlZ2lzdGVyKHJhKSksICh1aW50NjRfdCl1aSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IC8vIDMyLWJpdCB1bnNpZ25lZCBjb21wYXJlCisrICAgICAgICB1aW50MzJfdCByYTMyID0gVTMy KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgICBzZXRDUkZpZWxkQ21wVShiZiwgKHVpbnQ2NF90 KXJhMzIsICh1aW50NjRfdCl1aSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgODogeworKyAgICAgIC8vIHN1YmZpYzogUlQgPSBTSSAtIFJBLCBzZXQgQ0EKKysg ICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50 NjRfdCBpbW0gPSBVNjQoKGludDY0X3Qpc2kpOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IGlt bSArIH5yYV92YWwgKyAxOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7Cisr ICAgICAgLy8gQ0EgaXMgc2V0IGlmIHRoZXJlIGlzIGEgY2Fycnkgb3V0IG9mIHRoZSBhZGRpdGlv biAoflJBICsgSU1NICsgMSkuCisrICAgICAgLy8gRXF1aXZhbGVudGx5LCBDQSA9IChJTU0gPj0g UkEpIGZvciB1bnNpZ25lZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUKKysgICAgICAvLyBmdWxsIDY0 LWJpdCBzdWJ0cmFjdGlvbi4KKysgICAgICBib29sIGNhcnJ5ID0gKGltbSA+PSByYV92YWwpIHx8 IChpbW0gPT0gMCAmJiByYV92YWwgPT0gMCk7CisrICAgICAgLy8gTW9yZSBwcmVjaXNlOiBjYXJy eSA9ICh+cmFfdmFsICsgaW1tKSB3b3VsZCBvdmVyZmxvdywgb3IgYWRkaW5nIDEKKysgICAgICAv LyBvdmVyZmxvd3MuCisrICAgICAgdWludDY0X3QgdG1wID0gfnJhX3ZhbCArIGltbTsKKysgICAg ICBjYXJyeSA9ICh0bXAgPCB+cmFfdmFsKSB8fCAodG1wIDwgaW1tKSB8fCAocmVzdWx0IDwgdG1w KTsKKysgICAgICAvLyBTaW1wbGlmeTogQ0EgaWYgbm8gYm9ycm93LgorKyAgICAgIGNhcnJ5ID0g KFU2NCgoaW50NjRfdClzaSkgPj0gcmFfdmFsKTsKKysgICAgICBpZiAocmFfdmFsID09IDApIGNh cnJ5ID0gdHJ1ZTsKKysgICAgICAvLyBBY3R1YWxseSwgc3ViZmljIENBOiBjYXJyeSBvdXQgb2Yg flJBICsgSU1NICsgMS4KKysgICAgICAvLyBDQSA9IChJTU0gPiBSQSAtIDEpIHdoZW4gUkEgIT0g MCwgQ0EgPSAxIHdoZW4gUkEgPT0gMC4KKysgICAgICAvLyBPciBqdXN0OiB0aGUgdW5zaWduZWQg cmVzdWx0IG9mIChTSSAtIFJBKSBpcyB2YWxpZCAobm8gYm9ycm93KS4KKysgICAgICAvLyBMZXQn cyBjb21wdXRlIGl0IGNvcnJlY3RseToKKysgICAgICB7CisrICAgICAgICBfX3VpbnQxMjhfdCB3 aWRlID0gKF9fdWludDEyOF90KSh+cmFfdmFsKSArIChfX3VpbnQxMjhfdClpbW0gKyAxOworKyAg ICAgICAgY2FycnkgPSAod2lkZSA+PiA2NCkgIT0gMDsKKysgICAgICB9CisrICAgICAgc2V0WEVS Q0EoY2FycnkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTI6IHsKKysgICAg ICAvLyBhZGRpYzogUlQgPSBSQSArIFNJLCBzZXQgQ0EKKysgICAgICB1aW50NjRfdCByYV92YWwg PSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCBpbW0gPSBVNjQoKGludDY0 X3Qpc2kpOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGltbTsKKysgICAgICBz ZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOworKyAgICAgIHNldFhFUkNBKHJlc3VsdCA8IHJh X3ZhbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMzogeworKyAgICAgIC8v IGFkZGljLjogUlQgPSBSQSArIFNJLCBzZXQgQ0EsIHVwZGF0ZSBDUjAKKysgICAgICB1aW50NjRf dCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCBpbW0gPSBV NjQoKGludDY0X3Qpc2kpOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGltbTsK KysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOworKyAgICAgIHNldFhFUkNBKHJl c3VsdCA8IHJhX3ZhbCk7CisrICAgICAgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDc6IHsKKysgICAgICAvLyBtdWxsaTogUlQgPSBSQSAq IFNJIChsb3cgNjQgYml0cykKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJh KSAqIChpbnQ2NF90KXNpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzogeworKyAgICAgIC8vIHR3aTogVHJhcCBXb3Jk IEltbWVkaWF0ZS4gV2UgZG9uJ3QgaW1wbGVtZW50IHRyYXBwaW5nIGluIHRoZQorKyAgICAgIC8v IHNpbXVsYXRvcjsganVzdCBjb250aW51ZS4KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBk ZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVERm9ybUFMVTog dW5oYW5kbGVkIG9wY29kZSAldSIsIG9wY29kZSk7CisrICB9CisrfQorKworKy8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisrLy8gZGVjb2RlREZvcm1Mb2FkOiBsd3ooMzIpLCBsYnooMzQpLCBsaHoo NDApLCBsaGEoNDIpLCBsZnMoNDgpLCBsZmQoNTApCisrLy8gICBhbmQgdXBkYXRlIHZhcmlhbnRz CisrCisrdm9pZCBTaW11bGF0b3I6OmRlY29kZURGb3JtTG9hZChTaW1JbnN0cnVjdGlvbiogaW5z dHIpIHsKKysgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKKysgIHVpbnQzMl90 IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKKysgIGludDE2X3Qgc2kgPSBpbnN0ci0+aW1tMTZWYWx1 ZSgpOworKyAgdWludDY0X3QgZWEgPSBERm9ybUVBKHRoaXMsIGluc3RyLCBzaSk7CisrCisrICBz d2l0Y2ggKG9wY29kZSkgeworKyAgICBjYXNlIDMyOgorKyAgICAgIC8vIGx3egorKyAgICAgIHNl dFJlZ2lzdGVyKHJ0LCBVNjQocmVhZFdVKGVhLCBpbnN0cikpKTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSAzMzogeworKyAgICAgIC8vIGx3enU6IFJBICE9IDAsIGxvYWQgYW5kIHVwZGF0ZSBS QQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQocmVhZFdVKGVhLCBpbnN0cikpKTsKKysgICAg ICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSAzNDoKKysgICAgICAvLyBsYnoKKysgICAgICBzZXRSZWdpc3RlcihydCwg VTY0KHJlYWRCVShlYSkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAzNTogeworKyAgICAg IC8vIGxienUKKysgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRCVShlYSkpKTsKKysgICAg ICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSA0MDoKKysgICAgICAvLyBsaHoKKysgICAgICBzZXRSZWdpc3RlcihydCwg VTY0KHJlYWRIVShlYSwgaW5zdHIpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDE6IHsK KysgICAgICAvLyBsaHp1CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkSFUoZWEsIGlu c3RyKSkpOworKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAg ICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQyOgorKyAgICAgIC8vIGxoYSAoaGFsZi13b3Jk LCBzaWduLWV4dGVuZGVkKQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZWFkSChl YSwgaW5zdHIpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSA0MzogeworKyAgICAgIC8vIGxo YXUKKysgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpcmVhZEgoZWEsIGluc3RyKSk7Cisr ICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgNDg6IHsKKysgICAgICAvLyBsZnM6IGxvYWQgZmxvYXQgc2luZ2xl LCB3aWRlbiB0byBkb3VibGUgaW4gRlBSIChOYU4tcHJlc2VydmluZzsKKysgICAgICAvLyBtYXRj aGVzIFBvd2VyIElTQSBgbGZzYCB3aGljaCB1c2VzIHhzY3ZzcGRwbiBzZW1hbnRpY3MpCisrICAg ICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIGJyZWFrOworKyAgICAgIGZsb2F0IHZh bCA9ICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpOworKyAgICAgIHNldEZwdVJlZ2lzdGVy RG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKHZhbCkpOworKyAgICAgIGJyZWFr OworKyAgICB9CisrICAgIGNhc2UgNDk6IHsKKysgICAgICAvLyBsZnN1CisrICAgICAgaWYgKGhh bmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIGJyZWFrOworKyAgICAgIGZsb2F0IHZhbCA9ICpyZWlu dGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpOworKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0 LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKHZhbCkpOworKyAgICAgIHNldFJlZ2lzdGVyKGlu c3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDUw OiB7CisrICAgICAgLy8gbGZkOiBsb2FkIGZsb2F0IGRvdWJsZQorKyAgICAgIGRvdWJsZSB2YWwg PSByZWFkRChlYSwgaW5zdHIpOworKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCB2YWwp OworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNTE6IHsKKysgICAgICAvLyBsZmR1 CisrICAgICAgZG91YmxlIHZhbCA9IHJlYWREKGVhLCBpbnN0cik7CisrICAgICAgc2V0RnB1UmVn aXN0ZXJEb3VibGUocnQsIHZhbCk7CisrICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUo KSwgZWEpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9a X0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZURGb3JtTG9hZDogdW5oYW5kbGVkIG9wY29kZSAl dSIsIG9wY29kZSk7CisrICB9CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8g ZGVjb2RlREZvcm1TdG9yZTogc3R3KDM2KSwgc3R3dSgzNyksIHN0YigzOCksIHN0aCg0NCksIHN0 ZnMoNTIpLCBzdGZkKDU0KQorKy8vICAgYW5kIHVwZGF0ZSB2YXJpYW50cworKworK3ZvaWQgU2lt dWxhdG9yOjpkZWNvZGVERm9ybVN0b3JlKFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgdWlu dDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOworKyAgdWludDMyX3QgcnMgPSBpbnN0ci0+ cnNWYWx1ZSgpOworKyAgaW50MTZfdCBzaSA9IGluc3RyLT5pbW0xNlZhbHVlKCk7CisrCisrICAv LyBGb3Igc3RvcmVzLCB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgY2FsY3VsYXRpb24gZGlmZmVycyBm b3IgdXBkYXRlIGZvcm1zOgorKyAgLy8gLSBOb24tdXBkYXRlOiBFQSA9IChSQXwwKSArIEQKKysg IC8vIC0gVXBkYXRlOiBFQSA9IFJBICsgRCAoUkEgbXVzdCBub3QgYmUgMCkKKysgIGJvb2wgaXNV cGRhdGUgPSBmYWxzZTsKKysgIHN3aXRjaCAob3Bjb2RlKSB7CisrICAgIGNhc2UgMzc6IGNhc2Ug Mzk6IGNhc2UgNDU6IGNhc2UgNTM6IGNhc2UgNTU6CisrICAgICAgaXNVcGRhdGUgPSB0cnVlOwor KyAgICAgIGJyZWFrOworKyAgfQorKworKyAgdWludDY0X3QgZWE7CisrICBpZiAoaXNVcGRhdGUp IHsKKysgICAgZWEgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKSArIChpbnQ2NF90KXNp OworKyAgfSBlbHNlIHsKKysgICAgZWEgPSBERm9ybUVBKHRoaXMsIGluc3RyLCBzaSk7CisrICB9 CisrCisrICBzd2l0Y2ggKG9wY29kZSkgeworKyAgICBjYXNlIDM2OgorKyAgICAgIC8vIHN0dwor KyAgICAgIHdyaXRlVyhlYSwgSTMyKGdldFJlZ2lzdGVyKHJzKSksIGluc3RyKTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSAzODoKKysgICAgICAvLyBzdGIKKysgICAgICB3cml0ZUIoZWEsICh1 aW50OF90KShnZXRSZWdpc3RlcihycykgJiAweEZGKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2UgMzk6CisrICAgICAgLy8gc3RidQorKyAgICAgIHdyaXRlQihlYSwgKHVpbnQ4X3QpKGdldFJl Z2lzdGVyKHJzKSAmIDB4RkYpKTsKKysgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgp LCBlYSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDQ6CisrICAgICAgLy8gc3RoCisrICAg ICAgd3JpdGVIKGVhLCBVMTYoZ2V0UmVnaXN0ZXIocnMpKSwgaW5zdHIpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIDQ1OgorKyAgICAgIC8vIHN0aHUKKysgICAgICB3cml0ZUgoZWEsIFUxNihn ZXRSZWdpc3RlcihycykpLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFs dWUoKSwgZWEpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDUyOiB7CisrICAgICAgLy8gc3Rm czogY29udmVydCBkb3VibGUgaW4gRlBSIHRvIHNpbmdsZSBhbmQgc3RvcmUgKE5hTi1wcmVzZXJ2 aW5nOworKyAgICAgIC8vIG1hdGNoZXMgUG93ZXIgSVNBIGBzdGZzYCB3aGljaCB1c2VzIHhzY3Zk cHNwbiBzZW1hbnRpY3MpCisrICAgICAgZG91YmxlIGR2YWwgPSBnZXRGcHVSZWdpc3RlckRvdWJs ZShycyk7CisrICAgICAgZmxvYXQgZnZhbCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZHZh bCk7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIGJyZWFrOworKyAgICAg ICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpID0gZnZhbDsKKysgICAgICBMTEJpdF8gPSBm YWxzZTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDUzOiB7CisrICAgICAgLy8g c3Rmc3UKKysgICAgICBkb3VibGUgZHZhbCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJzKTsKKysg ICAgICBmbG9hdCBmdmFsID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihkdmFsKTsKKysgICAg ICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA0KSkgYnJlYWs7CisrICAgICAgKnJlaW50ZXJw cmV0X2Nhc3Q8ZmxvYXQqPihlYSkgPSBmdmFsOworKyAgICAgIExMQml0XyA9IGZhbHNlOworKyAg ICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDU0OgorKyAgICAgIC8vIHN0ZmQKKysgICAgICB3cml0ZUQoZWEsIGdl dEZwdVJlZ2lzdGVyRG91YmxlKHJzKSwgaW5zdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IDU1OgorKyAgICAgIC8vIHN0ZmR1CisrICAgICAgd3JpdGVEKGVhLCBnZXRGcHVSZWdpc3RlckRv dWJsZShycyksIGluc3RyKTsKKysgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBl YSk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIX1VOU0FG RV9QUklOVEYoImRlY29kZURGb3JtU3RvcmU6IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNvZGUp OworKyAgfQorK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIGRlY29kZURTRm9y bTogbGQoNTgvMCksIGx3YSg1OC8yKSwgc3RkKDYyLzApLCBzdGR1KDYyLzEpCisrCisrdm9pZCBT aW11bGF0b3I6OmRlY29kZURTRm9ybShTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQz Ml90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKKysgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0 VmFsdWUoKTsKKysgIGludDE2X3QgZHMgPSBpbnN0ci0+ZHMxNFZhbHVlKCk7CisrICB1aW50MzJf dCB4byA9IGluc3RyLT5iaXRzKDEsIDApOworKworKyAgaWYgKG9wY29kZSA9PSA1OCkgeworKyAg ICB1aW50NjRfdCBlYSA9IERTRm9ybUVBKHRoaXMsIGluc3RyLCBkcyk7CisrICAgIHN3aXRjaCAo eG8pIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgICAvLyBsZAorKyAgICAgICAgc2V0UmVnaXN0 ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2Ug MTogeworKyAgICAgICAgLy8gbGR1CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgcmVhZERXKGVh LCBpbnN0cikpOworKyAgICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwor KyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMjoKKysgICAgICAgIC8vIGx3 YSAobG9hZCB3b3JkIGFsZ2VicmFpYywgc2lnbi1leHRlbmRlZCB0byA2NCkKKysgICAgICAgIHNl dFJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZWFkVyhlYSwgaW5zdHIpKTsKKysgICAgICAgIGJyZWFr OworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVj b2RlRFNGb3JtOiBvcGNvZGUgNTgsIHhvPSV1IiwgeG8pOworKyAgICB9CisrICB9IGVsc2UgaWYg KG9wY29kZSA9PSA2MikgeworKyAgICAvLyBGb3Igc3RkL3N0ZHUsIEVBIHVzZXMgUkEgZGlyZWN0 bHkgKG5vIFJBfDAgcnVsZSkuCisrICAgIHVpbnQ2NF90IGVhOworKyAgICBpZiAoeG8gPT0gMSkg eworKyAgICAgIC8vIHN0ZHU6IHVwZGF0ZSBmb3JtCisrICAgICAgZWEgPSBnZXRSZWdpc3Rlcihp bnN0ci0+cmFWYWx1ZSgpKSArIChpbnQ2NF90KWRzOworKyAgICB9IGVsc2UgeworKyAgICAgIGVh ID0gRFNGb3JtRUEodGhpcywgaW5zdHIsIGRzKTsKKysgICAgfQorKyAgICBzd2l0Y2ggKHhvKSB7 CisrICAgICAgY2FzZSAwOgorKyAgICAgICAgLy8gc3RkCisrICAgICAgICB3cml0ZURXKGVhLCBn ZXRSZWdpc3RlcihydCksIGluc3RyKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMToK KysgICAgICAgIC8vIHN0ZHUKKysgICAgICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lzdGVyKHJ0KSwg aW5zdHIpOworKyAgICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVf UFJJTlRGKCJkZWNvZGVEU0Zvcm06IG9wY29kZSA2MiwgeG89JXUiLCB4byk7CisrICAgIH0KKysg IH0gZWxzZSB7CisrICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVEU0Zvcm06IHVu aGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNvZGUpOworKyAgfQorK30KKysKKysvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorKy8vIGRlY29kZVhGb3JtOiBNYWpvciBvcGNvZGUgMzEgKFgtZm9ybSwgWE8t Zm9ybSwgZXRjLikKKysvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IGRlY29kZXIgY292ZXJpbmcgbW9z dCBBTFUsIGluZGV4ZWQgbG9hZC9zdG9yZSwgU1BSLAorKy8vIGFuZCBhdG9taWMgaW5zdHJ1Y3Rp b25zLgorKworK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVYRm9ybShTaW1JbnN0cnVjdGlvbiogaW5z dHIpIHsKKysgIHVpbnQzMl90IHhvID0gaW5zdHItPnhvVmFsdWUoKTsKKysgIHVpbnQzMl90IHJ0 ID0gaW5zdHItPnJ0VmFsdWUoKTsKKysgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsK KysgIHVpbnQzMl90IHJiID0gaW5zdHItPnJiVmFsdWUoKTsKKysgIGJvb2wgcmMgPSBpbnN0ci0+ cmNCaXQoKTsKKysKKysgIC8vIE1hbnkgaW5zdHJ1Y3Rpb25zIHNoYXJlIG1ham9yIG9wY29kZSAz MS4gU3dpdGNoIG9uIGV4dGVuZGVkIG9wY29kZS4KKysgIC8vIEZvciBYTy1mb3JtIHdpdGggT0U9 MSwgdGhlIHhvVmFsdWUoKSBpbmNsdWRlcyBiaXQgMTAsIHNvCisrICAvLyBhZGRvICgyNjYgfCA1 MTIgPSA3NzgpIGV0Yy4gYXJlIHNlcGFyYXRlIGNhc2VzLgorKworKyAgLy8gRmlyc3QgY2hlY2sg Zm9yIGlzZWwgd2hpY2ggdXNlcyBiaXRzIDEtNSA9IDE1IChYTyA9IDE1IGluIGJpdHMgMS4uNSku CisrICBpZiAoKHhvICYgMHgxRikgPT0gMTUpIHsKKysgICAgLy8gaXNlbDogaWYgQ1JbQkNdIHRo ZW4gUlQ9UkEgZWxzZSBSVD1SQgorKyAgICAvLyBCQyBpcyBpbiBiaXRzIDYuLjEwICh0aGUgcmMg ZmllbGQgcG9zaXRpb24pLgorKyAgICB1aW50MzJfdCBiYyA9IGluc3RyLT5yY1ZhbHVlKCk7Cisr ICAgIHVpbnQzMl90IGNyRmllbGQgPSBiYyAvIDQ7CisrICAgIHVpbnQzMl90IGNyQml0ID0gYmMg JSA0OworKyAgICB1aW50OF90IGNyRmllbGRWYWwgPSBnZXRDUkZpZWxkKGNyRmllbGQpOworKyAg ICAvLyBQUEMgQ1IgZmllbGQgYml0czogYml0Mz1MVCg4KSwgYml0Mj1HVCg0KSwgYml0MT1FUSgy KSwgYml0MD1TTygxKQorKyAgICAvLyBCaXQgbnVtYmVyaW5nIHdpdGhpbiBmaWVsZDogMD1MVCwg MT1HVCwgMj1FUSwgMz1TTworKyAgICBib29sIGJpdFNldDsKKysgICAgc3dpdGNoIChjckJpdCkg eworKyAgICAgIGNhc2UgMDogYml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZExUKSAhPSAw OyBicmVhazsKKysgICAgICBjYXNlIDE6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRH VCkgIT0gMDsgYnJlYWs7CisrICAgICAgY2FzZSAyOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtD UkZpZWxkRVEpICE9IDA7IGJyZWFrOworKyAgICAgIGNhc2UgMzogYml0U2V0ID0gKGNyRmllbGRW YWwgJiBrQ1JGaWVsZFNPKSAhPSAwOyBicmVhazsKKysgICAgICBkZWZhdWx0OiBiaXRTZXQgPSBm YWxzZTsgYnJlYWs7CisrICAgIH0KKysgICAgaW50NjRfdCByYVZhbCA9IChyYSA9PSAwKSA/IDAg OiBnZXRSZWdpc3RlcihyYSk7CisrICAgIGludDY0X3QgcmJWYWwgPSBnZXRSZWdpc3RlcihyYik7 CisrICAgIHNldFJlZ2lzdGVyKHJ0LCBiaXRTZXQgPyByYVZhbCA6IHJiVmFsKTsKKysgICAgcmV0 dXJuOworKyAgfQorKworKyAgc3dpdGNoICh4bykgeworKyAgICAvLyAtLS0gQXJpdGhtZXRpYyAt LS0KKysgICAgY2FzZSAyNjY6IHsKKysgICAgICAvLyBhZGQKKysgICAgICBpbnQ2NF90IHJlc3Vs dCA9IGdldFJlZ2lzdGVyKHJhKSArIGdldFJlZ2lzdGVyKHJiKTsKKysgICAgICBzZXRSZWdpc3Rl cihydCwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzc4OiB7CisrICAgICAgLy8gYWRkbworKyAgICAg IGludDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEpOworKyAgICAgIGludDY0X3QgcmJfdmFs ID0gZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIGludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgcmJf dmFsOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgIC8vIE92ZXJmbG93 IGlmIHNpZ25zIG9mIGlucHV0cyBhcmUgc2FtZSBidXQgcmVzdWx0IHNpZ24gZGlmZmVycy4KKysg ICAgICBib29sIG92ID0gKChyYV92YWwgXiByZXN1bHQpICYgKHJiX3ZhbCBeIHJlc3VsdCkpIDwg MDsKKysgICAgICBzZXRYRVJPVihvdik7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0 KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEwOiB7CisrICAgICAgLy8gYWRk YworKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAg IHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHVpbnQ2NF90 IHJlc3VsdCA9IHJhX3ZhbCArIHJiX3ZhbDsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJl c3VsdCkpOworKyAgICAgIHNldFhFUkNBKHJlc3VsdCA8IHJhX3ZhbCk7CisrICAgICAgaWYgKHJj KSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNh c2UgMTM4OiB7CisrICAgICAgLy8gYWRkZTogUlQgPSBSQSArIFJCICsgQ0EKKysgICAgICB1aW50 NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCByYl92 YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCBjYSA9IGdldFhFUkNB KCkgPyAxVUxMIDogMFVMTDsKKysgICAgICB1aW50NjRfdCByZXN1bHQgPSByYV92YWwgKyByYl92 YWwgKyBjYTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOworKyAgICAgIC8v IENhcnJ5LW91dDogd2hlbiBjYT09MCwgb25seSB0aGUgcmErcmIgd3JhcCBtYXR0ZXJzOyB3aGVu IGNhPT0xLAorKyAgICAgIC8vIGFuIGFkZGl0aW9uYWwgd3JhcCBvY2N1cnMgaWZmIHJlc3VsdCA8 PSByYV92YWwuCisrICAgICAgYm9vbCBuZXdDQSA9IGNhID8gKHJlc3VsdCA8PSByYV92YWwpIDog KHJlc3VsdCA8IHJhX3ZhbCk7CisrICAgICAgc2V0WEVSQ0EobmV3Q0EpOworKyAgICAgIGlmIChy YykgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBj YXNlIDIzNDogeworKyAgICAgIC8vIGFkZG1lOiBSVCA9IFJBICsgQ0EgLSAxCisrICAgICAgdWlu dDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgY2Eg PSBnZXRYRVJDQSgpID8gMVVMTCA6IDBVTEw7CisrICAgICAgdWludDY0X3QgcmVzdWx0ID0gcmFf dmFsICsgY2EgKyB+MFVMTDsgIC8vICsgQ0EgKyAoLTEpCisrICAgICAgc2V0UmVnaXN0ZXIocnQs IEk2NChyZXN1bHQpKTsKKysgICAgICAvLyBDQSBpZiBjYXJyeSBvdXQgb2YgKFJBICsgQ0EgKyAw eEZGRkZGRkZGRkZGRkZGRkYpCisrICAgICAgYm9vbCBuZXdDQSA9IChyYV92YWwgIT0gMCkgfHwg KGNhICE9IDApOworKyAgICAgIHNldFhFUkNBKG5ld0NBKTsKKysgICAgICBpZiAocmMpIHVwZGF0 ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyMDI6 IHsKKysgICAgICAvLyBhZGR6ZTogUlQgPSBSQSArIENBCisrICAgICAgdWludDY0X3QgcmFfdmFs ID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgp ID8gMVVMTCA6IDBVTEw7CisrICAgICAgdWludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgY2E7Cisr ICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICBzZXRYRVJDQShyZXN1 bHQgPCByYV92YWwpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQwOiB7CisrICAgICAgLy8gc3ViZjogUlQg PSBSQiAtIFJBCisrICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihyYikgLSBnZXRS ZWdpc3RlcihyYSk7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlc3VsdCk7CisrICAgICAgaWYg KHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDU1MjogeworKyAgICAgIC8vIHN1YmZvOiBSVCA9IFJCIC0gUkEsIHNldCBPVgorKyAgICAgIGlu dDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEpOworKyAgICAgIGludDY0X3QgcmJfdmFsID0g Z2V0UmVnaXN0ZXIocmIpOworKyAgICAgIGludDY0X3QgcmVzdWx0ID0gcmJfdmFsIC0gcmFfdmFs OworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgIGJvb2wgb3YgPSAoKHJi X3ZhbCBeIHJhX3ZhbCkgJiAocmJfdmFsIF4gcmVzdWx0KSkgPCAwOworKyAgICAgIHNldFhFUk9W KG92KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgODogeworKyAgICAgIC8vIHN1YmZjOiBSVCA9IH5SQSArIFJCICsg MQorKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAg IHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHVpbnQ2NF90 IHJlc3VsdCA9IH5yYV92YWwgKyByYl92YWwgKyAxOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJ NjQocmVzdWx0KSk7CisrICAgICAgLy8gQ0EgPSBubyBib3Jyb3cgPSAoUkIgPj0gUkEgdW5zaWdu ZWQpCisrICAgICAgc2V0WEVSQ0EocmJfdmFsID49IHJhX3ZhbCk7CisrICAgICAgaWYgKHJjKSB1 cGRhdGVDUjAoSTY0KHJlc3VsdCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MTM2OiB7CisrICAgICAgLy8gc3ViZmU6IFJUID0gflJBICsgUkIgKyBDQQorKyAgICAgIHVpbnQ2 NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVpbnQ2NF90IHJiX3Zh bCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHVpbnQ2NF90IGNhID0gZ2V0WEVSQ0Eo KSA/IDFVTEwgOiAwVUxMOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IH5yYV92YWwgKyByYl92 YWwgKyBjYTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOworKyAgICAgIF9f dWludDEyOF90IHdpZGUgPSAoX191aW50MTI4X3QpKH5yYV92YWwpICsgKF9fdWludDEyOF90KXJi X3ZhbCArIGNhOworKyAgICAgIHNldFhFUkNBKCh3aWRlID4+IDY0KSAhPSAwKTsKKysgICAgICBp ZiAocmMpIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSAyMzI6IHsKKysgICAgICAvLyBzdWJmemU6IFJUID0gflJBICsgQ0EKKysgICAgICB1 aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCBj YSA9IGdldFhFUkNBKCkgPyAxVUxMIDogMFVMTDsKKysgICAgICB1aW50NjRfdCByZXN1bHQgPSB+ cmFfdmFsICsgY2E7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAg ICBzZXRYRVJDQShjYSA+IHJhX3ZhbCk7ICAvLyBDQSBpZiB+UkEgKyBDQSBvdmVyZmxvd3MKKysg ICAgICBpZiAocmMpIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSAxMDQ6IHsKKysgICAgICAvLyBuZWc6IFJUID0gLVJBCisrICAgICAgaW50 NjRfdCByZXN1bHQgPSAtZ2V0UmVnaXN0ZXIocmEpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBy ZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7 CisrICAgIH0KKysKKysgICAgLy8gLS0tIE11bHRpcGx5IC0tLQorKyAgICBjYXNlIDIzMzogewor KyAgICAgIC8vIG11bGxkOiBSVCA9IFJBICogUkIgKGxvdyA2NCBiaXRzKQorKyAgICAgIGludDY0 X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocmEpICogZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIHNl dFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA3NDU6IHsKKysgICAgICAvLyBtdWxs ZG86IFJUID0gUkEgKiBSQiwgc2V0IE9WCisrICAgICAgaW50NjRfdCByYV92YWwgPSBnZXRSZWdp c3RlcihyYSk7CisrICAgICAgaW50NjRfdCByYl92YWwgPSBnZXRSZWdpc3RlcihyYik7CisrICAg ICAgaW50NjRfdCByZXN1bHQgPSByYV92YWwgKiByYl92YWw7CisrICAgICAgc2V0UmVnaXN0ZXIo cnQsIHJlc3VsdCk7CisrICAgICAgLy8gT1YgaWYgaGlnaCBwYXJ0IG9mIGZ1bGwgMTI4LWJpdCBw cm9kdWN0IGlzIG5vdCBhbGwtc2lnbi4KKysgICAgICBpbnQ2NF90IGhpID0gTXVsdGlwbHlIaWdo U2lnbmVkKHJhX3ZhbCwgcmJfdmFsKTsKKysgICAgICBib29sIG92ID0gKGhpICE9IChyZXN1bHQg Pj4gNjMpKTsKKysgICAgICBzZXRYRVJPVihvdik7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAo cmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDIzNTogeworKyAgICAg IC8vIG11bGx3OiBSVCA9IHNpZ25fZXh0KFJBWzMyOjYzXSAqIFJCWzMyOjYzXSkKKysgICAgICBp bnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KUkzMihnZXRSZWdpc3RlcihyYSkpICoKKysgICAgICAg ICAgICAgICAgICAgICAgIChpbnQ2NF90KUkzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHNl dFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA3NDc6IHsKKysgICAgICAvLyBtdWxs d28KKysgICAgICBpbnQ2NF90IHJhX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYSkpOworKyAgICAg IGludDY0X3QgcmJfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgaW50NjRfdCBy ZXN1bHQgPSByYV92YWwgKiByYl92YWw7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlc3VsdCk7 CisrICAgICAgYm9vbCBvdiA9IChyZXN1bHQgIT0gKGludDY0X3QpSTMyKHJlc3VsdCkpOworKyAg ICAgIHNldFhFUk9WKG92KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzM6IHsKKysgICAgICAvLyBtdWxoZDogUlQg PSBoaWdoIDY0IGJpdHMgb2YgUkEgKiBSQiAoc2lnbmVkKQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0 LCBNdWx0aXBseUhpZ2hTaWduZWQoZ2V0UmVnaXN0ZXIocmEpLCBnZXRSZWdpc3RlcihyYikpKTsK KysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJyZWFr OworKyAgICB9CisrICAgIGNhc2UgOTogeworKyAgICAgIC8vIG11bGhkdTogUlQgPSBoaWdoIDY0 IGJpdHMgb2YgUkEgKiBSQiAodW5zaWduZWQpCisrICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChN dWx0aXBseUhpZ2hVbnNpZ25lZChVNjQoZ2V0UmVnaXN0ZXIocmEpKSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NChnZXRSZWdpc3RlcihyYikpKSkp OworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgYnJl YWs7CisrICAgIH0KKysgICAgY2FzZSA3NTogeworKyAgICAgIC8vIG11bGh3OiBSVCA9IGhpZ2gg MzIgYml0cyBvZiAoUkFbMzI6NjNdICogUkJbMzI6NjNdKSwgc2lnbmVkCisrICAgICAgaW50NjRf dCByZXN1bHQgPQorKyAgICAgICAgICAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmEpKSAqIChp bnQ2NF90KUkzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1 bHQgPj4gMzIpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7Cisr ICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMTogeworKyAgICAgIC8vIG11bGh3dTog UlQgPSBoaWdoIDMyIGJpdHMsIHVuc2lnbmVkCisrICAgICAgdWludDY0X3QgcmVzdWx0ID0KKysg ICAgICAgICAgKHVpbnQ2NF90KVUzMihnZXRSZWdpc3RlcihyYSkpICogKHVpbnQ2NF90KVUzMihn ZXRSZWdpc3RlcihyYikpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0ID4+IDMy KSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBi cmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0gRGl2aWRlIC0tLQorKyAgICBjYXNlIDQ4OTog eworKyAgICAgIC8vIGRpdmQ6IFJUID0gUkEgLyBSQiAoc2lnbmVkLCA2NC1iaXQpCisrICAgICAg aW50NjRfdCByYV92YWwgPSBnZXRSZWdpc3RlcihyYSk7CisrICAgICAgaW50NjRfdCByYl92YWwg PSBnZXRSZWdpc3RlcihyYik7CisrICAgICAgaWYgKHJiX3ZhbCA9PSAwIHx8IChyYV92YWwgPT0g SU5UNjRfTUlOICYmIHJiX3ZhbCA9PSAtMSkpIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAw KTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIHJhX3ZhbCAvIHJi X3ZhbCk7CisrICAgICAgfQorKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0 KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMDAxOiB7CisrICAgICAgLy8g ZGl2ZG8KKysgICAgICBpbnQ2NF90IHJhX3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBp bnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lzdGVyKHJiKTsKKysgICAgICBib29sIG92ID0gKHJiX3Zh bCA9PSAwKSB8fCAocmFfdmFsID09IElOVDY0X01JTiAmJiByYl92YWwgPT0gLTEpOworKyAgICAg IGlmIChvdikgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxzZSB7 CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgcmFfdmFsIC8gcmJfdmFsKTsKKysgICAgICB9Cisr ICAgICAgc2V0WEVST1Yob3YpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVy KHJ0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA0NTc6IHsKKysgICAgICAv LyBkaXZkdTogdW5zaWduZWQgNjQtYml0IGRpdmlkZQorKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9 IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRS ZWdpc3RlcihyYikpOworKyAgICAgIGlmIChyYl92YWwgPT0gMCkgeworKyAgICAgICAgc2V0UmVn aXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwg STY0KHJhX3ZhbCAvIHJiX3ZhbCkpOworKyAgICAgIH0KKysgICAgICBpZiAocmMpIHVwZGF0ZUNS MChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgOTY5 OiB7CisrICAgICAgLy8gZGl2ZHVvCisrICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJl Z2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgcmJfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJi KSk7CisrICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0gMCk7CisrICAgICAgaWYgKG92KSB7Cisr ICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNl dFJlZ2lzdGVyKHJ0LCBJNjQocmFfdmFsIC8gcmJfdmFsKSk7CisrICAgICAgfQorKyAgICAgIHNl dFhFUk9WKG92KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDkxOiB7CisrICAgICAgLy8gZGl2dzog c2lnbmVkIDMyLWJpdCBkaXZpZGUKKysgICAgICBpbnQzMl90IHJhX3ZhbCA9IEkzMihnZXRSZWdp c3RlcihyYSkpOworKyAgICAgIGludDMyX3QgcmJfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJiKSk7 CisrICAgICAgaWYgKHJiX3ZhbCA9PSAwIHx8IChyYV92YWwgPT0gSU5UMzJfTUlOICYmIHJiX3Zh bCA9PSAtMSkpIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysgICAgICB9IGVsc2Ug eworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwgLyByYl92YWwpKTsK KysgICAgICB9CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEwMDM6IHsKKysgICAgICAvLyBkaXZ3bwor KyAgICAgIGludDMyX3QgcmFfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgaW50 MzJfdCByYl92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBib29sIG92ID0gKHJi X3ZhbCA9PSAwKSB8fCAocmFfdmFsID09IElOVDMyX01JTiAmJiByYl92YWwgPT0gLTEpOworKyAg ICAgIGlmIChvdikgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxz ZSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpKHJhX3ZhbCAvIHJiX3ZhbCkp OworKyAgICAgIH0KKysgICAgICBzZXRYRVJPVihvdik7CisrICAgICAgaWYgKHJjKSB1cGRhdGVD UjAoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQ1 OTogeworKyAgICAgIC8vIGRpdnd1OiB1bnNpZ25lZCAzMi1iaXQgZGl2aWRlCisrICAgICAgdWlu dDMyX3QgcmFfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDMyX3QgcmJf dmFsID0gVTMyKGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgaWYgKHJiX3ZhbCA9PSAwKSB7Cisr ICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNl dFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsIC8gcmJfdmFsKSk7CisrICAgICAgfQorKyAg ICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA5NzE6IHsKKysgICAgICAvLyBkaXZ3dW8KKysgICAgICB1aW50MzJf dCByYV92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50MzJfdCByYl92YWwg PSBVMzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBib29sIG92ID0gKHJiX3ZhbCA9PSAwKTsK KysgICAgICBpZiAob3YpIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysgICAgICB9 IGVsc2UgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwgLyByYl92 YWwpKTsKKysgICAgICB9CisrICAgICAgc2V0WEVST1Yob3YpOworKyAgICAgIGlmIChyYykgdXBk YXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAg Ly8gLS0tIFBPV0VSOSBtb2R1bG8gKElTQSAzLjApIC0tLQorKyAgICAvLyBSZXN1bHQgb2YgInVu ZGVmaW5lZCIgZGl2aXNpb24gKHJiX3ZhbCA9PSAwLCBvciBzaWduZWQgSU5UX01JTiAvIC0xKQor KyAgICAvLyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHBlciBQb3dlciBJU0E7IG1hdGNoaW5n IHRoZSBkaXZYIGJlaGF2aW91cgorKyAgICAvLyBhYm92ZSwgd2UgeWllbGQgMCBpbiB0aG9zZSBj YXNlcy4gUmMgaGFzIG5vIGVuY29kaW5nIGZvciB0aGVzZSBvcHMuCisrICAgIGNhc2UgNzc5OiB7 CisrICAgICAgLy8gbW9kc3c6IFJUID0gUkEgJSBSQiAoc2lnbmVkLCAzMi1iaXQpCisrICAgICAg aW50MzJfdCByYV92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBpbnQzMl90IHJi X3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIGlmIChyYl92YWwgPT0gMCB8fCAo cmFfdmFsID09IElOVDMyX01JTiAmJiByYl92YWwgPT0gLTEpKSB7CisrICAgICAgICBzZXRSZWdp c3RlcihydCwgMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAo aW50NjRfdCkocmFfdmFsICUgcmJfdmFsKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAg ICB9CisrICAgIGNhc2UgMjY3OiB7CisrICAgICAgLy8gbW9kdXc6IFJUID0gUkEgJSBSQiAodW5z aWduZWQsIDMyLWJpdCkKKysgICAgICB1aW50MzJfdCByYV92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIo cmEpKTsKKysgICAgICB1aW50MzJfdCByYl92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysg ICAgICBpZiAocmJfdmFsID09IDApIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysg ICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwg JSByYl92YWwpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA3 Nzc6IHsKKysgICAgICAvLyBtb2RzZDogUlQgPSBSQSAlIFJCIChzaWduZWQsIDY0LWJpdCkKKysg ICAgICBpbnQ2NF90IHJhX3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBpbnQ2NF90IHJi X3ZhbCA9IGdldFJlZ2lzdGVyKHJiKTsKKysgICAgICBpZiAocmJfdmFsID09IDAgfHwgKHJhX3Zh bCA9PSBJTlQ2NF9NSU4gJiYgcmJfdmFsID09IC0xKSkgeworKyAgICAgICAgc2V0UmVnaXN0ZXIo cnQsIDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgcmFfdmFs ICUgcmJfdmFsKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAy NjU6IHsKKysgICAgICAvLyBtb2R1ZDogUlQgPSBSQSAlIFJCICh1bnNpZ25lZCwgNjQtYml0KQor KyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVp bnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAgICAgIGlmIChyYl92YWwg PT0gMCkgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxzZSB7Cisr ICAgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJhX3ZhbCAlIHJiX3ZhbCkpOworKyAgICAgIH0K KysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0gTG9naWNhbCAtLS0KKysgICAg Y2FzZSAyODogeworKyAgICAgIC8vIGFuZDogUkEgPSBSUyAmIFJCCisrICAgICAgaW50NjRfdCBy ZXN1bHQgPSBnZXRSZWdpc3RlcihydCkgJiBnZXRSZWdpc3RlcihyYik7CisrICAgICAgc2V0UmVn aXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDYwOiB7CisrICAgICAgLy8gYW5kYzogUkEg PSBSUyAmIH5SQgorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpICYgfmdl dFJlZ2lzdGVyKHJiKTsKKysgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBp ZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNh c2UgNDQ0OiB7CisrICAgICAgLy8gb3I6IFJBID0gUlMgfCBSQgorKyAgICAgIGludDY0X3QgcmVz dWx0ID0gZ2V0UmVnaXN0ZXIocnQpIHwgZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIHNldFJlZ2lz dGVyKHJhLCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAg ICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA0MTI6IHsKKysgICAgICAvLyBvcmM6IFJBID0g UlMgfCB+UkIKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJ0KSB8IH5nZXRS ZWdpc3RlcihyYik7CisrICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAgaWYg KHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDMxNjogeworKyAgICAgIC8vIHhvcjogUkEgPSBSUyBeIFJCCisrICAgICAgaW50NjRfdCByZXN1 bHQgPSBnZXRSZWdpc3RlcihydCkgXiBnZXRSZWdpc3RlcihyYik7CisrICAgICAgc2V0UmVnaXN0 ZXIocmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAg ICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQ3NjogeworKyAgICAgIC8vIG5hbmQ6IFJBID0g fihSUyAmIFJCKQorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gfihnZXRSZWdpc3RlcihydCkgJiBn ZXRSZWdpc3RlcihyYikpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAg IGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAg Y2FzZSAxMjQ6IHsKKysgICAgICAvLyBub3I6IFJBID0gfihSUyB8IFJCKQorKyAgICAgIGludDY0 X3QgcmVzdWx0ID0gfihnZXRSZWdpc3RlcihydCkgfCBnZXRSZWdpc3RlcihyYikpOworKyAgICAg IHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3Vs dCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyODQ6IHsKKysgICAgICAvLyBl cXY6IFJBID0gfihSUyBeIFJCKQorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gfihnZXRSZWdpc3Rl cihydCkgXiBnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQp OworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysKKysgICAgLy8gLS0tIFNoaWZ0cyAtLS0KKysgICAgY2FzZSAyNzogeworKyAgICAgIC8v IHNsZDogUkEgPSBSUyA8PCBSQls1ODo2M10gaWYgUkJbNTddPT0wLCBlbHNlIFJBPTAKKysgICAg ICB1aW50NjRfdCBzaGlmdCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHVpbnQ2NF90 IHJzX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGludDY0X3QgcmVzdWx0Owor KyAgICAgIGlmIChzaGlmdCAmIDB4NDApIHsKKysgICAgICAgIHJlc3VsdCA9IDA7CisrICAgICAg fSBlbHNlIHsKKysgICAgICAgIHJlc3VsdCA9IEk2NChyc192YWwgPDwgKHNoaWZ0ICYgMHgzRikp OworKyAgICAgIH0KKysgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBpZiAo cmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MjQ6IHsKKysgICAgICAvLyBzbHc6IFJBID0gUlNbMzI6NjNdIDw8IFJCWzU5OjYzXSBpZiBSQls1 OF09PTAsIGVsc2UgUkE9MCAoMzItYml0KQorKyAgICAgIHVpbnQzMl90IHNoaWZ0ID0gVTMyKGdl dFJlZ2lzdGVyKHJiKSk7CisrICAgICAgdWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVy KHJ0KSk7CisrICAgICAgdWludDMyX3QgcmVzdWx0OworKyAgICAgIGlmIChzaGlmdCAmIDB4MjAp IHsKKysgICAgICAgIHJlc3VsdCA9IDA7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHJlc3Vs dCA9IHJzX3ZhbCA8PCAoc2hpZnQgJiAweDFGKTsKKysgICAgICB9CisrICAgICAgc2V0UmVnaXN0 ZXIocmEsIChpbnQ2NF90KShpbnQzMl90KXJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVD UjAoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDUz OTogeworKyAgICAgIC8vIHNyZDogUkEgPSBSUyA+PiBSQls1ODo2M10gaWYgUkJbNTddPT0wLCBl bHNlIFJBPTAgKGxvZ2ljYWwpCisrICAgICAgdWludDY0X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0 ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCByc192YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsK KysgICAgICBpbnQ2NF90IHJlc3VsdDsKKysgICAgICBpZiAoc2hpZnQgJiAweDQwKSB7CisrICAg ICAgICByZXN1bHQgPSAwOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXN1bHQgPSBJNjQo cnNfdmFsID4+IChzaGlmdCAmIDB4M0YpKTsKKysgICAgICB9CisrICAgICAgc2V0UmVnaXN0ZXIo cmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDUzNjogeworKyAgICAgIC8vIHNydzogUkEgPSBSU1sz Mjo2M10gPj4gUkJbNTk6NjNdIGxvZ2ljYWwgKDMyLWJpdCkKKysgICAgICB1aW50MzJfdCBzaGlm dCA9IFUzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIHVpbnQzMl90IHJzX3ZhbCA9IFUzMihn ZXRSZWdpc3RlcihydCkpOworKyAgICAgIHVpbnQzMl90IHJlc3VsdDsKKysgICAgICBpZiAoc2hp ZnQgJiAweDIwKSB7CisrICAgICAgICByZXN1bHQgPSAwOworKyAgICAgIH0gZWxzZSB7CisrICAg ICAgICByZXN1bHQgPSByc192YWwgPj4gKHNoaWZ0ICYgMHgxRik7CisrICAgICAgfQorKyAgICAg IHNldFJlZ2lzdGVyKHJhLCAoaW50NjRfdCkoaW50MzJfdClyZXN1bHQpOworKyAgICAgIGlmIChy YykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSA3OTQ6IHsKKysgICAgICAvLyBzcmFkOiBSQSA9IFJTID4+IFJCWzU4OjYzXSBhcml0 aG1ldGljICg2NC1iaXQpLCBzZXQgQ0EKKysgICAgICB1aW50NjRfdCBzaGlmdCA9IFU2NChnZXRS ZWdpc3RlcihyYikpOworKyAgICAgIGludDY0X3QgcnNfdmFsID0gZ2V0UmVnaXN0ZXIocnQpOwor KyAgICAgIGludDY0X3QgcmVzdWx0OworKyAgICAgIGJvb2wgY2Fycnk7CisrICAgICAgaWYgKHNo aWZ0ICYgMHg0MCkgeworKyAgICAgICAgcmVzdWx0ID0gcnNfdmFsID4+IDYzOyAgLy8gYWxsIHNp Z24gYml0cworKyAgICAgICAgY2FycnkgPSAocnNfdmFsIDwgMCk7CisrICAgICAgfSBlbHNlIHsK KysgICAgICAgIHVpbnQzMl90IHNoID0gc2hpZnQgJiAweDNGOworKyAgICAgICAgcmVzdWx0ID0g cnNfdmFsID4+IHNoOworKyAgICAgICAgLy8gQ0EgPSAxIGlmIFJTIGlzIG5lZ2F0aXZlIGFuZCBh bnkgMS1iaXRzIHdlcmUgc2hpZnRlZCBvdXQuCisrICAgICAgICBjYXJyeSA9IChyc192YWwgPCAw KSAmJiAoKHJzX3ZhbCAmICgoMVVMTCA8PCBzaCkgLSAxKSkgIT0gMCk7CisrICAgICAgfQorKyAg ICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKKysg ICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgNzkyOiB7CisrICAgICAgLy8gc3JhdzogUkEgPSBSU1szMjo2M10gPj4gUkJbNTk6 NjNdIGFyaXRobWV0aWMgKDMyLWJpdCksIHNldCBDQQorKyAgICAgIHVpbnQzMl90IHNoaWZ0ID0g VTMyKGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgaW50MzJfdCByc192YWwgPSBJMzIoZ2V0UmVn aXN0ZXIocnQpKTsKKysgICAgICBpbnQzMl90IHJlc3VsdDsKKysgICAgICBib29sIGNhcnJ5Owor KyAgICAgIGlmIChzaGlmdCAmIDB4MjApIHsKKysgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+PiAz MTsKKysgICAgICAgIGNhcnJ5ID0gKHJzX3ZhbCA8IDApOworKyAgICAgIH0gZWxzZSB7CisrICAg ICAgICB1aW50MzJfdCBzaCA9IHNoaWZ0ICYgMHgxRjsKKysgICAgICAgIHJlc3VsdCA9IHJzX3Zh bCA+PiBzaDsKKysgICAgICAgIGNhcnJ5ID0gKHJzX3ZhbCA8IDApICYmICgocnNfdmFsICYgKCgx VSA8PCBzaCkgLSAxKSkgIT0gMCk7CisrICAgICAgfQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAo aW50NjRfdClyZXN1bHQpOworKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKKysgICAgICBpZiAocmMp IHVwZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgODI2OgorKyAgICBjYXNlIDgyNzogeworKyAgICAgIC8vIHNyYWRpIFJBLCBSUywgU0g6 IFJBID0gRVhUUyhSUykgPj4gc2ggYXJpdGhtZXRpYyAoNjQtYml0KSwgc2V0IENBLgorKyAgICAg IC8vIFhTLWZvcm0sIFhPPTQxMyAoOS1iaXQsIGJpdHMgMjEtMjkpLCBzaFs1XSBhdCBiaXQgMzAs IFJjIGF0IGJpdCAzMS4KKysgICAgICAvLyBPdXIgeG9WYWx1ZSgpIGV4dHJhY3RzIGJpdHMgMTA6 MSAoMTAgYml0cykKKysgICAgICAvLyB3aGljaCB5aWVsZHMgNDEzKjIgKyBzaFs1XSA9IDgyNiAo c2hbNV09MCkgb3IgODI3IChzaFs1XT0xKS4KKysgICAgICAvLyBzaFswOjRdIGF0IGluc3RydWN0 aW9uIGJpdHMgMTU6MTEgKD0gcmFWYWx1ZSBmaWVsZCBwb3NpdGlvbiwgYnV0CisrICAgICAgLy8g Zm9yIHRoaXMgWFMtZm9ybSB0aGV5J3JlIHRoZSBTSFswOjRdIHN1YmZpZWxkKS4KKysgICAgICB1 aW50MzJfdCBzaCA9IGluc3RyLT5iaXRzKDE1LCAxMSkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KTsK KysgICAgICBpbnQ2NF90IHJzX3ZhbCA9IGdldFJlZ2lzdGVyKHJ0KTsKKysgICAgICBpbnQ2NF90 IHJlc3VsdCA9IChzaCA9PSAwKSA/IHJzX3ZhbCA6IChyc192YWwgPj4gc2gpOworKyAgICAgIC8v IENBIDo9IHJzX3ZhbCA8IDAgJiYgYW55IGJpdHMgc2hpZnRlZCBvdXQgYXJlIDEuCisrICAgICAg Ym9vbCBjYXJyeSA9IChyc192YWwgPCAwKSAmJiBzaCA+IDAgJiYKKysgICAgICAgICAgICAgICAg ICAgKChVNjQocnNfdmFsKSAmICgoMVVMTCA8PCBzaCkgLSAxKSkgIT0gMCk7CisrICAgICAgc2V0 UmVnaXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAgc2V0WEVSQ0EoY2FycnkpOworKyAgICAgIGlm IChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA4MjQ6IHsKKysgICAgICAvLyBzcmF3aTogUkEgPSBSU1szMjo2M10gPj4gU0ggYXJpdGhtZXRp YyAoMzItYml0KSwgc2V0IENBCisrICAgICAgdWludDMyX3Qgc2ggPSBpbnN0ci0+Yml0cygxNSwg MTEpOworKyAgICAgIGludDMyX3QgcnNfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAg ICAgaW50MzJfdCByZXN1bHQgPSByc192YWwgPj4gc2g7CisrICAgICAgYm9vbCBjYXJyeSA9IChy c192YWwgPCAwKSAmJiBzaCA+IDAgJiYKKysgICAgICAgICAgICAgICAgICAgKChVMzIocnNfdmFs KSAmICgoMVUgPDwgc2gpIC0gMSkpICE9IDApOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAoaW50 NjRfdClyZXN1bHQpOworKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKKysgICAgICBpZiAocmMpIHVw ZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAg IC8vIC0tLSBFeHRlbmQgLyBjb3VudCAtLS0KKysgICAgY2FzZSA5NTQ6IHsKKysgICAgICAvLyBl eHRzYjogUkEgPSBzaWduX2V4dChSU1s1Njo2M10pCisrICAgICAgaW50NjRfdCByZXN1bHQgPSAo aW50NjRfdCkoaW50OF90KShnZXRSZWdpc3RlcihydCkgJiAweEZGKTsKKysgICAgICBzZXRSZWdp c3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgOTIyOiB7CisrICAgICAgLy8gZXh0c2g6IFJB ID0gc2lnbl9leHQoUlNbNDg6NjNdKQorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0X3Qp KGludDE2X3QpKGdldFJlZ2lzdGVyKHJ0KSAmIDB4RkZGRik7CisrICAgICAgc2V0UmVnaXN0ZXIo cmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDk4NjogeworKyAgICAgIC8vIGV4dHN3OiBSQSA9IHNp Z25fZXh0KFJTWzMyOjYzXSkKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KShpbnQz Ml90KShnZXRSZWdpc3RlcihydCkgJiAweEZGRkZGRkZGKTsKKysgICAgICBzZXRSZWdpc3Rlcihy YSwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrICAgIGNhc2UgNTg6IHsKKysgICAgICAvLyBjbnRsemQ6IFJBID0gY291 bnQgbGVhZGluZyB6ZXJvcyBvZiBSUyAoNjQtYml0KQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBD b3VudExlYWRpbmdaZXJvczY0KFU2NChnZXRSZWdpc3RlcihydCkpKSk7CisrICAgICAgaWYgKHJj KSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIDI2OiB7CisrICAgICAgLy8gY250bHp3OiBSQSA9IGNvdW50IGxlYWRpbmcgemVyb3Mg b2YgUlNbMzI6NjNdICgzMi1iaXQpCisrICAgICAgc2V0UmVnaXN0ZXIocmEsIENvdW50TGVhZGlu Z1plcm9zMzIoVTMyKGdldFJlZ2lzdGVyKHJ0KSkpKTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNS MChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNTcw OiB7CisrICAgICAgLy8gY250dHpkCisrICAgICAgc2V0UmVnaXN0ZXIocmEsIENvdW50VHJhaWxp bmdaZXJvczY0KFU2NChnZXRSZWdpc3RlcihydCkpKSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVD UjAoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDUz ODogeworKyAgICAgIC8vIGNudHR6dworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBDb3VudFRyYWls aW5nWmVyb3MzMihVMzIoZ2V0UmVnaXN0ZXIocnQpKSkpOworKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1 MDY6IHsKKysgICAgICAvLyBwb3BjbnRkCisrICAgICAgc2V0UmVnaXN0ZXIocmEsIFBvcENvdW50 NjQoVTY0KGdldFJlZ2lzdGVyKHJ0KSkpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBj YXNlIDM3ODogeworKyAgICAgIC8vIHBvcGNudHc6IHBvcGNvdW50IGVhY2ggMzItYml0IGhhbGYg aW5kZXBlbmRlbnRseSwgc3VtIGluIGVhY2ggaGFsZgorKyAgICAgIHVpbnQ2NF90IHZhbCA9IFU2 NChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIHVpbnQzMl90IGxvID0gUG9wQ291bnQzMihVMzIo dmFsKSk7CisrICAgICAgdWludDMyX3QgaGkgPSBQb3BDb3VudDMyKFUzMih2YWwgPj4gMzIpKTsK KysgICAgICBzZXRSZWdpc3RlcihyYSwgSTY0KCgodWludDY0X3QpaGkgPDwgMzIpIHwgbG8pKTsK KysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEyMjogeworKyAgICAgIC8vIHBvcGNu dGI6IHBvcGNvdW50IGVhY2ggYnl0ZSBpbmRlcGVuZGVudGx5CisrICAgICAgc2V0UmVnaXN0ZXIo cmEsIEk2NChQb3BDb3VudFBlckJ5dGUoVTY0KGdldFJlZ2lzdGVyKHJ0KSkpKSk7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxODc6IHsKKysgICAgICAvLyBicmQgKFBPV0VSMTAp OiBSQSA9IGJ5dGUtcmV2ZXJzZShSUykgZnVsbCA2NC1iaXQgZG91Ymxld29yZC4KKysgICAgICBz ZXRSZWdpc3RlcihyYSwgSTY0KF9fYnVpbHRpbl9ic3dhcDY0KFU2NChnZXRSZWdpc3RlcihydCkp KSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjE5OiB7CisrICAgICAgLy8g YnJoIChQT1dFUjEwKTogYnl0ZS1yZXZlcnNlIGVhY2ggb2YgdGhlIDQgaGFsZndvcmRzIGluIFJT LgorKyAgICAgIHVpbnQ2NF90IHYgPSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICB1aW50 NjRfdCBvdXQgPSAoKHYgJiAweEZGMDBGRjAwRkYwMEZGMDBVTEwpID4+IDgpIHwKKysgICAgICAg ICAgICAgICAgICAgICAoKHYgJiAweDAwRkYwMEZGMDBGRjAwRkZVTEwpIDw8IDgpOworKyAgICAg IHNldFJlZ2lzdGVyKHJhLCBJNjQob3V0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAg Y2FzZSAxNTU6IHsKKysgICAgICAvLyBicncgKFBPV0VSMTApOiBieXRlLXJldmVyc2UgZWFjaCBv ZiB0aGUgMiB3b3JkcyBpbiBSUy4KKysgICAgICB1aW50NjRfdCB2ID0gVTY0KGdldFJlZ2lzdGVy KHJ0KSk7CisrICAgICAgdWludDY0X3Qgb3V0ID0gKCh1aW50NjRfdClfX2J1aWx0aW5fYnN3YXAz MigodWludDMyX3QpKHYgPj4gMzIpKSA8PCAzMikgfAorKyAgICAgICAgICAgICAgICAgICAgICh1 aW50NjRfdClfX2J1aWx0aW5fYnN3YXAzMigodWludDMyX3Qpdik7CisrICAgICAgc2V0UmVnaXN0 ZXIocmEsIEk2NChvdXQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0g Q29tcGFyZSAoWC1mb3JtKSAtLS0KKysgICAgY2FzZSAwOiB7CisrICAgICAgLy8gY21wIChjbXB3 L2NtcGQpOiBzaWduZWQgY29tcGFyZQorKyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFs dWUoKTsKKysgICAgICBib29sIGwgPSBpbnN0ci0+bEJpdCgpOworKyAgICAgIGlmIChsKSB7Cisr ICAgICAgICBzZXRDUkZpZWxkQ21wKGJmLCBnZXRSZWdpc3RlcihyYSksIGdldFJlZ2lzdGVyKHJi KSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNldENSRmllbGRDbXAoYmYsIChpbnQ2NF90 KUkzMihnZXRSZWdpc3RlcihyYSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClJ MzIoZ2V0UmVnaXN0ZXIocmIpKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgMzI6IHsKKysgICAgICAvLyBjbXBsIChjbXBsdy9jbXBsZCk6IHVuc2lnbmVkIGNv bXBhcmUKKysgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7CisrICAgICAgYm9v bCBsID0gaW5zdHItPmxCaXQoKTsKKysgICAgICBpZiAobCkgeworKyAgICAgICAgc2V0Q1JGaWVs ZENtcFUoYmYsIFU2NChnZXRSZWdpc3RlcihyYSkpLCBVNjQoZ2V0UmVnaXN0ZXIocmIpKSk7Cisr ICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNldENSRmllbGRDbXBVKGJmLCAodWludDY0X3QpVTMy KGdldFJlZ2lzdGVyKHJhKSksCisrICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpVTMy KGdldFJlZ2lzdGVyKHJiKSkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKwor KyAgICAvLyAtLS0gVHJhcCAtLS0KKysgICAgY2FzZSA0OiB7CisrICAgICAgLy8gdHc6IFRyYXAg V29yZC4gVGhlIEpJVCB1c2VzIHRoaXMgZm9yIGRlYnVnZ2luZyAvIHRhZ2dpbmcuCisrICAgICAg Ly8gSW4gdGhlIHNpbXVsYXRvciB3ZSBqdXN0IHRyZWF0IGl0IGFzIGEgTk9QICh0aGUgSklUIHVz ZXMgdGFnZ2VkCisrICAgICAgLy8gdHJhcCB3b3JkcyB0aGF0IGFyZSBuZXZlciBhY3R1YWxseSBy ZWFjaGVkIGR1cmluZyBub3JtYWwgZXhlY3V0aW9uLAorKyAgICAgIC8vIHRoZXkgc2VydmUgYXMg bWV0YWRhdGEgZm9yIHRoZSBwYXRjaGVyKS4KKysgICAgICBicmVhazsKKysgICAgfQorKworKyAg ICAvLyAtLS0gU1BSIC0tLQorKyAgICBjYXNlIDMzOTogeworKyAgICAgIC8vIG1mc3ByOiBSVCA9 IFNQUgorKyAgICAgIC8vIFNQUiBlbmNvZGluZzogc3ByWzQ6MF0gYXQgYml0cyAxNi4uMjAsIHNw cls5OjVdIGF0IGJpdHMgMTEuLjE1CisrICAgICAgdWludDMyX3Qgc3ByX2xvID0gaW5zdHItPnJh VmFsdWUoKTsgIC8vIGJpdHMgMTYuLjIwCisrICAgICAgdWludDMyX3Qgc3ByX2hpID0gaW5zdHIt PnJiVmFsdWUoKTsgIC8vIGJpdHMgMTEuLjE1CisrICAgICAgdWludDMyX3Qgc3ByID0gKHNwcl9s bykgfCAoc3ByX2hpIDw8IDUpOworKyAgICAgIHN3aXRjaCAoc3ByKSB7CisrICAgICAgICBjYXNl IDg6ICAvLyBMUgorKyAgICAgICAgICBzZXRSZWdpc3RlcihydCwgZ2V0TFIoKSk7CisrICAgICAg ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSA5OiAgLy8gQ1RSCisrICAgICAgICAgIHNldFJlZ2lz dGVyKHJ0LCBnZXRDVFIoKSk7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSAxOiAg Ly8gWEVSCisrICAgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQoZ2V0WEVSKCkpKTsKKysgICAg ICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBNT1pfQ1JBU0hfVU5T QUZFX1BSSU5URigibWZzcHI6IHVuaGFuZGxlZCBTUFIgJXUiLCBzcHIpOworKyAgICAgIH0KKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQ2NzogeworKyAgICAgIC8vIG10c3ByOiBT UFIgPSBSUworKyAgICAgIHVpbnQzMl90IHNwcl9sbyA9IGluc3RyLT5yYVZhbHVlKCk7CisrICAg ICAgdWludDMyX3Qgc3ByX2hpID0gaW5zdHItPnJiVmFsdWUoKTsKKysgICAgICB1aW50MzJfdCBz cHIgPSAoc3ByX2xvKSB8IChzcHJfaGkgPDwgNSk7CisrICAgICAgaW50NjRfdCB2YWwgPSBnZXRS ZWdpc3RlcihydCk7CisrICAgICAgc3dpdGNoIChzcHIpIHsKKysgICAgICAgIGNhc2UgODogIC8v IExSCisrICAgICAgICAgIHNldExSKHZhbCk7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAg Y2FzZSA5OiAgLy8gQ1RSCisrICAgICAgICAgIHNldENUUih2YWwpOworKyAgICAgICAgICBicmVh azsKKysgICAgICAgIGNhc2UgMTogIC8vIFhFUgorKyAgICAgICAgICBzZXRYRVIoVTY0KHZhbCkp OworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIE1PWl9D UkFTSF9VTlNBRkVfUFJJTlRGKCJtdHNwcjogdW5oYW5kbGVkIFNQUiAldSIsIHNwcik7CisrICAg ICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTk6IHsKKysgICAgICAvLyBt Zm9jcmY6IHJlYWQgb25lIENSIGZpZWxkIHNlbGVjdGVkIGJ5IHRoZSBGWE0gYml0bWFzayBpbnRv IFJULgorKyAgICAgIC8vIChQbGFpbiBtZmNyIHNoYXJlcyB0aGlzIFhPIHdpdGggRlhNPTA7IHdl IG1vZGVsIGJvdGggYnkgcmVhZGluZworKyAgICAgIC8vIHRoZSBmdWxsIENSIOKAlCB0aGUgSklU IG9ubHkgZW1pdHMgbWZvY3JmIGFuZCB0aGUgYml0cyBvdXRzaWRlIHRoZQorKyAgICAgIC8vIHNl bGVjdGVkIGZpZWxkIGFyZSBzcGVjJ2QgInVuZGVmaW5lZCIsIHNvIHJlYWRpbmcgdGhlIGZ1bGwg Q1IgaXMKKysgICAgICAvLyBhIHZhbGlkIGltcGxlbWVudGF0aW9uLikKKysgICAgICBzZXRSZWdp c3RlcihydCwgKGludDY0X3QpZ2V0Q1IoKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAg Y2FzZSAxNDQ6IHsKKysgICAgICAvLyBtdGNyZjogbW92ZSB0byBDUiBmaWVsZHMKKysgICAgICAv LyBGWE0gZmllbGQgaXMgaW4gYml0cyAxMi4uMTkuCisrICAgICAgdWludDMyX3QgZnhtID0gaW5z dHItPmJpdHMoMTksIDEyKTsKKysgICAgICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0 ZXIocnQpKTsKKysgICAgICB1aW50MzJfdCBjciA9IGdldENSKCk7CisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIGlmIChmeG0gJiAoMHg4MCA+PiBpKSkgewor KyAgICAgICAgICB1aW50MzJfdCBzaGlmdCA9IDQgKiAoNyAtIGkpOworKyAgICAgICAgICBjciA9 IChjciAmIH4oMHhGdSA8PCBzaGlmdCkpIHwgKHJzX3ZhbCAmICgweEZ1IDw8IHNoaWZ0KSk7Cisr ICAgICAgICB9CisrICAgICAgfQorKyAgICAgIHNldENSKGNyKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDU3NjogeworKyAgICAgIC8vIG1jcnhyeDogbW92ZSBYRVJbT1YsT1Yz MixDQSxDQTMyXSB0byBDUiBmaWVsZCBCRgorKyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJm VmFsdWUoKTsKKysgICAgICB1aW50OF90IGZpZWxkID0gMDsKKysgICAgICBpZiAoZ2V0WEVST1Yo KSkgZmllbGQgfD0gMHg4OworKyAgICAgIC8vIE9WMzIgYXQgYml0IDE5IG9mIFhFUgorKyAgICAg IGlmICgoZ2V0WEVSKCkgPj4ga1hFUk9WMzJCaXQpICYgMSkgZmllbGQgfD0gMHg0OworKyAgICAg IGlmIChnZXRYRVJDQSgpKSBmaWVsZCB8PSAweDI7CisrICAgICAgaWYgKChnZXRYRVIoKSA+PiBr WEVSQ0EzMkJpdCkgJiAxKSBmaWVsZCB8PSAweDE7CisrICAgICAgc2V0Q1JGaWVsZChiZiwgZmll bGQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzg0OgorKyAgICBjYXNlIDQx NjogeworKyAgICAgIC8vIFBPV0VSMTAgc2V0YmMvc2V0YmNyOiBSVCA9IChDUltCSV09PU4pID8g MSA6IDAKKysgICAgICAvLyBCSSBhdCBiaXRzIDExLi4xNTsgeG89Mzg0IChzZXRiYywgTj0xKSwg eG89NDE2IChzZXRiY3IsIE49MCkuCisrICAgICAgdWludDMyX3QgYmkgPSBpbnN0ci0+cmFWYWx1 ZSgpOworKyAgICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7CisrICAgICAgdWludDMyX3Qg Y3JCaXQgPSBiaSAlIDQ7CisrICAgICAgdWludDhfdCBjckZpZWxkVmFsID0gZ2V0Q1JGaWVsZChj ckZpZWxkKTsKKysgICAgICBib29sIGJpdFNldDsKKysgICAgICBzd2l0Y2ggKGNyQml0KSB7Cisr ICAgICAgICBjYXNlIDA6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsg YnJlYWs7CisrICAgICAgICBjYXNlIDE6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRH VCkgIT0gMDsgYnJlYWs7CisrICAgICAgICBjYXNlIDI6IGJpdFNldCA9IChjckZpZWxkVmFsICYg a0NSRmllbGRFUSkgIT0gMDsgYnJlYWs7CisrICAgICAgICBjYXNlIDM6IGJpdFNldCA9IChjckZp ZWxkVmFsICYga0NSRmllbGRTTykgIT0gMDsgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBiaXRT ZXQgPSBmYWxzZTsgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGJvb2wgd2FudCA9ICh4byA9PSAz ODQpID8gYml0U2V0IDogIWJpdFNldDsKKysgICAgICBzZXRSZWdpc3RlcihydCwgd2FudCA/IDEg OiAwKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0gSW5kZXhlZCBsb2Fk cyAtLS0KKysgICAgY2FzZSAyMTogeworKyAgICAgIC8vIGxkeDogUlQgPSBbUkF8MCArIFJCXSwg OCBieXRlcworKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAg ICAgc2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIpKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDUzOiB7CisrICAgICAgLy8gbGR1eDogUlQgPSBbUkEgKyBSQl0sIHVw ZGF0ZSBSQQorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQVVwZGF0ZSh0aGlzLCBpbnN0cik7 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIpKTsKKysgICAgICBzZXRS ZWdpc3RlcihyYSwgZWEpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjM6IHsK KysgICAgICAvLyBsd3p4OiBSVCA9IHplcm9fZXh0KFtSQXwwICsgUkJdLCA0IGJ5dGVzKQorKyAg ICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0 ZXIocnQsIFU2NChyZWFkV1UoZWEsIGluc3RyKSkpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgMzQxOiB7CisrICAgICAgLy8gbHdheDogUlQgPSBzaWduX2V4dChbUkF8MCArIFJC XSwgNCBieXRlcykKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwor KyAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZWFkVyhlYSwgaW5zdHIpKTsKKysgICAg ICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDg3OiB7CisrICAgICAgLy8gbGJ6eAorKyAgICAg IHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0ZXIo cnQsIFU2NChyZWFkQlUoZWEpKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAy Nzk6IHsKKysgICAgICAvLyBsaHp4CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMs IGluc3RyKTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRIVShlYSwgaW5zdHIpKSk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzNDM6IHsKKysgICAgICAvLyBsaGF4 CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBzZXRS ZWdpc3RlcihydCwgKGludDY0X3QpcmVhZEgoZWEsIGluc3RyKSk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA1MzU6IHsKKysgICAgICAvLyBsZnN4OiBsb2FkIGZsb2F0IHNpbmds ZSBpbmRleGVkLCB3aWRlbiB0byBkb3VibGUgKE5hTi1wcmVzZXJ2aW5nKQorKyAgICAgIHVpbnQ2 NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKCFoYW5kbGVXYXNtU2Vn RmF1bHQoZWEsIDQpKSB7CisrICAgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRfY2FzdDxm bG9hdCo+KGVhKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxv YXRQcmVzZXJ2aW5nTmFOKHZhbCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDU5OTogeworKyAgICAgIC8vIGxmZHg6IGxvYWQgZmxvYXQgZG91YmxlIGluZGV4 ZWQKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHNl dEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZWFkRChlYSwgaW5zdHIpKTsKKysgICAgICBicmVhazsK KysgICAgfQorKyAgICBjYXNlIDg1NTogeworKyAgICAgIC8vIGxmaXdheDogbG9hZCBmbG9hdCBh cyBpbnRlZ2VyIHdvcmQgYWxnZWJyYWljCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKKysgICAgICBpbnQzMl90IHZhbCA9IHJlYWRXKGVhLCBpbnN0cik7CisrICAg ICAgc2V0RnB1UmVnaXN0ZXIocnQsIChpbnQ2NF90KXZhbCk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSA4ODc6IHsKKysgICAgICAvLyBsZml3eng6IGxvYWQgZmxvYXQgYXMgaW50 ZWdlciB3b3JkIHplcm8KKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIp OworKyAgICAgIHVpbnQzMl90IHZhbCA9IHJlYWRXVShlYSwgaW5zdHIpOworKyAgICAgIHNldEZw dVJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkodWludDY0X3QpdmFsKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKworKyAgICAvLyAtLS0gSW5kZXhlZCBzdG9yZXMgLS0tCisrICAgIGNhc2UgMTQ5OiB7 CisrICAgICAgLy8gc3RkeAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0 cik7CisrICAgICAgd3JpdGVEVyhlYSwgZ2V0UmVnaXN0ZXIocnQpLCBpbnN0cik7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxNTE6IHsKKysgICAgICAvLyBzdHd4CisrICAgICAg dWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICB3cml0ZVcoZWEsIEkz MihnZXRSZWdpc3RlcihydCkpLCBpbnN0cik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAg Y2FzZSAyMTU6IHsKKysgICAgICAvLyBzdGJ4CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVB KHRoaXMsIGluc3RyKTsKKysgICAgICB3cml0ZUIoZWEsICh1aW50OF90KShnZXRSZWdpc3Rlcihy dCkgJiAweEZGKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA0MDc6IHsKKysg ICAgICAvLyBzdGh4CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsK KysgICAgICB3cml0ZUgoZWEsIFUxNihnZXRSZWdpc3RlcihydCkpLCBpbnN0cik7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA2NjM6IHsKKysgICAgICAvLyBzdGZzeDogc3RvcmUg ZmxvYXQgc2luZ2xlIGluZGV4ZWQgKE5hTi1wcmVzZXJ2aW5nKQorKyAgICAgIHVpbnQ2NF90IGVh ID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQo ZWEsIDQpKSB7CisrICAgICAgICBmbG9hdCBmdmFsID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05h TihnZXRGcHVSZWdpc3RlckRvdWJsZShydCkpOworKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8 ZmxvYXQqPihlYSkgPSBmdmFsOworKyAgICAgICAgTExCaXRfID0gZmFsc2U7CisrICAgICAgfQor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzI3OiB7CisrICAgICAgLy8gc3RmZHg6 IHN0b3JlIGZsb2F0IGRvdWJsZSBpbmRleGVkCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVB KHRoaXMsIGluc3RyKTsKKysgICAgICB3cml0ZUQoZWEsIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJ0 KSwgaW5zdHIpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vIC0tLSBCeXRlLXJl dmVyc2VkIHN0b3JlcyAtLS0KKysgICAgY2FzZSA2NjI6IHsKKysgICAgICAvLyBzdHdicngKKysg ICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHVpbnQzMl90 IHZhbCA9IFUzMihnZXRSZWdpc3RlcihydCkpOworKyAgICAgIHdyaXRlVyhlYSwgKGludDMyX3Qp X19idWlsdGluX2Jzd2FwMzIodmFsKSwgaW5zdHIpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr CisrICAgIC8vIC0tLSBBdG9taWMgbG9hZC9zdG9yZSAtLS0KKysgICAgLy8KKysgICAgLy8gTG9h ZC1yZXNlcnZlIGFuZCBzdG9yZS1jb25kaXRpb25hbC4gU3ViLXdvcmQgdmFyaWFudHMKKysgICAg Ly8gKGxiYXJ4L2xoYXJ4L3N0YmN4Li9zdGhjeC4pIHdlcmUgYWRkZWQgaW4gSVNBIHYyLjA2IChQ T1dFUjcrKS4KKysgICAgLy8gV29yZC9kb3VibGV3b3JkIHZhcmlhbnRzIChsd2FyeC9zdHdjeC4v bGRhcngvc3RkY3guKSBnbyBiYWNrCisrICAgIC8vIHRvIHRoZSBiYXNlIElTQS4KKysgICAgY2Fz ZSA1MjogeworKyAgICAgIC8vIGxiYXJ4IFJULCBSQSwgUkIsIEVICisrICAgICAgdWludDY0X3Qg ZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICB1aW50OF90IHZhbCA9IGxvYWRMaW5r ZWRCKGVhLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KXZhbCk7Cisr ICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMTY6IHsKKysgICAgICAvLyBsaGFyeCBS VCwgUkEsIFJCLCBFSAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7 CisrICAgICAgdWludDE2X3QgdmFsID0gbG9hZExpbmtlZEgoZWEsIGluc3RyKTsKKysgICAgICBz ZXRSZWdpc3RlcihydCwgKGludDY0X3QpdmFsKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIDY5NDogeworKyAgICAgIC8vIHN0YmN4LiBSUywgUkEsIFJCOiBhbHdheXMgUmM9MS4K KysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHVpbnQ4 X3QgdmFsID0gdWludDhfdChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGludCByZXN1bHQgPSBz dG9yZUNvbmRpdGlvbmFsQihlYSwgdmFsLCBpbnN0cik7CisrICAgICAgaWYgKHJlc3VsdCkgewor KyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZEVRIHwgKGtDUkZpZWxkU08gKiBnZXRYRVJT TygpKSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRT TyAqIGdldFhFUlNPKCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBj YXNlIDcyNjogeworKyAgICAgIC8vIHN0aGN4LiBSUywgUkEsIFJCOiBhbHdheXMgUmM9MS4KKysg ICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHVpbnQxNl90 IHZhbCA9IHVpbnQxNl90KGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgaW50IHJlc3VsdCA9IHN0 b3JlQ29uZGl0aW9uYWxIKGVhLCB2YWwsIGluc3RyKTsKKysgICAgICBpZiAocmVzdWx0KSB7Cisr ICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkRVEgfCAoa0NSRmllbGRTTyAqIGdldFhFUlNP KCkpKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZFNP ICogZ2V0WEVSU08oKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNh c2UgMjA6IHsKKysgICAgICAvLyBsd2FyeAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0 aGlzLCBpbnN0cik7CisrICAgICAgaW50MzJfdCB2YWwgPSBsb2FkTGlua2VkVyhlYSwgaW5zdHIp OworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCl2YWwpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgMTUwOiB7CisrICAgICAgLy8gc3R3Y3guCisrICAgICAgdWludDY0 X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBpbnQzMl90IHZhbCA9IEkzMihn ZXRSZWdpc3RlcihydCkpOworKyAgICAgIGludCByZXN1bHQgPSBzdG9yZUNvbmRpdGlvbmFsVyhl YSwgdmFsLCBpbnN0cik7CisrICAgICAgLy8gc3R3Y3guIGFsd2F5cyB1cGRhdGVzIENSMDogRVEg aWYgc3RvcmUgc3VjY2VlZGVkLCBlbHNlIGNsZWFyLgorKyAgICAgIGlmIChyZXN1bHQpIHsKKysg ICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRFUSB8IChrQ1JGaWVsZFNPICogZ2V0WEVSU08o KSkpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkU08g KiBnZXRYRVJTTygpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA4NDogeworKyAgICAgIC8vIGxkYXJ4CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKKysgICAgICBpbnQ2NF90IHZhbCA9IGxvYWRMaW5rZWREKGVhLCBpbnN0cik7 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHZhbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSAyMTQ6IHsKKysgICAgICAvLyBzdGRjeC4KKysgICAgICB1aW50NjRfdCBlYSA9IFhG b3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIGludDY0X3QgdmFsID0gZ2V0UmVnaXN0ZXIocnQp OworKyAgICAgIGludCByZXN1bHQgPSBzdG9yZUNvbmRpdGlvbmFsRChlYSwgdmFsLCBpbnN0cik7 CisrICAgICAgaWYgKHJlc3VsdCkgeworKyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZEVR IHwgKGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IHNldENSRmllbGQoMCwga0NSRmllbGRTTyAqIGdldFhFUlNPKCkpOworKyAgICAgIH0KKysgICAg ICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0gU3luY2hyb25pemF0aW9uIC0tLQorKyAg ICBjYXNlIDU5ODoKKysgICAgICAvLyBzeW5jIC8gbHdzeW5jIC8gcHRlc3luYzogbm8tb3AgaW4g c2ltdWxhdG9yCisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgODU0OgorKyAgICAgIC8vIGVpZWlv OiBuby1vcCBpbiBzaW11bGF0b3IKKysgICAgICBicmVhazsKKysKKysgICAgLy8gLS0tIEdQUiA8 LT4gVlNSIG1vdmUgKG1ham9yIG9wY29kZSAzMSwgWFgxLWZvcm0pIC0tLQorKyAgICAvLworKyAg ICAvLyBUd28gc3ViLWVuY29kaW5nczoKKysgICAgLy8gICBtdHZzciogWFQsUkF7LFJCfTogWFgx Rm9ybSDigJQgWFQgYXQgYml0cyAyNToyMSAoNSkgKyBUWCBhdCBiaXQgMCAoMSk7CisrICAgIC8v ICAgICAgICAgICAgICAgICAgICAgIFJBIGF0IGJpdHMgMjA6MTY7IFJCIChpZiBhbnkpIGF0IGJp dHMgMTU6MTEuCisrICAgIC8vICAgbWZ2c3IqIFJBLFhTOiAgICAgIFhYMUZvcm1NZnZzciDigJQg WFMgYXQgYml0cyAyNToyMSAoNSkgKyBTWCBhdCBiaXQgMCAoMSk7CisrICAgIC8vICAgICAgICAg ICAgICAgICAgICAgIFJBIChHUFIgZGVzdCkgYXQgYml0cyAyMDoxNi4KKysgICAgLy8KKysgICAg Ly8gVGhlIG9yaWdpbmFsIGRlY29kZXIgdHJlYXRlZCAicnNWYWx1ZSgpIiAoYml0cyAyNToyMSA9 IFZTUiBmaWVsZCkgYXMgYQorKyAgICAvLyBHUFIgaW5kZXgg4oCUIGRvdWJseSB3cm9uZzogdGhl IEdQUiBzaWRlIGxpdmVzIGF0IGJpdHMgMjA6MTYgKD0gcmFWYWx1ZSgpKQorKyAgICAvLyBhbmQg dGhlIFZTUiBzaWRlIGlzIDYgYml0cyAoNS1iaXQgZmllbGQgKyBleHRlbnNpb24gYml0IGF0IGJp dCAwKS4gRml4ZWQKKysgICAgLy8gaGVyZSBhbmQgZXh0ZW5kZWQgZm9yIHRoZSBmdWxsIFZTUiBu YW1lc3BhY2UgKDAtNjMpLgorKyAgICAvLyBUaGUgSVNBIG5hbWVzIGVhY2ggZmllbGQgaW4gQkUu ICJYVC5EVzAiIGlzIHRoZSBCRSBkb3VibGV3b3JkIHdoaWNoIG9uCisrICAgIC8vIFBQQzY0TEUg cmVnaXN0ZXIgc3RvcmFnZSBsaXZlcyBhdCBMRSBieXRlcyA4LTE1IChvdXIgYnl0ZXNbXSBpcyBM RS1uYXR1cmFsOgorKyAgICAvLyBieXRlc1swXSA9IGxvd2VzdCBhZGRyZXNzKS4gV2l0aCBgbXR2 c3JkIC8gbWZ2c3JkIC8gbXR2c3JkZCAvIG1mdnNybGQKKysgICAgLy8gLyBzdHh2eGA6IG10dnNy ZCBvZiAweDExMjIzMzQ0NTU2Njc3ODggcHJvZHVjZXMgYDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAw CisrICAgIC8vIDg4IDc3IDY2IDU1IDQ0IDMzIDIyIDExYCBpbiBtZW1vcnkgKExFIGJ5dGVzIDgt MTUgaG9sZCB0aGUgR1BSIGJpdHMgd2l0aAorKyAgICAvLyBMU0IgYXQgYnl0ZSA4KS4gTWF0Y2hp bmcgc2VtYW50aWNzIGhlcmUgbWVhbnMgdGhlIHNpbSByZXNwZWN0cworKyAgICAvLyB0aGUgZnVs bCBQb3dlciBJU0EsIG5vdCBhIHNlbGYtY29uc2lzdGVudCBMRS1yZXZlcnNlZAorKyAgICAvLyBj b252ZW50aW9uLgorKyAgICBjYXNlIDUxOiB7CisrICAgICAgLy8gbWZ2c3JkIFJBLCBYUzogR1BS W1JBXSA9IFhTLkRXMCA9IExFIGJ5dGVzIDguLjE1LgorKyAgICAgIGludCB4cyA9IGludChpbnN0 ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOyAgLy8gVCArIFNYKFRYKQorKyAg ICAgIHVpbnQ4X3QgYnl0ZXNbMTZdOworKyAgICAgIGdldFZTUjEyOCh4cywgYnl0ZXMpOworKyAg ICAgIGludDY0X3QgdmFsOworKyAgICAgIG1lbWNweSgmdmFsLCBieXRlcyArIDgsIDgpOworKyAg ICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIHZhbCk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSAyMTE6IHsKKysgICAgICAvLyBtdHZzcndhIFhULCBSQTogWFQuRFcw ID0gc2lnbl9leHRfNjQoUkFbMzI6NjNdKTsgWFQuRFcxID0gMC4KKysgICAgICAvLyBQT1dFUjgr IChJU0EgMi4wNykuIENvbWJpbmVzIGV4dHN3ICsgbXR2c3JkLiBMRSBsYXlvdXQ6IGJ5dGVzCisr ICAgICAgLy8gOC0xNSDihpAgc2lnbi1leHRlbmRlZCBsb3cgMzIgb2YgUkE7IGJ5dGVzIDAtNyDi hpAgMC4KKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IGJ5dGVzWzE2XTsKKysgICAgICBpbnQ2NF90IHZh bCA9IChpbnQ2NF90KShpbnQzMl90KWdldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCkpOworKyAg ICAgIG1lbXNldChieXRlcywgMCwgOCk7CisrICAgICAgbWVtY3B5KGJ5dGVzICsgOCwgJnZhbCwg OCk7CisrICAgICAgc2V0VlNSMTI4KHh0LCBieXRlcyk7CisrICAgICAgYnJlYWs7CisrICAgIH0K KysgICAgY2FzZSAxNzk6IHsKKysgICAgICAvLyBtdHZzcmQgWFQsIFJBOiBYVC5EVzAgPSBSQTsg WFQuRFcxID0gMC4KKysgICAgICAvLyBMRSBsYXlvdXQ6IGJ5dGVzIDgtMTUg4oaQIFJBLCBieXRl cyAwLTcg4oaQIDAuCisrICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5z dHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDhfdCBieXRlc1sxNl07CisrICAgICAgaW50 NjRfdCB2YWwgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKTsKKysgICAgICBtZW1zZXQo Ynl0ZXMsIDAsIDgpOworKyAgICAgIG1lbWNweShieXRlcyArIDgsICZ2YWwsIDgpOworKyAgICAg IHNldFZTUjEyOCh4dCwgYnl0ZXMpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MjQzOiB7CisrICAgICAgLy8gbXR2c3J3eiBYVCwgUkE6IFhULkRXMCA9IHplcm9fZXh0KFJBWzMy OjYzXSk7IFhULkRXMSA9IDAuCisrICAgICAgLy8gVGhlIDMyLWJpdCB2YWx1ZSBsaXZlcyBpbiB0 aGUgbG93IDMyIGJpdHMgb2YgRFcwID0gQkUgd29yZCAxLAorKyAgICAgIC8vIHdoaWNoIG9uIExF IHN0b3JhZ2UgaXMgTEUgYnl0ZXMgOC4uMTEgKExFIHdvcmQgMik7IExFIGJ5dGVzCisrICAgICAg Ly8gMTIuLjE1ID0gMCAodXBwZXIgaGFsZiBvZiBEVzAgPSBCRSB3b3JkIDAgPSB6ZXJvLWV4dGVu ZGVkKS4KKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IGJ5dGVzWzE2XTsKKysgICAgICB1aW50MzJfdCBs byA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKSk7CisrICAgICAgbWVtc2V0KGJ5 dGVzLCAwLCAxNik7CisrICAgICAgYnl0ZXNbOF0gID0gKHVpbnQ4X3QpKGxvKTsKKysgICAgICBi eXRlc1s5XSAgPSAodWludDhfdCkobG8gPj4gOCk7CisrICAgICAgYnl0ZXNbMTBdID0gKHVpbnQ4 X3QpKGxvID4+IDE2KTsKKysgICAgICBieXRlc1sxMV0gPSAodWludDhfdCkobG8gPj4gMjQpOwor KyAgICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMzA3OiB7CisrICAgICAgLy8gbWZ2c3JsZCBSQSwgWFM6IEdQUltSQV0gPSBYUy5EVzEg PSBMRSBieXRlcyAwLi43LgorKyAgICAgIC8vIFBPV0VSOS4KKysgICAgICBpbnQgeHMgPSBpbnQo aW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90 IGJ5dGVzWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeHMsIGJ5dGVzKTsKKysgICAgICBpbnQ2NF90 IHZhbDsKKysgICAgICBtZW1jcHkoJnZhbCwgYnl0ZXMsIDgpOworKyAgICAgIHNldFJlZ2lzdGVy KGluc3RyLT5yYVZhbHVlKCksIHZhbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA0MDM6IHsKKysgICAgICAvLyBtdHZzcndzIFhULCBSQSAoUE9XRVI5KTogc3BsYXQgbG93IDMy IGJpdHMgb2YgUkEgaW50byBhbGwgZm91cgorKyAgICAgIC8vIHdvcmQgZWxlbWVudHMgb2YgWFQu IFRoZSBzYW1lIDMyLWJpdCB2YWx1ZSBhcHBlYXJzIGluIGxhbmVzIDAuLjMsCisrICAgICAgLy8g c28gdGhlIGJ5dGUgbGF5b3V0IGlzIGlkZW50aWNhbCBpbiBMRSBhbmQgQkUg4oCUCisrICAgICAg Ly8gYnl0ZXMgMC4uMTUgPSBsbyB8IGxvIHwgbG8gfCBsby4KKysgICAgICBpbnQgeHQgPSBpbnQo aW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90 IGJ5dGVzWzE2XTsKKysgICAgICB1aW50MzJfdCBsbyA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+ cmFWYWx1ZSgpKSk7CisrICAgICAgdWludDY0X3QgdmFsID0gKCh1aW50NjRfdClsbyA8PCAzMikg fCBsbzsKKysgICAgICBtZW1jcHkoYnl0ZXMsICZ2YWwsIDgpOworKyAgICAgIG1lbWNweShieXRl cyArIDgsICZ2YWwsIDgpOworKyAgICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrICAgIGNhc2UgNDM1OiB7CisrICAgICAgLy8gbXR2c3JkZCBYVCwgUkEs IFJCOiBYVC5EVzAgPSBSQTsgWFQuRFcxID0gUkIuIFBPV0VSOS4KKysgICAgICAvLyBMRTogYnl0 ZXMgOC0xNSDihpAgUkEsIGJ5dGVzIDAtNyDihpAgUkIuCisrICAgICAgaW50IHh0ID0gaW50KGlu c3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDhfdCBi eXRlc1sxNl07CisrICAgICAgaW50NjRfdCBkdzAgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1 ZSgpKTsKKysgICAgICBpbnQ2NF90IGR3MSA9IGdldFJlZ2lzdGVyKGluc3RyLT5yYlZhbHVlKCkp OworKyAgICAgIG1lbWNweShieXRlcywgICAgICZkdzEsIDgpOworKyAgICAgIG1lbWNweShieXRl cyArIDgsICZkdzAsIDgpOworKyAgICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrCisrICAgIC8vIC0tLSBWTVggdmVjdG9yIG1lbW9yeSAobWFqb3Igb3Bj b2RlIDMxKSAtLS0KKysgICAgLy8KKysgICAgLy8gbHZ4IC8gc3R2eCAvIGx2eGwgLyBzdHZ4bC4K KysgICAgLy8gICBFQSA9IChSQXwwKSArIFJCOyBFQSA9IEVBICYgfjB4RiAoYWxpZ25tZW50KQor KyAgICAvLyAgIGx2eDogIFZSVFswOjEyN10gPC0gTUVNKEVBLCAxNikgICAgICAgYnl0ZXNbMF0g PSAqKEVBKzApCisrICAgIC8vICAgc3R2eDogTUVNKEVBLCAxNikgPC0gVlJTWzA6MTI3XSAgICAg ICAqKEVBKzApID0gYnl0ZXNbMF0KKysgICAgLy8gbHZ4bCAvIHN0dnhsIGFyZSBpZGVudGljYWwg aW4gZWZmZWN0IHRvIGx2eCAvIHN0dnggKHRoZSAibCIgZm9ybQorKyAgICAvLyBoaW50cyAibGVh c3QgcmVjZW50bHkgdXNlZCI7IHNlbWFudGljYWxseSBpbmRpc3Rpbmd1aXNoYWJsZSkuCisrICAg IGNhc2UgMTAzOiB7CisrICAgICAgLy8gbHZ4OiBWUlQgPSBNRU0oRUEgJiB+MHhGLCAxNiBieXRl cykKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVpbnQ2NF90 KDB4Rik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKKysg ICAgICBtZW1jcHkoVlJyZWdpc3RlcnNfW3J0XSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lk Kj4oZWEpLCAxNik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyMzE6IHsKKysg ICAgICAvLyBzdHZ4OiBNRU0oRUEgJiB+MHhGLCAxNiBieXRlcykgPSBWUlMKKysgICAgICB1aW50 NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVpbnQ2NF90KDB4Rik7CisrICAgICAg aWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKKysgICAgICBtZW1jcHkocmVp bnRlcnByZXRfY2FzdDx2b2lkKj4oZWEpLCBWUnJlZ2lzdGVyc19bcnRdLCAxNik7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzNTk6IHsKKysgICAgICAvLyBsdnhsOiBzZW1hbnRp Y2FsbHkgaWRlbnRpY2FsIHRvIGx2eAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlz LCBpbnN0cikgJiB+dWludDY0X3QoMHhGKTsKKysgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0 KGVhLCAxNikpIGJyZWFrOworKyAgICAgIG1lbWNweShWUnJlZ2lzdGVyc19bcnRdLCByZWludGVy cHJldF9jYXN0PGNvbnN0IHZvaWQqPihlYSksIDE2KTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDQ4NzogeworKyAgICAgIC8vIHN0dnhsOiBzZW1hbnRpY2FsbHkgaWRlbnRpY2Fs IHRvIHN0dngKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVp bnQ2NF90KDB4Rik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVh azsKKysgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZWEpLCBWUnJlZ2lzdGVy c19bcnRdLCAxNik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gLS0tIFZTWCB2 ZWN0b3IgbWVtb3J5IGluZGV4ZWQgKG1ham9yIG9wY29kZSAzMSkgLS0tCisrICAgIC8vCisrICAg IC8vIFRoZXNlIG9wcyB0YWtlIGEgNi1iaXQgVlNSIHJlZ2lzdGVyLAorKyAgICAvLyBlbmNvZGVk IGFzIDUtYml0IFQvUyArIDEtYml0IFRYL1NYIGV4dGVuc2lvbiBhdCBpbnN0cnVjdGlvbiBMU0IK KysgICAgLy8gYml0IDAgKD0gb3VyIGluc3RyLT5iaXQoMCkpLiBFQSA9IChSQXwwKSArIFJCLiAx Ni1ieXRlIGFjY2VzcywKKysgICAgLy8gbm90IGZvcmNlZC1hbGlnbmVkIChoYXJkd2FyZSBtYXkg aGFuZGxlIG1pc2FsaWduZWQgdmlhIHN1Yi1hY2Nlc3MKKysgICAgLy8gb3IgYWxpZ25tZW50IGlu dGVycnVwdCBwZXIgaW1wbCkuCisrICAgIC8vCisrICAgIC8vIEJ5dGUtb3JkZXIgbm90ZTogbHh2 eC9zdHh2eCBwZXJmb3JtIGEgbmF0dXJhbCAxNi1ieXRlIExFCisrICAgIC8vIG1lbWNweS4gbHh2 ZDJ4L3N0eHZkMnggb24gcmVhbCBQUEM2NCBMRSBoYXJkd2FyZSBsb2FkL3N0b3JlCisrICAgIC8v IGRvdWJsZXdvcmRzIGluIEJFLXBhaXIgb3JkZXIg4oCUIGkuZS4gbHh2ZDJ4IHBsYWNlcyBtZW1v cnkgYnl0ZXMKKysgICAgLy8gMC03IGluIHRoZSByZWdpc3RlcidzIEJFLURXMCAoPSBMRSBieXRl cyA4LTE1KSBhbmQgYnl0ZXMgOC0xNQorKyAgICAvLyBpbiBCRS1EVzEgKD0gTEUgYnl0ZXMgMC03 KS4gVGhlIEpJVCBicmFja2V0cyBldmVyeSB3YXNtIFNJTUQKKysgICAgLy8gbG9hZC9zdG9yZSB3 aXRoIGEgY29tcGVuc2F0aW5nIHh4cGVybWRpIERNPTIgc28gdGhlIG5ldCBlZmZlY3QKKysgICAg Ly8gaXMgYSBuYXR1cmFsIExFIGJ5dGUgb3JkZXIuIFRoZSBjb25zdGFudCBwb29sIGVtaXRzIHRo ZSBzYW1lCisrICAgIC8vIGx4dmQyeCArIHh4cGVybWRpIHNlcXVlbmNlIChwZXIgUGF0Y2hDb25z dGFudFBvb2xMb2FkKSBidXQKKysgICAgLy8gYXNzdW1lcyB0aGUgaGFyZHdhcmUgc2VtYW50aWNz LCBub3QgYSBwbGFpbiBtZW1jcHkuIFNvIHRoZSBzaW0KKysgICAgLy8gbXVzdCBtYXRjaCByZWFs LWhhcmR3YXJlIGx4dmQyeC9zdHh2ZDJ4IHNlbWFudGljcyBpbmNsdWRpbmcgdGhlCisrICAgIC8v IEJFLURXIGJ5dGUgb3JkZXIg4oCUIG90aGVyd2lzZSB0aGUgcG9zdC1sb2FkIHh4cGVybWRpIHVu c3dhcHMKKysgICAgLy8gYnl0ZXMgdGhhdCB3ZXJlIG5ldmVyIHN3YXBwZWQsIGFuZCBjb25zdGFu dC1wb29sIFNpbWQxMjggbG9hZHMKKysgICAgLy8gKGUuZy4gc2h1ZmZsZSBtYXNrcykgY29tZSBv dXQgd2l0aCBoYWx2ZXMgdHJhbnNwb3NlZC4KKysgICAgY2FzZSAyNjg6IHsKKysgICAgICAvLyBs eHZ4OiBYVCA9IE1FTSgoUkF8MCkrUkIsIDE2KQorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1F QSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBi cmVhazsKKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IGJ1ZlsxNl07CisrICAgICAgbWVtY3B5KGJ1Ziwg cmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oZWEpLCAxNik7CisrICAgICAgc2V0VlNSMTI4 KHh0LCBidWYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzk2OiB7CisrICAg ICAgLy8gc3R4dng6IE1FTSgoUkF8MCkrUkIsIDE2KSA9IFhTCisrICAgICAgdWludDY0X3QgZWEg PSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVh LCAxNikpIGJyZWFrOworKyAgICAgIGludCB4cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGlu c3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYnVmWzE2XTsKKysgICAgICBnZXRW U1IxMjgoeHMsIGJ1Zik7CisrICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVh KSwgYnVmLCAxNik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA4MTM6IHsKKysg ICAgICAvLyBseHNpaHp4IFhULCBSQSwgUkI6IFA5IChJU0EgMy4wKS4gTG9hZCBoYWxmd29yZCB0 byBWU1IgJiB6ZXJvLAorKyAgICAgIC8vIGluZGV4ZWQuIE1FTShFQSwgMikgKExFLW5hdHVyYWwg aGFsZndvcmQpIGlzIHBsYWNlZCBpbiBkd1swXQorKyAgICAgIC8vIGxvdyAxNiBiaXRzOyB0aGUg cmVzdCBvZiB0aGUgVlNSIGlzIHplcm9lZC4gSW4gc2ltIExFLWJ5dGUKKysgICAgICAvLyBzdG9y YWdlLCB0aGF0IGlzIGJ5dGVzWzguLjldIChsb3cgYnl0ZSBhdCBieXRlc1s4XSkuCisrICAgICAg dWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBpZiAoaGFuZGxlV2Fz bVNlZ0ZhdWx0KGVhLCAyKSkgYnJlYWs7CisrICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZh bHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDE2X3QgaGFsZndvcmQg PSByZWFkSChlYSwgaW5zdHIpOworKyAgICAgIHVpbnQ4X3QgYnVmWzE2XTsKKysgICAgICBtZW1z ZXQoYnVmLCAwLCAxNik7CisrICAgICAgYnVmWzhdID0gKHVpbnQ4X3QpKGhhbGZ3b3JkICYgMHhG Rik7CisrICAgICAgYnVmWzldID0gKHVpbnQ4X3QpKChoYWxmd29yZCA+PiA4KSAmIDB4RkYpOwor KyAgICAgIHNldFZTUjEyOCh4dCwgYnVmKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBj YXNlIDk0MTogeworKyAgICAgIC8vIHN0eHNpaHggWFMsIFJBLCBSQjogUDkgKElTQSAzLjApLiBT dG9yZSBoYWxmd29yZCBmcm9tIFZTUiwKKysgICAgICAvLyBpbmRleGVkLiBkd1swXSBsb3cgMTYg Yml0cyAoc2ltIGJ5dGVzWzguLjldIGluIGhvc3QtTEUgb3JkZXIpCisrICAgICAgLy8gYXJlIHdy aXR0ZW4gYXMgYSBoYWxmd29yZCBhdCBNRU0oRUEsIDIpLgorKyAgICAgIHVpbnQ2NF90IGVhID0g WEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwg MikpIGJyZWFrOworKyAgICAgIGludCB4cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3Ry LT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYnVmWzE2XTsKKysgICAgICBnZXRWU1Ix MjgoeHMsIGJ1Zik7CisrICAgICAgdWludDE2X3QgaGFsZndvcmQgPQorKyAgICAgICAgICAodWlu dDE2X3QpYnVmWzhdIHwgKCh1aW50MTZfdClidWZbOV0gPDwgOCk7CisrICAgICAgd3JpdGVIKGVh LCBoYWxmd29yZCwgaW5zdHIpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODQ0 OiB7CisrICAgICAgLy8gbHh2ZDJ4OiBYVCA9IE1FTSgoUkF8MCkrUkIsIDE2KSB3aXRoIEJFLURX IGJ5dGUgb3JkZXJpbmcuCisrICAgICAgLy8gTWVtb3J5IGJ5dGVzIDAtNyBsYW5kIGluIEJFLURX MCAoPSBMRSBieXRlcyA4LTE1KTsgbWVtb3J5CisrICAgICAgLy8gYnl0ZXMgOC0xNSBsYW5kIGlu IEJFLURXMSAoPSBMRSBieXRlcyAwLTcpLgorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0 aGlzLCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVh azsKKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDAp IDw8IDUpKTsKKysgICAgICB1aW50OF90IG1lbVsxNl0sIGJ1ZlsxNl07CisrICAgICAgbWVtY3B5 KG1lbSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oZWEpLCAxNik7CisrICAgICAgbWVt Y3B5KGJ1ZiwgbWVtICsgOCwgOCk7CisrICAgICAgbWVtY3B5KGJ1ZiArIDgsIG1lbSwgOCk7Cisr ICAgICAgc2V0VlNSMTI4KHh0LCBidWYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNh c2UgOTcyOiB7CisrICAgICAgLy8gc3R4dmQyeDogTUVNKChSQXwwKStSQiwgMTYpID0gWFMgd2l0 aCBCRS1EVyBieXRlIG9yZGVyaW5nLgorKyAgICAgIC8vIEludmVyc2Ugb2YgbHh2ZDJ4OiByZWdp c3RlciBMRSBieXRlcyAwLTcg4oaSIG1lbW9yeSBieXRlcyA4LTE1OworKyAgICAgIC8vIExFIGJ5 dGVzIDgtMTUg4oaSIG1lbW9yeSBieXRlcyAwLTcuCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9y bUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikp IGJyZWFrOworKyAgICAgIGludCB4cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5i aXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYnVmWzE2XSwgbWVtWzE2XTsKKysgICAgICBn ZXRWU1IxMjgoeHMsIGJ1Zik7CisrICAgICAgbWVtY3B5KG1lbSwgYnVmICsgOCwgOCk7CisrICAg ICAgbWVtY3B5KG1lbSArIDgsIGJ1ZiwgOCk7CisrICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nh c3Q8dm9pZCo+KGVhKSwgbWVtLCAxNik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAg ZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICAgImRl Y29kZVhGb3JtOiB1bmltcGxlbWVudGVkIFhPPSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG8s CisrICAgICAgICAgIGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSk7CisrICB9CisrfQorKworKy8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gZGVjb2RlUm90YXRlTWFzazogcmx3aW5tKDIxKSwg cmx3bm0oMjMpLCBybHdpbWkoMjApLAorKy8vICAgcmxkaWNsKDMwKSwgcmxkaWNyKDMwKSwgcmxk aWMoMzApLCBybGRpbWkoMzApLCBybGRjbCgzMCksIHJsZGNyKDMwKQorKworK3ZvaWQgU2ltdWxh dG9yOjpkZWNvZGVSb3RhdGVNYXNrKFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgdWludDMy X3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOworKworKyAgaWYgKG9wY29kZSA9PSAyMSkgewor KyAgICAvLyBybHdpbm06IFJBID0gUk9UTDMyKFJTLFNIKSAmIE1BU0soTUIsTUUpLCBSYworKyAg ICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJzVmFsdWUoKSkpOwor KyAgICB1aW50MzJfdCBzaCA9IGluc3RyLT5tU0hWYWx1ZSgpOworKyAgICB1aW50MzJfdCBtYiA9 IGluc3RyLT5tTUJWYWx1ZSgpOworKyAgICB1aW50MzJfdCBtZSA9IGluc3RyLT5tTUVWYWx1ZSgp OworKyAgICB1aW50MzJfdCByb3RhdGVkID0gUm90YXRlTGVmdDMyKHJzX3ZhbCwgc2gpOworKyAg ICB1aW50MzJfdCBtYXNrID0gTUFTSzMyKG1iLCBtZSk7CisrICAgIGludDY0X3QgcmVzdWx0ID0g KGludDY0X3QpKHVpbnQ2NF90KShyb3RhdGVkICYgbWFzayk7CisrICAgIHNldFJlZ2lzdGVyKGlu c3RyLT5yYVZhbHVlKCksIHJlc3VsdCk7CisrICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRl Q1IwKHJlc3VsdCk7CisrICB9IGVsc2UgaWYgKG9wY29kZSA9PSAyMykgeworKyAgICAvLyBybHdu bTogUkEgPSBST1RMMzIoUlMsUkJbMjc6MzFdKSAmIE1BU0soTUIsTUUpLCBSYworKyAgICB1aW50 MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJzVmFsdWUoKSkpOworKyAgICB1 aW50MzJfdCBzaCA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+cmJWYWx1ZSgpKSkgJiAweDFGOwor KyAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tTUJWYWx1ZSgpOworKyAgICB1aW50MzJfdCBtZSA9 IGluc3RyLT5tTUVWYWx1ZSgpOworKyAgICB1aW50MzJfdCByb3RhdGVkID0gUm90YXRlTGVmdDMy KHJzX3ZhbCwgc2gpOworKyAgICB1aW50MzJfdCBtYXNrID0gTUFTSzMyKG1iLCBtZSk7CisrICAg IGludDY0X3QgcmVzdWx0ID0gKGludDY0X3QpKHVpbnQ2NF90KShyb3RhdGVkICYgbWFzayk7Cisr ICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIHJlc3VsdCk7CisrICAgIGlmIChpbnN0 ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICB9IGVsc2UgaWYgKG9wY29kZSA9PSAy MCkgeworKyAgICAvLyBybHdpbWk6IFJBID0gKFJPVEwzMihSUyxTSCkgJiBNQVNLKSB8IChSQSAm IH5NQVNLKSwgUmMKKysgICAgdWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKGluc3Ry LT5yc1ZhbHVlKCkpKTsKKysgICAgdWludDMyX3Qgc2ggPSBpbnN0ci0+bVNIVmFsdWUoKTsKKysg ICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bU1CVmFsdWUoKTsKKysgICAgdWludDMyX3QgbWUgPSBp bnN0ci0+bU1FVmFsdWUoKTsKKysgICAgdWludDMyX3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQzMihy c192YWwsIHNoKTsKKysgICAgdWludDMyX3QgbWFzayA9IE1BU0szMihtYiwgbWUpOworKyAgICB1 aW50MzJfdCByYV92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkpOworKyAg ICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KSh1aW50NjRfdCkoKHJvdGF0ZWQgJiBtYXNrKSB8 IChyYV92YWwgJiB+bWFzaykpOworKyAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBy ZXN1bHQpOworKyAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAg fSBlbHNlIGlmIChvcGNvZGUgPT0gMzApIHsKKysgICAgLy8gTUQtZm9ybSAvIE1EUy1mb3JtOiA2 NC1iaXQgcm90YXRlL21hc2sKKysgICAgdWludDMyX3QgcnMgPSBpbnN0ci0+cnNWYWx1ZSgpOwor KyAgICB1aW50NjRfdCByc192YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocnMpKTsKKysgICAgdWludDMy X3QgcmFfcmVnID0gaW5zdHItPnJhVmFsdWUoKTsKKysKKysgICAgLy8gRGV0ZXJtaW5lIHdoaWNo IHN1Yi1vcGNvZGU6IGJpdHMgMi4uNCBmb3IgTUQtZm9ybSwgYml0IDQgZm9yIE1EUy4KKysgICAg Ly8gTUQ6IGJpdHMgMi4uNAorKyAgICAvLyBNRFM6IGJpdCA0IChybGRjbCBoYXMgYml0ND0wLCBi aXQzLi4yPTAwIHdpdGggYml0MT0xOyBybGRjciBoYXMKKysgICAgLy8gICAgICBiaXQ0PTAsIGJp dDMuLjI9MDEgd2l0aCBiaXQxPTEpLiBBY3R1YWxseToKKysgICAgLy8gICBybGRpY2w6ICAzMCB8 IE1ELVhPPTAgKGJpdHMgMi4uNCA9IDAwMCksIGJpdDE9MAorKyAgICAvLyAgIHJsZGljcjogIDMw IHwgTUQtWE89MSAoYml0cyAyLi40ID0gMDAxKSwgYml0MT0wCisrICAgIC8vICAgcmxkaWM6ICAg MzAgfCBNRC1YTz0yIChiaXRzIDIuLjQgPSAwMTApLCBiaXQxPTAKKysgICAgLy8gICBybGRpbWk6 ICAzMCB8IE1ELVhPPTMgKGJpdHMgMi4uNCA9IDAxMSksIGJpdDE9MAorKyAgICAvLyAgIHJsZGNs OiAgIDMwIHwgTURTLCBiaXQ0PTAsIGJpdDMuLjE9MDAwLCBiaXQwPVJjID0+IGJpdHMgMS4uND0x MDAwCisrICAgIC8vICAgICAgICAgICAgQWN0dWFsbHkgcmxkY2w6IGJpdHMgMS4uNCA9IDEwMDAs IGkuZS4gYml0KDQpPTEsYml0KDMpPTAsCisrICAgIC8vICAgICAgICAgICAgYml0KDIpPTAsYml0 KDEpPTAKKysgICAgLy8gICBybGRjcjogICAzMCB8IE1EUywgYml0cyAxLi40ID0gMTAwMQorKyAg ICAvLworKyAgICAvLyBMZXQncyBjaGVjayBiaXQgNCBmaXJzdDogaWYgYml0KDQpPT0xLCBpdCdz IE1EUy1mb3JtIChybGRjbC9ybGRjcikuCisrICAgIGlmIChpbnN0ci0+Yml0KDQpKSB7CisrICAg ICAgLy8gTURTLWZvcm06IHNoaWZ0IGFtb3VudCBmcm9tIFJCIHJlZ2lzdGVyCisrICAgICAgdWlu dDMyX3Qgc2ggPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJiVmFsdWUoKSkpICYgMHgzRjsKKysg ICAgICB1aW50NjRfdCByb3RhdGVkID0gUm90YXRlTGVmdDY0KHJzX3ZhbCwgc2gpOworKyAgICAg IHVpbnQzMl90IG1iID0gaW5zdHItPm1kc01CVmFsdWUoKTsKKysKKysgICAgICBpZiAoIWluc3Ry LT5iaXQoMSkpIHsKKysgICAgICAgIC8vIHJsZGNsOiBSQSA9IFJPVEw2NChSUywgUkJbNTg6NjNd KSAmIE1BU0sobWIsIDYzKQorKyAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMp OworKyAgICAgICAgaW50NjRfdCByZXN1bHQgPSBJNjQocm90YXRlZCAmIG1hc2spOworKyAgICAg ICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOworKyAgICAgICAgaWYgKGluc3RyLT5yY0Jp dCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgLy8gcmxk Y3I6IFJBID0gUk9UTDY0KFJTLCBSQls1ODo2M10pICYgTUFTSygwLCBtZSkKKysgICAgICAgIHVp bnQzMl90IG1lID0gaW5zdHItPm1kc01CVmFsdWUoKTsKKysgICAgICAgIHVpbnQ2NF90IG1hc2sg PSBNQVNLNjQoMCwgbWUpOworKyAgICAgICAgaW50NjRfdCByZXN1bHQgPSBJNjQocm90YXRlZCAm IG1hc2spOworKyAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOworKyAgICAgICAg aWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICB9CisrICAgIH0g ZWxzZSB7CisrICAgICAgLy8gTUQtZm9ybQorKyAgICAgIHVpbnQzMl90IHNoID0gaW5zdHItPm1k U0hWYWx1ZSgpOworKyAgICAgIHVpbnQ2NF90IHJvdGF0ZWQgPSBSb3RhdGVMZWZ0NjQocnNfdmFs LCBzaCk7CisrICAgICAgdWludDMyX3QgeG9fbWQgPSBpbnN0ci0+Yml0cygzLCAyKTsKKysKKysg ICAgICBzd2l0Y2ggKHhvX21kKSB7CisrICAgICAgICBjYXNlIDA6IHsKKysgICAgICAgICAgLy8g cmxkaWNsOiBSQSA9IFJPVEw2NChSUywgU0gpICYgTUFTSyhtYiwgNjMpCisrICAgICAgICAgIHVp bnQzMl90IG1iID0gaW5zdHItPm1kTUJWYWx1ZSgpOworKyAgICAgICAgICB1aW50NjRfdCBtYXNr ID0gTUFTSzY0KG1iLCA2Myk7CisrICAgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0 ZWQgJiBtYXNrKTsKKysgICAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOworKyAg ICAgICAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgICAg ICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGNhc2UgMTogeworKyAgICAgICAgICAvLyBy bGRpY3I6IFJBID0gUk9UTDY0KFJTLCBTSCkgJiBNQVNLKDAsIG1lKQorKyAgICAgICAgICB1aW50 MzJfdCBtZSA9IGluc3RyLT5tZE1FVmFsdWUoKTsKKysgICAgICAgICAgdWludDY0X3QgbWFzayA9 IE1BU0s2NCgwLCBtZSk7CisrICAgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQg JiBtYXNrKTsKKysgICAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOworKyAgICAg ICAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgICAgICBi cmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGNhc2UgMjogeworKyAgICAgICAgICAvLyBybGRp YzogUkEgPSBST1RMNjQoUlMsIFNIKSAmIE1BU0sobWIsIH5TSCkKKysgICAgICAgICAgLy8gQWN0 dWFsbHk6IE1BU0sobWIsIDYzLVNIKQorKyAgICAgICAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5t ZE1CVmFsdWUoKTsKKysgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMgLSBz aCk7CisrICAgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKKysg ICAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOworKyAgICAgICAgICBpZiAoaW5z dHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgICAgICBicmVhazsKKysgICAg ICAgIH0KKysgICAgICAgIGNhc2UgMzogeworKyAgICAgICAgICAvLyBybGRpbWk6IFJBID0gKFJP VEw2NChSUyxTSCkgJiBNQVNLKSB8IChSQSAmIH5NQVNLKQorKyAgICAgICAgICB1aW50MzJfdCBt YiA9IGluc3RyLT5tZE1CVmFsdWUoKTsKKysgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2 NChtYiwgNjMgLSBzaCk7CisrICAgICAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdp c3RlcihyYV9yZWcpKTsKKysgICAgICAgICAgaW50NjRfdCByZXN1bHQgPSBJNjQoKHJvdGF0ZWQg JiBtYXNrKSB8IChyYV92YWwgJiB+bWFzaykpOworKyAgICAgICAgICBzZXRSZWdpc3RlcihyYV9y ZWcsIHJlc3VsdCk7CisrICAgICAgICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJl c3VsdCk7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdDoK KysgICAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZVJvdGF0ZU1hc2s6IE1E IHhvPSV1IiwgeG9fbWQpOworKyAgICAgIH0KKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgTU9a X0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZVJvdGF0ZU1hc2s6IG9wY29kZT0ldSIsIG9wY29k ZSk7CisrICB9CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gQ1ItYml0IGFj Y2Vzc29ycyB1c2VkIGJ5IHRoZSBYTC1mb3JtIENSLWxvZ2ljIG9wcyAoY3JhbmQsIGNyYW5kYywg Y3JvciwKKysvLyBjcm9yYywgY3J4b3IsIGNyZXF2KS4gQml0IGluZGV4IGlzIGluIEJJRio0K3gg Zm9ybTogZmllbGQ9Yi80LCBiaXQ9YiU0CisrLy8gd2hlcmUgMD1MVCwgMT1HVCwgMj1FUSwgMz1T Ty4KKytzdGF0aWMgaW5saW5lIHVpbnQ4X3QgQ1JCaXRNYXNrKHVpbnQzMl90IGJpdEluRmllbGQp IHsKKysgIHN3aXRjaCAoYml0SW5GaWVsZCkgeworKyAgICBjYXNlIDA6IHJldHVybiBrQ1JGaWVs ZExUOworKyAgICBjYXNlIDE6IHJldHVybiBrQ1JGaWVsZEdUOworKyAgICBjYXNlIDI6IHJldHVy biBrQ1JGaWVsZEVROworKyAgICBjYXNlIDM6IHJldHVybiBrQ1JGaWVsZFNPOworKyAgfQorKyAg cmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgYm9vbCBHZXRDUkJpdChTaW11bGF0b3Im IHMsIHVpbnQzMl90IGIpIHsKKysgIHJldHVybiAocy5nZXRDUkZpZWxkKGIgLyA0KSAmIENSQml0 TWFzayhiICUgNCkpICE9IDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRDUkJpdChT aW11bGF0b3ImIHMsIHVpbnQzMl90IGIsIGJvb2wgdmFsKSB7CisrICB1aW50OF90IGZ2ID0gcy5n ZXRDUkZpZWxkKGIgLyA0KTsKKysgIHVpbnQ4X3QgbWFzayA9IENSQml0TWFzayhiICUgNCk7Cisr ICBzLnNldENSRmllbGQoYiAvIDQsIHZhbCA/IChmdiB8IG1hc2spIDogKGZ2ICYgfm1hc2spKTsK Kyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBkZWNvZGVCcmFuY2g6IGIoMTgp LCBiYygxNiksIFhMLWZvcm0oMTkpCisrCisrdm9pZCBTaW11bGF0b3I6OmRlY29kZUJyYW5jaChT aW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNv ZGUoKTsKKysKKysgIGlmIChvcGNvZGUgPT0gMTgpIHsKKysgICAgLy8gYiAvIGJsOiBJLWZvcm0g dW5jb25kaXRpb25hbCBicmFuY2gKKysgICAgaW50MzJfdCBvZmZzZXQgPSBpbnN0ci0+bGkyNlZh bHVlKCk7CisrICAgIGJvb2wgbGsgPSBpbnN0ci0+bGtCaXQoKTsKKysgICAgYm9vbCBhYSA9IGlu c3RyLT5hYUJpdCgpOworKworKyAgICBpbnQ2NF90IHRhcmdldDsKKysgICAgaWYgKGFhKSB7Cisr ICAgICAgdGFyZ2V0ID0gKGludDY0X3Qpb2Zmc2V0OworKyAgICB9IGVsc2UgeworKyAgICAgIHRh cmdldCA9IGdldF9wYygpICsgKGludDY0X3Qpb2Zmc2V0OworKyAgICB9CisrCisrICAgIGlmIChs aykgeworKyAgICAgIHNldExSKGdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUp OworKyAgICB9CisrCisrICAgIHNldF9wYyh0YXJnZXQpOworKyAgICByZXR1cm47CisrICB9Cisr CisrICBpZiAob3Bjb2RlID09IDE2KSB7CisrICAgIC8vIGJjIC8gYmNsOiBCLWZvcm0gY29uZGl0 aW9uYWwgYnJhbmNoCisrICAgIHVpbnQzMl90IGJvID0gaW5zdHItPmJvVmFsdWUoKTsKKysgICAg dWludDMyX3QgYmkgPSBpbnN0ci0+YmlWYWx1ZSgpOworKyAgICBpbnQzMl90IGJkID0gaW5zdHIt PmJkMTZWYWx1ZSgpOworKyAgICBib29sIGxrID0gaW5zdHItPmxrQml0KCk7CisrICAgIGJvb2wg YWEgPSBpbnN0ci0+YWFCaXQoKTsKKysKKysgICAgLy8gRGVjcmVtZW50IENUUiBpZiBCT1syXSAo Yml0IDIgb2YgQk8sIHdoaWNoIGlzIGJvICYgMHgwNCkgaXMgY2xlYXIuCisrICAgIGlmICghKGJv ICYgMHgwNCkpIHsKKysgICAgICBzZXRDVFIoZ2V0Q1RSKCkgLSAxKTsKKysgICAgfQorKworKyAg ICAvLyBFdmFsdWF0ZSBDVFIgY29uZGl0aW9uLgorKyAgICBib29sIGN0cl9vayA9IChibyAmIDB4 MDQpIHx8CisrICAgICAgICAgICAgICAgICAgKChnZXRDVFIoKSAhPSAwKSBeICgoYm8gJiAweDAy KSAhPSAwKSk7CisrCisrICAgIC8vIEV2YWx1YXRlIENSIGNvbmRpdGlvbi4KKysgICAgdWludDMy X3QgY3JGaWVsZCA9IGJpIC8gNDsKKysgICAgdWludDMyX3QgY3JCaXQgPSBiaSAlIDQ7CisrICAg IHVpbnQ4X3QgY3JGaWVsZFZhbCA9IGdldENSRmllbGQoY3JGaWVsZCk7CisrICAgIGJvb2wgY3JC aXRTZXQ7CisrICAgIHN3aXRjaCAoY3JCaXQpIHsKKysgICAgICBjYXNlIDA6IGNyQml0U2V0ID0g KGNyRmllbGRWYWwgJiBrQ1JGaWVsZExUKSAhPSAwOyBicmVhazsKKysgICAgICBjYXNlIDE6IGNy Qml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEdUKSAhPSAwOyBicmVhazsKKysgICAgICBj YXNlIDI6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEVRKSAhPSAwOyBicmVhazsK KysgICAgICBjYXNlIDM6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZFNPKSAhPSAw OyBicmVhazsKKysgICAgICBkZWZhdWx0OiBjckJpdFNldCA9IGZhbHNlOyBicmVhazsKKysgICAg fQorKyAgICBib29sIGNvbmRfb2sgPSAoYm8gJiAweDEwKSB8fCAoY3JCaXRTZXQgPT0gKChibyAm IDB4MDgpICE9IDApKTsKKysKKysgICAgaWYgKGN0cl9vayAmJiBjb25kX29rKSB7CisrICAgICAg aW50NjRfdCB0YXJnZXQ7CisrICAgICAgaWYgKGFhKSB7CisrICAgICAgICB0YXJnZXQgPSAoaW50 NjRfdCliZDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgdGFyZ2V0ID0gZ2V0X3BjKCkgKyAo aW50NjRfdCliZDsKKysgICAgICB9CisrICAgICAgaWYgKGxrKSB7CisrICAgICAgICBzZXRMUihn ZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICB9CisrICAgICAg c2V0X3BjKHRhcmdldCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8gQnJhbmNoIG5vdCB0YWtl bi4KKysgICAgICBzZXRfcGMoZ2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7 CisrICAgIH0KKysgICAgcmV0dXJuOworKyAgfQorKworKyAgaWYgKG9wY29kZSA9PSAxOSkgewor KyAgICAvLyBYTC1mb3JtOiBiY2xyLCBiY2N0ciwgY3JhbmQsIGNyYW5kYywgY3JvciwgY3JvcmMs IGNyeG9yLCBjcmVxdiwKKysgICAgLy8gICAgICAgICAgbWNyZiwgaXN5bmMKKysgICAgdWludDMy X3QgeGwgPSBpbnN0ci0+eGxWYWx1ZSgpOworKworKyAgICBzd2l0Y2ggKHhsKSB7CisrICAgICAg Y2FzZSAxNjogeworKyAgICAgICAgLy8gYmNscjogY29uZGl0aW9uYWwgYnJhbmNoIHRvIExSCisr ICAgICAgICB1aW50MzJfdCBibyA9IGluc3RyLT5ib1ZhbHVlKCk7CisrICAgICAgICB1aW50MzJf dCBiaSA9IGluc3RyLT5iaVZhbHVlKCk7CisrICAgICAgICBib29sIGxrID0gaW5zdHItPmxrQml0 KCk7CisrCisrICAgICAgICBpZiAoIShibyAmIDB4MDQpKSB7CisrICAgICAgICAgIHNldENUUihn ZXRDVFIoKSAtIDEpOworKyAgICAgICAgfQorKworKyAgICAgICAgYm9vbCBjdHJfb2sgPSAoYm8g JiAweDA0KSB8fAorKyAgICAgICAgICAgICAgICAgICAgICAoKGdldENUUigpICE9IDApIF4gKChi byAmIDB4MDIpICE9IDApKTsKKysKKysgICAgICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7 CisrICAgICAgICB1aW50MzJfdCBjckJpdCA9IGJpICUgNDsKKysgICAgICAgIHVpbnQ4X3QgY3JG aWVsZFZhbCA9IGdldENSRmllbGQoY3JGaWVsZCk7CisrICAgICAgICBib29sIGNyQml0U2V0Owor KyAgICAgICAgc3dpdGNoIChjckJpdCkgeworKyAgICAgICAgICBjYXNlIDA6IGNyQml0U2V0ID0g KGNyRmllbGRWYWwgJiBrQ1JGaWVsZExUKSAhPSAwOyBicmVhazsKKysgICAgICAgICAgY2FzZSAx OiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7CisrICAg ICAgICAgIGNhc2UgMjogY3JCaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7 IGJyZWFrOworKyAgICAgICAgICBjYXNlIDM6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JG aWVsZFNPKSAhPSAwOyBicmVhazsKKysgICAgICAgICAgZGVmYXVsdDogY3JCaXRTZXQgPSBmYWxz ZTsgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBib29sIGNvbmRfb2sgPSAoYm8gJiAweDEw KSB8fCAoY3JCaXRTZXQgPT0gKChibyAmIDB4MDgpICE9IDApKTsKKysKKysgICAgICAgIGlmIChj dHJfb2sgJiYgY29uZF9vaykgeworKyAgICAgICAgICBpbnQ2NF90IHRhcmdldCA9IGdldExSKCkg JiB+M0xMOworKyAgICAgICAgICBpZiAobGspIHsKKysgICAgICAgICAgICBzZXRMUihnZXRfcGMo KSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgICAgfQorKyAgICAgICAg ICBzZXRfcGModGFyZ2V0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHNldF9wYyhn ZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgIH0KKysgICAg ICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDUyODogeworKyAgICAgICAgLy8gYmNj dHI6IGNvbmRpdGlvbmFsIGJyYW5jaCB0byBDVFIKKysgICAgICAgIHVpbnQzMl90IGJvID0gaW5z dHItPmJvVmFsdWUoKTsKKysgICAgICAgIHVpbnQzMl90IGJpID0gaW5zdHItPmJpVmFsdWUoKTsK KysgICAgICAgIGJvb2wgbGsgPSBpbnN0ci0+bGtCaXQoKTsKKysKKysgICAgICAgIC8vIENUUiBp cyBub3QgZGVjcmVtZW50ZWQgZm9yIGJjY3RyLgorKyAgICAgICAgdWludDMyX3QgY3JGaWVsZCA9 IGJpIC8gNDsKKysgICAgICAgIHVpbnQzMl90IGNyQml0ID0gYmkgJSA0OworKyAgICAgICAgdWlu dDhfdCBjckZpZWxkVmFsID0gZ2V0Q1JGaWVsZChjckZpZWxkKTsKKysgICAgICAgIGJvb2wgY3JC aXRTZXQ7CisrICAgICAgICBzd2l0Y2ggKGNyQml0KSB7CisrICAgICAgICAgIGNhc2UgMDogY3JC aXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkTFQpICE9IDA7IGJyZWFrOworKyAgICAgICAg ICBjYXNlIDE6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEdUKSAhPSAwOyBicmVh azsKKysgICAgICAgICAgY2FzZSAyOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRF USkgIT0gMDsgYnJlYWs7CisrICAgICAgICAgIGNhc2UgMzogY3JCaXRTZXQgPSAoY3JGaWVsZFZh bCAmIGtDUkZpZWxkU08pICE9IDA7IGJyZWFrOworKyAgICAgICAgICBkZWZhdWx0OiBjckJpdFNl dCA9IGZhbHNlOyBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJvb2wgY29uZF9vayA9IChi byAmIDB4MTApIHx8IChjckJpdFNldCA9PSAoKGJvICYgMHgwOCkgIT0gMCkpOworKworKyAgICAg ICAgaWYgKGNvbmRfb2spIHsKKysgICAgICAgICAgaW50NjRfdCB0YXJnZXQgPSBnZXRDVFIoKSAm IH4zTEw7CisrICAgICAgICAgIGlmIChsaykgeworKyAgICAgICAgICAgIHNldExSKGdldF9wYygp ICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICAgICAgICB9CisrICAgICAgICAg IHNldF9wYyh0YXJnZXQpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgc2V0X3BjKGdl dF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICAgICAgfQorKyAgICAg ICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMjU3OiB7CisrICAgICAgICAvLyBjcmFu ZDogQ1JbQlRdID0gQ1JbQkFdICYgQ1JbQkJdCisrICAgICAgICB1aW50MzJfdCBidCA9IGluc3Ry LT5ydFZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7Cisr ICAgICAgICB1aW50MzJfdCBiYiA9IGluc3RyLT5yYlZhbHVlKCk7CisrICAgICAgICBTZXRDUkJp dCgqdGhpcywgYnQsIEdldENSQml0KCp0aGlzLCBiYSkgJiYgR2V0Q1JCaXQoKnRoaXMsIGJiKSk7 CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAxMjk6IHsKKysgICAgICAg IC8vIGNyYW5kYzogQ1JbQlRdID0gQ1JbQkFdICYgfkNSW0JCXQorKyAgICAgICAgdWludDMyX3Qg YnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFW YWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgICAg ICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpICYmICFHZXRDUkJpdCgq dGhpcywgYmIpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDQ0OTog eworKyAgICAgICAgLy8gY3JvcjogQ1JbQlRdID0gQ1JbQkFdIHwgQ1JbQkJdCisrICAgICAgICB1 aW50MzJfdCBidCA9IGluc3RyLT5ydFZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiYSA9IGlu c3RyLT5yYVZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiYiA9IGluc3RyLT5yYlZhbHVlKCk7 CisrICAgICAgICBTZXRDUkJpdCgqdGhpcywgYnQsIEdldENSQml0KCp0aGlzLCBiYSkgfHwgR2V0 Q1JCaXQoKnRoaXMsIGJiKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2Fz ZSA0MTc6IHsKKysgICAgICAgIC8vIGNyb3JjOiBDUltCVF0gPSBDUltCQV0gfCB+Q1JbQkJdCisr ICAgICAgICB1aW50MzJfdCBidCA9IGluc3RyLT5ydFZhbHVlKCk7CisrICAgICAgICB1aW50MzJf dCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiYiA9IGluc3RyLT5y YlZhbHVlKCk7CisrICAgICAgICBTZXRDUkJpdCgqdGhpcywgYnQsIEdldENSQml0KCp0aGlzLCBi YSkgfHwgIUdldENSQml0KCp0aGlzLCBiYikpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQor KyAgICAgIGNhc2UgMTkzOiB7CisrICAgICAgICAvLyBjcnhvcjogQ1JbQlRdID0gQ1JbQkFdIF4g Q1JbQkJdCisrICAgICAgICB1aW50MzJfdCBidCA9IGluc3RyLT5ydFZhbHVlKCk7CisrICAgICAg ICB1aW50MzJfdCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiYiA9 IGluc3RyLT5yYlZhbHVlKCk7CisrICAgICAgICBTZXRDUkJpdCgqdGhpcywgYnQsIEdldENSQml0 KCp0aGlzLCBiYSkgXiBHZXRDUkJpdCgqdGhpcywgYmIpKTsKKysgICAgICAgIGJyZWFrOworKyAg ICAgIH0KKysgICAgICBjYXNlIDI4OTogeworKyAgICAgICAgLy8gY3JlcXY6IENSW0JUXSA9IH4o Q1JbQkFdIF4gQ1JbQkJdKQorKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgp OworKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgICAgICAgdWlu dDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0 LCAhKEdldENSQml0KCp0aGlzLCBiYSkgXiBHZXRDUkJpdCgqdGhpcywgYmIpKSk7CisrICAgICAg ICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAxNTA6IHsKKysgICAgICAgIC8vIGlzeW5j OiBuby1vcCBpbiBzaW11bGF0b3IKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBj YXNlIDM3MDogeworKyAgICAgICAgLy8gUFBDX3N0b3AgKDB4NEMwMDAyRTQpIGRlY29kZWQgYXMg WEwtZm9ybSBvcGNvZGUgMTksIFhMPTM3MC4KKysgICAgICAgIC8vIFRoaXMgaXMgb3VyIGtDYWxs UmVkaXJJbnN0ci4gSGFuZGxlIHZpYSBzb2Z0d2FyZUludGVycnVwdC4KKysgICAgICAgIHNvZnR3 YXJlSW50ZXJydXB0KGluc3RyKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBj YXNlIDI6IHsKKysgICAgICAgIC8vIFBPV0VSOSBhZGRwY2lzIHJULCBEIChEWC1mb3JtKS4gQ29t cHV0ZXMgclQgPSAoQ0lBICsgNCkgKworKyAgICAgICAgLy8gKHNleHQxNihEKSA8PCAxNikuIFRo ZSAxNi1iaXQgc2lnbmVkIGRpc3BsYWNlbWVudCBEIGlzIHNwbGl0CisrICAgICAgICAvLyBhY3Jv c3MgdGhyZWUgc3ViLWZpZWxkczoKKysgICAgICAgIC8vICAgZDAgPSBiaXRzIExFIDYuLjE1ICgx MCBiaXRzKSDigJQgRFsxNTo2XQorKyAgICAgICAgLy8gICBkMSA9IGJpdHMgTEUgMTYuLjIwICg1 IGJpdHMpICDigJQgRFs1OjFdCisrICAgICAgICAvLyAgIGQyID0gYml0ICBMRSAwICAgICAgKDEg Yml0KSAgIOKAlCBEWzBdCisrICAgICAgICAvLyAoTWlycm9ycyB0aGUgZW5jb2RlciBpbiBBc3Nl bWJsZXItcHBjNjQuY3BwOmFzX2FkZHBjaXMuKQorKyAgICAgICAgdWludDMyX3QgcnQgPSBpbnN0 ci0+cnRWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgZDAgPSBpbnN0ci0+Yml0cygxNSwgNik7 CisrICAgICAgICB1aW50MzJfdCBkMSA9IGluc3RyLT5iaXRzKDIwLCAxNik7CisrICAgICAgICB1 aW50MzJfdCBkMiA9IGluc3RyLT5iaXQoMCk7CisrICAgICAgICBpbnQxNl90IEQgPSAoaW50MTZf dCkoKGQwIDw8IDYpIHwgKGQxIDw8IDEpIHwgZDIpOworKyAgICAgICAgaW50NjRfdCBjaWEgPSBy ZWludGVycHJldF9jYXN0PGludDY0X3Q+KGluc3RyKTsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0 LCBjaWEgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSArCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQ2NF90PihEKSA8PCAxNikpOworKyAgICAgICAgYnJl YWs7CisrICAgICAgfQorKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZF X1BSSU5URigiZGVjb2RlQnJhbmNoOiBYTCBvcGNvZGUgMTksIHhsPSV1IiwgeGwpOworKyAgICB9 CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNv ZGVCcmFuY2g6IG9wY29kZT0ldSIsIG9wY29kZSk7CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisrLy8gZGVjb2RlRlA6IE1ham9yIG9wY29kZXMgNTkgKEEtZm9ybSBzaW5nbGUpIGFu ZCA2MyAoWC1mb3JtIC8gQS1mb3JtIGRvdWJsZSkKKysKKyt2b2lkIFNpbXVsYXRvcjo6ZGVjb2Rl RlAoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0ci0+ b3Bjb2RlKCk7CisrICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7ICAvLyBGUlQKKysg IHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsgIC8vIEZSQQorKyAgdWludDMyX3QgcmIg PSBpbnN0ci0+cmJWYWx1ZSgpOyAgLy8gRlJCCisrICB1aW50MzJfdCByY19yZWcgPSBpbnN0ci0+ cmNWYWx1ZSgpOyAgLy8gRlJDIChBLWZvcm0pCisrCisrICBpZiAob3Bjb2RlID09IDYzKSB7Cisr ICAgIC8vIFgtZm9ybSBhbmQgQS1mb3JtIGRvdWJsZS1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zLgor KyAgICAvLyBGb3IgQS1mb3JtLCB0aGUgc3ViLW9wY29kZSBpcyBpbiBiaXRzIDEuLjUuCisrICAg IC8vIEZvciBYLWZvcm0sIHRoZSBzdWItb3Bjb2RlIGlzIGluIGJpdHMgMS4uMTAuCisrICAgIHVp bnQzMl90IHhvX2EgPSBpbnN0ci0+Yml0cyg1LCAxKTsgIC8vIEEtZm9ybSBzdWItb3Bjb2RlCisr ICAgIHVpbnQzMl90IHhvX3ggPSBpbnN0ci0+Yml0cygxMCwgMSk7IC8vIFgtZm9ybSBzdWItb3Bj b2RlCisrCisrICAgIC8vIFRyeSBBLWZvcm0gZmlyc3QgKDUtYml0IHN1Yi1vcGNvZGUgaW4gYml0 cyAxLi41KS4KKysgICAgc3dpdGNoICh4b19hKSB7CisrICAgICAgY2FzZSAyMTogeworKyAgICAg ICAgLy8gZmFkZAorKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IGdldEZwdVJlZ2lzdGVyRG91Ymxl KHJhKSArIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVy RG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0KKysgICAgICBj YXNlIDIwOiB7CisrICAgICAgICAvLyBmc3ViCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0 RnB1UmVnaXN0ZXJEb3VibGUocmEpIC0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAg ICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICByZXR1cm47Cisr ICAgICAgfQorKyAgICAgIGNhc2UgMjU6IHsKKysgICAgICAgIC8vIGZtdWw6IEZSVCA9IEZSQSAq IEZSQyAobm90ZTogRlJDLCBub3QgRlJCISkKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSBnZXRG cHVSZWdpc3RlckRvdWJsZShyYSkgKiBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpOworKyAg ICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICByZXR1cm47 CisrICAgICAgfQorKyAgICAgIGNhc2UgMTg6IHsKKysgICAgICAgIC8vIGZkaXYKKysgICAgICAg IGRvdWJsZSByZXN1bHQgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgLyBnZXRGcHVSZWdpc3Rl ckRvdWJsZShyYik7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsK KysgICAgICAgIHJldHVybjsKKysgICAgICB9CisrICAgICAgY2FzZSAyMjogeworKyAgICAgICAg Ly8gZnNxcnQKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzcXJ0KGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJiKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysg ICAgICAgIHJldHVybjsKKysgICAgICB9CisrICAgICAgY2FzZSAyOTogeworKyAgICAgICAgLy8g Zm1hZGQ6IEZSVCA9IEZSQSAqIEZSQyArIEZSQgorKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0 ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSk7CisrICAgICAgICBz ZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIHJldHVybjsKKysgICAg ICB9CisrICAgICAgY2FzZSAzMDogeworKyAgICAgICAgLy8gZm5tc3ViOiBGUlQgPSAtKEZSQSAq IEZSQyAtIEZSQikKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSAtKHN0ZDo6Zm1hKGdldEZwdVJl Z2lzdGVyRG91YmxlKHJhKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl dEZwdVJlZ2lzdGVyRG91YmxlKHJjX3JlZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdp c3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIHJldHVybjsKKysgICAgICB9CisrICAg ICAgY2FzZSAyODogeworKyAgICAgICAgLy8gZm1zdWI6IEZSVCA9IEZSQSAqIEZSQyAtIEZSQgor KyAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJh KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJs ZShyY19yZWcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1nZXRGcHVSZWdp c3RlckRvdWJsZShyYikpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3Vs dCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAgICAgIGNhc2UgMzE6IHsKKysgICAg ICAgIC8vIGZubWFkZDogRlJUID0gLShGUkEgKiBGUkMgKyBGUkIpCisrICAgICAgICBkb3VibGUg cmVzdWx0ID0gLShzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAg ICAgIHJldHVybjsKKysgICAgICB9CisrICAgICAgY2FzZSAyMzogeworKyAgICAgICAgLy8gZnNl bDogRlJUID0gKEZSQSA+PSAwKSA/IEZSQyA6IEZSQgorKyAgICAgICAgZG91YmxlIGZyYSA9IGdl dEZwdVJlZ2lzdGVyRG91YmxlKHJhKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0 LCAoZnJhID49IDAuMCkgPyBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJiKSk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAgICAgIGNhc2UgMjY6IHsK KysgICAgICAgIC8vIGZyc3FydGU6IEZSVCA9IDEuMCAvIHNxcnQoRlJCKSAoZXN0aW1hdGUpCisr ICAgICAgICBkb3VibGUgcmVzdWx0ID0gMS4wIC8gc3FydChnZXRGcHVSZWdpc3RlckRvdWJsZShy YikpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAg ICByZXR1cm47CisrICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIFgtZm9ybSAoMTAtYml0IHN1 Yi1vcGNvZGUpLgorKyAgICBzd2l0Y2ggKHhvX3gpIHsKKysgICAgICBjYXNlIDcyOiB7CisrICAg ICAgICAvLyBmbXI6IEZSVCA9IEZSQgorKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQs IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY2FzZSA0MDogeworKyAgICAgICAgLy8gZm5lZzogRlJUID0gLUZSQgorKyAgICAgICAg c2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIC1nZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMjY0OiB7CisrICAgICAgICAvLyBm YWJzOiBGUlQgPSB8RlJCfAorKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIGZhYnMo Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY2FzZSAxMzY6IHsKKysgICAgICAgIC8vIGZuYWJzOiBGUlQgPSAtfEZSQnwKKysgICAg ICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAtZmFicyhnZXRGcHVSZWdpc3RlckRvdWJsZShy YikpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDg6IHsKKysgICAg ICAgIC8vIGZjcHNnbjogRlJUID0gc2lnbihGUkEpIHx8IG1hZ25pdHVkZShGUkIpCisrICAgICAg ICBkb3VibGUgZnJhID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpOworKyAgICAgICAgZG91Ymxl IGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVy RG91YmxlKHJ0LCBzdGQ6OmNvcHlzaWduKGZyYiwgZnJhKSk7CisrICAgICAgICBicmVhazsKKysg ICAgICB9CisrICAgICAgY2FzZSAwOiB7CisrICAgICAgICAvLyBmY21wdTogY29tcGFyZSBGUkEs IEZSQiB1bm9yZGVyZWQKKysgICAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsK KysgICAgICAgIGRvdWJsZSBmcmEgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSk7CisrICAgICAg ICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgdWludDhf dCBmaWVsZCA9IDA7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmEpIHx8IHN0ZDo6aXNuYW4o ZnJiKSkgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkU087CisrICAgICAgICB9IGVsc2Ug aWYgKGZyYSA8IGZyYikgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkTFQ7CisrICAgICAg ICB9IGVsc2UgaWYgKGZyYSA+IGZyYikgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkR1Q7 CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkRVE7CisrICAg ICAgICB9CisrICAgICAgICBzZXRDUkZpZWxkKGJmLCBmaWVsZCk7CisrICAgICAgICBicmVhazsK KysgICAgICB9CisrICAgICAgY2FzZSAzMjogeworKyAgICAgICAgLy8gZmNtcG86IGNvbXBhcmUg RlJBLCBGUkIgb3JkZXJlZAorKyAgICAgICAgdWludDMyX3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgp OworKyAgICAgICAgZG91YmxlIGZyYSA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKTsKKysgICAg ICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICB1aW50 OF90IGZpZWxkID0gMDsKKysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYSkgfHwgc3RkOjppc25h bihmcmIpKSB7CisrICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRTTzsKKysgICAgICAgIH0gZWxz ZSBpZiAoZnJhIDwgZnJiKSB7CisrICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRMVDsKKysgICAg ICAgIH0gZWxzZSBpZiAoZnJhID4gZnJiKSB7CisrICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRH VDsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRFUTsKKysg ICAgICAgIH0KKysgICAgICAgIHNldENSRmllbGQoYmYsIGZpZWxkKTsKKysgICAgICAgIGJyZWFr OworKyAgICAgIH0KKysgICAgICAvLyBGb3IgZmN0aWQqIGFuZCBmY3RpdyogdGhlIElTQSBzcGVj aWZpZXMgdGhhdCBiaXQgMjMgb2YgRlBTQ1IgKFZYQ1ZJLAorKyAgICAgIC8vICJpbnZhbGlkIG9w IGZvciBpbnRlZ2VyIGNvbnZlcnQiKSBpcyBzZXQgd2hlbiB0aGUgc291cmNlIGlzIE5hTiwgK0lu ZiwKKysgICAgICAvLyAtSW5mLCBvciBvdXQgb2YgdGhlIGRlc3RpbmF0aW9uJ3MgcmFuZ2UuIFdh c20ncyBvdXQtb2YtcmFuZ2UgdHJhcAorKyAgICAgIC8vIHNlcXVlbmNlIGlzIGBtdGZzYjAgMjM7 IGZjdGlkejsgbWZ2c3JkOyBtY3JmcyBjcjAsNTsgYnQgU09CaXQsdHJhcGAsCisrICAgICAgLy8g c28gdGhlIHNpbXVsYXRvciBNVVNUIHVwZGF0ZSBWWENWSSBoZXJlIGZvciB0aGUgdHJhcCB0byBm aXJlLiBXaXRoCisrICAgICAgLy8gRlBTQ1JfIGluIHRoZSBsb3ctaGFsZiBQUEMgbGF5b3V0IChQ UEMgYml0IE4g4oaSIGludDY0IGJpdCAoMzEtTikpLAorKyAgICAgIC8vIFZYQ1ZJIGxpdmVzIGF0 IGludDY0IGJpdCAoMzEtMjMpID0gOC4KKysgICAgICBjYXNlIDgxNDogeworKyAgICAgICAgLy8g ZmN0aWQ6IGNvbnZlcnQgZG91YmxlIHRvIGludDY0IChjdXJyZW50IHJvdW5kaW5nKQorKyAgICAg ICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIGludDY0 X3QgcmVzdWx0OworKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7CisrICAgICAgICBpZiAo c3RkOjppc25hbihmcmIpKSB7CisrICAgICAgICAgIHJlc3VsdCA9IElOVDY0X01JTjsKKysgICAg ICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICB9IGVsc2UgaWYgKGZyYiA+PSAtKGRvdWJs ZSlJTlQ2NF9NSU4gfHwgZnJiIDwgKGRvdWJsZSlJTlQ2NF9NSU4pIHsKKysgICAgICAgICAgcmVz dWx0ID0gKGZyYiA8IDApID8gSU5UNjRfTUlOIDogSU5UNjRfTUFYOworKyAgICAgICAgICBpbnZh bGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHN3aXRjaCAoRlBTQ1Jf ICYga0ZQU0NSUk5NYXNrKSB7CisrICAgICAgICAgICAgY2FzZSBSTjogcmVzdWx0ID0gKGludDY0 X3QpbGxyaW50KGZyYik7IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgUlo6IHJlc3VsdCA9IChp bnQ2NF90KWZyYjsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSUDogcmVzdWx0ID0gKGludDY0 X3QpY2VpbChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJNOiByZXN1bHQgPSAoaW50 NjRfdClmbG9vcihmcmIpOyBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OiByZXN1bHQgPSAo aW50NjRfdClmcmI7IGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBp ZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgxVUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQgMjMg aW4gbG93LWhhbGYgbGF5b3V0ICovCisrICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgcmVzdWx0 KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDgxNTogeworKyAgICAg ICAgLy8gZmN0aWR6OiBjb252ZXJ0IGRvdWJsZSB0byBpbnQ2NCAocm91bmQgdG93YXJkIHplcm8p CisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAg ICAgaW50NjRfdCByZXN1bHQ7CisrICAgICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKKysgICAg ICAgIGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKKysgICAgICAgICAgcmVzdWx0ID0gSU5UNjRfTUlO OworKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSBpZiAoZnJiID49 IC0oZG91YmxlKUlOVDY0X01JTikgeworKyAgICAgICAgICByZXN1bHQgPSBJTlQ2NF9NQVg7Cisr ICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIGlmIChmcmIgPCAoZG91 YmxlKUlOVDY0X01JTikgeworKyAgICAgICAgICByZXN1bHQgPSBJTlQ2NF9NSU47CisrICAgICAg ICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgcmVzdWx0 ID0gKGludDY0X3QpZnJiOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NS XyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91 dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIHJlc3VsdCk7CisrICAgICAgICBicmVh azsKKysgICAgICB9CisrICAgICAgY2FzZSA5NDI6IHsKKysgICAgICAgIC8vIGZjdGlkdTogY29u dmVydCBkb3VibGUgdG8gdWludDY0IChjdXJyZW50IHJvdW5kaW5nKS4KKysgICAgICAgIC8vIFZY Q1ZJIGlzIHNpZ25hbGVkIHdoZW4gc291cmNlIGlzIE5hTiwgwrFJbmYsIG9yIHRoZSByb3VuZGVk IHZhbHVlCisrICAgICAgICAvLyBpcyBvdXRzaWRlIFswLCAyXjY0LTFdLiBOb3RhYmx5LAorKyAg ICAgICAgLy8gYSBuZWdhdGl2ZSBzb3VyY2Ugd2hvc2Ugcm91bmRlZCB2YWx1ZSBpcyAwIChlLmcu IC0wLjQgaW4gUk4sIG9yCisrICAgICAgICAvLyBhbnkgdmFsdWUgaW4gKC0xLCAwKSBpbiBSWikg aXMgTk9UIGludmFsaWQuCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmIpOworKyAgICAgICAgdWludDY0X3QgcmVzdWx0OworKyAgICAgICAgYm9vbCBpbnZhbGlk ID0gZmFsc2U7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7CisrICAgICAgICAgIHJl c3VsdCA9IDA7CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIGlm IChmcmIgPj0gLTIuMCAqIChkb3VibGUpSU5UNjRfTUlOIC8qIDJeNjQgKi8pIHsKKysgICAgICAg ICAgcmVzdWx0ID0gVUlOVDY0X01BWDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAg ICAgICB9IGVsc2UgeworKyAgICAgICAgICBkb3VibGUgcm91bmRlZDsKKysgICAgICAgICAgc3dp dGNoIChGUFNDUl8gJiBrRlBTQ1JSTk1hc2spIHsKKysgICAgICAgICAgICBjYXNlIFJOOiByb3Vu ZGVkID0gbmVhcmJ5aW50KGZyYik7IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgUlo6IHJvdW5k ZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVkID0g Y2VpbChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxvb3Io ZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZyYik7 IGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICAgIGlmIChyb3VuZGVkIDwgMC4wKSB7Cisr ICAgICAgICAgICAgcmVzdWx0ID0gMDsKKysgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysg ICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1bHQgPSAodWludDY0X3Qpcm91bmRl ZDsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NS XyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91 dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICAg IGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDk0MzogeworKyAgICAgICAgLy8gZmN0aWR1 ejogY29udmVydCBkb3VibGUgdG8gdWludDY0IChyb3VuZCB0b3dhcmQgemVybykuCisrICAgICAg ICAvLyBTYW1lIFZYQ1ZJIHJ1bGUgYXMgZmN0aWR1IGJ1dCByb3VuZGluZyBpcyBmaXhlZCB0byB0 cnVuY2F0ZQorKyAgICAgICAgLy8gdG93YXJkIHplcm8uIFNvdXJjZSBpbiAoLTEsIDApIHRydW5j YXRlcyB0byAwIOKAlCBWQUxJRC4KKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3Rl ckRvdWJsZShyYik7CisrICAgICAgICB1aW50NjRfdCByZXN1bHQ7CisrICAgICAgICBib29sIGlu dmFsaWQgPSBmYWxzZTsKKysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKKysgICAgICAg ICAgcmVzdWx0ID0gMDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICB9IGVs c2UgaWYgKGZyYiA+PSAtMi4wICogKGRvdWJsZSlJTlQ2NF9NSU4gLyogMl42NCAqLykgeworKyAg ICAgICAgICByZXN1bHQgPSBVSU5UNjRfTUFYOworKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsK KysgICAgICAgIH0gZWxzZSBpZiAoZnJiIDw9IC0xLjApIHsKKysgICAgICAgICAgLy8gVHJ1bmNh dGVkIHZhbHVlIGlzIG5lZ2F0aXZlIOKAlCBpbnZhbGlkIGZvciB1bnNpZ25lZC4KKysgICAgICAg ICAgcmVzdWx0ID0gMDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICB9IGVs c2UgeworKyAgICAgICAgICAvLyBTb3VyY2UgaXMgaW4gKC0xLCAyXjY0KTsgdHJ1bmNhdGlvbiB0 b3dhcmQgemVybyB5aWVsZHMgYSB2YWx1ZQorKyAgICAgICAgICAvLyBpbiBbMCwgMl42NCkuCisr ICAgICAgICAgIHJlc3VsdCA9ICh1aW50NjRfdCl0cnVuYyhmcmIpOworKyAgICAgICAgfQorKyAg ICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMg Yml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQs IEk2NChyZXN1bHQpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDE0 OiB7CisrICAgICAgICAvLyBmY3RpdzogY29udmVydCBkb3VibGUgdG8gaW50MzIgKGN1cnJlbnQg cm91bmRpbmcpLgorKyAgICAgICAgLy8gSW52YWxpZCByYW5nZTogcm91bmRlZCB2YWx1ZSA8IElO VDMyX01JTiBvciA+IElOVDMyX01BWC4gVGhlCisrICAgICAgICAvLyBkb3VibGUtcHJlY2lzaW9u IGJvdW5kYXJ5IG9uIHRoZSBuZWdhdGl2ZSBzaWRlIGlzIElOVDMyX01JTi0xID0KKysgICAgICAg IC8vIC0yXjMxLTEgPSAtMjE0NzQ4MzY0OS4wIChleGFjdGx5IHJlcHJlc2VudGFibGU7IGRvdWJs ZXMgaW4KKysgICAgICAgIC8vICgtMl4zMS0xLCAtMl4zMSkgYWxsIHJvdW5kLXRvLW5lYXJlc3Qg dG8gLTJeMzEgd2hpY2ggaXMgdmFsaWQpLgorKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIGludDMyX3QgcmVzdWx0OworKyAgICAgICAgYm9v bCBpbnZhbGlkID0gZmFsc2U7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7CisrICAg ICAgICAgIHJlc3VsdCA9IElOVDMyX01JTjsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7Cisr ICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBkb3VibGUgcm91bmRlZDsKKysgICAgICAgICAg c3dpdGNoIChGUFNDUl8gJiBrRlBTQ1JSTk1hc2spIHsKKysgICAgICAgICAgICBjYXNlIFJOOiBy b3VuZGVkID0gbmVhcmJ5aW50KGZyYik7IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgUlo6IHJv dW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVk ID0gY2VpbChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxv b3IoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZy Yik7IGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICAgIGlmIChyb3VuZGVkID4gKGRvdWJs ZSlJTlQzMl9NQVgpIHsKKysgICAgICAgICAgICByZXN1bHQgPSBJTlQzMl9NQVg7CisrICAgICAg ICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAgIH0gZWxzZSBpZiAocm91bmRlZCA8IChk b3VibGUpSU5UMzJfTUlOKSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gSU5UMzJfTUlOOworKyAg ICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAg ICAgIHJlc3VsdCA9IChpbnQzMl90KXJvdW5kZWQ7CisrICAgICAgICAgIH0KKysgICAgICAgIH0K KysgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTog UFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KKysgICAgICAgIHNldEZwdVJlZ2lzdGVy KHJ0LCAoaW50NjRfdClyZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAg IGNhc2UgMTU6IHsKKysgICAgICAgIC8vIGZjdGl3ejogY29udmVydCBkb3VibGUgdG8gaW50MzIg KHJvdW5kIHRvd2FyZCB6ZXJvKS4KKysgICAgICAgIC8vIFRydW5jYXRpb24gb2YgYSB2YWx1ZSBp biAoLTJeMzEtMSwgSU5UMzJfTUlOKSB0b3dhcmQgemVybyBnaXZlcworKyAgICAgICAgLy8gSU5U MzJfTUlOIOKAlCB2YWxpZC4gT25seSBgZnJiIDw9IC0yXjMxLTFgIChpLmUuIGBmcmIgPCBJTlQz Ml9NSU4tMSsxYAorKyAgICAgICAgLy8gPSBgZnJiIDwgLTIxNDc0ODM2NDhgIC4uLiB3YWl0LCBz aW1wbGVzdDogY2hlY2sgdHJ1bmNhdGVkIHZhbHVlIGluCisrICAgICAgICAvLyByYW5nZSBBRlRF UiB0cnVuY2F0aW9uLikKKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJs ZShyYik7CisrICAgICAgICBpbnQzMl90IHJlc3VsdDsKKysgICAgICAgIGJvb2wgaW52YWxpZCA9 IGZhbHNlOworKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZnJiKSkgeworKyAgICAgICAgICByZXN1 bHQgPSBJTlQzMl9NSU47CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBl bHNlIHsKKysgICAgICAgICAgZG91YmxlIHRydW5jYXRlZCA9IHRydW5jKGZyYik7CisrICAgICAg ICAgIGlmICh0cnVuY2F0ZWQgPiAoZG91YmxlKUlOVDMyX01BWCkgeworKyAgICAgICAgICAgIHJl c3VsdCA9IElOVDMyX01BWDsKKysgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAg ICAgfSBlbHNlIGlmICh0cnVuY2F0ZWQgPCAoZG91YmxlKUlOVDMyX01JTikgeworKyAgICAgICAg ICAgIHJlc3VsdCA9IElOVDMyX01JTjsKKysgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysg ICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1bHQgPSAoaW50MzJfdCl0cnVuY2F0 ZWQ7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmIChpbnZhbGlkKSBGUFND Ul8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlv dXQgKi8KKysgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZXN1bHQpOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMTQyOiB7CisrICAgICAgICAvLyBm Y3Rpd3U6IGNvbnZlcnQgZG91YmxlIHRvIHVpbnQzMiAoY3VycmVudCByb3VuZGluZykuIFRoZSBj aGVjayBpcworKyAgICAgICAgLy8gb24gdGhlIFJPVU5ERUQgdmFsdWU6IFZYQ1ZJIGlmZiByb3Vu ZGVkIDwgMCBvciByb3VuZGVkID4gVUlOVDMyX01BWC4KKysgICAgICAgIGRvdWJsZSBmcmIgPSBn ZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICB1aW50MzJfdCByZXN1bHQ7CisrICAg ICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKKysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikp IHsKKysgICAgICAgICAgcmVzdWx0ID0gMDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7Cisr ICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBkb3VibGUgcm91bmRlZDsKKysgICAgICAgICAg c3dpdGNoIChGUFNDUl8gJiBrRlBTQ1JSTk1hc2spIHsKKysgICAgICAgICAgICBjYXNlIFJOOiBy b3VuZGVkID0gbmVhcmJ5aW50KGZyYik7IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgUlo6IHJv dW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVk ID0gY2VpbChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxv b3IoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZy Yik7IGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICAgIGlmIChyb3VuZGVkIDwgMC4wKSB7 CisrICAgICAgICAgICAgcmVzdWx0ID0gMDsKKysgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsK KysgICAgICAgICAgfSBlbHNlIGlmIChyb3VuZGVkID4gKGRvdWJsZSlVSU5UMzJfTUFYKSB7Cisr ICAgICAgICAgICAgcmVzdWx0ID0gVUlOVDMyX01BWDsKKysgICAgICAgICAgICBpbnZhbGlkID0g dHJ1ZTsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1bHQgPSAodWludDMy X3Qpcm91bmRlZDsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGludmFs aWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1o YWxmIGxheW91dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIChpbnQ2NF90KSh1aW50 NjRfdClyZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMTQz OiB7CisrICAgICAgICAvLyBmY3Rpd3V6OiBjb252ZXJ0IGRvdWJsZSB0byB1aW50MzIgKHJvdW5k IHRvd2FyZCB6ZXJvKS4KKysgICAgICAgIC8vIFNvdXJjZSBpbiAoLTEsIDApIHRydW5jYXRlcyB0 byAwIOKAlCBWQUxJRC4KKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJs ZShyYik7CisrICAgICAgICB1aW50MzJfdCByZXN1bHQ7CisrICAgICAgICBib29sIGludmFsaWQg PSBmYWxzZTsKKysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKKysgICAgICAgICAgcmVz dWx0ID0gMDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICB9IGVsc2Ugewor KyAgICAgICAgICBkb3VibGUgdHJ1bmNhdGVkID0gdHJ1bmMoZnJiKTsKKysgICAgICAgICAgaWYg KHRydW5jYXRlZCA+IChkb3VibGUpVUlOVDMyX01BWCkgeworKyAgICAgICAgICAgIHJlc3VsdCA9 IFVJTlQzMl9NQVg7CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAgIH0g ZWxzZSBpZiAodHJ1bmNhdGVkIDwgMC4wKSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gMDsKKysg ICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgICByZXN1bHQgPSAodWludDMyX3QpdHJ1bmNhdGVkOworKyAgICAgICAgICB9CisrICAgICAg ICB9CisrICAgICAgICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgxVUxMIDw8IDgpOyAgLyogVlhD Vkk6IFBQQyBiaXQgMjMgaW4gbG93LWhhbGYgbGF5b3V0ICovCisrICAgICAgICBzZXRGcHVSZWdp c3RlcihydCwgKGludDY0X3QpKHVpbnQ2NF90KXJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysg ICAgICB9CisrICAgICAgY2FzZSA4NDY6IHsKKysgICAgICAgIC8vIGZjZmlkOiBjb252ZXJ0IGlu dDY0IGluIEZQUiB0byBkb3VibGUKKysgICAgICAgIGludDY0X3QgdmFsID0gZ2V0RnB1UmVnaXN0 ZXIocmIpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIChkb3VibGUpdmFsKTsK KysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDk3NDogeworKyAgICAgICAg Ly8gZmNmaWR1OiBjb252ZXJ0IHVpbnQ2NCBpbiBGUFIgdG8gZG91YmxlCisrICAgICAgICB1aW50 NjRfdCB2YWwgPSBVNjQoZ2V0RnB1UmVnaXN0ZXIocmIpKTsKKysgICAgICAgIHNldEZwdVJlZ2lz dGVyRG91YmxlKHJ0LCAoZG91YmxlKXZhbCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY2FzZSAxMjogeworKyAgICAgICAgLy8gZnJzcDogcm91bmQgZG91YmxlIHRvIHNpbmds ZSBwcmVjaXNpb24gKHRoZW4gcmUtZXh0ZW5kIGluIEZQUikuCisrICAgICAgICAvLyBzTmFOIGlu cHV0cyBhcmUgcXVpZXRlZCAodGhlIHJlc3VsdCBwYXlsb2FkIE1TQiBpcyBzZXQpLgorKyAgICAg ICAgLy8gd2FzbSBmMzIuZGVtb3RlX2Y2NCBsb3dlcnMgdG8gdGhpcyBvcCB3aGVuCisrICAgICAg ICAvLyBub3QgdXNpbmcgeHNjdmRwc3AgZGlyZWN0bHkuCisrICAgICAgICBkb3VibGUgZnJiID0g Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gZGVtb3Rl RG91YmxlUHJlc2VydmluZ05hTihmcmIpOworKyAgICAgICAgdWludDMyX3QgZmJpdHM7CisrICAg ICAgICBtZW1jcHkoJmZiaXRzLCAmcmVzdWx0LCBzaXplb2YoZmJpdHMpKTsKKysgICAgICAgIGlm ICgoZmJpdHMgJiAweDdGODAwMDAwdSkgPT0gMHg3RjgwMDAwMHUgJiYKKysgICAgICAgICAgICAo ZmJpdHMgJiAweDAwN0ZGRkZGdSkgIT0gMCkgeworKyAgICAgICAgICBmYml0cyB8PSAweDAwNDAw MDAwdTsKKysgICAgICAgICAgbWVtY3B5KCZyZXN1bHQsICZmYml0cywgc2l6ZW9mKHJlc3VsdCkp OworKyAgICAgICAgfQorKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHByb21vdGVG bG9hdFByZXNlcnZpbmdOYU4ocmVzdWx0KSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY2FzZSAzOTI6IHsKKysgICAgICAgIC8vIGZyaW46IHJvdW5kIHRvIG5lYXJlc3QgaW50 ZWdlciAodGllcyBhd2F5IGZyb20gemVybykKKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVS ZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcm91 bmQoZnJiKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSA0MjQ6IHsK KysgICAgICAgIC8vIGZyaXo6IHJvdW5kIHRvd2FyZCB6ZXJvCisrICAgICAgICBkb3VibGUgZnJi ID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3Vi bGUocnQsIHRydW5jKGZyYikpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNh c2UgNDU2OiB7CisrICAgICAgICAvLyBmcmlwOiByb3VuZCB0b3dhcmQgK2luZmluaXR5IChjZWls KS4gWE89NDU2LgorKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJi KTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBjZWlsKGZyYikpOworKyAgICAg ICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgNDg4OiB7CisrICAgICAgICAvLyBmcmlt OiByb3VuZCB0b3dhcmQgLWluZmluaXR5IChmbG9vcikuIFhPPTQ4OC4KKysgICAgICAgIGRvdWJs ZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICBzZXRGcHVSZWdpc3Rl ckRvdWJsZShydCwgZmxvb3IoZnJiKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAg ICAgY2FzZSA1ODM6IHsKKysgICAgICAgIC8vIG1mZnM6IEZSVCA9IEZQU0NSIChhcyBkb3VibGUg Yml0IHBhdHRlcm4pCisrICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgSTY0KEZQU0NSXykpOwor KyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIC8vIEZQU0NSIGlzIHRyZWF0ZWQgYXMg YSAzMi1iaXQgcmVnaXN0ZXIgc3RvcmVkIGluIHRoZSBsb3cgMzIgYml0cyBvZgorKyAgICAgIC8v IEZQU0NSXyAodWludDY0X3QpLCB3aXRoIFBQQyBiaXQgbnVtYmVyaW5nOiBQUEMgYml0IE4gKHdo ZXJlIGJpdCAwIGlzCisrICAgICAgLy8gdGhlIE1TQikgbGl2ZXMgYXQgaW50NjQgYml0ICgzMS1O KS4gRmllbGQgRiAoNCBiaXRzKSBjb3ZlcnMgUFBDIGJpdHMKKysgICAgICAvLyA0Ri4uNEYrMyDi hpIgaW50NjQgYml0LUxTQiAoMjgtNEYpIHRvIGJpdC1NU0IgKDMxLTRGKS4gVGhpcyBtYXRjaGVz CisrICAgICAgLy8gbWNyZnMsIG10ZnNmaSwga0ZQU0NSUk5NYXNrICh3aGljaCBjaGVja3MgYml0 cyAzMC0zMSBQUEMgPSBpbnQ2NCBiaXRzCisrICAgICAgLy8gMC0xKSwgYW5kIG1mZnMgKHdoaWNo IGNvcGllcyBGUFNDUiBpbnRvIEZQUiBiaXRzIDMyLi42MyBQUEMgPSBpbnQ2NAorKyAgICAgIC8v IGJpdHMgMC4uMzEpLiBFYXJsaWVyIG10ZnNiMC9tdGZzYjEgdXNlZCAoNjMtYnQpIHdoaWNoIHBs YWNlZCBiaXRzIGluCisrICAgICAgLy8gdGhlIGhpZ2ggaGFsZiBvZiBGUFNDUl8gd2hlcmUgbWNy ZnMgZXRjLiB3b3VsZCBuZXZlciBzZWUgdGhlbSDigJQgc28KKysgICAgICAvLyB0aGUgd2FzbSB0 cmFwIHNlcXVlbmNlIGBtdGZzYjAgMjM7IGZjdGlkejsgbWNyZnMgY3IwLDU7IGJ0IFNPLG9vbEVu dHJ5YAorKyAgICAgIC8vIGNvdWxkIG5vdCBkZXRlY3QgVlhDVkkuCisrICAgICAgY2FzZSA3MDog eworKyAgICAgICAgLy8gbXRmc2IwOiBjbGVhciBGUFNDUiBiaXQuIFhPPTcwLgorKyAgICAgICAg Ly8gKENhc2VzIDM4IGFuZCA3MCBoYWQgdGhlIGxhYmVscyBzd2FwcGVkLCBzbyB3YXNtJ3MKKysg ICAgICAgIC8vIGBtdGZzYjAgMjM7IGZjdGlkejsgbWNyZnMgY3IwLDU7IGJ0IFNPLHRyYXBgIHNl cXVlbmNlIGFjY2lkZW50YWxseQorKyAgICAgICAgLy8gU0VUIFZYQ1ZJIGJlZm9yZSB0aGUgY29u dmVydCByYW4sIGNhdXNpbmcgZXZlcnkgZmN0aWQqIHRvIHRyYXAuKQorKyAgICAgICAgdWludDMy X3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgICAgICAgRlBTQ1JfICY9IH4oMVVMTCA8PCAo MzEgLSBidCkpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgNjQ6IHsK KysgICAgICAgIC8vIG1jcmZzOiBjb3B5IEZQU0NSIGZpZWxkIHRvIENSIGZpZWxkCisrICAgICAg ICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiZmEg PSBpbnN0ci0+Yml0cygyMCwgMTgpOworKyAgICAgICAgdWludDMyX3Qgc2hpZnQgPSA0ICogKDcg LSBiZmEpOworKyAgICAgICAgdWludDhfdCB2YWwgPSAoRlBTQ1JfID4+IHNoaWZ0KSAmIDB4RjsK KysgICAgICAgIHNldENSRmllbGQoYmYsIHZhbCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9 CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAorKyAg ICAgICAgICAgICJkZWNvZGVGUDogb3Bjb2RlIDYzLCB4b194PSV1IChpbnN0cnVjdGlvbiAweCUw OHgpIiwgeG9feCwKKysgICAgICAgICAgICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOworKyAg ICB9CisrICB9IGVsc2UgaWYgKG9wY29kZSA9PSA1OSkgeworKyAgICAvLyBBLWZvcm0gc2luZ2xl LXByZWNpc2lvbiBpbnN0cnVjdGlvbnMuCisrICAgIHVpbnQzMl90IHhvX2EgPSBpbnN0ci0+Yml0 cyg1LCAxKTsKKysKKysgICAgc3dpdGNoICh4b19hKSB7CisrICAgICAgY2FzZSAyMTogeworKyAg ICAgICAgLy8gZmFkZHMKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgoZmxvYXQp KGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpKTsKKysgICAgICAgIHNldEZw dVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQor KyAgICAgIGNhc2UgMjA6IHsKKysgICAgICAgIC8vIGZzdWJzCisrICAgICAgICBkb3VibGUgcmVz dWx0ID0gKGRvdWJsZSkoKGZsb2F0KShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgLQorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAg ICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDI1OiB7CisrICAgICAgICAvLyBmbXVs czogRlJUID0gKGZsb2F0KShGUkEgKiBGUkMpCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRv dWJsZSkoKGZsb2F0KShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgKgorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSkp OworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBi cmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAxODogeworKyAgICAgICAgLy8gZmRpdnMKKysg ICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgoZmxvYXQpKGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJhKSAvCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRG cHVSZWdpc3RlckRvdWJsZShyYikpKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0 LCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMjI6IHsK KysgICAgICAgIC8vIGZzcXJ0cworKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUpc3Fy dGYoKGZsb2F0KWdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSk7CisrICAgICAgICBzZXRGcHVSZWdp c3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAg ICBjYXNlIDI5OiB7CisrICAgICAgICAvLyBmbWFkZHMKKysgICAgICAgIGRvdWJsZSByZXN1bHQg PSAoZG91YmxlKSgoZmxvYXQpc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpKTsKKysgICAgICAgIHNldEZw dVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQor KyAgICAgIGNhc2UgMzA6IHsKKysgICAgICAgIC8vIGZubXN1YnMKKysgICAgICAgIGRvdWJsZSBy ZXN1bHQgPSAoZG91YmxlKSgtKGZsb2F0KXN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJh KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl dEZwdVJlZ2lzdGVyRG91YmxlKHJjX3JlZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7CisrICAg ICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOwor KyAgICAgIH0KKysgICAgICBjYXNlIDI4OiB7CisrICAgICAgICAvLyBmbXN1YnMKKysgICAgICAg IGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgoZmxvYXQpc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7 CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDMxOiB7CisrICAgICAgICAvLyBmbm1hZGRzCisr ICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoLShmbG9hdClzdGQ6OmZtYShnZXRGcHVS ZWdpc3RlckRvdWJsZShyYSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKKysg ICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBkZWZhdWx0OiB7CisrICAgICAgICAvLyBU cnkgWC1mb3JtIHN1Yi1vcGNvZGVzIGZvciBvcGNvZGUgNTkgKGUuZy4sIGZjZmlkcywgZmNmaWR1 cykuCisrICAgICAgICB1aW50MzJfdCB4b194ID0gaW5zdHItPmJpdHMoMTAsIDEpOworKyAgICAg ICAgc3dpdGNoICh4b194KSB7CisrICAgICAgICAgIGNhc2UgODQ2OiB7CisrICAgICAgICAgICAg Ly8gZmNmaWRzOiBjb252ZXJ0IGludDY0IHRvIGZsb2F0IHNpbmdsZSAocmVzdWx0IHN0b3JlZCBh cyBkb3VibGUpCisrICAgICAgICAgICAgaW50NjRfdCB2YWwgPSBnZXRGcHVSZWdpc3RlcihyYik7 CisrICAgICAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIChkb3VibGUpKGZsb2F0KXZh bCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKysgICAgICAgICAgY2FzZSA5 NzQ6IHsKKysgICAgICAgICAgICAvLyBmY2ZpZHVzOiBjb252ZXJ0IHVpbnQ2NCB0byBmbG9hdCBz aW5nbGUKKysgICAgICAgICAgICB1aW50NjRfdCB2YWwgPSBVNjQoZ2V0RnB1UmVnaXN0ZXIocmIp KTsKKysgICAgICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgKGRvdWJsZSkoZmxvYXQp dmFsKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgICBkZWZh dWx0OgorKyAgICAgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAorKyAgICAgICAgICAg ICAgICAiZGVjb2RlRlA6IG9wY29kZSA1OSwgeG9fYT0ldSB4b194PSV1IiwgeG9fYSwgeG9feCk7 CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgIH0KKysgIH0gZWxz ZSB7CisrICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVGUDogb3Bjb2RlPSV1Iiwg b3Bjb2RlKTsKKysgIH0KKyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBkZWNv ZGVWTVg6IE1ham9yIG9wY29kZSA0IChBbHRpVmVjL1ZNWCB2ZWN0b3Igb3BzIG9uIFZSMC1WUjMx KS4KKysvLworKy8vIFZSLWZvcm0gKFZYLWZvcm0pOiBiaXRzIDAtNSA9IHByaW1hcnkgb3Bjb2Rl ICg0KSwgYml0cyA2LTEwID0gVlJULAorKy8vIGJpdHMgMTEtMTUgPSBWUkEsIGJpdHMgMTYtMjAg PSBWUkIsIGJpdHMgMjEtMzEgPSBYTyAoMTEgYml0cykuCisrLy8gWE8gZXh0cmFjdGVkIHZpYSBg aW5zdHJ1Y3Rpb25CaXRzKCkgJiAweDdGRmAuCisrLy8KKysvLyBIZWxwZXJzIGJlbG93IHBhY2sv dW5wYWNrIGVhY2ggVlIgdmlhIHRoZSBWUnJlZ2lzdGVyc18gYnl0ZSBzdG9yYWdlCisrLy8gKDE2 IGJ5dGVzLCBiaWctZW5kaWFuIFBQQyBudW1iZXJpbmc6IGJ5dGVzWzBdIGlzIHRoZSBtb3N0LXNp Z25pZmljYW50CisrLy8gYnl0ZSBvZiB0aGUgYXJjaGl0ZWN0dXJhbCByZWdpc3RlciwgYnV0IG9u IFBQQzY0IExFIHdhc20gdGhlIGxhbmUKKysvLyBvcmRlcmluZyBpcyB3aGF0IHRoZSBKSVQgZXhw ZWN0cykuIEFsbCBvcHMgaGVyZSB1c2UgYnl0ZS1sZXZlbAorKy8vIGFjY2Vzc29ycyBmb3IgY29u c2lzdGVuY3kgd2l0aCB0aGUgZXhpc3RpbmcgVk1YIG1lbW9yeSBvcHMuCisrCisrdm9pZCBTaW11 bGF0b3I6OmRlY29kZVZNWChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQzMl90IHhv ID0gaW5zdHItPmluc3RydWN0aW9uQml0cygpICYgMHg3RkZ1OworKyAgdWludDMyX3QgdnJ0ID0g aW5zdHItPnJ0VmFsdWUoKTsgICAvLyBiaXRzIDYuLjEwCisrICB1aW50MzJfdCB2cmEgPSBpbnN0 ci0+cmFWYWx1ZSgpOyAgIC8vIGJpdHMgMTEuLjE1CisrICB1aW50MzJfdCB2cmIgPSBpbnN0ci0+ cmJWYWx1ZSgpOyAgIC8vIGJpdHMgMTYuLjIwCisrICB1aW50MzJfdCB1aW1tID0gaW5zdHItPnJh VmFsdWUoKTsgIC8vIFZBLWZvcm06IDUtYml0IGltbWVkaWF0ZSBhdCBiaXRzIDExLi4xNQorKwor KyAgdWludDhfdCBhWzE2XSwgYlsxNl0sIHJbMTZdOworKyAgZ2V0VlJCeXRlcyh2cmEsIGEpOwor KyAgZ2V0VlJCeXRlcyh2cmIsIGIpOworKworKyAgLy8gSGVscGVycyBmb3IgdHJlYXRpbmcgdGhl IGJ5dGUgc3RvcmFnZSBhcyB0eXBlZCBsYW5lIGFycmF5cy4KKysgIC8vIFRoZSBQUEM2NExFIHdh c20gU0lNRCBsb3dlcmluZyBzdG9yZXMgZWFjaCBsYW5lJ3MgYnl0ZXMgaW4KKysgIC8vIGxpdHRs ZS1lbmRpYW4gb3JkZXIsIHNvIGxhbmUgaSBvZiBhbiBOLWJ5dGUgZWxlbWVudCBvY2N1cGllcyBi eXRlcworKyAgLy8gKGkqTikgLi4gKGkqTiArIE4gLSAxKSB3aXRoIHRoZSBMU0IgYXQgYnl0ZSAo aSpOKS4gRm9yIGV4YW1wbGUsCisrICAvLyBhIHYxMjguY29uc3QgaTMyeDQgMHgxMjM0NTY3OCBo YXMgYnl0ZXMgWzc4IDU2IDM0IDEyIOKApl0uCisrICAjZGVmaW5lIExBTkVfVTgoYnVmLCBpKSAg KCh1aW50OF90KShidWYpWyhpKV0pCisrICAjZGVmaW5lIExBTkVfUzgoYnVmLCBpKSAgKChpbnQ4 X3QpKGJ1ZilbKGkpXSkKKysgICNkZWZpbmUgTEFORV9VMTYoYnVmLCBpKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICgodWludDE2X3QpKCh1aW50MTZfdCkoYnVm KVsoaSkgKiAyXSB8ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICgodWlu dDE2X3QpKGJ1ZilbKGkpICogMiArIDFdIDw8IDgpKSkKKysgICNkZWZpbmUgTEFORV9TMTYoYnVm LCBpKSAoKGludDE2X3QpTEFORV9VMTYoYnVmLCBpKSkKKysgICNkZWZpbmUgTEFORV9VMzIoYnVm LCBpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICgodWludDMy X3QpKCh1aW50MzJfdCkoYnVmKVsoaSkgKiA0XSB8ICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgICAgICgodWludDMyX3QpKGJ1ZilbKGkpICogNCArIDFdIDw8IDgpIHwgICAgICAg ICBcCisrICAgICAgICAgICAgICAgICgodWludDMyX3QpKGJ1ZilbKGkpICogNCArIDJdIDw8IDE2 KSB8ICAgICAgICBcCisrICAgICAgICAgICAgICAgICgodWludDMyX3QpKGJ1ZilbKGkpICogNCAr IDNdIDw8IDI0KSkpCisrICAjZGVmaW5lIExBTkVfUzMyKGJ1ZiwgaSkgKChpbnQzMl90KUxBTkVf VTMyKGJ1ZiwgaSkpCisrICAjZGVmaW5lIExBTkVfVTY0KGJ1ZiwgaSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoKHVpbnQ2NF90KSgodWludDY0X3QpKGJ1Zilb KGkpICogOF0gfCAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQ2 NF90KShidWYpWyhpKSAqIDggKyAxXSA8PCA4KSB8ICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyAyXSA8PCAxNikgfCAgICAgICAgXAorKyAgICAg ICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyAzXSA8PCAyNCkgfCAgICAgICAg XAorKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyA0XSA8PCAzMikg fCAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyA1 XSA8PCA0MCkgfCAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhp KSAqIDggKyA2XSA8PCA0OCkgfCAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90 KShidWYpWyhpKSAqIDggKyA3XSA8PCA1NikpKQorKyAgI2RlZmluZSBMQU5FX1M2NChidWYsIGkp ICgoaW50NjRfdClMQU5FX1U2NChidWYsIGkpKQorKyAgI2RlZmluZSBTRVRfTEFORV9VOChidWYs IGksIHYpICBkbyB7IChidWYpWyhpKV0gPSAodWludDhfdCkodik7IH0gd2hpbGUgKDApCisrICAj ZGVmaW5lIFNFVF9MQU5FX1UxNihidWYsIGksIHYpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogMl0gICAgID0gKHVpbnQ4X3Qp KCh1aW50MTZfdCkodikgJiAweEZGKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAoYnVmKVso aSkgKiAyICsgMV0gPSAodWludDhfdCkoKCh1aW50MTZfdCkodikgPj4gOCkgJiAweEZGKTsgICAg ICAgICAgXAorKyAgICB9IHdoaWxlICgwKQorKyAgI2RlZmluZSBTRVRfTEFORV9VMzIoYnVmLCBp LCB2KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg IChidWYpWyhpKSAqIDRdICAgICA9ICh1aW50OF90KSgodWludDMyX3QpKHYpICYgMHhGRik7ICAg ICAgICAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogNCArIDFdID0gKHVpbnQ4X3QpKCgo dWludDMyX3QpKHYpID4+IDgpICYgMHhGRik7ICAgICAgICAgIFwKKysgICAgICAoYnVmKVsoaSkg KiA0ICsgMl0gPSAodWludDhfdCkoKCh1aW50MzJfdCkodikgPj4gMTYpICYgMHhGRik7ICAgICAg ICAgXAorKyAgICAgIChidWYpWyhpKSAqIDQgKyAzXSA9ICh1aW50OF90KSgoKHVpbnQzMl90KSh2 KSA+PiAyNCkgJiAweEZGKTsgICAgICAgICBcCisrICAgIH0gd2hpbGUgKDApCisrICAjZGVmaW5l IFNFVF9MQU5FX1U2NChidWYsIGksIHYpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogOF0gICAgID0gKHVpbnQ4X3QpKCh1aW50 NjRfdCkodikgJiAweEZGKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAoYnVmKVsoaSkgKiA4 ICsgMV0gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gOCkgJiAweEZGKTsgICAgICAgICAg XAorKyAgICAgIChidWYpWyhpKSAqIDggKyAyXSA9ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2KSA+ PiAxNikgJiAweEZGKTsgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogOCArIDNdID0gKHVp bnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDI0KSAmIDB4RkYpOyAgICAgICAgIFwKKysgICAgICAo YnVmKVsoaSkgKiA4ICsgNF0gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gMzIpICYgMHhG Rik7ICAgICAgICAgXAorKyAgICAgIChidWYpWyhpKSAqIDggKyA1XSA9ICh1aW50OF90KSgoKHVp bnQ2NF90KSh2KSA+PiA0MCkgJiAweEZGKTsgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICog OCArIDZdID0gKHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDQ4KSAmIDB4RkYpOyAgICAgICAg IFwKKysgICAgICAoYnVmKVsoaSkgKiA4ICsgN10gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikg Pj4gNTYpICYgMHhGRik7ICAgICAgICAgXAorKyAgICB9IHdoaWxlICgwKQorKworKyAgLy8gLS0t IFZBLWZvcm0gcHJlLWRpc3BhdGNoIC0tLQorKyAgLy8KKysgIC8vIFZBLWZvcm0gaGFzIGEgNi1i aXQgWE8gYXQgYml0cyAyNi0zMSBhbmQgYSA1LWJpdCBWUkMgYXQgYml0cyAyMS0yNS4KKysgIC8v IGRlY29kZVZNWCdzIDExLWJpdCBYTyBtYXNrIGNvbmZsYXRlcyBWUkMgd2l0aAorKyAgLy8gWE8s IHNvIGEgcGxhaW4gYHN3aXRjaCAoeG8pYCBvdmVyIDExLWJpdCB2YWx1ZXMgb25seSBtYXRjaGVz IHdoZW4KKysgIC8vIFZSQyA9PSAwLiBQZWVsIG9mZiB0aGUgdGhyZWUgVkEtZm9ybSBvcHMgYWN0 dWFsbHkgdXNlZCBieSB0aGUgSklUCisrICAvLyAodm1sYWRkdWhtLCB2c2VsLCB2cGVybSkgYmVm b3JlIHRoZSBtYWluIHN3aXRjaCBzbyBhbnkgVlJDIHZhbHVlCisrICAvLyB3b3Jrcy4gdnNsZG9p IChYTz00NCkgaXMgVlgtZm9ybSB3aXRoIFNIIGF0IGJpdHMgMjItMjUsIG5vdCBWQSDigJQKKysg IC8vIGhhbmRsZWQgaW4gdGhlIHN3aXRjaCBiZWxvdy4KKysgIHsKKysgICAgdWludDMyX3QgdmFf eG8gPSB4byAmIDB4M0Z1OworKyAgICBpZiAodmFfeG8gPT0gMzIgfHwgdmFfeG8gPT0gMzMgfHwg dmFfeG8gPT0gMzQgfHwgdmFfeG8gPT0gMzggfHwKKysgICAgICAgIHZhX3hvID09IDQwIHx8IHZh X3hvID09IDQyIHx8IHZhX3hvID09IDQzKSB7CisrICAgICAgdWludDMyX3QgdnJjID0gKGluc3Ry LT5pbnN0cnVjdGlvbkJpdHMoKSA+PiA2KSAmIDB4MUY7CisrICAgICAgdWludDhfdCBjdlsxNl07 CisrICAgICAgZ2V0VlJCeXRlcyh2cmMsIGN2KTsKKysgICAgICBpZiAodmFfeG8gPT0gMzIpIHsK KysgICAgICAgIC8vIHZtaGFkZHNocyBWVCxWQSxWQixWQyA6IFZUW2ldID0gc2F0X3MxNigKKysg ICAgICAgIC8vICAgKHMzMilWQS5oW2ldICogKHMzMilWQi5oW2ldID4+IDE1ICsgKHMzMilWQy5o W2ldKQorKyAgICAgICAgLy8gKG5vIHJvdW5kaW5nIHRlcm0g4oCUIHVzZSB2bWhyYWRkc2hzIGZv ciB0aGUgcm91bmRlZCBmb3JtKS4KKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsr KSB7CisrICAgICAgICAgIGludDMyX3QgcHJvZCA9IChpbnQzMl90KUxBTkVfUzE2KGEsIGkpICog KGludDMyX3QpTEFORV9TMTYoYiwgaSk7CisrICAgICAgICAgIGludDMyX3Qgc3VtID0gKHByb2Qg Pj4gMTUpICsgKGludDMyX3QpTEFORV9TMTYoY3YsIGkpOworKyAgICAgICAgICBpZiAoc3VtID4g SU5UMTZfTUFYKSBzdW0gPSBJTlQxNl9NQVg7CisrICAgICAgICAgIGlmIChzdW0gPCBJTlQxNl9N SU4pIHN1bSA9IElOVDE2X01JTjsKKysgICAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50 MTZfdCkoaW50MTZfdClzdW0pOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSBpZiAodmFfeG8g PT0gMzMpIHsKKysgICAgICAgIC8vIHZtaHJhZGRzaHMgVlQsVkEsVkIsVkMgOiByb3VuZGVkIFEx NSBtdWx0aXBseS1hZGQtc2F0dXJhdGUuCisrICAgICAgICAvLyAgIFZUW2ldID0gc2F0X3MxNigo KHMzMilWQS5oW2ldICogKHMzMilWQi5oW2ldICsgMHg0MDAwKQorKyAgICAgICAgLy8gICAgICAg ICAgICAgICAgICAgPj4gMTUgKyAoczMyKVZDLmhbaV0pCisrICAgICAgICAvLyBVc2VkIGJ5IHdh c20gaTE2eDgucTE1bXVscl9zYXRfcyAoVkMgaXMgemVybykuCisrICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBpbnQzMl90IHByb2QgPSAoaW50MzJfdClM QU5FX1MxNihhLCBpKSAqIChpbnQzMl90KUxBTkVfUzE2KGIsIGkpOworKyAgICAgICAgICBpbnQz Ml90IHN1bSA9ICgocHJvZCArIDB4NDAwMCkgPj4gMTUpICsgKGludDMyX3QpTEFORV9TMTYoY3Ys IGkpOworKyAgICAgICAgICBpZiAoc3VtID4gSU5UMTZfTUFYKSBzdW0gPSBJTlQxNl9NQVg7Cisr ICAgICAgICAgIGlmIChzdW0gPCBJTlQxNl9NSU4pIHN1bSA9IElOVDE2X01JTjsKKysgICAgICAg ICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdClzdW0pOworKyAgICAgICAg fQorKyAgICAgIH0gZWxzZSBpZiAodmFfeG8gPT0gMzQpIHsKKysgICAgICAgIC8vIHZtbGFkZHVo bSBWVCxWQSxWQixWQyA6IFZUID0gbG93MTYoVkEqVkIgKyBWQykKKysgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICAgIHVpbnQxNl90IHByb2QgPSBMQU5FX1Ux NihhLCBpKSAqIExBTkVfVTE2KGIsIGkpOworKyAgICAgICAgICBTRVRfTEFORV9VMTYociwgaSwg cHJvZCArIExBTkVfVTE2KGN2LCBpKSk7CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIGlmICh2 YV94byA9PSA0MCkgeworKyAgICAgICAgLy8gdm1zdW1zaG0gVlQsVkEsVkIsVkMgOiBwYWlyd2lz ZSBtdWx0aXBseS1zdW0gb2Ygc2lnbmVkIGhhbGZ3b3JkcworKyAgICAgICAgLy8gaW50byBpMzIg bGFuZXMsIG1vZHVsbyBpMzIgd3JhcC4KKysgICAgICAgIC8vICAgVlQuaTMyW2tdID0gVkMuaTMy W2tdICsgVkEuaTE2WzJrXSpWQi5pMTZbMmtdCisrICAgICAgICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICArIFZBLmkxNlsyaysxXSpWQi5pMTZbMmsrMV0KKysgICAgICAgIC8vIFVzZWQgYnkg d2FzbSBpMzJ4NC5kb3RfaTE2eDhfcyB3aXRoIFZDID0gMCwgYW5kIGJ5CisrICAgICAgICAvLyBp MzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfcyB3aXRoIFZCID0gc3BsYXQoMSkgYW5kIFZDID0g MC4KKysgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNDsgaysrKSB7CisrICAgICAgICAgIGlu dDMyX3QgYTAgPSAoaW50MzJfdClMQU5FX1MxNihhLCAyICogayk7CisrICAgICAgICAgIGludDMy X3QgYTEgPSAoaW50MzJfdClMQU5FX1MxNihhLCAyICogayArIDEpOworKyAgICAgICAgICBpbnQz Ml90IGIwID0gKGludDMyX3QpTEFORV9TMTYoYiwgMiAqIGspOworKyAgICAgICAgICBpbnQzMl90 IGIxID0gKGludDMyX3QpTEFORV9TMTYoYiwgMiAqIGsgKyAxKTsKKysgICAgICAgICAgaW50MzJf dCBjICA9IExBTkVfUzMyKGN2LCBrKTsKKysgICAgICAgICAgaW50MzJfdCByZXN1bHQgPSAoaW50 MzJfdCkoKHVpbnQzMl90KWMgKyAodWludDMyX3QpKGEwICogYjApICsKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KShhMSAqIGIxKSk7CisrICAgICAgICAg IFNFVF9MQU5FX1UzMihyLCBrLCAodWludDMyX3QpcmVzdWx0KTsKKysgICAgICAgIH0KKysgICAg ICB9IGVsc2UgaWYgKHZhX3hvID09IDM4KSB7CisrICAgICAgICAvLyB2bXN1bXVobSBWVCxWQSxW QixWQyA6IHNhbWUgYXMgdm1zdW1zaG0gYnV0IHVuc2lnbmVkIGhhbGZ3b3Jkcy4KKysgICAgICAg IC8vICAgVlQudTMyW2tdID0gVkMudTMyW2tdICsgVkEudTE2WzJrXSpWQi51MTZbMmtdCisrICAg ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICArIFZBLnUxNlsyaysxXSpWQi51MTZbMmsr MV0KKysgICAgICAgIC8vIFVzZWQgYnkgd2FzbSBpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhf dSB3aXRoIFZCID0gc3BsYXQoMSkKKysgICAgICAgIC8vIGFuZCBWQyA9IDAuCisrICAgICAgICBm b3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykgeworKyAgICAgICAgICB1aW50MzJfdCBhMCA9ICh1 aW50MzJfdClMQU5FX1UxNihhLCAyICogayk7CisrICAgICAgICAgIHVpbnQzMl90IGExID0gKHVp bnQzMl90KUxBTkVfVTE2KGEsIDIgKiBrICsgMSk7CisrICAgICAgICAgIHVpbnQzMl90IGIwID0g KHVpbnQzMl90KUxBTkVfVTE2KGIsIDIgKiBrKTsKKysgICAgICAgICAgdWludDMyX3QgYjEgPSAo dWludDMyX3QpTEFORV9VMTYoYiwgMiAqIGsgKyAxKTsKKysgICAgICAgICAgdWludDMyX3QgYyAg PSBMQU5FX1UzMihjdiwgayk7CisrICAgICAgICAgIHVpbnQzMl90IHJlc3VsdCA9IGMgKyBhMCAq IGIwICsgYTEgKiBiMTsKKysgICAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGssIHJlc3VsdCk7Cisr ICAgICAgICB9CisrICAgICAgfSBlbHNlIGlmICh2YV94byA9PSA0MikgeworKyAgICAgICAgLy8g dnNlbCBWVCxWQSxWQixWQyA6IFZUW2ldID0gKFZDW2ldICYgVkJbaV0pIHwgKH5WQ1tpXSAmIFZB W2ldKQorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICAg IHJbaV0gPSAodWludDhfdCkoKGN2W2ldICYgYltpXSkgfCAofmN2W2ldICYgYVtpXSkpOworKyAg ICAgICAgfQorKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvLyB2cGVybSBWVCxWQSxWQixWQzsg ZW1waXJpY2FsIExFOgorKyAgICAgICAgLy8gICByW0xFX2ldID0gKFZDW0xFX2ldIDwgMTYpID8g VkFbTEVfKDE1LVZDW2ldKV0KKysgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IFZCW0xFXygzMS1WQ1tpXSldCisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBp KyspIHsKKysgICAgICAgICAgdWludDhfdCBpZHggPSBjdltpXSAmIDB4MUY7CisrICAgICAgICAg IHJbaV0gPSAoaWR4IDwgMTYpID8gYVsxNSAtIGlkeF0gOiBiWzMxIC0gaWR4XTsKKysgICAgICAg IH0KKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOworKyAgICAgIGdvdG8gdm14 X2RvbmU7CisrICAgIH0KKysgIH0KKysKKysgIHN3aXRjaCAoeG8pIHsKKysgICAgLy8gPT09IElu dGVnZXIgYWRkIChtb2R1bG8pID09PQorKyAgICBjYXNlIDA6ICAgIC8vIHZhZGR1Ym0KKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIs IGksIExBTkVfVTgoYSwgaSkgKyBMQU5FX1U4KGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA2NDogICAvLyB2YWRkdWhtCisrICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihy LCBpLCBMQU5FX1UxNihhLCBpKSArIExBTkVfVTE2KGIsIGkpKTsKKysgICAgICB9CisrICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMjg6ICAvLyB2YWRkdXdtCisr ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1Uz MihyLCBpLCBMQU5FX1UzMihhLCBpKSArIExBTkVfVTMyKGIsIGkpKTsKKysgICAgICB9CisrICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxOTI6ICAvLyB2YWRkdWRt CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5F X1U2NChyLCBpLCBMQU5FX1U2NChhLCBpKSArIExBTkVfVTY0KGIsIGkpKTsKKysgICAgICB9Cisr ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IEludGVnZXIg c3ViIChtb2R1bG8pID09PQorKyAgICBjYXNlIDEwMjQ6IC8vIHZzdWJ1Ym0KKysgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExB TkVfVTgoYSwgaSkgLSBMQU5FX1U4KGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMDg4OiAvLyB2c3VidWhtCisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBM QU5FX1UxNihhLCBpKSAtIExBTkVfVTE2KGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMTUyOiAvLyB2c3VidXdtCisrICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBp LCBMQU5FX1UzMihhLCBpKSAtIExBTkVfVTMyKGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMjE2OiAvLyB2c3VidWRtCisrICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChy LCBpLCBMQU5FX1U2NChhLCBpKSAtIExBTkVfVTY0KGIsIGkpKTsKKysgICAgICB9CisrICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IEludGVnZXIgYWRkIChz YXR1cmF0aW5nLCBzaWduZWQpID09PQorKyAgICBjYXNlIDc2ODogIC8vIHZhZGRzYnMKKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIGludCBzID0gKGludClM QU5FX1M4KGEsIGkpICsgKGludClMQU5FX1M4KGIsIGkpOworKyAgICAgICAgaWYgKHMgPiBJTlQ4 X01BWCkgcyA9IElOVDhfTUFYOworKyAgICAgICAgaWYgKHMgPCBJTlQ4X01JTikgcyA9IElOVDhf TUlOOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3Qpcyk7CisrICAgICAgfQor KyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgODMyOiAgLy8gdmFk ZHNocworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBpbnQg cyA9IChpbnQpTEFORV9TMTYoYSwgaSkgKyAoaW50KUxBTkVfUzE2KGIsIGkpOworKyAgICAgICAg aWYgKHMgPiBJTlQxNl9NQVgpIHMgPSBJTlQxNl9NQVg7CisrICAgICAgICBpZiAocyA8IElOVDE2 X01JTikgcyA9IElOVDE2X01JTjsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2 X3Qpcyk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAg IGNhc2UgODk2OiAgLy8gdmFkZHN3cworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KSB7CisrICAgICAgICBpbnQ2NF90IHMgPSAoaW50NjRfdClMQU5FX1MzMihhLCBpKSArIChpbnQ2 NF90KUxBTkVfUzMyKGIsIGkpOworKyAgICAgICAgaWYgKHMgPiBJTlQzMl9NQVgpIHMgPSBJTlQz Ml9NQVg7CisrICAgICAgICBpZiAocyA8IElOVDMyX01JTikgcyA9IElOVDMyX01JTjsKKysgICAg ICAgIFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3Qpcyk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBJbnRlZ2VyIGFkZCAoc2F0 dXJhdGluZywgdW5zaWduZWQpID09PQorKyAgICBjYXNlIDUxMjogIC8vIHZhZGR1YnMKKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIHVuc2lnbmVkIHMgPSAo dW5zaWduZWQpTEFORV9VOChhLCBpKSArICh1bnNpZ25lZClMQU5FX1U4KGIsIGkpOworKyAgICAg ICAgaWYgKHMgPiBVSU5UOF9NQVgpIHMgPSBVSU5UOF9NQVg7CisrICAgICAgICBTRVRfTEFORV9V OChyLCBpLCAodWludDhfdClzKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKKysgICAgY2FzZSA1NzY6ICAvLyB2YWRkdWhzCisrICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIHVuc2lnbmVkIHMgPSAodW5zaWduZWQpTEFORV9V MTYoYSwgaSkgKyAodW5zaWduZWQpTEFORV9VMTYoYiwgaSk7CisrICAgICAgICBpZiAocyA+IFVJ TlQxNl9NQVgpIHMgPSBVSU5UMTZfTUFYOworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1 aW50MTZfdClzKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK KysgICAgY2FzZSA2NDA6ICAvLyB2YWRkdXdzCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0 OyBpKyspIHsKKysgICAgICAgIHVpbnQ2NF90IHMgPSAodWludDY0X3QpTEFORV9VMzIoYSwgaSkg KyAodWludDY0X3QpTEFORV9VMzIoYiwgaSk7CisrICAgICAgICBpZiAocyA+IFVJTlQzMl9NQVgp IHMgPSBVSU5UMzJfTUFYOworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksICh1aW50MzJfdClz KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAg Ly8gPT09IEludGVnZXIgc3ViIChzYXR1cmF0aW5nLCBzaWduZWQpID09PQorKyAgICBjYXNlIDE3 OTI6IC8vIHZzdWJzYnMKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysg ICAgICAgIGludCBzID0gKGludClMQU5FX1M4KGEsIGkpIC0gKGludClMQU5FX1M4KGIsIGkpOwor KyAgICAgICAgaWYgKHMgPiBJTlQ4X01BWCkgcyA9IElOVDhfTUFYOworKyAgICAgICAgaWYgKHMg PCBJTlQ4X01JTikgcyA9IElOVDhfTUlOOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVp bnQ4X3Qpcyk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Cisr ICAgIGNhc2UgMTg1NjogLy8gdnN1YnNocworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsg aSsrKSB7CisrICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9TMTYoYSwgaSkgLSAoaW50KUxBTkVf UzE2KGIsIGkpOworKyAgICAgICAgaWYgKHMgPiBJTlQxNl9NQVgpIHMgPSBJTlQxNl9NQVg7Cisr ICAgICAgICBpZiAocyA8IElOVDE2X01JTikgcyA9IElOVDE2X01JTjsKKysgICAgICAgIFNFVF9M QU5FX1UxNihyLCBpLCAodWludDE2X3Qpcyk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBJbnRlZ2VyIHN1YiAoc2F0dXJhdGluZywg dW5zaWduZWQpID09PQorKyAgICBjYXNlIDE1MzY6IC8vIHZzdWJ1YnMKKysgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIGludCBzID0gKGludClMQU5FX1U4KGEs IGkpIC0gKGludClMQU5FX1U4KGIsIGkpOworKyAgICAgICAgaWYgKHMgPCAwKSBzID0gMDsKKysg ICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KXMpOworKyAgICAgIH0KKysgICAgICBz ZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDE2MDA6IC8vIHZzdWJ1aHMKKysg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgaW50IHMgPSAoaW50 KUxBTkVfVTE2KGEsIGkpIC0gKGludClMQU5FX1UxNihiLCBpKTsKKysgICAgICAgIGlmIChzIDwg MCkgcyA9IDA7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KXMpOworKyAg ICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0g QXZlcmFnZSB1bnNpZ25lZCAocm91bmRlZDogKGErYisxKT4+MSkgPT09CisrICAgIGNhc2UgMTAy NjogLy8gdmF2Z3ViCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAg ICAgICBTRVRfTEFORV9VOChyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZClM QU5FX1U4KGEsIGkpICsgTEFORV9VOChiLCBpKSArIDEpID4+IDEpOworKyAgICAgIH0KKysgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDEwOTA6IC8vIHZhdmd1aAor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9V MTYociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkKUxBTkVfVTE2KGEsIGkp ICsgTEFORV9VMTYoYiwgaSkgKyAxKSA+PiAxKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IFZlY3RvciBtdWx0aXBseSBwZXItbGFu ZSAoaTMyeDQubXVsKSA9PT0KKysgICAgY2FzZSAxMzc6IHsgLy8gdm11bHV3bTogcGVyLWxhbmUg aTMyIG11bHRpcGx5IChsb3cgMzIgYml0cykKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksIExBTkVfVTMyKGEsIGkpICogTEFO RV9VMzIoYiwgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OworKyAgICB9CisrCisrICAgIC8vID09PSBQT1dFUjEwIHZtdWxsZDogcGVyLWxhbmUgaTY0IG11 bHRpcGx5IChsb3cgNjQgYml0cykgPT09CisrICAgIGNhc2UgNDU3OiB7CisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIHVpbnQ2NF90IGF2ID0gMCwgYnYgPSAw OworKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKysgICAgICAgICAgYXYg fD0gKCh1aW50NjRfdClhW2kgKiA4ICsgal0pIDw8IChqICogOCk7CisrICAgICAgICAgIGJ2IHw9 ICgodWludDY0X3QpYltpICogOCArIGpdKSA8PCAoaiAqIDgpOworKyAgICAgICAgfQorKyAgICAg ICAgdWludDY0X3QgcHJvZCA9IGF2ICogYnY7ICAvLyBsb3cgNjQgYml0cywgbW9kdWxvIHdyYXAK KysgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisrICAgICAgICAgIHJbaSAq IDggKyBqXSA9ICh1aW50OF90KShwcm9kID4+IChqICogOCkpOworKyAgICAgICAgfQorKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrCisrICAgIC8v ID09PSB2bXVsZS92bXVsbyogKG11bHRpcGx5IGV2ZW4vb2RkIGxhbmVzLCB3aWRlbmluZykgPT09 CisrICAgIC8vCisrICAgIC8vIEFsbCBYTyB2YWx1ZXMgYmVsb3cgd2VyZSB2ZXJpZmllZCBieSBk aXNhc3NlbWJsaW5nIHRoZQorKyAgICAvLyBQUENfdm11bGUqL1BQQ192bXVsbyogY29uc3RhbnRz IGZyb20gQXNzZW1ibGVyLXBwYzY0Lmggd2l0aAorKyAgICAvLyBgYXMgLW1wcGM2NCAtbWxpdHRs ZWAgKyBgb2JqZHVtcCAtTXBvd2VyOSAtZGAuIFRoZSBwcmV2aW91cworKyAgICAvLyB2ZXJzaW9u IGhhZCBhbGwgMTIgWE8gbGFiZWxzIHN3YXBwZWQgd2l0aCBlYWNoIG90aGVyJ3Mgc2VtYW50aWMK KysgICAgLy8gcGFpciAoc28gdGhlIEpJVCdzIHZtdWxlc2Igd2FzIGRlY29kZWQgYXMgdm11bG9z YiBhbmQgdmljZQorKyAgICAvLyB2ZXJzYSksIGNhdXNpbmcgaTh4MTbihpJpMTZ4OCBleHRtdWwg dG8gcHJvZHVjZSB3cm9uZyBoYWxmd29yZHMuCisrICAgIC8vCisrICAgIC8vICAgUFBDX3ZtdWxv dWIgPSAweDEwMDAwMDA4IOKGkiBYTz04ICAgICB2bXVsb3ViIChMRSBldmVuLWJ5dGUgcGFpcnMp CisrICAgIC8vICAgUFBDX3ZtdWxvdWggPSAweDEwMDAwMDQ4IOKGkiBYTz03MiAgICB2bXVsb3Vo CisrICAgIC8vICAgUFBDX3ZtdWxvdXcgPSAweDEwMDAwMDg4IOKGkiBYTz0xMzYgICB2bXVsb3V3 CisrICAgIC8vICAgUFBDX3ZtdWxvc2IgPSAweDEwMDAwMTA4IOKGkiBYTz0yNjQgICB2bXVsb3Ni CisrICAgIC8vICAgUFBDX3ZtdWxvc2ggPSAweDEwMDAwMTQ4IOKGkiBYTz0zMjggICB2bXVsb3No CisrICAgIC8vICAgUFBDX3ZtdWxvc3cgPSAweDEwMDAwMTg4IOKGkiBYTz0zOTIgICB2bXVsb3N3 CisrICAgIC8vICAgUFBDX3ZtdWxldWIgPSAweDEwMDAwMjA4IOKGkiBYTz01MjAgICB2bXVsZXVi IChMRSBvZGQtYnl0ZSBwYWlycykKKysgICAgLy8gICBQUENfdm11bGV1aCA9IDB4MTAwMDAyNDgg 4oaSIFhPPTU4NCAgIHZtdWxldWgKKysgICAgLy8gICBQUENfdm11bGV1dyA9IDB4MTAwMDAyODgg 4oaSIFhPPTY0OCAgIHZtdWxldXcKKysgICAgLy8gICBQUENfdm11bGVzYiA9IDB4MTAwMDAzMDgg 4oaSIFhPPTc3NiAgIHZtdWxlc2IKKysgICAgLy8gICBQUENfdm11bGVzaCA9IDB4MTAwMDAzNDgg 4oaSIFhPPTg0MCAgIHZtdWxlc2gKKysgICAgLy8gICBQUENfdm11bGVzdyA9IDB4MTAwMDAzODgg 4oaSIFhPPTkwNCAgIHZtdWxlc3cKKysgICAgLy8KKysgICAgLy8gTGFuZSBpbmRleGluZyBvbiBM RSBzdG9yYWdlOiAiQkUtZXZlbiBieXRlIGkiIGlzIHN0b3JlZCBhdCBMRQorKyAgICAvLyBieXRl IGluZGV4ICgxNSAtIDJpKTsgc2luY2Ugb3VyIExBTkVfUzggdXNlcyBMRSBieXRlIGluZGV4LCB0 aGUKKysgICAgLy8gIkJFLWV2ZW4iID0gIkxFLW9kZCIgbWFwcGluZyBnaXZlcyBgMippICsgMWAg Zm9yIHZtdWxlLCBgMippYAorKyAgICAvLyBmb3Igdm11bG8uIFRoZSBKSVQncyBleHRtdWwgaGVs cGVycyBlbWl0IGB2bXVsZXNiICsgdm11bG9zYiArCisrICAgIC8vIHZtcmdsaGAgdG8gcGFjayBi b3RoIGhhbHZlczsgZ2V0dGluZyB0aGUgc2VtYW50aWNzIHN3YXBwZWQgaGVyZQorKyAgICAvLyBw cm9kdWNlcyB0aGUgcmlnaHQgcmVzdWx0IHJlZ2lzdGVyIGJ1dCB3aXRoIHRoZSBoYWx2ZXMgaW4g dGhlCisrICAgIC8vIHdyb25nIG1lcmdlIG9yZGVyLCBicmVha2luZyBleHRtdWwuCisrICAgIGNh c2UgNzc2OiB7IC8vIHZtdWxlc2I6IHNpZ25lZCBCRS1ldmVuIGJ5dGUg4oaSIGhhbGZ3b3JkICg4 IHJlc3VsdHMpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAg IFNFVF9MQU5FX1UxNihyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgIChpbnQxNl90KUxBTkVf UzgoYSwgMiAqIGkgKyAxKSAqCisrICAgICAgICAgICAgICAgICAgICAgKGludDE2X3QpTEFORV9T OChiLCAyICogaSArIDEpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDUyMDogeyAvLyB2bXVsZXViOiB1bnNpZ25lZCBCRS1l dmVuIGJ5dGUg4oaSIGhhbGZ3b3JkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKysp IHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgICh1 aW50MTZfdClMQU5FX1U4KGEsIDIgKiBpICsgMSkgKgorKyAgICAgICAgICAgICAgICAgICAgICh1 aW50MTZfdClMQU5FX1U4KGIsIDIgKiBpICsgMSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODQwOiB7IC8vIHZtdWxlc2g6 IHNpZ25lZCBCRS1ldmVuIGhhbGZ3b3JkIOKGkiB3b3JkCisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAorKyAgICAgICAgICAg ICAgICAgICAgIChpbnQzMl90KUxBTkVfUzE2KGEsIDIgKiBpICsgMSkgKgorKyAgICAgICAgICAg ICAgICAgICAgIChpbnQzMl90KUxBTkVfUzE2KGIsIDIgKiBpICsgMSkpOworKyAgICAgIH0KKysg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNTg0OiB7 IC8vIHZtdWxldWg6IHVuc2lnbmVkIEJFLWV2ZW4gaGFsZndvcmQg4oaSIHdvcmQKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGks CisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KUxBTkVfVTE2KGEsIDIgKiBpICsgMSkg KgorKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClMQU5FX1UxNihiLCAyICogaSArIDEp KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDkwNDogeyAvLyB2bXVsZXN3OiBzaWduZWQgQkUtZXZlbiB3b3JkIOKGkiBkd29y ZCAoUE9XRVI4KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAg ICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClMQU5F X1MzMihhLCAyICogaSArIDEpICoKKysgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClMQU5F X1MzMihiLCAyICogaSArIDEpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDY0ODogeyAvLyB2bXVsZXV3OiB1bnNpZ25lZCBC RS1ldmVuIHdvcmQg4oaSIGR3b3JkIChQT1dFUjgpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLAorKyAgICAgICAgICAgICAg ICAgICAgICh1aW50NjRfdClMQU5FX1UzMihhLCAyICogaSArIDEpICoKKysgICAgICAgICAgICAg ICAgICAgICAodWludDY0X3QpTEFORV9VMzIoYiwgMiAqIGkgKyAxKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyNjQ6IHsg Ly8gdm11bG9zYjogc2lnbmVkIEJFLW9kZCBieXRlIOKGkiBoYWxmd29yZAorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwKKysg ICAgICAgICAgICAgICAgICAgICAoaW50MTZfdClMQU5FX1M4KGEsIDIgKiBpKSAqCisrICAgICAg ICAgICAgICAgICAgICAgKGludDE2X3QpTEFORV9TOChiLCAyICogaSkpOworKyAgICAgIH0KKysg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODogeyAv LyB2bXVsb3ViOiB1bnNpZ25lZCBCRS1vZGQgYnl0ZQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwKKysgICAgICAgICAgICAg ICAgICAgICAodWludDE2X3QpTEFORV9VOChhLCAyICogaSkgKgorKyAgICAgICAgICAgICAgICAg ICAgICh1aW50MTZfdClMQU5FX1U4KGIsIDIgKiBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzMjg6IHsgLy8gdm11bG9z aDogc2lnbmVkIEJFLW9kZCBoYWxmd29yZCDihpIgd29yZAorKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKKysgICAgICAgICAg ICAgICAgICAgICAoaW50MzJfdClMQU5FX1MxNihhLCAyICogaSkgKgorKyAgICAgICAgICAgICAg ICAgICAgIChpbnQzMl90KUxBTkVfUzE2KGIsIDIgKiBpKSk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA3MjogeyAvLyB2bXVs b3VoOiB1bnNpZ25lZCBCRS1vZGQgaGFsZndvcmQg4oaSIHdvcmQKKysgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCisrICAgICAg ICAgICAgICAgICAgICAgKHVpbnQzMl90KUxBTkVfVTE2KGEsIDIgKiBpKSAqCisrICAgICAgICAg ICAgICAgICAgICAgKHVpbnQzMl90KUxBTkVfVTE2KGIsIDIgKiBpKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzOTI6IHsg Ly8gdm11bG9zdzogc2lnbmVkIEJFLW9kZCB3b3JkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLAorKyAgICAgICAgICAgICAg ICAgICAgIChpbnQ2NF90KUxBTkVfUzMyKGEsIDIgKiBpKSAqCisrICAgICAgICAgICAgICAgICAg ICAgKGludDY0X3QpTEFORV9TMzIoYiwgMiAqIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEzNjogeyAvLyB2bXVsb3V3 OiB1bnNpZ25lZCBCRS1vZGQgd29yZAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAo dWludDY0X3QpTEFORV9VMzIoYSwgMiAqIGkpICoKKysgICAgICAgICAgICAgICAgICAgICAodWlu dDY0X3QpTEFORV9VMzIoYiwgMiAqIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gUGVyLWxhbmUgcm90YXRlIGxl ZnQgKHZybHtiLGgsdyxkfSkgPT09CisrICAgIGNhc2UgNDogICAgLy8gdnJsYgorKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgdWludDhfdCB2ID0gTEFORV9V OChhLCBpKTsKKysgICAgICAgIHVpbnQzMl90IHMgPSBMQU5FX1U4KGIsIGkpICYgNzsKKysgICAg ICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KSgodiA8PCBzKSB8ICh2ID4+ICgoOCAtIHMp ICYgNykpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Cisr ICAgIGNhc2UgNjg6ICAgLy8gdnJsaAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsr KSB7CisrICAgICAgICB1aW50MTZfdCB2ID0gTEFORV9VMTYoYSwgaSk7CisrICAgICAgICB1aW50 MzJfdCBzID0gTEFORV9VMTYoYiwgaSkgJiAxNTsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBp LCAodWludDE2X3QpKCh2IDw8IHMpIHwgKHYgPj4gKCgxNiAtIHMpICYgMTUpKSkpOworKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDEzMjogIC8v IHZybHcKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgdWlu dDMyX3QgdiA9IExBTkVfVTMyKGEsIGkpOworKyAgICAgICAgdWludDMyX3QgcyA9IExBTkVfVTMy KGIsIGkpICYgMzE7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHYgPDwgcykgfCAodiA+ PiAoKDMyIC0gcykgJiAzMSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKKysgICAgY2FzZSAxOTY6ICAvLyB2cmxkCisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspIHsKKysgICAgICAgIHVpbnQ2NF90IHYgPSBMQU5FX1U2NChhLCBpKTsKKysg ICAgICAgIHVpbnQzMl90IHMgPSBMQU5FX1U2NChiLCBpKSAmIDYzOworKyAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksICh2IDw8IHMpIHwgKHYgPj4gKCg2NCAtIHMpICYgNjMpKSk7CisrICAgICAg fQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBNaW4g LyBNYXggc2lnbmVkID09PQorKyAgICBjYXNlIDI1ODogIC8vIHZtYXhzYgorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3Rk OjptYXgoTEFORV9TOChhLCBpKSwgTEFORV9TOChiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBz ZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDMyMjogIC8vIHZtYXhzaAorKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYo ciwgaSwgc3RkOjptYXgoTEFORV9TMTYoYSwgaSksIExBTkVfUzE2KGIsIGkpKSk7CisrICAgICAg fQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMzg2OiAgLy8g dm1heHN3CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNF VF9MQU5FX1UzMihyLCBpLCBzdGQ6Om1heChMQU5FX1MzMihhLCBpKSwgTEFORV9TMzIoYiwgaSkp KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2Fz ZSA0NTA6ICAvLyB2bWF4c2QKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewor KyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIHN0ZDo6bWF4KExBTkVfUzY0KGEsIGkpLCBMQU5F X1M2NChiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OworKyAgICBjYXNlIDc3MDogIC8vIHZtaW5zYgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3RkOjptaW4oTEFORV9TOChh LCBpKSwgTEFORV9TOChiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwg cik7IGJyZWFrOworKyAgICBjYXNlIDgzNDogIC8vIHZtaW5zaAorKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgc3RkOjptaW4o TEFORV9TMTYoYSwgaSksIExBTkVfUzE2KGIsIGkpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgODk4OiAgLy8gdm1pbnN3CisrICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBp LCBzdGQ6Om1pbihMQU5FX1MzMihhLCBpKSwgTEFORV9TMzIoYiwgaSkpKTsKKysgICAgICB9Cisr ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA5NjI6ICAvLyB2bWlu c2QKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksIHN0ZDo6bWluKExBTkVfUzY0KGEsIGkpLCBMQU5FX1M2NChiLCBpKSkpOwor KyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9 PT0gTWluIC8gTWF4IHVuc2lnbmVkID09PQorKyAgICBjYXNlIDI6ICAgIC8vIHZtYXh1YgorKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgo ciwgaSwgc3RkOjptYXgoTEFORV9VOChhLCBpKSwgTEFORV9VOChiLCBpKSkpOworKyAgICAgIH0K KysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDY2OiAgIC8vIHZt YXh1aAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRf TEFORV9VMTYociwgaSwgc3RkOjptYXgoTEFORV9VMTYoYSwgaSksIExBTkVfVTE2KGIsIGkpKSk7 CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2Ug MTMwOiAgLy8gdm1heHV3CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysg ICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBzdGQ6Om1heChMQU5FX1UzMihhLCBpKSwgTEFORV9V MzIoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK KysgICAgY2FzZSAxOTQ6ICAvLyB2bWF4dWQKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIHN0ZDo6bWF4KExBTkVfVTY0KGEs IGkpLCBMQU5FX1U2NChiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwg cik7IGJyZWFrOworKyAgICBjYXNlIDUxNDogIC8vIHZtaW51YgorKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3RkOjptaW4o TEFORV9VOChhLCBpKSwgTEFORV9VOChiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDU3ODogIC8vIHZtaW51aAorKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwg c3RkOjptaW4oTEFORV9VMTYoYSwgaSksIExBTkVfVTE2KGIsIGkpKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNjQyOiAgLy8gdm1pbnV3 CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5F X1UzMihyLCBpLCBzdGQ6Om1pbihMQU5FX1UzMihhLCBpKSwgTEFORV9VMzIoYiwgaSkpKTsKKysg ICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA3MDY6 ICAvLyB2bWludWQKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAg ICAgU0VUX0xBTkVfVTY0KHIsIGksIHN0ZDo6bWluKExBTkVfVTY0KGEsIGkpLCBMQU5FX1U2NChi LCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKwor KyAgICAvLyA9PT0gVmVjdG9yIGNvbXBhcmUgKGVxLCBndCBzaWduZWQsIGd0IHVuc2lnbmVkLCBu ZSBQT1dFUjkpID09PQorKyAgICAvLworKyAgICAvLyBBbGwgdmNtcCogb3BzIHNldCBwZXItbGFu ZSBhbGwtMXMgb24gdHJ1ZSwgYWxsLTBzIG9uIGZhbHNlLiBUaGUKKysgICAgLy8gcmVjb3JkIGZv cm0gKFJjPTEsIFhPIE1TQiBiaXQgc2V0OyBYT19yZWMgPSBYT19iYXNlICsgMTAyNCkgbXVzdAor KyAgICAvLyBhZGRpdGlvbmFsbHkgd3JpdGUgQ1I2OgorKyAgICAvLyAgIENSNi5MVCA9IDEgaWZm IEFMTCBsYW5lcyBhcmUgdHJ1ZTsKKysgICAgLy8gICBDUjYuR1QgPSAwIChhbHdheXMpOworKyAg ICAvLyAgIENSNi5FUSA9IDEgaWZmIE5PIGxhbmUgaXMgdHJ1ZTsKKysgICAgLy8gICBDUjYuU08g PSAwIChhbHdheXMpLgorKyAgICAvLyBgaTh4MTYuYWxsX3RydWVgIGV0Yy4gaW4gd2FzbSByZWx5 IG9uIENSNi5FUSB2aWEgYG1mb2NyZiBjcjZgOyB0aGUKKysgICAgLy8gcHJldmlvdXMgc2ltdWxh dG9yIGltcGxlbWVudGF0aW9uIGxlZnQgQ1I2IHVudG91Y2hlZCwgc28gdGhlCisrICAgIC8vIHBy ZWRpY2F0ZSB3YXMgYWx3YXlzIHdyb25nLgorKyAgICAvLworKyAgICAvLyBIZWxwZXI6IGNvdW50 IHRydWUgbGFuZXMgYnkgbG9va2luZyBhdCBieXRlIDAgb2YgZWFjaCBsYW5lIChhbGwKKysgICAg Ly8gYnl0ZXMgd2l0aGluIGEgInRydWUiIGxhbmUgYXJlIDB4RkYgc28gYnl0ZSAwIGlzIGEgc291 bmQgcHJveHkpLgorKyAgICAjZGVmaW5lIFZDTVBfRE9ORShsYW5lc18sIGxhbmVfYnl0ZXNfKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGRvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGlmICh4byA+PSAxMDI0KSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGludCBu dW1UcnVlXyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICBmb3IgKGludCBpXyA9IDA7IGlfIDwgKGxhbmVzXyk7IGlfKyspIHsg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBpZiAocltpXyAqIChsYW5l X2J5dGVzXyldID09IDB4RkYpIG51bVRydWVfKys7ICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICB1aW50OF90IGZpZWxkXyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKG51bVRy dWVfID09IChsYW5lc18pKSBmaWVsZF8gfD0ga0NSRmllbGRMVDsgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIGlmIChudW1UcnVlXyA9PSAwKSBmaWVsZF8gfD0ga0NSRmllbGRFUTsgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBzZXRDUkZpZWxkKDYsIGZpZWxkXyk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgfSB3aGlsZSAoMCkKKysKKysgICAgY2FzZSA2OiAgICAvLyB2Y21w ZXF1YiAoUmM9MCkKKysgICAgY2FzZSAxMDMwOiAvLyB2Y21wZXF1Yi4gKHJlY29yZCwgQ1I2IHVw ZGF0ZWQpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBT RVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEsIGkpID09IExBTkVfVTgoYiwgaSkgPyAweEZGIDog MCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSgxNiwgMSk7IGJyZWFrOworKyAgICBjYXNl IDcwOiAgIC8vIHZjbXBlcXVoCisrICAgIGNhc2UgMTA5NDogLy8gdmNtcGVxdWguCisrICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBp LCBMQU5FX1UxNihhLCBpKSA9PSBMQU5FX1UxNihiLCBpKSA/IDB4RkZGRiA6IDApOworKyAgICAg IH0KKysgICAgICBWQ01QX0RPTkUoOCwgMik7IGJyZWFrOworKyAgICBjYXNlIDEzNDogIC8vIHZj bXBlcXV3CisrICAgIGNhc2UgMTE1ODogLy8gdmNtcGVxdXcuCisrICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAorKyAgICAgICAg ICAgICAgICAgICAgIExBTkVfVTMyKGEsIGkpID09IExBTkVfVTMyKGIsIGkpID8gMHhGRkZGRkZG RnUgOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9ET05FKDQsIDQpOyBicmVhazsKKysgICAg Y2FzZSAxOTk6ICAvLyB2Y21wZXF1ZAorKyAgICBjYXNlIDEyMjM6IC8vIHZjbXBlcXVkLgorKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQo ciwgaSwKKysgICAgICAgICAgICAgICAgICAgICBMQU5FX1U2NChhLCBpKSA9PSBMQU5FX1U2NChi LCBpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA/IFVJTlQ2NF9NQVgKKysgICAgICAgICAg ICAgICAgICAgICAgICAgOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9ET05FKDIsIDgpOyBi cmVhazsKKysKKysgICAgLy8gPT09IENvbXBhcmUgZ3JlYXRlci10aGFuIHNpZ25lZCA9PT0KKysg ICAgY2FzZSA3NzQ6ICAvLyB2Y21wZ3RzYgorKyAgICBjYXNlIDE3OTg6IC8vIHZjbXBndHNiLgor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVf VTgociwgaSwgTEFORV9TOChhLCBpKSA+IExBTkVfUzgoYiwgaSkgPyAweEZGIDogMCk7CisrICAg ICAgfQorKyAgICAgIFZDTVBfRE9ORSgxNiwgMSk7IGJyZWFrOworKyAgICBjYXNlIDgzODogIC8v IHZjbXBndHNoCisrICAgIGNhc2UgMTg2MjogLy8gdmNtcGd0c2guCisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1Mx NihhLCBpKSA+IExBTkVfUzE2KGIsIGkpID8gMHhGRkZGIDogMCk7CisrICAgICAgfQorKyAgICAg IFZDTVBfRE9ORSg4LCAyKTsgYnJlYWs7CisrICAgIGNhc2UgOTAyOiAgLy8gdmNtcGd0c3cKKysg ICAgY2FzZSAxOTI2OiAvLyB2Y21wZ3Rzdy4KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCisrICAgICAgICAgICAgICAgICAg ICAgTEFORV9TMzIoYSwgaSkgPiBMQU5FX1MzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7Cisr ICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSg0LCA0KTsgYnJlYWs7CisrICAgIGNhc2UgOTY3OiAg Ly8gdmNtcGd0c2QKKysgICAgY2FzZSAxOTkxOiAvLyB2Y21wZ3RzZC4KKysgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCisrICAg ICAgICAgICAgICAgICAgICAgTEFORV9TNjQoYSwgaSkgPiBMQU5FX1M2NChiLCBpKSA/IFVJTlQ2 NF9NQVggOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9ET05FKDIsIDgpOyBicmVhazsKKysK KysgICAgLy8gPT09IENvbXBhcmUgZ3JlYXRlci10aGFuIHVuc2lnbmVkID09PQorKyAgICBjYXNl IDUxODogIC8vIHZjbXBndHViCisrICAgIGNhc2UgMTU0MjogLy8gdmNtcGd0dWIuCisrICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VOChyLCBp LCBMQU5FX1U4KGEsIGkpID4gTEFORV9VOChiLCBpKSA/IDB4RkYgOiAwKTsKKysgICAgICB9Cisr ICAgICAgVkNNUF9ET05FKDE2LCAxKTsgYnJlYWs7CisrICAgIGNhc2UgNTgyOiAgLy8gdmNtcGd0 dWgKKysgICAgY2FzZSAxNjA2OiAvLyB2Y21wZ3R1aC4KKysgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIExBTkVfVTE2KGEsIGkp ID4gTEFORV9VMTYoYiwgaSkgPyAweEZGRkYgOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9E T05FKDgsIDIpOyBicmVhazsKKysgICAgY2FzZSA2NDY6ICAvLyB2Y21wZ3R1dworKyAgICBjYXNl IDE2NzA6IC8vIHZjbXBndHV3LgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKKysgICAgICAgICAgICAgICAgICAgICBMQU5F X1UzMihhLCBpKSA+IExBTkVfVTMyKGIsIGkpID8gMHhGRkZGRkZGRnUgOiAwKTsKKysgICAgICB9 CisrICAgICAgVkNNUF9ET05FKDQsIDQpOyBicmVhazsKKysgICAgY2FzZSA3MTE6ICAvLyB2Y21w Z3R1ZAorKyAgICBjYXNlIDE3MzU6IC8vIHZjbXBndHVkLgorKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAgICAg ICAgICAgICAgICBMQU5FX1U2NChhLCBpKSA+IExBTkVfVTY0KGIsIGkpID8gVUlOVDY0X01BWCA6 IDApOworKyAgICAgIH0KKysgICAgICBWQ01QX0RPTkUoMiwgOCk7IGJyZWFrOworKworKyAgICAv LyA9PT0gU3BsYXQgZnJvbSBpbW1lZGlhdGUgKDUtYml0IHNpZ25lZCBzcGxhdCBpbnRvIGFsbCBs YW5lcykgPT09CisrICAgIC8vIElTQSBkZWZpbmVzIFVJTSBpbiBCRSBlbGVtZW50IG51bWJlcmlu Zy4gRm9yIExFIHN0b3JhZ2UsIEJFIGVsZW1lbnQgaSA9IExFIGVsZW1lbnQgKE4tMS1pKS4KKysg ICAgY2FzZSA1MjQ6ICAvLyB2c3BsdGI6IFZSVFsqXSA9IFZSQltCRS1ieXRlLVVJTV07IHVpbW0g ZnJvbSBWUkEgZmllbGQgKGJpdHMgMTEuLjE1KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChiLCAxNSAtICh1 aW1tICYgMHhGKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OworKyAgICBjYXNlIDU4ODogIC8vIHZzcGx0aAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYiwgNyAtICh1 aW1tICYgMHg3KSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OworKyAgICBjYXNlIDY1MjogIC8vIHZzcGx0dworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgTEFORV9VMzIoYiwgMyAtICh1 aW1tICYgMHgzKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OworKworKyAgICAvLyA9PT0gU3BsYXQgNS1iaXQgc2lnbmVkIGltbWVkaWF0ZSB0byBhbGwgYnl0 ZSBsYW5lcyA9PT0KKysgICAgY2FzZSA3ODA6IHsgIC8vIHZzcGx0aXNiIFZSVCwgU0lNTTUKKysg ICAgICBpbnQzMl90IHNpbW01ID0gKGludDMyX3QpKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkg Pj4gMTYpICYgMHgxRik7CisrICAgICAgaWYgKHNpbW01ICYgMHgxMCkgc2ltbTUgfD0gfjB4MUY7 CisrICAgICAgdWludDhfdCBiID0gKHVpbnQ4X3QpKGludDhfdClzaW1tNTsKKysgICAgICBtZW1z ZXQociwgYiwgMTYpOworKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0K KysKKysgICAgLy8gPT09IFNwbGF0IDUtYml0IHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIGhhbGZ3 b3JkIGxhbmVzID09PQorKyAgICBjYXNlIDg0NDogeyAgLy8gdnNwbHRpc2ggVlJULCBTSU1NNQor KyAgICAgIC8vIFNJTU01IG9jY3VwaWVzIGJpdHMgMTEuLjE1IG9mIHRoZSBpbnN0cnVjdGlvbiAo VlJBIGZpZWxkKS4gSXQKKysgICAgICAvLyBpcyBzaWduLWV4dGVuZGVkIHRvIDE2IGJpdHMgYW5k IHJlcGxpY2F0ZWQgYWNyb3NzIGFsbCA4IGhhbGZ3b3JkCisrICAgICAgLy8gbGFuZXMgb2YgVlJU LiBSYW5nZTogWy0xNiwgMTVdLgorKyAgICAgIGludDMyX3Qgc2ltbTUgPSAoaW50MzJfdCkoKGlu c3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxNikgJiAweDFGKTsKKysgICAgICBpZiAoc2ltbTUg JiAweDEwKSBzaW1tNSB8PSB+MHgxRjsgIC8vIHNpZ24tZXh0ZW5kIGJpdCA0CisrICAgICAgaW50 MTZfdCBodyA9IChpbnQxNl90KXNpbW01OworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsg aSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KWh3KTsKKysgICAg ICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAv LyA9PT0gU3BsYXQgNS1iaXQgc2lnbmVkIGltbWVkaWF0ZSB0byBhbGwgd29yZCBsYW5lcyA9PT0K KysgICAgY2FzZSA5MDg6IHsgIC8vIHZzcGx0aXN3IFZSVCwgU0lNTTUKKysgICAgICBpbnQzMl90 IHNpbW01ID0gKGludDMyX3QpKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYgMHgx Rik7CisrICAgICAgaWYgKHNpbW01ICYgMHgxMCkgc2ltbTUgfD0gfjB4MUY7CisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAo dWludDMyX3Qpc2ltbTUpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOworKyAgICB9CisrCisrICAgIC8vID09PSBNZXJnZSAoaW50ZXJsZWF2ZSkgPT09CisrICAg IC8vCisrICAgIC8vIFRoZSBJU0EgZGVmaW5lcyB2bXJnaCogLyB2bXJnbCogaW4gQkUgbnVtYmVy aW5nOyB0aGUKKysgICAgLy8gZW1waXJpY2FsIExFIHN0b3JhZ2UgYmVoYXZpb3VyIGlzOgorKyAg ICAvLyAgIHZtcmdoKiBWVCxWQSxWQjogZm9yIGkgaW4gMC4uTi8yLTEsCisrICAgIC8vICAgICBW VC5sYW5lX0xFWzJpXSAgID0gVkIubGFuZV9MRVsoTi8yKSArIGldCisrICAgIC8vICAgICBWVC5s YW5lX0xFWzJpKzFdID0gVkEubGFuZV9MRVsoTi8yKSArIGldCisrICAgIC8vICAgdm1yZ2wqIFZU LFZBLFZCOiBmb3IgaSBpbiAwLi5OLzItMSwKKysgICAgLy8gICAgIFZULmxhbmVfTEVbMmldICAg PSBWQi5sYW5lX0xFW2ldCisrICAgIC8vICAgICBWVC5sYW5lX0xFWzJpKzFdID0gVkEubGFuZV9M RVtpXQorKyAgICAvLyBpLmUuIHRoZSBWQiBvcGVyYW5kIGdvZXMgdG8gdGhlIGV2ZW4gcmVzdWx0 IHBvc2l0aW9ucyAocmV2ZXJzZWQKKysgICAgLy8gZnJvbSB3aGF0IGEgbmHDr3ZlIEJFIHJlYWRp bmcgd291bGQgc3VnZ2VzdCkgYW5kIHRoZSAiaGlnaCIgZm9ybQorKyAgICAvLyBzZWxlY3RzIHRo ZSB1cHBlci1oYWxmIG9mIExFIHN0b3JhZ2UuCisrICAgIC8vCisrICAgIC8vIFByZXZpb3VzIGlt cGxlbWVudGF0aW9uIGhhZCBib3RoIHRoZSBvcGVyYW5kIG9yZGVyIHN3YXBwZWQgQU5ECisrICAg IC8vIHRoZSBoaWdoL2xvdyBoYWx2ZXMgc3dhcHBlZCAoY29uc2lzdGVudCB3aXRoIGVhY2ggb3Ro ZXIsIHNvCisrICAgIC8vIEpJVC1vbmx5LXZpc2libGUgb3BzIHRoYXQgcm91bmQtdHJpcHBlZCB0 aHJvdWdoIHZtcmcqIGhhcHBlbmVkCisrICAgIC8vIHRvIHByb2R1Y2UgdGhlIHJpZ2h0IGFuc3dl ciwgYnV0IHdhc20tdmlzaWJsZSBleHRtdWwgZXhwb3NlZAorKyAgICAvLyB0aGUgYnVnKS4KKysg ICAgY2FzZSAxMjogICAvLyB2bXJnaGIKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkr KykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgMiAqIGksIExBTkVfVTgoYiwgOCArIGkpKTsK KysgICAgICAgIFNFVF9MQU5FX1U4KHIsIDIgKiBpICsgMSwgTEFORV9VOChhLCA4ICsgaSkpOwor KyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDc2 OiAgIC8vIHZtcmdoaAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAg ICAgICBTRVRfTEFORV9VMTYociwgMiAqIGksIExBTkVfVTE2KGIsIDQgKyBpKSk7CisrICAgICAg ICBTRVRfTEFORV9VMTYociwgMiAqIGkgKyAxLCBMQU5FX1UxNihhLCA0ICsgaSkpOworKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDE0MDogIC8v IHZtcmdodworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBT RVRfTEFORV9VMzIociwgMiAqIGksIExBTkVfVTMyKGIsIDIgKyBpKSk7CisrICAgICAgICBTRVRf TEFORV9VMzIociwgMiAqIGkgKyAxLCBMQU5FX1UzMihhLCAyICsgaSkpOworKyAgICAgIH0KKysg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDI2ODogIC8vIHZtcmds YgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFO RV9VOChyLCAyICogaSwgTEFORV9VOChiLCBpKSk7CisrICAgICAgICBTRVRfTEFORV9VOChyLCAy ICogaSArIDEsIExBTkVfVTgoYSwgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOworKyAgICBjYXNlIDMzMjogIC8vIHZtcmdsaAorKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgMiAqIGksIExB TkVfVTE2KGIsIGkpKTsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCAyICogaSArIDEsIExBTkVf VTE2KGEsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK KysgICAgY2FzZSAzOTY6ICAvLyB2bXJnbHcKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIDIgKiBpLCBMQU5FX1UzMihiLCBpKSk7 CisrICAgICAgICBTRVRfTEFORV9VMzIociwgMiAqIGkgKyAxLCBMQU5FX1UzMihhLCBpKSk7Cisr ICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09 PSBQZXItbGFuZSBzaGlmdCBsZWZ0IChjb3VudCBmcm9tIFZSQiwgbG93IE4gYml0cyBwZXIgZWxl bWVudCkgPT09CisrICAgIGNhc2UgMjYwOiAgLy8gdnNsYgorKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBp KSA8PCAoTEFORV9VOChiLCBpKSAmIDcpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAzMjQ6ICAvLyB2c2xoCisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1Ux NihhLCBpKSA8PCAoTEFORV9VMTYoYiwgaSkgJiAxNSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDM4ODogIC8vIHZzbHcKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGks IExBTkVfVTMyKGEsIGkpIDw8IChMQU5FX1UzMihiLCBpKSAmIDMxKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMTQ3NjogLy8gdnNsZAor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9V NjQociwgaSwgTEFORV9VNjQoYSwgaSkgPDwgKExBTkVfVTY0KGIsIGkpICYgNjMpKTsKKysgICAg ICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IFBl ci1sYW5lIHNoaWZ0IHJpZ2h0IHVuc2lnbmVkID09PQorKyAgICBjYXNlIDUxNjogIC8vIHZzcmIK KysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5F X1U4KHIsIGksIExBTkVfVTgoYSwgaSkgPj4gKExBTkVfVTgoYiwgaSkgJiA3KSk7CisrICAgICAg fQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNTgwOiAgLy8g dnNyaAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRf TEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkgPj4gKExBTkVfVTE2KGIsIGkpICYgMTUpKTsK KysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA2 NDQ6ICAvLyB2c3J3CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAg ICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1UzMihhLCBpKSA+PiAoTEFORV9VMzIoYiwgaSkg JiAzMSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAg ICBjYXNlIDE3MzI6IC8vIHZzcmQKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg eworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIExBTkVfVTY0KGEsIGkpID4+IChMQU5FX1U2 NChiLCBpKSAmIDYzKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJl YWs7CisrCisrICAgIC8vID09PSBQZXItbGFuZSBzaGlmdCByaWdodCBhbGdlYnJhaWMgKHNpZ25l ZCkgPT09CisrICAgIGNhc2UgNzcyOiAgLy8gdnNyYWIKKysgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksCisrICAgICAgICAgICAg ICAgICAgICAodWludDhfdCkoTEFORV9TOChhLCBpKSA+PiAoTEFORV9VOChiLCBpKSAmIDcpKSk7 CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2Ug ODM2OiAgLy8gdnNyYWgKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAg ICAgICAgU0VUX0xBTkVfVTE2KHIsIGksCisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90 KShMQU5FX1MxNihhLCBpKSA+PiAoTEFORV9VMTYoYiwgaSkgJiAxNSkpKTsKKysgICAgICB9Cisr ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA5MDA6ICAvLyB2c3Jh dworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFO RV9VMzIociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpKExBTkVfUzMyKGEs IGkpID4+IChMQU5FX1UzMihiLCBpKSAmIDMxKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDk2NDogIC8vIHZzcmFkCisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLAor KyAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCkoTEFORV9TNjQoYSwgaSkgPj4gKExBTkVf VTY0KGIsIGkpICYgNjMpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7CisrCisrICAgIC8vID09PSBQT1dFUjkgcGVyLWxhbmUgaW50ZWdlciBuZWdhdGUgKHN1 Ym9wIGluIFZSQSBmaWVsZCkgPT09CisrICAgIC8vIFBQQ192bmVndyA9IDB4MTAwNjA2MDIg4oaS IFhPPTB4NjAyPTE1MzgsIFZSQT02CisrICAgIC8vIFBQQ192bmVnZCA9IDB4MTAwNzA2MDIg4oaS IFhPPTB4NjAyPTE1MzgsIFZSQT03CisrICAgIGNhc2UgMTUzODoKKysgICAgICBpZiAodnJhID09 IDYpIHsgIC8vIHZuZWd3CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewor KyAgICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90KSgtTEFORV9TMzIoYiwgaSkp KTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgaWYgKHZyYSA9PSA3KSB7ICAvLyB2bmVnZAor KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksICh1aW50NjRfdCkoLUxBTkVfUzY0KGIsIGkpKSk7CisrICAgICAgICB9Cisr ICAgICAgfSBlbHNlIHsKKysgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVW TVggWE89MTUzODogdW5rbm93biBzdWJvcCAldSIsIHZyYSk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBQT1dFUjEwIHZleHRyYWN0 e2IsaCx3LGR9bSAoWE89MTYwMj0weDY0MikgPT09CisrICAgIC8vIFJUIChHUFIpIGdldHMgdGhl IHdhc20tc3BlYyBiaXRtYXNrIGluIGxvdyAxNi84LzQvMiBiaXRzLiBVSU0gYXQKKysgICAgLy8g Yml0cyAxMS4uMTUgKD0gc2ltIGB2cmFgKSBzZWxlY3RzIGxhbmUgd2lkdGg6IDg9Ynl0ZSwgOT1o YWxmd29yZCwKKysgICAgLy8gMTA9d29yZCwgMTE9ZG91Ymxld29yZC4KKysgICAgY2FzZSAxNjAy OiB7CisrICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKysgICAgICBzd2l0Y2ggKHZyYSkgewor KyAgICAgICAgY2FzZSA4OiAgLy8gdmV4dHJhY3RibTogMTYgYnl0ZSBsYW5lcworKyAgICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgICAgICBpZiAoYltpXSAm IDB4ODApIHJlc3VsdCB8PSAoMVVMTCA8PCBpKTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBi cmVhazsKKysgICAgICAgIGNhc2UgOTogIC8vIHZleHRyYWN0aG06IDggaGFsZndvcmQgbGFuZXM7 IE1TQiBsaXZlcyBhdCBieXRlIDJpKzEKKysgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4 OyBpKyspIHsKKysgICAgICAgICAgICBpZiAoYlsyICogaSArIDFdICYgMHg4MCkgcmVzdWx0IHw9 ICgxVUxMIDw8IGkpOworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAg Y2FzZSAxMDogIC8vIHZleHRyYWN0d206IDQgd29yZCBsYW5lczsgTVNCIGF0IGJ5dGUgNGkrMwor KyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgICAgIGlm IChiWzQgKiBpICsgM10gJiAweDgwKSByZXN1bHQgfD0gKDFVTEwgPDwgaSk7CisrICAgICAgICAg IH0KKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIDExOiAgLy8gdmV4dHJhY3RkbTog MiBkd29yZCBsYW5lczsgTVNCIGF0IGJ5dGUgOGkrNworKyAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgICAgIGlmIChiWzggKiBpICsgN10gJiAweDgwKSBy ZXN1bHQgfD0gKDFVTEwgPDwgaSk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7Cisr ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVj b2RlVk1YIFhPPTE2MDI6IHVua25vd24gVUlNICV1IiwgdnJhKTsKKysgICAgICB9CisrICAgICAg Ly8gdnJ0IGlzIHRoZSBHUFIgdGFyZ2V0IChSVCBmaWVsZCBhdCBiaXRzIDYuLjEwKS4KKysgICAg ICBzZXRSZWdpc3RlcihpbnQodnJ0KSwgaW50NjRfdChyZXN1bHQpKTsKKysgICAgICBnb3RvIHZt eF9kb25lOyAgLy8gU2tpcCB0aGUgdHJhaWxpbmcgc2V0VlJCeXRlcyB1c2VkIGJ5IFZSLXRhcmdl dGluZyBvcHMuCisrICAgIH0KKysKKysgICAgLy8gPT09IFBPV0VSOSB2aW5zZXJ0YiAoWE89Nzgx KSAvIHZpbnNlcnRoIChYTz04NDUpID09PQorKyAgICAvLyBJbnNlcnQgYnl0ZS9oYWxmd29yZCBm cm9tIGEgVlIgKE5PVCBhIEdQUikgYXQgYW4gaW1tZWRpYXRlIGJ5dGUKKysgICAgLy8gcG9zaXRp b24gVUlNIChCRSkuCisrICAgIC8vICAgdmluc2VydGI6IFZSVC5ieXRlW1VJTV0gICAoQkUpIOKG kCBWUkIuYnl0ZVs3XSAoQkUpCisrICAgIC8vICAgdmluc2VydGg6IFZSVC5ieXRlW1VJTV0gICAo QkUpIOKGkCBWUkIuYnl0ZVs2XSAoQkUpCisrICAgIC8vICAgICAgICAgICAgIFZSVC5ieXRlW1VJ TSsxXSAoQkUpIOKGkCBWUkIuYnl0ZVs3XSAoQkUpCisrICAgIC8vIEJFIGJ5dGUgaSDihpQgTEUg Ynl0ZSAoMTUtaSkuIFNvIFZSQi5ieXRlWzZdIChCRSkgPSBMRSBieXRlIDkgb2YKKysgICAgLy8g VlJCLCBWUkIuYnl0ZVs3XSAoQkUpID0gTEUgYnl0ZSA4LiAoQnl0ZS1wYWlyIG9yZGVyIG1hdHRl cnMuKQorKyAgICBjYXNlIDc4MTogICAgLy8gdmluc2VydGIKKysgICAgY2FzZSA4NDU6IHsgIC8v IHZpbnNlcnRoCisrICAgICAgZ2V0VlJCeXRlcyh2cnQsIHIpOyAgLy8gc3RhcnQgZnJvbSBjdXJy ZW50IFZSVAorKyAgICAgIGlmICh4byA9PSA4NDUpIHsKKysgICAgICAgIC8vIHZpbnNlcnRoOiBj b3B5IDItYnl0ZSBoYWxmd29yZCAoQkUgYnl0ZXMgNi4uNyBvZiBWUkIpLgorKyAgICAgICAgclsx NSAtIHVpbW1dICAgICA9IGJbOV07ICAvLyBCRSBieXRlIFVJTSAgIOKGkCBWUkIgQkUgYnl0ZSA2 CisrICAgICAgICByWzE0IC0gdWltbV0gICAgID0gYls4XTsgIC8vIEJFIGJ5dGUgVUlNKzEg4oaQ IFZSQiBCRSBieXRlIDcKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgLy8gdmluc2VydGI6IGNv cHkgYSBzaW5nbGUgYnl0ZSAoQkUgYnl0ZSA3IG9mIFZSQikuCisrICAgICAgICByWzE1IC0gdWlt bV0gICAgID0gYls4XTsgIC8vIEJFIGJ5dGUgVUlNICAg4oaQIFZSQiBCRSBieXRlIDcKKysgICAg ICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAv LyA9PT0gUE9XRVI5IHZleHRyYWN0dWIgKFhPPTUyNSkgLyB2ZXh0cmFjdHVoIChYTz01ODkpID09 PQorKyAgICAvLyBFeHRyYWN0IG9uZSBieXRlL2hhbGZ3b3JkIGZyb20gVlJCIGF0IGltbWVkaWF0 ZSBCRSBwb3NpdGlvbiBVSU0KKysgICAgLy8gYW5kIHBsYWNlIGl0IGF0IEJFIGJ5dGUgNyBvZiBW UlQsIHdpdGggYWxsIG90aGVyIGJ5dGVzIG9mIFZSVAorKyAgICAvLyB6ZXJvZWQuIENvbXBhbmlv biB0byB2aW5zZXJ0Yi9oOyBjaG9vc2VzIGFuIGltbWVkaWF0ZSBCRSBwb3NpdGlvbgorKyAgICAv LyBhbmQgbGFuZHMgdGhlIHJlc3VsdCBhdCB0aGUgbG93IGJ5dGUgb2YgVlJUICg9IGxvdyBieXRl IG9mIG1mdnNyZCkuCisrICAgIC8vICAgdmV4dHJhY3R1YjogVlJULmJ5dGVbN10gKEJFKSDihpAg VlJCLmJ5dGVbVUlNXSAoQkUpLCByZXN0ID0gMAorKyAgICAvLyAgIHZleHRyYWN0dWg6IFZSVC5i eXRlWzZdIChCRSkg4oaQIFZSQi5ieXRlW1VJTV0gICAoQkUpCisrICAgIC8vICAgICAgICAgICAg ICAgVlJULmJ5dGVbN10gKEJFKSDihpAgVlJCLmJ5dGVbVUlNKzFdIChCRSksIHJlc3QgPSAwCisr ICAgIGNhc2UgNTI1OiAgICAvLyB2ZXh0cmFjdHViCisrICAgIGNhc2UgNTg5OiB7ICAvLyB2ZXh0 cmFjdHVoCisrICAgICAgbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7CisrICAgICAgaWYgKHhvID09 IDU4OSkgeworKyAgICAgICAgcls5XSA9IGJbMTUgLSB1aW1tXTsgIC8vIFZSVCBCRSBieXRlIDYg 4oaQIFZSQiBCRSBieXRlIFVJTQorKyAgICAgICAgcls4XSA9IGJbMTQgLSB1aW1tXTsgIC8vIFZS VCBCRSBieXRlIDcg4oaQIFZSQiBCRSBieXRlIFVJTSsxCisrICAgICAgfSBlbHNlIHsKKysgICAg ICAgIHJbOF0gPSBiWzE1IC0gdWltbV07ICAvLyBWUlQgQkUgYnl0ZSA3IOKGkCBWUkIgQkUgYnl0 ZSBVSU0KKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAg fQorKworKyAgICAvLyA9PT0gUE9XRVIxMCB2aW5zYnJ4IChYTz03ODMpIC8gdmluc2hyeCAoWE89 ODQ3KSA9PT0KKysgICAgLy8gUmlnaHQtaW5kZXhlZCAoTEUtbmF0dXJhbCkgYnl0ZS9oYWxmd29y ZCBpbnNlcnQgZnJvbSBHUFIuIFJBJ3MKKysgICAgLy8gbG93IDQgYml0cyBzdXBwbHkgdGhlIGJ5 dGUgcG9zaXRpb24gKG1vZCAxNik7IGZvciB2aW5zaHJ4IHRoZQorKyAgICAvLyBwb3NpdGlvbiBp cyBhbHNvIG1hc2tlZCB0byBldmVuICgmIDB4RSkgc28gdGhlIGhhbGZ3b3JkIGlzCisrICAgIC8v IDItYnl0ZSBhbGlnbmVkLiBSQidzIGxvdyA4IC8gMTYgYml0cyBhcmUgaW5zZXJ0ZWQ7IG90aGVy IGJ5dGVzCisrICAgIC8vIG9mIFZSVCBhcmUgdW5jaGFuZ2VkLiBSQSBhbmQgUkIgYXJlIEdQUnMg KE5PVCBWUnMpIOKAlCBzaW0ncworKyAgICAvLyBwcmUtZmV0Y2hlZCBgYWAgYW5kIGBiYCBmcm9t IGdldFZSQnl0ZXMgYXJlIHVudXNlZCBoZXJlLgorKyAgICBjYXNlIDc4MzogICAgLy8gdmluc2Jy eAorKyAgICBjYXNlIDg0NzogeyAgLy8gdmluc2hyeAorKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9 IFU2NChnZXRSZWdpc3RlcihpbnQodnJhKSkpOworKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2 NChnZXRSZWdpc3RlcihpbnQodnJiKSkpOworKyAgICAgIGdldFZSQnl0ZXModnJ0LCByKTsgIC8v IHN0YXJ0IGZyb20gY3VycmVudCBWUlQKKysgICAgICBjb25zdCBib29sIGlzSGFsZiA9ICh4byA9 PSA4NDcpOworKyAgICAgIGNvbnN0IHVpbnQzMl90IHBvcyA9IGlzSGFsZiA/IHVpbnQzMl90KHJh X3ZhbCAmIDB4RVVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1aW50 MzJfdChyYV92YWwgJiAweEZVTEwpOworKyAgICAgIHJbcG9zXSA9ICh1aW50OF90KShyYl92YWwg JiAweEZGVUxMKTsKKysgICAgICBpZiAoaXNIYWxmKSB7CisrICAgICAgICByW3BvcyArIDFdID0g KHVpbnQ4X3QpKChyYl92YWwgPj4gOCkgJiAweEZGVUxMKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gUE9XRVIxMCB2 aW5zdyAoWE89MjA3KSAvIHZpbnNkIChYTz00NjMpID09PQorKyAgICAvLyBWUlRbVUlNKjg6VUlN KjgrTi0xXSAoQkUgYml0cykg4oaQIFJCIGxvdyBOIGJpdHMsIHdoZXJlIE4gPSAzMiBvciA2NC4K KysgICAgLy8gUkIgaXMgYSBHUFIgKHRoZSBgdnJiYCBmaWVsZCBhdCBzaW0gYml0cyAxNS4uMTEp LiBVSU0gaXMgYXQgc2ltCisrICAgIC8vIGJpdHMgMjAuLjE2ICg9IHRoZSBgdWltbWAgLyBgdnJh YCBkZWNvZGUpLiBPdGhlciBieXRlcyBvZiBWUlQgYXJlCisrICAgIC8vIHVuY2hhbmdlZCwgc28g d2UgcmVhZCBWUlQgZmlyc3QgdGhlbiBwYXRjaCBVSU0uLlVJTSsoTi84LTEpLgorKyAgICBjYXNl IDIwNzogICAgLy8gdmluc3cKKysgICAgY2FzZSA0NjM6IHsgIC8vIHZpbnNkCisrICAgICAgdWlu dDY0X3QgcmJfdmFsID0gVTY0KGdldFJlZ2lzdGVyKGludCh2cmIpKSk7CisrICAgICAgZ2V0VlJC eXRlcyh2cnQsIHIpOyAgLy8gc3RhcnQgZnJvbSBjdXJyZW50IFZSVAorKyAgICAgIGNvbnN0IGlu dCB3aWR0aCA9ICh4byA9PSA0NjMpID8gOCA6IDQ7ICAvLyBieXRlcworKyAgICAgIC8vIEJFIGJ5 dGUgVUlNK2kgb2YgVlJUID0gTEUgYnl0ZSAoMTUgLSBVSU0gLSBpKS4KKysgICAgICAvLyBGb3Ig dmluc2QsIFJCLmR3b3JkWzBdIChCRSkgPSBiaXRzIDU2Li42MyBvZiByYl92YWwgKGhvc3QgTFNC IGVuZAorKyAgICAgIC8vIG9mIHRoZSBHUFIg4oCUIHJlY2FsbCBVNjQoKSBwdXRzIHRoZSBjYW5v bmljYWwgNjQtYml0IHZhbHVlIGluIGEKKysgICAgICAvLyBob3N0IHVpbnQ2NF90IHdpdGggYml0 IDYzID0gTVNCKS4KKysgICAgICAvLyBGb3Igdmluc3csIHNvdXJjZSBpcyBSQlszMjo2M10gPSBs b3cgMzIgYml0cyBvZiByYl92YWwuCisrICAgICAgdWludDY0X3Qgc3JjID0gKHdpZHRoID09IDgp ID8gcmJfdmFsIDogKHJiX3ZhbCAmIDB4RkZGRkZGRkZVTEwpOworKyAgICAgIGNvbnN0IGludCBz cmNNc2JTaGlmdCA9ICh3aWR0aCAqIDgpIC0gODsgIC8vIDU2IG9yIDI0CisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisrICAgICAgICByWzE1IC0gdWltbSAtIGldID0g KHVpbnQ4X3QpKHNyYyA+PiAoc3JjTXNiU2hpZnQgLSA4ICogaSkpOworKyAgICAgIH0KKysgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrCisrICAgIC8vID09PSBQT1dF UjgrIHZicGVybXEgKFhPPTEzNTY9MHg1NEMpOiBwZXItYnl0ZSBiaXQgcGVybXV0ZSA9PT0KKysg ICAgLy8gRm9yIGVhY2ggaSBpbiAwLi4xNSwgdGFrZSBWUkIgQkUtYnl0ZSBpICg9IHNpbSBiWzE1 LWldKTsgaWYgaXRzCisrICAgIC8vIGhpZ2ggYml0IGlzIHNldCwgcGVybVtpXT0wOyBlbHNlIHBl cm1baV0gPSBiaXQgYXQgQkUgcG9zaXRpb24KKysgICAgLy8gKGxvdyA3IGJpdHMpIG9mIFZSQS4g SVNBIHNheXMgcGVybVswLi4xNV0gZ28gaW50byBWUlQuZHdbMV0gbG93CisrICAgIC8vIDE2IGJp dHMsIGJ1dCBvbiByZWFsIExFIHNpbGljb24gdGhlIGJpdG1hcCBpcyBvYnNlcnZhYmxlIGluIGR3 WzBdCisrICAgIC8vIGxvdyAxNiBiaXRzIOKAlCBpLmUuLCByZWNvdmVyYWJsZSB2aWEgbWZ2c3Jk LiBNYXRjaCB0aGF0IG9ic2VydmFibGUKKysgICAgLy8gYmVoYXZpb3VyOiB3cml0ZSB0aGUgYml0 bWFwIGludG8gc2ltIGJ5dGVzWzguLjldICh3aGVyZSBtZnZzcmQKKysgICAgLy8gcmVhZHMgZHdb MF0gZnJvbSksIHplcm8gdGhlIHJlc3QuCisrICAgIGNhc2UgMTM1NjogeworKyAgICAgIHVpbnQ4 X3QgcGVybVsxNl07CisrICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAxNjsgaysrKSB7CisrICAg ICAgICB1aW50OF90IGN0bCA9IGJbMTUgLSBrXTsKKysgICAgICAgIGlmIChjdGwgJiAweDgwKSB7 CisrICAgICAgICAgIHBlcm1ba10gPSAwOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAg aW50IHAgPSBjdGwgJiAweDdGOworKyAgICAgICAgICBpbnQgbGVfaWR4ID0gMTUgLSAocCAvIDgp OworKyAgICAgICAgICBpbnQgYml0X2luX2J5dGUgPSA3IC0gKHAgJSA4KTsKKysgICAgICAgICAg cGVybVtrXSA9IChhW2xlX2lkeF0gPj4gYml0X2luX2J5dGUpICYgMTsKKysgICAgICAgIH0KKysg ICAgICB9CisrICAgICAgdWludDhfdCBsbyA9IDAsIGhpID0gMDsKKysgICAgICBmb3IgKGludCBr ID0gMDsgayA8IDg7IGsrKykgaGkgPSAoaGkgPDwgMSkgfCBwZXJtW2tdOworKyAgICAgIGZvciAo aW50IGsgPSA4OyBrIDwgMTY7IGsrKykgbG8gPSAobG8gPDwgMSkgfCBwZXJtW2tdOworKyAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgcltpXSA9IDA7CisrICAgICAgcls4XSA9IGxv OworKyAgICAgIHJbOV0gPSBoaTsKKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwor KyAgICB9CisrCisrICAgIC8vIFZBLWZvcm0gb3BzIHZtbGFkZHVobSAoWE89MzQpLCB2c2VsIChY Tz00MiksIHZwZXJtIChYTz00MykgYXJlCisrICAgIC8vIHBlZWxlZCBvZmYgaW4gdGhlIHByZS1k aXNwYXRjaCBhYm92ZSAoc2VlICJWQS1mb3JtIHByZS1kaXNwYXRjaCIKKysgICAgLy8gY29tbWVu dCBuZWFyIHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiksIHNpbmNlIHRoZSAxMS1iaXQgWE8KKysg ICAgLy8gbWFzayBjb25mbGF0ZXMgVlJDIGludG8gdGhlIGNhc2UgbGFiZWwuCisrCisrICAgIC8v ID09PSBVbnBhY2sgaGlnaCBzaWduZWQgKEJFLW51bWJlcmluZyA9IExFIGluZGljZXMgOC4uMTUp ID09PQorKyAgICAvLyB2dXBraHNiOiBWUlRbaV0gPSBzaWduX2V4dGVuZF90b18xNihWUkFbaSsw Li43XSkuIE9uIExFIHN0b3JhZ2Ugd2l0aAorKyAgICAvLyBCRS1uYW1lZCAiaGlnaCIgYmVpbmcg dGhlIGxvdy1pbmRleGVkIGJ5dGVzLCB2dXBraHNiIHNpZ24tZXh0ZW5kcyB0aGUKKysgICAgLy8g bG93IDggYnl0ZXMgb2YgVlJBIGludG8gOCBoYWxmd29yZHMuIFBQQzY0TEUgd2FzbSBjYWxscyB0 aGVzZSB0aGUKKysgICAgLy8gImhpZ2giIGxhbmVzIHBlciBQUEMgY29udmVudGlvbjsgdGhlIEpJ VCBjb21wZW5zYXRlcyBpbnRlcm5hbGx5IHZpYQorKyAgICAvLyB0aGUgdnVwa2xzYi92dXBraHNi IHN3YXAgZG9jdW1lbnRlZCBpbiBNYWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwuaC4KKysgICAgY2Fz ZSA1MjY6ICAvLyB2dXBraHNiIChoaWdoIHNpZ25lZCBieXRlIOKGkiBoYWxmd29yZCkKKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIs IGksICh1aW50MTZfdCkoaW50MTZfdClMQU5FX1M4KGIsIDggKyBpKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNTkwOiAgLy8gdnVwa2hz aCAoaGlnaCBzaWduZWQgaGFsZndvcmQg4oaSIHdvcmQpCisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3QpKGlu dDMyX3QpTEFORV9TMTYoYiwgNCArIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxNjE0OiAvLyB2dXBraHN3IChoaWdoIHNpZ25lZCB3 b3JkIOKGkiBkd29yZCkgUE9XRVI4KworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgKHVpbnQ2NF90KShpbnQ2NF90KUxBTkVf UzMyKGIsIDIgKyBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJl YWs7CisrICAgIGNhc2UgNjU0OiAgLy8gdnVwa2xzYiAobG93IHNpZ25lZCBieXRlIOKGkiBoYWxm d29yZCkg4oCUIFBQQyBMRTogdGFrZXMgaGlnaCBsYW5lcworKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KShp bnQxNl90KUxBTkVfUzgoYiwgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwg cik7IGJyZWFrOworKyAgICBjYXNlIDcxODogIC8vIHZ1cGtsc2ggKGxvdyBzaWduZWQgaGFsZndv cmQg4oaSIHdvcmQpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAg ICAgIFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3QpKGludDMyX3QpTEFORV9TMTYoYiwgaSkp OworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNl IDE3NDI6IC8vIHZ1cGtsc3cgKGxvdyBzaWduZWQgd29yZCDihpIgZHdvcmQpCisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCAo dWludDY0X3QpKGludDY0X3QpTEFORV9TMzIoYiwgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0gUGFjayAoc2F0dXJhdGUgb3Ig bW9kdWxvKSA9PT0KKysgICAgLy8KKysgICAgLy8gdnBrKiBkZWZpbml0aW9ucyBhcmUgQkUtc3Bl Y2lmaWVkOgorKyAgICAvLyBWVC5ieXRlWzAuLjddID0gc2F0dXJhdGUoVkEuaGFsZndvcmRbMC4u N10pLCBWVC5ieXRlWzguLjE1XSA9CisrICAgIC8vIHNhdHVyYXRlKFZCLmhhbGZ3b3JkWzAuLjdd KSAoQkUtbnVtYmVyZWQgdGhyb3VnaG91dCkuIE9uCisrICAgIC8vIFBQQzY0TEUgcmVnaXN0ZXIg c3RvcmFnZSB0aGF0IGludmVydHMgdG86IExFIGJ5dGVzIDAtNyA9IFZCJ3MKKysgICAgLy8gc2F0 dXJhdGVkIGhhbGZ3b3JkcywgTEUgYnl0ZXMgOC0xNSA9IFZBJ3MuCisrICAgIC8vCisrICAgIC8v ICAgdnBrc2h1cyA9IFhPIDI3MCAgIChzMTYg4oaSIHU4IHNhdCkKKysgICAgLy8gICB2cGtzaHNz ID0gWE8gMzk4ICAgKHMxNiDihpIgczggc2F0KQorKyAgICAvLyAgIHZwa3N3dXMgPSBYTyAzMzQg ICAoczMyIOKGkiB1MTYgc2F0KQorKyAgICAvLyAgIHZwa3N3c3MgPSBYTyA0NjIgICAoczMyIOKG kiBzMTYgc2F0KQorKyAgICAvLyBUaGUgc2ltIHByZXZpb3VzbHkgaGFkIHRocmVlIG9mIHRoZXNl IGZvdXIgbGFiZWxzIHJvdGF0ZWQKKysgICAgLy8gKDI3MD12cGtzaHNzLCAzMzQ9dnBrc2h1cywg Mzk4PXZwa3N3dXMpIHNvIGV2ZXJ5IGk4eDE2L2kxNng4CisrICAgIC8vIG5hcnJvd18qIGNhbGwg c2lsZW50bHkgdXNlZCB0aGUgd3Jvbmcgc2F0dXJhdGlvbiBraW5kIG9yCisrICAgIC8vIGxhbmUg d2lkdGgg4oCUIHZwa3Noc3Mgd2FzIGNvbXBsZXRlbHkgYWJzZW50LgorKyAgICBjYXNlIDM5ODog eyAvLyB2cGtzaHNzIChzaWduZWQgaGFsZndvcmQg4oaSIHNpZ25lZCBieXRlKQorKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBpbnQgdiA9IExBTkVfUzE2KGIs IGkpOworKyAgICAgICAgaWYgKHYgPiBJTlQ4X01BWCkgdiA9IElOVDhfTUFYOworKyAgICAgICAg aWYgKHYgPCBJTlQ4X01JTikgdiA9IElOVDhfTUlOOworKyAgICAgICAgU0VUX0xBTkVfVTgociwg aSwgKHVpbnQ4X3QpKGludDhfdCl2KTsKKysgICAgICB9CisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA4OyBpKyspIHsKKysgICAgICAgIGludCB2ID0gTEFORV9TMTYoYSwgaSk7CisrICAgICAg ICBpZiAodiA+IElOVDhfTUFYKSB2ID0gSU5UOF9NQVg7CisrICAgICAgICBpZiAodiA8IElOVDhf TUlOKSB2ID0gSU5UOF9NSU47CisrICAgICAgICBTRVRfTEFORV9VOChyLCA4ICsgaSwgKHVpbnQ4 X3QpKGludDhfdCl2KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKKysgICAgfQorKyAgICBjYXNlIDQ2MjogeyAvLyB2cGtzd3NzIChzaWduZWQgd29yZCDihpIg c2lnbmVkIGhhbGZ3b3JkKQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Cisr ICAgICAgICBpbnQ2NF90IHYgPSBMQU5FX1MzMihiLCBpKTsKKysgICAgICAgIGlmICh2ID4gSU5U MTZfTUFYKSB2ID0gSU5UMTZfTUFYOworKyAgICAgICAgaWYgKHYgPCBJTlQxNl9NSU4pIHYgPSBJ TlQxNl9NSU47CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KShpbnQxNl90 KXYpOworKyAgICAgIH0KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAg ICAgICAgaW50NjRfdCB2ID0gTEFORV9TMzIoYSwgaSk7CisrICAgICAgICBpZiAodiA+IElOVDE2 X01BWCkgdiA9IElOVDE2X01BWDsKKysgICAgICAgIGlmICh2IDwgSU5UMTZfTUlOKSB2ID0gSU5U MTZfTUlOOworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIDQgKyBpLCAodWludDE2X3QpKGludDE2 X3Qpdik7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSAyNzA6IHsgLy8gdnBrc2h1cyAoc2lnbmVkIGhhbGZ3b3JkIOKGkiB1bnNp Z25lZCBieXRlLCBzYXQpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysg ICAgICAgIGludCB2ID0gTEFORV9TMTYoYiwgaSk7CisrICAgICAgICBpZiAodiA+IFVJTlQ4X01B WCkgdiA9IFVJTlQ4X01BWDsKKysgICAgICAgIGlmICh2IDwgMCkgdiA9IDA7CisrICAgICAgICBT RVRfTEFORV9VOChyLCBpLCAodWludDhfdCl2KTsKKysgICAgICB9CisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIGludCB2ID0gTEFORV9TMTYoYSwgaSk7Cisr ICAgICAgICBpZiAodiA+IFVJTlQ4X01BWCkgdiA9IFVJTlQ4X01BWDsKKysgICAgICAgIGlmICh2 IDwgMCkgdiA9IDA7CisrICAgICAgICBTRVRfTEFORV9VOChyLCA4ICsgaSwgKHVpbnQ4X3Qpdik7 CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSAzMzQ6IHsgLy8gdnBrc3d1cyAoc2lnbmVkIHdvcmQg4oaSIHVuc2lnbmVkIGhhbGZ3 b3JkLCBzYXQpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAg IGludDY0X3QgdiA9IExBTkVfUzMyKGIsIGkpOworKyAgICAgICAgaWYgKHYgPiBVSU5UMTZfTUFY KSB2ID0gVUlOVDE2X01BWDsKKysgICAgICAgIGlmICh2IDwgMCkgdiA9IDA7CisrICAgICAgICBT RVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KXYpOworKyAgICAgIH0KKysgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgaW50NjRfdCB2ID0gTEFORV9TMzIoYSwg aSk7CisrICAgICAgICBpZiAodiA+IFVJTlQxNl9NQVgpIHYgPSBVSU5UMTZfTUFYOworKyAgICAg ICAgaWYgKHYgPCAwKSB2ID0gMDsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCA0ICsgaSwgKHVp bnQxNl90KXYpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwor KyAgICB9CisrCisrICAgIC8vID09PSBQT1dFUjkgY29tcGFyZSBub3QtZXF1YWwgKHZjbXBuZXti LGgsd30pIOKAlCBSYz0wIGFuZCBSYz0xID09PQorKyAgICBjYXNlIDc6ICAgIC8vIHZjbXBuZWIK KysgICAgY2FzZSAxMDMxOiAvLyB2Y21wbmViLgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBpKSAhPSBM QU5FX1U4KGIsIGkpID8gMHhGRiA6IDApOworKyAgICAgIH0KKysgICAgICBWQ01QX0RPTkUoMTYs IDEpOyBicmVhazsKKysgICAgY2FzZSA3MTogICAvLyB2Y21wbmVoCisrICAgIGNhc2UgMTA5NTog Ly8gdmNtcG5laC4KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAg ICAgU0VUX0xBTkVfVTE2KHIsIGksIExBTkVfVTE2KGEsIGkpICE9IExBTkVfVTE2KGIsIGkpID8g MHhGRkZGIDogMCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSg4LCAyKTsgYnJlYWs7Cisr ICAgIGNhc2UgMTM1OiAgLy8gdmNtcG5ldworKyAgICBjYXNlIDExNTk6IC8vIHZjbXBuZXcuCisr ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1Uz MihyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgIExBTkVfVTMyKGEsIGkpICE9IExBTkVfVTMy KGIsIGkpID8gMHhGRkZGRkZGRnUgOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9ET05FKDQs IDQpOyBicmVhazsKKysgICAgI3VuZGVmIFZDTVBfRE9ORQorKworKyAgICAvLyA9PT0gUG9wdWxh dGlvbiBjb3VudCBwZXIgYnl0ZSAoUE9XRVI4KSA9PT0KKysgICAgY2FzZSAxNzk1OiB7IC8vIHZw b3BjbnRiIChYTyAweDcwMyA9IDE3OTUpLiBWUkEgZmllbGQgdW51c2VkLgorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVp bnQ4X3QpX19idWlsdGluX3BvcGNvdW50KExBTkVfVTgoYiwgaSkpKTsKKysgICAgICB9CisrICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gdnNs ZG9pOiBWUlQgPSAoVlJBIHx8IFZSQikgc2hpZnRlZCBsZWZ0IGJ5IFNIIGJ5dGVzIChTSCBhdCBi aXRzIDIyLi4yNSkgPT09CisrICAgIGNhc2UgNDQ6IGNhc2UgNDU6IGNhc2UgNDY6IGNhc2UgNDc6 IHsKKysgICAgICAvLyBTSCBpcyBhdCBiaXRzIDIyLi4yNSAoUFBDKSDihpIgTFNCIGJpdHMgNi4u OSBvZiB0aGUgaW5zdHJ1Y3Rpb24g4oaSCisrICAgICAgLy8gKGluc3RydWN0aW9uQml0cyA+PiA2 KSAmIDB4Ri4gT3VyIFhPIG1hc2sgYWxyZWFkeSBib3R0b21zLW91dCBhdAorKyAgICAgIC8vIGJp dCAwLCBzbyBleHRyYWN0IGZyb20gdGhlIHJhdyBpbnN0cnVjdGlvbi4KKysgICAgICB1aW50MzJf dCBzaCA9IChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gNikgJiAweEY7CisrICAgICAgdWlu dDhfdCBjYXRbMzJdOworKyAgICAgIG1lbWNweShjYXQsIGEsIDE2KTsKKysgICAgICBtZW1jcHko Y2F0ICsgMTYsIGIsIDE2KTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsK KysgICAgICAgIHJbaV0gPSBjYXRbc2ggKyBpXTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKworKyAgICBkZWZhdWx0OgorKyAgICAgIE1P Wl9DUkFTSF9VTlNBRkVfUFJJTlRGKAorKyAgICAgICAgICAiZGVjb2RlVk1YOiB1bmltcGxlbWVu dGVkIFhPPSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG8sCisrICAgICAgICAgIGluc3RyLT5p bnN0cnVjdGlvbkJpdHMoKSk7CisrICB9CisrCisrdm14X2RvbmU6CisrICAjdW5kZWYgTEFORV9V OAorKyAgI3VuZGVmIExBTkVfUzgKKysgICN1bmRlZiBMQU5FX1UxNgorKyAgI3VuZGVmIExBTkVf UzE2CisrICAjdW5kZWYgTEFORV9VMzIKKysgICN1bmRlZiBMQU5FX1MzMgorKyAgI3VuZGVmIExB TkVfVTY0CisrICAjdW5kZWYgTEFORV9TNjQKKysgICN1bmRlZiBTRVRfTEFORV9VOAorKyAgI3Vu ZGVmIFNFVF9MQU5FX1UxNgorKyAgI3VuZGVmIFNFVF9MQU5FX1UzMgorKyAgI3VuZGVmIFNFVF9M QU5FX1U2NAorKyAgOyAgLy8gZW1wdHkgc3RtdCBmb3IgbGFiZWwKKyt9CisrCisrLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKysvLyBkZWNvZGVWU1g6IE1ham9yIG9wY29kZSA2MCAoWFgxLWZvcm0s IFhYMi1mb3JtKQorKy8vIG1mdnNyZCwgbXR2c3JkLCBtdHZzcnd6LCBtdHZzcndzLCB4c2N2ZHBz cCwgeHNjdmRwc3BuLCB4c2N2c3BkcCwKKysvLyB4c2N2c3BkcG4sIHh4YnJkCisrCisrdm9pZCBT aW11bGF0b3I6OmRlY29kZVZTWChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIC8vIFZTWCBt YWpvciBvcGNvZGUgNjAgY292ZXJzIFhYMS9YWDIvWFgzL1hYNCBmb3Jtcy4gV2UgZGlzcGF0Y2gg WFg0CisrICAvLyAoeHhzZWwpIGZpcnN0IGJlY2F1c2UgaXRzIFhPIGlzIG9ubHkgMiBiaXRzIChh dCBJU0EgMjYtMjcgPSBzaW0KKysgIC8vIGJpdHMgNS00KSwgYW5kIHRoZSBYQyByZWdpc3RlciBm aWVsZCBhdCBJU0EgMjEtMjUgd291bGQgb3RoZXJ3aXNlCisrICAvLyBwcm9kdWNlIDMyIGRpZmZl cmVudCA5LWJpdCBYTyB2YWx1ZXMgdG8gZW51bWVyYXRlIGluIHRoZSBzd2l0Y2guCisrICAvLyBQ ZWVsIG9mZiBhbnkgaW5zdHJ1Y3Rpb24gd2l0aCBYWDQgWE89MyAoeHhzZWwpLiBObyBYWDIvWFgz IG9wIGN1cnJlbnRseQorKyAgLy8gZW1pdHRlZCBieSB0aGUgSklUIGhhcyBzaW0gYml0cyAoNSw0 KSA9PSAzLgorKyAgaWYgKGluc3RyLT5iaXRzKDUsIDQpID09IDMpIHsKKysgICAgLy8geHhzZWwg WFQsWEEsWEIsWEMgIChWQS1saWtlIFhYNC1mb3JtKS4KKysgICAgLy8gICBYVFtpXSA9IChYQVtp XSAmIH5YQ1tpXSkgfCAoWEJbaV0gJiBYQ1tpXSkKKysgICAgLy8gUmVnaXN0ZXIgZmllbGRzOiBY QS9YQi9YVCBwZXItYnl0ZTsgWEMgYXQgSVNBIGJpdHMgMjEtMjUgKHNpbQorKyAgICAvLyBiaXRz IDEwLTYpIHdpdGggQ1ggZXh0ZW5zaW9uIGF0IElTQSBiaXQgMjggKHNpbSBiaXQgMykuCisrICAg IGludCB4YSA9IGludChpbnN0ci0+cmFWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMikgPDwgNSkpOwor KyAgICBpbnQgeGIgPSBpbnQoaW5zdHItPnJiVmFsdWUoKSB8IChpbnN0ci0+Yml0KDEpIDw8IDUp KTsKKysgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8 PCA1KSk7CisrICAgIGludCB4YyA9IGludChpbnN0ci0+Yml0cygxMCwgNikgfCAoaW5zdHItPmJp dCgzKSA8PCA1KSk7CisrICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsxNl0sIGNiWzE2XSwgcmVzdWx0 WzE2XTsKKysgICAgZ2V0VlNSMTI4KHhhLCBhYik7CisrICAgIGdldFZTUjEyOCh4YiwgYmIpOwor KyAgICBnZXRWU1IxMjgoeGMsIGNiKTsKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsr KSB7CisrICAgICAgcmVzdWx0W2ldID0gKHVpbnQ4X3QpKChhYltpXSAmIH5jYltpXSkgfCAoYmJb aV0gJiBjYltpXSkpOworKyAgICB9CisrICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAg cmV0dXJuOworKyAgfQorKworKyAgLy8gVGhlIHJlbWFpbmluZyBmb3JtcyAoWFgxL1hYMi9YWDMp IHNoYXJlIGEgOS1iaXQgWE8gYXQgSVNBIGJpdHMKKysgIC8vIDIxLTI5IChzaW0gYml0cyAxMC0y KS4gRm9yIFhYMyB0aGlzIGlzICg4LWJpdCBYTyA8PCAxKSB8IEFYOyBmb3IKKysgIC8vIFhYMiB0 aGUgZnVsbCA5IGJpdHMgYXJlIHRoZSBYTyAobm8gQVggZmllbGQpLgorKyAgdWludDMyX3QgeG8g PSBpbnN0ci0+Yml0cygxMCwgMik7CisrICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7 CisrICB1aW50MzJfdCByYiA9IGluc3RyLT5yYlZhbHVlKCk7CisrCisrICBzd2l0Y2ggKHhvKSB7 CisrICAgIC8vIHhzY3ZkcHNwIC8geHNjdmRwc3BuIC8geHNjdnNwZHAgLyB4c2N2c3BkcG4gLyB4 eGJyZCBhcmUKKysgICAgLy8gWFgyLWZvcm06IFhUL1hCIGFyZSBlYWNoIDYtYml0ICg1LWJpdCBm aWVsZCArIFRYL0JYIGV4dGVuc2lvbiBhdAorKyAgICAvLyBzaW0gYml0cyAwLzEpLiBQb3N0LVBo YXNlLTIgdGhlIEpJVCBlbWl0cyB0aGVzZSB3aXRoIFNpbWQxMjgKKysgICAgLy8gdGFyZ2V0cyAo ZW5jb2RpbmcgMzItNjMpLCB3aGljaCByZXF1aXJlIHRoZSBleHRlbnNpb24gYml0IHRvCisrICAg IC8vIHNlbGVjdCBWUi1zcGFjZSBpbnN0ZWFkIG9mIEZQUi1zcGFjZS4gVGhlIHByZXZpb3VzIGNv ZGUgdXNlZAorKyAgICAvLyBvbmx5IHRoZSA1LWJpdCBmaWVsZCwgc28gYW55IFZSLXNwYWNlIHRh cmdldCBzaWxlbnRseSBjbG9iYmVyZWQKKysgICAgLy8gRlBSIDAuLjMxIGFuZCB0aGUgcG9zdC1z cGxhdCBmYml0cyBpbiBzcGxhdFg0IG5ldmVyIHJlYWNoZWQgdGhlCisrICAgIC8vIHZlY3RvciBs YW5lcy4KKysgICAgY2FzZSAyNjU6IHsKKysgICAgICAvLyB4c2N2ZHBzcDogZG91Ymxl4oaSc2lu Z2xlIHdpdGggc05hTiBxdWlldGluZy4gVGhlIElTQSBzYXlzCisrICAgICAgLy8gcmVzdWx0IGxh bmRzIGF0IFhUWzA6MzFdIChCRSB3b3JkIDAgPSBMRSBieXRlcyAxMi4uMTUpIGFuZAorKyAgICAg IC8vIFhUWzMyOjEyN10gaXMgInVuZGVmaW5lZCIuIFJlYWwgUE9XRVI5IHNpbGljb24gYWN0dWFs bHkKKysgICAgICAvLyBkdXBsaWNhdGVzIHRoZSByZXN1bHQgaW50byBCRSB3b3JkIDEgYXMgd2Vs bCwgc28gdGhlIGJ5dGVzCisrICAgICAgLy8gYXQgTEUgOC4uMTEgaG9sZCB0aGUgc2FtZSBzaW5n bGUuIFRoZSBKSVQncworKyAgICAgIC8vIHJlcGxhY2VMYW5lRmxvYXQzMng0IGxvd2VyaW5nIGRl cGVuZHMgb24gdGhpczogaXQgZm9sbG93cworKyAgICAgIC8vIHhzY3ZkcHNwbiB3aXRoIGB4eGlu c2VydHcg4oCmLCAxMmAsIHdoaWNoIHJlYWRzIFhCLndvcmRbMV0KKysgICAgICAvLyAoTEUgYnl0 ZXMgOC4uMTEpLiBaZXJvaW5nIHRob3NlIGJ5dGVzIGhlcmUgd291bGQgc2lsZW50bHkKKysgICAg ICAvLyBsb3NlIHRoZSBzaW5nbGUgdW5kZXIgc2ltLiBNaXJyb3IgSFcuCisrICAgICAgaW50IHh0 ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChy YiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAg dWludDhfdCBiYlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgLy8gU291 cmNlIGRvdWJsZSBhdCBCRSBEVzAgPSBMRSBieXRlcyA4Li4xNSBvZiB4Yi4KKysgICAgICB1aW50 NjRfdCBkYml0cyA9IDA7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIGRiaXRz IHw9ICgodWludDY0X3QpYmJbOCArIGldKSA8PCAoaSAqIDgpOworKyAgICAgIGRvdWJsZSBmcmI7 CisrICAgICAgbWVtY3B5KCZmcmIsICZkYml0cywgc2l6ZW9mKGZyYikpOworKyAgICAgIGZsb2F0 IHJlc3VsdCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZnJiKTsKKysgICAgICB1aW50MzJf dCBmYml0czsKKysgICAgICBtZW1jcHkoJmZiaXRzLCAmcmVzdWx0LCBzaXplb2YoZmJpdHMpKTsK KysgICAgICBpZiAoKGZiaXRzICYgMHg3RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmIChmYml0 cyAmIDB4MDA3RkZGRkZ1KSAhPSAwKSB7CisrICAgICAgICBmYml0cyB8PSAweDAwNDAwMDAwdTsK KysgICAgICB9CisrICAgICAgdWludDhfdCBvdXRbMTZdOworKyAgICAgIG1lbXNldChvdXQsIDAs IDgpOworKyAgICAgIC8vIEJFIHdvcmQgMSAoTEUgOC4uMTEpIGFuZCBCRSB3b3JkIDAgKExFIDEy Li4xNSkgYm90aCA9IGZiaXRzLgorKyAgICAgIGZvciAoaW50IG9mZiA6IHs4LCAxMn0pIHsKKysg ICAgICAgIG91dFtvZmZdICAgICA9ICh1aW50OF90KShmYml0cyk7CisrICAgICAgICBvdXRbb2Zm ICsgMV0gPSAodWludDhfdCkoZmJpdHMgPj4gOCk7CisrICAgICAgICBvdXRbb2ZmICsgMl0gPSAo dWludDhfdCkoZmJpdHMgPj4gMTYpOworKyAgICAgICAgb3V0W29mZiArIDNdID0gKHVpbnQ4X3Qp KGZiaXRzID4+IDI0KTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjY3OiB7CisrICAgICAgLy8geHNjdmRwc3Bu OiBzYW1lIGFzIHhzY3ZkcHNwIGJ1dCBub24tc2lnbmFsaW5nLiBTYW1lIEhXLW9ic2VydmVkCisr ICAgICAgLy8gd29yZC0xIGR1cGxpY2F0aW9uIChzZWUgeHNjdmRwc3AgY29tbWVudCBhYm92ZSku CisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAg IGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkg PDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7 CisrICAgICAgdWludDY0X3QgZGJpdHMgPSAwOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ODsgaSsrKSBkYml0cyB8PSAoKHVpbnQ2NF90KWJiWzggKyBpXSkgPDwgKGkgKiA4KTsKKysgICAg ICBkb3VibGUgZnJiOworKyAgICAgIG1lbWNweSgmZnJiLCAmZGJpdHMsIHNpemVvZihmcmIpKTsK KysgICAgICBmbG9hdCByZXN1bHQgPSBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGZyYik7Cisr ICAgICAgdWludDMyX3QgZmJpdHM7CisrICAgICAgbWVtY3B5KCZmYml0cywgJnJlc3VsdCwgc2l6 ZW9mKGZiaXRzKSk7CisrICAgICAgdWludDhfdCBvdXRbMTZdOworKyAgICAgIG1lbXNldChvdXQs IDAsIDgpOworKyAgICAgIGZvciAoaW50IG9mZiA6IHs4LCAxMn0pIHsKKysgICAgICAgIG91dFtv ZmZdICAgICA9ICh1aW50OF90KShmYml0cyk7CisrICAgICAgICBvdXRbb2ZmICsgMV0gPSAodWlu dDhfdCkoZmJpdHMgPj4gOCk7CisrICAgICAgICBvdXRbb2ZmICsgMl0gPSAodWludDhfdCkoZmJp dHMgPj4gMTYpOworKyAgICAgICAgb3V0W29mZiArIDNdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDI0 KTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgMzkzOiB7CisrICAgICAgLy8geHZjdmRwc3A6IGNvbnZlcnQgdHdv IGRvdWJsZXMgdG8gdHdvIHNpbmdsZXMsIHJlcGxpY2F0aW5nIGVhY2gKKysgICAgICAvLyByZXN1 bHQgYWNyb3NzIGl0cyBkd29yZC4gQkUgd29yZHMgPSBbcyhCRV9kdzApLCBzKEJFX2R3MCksCisr ICAgICAgLy8gcyhCRV9kdzEpLCBzKEJFX2R3MSldLiBTSUdOQUxJTkcgZm9ybSBwZXIgSVNBOiBz TmFOIGlucHV0cyBhcmUKKysgICAgICAvLyBxdWlldGVkIChoaWdoLW9yZGVyIGZyYWN0aW9uIGJp dCBzZXQgaW4gcmVzdWx0KS4KKysgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25C aXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50OF90IGJiWzE2XSwgb3V0WzE2XTsK KysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICB1aW50MzJfdCBmYml0c1syXTsKKysg ICAgICAvLyBCRV9kdzAgPSBMRSBieXRlcyA4Li4xNSwgQkVfZHcxID0gTEUgYnl0ZXMgMC4uNy4K KysgICAgICBmb3IgKGludCBkdyA9IDA7IGR3IDwgMjsgZHcrKykgeworKyAgICAgICAgaW50IGxl T2ZmID0gKGR3ID09IDApID8gOCA6IDA7CisrICAgICAgICB1aW50NjRfdCBkYml0cyA9IDA7Cisr ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBkYml0cyB8 PSAoKHVpbnQ2NF90KWJiW2xlT2ZmICsgaV0pIDw8IChpICogOCk7CisrICAgICAgICB9CisrICAg ICAgICBkb3VibGUgZnJiOworKyAgICAgICAgbWVtY3B5KCZmcmIsICZkYml0cywgc2l6ZW9mKGZy YikpOworKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihm cmIpOworKyAgICAgICAgbWVtY3B5KCZmYml0c1tkd10sICZyZXN1bHQsIHNpemVvZih1aW50MzJf dCkpOworKyAgICAgICAgaWYgKChmYml0c1tkd10gJiAweDdGODAwMDAwdSkgPT0gMHg3RjgwMDAw MHUgJiYKKysgICAgICAgICAgICAoZmJpdHNbZHddICYgMHgwMDdGRkZGRnUpICE9IDApIHsKKysg ICAgICAgICAgZmJpdHNbZHddIHw9IDB4MDA0MDAwMDB1OyAgLy8gcXVpZXQgc05hTiByZXN1bHQK KysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgLy8gTEUgd29yZHM6IFtzKGR3MSksIHMoZHcx KSwgcyhkdzApLCBzKGR3MCldCisrICAgICAgLy8gKExFIHdvcmQgMCA9IEJFIHdvcmQgMyA9IHMo ZHcxKTsgTEUgd29yZCAzID0gQkUgd29yZCAwID0gcyhkdzApKS4KKysgICAgICB1aW50MzJfdCBs ZVdvcmRzWzRdID0ge2ZiaXRzWzFdLCBmYml0c1sxXSwgZmJpdHNbMF0sIGZiaXRzWzBdfTsKKysg ICAgICBmb3IgKGludCB3ID0gMDsgdyA8IDQ7IHcrKykgeworKyAgICAgICAgb3V0W3cgKiA0XSAg ICAgPSAodWludDhfdClsZVdvcmRzW3ddOworKyAgICAgICAgb3V0W3cgKiA0ICsgMV0gPSAodWlu dDhfdCkobGVXb3Jkc1t3XSA+PiA4KTsKKysgICAgICAgIG91dFt3ICogNCArIDJdID0gKHVpbnQ4 X3QpKGxlV29yZHNbd10gPj4gMTYpOworKyAgICAgICAgb3V0W3cgKiA0ICsgM10gPSAodWludDhf dCkobGVXb3Jkc1t3XSA+PiAyNCk7CisrICAgICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0 KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDIxNjogICAgLy8geHZjdmRwc3h3 czogZG91YmxlIOKGkiBzaWduZWQgd29yZCwgc2F0dXJhdGluZywgUlRaICh2ZWN0b3IpCisrICAg IGNhc2UgMjAwOiB7ICAvLyB4dmN2ZHB1eHdzOiBkb3VibGUg4oaSIHVuc2lnbmVkIHdvcmQsIHNh dHVyYXRpbmcsIFJUWiAodmVjdG9yKQorKyAgICAgIC8vICAgc3JjMSA6PSBYQi5kd29yZF9CRVsw XTsgc3JjMiA6PSBYQi5kd29yZF9CRVsxXQorKyAgICAgIC8vICAgcjEgOj0gQ29udmVydERQdG9T YXQoc3JjMSk7IHIyIDo9IENvbnZlcnREUHRvU2F0KHNyYzIpCisrICAgICAgLy8gICBYVC53b3Jk X0JFWzBdIDo9IHIxOyBYVC53b3JkX0JFWzFdIDo9IHIxIChyZXBsaWNhdGVkKQorKyAgICAgIC8v ICAgWFQud29yZF9CRVsyXSA6PSByMjsgWFQud29yZF9CRVszXSA6PSByMiAocmVwbGljYXRlZCkK KysgICAgICAvLyBTYXR1cmF0aW9uOiBzaWduZWQgY2xhbXBzIHRvIFtJTlQzMl9NSU4sIElOVDMy X01BWF0gd2l0aCBOYU7ihpJJTlQzMl9NSU47CisrICAgICAgLy8gICAgICAgICAgICAgdW5zaWdu ZWQgY2xhbXBzIHRvIFswLCBVSU5UMzJfTUFYXSB3aXRoIE5hTuKGkjAgYW5kIG5lZ+KGkjAuCisr ICAgICAgLy8gQkVfZHcwID0gTEUgYnl0ZXMgOC4uMTU7IEJFX2R3MSA9IExFIGJ5dGVzIDAuLjcu CisrICAgICAgYm9vbCBpc1NpZ25lZCA9ICh4byA9PSAyMTYpOworKyAgICAgIGludCB4dCA9IGlu dChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAo KGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4 X3QgYmJbMTZdLCBvdXRbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAgIGNv bnN0IGludCBzcmNPZmZzZXRzWzJdID0gezgsIDB9OyAgIC8vIEJFX2R3MCAoTEUgOC4uMTUpLCBC RV9kdzEgKExFIDAuLjcpCisrICAgICAgdWludDMyX3QgcmVzdWx0c1syXTsKKysgICAgICBmb3Ig KGludCBsYW5lID0gMDsgbGFuZSA8IDI7IGxhbmUrKykgeworKyAgICAgICAgdWludDY0X3QgZGJp dHMgPSAwOworKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKysgICAgICAg ICAgZGJpdHMgfD0gKCh1aW50NjRfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgal0pIDw8IChqICog OCk7CisrICAgICAgICB9CisrICAgICAgICBkb3VibGUgZHZhbDsKKysgICAgICAgIG1lbWNweSgm ZHZhbCwgJmRiaXRzLCBzaXplb2YoZHZhbCkpOworKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZHZh bCkpIHsKKysgICAgICAgICAgcmVzdWx0c1tsYW5lXSA9IGlzU2lnbmVkID8gMHg4MDAwMDAwMHUg OiAwdTsKKysgICAgICAgIH0gZWxzZSBpZiAoaXNTaWduZWQpIHsKKysgICAgICAgICAgaWYgKGR2 YWwgPj0gMjE0NzQ4MzY0Ny4wKSB7CisrICAgICAgICAgICAgcmVzdWx0c1tsYW5lXSA9IDB4N0ZG RkZGRkZ1OworKyAgICAgICAgICB9IGVsc2UgaWYgKGR2YWwgPD0gLTIxNDc0ODM2NDguMCkgewor KyAgICAgICAgICAgIHJlc3VsdHNbbGFuZV0gPSAweDgwMDAwMDAwdTsKKysgICAgICAgICAgfSBl bHNlIHsKKysgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gKHVpbnQzMl90KShpbnQzMl90KWR2 YWw7ICAvLyBSVFoKKysgICAgICAgICAgfQorKyAgICAgICAgfSBlbHNlIHsgIC8vIHVuc2lnbmVk CisrICAgICAgICAgIGlmIChkdmFsIDw9IDAuMCkgeworKyAgICAgICAgICAgIHJlc3VsdHNbbGFu ZV0gPSAwdTsKKysgICAgICAgICAgfSBlbHNlIGlmIChkdmFsID49IDQyOTQ5NjcyOTUuMCkgewor KyAgICAgICAgICAgIHJlc3VsdHNbbGFuZV0gPSAweEZGRkZGRkZGdTsKKysgICAgICAgICAgfSBl bHNlIHsKKysgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gKHVpbnQzMl90KWR2YWw7ICAvLyBS VFoKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICAvLyBSZXBsaWNh dGVkIGxheW91dDogQkUgd29yZHMgW3IxLCByMSwgcjIsIHIyXTsgaW4gTEUgYnl0ZXMKKysgICAg ICAvLyBbcjIsIHIyLCByMSwgcjFdIChMRSB3b3JkIDAgPSBCRSB3b3JkIDMgPSByMiwgTEUgd29y ZCAzID0gQkUgd29yZCAwID0gcjEpLgorKyAgICAgIHVpbnQzMl90IGxlV29yZHNbNF0gPSB7cmVz dWx0c1sxXSwgcmVzdWx0c1sxXSwgcmVzdWx0c1swXSwgcmVzdWx0c1swXX07CisrICAgICAgZm9y IChpbnQgdyA9IDA7IHcgPCA0OyB3KyspIHsKKysgICAgICAgIG91dFt3ICogNF0gICAgID0gKHVp bnQ4X3QpbGVXb3Jkc1t3XTsKKysgICAgICAgIG91dFt3ICogNCArIDFdID0gKHVpbnQ4X3QpKGxl V29yZHNbd10gPj4gOCk7CisrICAgICAgICBvdXRbdyAqIDQgKyAyXSA9ICh1aW50OF90KShsZVdv cmRzW3ddID4+IDE2KTsKKysgICAgICAgIG91dFt3ICogNCArIDNdID0gKHVpbnQ4X3QpKGxlV29y ZHNbd10gPj4gMjQpOworKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7CisrICAg ICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyNDg6ICAgIC8vIHh2Y3ZzeHdkcDogc2lnbmVk IHdvcmQg4oaSIGRvdWJsZSAodmVjdG9yKQorKyAgICBjYXNlIDIzMjogeyAgLy8geHZjdnV4d2Rw OiB1bnNpZ25lZCB3b3JkIOKGkiBkb3VibGUgKHZlY3RvcikKKysgICAgICAvLyAgIHNyYzEgOj0g WEIud29yZF9CRVswXTsgc3JjMiA6PSBYQi53b3JkX0JFWzJdCisrICAgICAgLy8gICBYVC5kd29y ZF9CRVswXSA6PSBDb252ZXJ0KHNyYzEpOyBYVC5kd29yZF9CRVsxXSA6PSBDb252ZXJ0KHNyYzIp CisrICAgICAgLy8gQkUgd29yZCAwID0gTEUgYnl0ZXMgMTIuLjE1OyBCRSB3b3JkIDIgPSBMRSBi eXRlcyA0Li43LgorKyAgICAgIC8vIE91dHB1dCBCRSBkd29yZCAwID0gTEUgYnl0ZXMgOC4uMTU7 IEJFIGR3b3JkIDEgPSBMRSBieXRlcyAwLi43LgorKyAgICAgIC8vIE5vIE5hTiBoYW5kbGluZyBu ZWVkZWQgKGludGVnZXIgc291cmNlKS4KKysgICAgICBib29sIGlzU2lnbmVkID0gKHhvID09IDI0 OCk7CisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAg ICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYg MSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl0sIG91dFsxNl07CisrICAgICAgZ2V0VlNS MTI4KHhiLCBiYik7CisrICAgICAgY29uc3QgaW50IHNyY09mZnNldHNbMl0gPSB7MTIsIDR9Owor KyAgICAgIGNvbnN0IGludCBkc3RPZmZzZXRzWzJdID0gezgsIDB9OworKyAgICAgIGZvciAoaW50 IGxhbmUgPSAwOyBsYW5lIDwgMjsgbGFuZSsrKSB7CisrICAgICAgICB1aW50MzJfdCBiaXRzID0g KHVpbnQzMl90KWJiW3NyY09mZnNldHNbbGFuZV1dIHwKKysgICAgICAgICAgICAgICAgICAgICAg ICAoKHVpbnQzMl90KWJiW3NyY09mZnNldHNbbGFuZV0gKyAxXSA8PCA4KSB8CisrICAgICAgICAg ICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgMl0gPDwgMTYp IHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW3NyY09mZnNldHNbbGFu ZV0gKyAzXSA8PCAyNCk7CisrICAgICAgICBkb3VibGUgZHZhbCA9IGlzU2lnbmVkID8gKGRvdWJs ZSkoaW50MzJfdCliaXRzIDogKGRvdWJsZSliaXRzOworKyAgICAgICAgdWludDY0X3QgZGJpdHM7 CisrICAgICAgICBtZW1jcHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7CisrICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBvdXRbZHN0T2Zmc2V0 c1tsYW5lXSArIGldID0gKHVpbnQ4X3QpKGRiaXRzID4+IChpICogOCkpOworKyAgICAgICAgfQor KyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7CisrICAgICAgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSA0NTc6IHsKKysgICAgICAvLyB4dmN2c3BkcDogY29udmVydCB0d28gc2lu Z2xlcyB0byB0d28gZG91Ymxlcy4gU0lHTkFMSU5HIGZvcm0KKysgICAgICAvLyBwZXIgSVNBOiBz TmFOIGlucHV0cyBhcmUgcXVpZXRlZCBpbiB0aGUgcmVzdWx0IChiaXQgNTEgc2V0KS4KKysgICAg ICAvLyAgIHNyYzEgOj0gWEIud29yZF9CRVswXTsgc3JjMiA6PSBYQi53b3JkX0JFWzJdCisrICAg ICAgLy8gICBYVC5kd29yZF9CRVswXSA6PSBDb252ZXJ0U1B0b0RQKHNyYzEpCisrICAgICAgLy8g ICBYVC5kd29yZF9CRVsxXSA6PSBDb252ZXJ0U1B0b0RQKHNyYzIpCisrICAgICAgLy8gQkUgd29y ZCAwID0gTEUgYnl0ZXMgMTIuLjE1OyBCRSB3b3JkIDIgPSBMRSBieXRlcyA0Li43LgorKyAgICAg IC8vIE91dHB1dCBCRSBkd29yZCAwID0gTEUgYnl0ZXMgOC4uMTU7IEJFIGR3b3JkIDEgPSBMRSBi eXRlcyAwLi43LgorKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUp KTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+ PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZdOworKyAgICAg IGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAgIC8vIHNyYzEgZnJvbSBCRSB3b3JkIDAgKExFIDEy Li4xNSksIG91dHB1dCBkd29yZCBhdCBMRSA4Li4xNS4KKysgICAgICAvLyBzcmMyIGZyb20gQkUg d29yZCAyIChMRSA0Li43KSwgICBvdXRwdXQgZHdvcmQgYXQgTEUgMC4uNy4KKysgICAgICBjb25z dCBpbnQgc3JjT2Zmc2V0c1syXSA9IHsxMiwgNH07ICAgLy8gTEUgYnl0ZSBvZmZzZXRzIG9mIHdv cmRfQkVbMF0sIHdvcmRfQkVbMl0KKysgICAgICBjb25zdCBpbnQgZHN0T2Zmc2V0c1syXSA9IHs4 LCAwfTsgICAgLy8gTEUgYnl0ZSBvZmZzZXRzIG9mIGR3b3JkX0JFWzBdLCBkd29yZF9CRVsxXQor KyAgICAgIGZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgMjsgbGFuZSsrKSB7CisrICAgICAgICB1 aW50MzJfdCBmYml0cyA9ICh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdXSB8CisrICAgICAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIDFdIDw8 IDgpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRz W2xhbmVdICsgMl0gPDwgMTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJf dCliYltzcmNPZmZzZXRzW2xhbmVdICsgM10gPDwgMjQpOworKyAgICAgICAgZmxvYXQgZnZhbDsK KysgICAgICAgIG1lbWNweSgmZnZhbCwgJmZiaXRzLCBzaXplb2YoZnZhbCkpOworKyAgICAgICAg ZG91YmxlIGR2YWwgPSBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKGZ2YWwpOworKyAgICAgICAg dWludDY0X3QgZGJpdHM7CisrICAgICAgICBtZW1jcHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9mKGRi aXRzKSk7CisrICAgICAgICBpZiAoKGRiaXRzICYgMHg3RkYwMDAwMDAwMDAwMDAwVUxMKSA9PSAw eDdGRjAwMDAwMDAwMDAwMDBVTEwgJiYKKysgICAgICAgICAgICAoZGJpdHMgJiAweDAwMEZGRkZG RkZGRkZGRkZVTEwpICE9IDApIHsKKysgICAgICAgICAgZGJpdHMgfD0gMHgwMDA4MDAwMDAwMDAw MDAwVUxMOyAgLy8gcXVpZXQgc05hTiByZXN1bHQKKysgICAgICAgIH0KKysgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICAgIG91dFtkc3RPZmZzZXRzW2xhbmVd ICsgaV0gPSAodWludDhfdCkoZGJpdHMgPj4gKGkgKiA4KSk7CisrICAgICAgICB9CisrICAgICAg fQorKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIDMyOTogeworKyAgICAgIC8vIHhzY3ZzcGRwOiBzaW5nbGXihpJkb3VibGUgZnJvbSBC RSB3b3JkIDAgb2YgWEIuIFNJR05BTElORyBmb3JtOworKyAgICAgIC8vIGFuIHNOYU4gaW5wdXQg eWllbGRzIGEgcU5hTiByZXN1bHQgd2l0aCB0aGUgaGlnaC1vcmRlcgorKyAgICAgIC8vIGZyYWN0 aW9uIGJpdCAocXVpZXQgYml0KSBzZXQuCisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3Ry LT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3Ry dWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl07Cisr ICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgLy8gQkUgd29yZCAwID0gTEUgYnl0ZXMg MTIuLjE1IG9mIHhiLgorKyAgICAgIHVpbnQzMl90IGZiaXRzID0gKHVpbnQzMl90KWJiWzEyXSB8 CisrICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiWzEzXSA8PCA4KSB8CisrICAg ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiWzE0XSA8PCAxNikgfAorKyAgICAgICAg ICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxNV0gPDwgMjQpOworKyAgICAgIGZsb2F0IGZ2 YWw7CisrICAgICAgbWVtY3B5KCZmdmFsLCAmZmJpdHMsIHNpemVvZihmdmFsKSk7CisrICAgICAg ZG91YmxlIGR2YWwgPSBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKGZ2YWwpOworKyAgICAgIHVp bnQ2NF90IGRiaXRzOworKyAgICAgIG1lbWNweSgmZGJpdHMsICZkdmFsLCBzaXplb2YoZGJpdHMp KTsKKysgICAgICAvLyBRdWlldCBhbnkgTmFOIHJlc3VsdCAoc2lnbmFsaW5nIGZvcm0pOiBzZXQg Yml0IDUxIG9mIG1hbnRpc3NhLgorKyAgICAgIGlmICgoZGJpdHMgJiAweDdGRjAwMDAwMDAwMDAw MDBVTEwpID09IDB4N0ZGMDAwMDAwMDAwMDAwMFVMTCAmJgorKyAgICAgICAgICAoZGJpdHMgJiAw eDAwMEZGRkZGRkZGRkZGRkZVTEwpICE9IDApIHsKKysgICAgICAgIGRiaXRzIHw9IDB4MDAwODAw MDAwMDAwMDAwMFVMTDsKKysgICAgICB9CisrICAgICAgdWludDhfdCBvdXRbMTZdOworKyAgICAg IG1lbXNldChvdXQsIDAsIDgpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBv dXRbOCArIGldID0gKHVpbnQ4X3QpKGRiaXRzID4+IChpICogOCkpOworKyAgICAgIHNldFZTUjEy OCh4dCwgb3V0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDMzMTogeworKyAg ICAgIC8vIHhzY3ZzcGRwbjogbm9uLXNpZ25hbGluZyB2YXJpYW50IG9mIHhzY3ZzcGRwLgorKyAg ICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBpbnQg eGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUp OworKyAgICAgIHVpbnQ4X3QgYmJbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAg ICAgIHVpbnQzMl90IGZiaXRzID0gKHVpbnQzMl90KWJiWzEyXSB8CisrICAgICAgICAgICAgICAg ICAgICAgICAoKHVpbnQzMl90KWJiWzEzXSA8PCA4KSB8CisrICAgICAgICAgICAgICAgICAgICAg ICAoKHVpbnQzMl90KWJiWzE0XSA8PCAxNikgfAorKyAgICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdCliYlsxNV0gPDwgMjQpOworKyAgICAgIGZsb2F0IGZ2YWw7CisrICAgICAgbWVtY3B5 KCZmdmFsLCAmZmJpdHMsIHNpemVvZihmdmFsKSk7CisrICAgICAgZG91YmxlIGR2YWwgPSBwcm9t b3RlRmxvYXRQcmVzZXJ2aW5nTmFOKGZ2YWwpOworKyAgICAgIHVpbnQ2NF90IGRiaXRzOworKyAg ICAgIG1lbWNweSgmZGJpdHMsICZkdmFsLCBzaXplb2YoZGJpdHMpKTsKKysgICAgICB1aW50OF90 IG91dFsxNl07CisrICAgICAgbWVtc2V0KG91dCwgMCwgOCk7CisrICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCA4OyBpKyspIG91dFs4ICsgaV0gPSAodWludDhfdCkoZGJpdHMgPj4gKGkgKiA4KSk7 CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMzQ3OiB7CisrICAgICAgLy8gUE9XRVI5IFhYMi1mb3JtIG9wcyBzaGFyaW5nIFhPPTM0 NzsgZGlzYW1iaWd1YXRlZCBieSB0aGUgNS1iaXQKKysgICAgICAvLyBBIGltbWVkaWF0ZSAoc2lt IGJpdHMgMjAuLjE2KToKKysgICAgICAvLyAgIEE9MCAgLT4geHN4ZXhwZHAgIChleHRyYWN0IGJp YXNlZCBleHBvbmVudCBpbnRvIDExIExTQnMgb2YgWFQuZHcwKQorKyAgICAgIC8vICAgQT0xNiAt PiB4c2N2aHBkcCAgKEZQMTYgLT4gRlA2NCkKKysgICAgICAvLyAgIEE9MTcgLT4geHNjdmRwaHAg IChGUDY0IC0+IEZQMTYpCisrICAgICAgLy8gSGFsZiBwbGFjZW1lbnQ6IHRoZSBGUDE2IHZhbHVl IGxpdmVzIGF0IExFIGJ5dGVzIDguLjkgb2YKKysgICAgICAvLyB0aGUgVlNSICg9IEJFIGJpdHMg NDguLjYzIG9mCisrICAgICAgLy8gZHdvcmRbMF0pLCB3aXRoIHRoZSByZXN0IG9mIGR3b3JkWzBd IHplcm9lZC4gVGhpcyBtYXRjaGVzIHRoZQorKyAgICAgIC8vIGx4c2loenggbGF5b3V0IGFscmVh ZHkgdXNlZCBieSB0aGUgSklULgorKyAgICAgIHVpbnQzMl90IGFJbW0gPSAoaW5zdHItPmluc3Ry dWN0aW9uQml0cygpID4+IDE2KSAmIDB4MUY7CisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGlu c3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmlu c3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl0s IG91dFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgbWVtc2V0KG91dCwg MCwgMTYpOworKyAgICAgIGlmIChhSW1tID09IDE3KSB7CisrICAgICAgICAvLyB4c2N2ZHBocDog cmVhZCBGUDY0IGZyb20gQkUgMC4uNjMgb2YgWEIgKExFIGJ5dGVzIDguLjE1KSwKKysgICAgICAg IC8vIGNvbnZlcnQgdG8gRlAxNiwgcGxhY2UgYXQgTEUgYnl0ZXMgOC4uOSBvZiBYVC4KKysgICAg ICAgIGRvdWJsZSBkOworKyAgICAgICAgbWVtY3B5KCZkLCBiYiArIDgsIDgpOworKyAgICAgICAg dWludDE2X3QgaCA9IGpzOjpmbG9hdDE2KGQpLnRvUmF3Qml0cygpOworKyAgICAgICAgb3V0Wzhd ID0gKHVpbnQ4X3QpKGggJiAweEZGKTsKKysgICAgICAgIG91dFs5XSA9ICh1aW50OF90KSgoaCA+ PiA4KSAmIDB4RkYpOworKyAgICAgIH0gZWxzZSBpZiAoYUltbSA9PSAxNikgeworKyAgICAgICAg Ly8geHNjdmhwZHA6IHJlYWQgRlAxNiBmcm9tIExFIGJ5dGVzIDguLjkgb2YgWEIsIGNvbnZlcnQg dG8gRlA2NCwKKysgICAgICAgIC8vIHBsYWNlIGF0IExFIGJ5dGVzIDguLjE1IG9mIFhULgorKyAg ICAgICAgdWludDE2X3QgaCA9ICh1aW50MTZfdCliYls4XSB8ICgodWludDE2X3QpYmJbOV0gPDwg OCk7CisrICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oanM6OmZsb2F0MTY6 OmZyb21SYXdCaXRzKGgpKTsKKysgICAgICAgIG1lbWNweShvdXQgKyA4LCAmZCwgOCk7CisrICAg ICAgfSBlbHNlIGlmIChhSW1tID09IDApIHsKKysgICAgICAgIC8vIHhzeGV4cGRwOiByZWFkIEZQ NjQgZnJvbSBMRSBieXRlcyA4Li4xNSBvZiBYQiwgZXh0cmFjdCBiaWFzZWQKKysgICAgICAgIC8v IGV4cG9uZW50IChiaXRzIDEuLjExIG9mIHRoZSBJRUVFLTc1NCBkb3VibGUgPSBiaXRzIDUyLi42 MiBvZgorKyAgICAgICAgLy8gdGhlIDY0LWJpdCBwYXR0ZXJuKSwgcGxhY2UgaW50byBYVC5kdzAg d2l0aCByZXN0IHplcm9lZC4KKysgICAgICAgIHVpbnQ2NF90IGJpdHMgPSAwOworKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIGJpdHMgfD0gdWludDY0X3QoYmJbOCArIGldKSA8 PCAoaSAqIDgpOworKyAgICAgICAgdWludDY0X3QgZXhwID0gKGJpdHMgPj4gNTIpICYgMHg3RkY7 CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgb3V0WzggKyBpXSA9ICh1aW50 OF90KShleHAgPj4gKGkgKiA4KSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIE1PWl9DUkFT SF9VTlNBRkVfUFJJTlRGKAorKyAgICAgICAgICAgICJkZWNvZGVWU1ggWE89MzQ3IHdpdGggdW5l eHBlY3RlZCBBPSV1IChpbnN0ciAweCUwOHgpIiwKKysgICAgICAgICAgICBhSW1tLCBpbnN0ci0+ aW5zdHJ1Y3Rpb25CaXRzKCkpOworKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA0NzU6IHsKKysgICAgICAvLyB4eGJy ZDogYnl0ZS1yZXZlcnNlIGVhY2ggZG91Ymxld29yZC4KKysgICAgICBpbnQgeHQgPSBpbnQocnQg fCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0 ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50OF90IGJi WzE2XSwgb3V0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDg7IGkrKykgb3V0W2ldID0gYmJbNyAtIGldOworKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSBvdXRbOCArIGldID0gYmJbMTUgLSBpXTsKKysgICAgICBzZXRW U1IxMjgoeHQsIG91dCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFhY My1mb3JtIHNjYWxhcjogeHNtYXhqZHAgLyB4c21pbmpkcCAoUE9XRVI5KSA9PT0KKysgICAgLy8K KysgICAgLy8geHN7bWF4LG1pbn1qZHAgWFQsIFhBLCBYQi4gU2NhbGFyIGlucHV0cyBhdCBCRSBi aXRzIDAuLjYzIG9mCisrICAgIC8vIFhBIC8gWEIgKD0gTEUgYnl0ZXMgOC4uMTUpOyByZXN1bHQg bGFuZHMgYXQgQkUgMC4uNjMgb2YgWFQKKysgICAgLy8gKHVwcGVyIGJpdHMgInVuZGVmaW5lZCIg cGVyIElTQSkuCisrICAgIC8vCisrICAgIC8vIFNlbWFudGljcyBtYXRjaCBFQ01BLTI2MiBNYXRo LnttYXgsbWlufSAvIHdhc20gZjY0LnttYXgsbWlufToKKysgICAgLy8gICAtIE5hTjogaWYgQSBp cyBOYU4gcmV0dXJuIEE7IGVsc2UgaWYgQiBpcyBOYU4gcmV0dXJuIEIuIHNOYU4KKysgICAgLy8g ICAgIHBheWxvYWQgcHJlc2VydmVkIGJpdC1mb3ItYml0IChOT1QgcXVpZXRlZCkuCisrICAgIC8v ICAgLSDCsTAgdGllOiBzaWduZWQtemVybyBvcmRlcmluZy4geHNtYXhqZHAgcmV0dXJucyArMCBm b3IgYW55CisrICAgIC8vICAgICBtaXggb2YgKC0wLCArMCk7IHhzbWluamRwIHJldHVybnMgLTAu CisrICAgIC8vICAgLSBPdGhlcndpc2U6IHN0YW5kYXJkIElFRUUgbWF4IC8gbWluLgorKyAgICBj YXNlIDI4ODogY2FzZSAyODk6ICAgIC8vIHhzbWF4amRwICAoWE84PTE0NCDihpIgOS1iaXQgMjg4 LzI4OSkKKysgICAgY2FzZSAzMDQ6IGNhc2UgMzA1OiB7ICAvLyB4c21pbmpkcCAgKFhPOD0xNTIg 4oaSIDktYml0IDMwNC8zMDUpCisrICAgICAgaW50IHhhID0gaW50KGluc3RyLT5yYVZhbHVlKCkg fCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZh bHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7CisrICAgICAgaW50IHh0ID0gaW50KGluc3Ry LT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDhfdCBhYlsx Nl0sIGJiWzE2XSwgb3V0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKKysgICAgICBn ZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICBkb3VibGUgYSwgYjsKKysgICAgICBtZW1jcHkoJmEs IGFiICsgOCwgOCk7CisrICAgICAgbWVtY3B5KCZiLCBiYiArIDgsIDgpOworKyAgICAgIGJvb2wg aXNNYXggPSAoeG8gPj4gMSkgPT0gMTQ0OworKyAgICAgIGRvdWJsZSByOworKyAgICAgIGlmIChz dGQ6OmlzbmFuKGEpKSB7CisrICAgICAgICByID0gYTsKKysgICAgICB9IGVsc2UgaWYgKHN0ZDo6 aXNuYW4oYikpIHsKKysgICAgICAgIHIgPSBiOworKyAgICAgIH0gZWxzZSBpZiAoYSA9PSAwLjAg JiYgYiA9PSAwLjApIHsKKysgICAgICAgIC8vIFNpZ25lZC16ZXJvIG9yZGVyaW5nOiBtYXggcGlj a3MgKzAsIG1pbiBwaWNrcyAtMC4KKysgICAgICAgIGlmIChpc01heCkgeworKyAgICAgICAgICBy ID0gc3RkOjpzaWduYml0KGEpID8gYiA6IGE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAg ICByID0gc3RkOjpzaWduYml0KGEpID8gYSA6IGI7CisrICAgICAgICB9CisrICAgICAgfSBlbHNl IHsKKysgICAgICAgIHIgPSBpc01heCA/IHN0ZDo6bWF4KGEsIGIpIDogc3RkOjptaW4oYSwgYik7 CisrICAgICAgfQorKyAgICAgIG1lbXNldChvdXQsIDAsIDgpOworKyAgICAgIG1lbWNweShvdXQg KyA4LCAmciwgOCk7CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrCisrICAgIC8vIC0tLSBWU1ggWFgzLWZvcm06IHh4cGVybWRpIC0tLQorKyAgICAv LworKyAgICAvLyB4eHBlcm1kaSBYVCwgWEEsIFhCLCBETToKKysgICAgLy8gICBYVC5EVzAgPSBY QS5EVyhETVswXSkKKysgICAgLy8gICBYVC5EVzEgPSBYQi5EVyhETVsxXSkKKysgICAgLy8gSW4g QkUsIERXMCBpcyBNU0Itc2lkZSwgRFcxIGlzIExTQi1zaWRlLiBPbiBQUEM2NExFIHJlZ2lzdGVy CisrICAgIC8vIHN0b3JhZ2UsIERXMCA9IExFIGJ5dGVzIDgtMTUgYW5kIERXMSA9IExFIGJ5dGVz IDAtNy4gVGhlIHNpbSdzCisrICAgIC8vIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIHVzZWQgdGhl IHJldmVyc2VkICJEVzAgPSBMRSAwLTciCisrICAgIC8vIGNvbnZlbnRpb24gd2hpY2ggY2FuY2Vs bGVkIGZvciBzZWxmLXN3YXAgcm91bmQtdHJpcHMgYnV0CisrICAgIC8vIHByb2R1Y2VkIHdyb25n IGhhbHZlcyB3aGVuIGNoYWluZWQgd2l0aCBJU0EtY29ycmVjdCBvcHMKKysgICAgLy8gKG10dnNy ZCwgeHhzcGx0dywgbWZ2c3JkKS4KKysgICAgY2FzZSAyMDogY2FzZSAyMTogICAgICAgLy8geHhw ZXJtZGkgRE09MAorKyAgICBjYXNlIDg0OiBjYXNlIDg1OiAgICAgICAvLyB4eHBlcm1kaSBETT0x CisrICAgIGNhc2UgMTQ4OiBjYXNlIDE0OTogICAgIC8vIHh4cGVybWRpIERNPTIgKD0geHhzd2Fw ZCB3aGVuIFhBPT1YQikKKysgICAgY2FzZSAyMTI6IGNhc2UgMjEzOiB7ICAgLy8geHhwZXJtZGkg RE09MworKyAgICAgIHVpbnQ4X3QgZG1faGkgPSAoeG8gPj4gNykgJiAxOyAgLy8gRE1bMF0KKysg ICAgICB1aW50OF90IGRtX2xvID0gKHhvID4+IDYpICYgMTsgIC8vIERNWzFdCisrICAgICAgaW50 IHhhID0gaW50KGluc3RyLT5yYVZhbHVlKCkgfCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7CisrICAg ICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7 CisrICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8 PCA1KSk7CisrICAgICAgdWludDhfdCB4YV9ieXRlc1sxNl0sIHhiX2J5dGVzWzE2XSwgcmVzdWx0 WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEsIHhhX2J5dGVzKTsKKysgICAgICBnZXRWU1IxMjgo eGIsIHhiX2J5dGVzKTsKKysgICAgICAvLyBEVzAgaW4gTEUgc3RvcmFnZSBpcyBieXRlcyA4LTE1 OyBEVzEgaXMgYnl0ZXMgMC03LgorKyAgICAgIC8vICAgWFQuRFcwIChyZXN1bHRbOC4uMTVdKSA9 IFhBLkRXKGRtX2hpKQorKyAgICAgIC8vICAgWFQuRFcxIChyZXN1bHRbMC4uN10pICA9IFhCLkRX KGRtX2xvKQorKyAgICAgIC8vIERXKDApIGlzIGF0IExFIDgsIERXKDEpIGlzIGF0IExFIDAuCisr ICAgICAgbWVtY3B5KHJlc3VsdCArIDgsIHhhX2J5dGVzICsgKGRtX2hpID8gMCA6IDgpLCA4KTsK KysgICAgICBtZW1jcHkocmVzdWx0LCAgICAgeGJfYnl0ZXMgKyAoZG1fbG8gPyAwIDogOCksIDgp OworKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQor KworKyAgICAvLyAtLS0gVlNYIGxvZ2ljYWwgKFhYMy1mb3JtLCBwcmltYXJ5IG9wY29kZSA2MCkg LS0tCisrICAgIC8vCisrICAgIC8vIEVhY2ggdGFrZXMgdHdvIDYtYml0IFZTUiBzb3VyY2VzIFhB L1hCIGFuZCB3cml0ZXMgNi1iaXQgVlNSCisrICAgIC8vIGRlc3RpbmF0aW9uIFhULiA4LWJpdCBJ U0EgWE8gYXQgYml0cyAyMS0yODsgb3VyCisrICAgIC8vIDktYml0IFhPIGV4dHJhY3Rpb24gKGJp dHMgMTA6MikgaW5jbHVkZXMgdGhlIEFYIGJpdCBhdCBwb3NpdGlvbiAwLAorKyAgICAvLyBzbyBl YWNoIG9wIGFwcGVhcnMgYXMgdHdvIGNvbnNlY3V0aXZlIHZhbHVlcyAoQVg9MCBhbmQgQVg9MSku CisrICAgIC8vCisrICAgIC8vICAgeHhsYW5kIFhULFhBLFhCICAgICBYTz0xMzAgICg5LWJpdDog MjYwLCAyNjEpICBYVCA9IFhBICYgWEIKKysgICAgLy8gICB4eGxhbmRjIFhULFhBLFhCICAgIFhP PTEzOCAgKDI3NiwgMjc3KSAgICAgICAgIFhUID0gWEEgJiB+WEIKKysgICAgLy8gICB4eGxvciBY VCxYQSxYQiAgICAgIFhPPTE0NiAgKDI5MiwgMjkzKSAgICAgICAgIFhUID0gWEEgfCBYQgorKyAg ICAvLyAgIHh4bHhvciBYVCxYQSxYQiAgICAgWE89MTU0ICAoMzA4LCAzMDkpICAgICAgICAgWFQg PSBYQSBeIFhCCisrICAgIC8vICAgeHhsbm9yIFhULFhBLFhCICAgICBYTz0xNjIgICgzMjQsIDMy NSkgICAgICAgICBYVCA9IH4oWEEgfCBYQikKKysgICAgLy8gICB4eGxvcmMgWFQsWEEsWEIgICAg IFhPPTE3MCAgKDM0MCwgMzQxKSAgICAgICAgIFhUID0gWEEgfCB+WEIKKysgICAgLy8gICB4eGxu YW5kIFhULFhBLFhCICAgIFhPPTE3OCAgKDM1NiwgMzU3KSAgICAgICAgIFhUID0gfihYQSAmIFhC KQorKyAgICAvLyAgIHh4bGVxdiBYVCxYQSxYQiAgICAgWE89MTg2ICAoMzcyLCAzNzMpICAgICAg ICAgWFQgPSB+KFhBIF4gWEIpCisrICAgIC8vCisrICAgIC8vIFRoZSBlbmNvZGluZyBjb25zdGFu dHMgaW4gQXNzZW1ibGVyLXBwYzY0LmggbWF0Y2g6IFBQQ194eGxvcj0weEYwMDAwNDkwCisrICAg IC8vIGhhcyBiaXRzIDQsNywxMCBzZXQgaW4gaXRzIGJhc2UgKFhPPTE0NiBpbiB0aGUgOC1iaXQg ZmllbGQpLCB3aGljaAorKyAgICAvLyB1bmRlciB0aGUgc2ltdWxhdG9yJ3MgOS1iaXQgZXh0cmFj dGlvbiBnaXZlcyAyKjE0Nj0yOTIgKEFYPTAgZGVmYXVsdCkuCisrICAgIGNhc2UgMjYwOiBjYXNl IDI2MTogIC8vIHh4bGFuZAorKyAgICBjYXNlIDI3NjogY2FzZSAyNzc6ICAvLyB4eGxhbmRjCisr ICAgIGNhc2UgMjkyOiBjYXNlIDI5MzogIC8vIHh4bG9yCisrICAgIGNhc2UgMzA4OiBjYXNlIDMw OTogIC8vIHh4bHhvcgorKyAgICBjYXNlIDMyNDogY2FzZSAzMjU6ICAvLyB4eGxub3IKKysgICAg Y2FzZSAzNDA6IGNhc2UgMzQxOiAgLy8geHhsb3JjCisrICAgIGNhc2UgMzU2OiBjYXNlIDM1Nzog IC8vIHh4bG5hbmQKKysgICAgY2FzZSAzNzI6IGNhc2UgMzczOiAgLy8geHhsZXF2CisrICAgIHsK KysgICAgICBpbnQgeGEgPSBpbnQoaW5zdHItPnJhVmFsdWUoKSB8IChpbnN0ci0+Yml0KDIpIDw8 IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQoaW5zdHItPnJiVmFsdWUoKSB8IChpbnN0ci0+Yml0 KDEpIDw8IDUpKTsKKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0 ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IGFfYnl0ZXNbMTZdLCBiX2J5dGVzWzE2 XSwgcmVzdWx0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEsIGFfYnl0ZXMpOworKyAgICAgIGdl dFZTUjEyOCh4YiwgYl9ieXRlcyk7CisrICAgICAgLy8gRGlzcGF0Y2ggb24gdGhlIDgtYml0IElT QSBYTyAoaWdub3JpbmcgQVggYml0IGF0IHBvc2l0aW9uIDApLgorKyAgICAgIHVpbnQzMl90IHhv OCA9IHhvID4+IDE7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAg ICAgICB1aW50OF90IGEgPSBhX2J5dGVzW2ldLCBiID0gYl9ieXRlc1tpXTsKKysgICAgICAgIHN3 aXRjaCAoeG84KSB7CisrICAgICAgICAgIGNhc2UgMTMwOiByZXN1bHRbaV0gPSBhICYgYjsgICAg ICAgIGJyZWFrOyAgLy8geHhsYW5kCisrICAgICAgICAgIGNhc2UgMTM4OiByZXN1bHRbaV0gPSBh ICYgfmI7ICAgICAgIGJyZWFrOyAgLy8geHhsYW5kYworKyAgICAgICAgICBjYXNlIDE0NjogcmVz dWx0W2ldID0gYSB8IGI7ICAgICAgICBicmVhazsgIC8vIHh4bG9yCisrICAgICAgICAgIGNhc2Ug MTU0OiByZXN1bHRbaV0gPSBhIF4gYjsgICAgICAgIGJyZWFrOyAgLy8geHhseG9yCisrICAgICAg ICAgIGNhc2UgMTYyOiByZXN1bHRbaV0gPSAodWludDhfdCl+KGEgfCBiKTsgIGJyZWFrOyAgLy8g eHhsbm9yCisrICAgICAgICAgIGNhc2UgMTcwOiByZXN1bHRbaV0gPSBhIHwgKHVpbnQ4X3QpfmI7 ICAgIGJyZWFrOyAgLy8geHhsb3JjCisrICAgICAgICAgIGNhc2UgMTc4OiByZXN1bHRbaV0gPSAo dWludDhfdCl+KGEgJiBiKTsgIGJyZWFrOyAgLy8geHhsbmFuZAorKyAgICAgICAgICBjYXNlIDE4 NjogcmVzdWx0W2ldID0gKHVpbnQ4X3QpfihhIF4gYik7ICBicmVhazsgIC8vIHh4bGVxdgorKyAg ICAgICAgfQorKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFhYMi1mb3JtOiB4eHNwbHR3IChzcGxhdCB3 b3JkIGZyb20gVlJCW1VJTV0gdG8gYWxsIDQgbGFuZXMpID09PQorKyAgICAvLworKyAgICAvLyB4 eHNwbHR3OiBVSU0gc2VsZWN0cyBvbmUgb2YgZm91ciB3b3JkcyBpbiBCRSBudW1iZXJpbmcuIFVJ TT0wCisrICAgIC8vIOKGkiBCRSB3b3JkIDAgKE1TQiBzaWRlIG9mIHRoZSAxMjggYml0cykuIE9u IFBQQzY0TEUgcmVnaXN0ZXIKKysgICAgLy8gc3RvcmFnZSB0aGF0IG1hcHMgdG8gTEUgd29yZCAo MyAtIFVJTSkuIFdpdGggdGhlIGlucHV0CisrICAgIC8vIHsweDExMTExMTExLCAweDIyMjIyMjIy LCAweDMzMzMzMzMzLCAweDQ0NDQ0NDQ0fTogVUlNPTAKKysgICAgLy8gc3BsYXRzIDB4NDQ0NDQ0 NDQgKD0gTEUgd29yZCAzKSwgVUlNPTMgc3BsYXRzIDB4MTExMTExMTEKKysgICAgLy8gKD0gTEUg d29yZCAwKS4gVGhlIEpJVCBlbWl0cyB4eHNwbHR3IFVJTT0xIGFmdGVyIG10dnNyZCBvbiB0aGUK KysgICAgLy8gUE9XRVI4IHNwbGF0WDQgcGF0aCDigJQgbXR2c3JkIHB1dHMgdGhlIEdQUidzIGxv dyAzMiBiaXRzIGluIEJFCisrICAgIC8vIHdvcmQgMSAoPSBMRSB3b3JkIDIgb24gSFcpLCBzbyB4 eHNwbHR3IFVJTT0xIHBpY2tzIHVwIGV4YWN0bHkKKysgICAgLy8gdGhhdCB3b3JkIGFuZCBzcGxh dHMgaXQgdG8gZXZlcnkgbGFuZS4KKysgICAgY2FzZSAxNjQ6IHsgIC8vIHh4c3BsdHcKKysgICAg ICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhi ID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsK KysgICAgICB1aW50MzJfdCB1aW0gPSAoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAm IDB4MzsKKysgICAgICB1aW50MzJfdCBsZUlkeCA9IDMgLSB1aW07ICAvLyBCRSB3b3JkIFVJTSDi hpIgTEUgd29yZCAoMy1VSU0pCisrICAgICAgdWludDhfdCBiYlsxNl0sIHJlc3VsdFsxNl07Cisr ICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgdWludDMyX3Qgd29yZCA9ICh1aW50MzJf dCliYltsZUlkeCAqIDRdIHwKKysgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlts ZUlkeCAqIDQgKyAxXSA8PCA4KSB8CisrICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3Qp YmJbbGVJZHggKiA0ICsgMl0gPDwgMTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgKCh1aW50 MzJfdCliYltsZUlkeCAqIDQgKyAzXSA8PCAyNCk7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKKysgICAgICAgIHJlc3VsdFtpICogNF0gICAgID0gKHVpbnQ4X3QpKHdvcmQg JiAweEZGKTsKKysgICAgICAgIHJlc3VsdFtpICogNCArIDFdID0gKHVpbnQ4X3QpKCh3b3JkID4+ IDgpICYgMHhGRik7CisrICAgICAgICByZXN1bHRbaSAqIDQgKyAyXSA9ICh1aW50OF90KSgod29y ZCA+PiAxNikgJiAweEZGKTsKKysgICAgICAgIHJlc3VsdFtpICogNCArIDNdID0gKHVpbnQ4X3Qp KCh3b3JkID4+IDI0KSAmIDB4RkYpOworKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIHJl c3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFhYMi1mb3JtOiB4 eGV4dHJhY3R1dyAoZXh0cmFjdCB3b3JkIGF0IEJFIGJ5dGUgVUlNLCBwbGFjZSBhdCBCRSB3b3Jk IDEpID09PQorKyAgICAvLworKyAgICAvLyB4eGV4dHJhY3R1dyBYVCwgWEIsIFVJTToKKysgICAg Ly8gICBCeXRlcyBbNDo3XSBvZiBYVCByZWNlaXZlIGJ5dGVzIFtVSU06VUlNKzNdIG9mIFhCLiBC eXRlcyBbMDozXQorKyAgICAvLyAgIGFuZCBbODoxNV0gb2YgWFQgYXJlIHNldCB0byB6ZXJvLgor KyAgICAvLyBVSU0g4oiIIHswLCA0LCA4LCAxMn0gKGNhbGxlciByZXNwb25zaWJsZSBmb3IgYWxp Z25tZW50KS4KKysgICAgLy8gQkUgYnl0ZSBpIOKGlCBMRSBieXRlICgxNS1pKSwgc28gdGhlIHdv cmQgYXQgWEIgQkUgYnl0ZXMgVUlNLi5VSU0rMworKyAgICAvLyBzaXRzIGF0IFhCIExFIGJ5dGVz ICgxMi1VSU0pLi4oMTUtVUlNKSwgYW5kIGxhbmRzIGF0IFhUIExFIGJ5dGVzCisrICAgIC8vIDgu LjExICg9IFhUIEJFIHdvcmQgMSkuCisrICAgIGNhc2UgMTY1OiB7ICAvLyB4eGV4dHJhY3R1dwor KyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBp bnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8 IDUpOworKyAgICAgIHVpbnQzMl90IHVpbSA9IChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4g MTYpICYgMHhGOworKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCByZXN1bHRbMTZdOworKyAgICAgIGdl dFZTUjEyOCh4YiwgYmIpOworKyAgICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQp KTsKKysgICAgICAvLyByZXN1bHQuTEVbOC4uMTFdID0gWEIuTEVbKDEyLVVJTSkuLigxNS1VSU0p XSAocHJlc2VydmVzIGJ5dGUgb3JkZXIpLgorKyAgICAgIG1lbWNweShyZXN1bHQgKyA4LCBiYiAr ICgxMiAtIHVpbSksIDQpOworKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAgICBi cmVhazsKKysgICAgfQorKworKyAgICBjYXNlIDE4MDogeworKyAgICAgIC8vIHh4c3BsdGliIFhU LCBJTU04IChQT1dFUjksIElTQSAzLjApOiBzcGxhdCA4LWJpdCBpbW1lZGlhdGUgdG8KKysgICAg ICAvLyBhbGwgMTYgYnl0ZXMgb2YgWFQuIFRoZSBlbmNvZGVyIHdyaXRlcyBgaW1tOCA8PCAxMWAs IHNvIElNTTgKKysgICAgICAvLyBvY2N1cGllcyBMRSBiaXRzIDExLi4xODsgVFggYml0IGF0IExF IGJpdCAwIHNlbGVjdHMgdXBwZXIgVlNSLgorKyAgICAgIHVpbnQzMl90IGltbTggPSBpbnN0ci0+ Yml0cygxOCwgMTEpOworKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGlu c3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgeHRfYnl0ZXNbMTZdOworKyAgICAg IG1lbXNldCh4dF9ieXRlcywgKHVpbnQ4X3QpaW1tOCwgMTYpOworKyAgICAgIHNldFZTUjEyOCh4 dCwgeHRfYnl0ZXMpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTgxOiB7Cisr ICAgICAgLy8geHhpbnNlcnR3IFhULCBYQiwgVUlNIChQT1dFUjksIElTQSAzLjApOiBjb3B5IFhC WzMyLi42M10gKHRoZQorKyAgICAgIC8vIGxvdyAzMiBiaXRzIG9mIFhCJ3MgQkUgZG91Ymxld29y ZCAwLCB3aGljaCBsaXZlcyBhdCBMRSBieXRlcworKyAgICAgIC8vIDgtMTEgb2YgWEIpIGludG8g WFQgYXQgQkUgYnl0ZSBwb3NpdGlvbiBVSU0uIFVJTSDiiIggezAsNCw4LDEyfTsKKysgICAgICAv LyBkZXN0IG9jY3VwaWVzIFhUIExFIGJ5dGVzICgxMi1VSU0pLi4oMTUtVUlNKS4gT3RoZXIgYnl0 ZXMgb2YKKysgICAgICAvLyBYVCBhcmUgcHJlc2VydmVkLiBVSU0gYXQgUFBDIGJpdHMgMTEtMTUg PSBMRSBiaXRzIDE2LTIwOyBUWC9CWAorKyAgICAgIC8vIGF0IExFIGJpdHMgMC8xLgorKyAgICAg IHVpbnQzMl90IHVpbSA9IGluc3RyLT5iaXRzKDIwLCAxNik7CisrICAgICAgaW50IHh0ID0gaW50 KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhi ID0gaW50KGluc3RyLT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7CisrICAgICAg dWludDhfdCB4Yl9ieXRlc1sxNl0sIHh0X2J5dGVzWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIs IHhiX2J5dGVzKTsKKysgICAgICBnZXRWU1IxMjgoeHQsIHh0X2J5dGVzKTsKKysgICAgICBtZW1j cHkoeHRfYnl0ZXMgKyAoMTIgLSB1aW0pLCB4Yl9ieXRlcyArIDgsIDQpOworKyAgICAgIHNldFZT UjEyOCh4dCwgeHRfYnl0ZXMpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vID09 PSBYWDItZm9ybTogeHZhYnNzcCAvIHh2YWJzZHAgKHZlY3RvciBhYnNvbHV0ZSB2YWx1ZSkgPT09 CisrICAgIGNhc2UgNDA4OiBjYXNlIDQwOTogY2FzZSA0MTA6IGNhc2UgNDExOiB7ICAvLyB4dmFi c3NwICsgQVgvQlggYml0cworKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDAp IDw8IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJp dHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCByZXN1bHRbMTZd OworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NDsgaSsrKSB7CisrICAgICAgICB1aW50MzJfdCBiaXRzID0gKHVpbnQzMl90KWJiW2kgKiA0XSB8 CisrICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDFdIDw8IDgp IHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgMl0gPDwg MTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgM10g PDwgMjQpOworKyAgICAgICAgYml0cyAmPSAweDdGRkZGRkZGdTsgIC8vIGNsZWFyIHNpZ24gYml0 CisrICAgICAgICByZXN1bHRbaSAqIDRdICAgICA9ICh1aW50OF90KShiaXRzICYgMHhGRik7Cisr ICAgICAgICByZXN1bHRbaSAqIDQgKyAxXSA9ICh1aW50OF90KSgoYml0cyA+PiA4KSAmIDB4RkYp OworKyAgICAgICAgcmVzdWx0W2kgKiA0ICsgMl0gPSAodWludDhfdCkoKGJpdHMgPj4gMTYpICYg MHhGRik7CisrICAgICAgICByZXN1bHRbaSAqIDQgKyAzXSA9ICh1aW50OF90KSgoYml0cyA+PiAy NCkgJiAweEZGKTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDcyOiBjYXNlIDQ3MzogY2FzZSA0NzQ6IHsg ICAgICAgICAgICAvLyB4dmFic2RwICg0NzUgdXNlZCBieSB4eGJyZCkKKysgICAgICBpbnQgeHQg PSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KHJi IHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1 aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgdWludDY0X3QgYml0 cyA9IDA7CisrICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgYml0cyB8PSAoKHVp bnQ2NF90KWJiW2kgKiA4ICsga10pIDw8IChrICogOCk7CisrICAgICAgICBiaXRzICY9IDB4N0ZG RkZGRkZGRkZGRkZGRlVMTDsKKysgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSBy ZXN1bHRbaSAqIDggKyBrXSA9ICh1aW50OF90KSgoYml0cyA+PiAoayAqIDgpKSAmIDB4RkYpOwor KyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysKKysgICAgLy8gPT09IFhYMi1mb3JtIHVuYXJ5IHZlY3RvciBmbG9hdCBvcHMgKHNp bmdsZSBYQiBvcGVyYW5kLCBubyBBWCkgPT09CisrICAgIC8vCisrICAgIC8vIEVuY29kaW5nOiBv cGNvZGUgNjAsIGJpdHMgNi0xMD1YVCwgMTEtMTUgcmVzZXJ2ZWQsIDE2LTIwPVhCLAorKyAgICAv LyAyMS0yOSA9IDktYml0IFhPIChmdWxsIGZpZWxkKSwgMzA9QlgsIDMxPVRYLiBFeHRyYWN0aW9u IGdpdmVzIHVzCisrICAgIC8vIHhvID0gWE85IGRpcmVjdGx5IChubyBBWCBiaXQpLiBFdmVyeSBv cCBiZWxvdyBoYXMgYSB1bmlxdWUgWE85LgorKyAgICAvLworKyAgICAvLyAgIHh2c3FydHNwICBY Tzk9MTM5ICBQUENfeHZzcXJ0c3A9MHhGMDAwMDIyQworKyAgICAvLyAgIHh2c3FydGRwICBYTzk9 MjAzICBQUENfeHZzcXJ0ZHA9MHhGMDAwMDMyQworKyAgICAvLyAgIHh2bmVnc3AgICBYTzk9NDQx ICBQUENfeHZuZWdzcD0weEYwMDAwNkU0CisrICAgIC8vICAgeHZuZWdkcCAgIFhPOT01MDUgIFBQ Q194dm5lZ2RwPTB4RjAwMDA3RTQKKysgICAgLy8gICB4dnJzcGlwICAgWE85PTE2OSAgUFBDX3h2 cnNwaXA9MHhGMDAwMDJBNCAgIChyb3VuZCAraW5mID0gY2VpbCkKKysgICAgLy8gICB4dnJzcGl6 ICAgWE85PTE1MyAgUFBDX3h2cnNwaXo9MHhGMDAwMDI2NCAgIChyb3VuZCB0b3dhcmQgMCA9IHRy dW5jKQorKyAgICAvLyAgIHh2cnNwaW0gICBYTzk9MTg1ICBQUENfeHZyc3BpbT0weEYwMDAwMkU0 ICAgKHJvdW5kIC1pbmYgPSBmbG9vcikKKysgICAgLy8gICB4dnJzcGljICAgWE85PTE3MSAgUFBD X3h2cnNwaWM9MHhGMDAwMDJBQyAgIChyb3VuZCBwZXIgRlBTQ1IpCisrICAgIC8vICAgeHZyZHBp cCAgIFhPOT0yMzMgIFBQQ194dnJkcGlwPTB4RjAwMDAzQTQKKysgICAgLy8gICB4dnJkcGl6ICAg WE85PTIxNyAgUFBDX3h2cmRwaXo9MHhGMDAwMDM2NAorKyAgICAvLyAgIHh2cmRwaW0gICBYTzk9 MjQ5ICBQUENfeHZyZHBpbT0weEYwMDAwM0U0CisrICAgIC8vICAgeHZyZHBpYyAgIFhPOT0yMzUg IFBQQ194dnJkcGljPTB4RjAwMDAzQUMKKysgICAgLy8gICB4dmN2c3BzeHdzIFhPOT0xNTIgUFBD X3h2Y3ZzcHN4d3M9MHhGMDAwMDI2MCAgKGYzMiDihpIgczMyLCBzYXQpCisrICAgIC8vICAgeHZj dnNwdXh3cyBYTzk9MTM2IFBQQ194dmN2c3B1eHdzPTB4RjAwMDAyMjAgIChmMzIg4oaSIHUzMiwg c2F0KQorKyAgICAvLyAgIHh2Y3ZzeHdzcCBYTzk9MTg0ICBQUENfeHZjdnN4d3NwPTB4RjAwMDAy RTAgICAoczMyIOKGkiBmMzIpCisrICAgIC8vICAgeHZjdnV4d3NwIFhPOT0xNjggIFBQQ194dmN2 dXh3c3A9MHhGMDAwMDJBMCAgICh1MzIg4oaSIGYzMikKKysgICAgY2FzZSAxMzk6IGNhc2UgMjAz OiAgICAgLy8geHZzcXJ0c3AgLyB4dnNxcnRkcAorKyAgICBjYXNlIDQ0MTogY2FzZSA1MDU6ICAg ICAvLyB4dm5lZ3NwIC8geHZuZWdkcAorKyAgICBjYXNlIDE2OTogY2FzZSAyMzM6ICAgICAvLyB4 dnJzcGlwIC8geHZyZHBpcCAoY2VpbCkKKysgICAgY2FzZSAxNTM6IGNhc2UgMjE3OiAgICAgLy8g eHZyc3BpeiAvIHh2cmRwaXogKHRydW5jKQorKyAgICBjYXNlIDE4NTogY2FzZSAyNDk6ICAgICAv LyB4dnJzcGltIC8geHZyZHBpbSAoZmxvb3IpCisrICAgIGNhc2UgMTcxOiBjYXNlIDIzNTogICAg IC8vIHh2cnNwaWMgLyB4dnJkcGljIChyb3VuZC10by1uZWFyZXN0KQorKyAgICBjYXNlIDEzNjog Y2FzZSAxNTI6ICAgICAvLyB4dmN2c3B1eHdzIC8geHZjdnNwc3h3cworKyAgICBjYXNlIDE2ODog Y2FzZSAxODQ6IHsgICAvLyB4dmN2dXh3c3AgLyB4dmN2c3h3c3AKKysgICAgICBpbnQgeHQgPSBp bnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwg KChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50 OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAg ICBib29sIGlzU3AgPSAoeG8gPT0gMTM5IHx8IHhvID09IDQ0MSB8fCB4byA9PSAxNjkgfHwgeG8g PT0gMTUzIHx8CisrICAgICAgICAgICAgICAgICAgIHhvID09IDE4NSB8fCB4byA9PSAxNzEgfHwg eG8gPT0gMTM2IHx8IHhvID09IDE1MiB8fAorKyAgICAgICAgICAgICAgICAgICB4byA9PSAxNjgg fHwgeG8gPT0gMTg0KTsKKysgICAgICBhdXRvIGdldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50 IGkpIC0+IGZsb2F0IHsKKysgICAgICAgIHVpbnQzMl90IGIgPSAodWludDMyX3QpYnVmW2kgKiA0 XSB8CisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAxXSA8PCA4 KSB8CisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAyXSA8PCAx NikgfAorKyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgM10gPDwg MjQpOworKyAgICAgICAgZmxvYXQgZjsgbWVtY3B5KCZmLCAmYiwgc2l6ZW9mKGYpKTsgcmV0dXJu IGY7CisrICAgICAgfTsKKysgICAgICBhdXRvIHNldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50 IGksIGZsb2F0IGYpIHsKKysgICAgICAgIHVpbnQzMl90IGI7IG1lbWNweSgmYiwgJmYsIHNpemVv ZihiKSk7CisrICAgICAgICBidWZbaSo0XT0odWludDhfdCliOyBidWZbaSo0KzFdPSh1aW50OF90 KShiPj44KTsKKysgICAgICAgIGJ1ZltpKjQrMl09KHVpbnQ4X3QpKGI+PjE2KTsgYnVmW2kqNCsz XT0odWludDhfdCkoYj4+MjQpOworKyAgICAgIH07CisrICAgICAgYXV0byBnZXRGNjQgPSBbXSh1 aW50OF90KiBidWYsIGludCBpKSAtPiBkb3VibGUgeworKyAgICAgICAgdWludDY0X3QgYiA9IDA7 CisrICAgICAgICBmb3IgKGludCBrPTA7azw4O2srKykgYiB8PSAoKHVpbnQ2NF90KWJ1ZltpKjgr a10pPDwoayo4KTsKKysgICAgICAgIGRvdWJsZSBkOyBtZW1jcHkoJmQsICZiLCBzaXplb2YoZCkp OyByZXR1cm4gZDsKKysgICAgICB9OworKyAgICAgIGF1dG8gc2V0RjY0ID0gW10odWludDhfdCog YnVmLCBpbnQgaSwgZG91YmxlIGQpIHsKKysgICAgICAgIHVpbnQ2NF90IGI7IG1lbWNweSgmYiwg JmQsIHNpemVvZihiKSk7CisrICAgICAgICBmb3IgKGludCBrPTA7azw4O2srKykgYnVmW2kqOCtr XT0odWludDhfdCkoYj4+KGsqOCkpOworKyAgICAgIH07CisrICAgICAgLy8gSW50ZWdlciBsYW5l IHJlYWQvd3JpdGUgKHVzZWQgYnkgY29udmVyc2lvbiBvcHMpLgorKyAgICAgIGF1dG8gc2V0VTMy ID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgdWludDMyX3QgdikgeworKyAgICAgICAgYnVmW2kq NF09KHVpbnQ4X3QpdjsgYnVmW2kqNCsxXT0odWludDhfdCkodj4+OCk7CisrICAgICAgICBidWZb aSo0KzJdPSh1aW50OF90KSh2Pj4xNik7IGJ1ZltpKjQrM109KHVpbnQ4X3QpKHY+PjI0KTsKKysg ICAgICB9OworKyAgICAgIC8vIFNhdHVyYXRlZCBmbG9hdOKGkmludCBjb252ZXJzaW9uIHBlciBQ b3dlciBJU0EgdjMuMEI6IGlucHV0IE5hTiBtYXBzCisrICAgICAgLy8gdG8gMDsgb3V0LW9mLXJh bmdlIHNhdHVyYXRlcyB0byB0aGUgZXh0cmVtZSBvZiB0aGUgZGVzdGluYXRpb24gdHlwZS4KKysg ICAgICBhdXRvIGZwMnN4dyA9IFtdKGRvdWJsZSBmKSAtPiB1aW50MzJfdCB7CisrICAgICAgICBp ZiAoc3RkOjppc25hbihmKSkgcmV0dXJuIDA7CisrICAgICAgICBpZiAoZiA+PSAoZG91YmxlKUlO VDMyX01BWCkgcmV0dXJuICh1aW50MzJfdClJTlQzMl9NQVg7CisrICAgICAgICBpZiAoZiA8PSAo ZG91YmxlKUlOVDMyX01JTikgcmV0dXJuICh1aW50MzJfdClJTlQzMl9NSU47CisrICAgICAgICBy ZXR1cm4gKHVpbnQzMl90KShpbnQzMl90KXN0ZDo6dHJ1bmMoZik7CisrICAgICAgfTsKKysgICAg ICBhdXRvIGZwMnV4dyA9IFtdKGRvdWJsZSBmKSAtPiB1aW50MzJfdCB7CisrICAgICAgICBpZiAo c3RkOjppc25hbihmKSkgcmV0dXJuIDA7CisrICAgICAgICBpZiAoZiA+PSAoZG91YmxlKVVJTlQz Ml9NQVgpIHJldHVybiBVSU5UMzJfTUFYOworKyAgICAgICAgaWYgKGYgPD0gMC4wKSByZXR1cm4g MDsKKysgICAgICAgIHJldHVybiAodWludDMyX3Qpc3RkOjp0cnVuYyhmKTsKKysgICAgICB9Owor KworKyAgICAgIGlmIChpc1NwKSB7CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr KykgeworKyAgICAgICAgICBmbG9hdCB2ID0gZ2V0RjMyKGJiLCBpKTsKKysgICAgICAgICAgZmxv YXQgb3V0ID0gMC4wZjsKKysgICAgICAgICAgdWludDMyX3QgaW91dCA9IDA7CisrICAgICAgICAg IGJvb2wgaXNJbnQgPSBmYWxzZTsKKysgICAgICAgICAgc3dpdGNoICh4bykgeworKyAgICAgICAg ICAgIGNhc2UgMTM5OiBvdXQgPSBzdGQ6OnNxcnQodik7IGJyZWFrOyAgICAgICAgICAgICAgICAv LyB4dnNxcnRzcAorKyAgICAgICAgICAgIGNhc2UgNDQxOiBvdXQgPSAtdjsgYnJlYWs7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyB4dm5lZ3NwCisrICAgICAgICAgICAgY2FzZSAxNjk6IG91 dCA9IHN0ZDo6Y2VpbCh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgIC8vIHh2cnNwaXAKKysgICAg ICAgICAgICBjYXNlIDE1Mzogb3V0ID0gc3RkOjp0cnVuYyh2KTsgYnJlYWs7ICAgICAgICAgICAg ICAgLy8geHZyc3BpegorKyAgICAgICAgICAgIGNhc2UgMTg1OiBvdXQgPSBzdGQ6OmZsb29yKHYp OyBicmVhazsgICAgICAgICAgICAgICAvLyB4dnJzcGltCisrICAgICAgICAgICAgY2FzZSAxNzE6 IG91dCA9IHN0ZDo6bmVhcmJ5aW50KHYpOyBicmVhazsgICAgICAgICAgIC8vIHh2cnNwaWMKKysg ICAgICAgICAgICBjYXNlIDE1MjogaW91dCA9IGZwMnN4dyh2KTsgaXNJbnQgPSB0cnVlOyBicmVh azsgICAgLy8geHZjdnNwc3h3cworKyAgICAgICAgICAgIGNhc2UgMTM2OiBpb3V0ID0gZnAydXh3 KHYpOyBpc0ludCA9IHRydWU7IGJyZWFrOyAgICAvLyB4dmN2c3B1eHdzCisrICAgICAgICAgICAg Y2FzZSAxODQ6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4 dmN2c3h3c3AKKysgICAgICAgICAgICAgIHVpbnQzMl90IGJpdHMgPSAodWludDMyX3QpYmJbaSo0 XSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrMV08 PDgpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCsy XTw8MTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kq NCszXTw8MjQpOworKyAgICAgICAgICAgICAgb3V0ID0gKGZsb2F0KShpbnQzMl90KWJpdHM7Cisr ICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgY2FzZSAx Njg6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4dmN2dXh3 c3AKKysgICAgICAgICAgICAgIHVpbnQzMl90IGJpdHMgPSAodWludDMyX3QpYmJbaSo0XSB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrMV08PDgpIHwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCsyXTw8MTYp IHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCszXTw8 MjQpOworKyAgICAgICAgICAgICAgb3V0ID0gKGZsb2F0KSh1aW50MzJfdCliaXRzOworKyAgICAg ICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICAg IGlmIChpc0ludCkgc2V0VTMyKHJlc3VsdCwgaSwgaW91dCk7CisrICAgICAgICAgIGVsc2Ugc2V0 RjMyKHJlc3VsdCwgaSwgb3V0KTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgeworKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgICAgZG91YmxlIHYgPSBn ZXRGNjQoYmIsIGkpOworKyAgICAgICAgICBkb3VibGUgb3V0ID0gMC4wOworKyAgICAgICAgICBz d2l0Y2ggKHhvKSB7CisrICAgICAgICAgICAgY2FzZSAyMDM6IG91dCA9IHN0ZDo6c3FydCh2KTsg YnJlYWs7ICAgICAgICAgICAgICAgIC8vIHh2c3FydGRwCisrICAgICAgICAgICAgY2FzZSA1MDU6 IG91dCA9IC12OyBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHh2bmVnZHAKKysg ICAgICAgICAgICBjYXNlIDIzMzogb3V0ID0gc3RkOjpjZWlsKHYpOyBicmVhazsgICAgICAgICAg ICAgICAgLy8geHZyZHBpcAorKyAgICAgICAgICAgIGNhc2UgMjE3OiBvdXQgPSBzdGQ6OnRydW5j KHYpOyBicmVhazsgICAgICAgICAgICAgICAvLyB4dnJkcGl6CisrICAgICAgICAgICAgY2FzZSAy NDk6IG91dCA9IHN0ZDo6Zmxvb3Iodik7IGJyZWFrOyAgICAgICAgICAgICAgIC8vIHh2cmRwaW0K KysgICAgICAgICAgICBjYXNlIDIzNTogb3V0ID0gc3RkOjpuZWFyYnlpbnQodik7IGJyZWFrOyAg ICAgICAgICAgLy8geHZyZHBpYworKyAgICAgICAgICB9CisrICAgICAgICAgIHNldEY2NChyZXN1 bHQsIGksIG91dCk7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwg cmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gWFgzLWZvcm0g dmVjdG9yIGZsb2F0IGNvbXBhcmUgKGVxLCBndCwgZ2UpID09PQorKyAgICAvLyBUaGUgd2FzbSBT SU1EIGNvbXBhcmVzIGVtaXQgdGhlc2UgYW5kIHVzZSB0aGUgcmVzdWx0IGFzIGEgYml0bWFzay4K KysgICAgLy8gUGVyIFBvd2VyIElTQTogcmVzdWx0IGlzIGFsbC0xcyBmb3IgdHJ1ZSBsYW5lcywg YWxsLTBzIGZvciBmYWxzZQorKyAgICAvLyAoZm9yIHRoZSBub24tcmVjb3JkaW5nIGZvcm07IGJp dCAwIG9mIFhPIHNlbGVjdHMgcmVjb3JkIGZvcm0gd2hpY2gKKysgICAgLy8gd2UgZG9uJ3QgbW9k ZWwg4oCUIHdhc20gZG9lc24ndCByZWFkIENSNiBoZXJlKS4KKysgICAgLy8gRW5jb2RpbmdzOgor KyAgICAvLyAgIDB4RjAwMDAyMTggeHZjbXBlcXNwIChYTzg9NjcpIOKGkiBYTzkgPSAxMzQvMTM1 ICgrQVgpLgorKyAgICAvLyAgIDB4RjAwMDAyNTggeHZjbXBndHNwIChYTzg9NzUpIOKGkiBYTzkg PSAxNTAvMTUxLgorKyAgICAvLyAgIDB4RjAwMDAyOTggeHZjbXBnZXNwIChYTzg9ODMpIOKGkiBY TzkgPSAxNjYvMTY3LgorKyAgICAvLyAgIDB4RjAwMDAzMTggeHZjbXBlcWRwIChYTzg9OTkpIOKG kiBYTzkgPSAxOTgvMTk5LgorKyAgICAvLyAgIDB4RjAwMDAzNTggeHZjbXBndGRwIChYTzg9MTA3 KSDihpIgWE85ID0gMjE0LzIxNS4KKysgICAgLy8gICAweEYwMDAwMzk4IHh2Y21wZ2VkcCAoWE84 PTExNSkg4oaSIFhPOSA9IDIzMC8yMzEuCisrICAgIC8vIFJjPTEgcmVjb3JkIGZvcm0gZmxpcHMg SVNBIGJpdCAyMSAoc2ltIGJpdCAxMCksIHlpZWxkaW5nIFhPOSsyNTYKKysgICAgLy8gKG5vdCBh ZGphY2VudCB0byB0aGUgUmM9MCBzbG90KS4gd2FzbSBuZXZlciBlbWl0cyB0aGUgcmVjb3JkIGZv cm0uCisrICAgIGNhc2UgMTM0OiBjYXNlIDEzNTogICAgLy8geHZjbXBlcXNwIChYTzg9NjcpCisr ICAgIGNhc2UgMTk4OiBjYXNlIDE5OTogICAgLy8geHZjbXBlcWRwIChYTzg9OTkpCisrICAgIGNh c2UgMTUwOiBjYXNlIDE1MTogICAgLy8geHZjbXBndHNwIChYTzg9NzUpCisrICAgIGNhc2UgMjE0 OiBjYXNlIDIxNTogICAgLy8geHZjbXBndGRwIChYTzg9MTA3KQorKyAgICBjYXNlIDE2NjogY2Fz ZSAxNjc6ICAgIC8vIHh2Y21wZ2VzcCAoWE84PTgzKQorKyAgICBjYXNlIDIzMDogY2FzZSAyMzE6 IHsgIC8vIHh2Y21wZ2VkcCAoWE84PTExNSkKKysgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5z dHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgp OworKyAgICAgIGludCB4YSA9IGludChyYSB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+ IDIpICYgMSkgPDwgNSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1 Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50OF90IGFiWzE2XSwgYmJb MTZdLCByZXN1bHRbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YSwgYWIpOworKyAgICAgIGdldFZT UjEyOCh4YiwgYmIpOworKyAgICAgIHVpbnQzMl90IG9wOCA9IHhvID4+IDE7ICAvLyBjYW5vbmlj YWwgOC1iaXQgWE8KKysgICAgICBib29sIGlzRjMyID0gKG9wOCA9PSA2NyB8fCBvcDggPT0gNzUg fHwgb3A4ID09IDgzKTsKKysgICAgICBib29sIGlzRXEgID0gKG9wOCA9PSA2NyB8fCBvcDggPT0g OTkpOworKyAgICAgIGJvb2wgaXNHdCAgPSAob3A4ID09IDc1IHx8IG9wOCA9PSAxMDcpOworKyAg ICAgIGJvb2wgaXNHZSAgPSAob3A4ID09IDgzIHx8IG9wOCA9PSAxMTUpOworKyAgICAgICh2b2lk KWlzR2U7CisrICAgICAgYXV0byBjbXBGMzIgPSBbJl0oaW50IGkpIC0+IGJvb2wgeworKyAgICAg ICAgdWludDMyX3QgYUJpdHMgPSAodWludDMyX3QpYWJbaSAqIDRdIHwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgKCh1aW50MzJfdClhYltpICogNCArIDFdIDw8IDgpIHwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgKCh1aW50MzJfdClhYltpICogNCArIDJdIDw8IDE2KSB8CisrICAgICAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYWJbaSAqIDQgKyAzXSA8PCAyNCk7CisrICAg ICAgICB1aW50MzJfdCBiQml0cyA9ICh1aW50MzJfdCliYltpICogNF0gfAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgMV0gPDwgOCkgfAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgMl0gPDwgMTYpIHwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDNdIDw8IDI0KTsKKysg ICAgICAgIGZsb2F0IGZhLCBmYjsKKysgICAgICAgIG1lbWNweSgmZmEsICZhQml0cywgc2l6ZW9m KGZhKSk7CisrICAgICAgICBtZW1jcHkoJmZiLCAmYkJpdHMsIHNpemVvZihmYikpOworKyAgICAg ICAgaWYgKGlzRXEpIHJldHVybiBmYSA9PSBmYjsKKysgICAgICAgIGlmIChpc0d0KSByZXR1cm4g ZmEgPiBmYjsKKysgICAgICAgIHJldHVybiBmYSA+PSBmYjsKKysgICAgICB9OworKyAgICAgIGF1 dG8gY21wRjY0ID0gWyZdKGludCBpKSAtPiBib29sIHsKKysgICAgICAgIHVpbnQ2NF90IGFCaXRz ID0gMCwgYkJpdHMgPSAwOworKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIGFC aXRzIHw9ICgodWludDY0X3QpYWJbaSAqIDggKyBrXSkgPDwgKGsgKiA4KTsKKysgICAgICAgIGZv ciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSBiQml0cyB8PSAoKHVpbnQ2NF90KWJiW2kgKiA4ICsg a10pIDw8IChrICogOCk7CisrICAgICAgICBkb3VibGUgZmEsIGZiOworKyAgICAgICAgbWVtY3B5 KCZmYSwgJmFCaXRzLCBzaXplb2YoZmEpKTsKKysgICAgICAgIG1lbWNweSgmZmIsICZiQml0cywg c2l6ZW9mKGZiKSk7CisrICAgICAgICBpZiAoaXNFcSkgcmV0dXJuIGZhID09IGZiOworKyAgICAg ICAgaWYgKGlzR3QpIHJldHVybiBmYSA+IGZiOworKyAgICAgICAgcmV0dXJuIGZhID49IGZiOwor KyAgICAgIH07CisrICAgICAgaWYgKGlzRjMyKSB7CisrICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDQ7IGkrKykgeworKyAgICAgICAgICB1aW50MzJfdCBtYXNrID0gY21wRjMyKGkpID8gMHhG RkZGRkZGRnUgOiAwOworKyAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykgewor KyAgICAgICAgICAgIHJlc3VsdFtpICogNCArIGtdID0gKHVpbnQ4X3QpKChtYXNrID4+IChrICog OCkpICYgMHhGRik7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9IGVsc2Ugewor KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgICAgdWludDY0 X3QgbWFzayA9IGNtcEY2NChpKSA/IFVJTlQ2NF9NQVggOiAwOworKyAgICAgICAgICBmb3IgKGlu dCBrID0gMDsgayA8IDg7IGsrKykgeworKyAgICAgICAgICAgIHJlc3VsdFtpICogOCArIGtdID0g KHVpbnQ4X3QpKChtYXNrID4+IChrICogOCkpICYgMHhGRik7CisrICAgICAgICAgIH0KKysgICAg ICAgIH0KKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrCisrICAgIC8vID09PSBYWDMtZm9ybSB2ZWN0b3IgZmxvYXQgYXJpdGht ZXRpYyA9PT0KKysgICAgLy8gRW5jb2Rpbmc6IGJpdHMgNi0xMD1YVCwgMTEtMTU9WEEsIDE2LTIw PVhCLCAyMS0yOD1YTyAoOCBiaXRzKSwgMjk9QVgsCisrICAgIC8vIDMwPUJYLCAzMT1UWC4gV2Ug ZGlzcGF0Y2hlZCBhYm92ZSB1c2luZyBgYml0cygxMCwgMilgIHdoaWNoIGlzIGJpdHMKKysgICAg Ly8gMjEtMjkgKDkgYml0cykg4oCUIHRoYXQgaW5jbHVkZXMgdGhlIEFYIHJlZ2lzdGVyLWV4dGVu c2lvbiBiaXQsIHdoaWNoCisrICAgIC8vIGNoYW5nZXMgZm9yIGV2ZXJ5IFhBIGluIHswLi4zMX0g dnMgezMyLi42M30uIFRvIG1hdGNoIGFsbCA0CisrICAgIC8vIChBWCxCWCkgY29tYmluYXRpb25z IG9mIGFuIFhYMyBvcCB3ZSB1c2UgYGNhc2UgeG8zIHwgMHwxfDJ8M2Agd2hlcmUKKysgICAgLy8g eG8zID0gKDgtYml0IFhPKSA8PCAxIChiZWNhdXNlIFhPIG9jY3VwaWVzIGJpdHMgMS4uOCBvZiBv dXIgOS1iaXQKKysgICAgLy8gZXh0cmFjdGlvbikuIEhlbHBlciBtYWNybzogZWFjaCBjYXNlIGNv dmVycyBmb3VyIGxhYmVscy4KKysgICAgI2RlZmluZSBYWDNfQ0FTRV9CQVNFKG5hbWUpIFwKKysg ICAgICBjYXNlICgobmFtZSkgfCAwKTogY2FzZSAoKG5hbWUpIHwgMSk6CisrICAgIGNhc2UgMTI4 OiAgY2FzZSAxMjk6ICAvLyB4dmFkZHNwOiA0IMOXIGYzMiBhZGQgKFhPPTY0IOKGkiBiaXRzIDEu LjggPSAxMjgpCisrICAgIGNhc2UgMTkyOiAgY2FzZSAxOTM6ICAvLyB4dmFkZGRwCisrICAgIGNh c2UgMTQ0OiAgY2FzZSAxNDU6ICAvLyB4dnN1YnNwCisrICAgIGNhc2UgMjA4OiAgY2FzZSAyMDk6 ICAvLyB4dnN1YmRwCisrICAgIGNhc2UgMTYwOiAgY2FzZSAxNjE6ICAvLyB4dm11bHNwCisrICAg IGNhc2UgMjI0OiAgY2FzZSAyMjU6ICAvLyB4dm11bGRwCisrICAgIGNhc2UgMTc2OiAgY2FzZSAx Nzc6ICAvLyB4dmRpdnNwCisrICAgIGNhc2UgMjQwOiAgY2FzZSAyNDE6ICAvLyB4dmRpdmRwCisr ICAgIGNhc2UgMzg0OiAgY2FzZSAzODU6ICAvLyB4dm1heHNwCisrICAgIGNhc2UgNDQ4OiAgY2Fz ZSA0NDk6ICAvLyB4dm1heGRwCisrICAgIGNhc2UgNDAwOiAgY2FzZSA0MDE6ICAvLyB4dm1pbnNw CisrICAgIGNhc2UgNDY0OiAgY2FzZSA0NjU6ICAvLyB4dm1pbmRwCisrICAgIHsKKysgICAgICAv LyBSZS1leHRyYWN0IHRoZSBjYW5vbmljYWwgOC1iaXQgWFgzIFhPLgorKyAgICAgIHVpbnQzMl90 IHhvMyA9ICh4byA+PiAxKTsKKysgICAgICAodm9pZCl4bzM7CisrICAgICAgaW50IHh0ID0gaW50 KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQzMl90IHJhID0gaW5zdHIt PnJhVmFsdWUoKTsKKysgICAgICBpbnQgeGEgPSBpbnQocmEgfCAoKGluc3RyLT5pbnN0cnVjdGlv bkJpdHMoKSA+PiAyKSAmIDEpIDw8IDUpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5z dHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBh YlsxNl0sIGJiWzE2XSwgcmJfYnl0ZXNbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YSwgYWIpOwor KyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKworKyAgICAgIGF1dG8gZ2V0RjMyID0gW10odWlu dDhfdCogYnVmLCBpbnQgaSkgLT4gZmxvYXQgeworKyAgICAgICAgdWludDMyX3QgYml0cyA9ICh1 aW50MzJfdClidWZbaSAqIDRdIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90 KWJ1ZltpICogNCArIDFdIDw8IDgpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQz Ml90KWJ1ZltpICogNCArIDJdIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdClidWZbaSAqIDQgKyAzXSA8PCAyNCk7CisrICAgICAgICBmbG9hdCBmOworKyAgICAg ICAgbWVtY3B5KCZmLCAmYml0cywgc2l6ZW9mKGYpKTsKKysgICAgICAgIHJldHVybiBmOworKyAg ICAgIH07CisrICAgICAgYXV0byBzZXRGMzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBmbG9h dCBmKSB7CisrICAgICAgICB1aW50MzJfdCBiaXRzOworKyAgICAgICAgbWVtY3B5KCZiaXRzLCAm Ziwgc2l6ZW9mKGJpdHMpKTsKKysgICAgICAgIGJ1ZltpICogNF0gICAgID0gKHVpbnQ4X3QpKGJp dHMgJiAweEZGKTsKKysgICAgICAgIGJ1ZltpICogNCArIDFdID0gKHVpbnQ4X3QpKChiaXRzID4+ IDgpICYgMHhGRik7CisrICAgICAgICBidWZbaSAqIDQgKyAyXSA9ICh1aW50OF90KSgoYml0cyA+ PiAxNikgJiAweEZGKTsKKysgICAgICAgIGJ1ZltpICogNCArIDNdID0gKHVpbnQ4X3QpKChiaXRz ID4+IDI0KSAmIDB4RkYpOworKyAgICAgIH07CisrICAgICAgYXV0byBnZXRGNjQgPSBbXSh1aW50 OF90KiBidWYsIGludCBpKSAtPiBkb3VibGUgeworKyAgICAgICAgdWludDY0X3QgYml0cyA9IDA7 CisrICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgYml0cyB8PSAoKHVpbnQ2NF90 KWJ1ZltpICogOCArIGtdKSA8PCAoayAqIDgpOworKyAgICAgICAgZG91YmxlIGQ7CisrICAgICAg ICBtZW1jcHkoJmQsICZiaXRzLCBzaXplb2YoZCkpOworKyAgICAgICAgcmV0dXJuIGQ7CisrICAg ICAgfTsKKysgICAgICBhdXRvIHNldEY2NCA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGksIGRvdWJs ZSBkKSB7CisrICAgICAgICB1aW50NjRfdCBiaXRzOworKyAgICAgICAgbWVtY3B5KCZiaXRzLCAm ZCwgc2l6ZW9mKGJpdHMpKTsKKysgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSBi dWZbaSAqIDggKyBrXSA9ICh1aW50OF90KSgoYml0cyA+PiAoayAqIDgpKSAmIDB4RkYpOworKyAg ICAgIH07CisrCisrICAgICAgLy8gRGlzcGF0Y2ggb24gdGhlIGNhbm9uaWNhbCA4LWJpdCBYWDMg WE8gKGJpdHMgMjEuLjI4IFBQQyA9IHhvPj4xKS4KKysgICAgICBzd2l0Y2ggKHhvMykgeworKyAg ICAgICAgY2FzZSA2NDogIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSBzZXRGMzIocmJfYnl0 ZXMsIGksIGdldEYzMihhYiwgaSkgKyBnZXRGMzIoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmFkZHNw CisrICAgICAgICBjYXNlIDk2OiAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHNldEY2NChy Yl9ieXRlcywgaSwgZ2V0RjY0KGFiLCBpKSArIGdldEY2NChiYiwgaSkpOyBicmVhazsgIC8vIHh2 YWRkZHAKKysgICAgICAgIGNhc2UgNzI6ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgc2V0 RjMyKHJiX2J5dGVzLCBpLCBnZXRGMzIoYWIsIGkpIC0gZ2V0RjMyKGJiLCBpKSk7IGJyZWFrOyAg Ly8geHZzdWJzcAorKyAgICAgICAgY2FzZSAxMDQ6IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSBzZXRGNjQocmJfYnl0ZXMsIGksIGdldEY2NChhYiwgaSkgLSBnZXRGNjQoYmIsIGkpKTsgYnJl YWs7ICAvLyB4dnN1YmRwCisrICAgICAgICBjYXNlIDgwOiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0 OyBpKyspIHNldEYzMihyYl9ieXRlcywgaSwgZ2V0RjMyKGFiLCBpKSAqIGdldEYzMihiYiwgaSkp OyBicmVhazsgIC8vIHh2bXVsc3AKKysgICAgICAgIGNhc2UgMTEyOiBmb3IgKGludCBpID0gMDsg aSA8IDI7IGkrKykgc2V0RjY0KHJiX2J5dGVzLCBpLCBnZXRGNjQoYWIsIGkpICogZ2V0RjY0KGJi LCBpKSk7IGJyZWFrOyAgLy8geHZtdWxkcAorKyAgICAgICAgY2FzZSA4ODogIGZvciAoaW50IGkg PSAwOyBpIDwgNDsgaSsrKSBzZXRGMzIocmJfYnl0ZXMsIGksIGdldEYzMihhYiwgaSkgLyBnZXRG MzIoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmRpdnNwCisrICAgICAgICBjYXNlIDEyMDogZm9yIChp bnQgaSA9IDA7IGkgPCAyOyBpKyspIHNldEY2NChyYl9ieXRlcywgaSwgZ2V0RjY0KGFiLCBpKSAv IGdldEY2NChiYiwgaSkpOyBicmVhazsgIC8vIHh2ZGl2ZHAKKysgICAgICAgIC8vIHh2bWlue3Nw LGRwfSAvIHh2bWF4e3NwLGRwfToKKysgICAgICAgIC8vICAgSWYgYm90aCBvcGVyYW5kcyBhcmUg TmFOLCByZXN1bHQgaXMgdGhlIE5hTiBmcm9tIFhBLgorKyAgICAgICAgLy8gICBJZiBleGFjdGx5 IG9uZSBvcGVyYW5kIGlzIE5hTiwgcmVzdWx0IGlzIHRoZSBOT04tTmFOIG9wZXJhbmQuCisrICAg ICAgICAvLyAgIEZvciAwIC8gLTAsIHRyZWF0IC0wIDwgKzAgKHNpZ25lZC16ZXJvIG9yZGVyaW5n KTogeHZtaW5zcCgrMCwtMCkKKysgICAgICAgIC8vICAgPSAtMCwgeHZtYXhzcCgrMCwtMCkgPSAr MCwgaW4gZWl0aGVyIG9wZXJhbmQgb3JkZXIuCisrICAgICAgICAvLyAgIE90aGVyd2lzZSwgcmVz dWx0IGlzIElFRUUgbWluL21heChhLCBiKS4KKysgICAgICAgIC8vIFRoaXMgZGlmZmVycyBmcm9t IElFRUUgNzU0ICh3aGljaCBwcm9wYWdhdGVzIE5hTikgYW5kIGlzCisrICAgICAgICAvLyByZWxp ZWQgdXBvbiBieSB3YXNtIHJlbGF4ZWRfbWluL21heCAoYnVnMTk0NjYxOC5qcykgYW5kIGJ5Cisr ICAgICAgICAvLyB3YXNtIGYzMng0Lm1pbigwLC0wKSByZXR1cm5pbmcgLTAgKHNpbWRfZjMyeDQu d2FzdC5qcykuCisrICAgICAgICAjZGVmaW5lIFhWX01BWChULCBhLCBiKSBbXShUIGFfLCBUIGJf KSAtPiBUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYm9vbCBhbiA9 IHN0ZDo6aXNuYW4oYV8pLCBibiA9IHN0ZDo6aXNuYW4oYl8pOyAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICBpZiAoYW4gJiYgYm4pIHJldHVybiBhXzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpZiAoYW4pIHJldHVy biBiXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICBpZiAoYm4pIHJldHVybiBhXzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpZiAoYV8gPT0gMC4wICYm IGJfID09IDAuMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgIC8qIC0wIGlzIHNtYWxsZXIgdGhhbiArMDsgbWF4IHBpY2tzICswLiAqLyAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnNpZ25i aXQoYV8pID8gYl8gOiBhXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYV8sIGJf KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgfShhLCBiKQorKyAgICAgICAgI2RlZmluZSBYVl9NSU4oVCwgYSwgYikgW10oVCBhXywgVCBi XykgLT4gVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJvb2wgYW4g PSBzdGQ6OmlzbmFuKGFfKSwgYm4gPSBzdGQ6OmlzbmFuKGJfKTsgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgaWYgKGFuICYmIGJuKSByZXR1cm4gYV87ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKGFuKSByZXR1 cm4gYl87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgaWYgKGJuKSByZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKGFfID09IDAuMCAm JiBiXyA9PSAwLjApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgICAvKiAtMCBpcyBzbWFsbGVyIHRoYW4gKzA7IG1pbiBwaWNrcyAtMC4gKi8g ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gc3RkOjpzaWdu Yml0KGFfKSA/IGFfIDogYl87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGFfLCBi Xyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgIH0oYSwgYikKKysgICAgICAgIGNhc2UgMTkyOiBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr KykgeyAgLy8geHZtYXhzcAorKyAgICAgICAgICBmbG9hdCBhID0gZ2V0RjMyKGFiLCBpKSwgYiA9 IGdldEYzMihiYiwgaSk7CisrICAgICAgICAgIHNldEYzMihyYl9ieXRlcywgaSwgWFZfTUFYKGZs b2F0LCBhLCBiKSk7CisrICAgICAgICB9IGJyZWFrOworKyAgICAgICAgY2FzZSAyMjQ6IGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7ICAvLyB4dm1heGRwCisrICAgICAgICAgIGRvdWJsZSBh ID0gZ2V0RjY0KGFiLCBpKSwgYiA9IGdldEY2NChiYiwgaSk7CisrICAgICAgICAgIHNldEY2NChy Yl9ieXRlcywgaSwgWFZfTUFYKGRvdWJsZSwgYSwgYikpOworKyAgICAgICAgfSBicmVhazsKKysg ICAgICAgIGNhc2UgMjAwOiBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeyAgLy8geHZtaW5z cAorKyAgICAgICAgICBmbG9hdCBhID0gZ2V0RjMyKGFiLCBpKSwgYiA9IGdldEYzMihiYiwgaSk7 CisrICAgICAgICAgIHNldEYzMihyYl9ieXRlcywgaSwgWFZfTUlOKGZsb2F0LCBhLCBiKSk7Cisr ICAgICAgICB9IGJyZWFrOworKyAgICAgICAgY2FzZSAyMzI6IGZvciAoaW50IGkgPSAwOyBpIDwg MjsgaSsrKSB7ICAvLyB4dm1pbmRwCisrICAgICAgICAgIGRvdWJsZSBhID0gZ2V0RjY0KGFiLCBp KSwgYiA9IGdldEY2NChiYiwgaSk7CisrICAgICAgICAgIHNldEY2NChyYl9ieXRlcywgaSwgWFZf TUlOKGRvdWJsZSwgYSwgYikpOworKyAgICAgICAgfSBicmVhazsKKysgICAgICAgICN1bmRlZiBY Vl9NQVgKKysgICAgICAgICN1bmRlZiBYVl9NSU4KKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAg ICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAorKyAgICAgICAgICAgICAgInh2IGZsb2F0IGRp c3BhdGNoIG1pc3NpbmcgOC1iaXQgWE89JXUgKGluc3RyIDB4JTA4eCkiLAorKyAgICAgICAgICAg ICAgeG8zLCBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOworKyAgICAgIH0KKysgICAgICBzZXRW U1IxMjgoeHQsIHJiX2J5dGVzKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9 PT0gWFgzLWZvcm0gZnVzZWQgbXVsdGlwbHktYWRkICgzLXNvdXJjZTogWFQgaXMgYWxzbyBpbnB1 dCkgPT09CisrICAgIC8vCisrICAgIC8vICAgeHZtYWRkYXNwIFhULFhBLFhCOiAgWFQgPSAoWEEg KiBYQikgKyBYVCAgICAgICAoZnVzZWQgbWFkZCkKKysgICAgLy8gICB4dm1hZGRhZHAgWFQsWEEs WEI6ICBzYW1lIGZvciBmNjQKKysgICAgLy8gICB4dm5tc3ViYXNwIFhULFhBLFhCOiBYVCA9IC0o KFhBICogWEIpIC0gWFQpID0gWFQgLSAoWEEgKiBYQikKKysgICAgLy8gICB4dm5tc3ViYWRwIFhU LFhBLFhCOiBzYW1lIGZvciBmNjQKKysgICAgLy8KKysgICAgLy8gRW5jb2RpbmdzIChlYWNoICtB WCk6IFhPOCDihpIgWE85IHBhaXJzCisrICAgIC8vICAgeHZtYWRkYXNwICBQUENfeHZtYWRkYXNw PTB4RjAwMDAyMDggICBYTzg9NjUgIOKGkiBYTzkgMTMwLzEzMQorKyAgICAvLyAgIHh2bWFkZGFk cCAgUFBDX3h2bWFkZGFkcD0weEYwMDAwMzA4ICAgWE84PTk3ICDihpIgWE85IDE5NC8xOTUKKysg ICAgLy8gICB4dm5tc3ViYXNwIFBQQ194dm5tc3ViYXNwPTB4RjAwMDA2ODggIFhPOD0yMDkg4oaS IFhPOSA0MTgvNDE5CisrICAgIC8vICAgeHZubXN1YmFkcCBQUENfeHZubXN1YmFkcD0weEYwMDAw Nzg4ICBYTzg9MjQxIOKGkiBYTzkgNDgyLzQ4MworKyAgICAvLyBzdGQ6OmZtYSBnaXZlcyBJRUVF LWNvcnJlY3Qgc2luZ2xlLXJvdW5kaW5nIGJlaGF2aW91ciBtYXRjaGluZyB0aGUKKysgICAgLy8g UG93ZXIgSVNBIGRlZmluaXRpb24gb2YgdGhlc2UgZnVzZWQgZm9ybXMuCisrICAgIGNhc2UgMTMw OiBjYXNlIDEzMTogICAgICAvLyB4dm1hZGRhc3AKKysgICAgY2FzZSAxOTQ6IGNhc2UgMTk1OiAg ICAgIC8vIHh2bWFkZGFkcAorKyAgICBjYXNlIDQxODogY2FzZSA0MTk6ICAgICAgLy8geHZubXN1 YmFzcAorKyAgICBjYXNlIDQ4MjogY2FzZSA0ODM6IHsgICAgLy8geHZubXN1YmFkcAorKyAgICAg IGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICB1aW50MzJf dCByYSA9IGluc3RyLT5yYVZhbHVlKCk7CisrICAgICAgaW50IHhhID0gaW50KHJhIHwgKChpbnN0 ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMikgJiAxKSA8PCA1KTsKKysgICAgICBpbnQgeGIgPSBp bnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAg ICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsxNl0sIHRiWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEs IGFiKTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICBnZXRWU1IxMjgoeHQsIHRi KTsgIC8vIFhUIGlzIGFsc28gYW4gaW5wdXQgKGFjY3VtdWxhdG9yKS4KKysgICAgICBib29sIGlz U3AgPSAoeG8gPT0gMTMwIHx8IHhvID09IDEzMSB8fCB4byA9PSA0MTggfHwgeG8gPT0gNDE5KTsK KysgICAgICBib29sIGlzTm1zdWIgPSAoeG8gPT0gNDE4IHx8IHhvID09IDQxOSB8fCB4byA9PSA0 ODIgfHwgeG8gPT0gNDgzKTsKKysgICAgICBhdXRvIHJkRjMyID0gW10odWludDhfdCogYnVmLCBp bnQgaSkgLT4gZmxvYXQgeworKyAgICAgICAgdWludDMyX3QgYiA9ICh1aW50MzJfdClidWZbaSAq IDRdIHwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDFdIDw8 IDgpIHwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDJdIDw8 IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAzXSA8 PCAyNCk7CisrICAgICAgICBmbG9hdCBmOyBtZW1jcHkoJmYsICZiLCBzaXplb2YoZikpOyByZXR1 cm4gZjsKKysgICAgICB9OworKyAgICAgIGF1dG8gd3JGMzIgPSBbXSh1aW50OF90KiBidWYsIGlu dCBpLCBmbG9hdCBmKSB7CisrICAgICAgICB1aW50MzJfdCBiOyBtZW1jcHkoJmIsICZmLCBzaXpl b2YoYikpOworKyAgICAgICAgYnVmW2kqNF09KHVpbnQ4X3QpYjsgYnVmW2kqNCsxXT0odWludDhf dCkoYj4+OCk7CisrICAgICAgICBidWZbaSo0KzJdPSh1aW50OF90KShiPj4xNik7IGJ1ZltpKjQr M109KHVpbnQ4X3QpKGI+PjI0KTsKKysgICAgICB9OworKyAgICAgIGF1dG8gcmRGNjQgPSBbXSh1 aW50OF90KiBidWYsIGludCBpKSAtPiBkb3VibGUgeworKyAgICAgICAgdWludDY0X3QgYiA9IDA7 CisrICAgICAgICBmb3IgKGludCBrPTA7azw4O2srKykgYiB8PSAoKHVpbnQ2NF90KWJ1ZltpKjgr a10pPDwoayo4KTsKKysgICAgICAgIGRvdWJsZSBkOyBtZW1jcHkoJmQsICZiLCBzaXplb2YoZCkp OyByZXR1cm4gZDsKKysgICAgICB9OworKyAgICAgIGF1dG8gd3JGNjQgPSBbXSh1aW50OF90KiBi dWYsIGludCBpLCBkb3VibGUgZCkgeworKyAgICAgICAgdWludDY0X3QgYjsgbWVtY3B5KCZiLCAm ZCwgc2l6ZW9mKGIpKTsKKysgICAgICAgIGZvciAoaW50IGs9MDtrPDg7aysrKSBidWZbaSo4K2td PSh1aW50OF90KShiPj4oayo4KSk7CisrICAgICAgfTsKKysgICAgICB1aW50OF90IHJlc3VsdFsx Nl07CisrICAgICAgaWYgKGlzU3ApIHsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg aSsrKSB7CisrICAgICAgICAgIGZsb2F0IGEgPSByZEYzMihhYiwgaSksIGIgPSByZEYzMihiYiwg aSksIHQgPSByZEYzMih0YiwgaSk7CisrICAgICAgICAgIC8vIG1hZGQ6ICB0ICsgYSpiIDsgIG5t c3ViOiAtKGEqYiAtIHQpID0gdCAtIGEqYiA9IHN0ZDo6Zm1hKGEsYiwtdCkgbmVnYXRlZC4KKysg ICAgICAgICAgZmxvYXQgb3V0ID0gaXNObXN1YiA/IC1zdGQ6OmZtYShhLCBiLCAtdCkKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICBzdGQ6OmZtYShhLCBiLCB0KTsKKysgICAgICAg ICAgd3JGMzIocmVzdWx0LCBpLCBvdXQpOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSB7Cisr ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgICBkb3VibGUg YSA9IHJkRjY0KGFiLCBpKSwgYiA9IHJkRjY0KGJiLCBpKSwgdCA9IHJkRjY0KHRiLCBpKTsKKysg ICAgICAgICAgZG91YmxlIG91dCA9IGlzTm1zdWIgPyAtc3RkOjpmbWEoYSwgYiwgLXQpCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIHN0ZDo6Zm1hKGEsIGIsIHQpOworKyAgICAg ICAgICB3ckY2NChyZXN1bHQsIGksIG91dCk7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAg IHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICBk ZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAorKyAgICAgICAgICAiZGVj b2RlVlNYOiB1bmltcGxlbWVudGVkIFhPPSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG8sCisr ICAgICAgICAgIGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSk7CisrICB9CisrfQorKworKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrLy8gUG93ZXIgSVNBIHYzLjEgcHJlZml4ZWQgaW5zdHJ1Y3Rp b25zIChQT1dFUjEwKS4KKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vCisrLy8gQSBwcmVm aXhlZCBpbnN0cnVjdGlvbiBpcyA4IGJ5dGVzOiBhIDQtYnl0ZSBwcmVmaXggd29yZCAocHJpbWFy eSBvcGNvZGUgMSkKKysvLyBmb2xsb3dlZCBieSBhIDQtYnl0ZSBzdWZmaXggd29yZC4gUHJlZml4 IGFuZCBzdWZmaXggbXVzdCBsaWUgaW4gdGhlIHNhbWUKKysvLyA2NC1ieXRlIGFsaWduZWQgYmxv Y2sg4oCUIHRoZSBKSVQgbXVzdCBndWFyYW50ZWUgdGhpcyB3aGVuIGVtaXR0aW5nOyB0aGUgc2lt CisrLy8gYXNzZXJ0cy4KKysvLworKy8vIFByZWZpeCB3b3JkIGxheW91dCAoQkUgYml0IG51bWJl cmluZyk6CisrLy8gICBbMC4uNV0gICBwcmltYXJ5IG9wY29kZSA9IDEKKysvLyAgIFs2Li43XSAg IFR5cGUgKDAwID0gOExTLCAxMCA9IE1MUyDigJQgb25seSBmb3JtcyB3ZSBpbXBsZW1lbnQpCisr Ly8gICBbOC4uMTBdICByZXNlcnZlZCAobXVzdCBiZSAwKQorKy8vICAgWzExXSAgICAgUiAoMSA9 IFBDLXJlbGF0aXZlOyBSQSBtdXN0IGJlIDApCisrLy8gICBbMTIuLjEzXSByZXNlcnZlZCAobXVz dCBiZSAwKQorKy8vICAgWzE0Li4zMV0gZDAgKGhpZ2ggMTggYml0cyBvZiB0aGUgMzQtYml0IHNp Z25lZCBpbW1lZGlhdGUpCisrLy8KKysvLyBTdWZmaXggd29yZCAoTUxTLzhMUyBmb3JtLCBHUFIt dGFyZ2V0IGluc3RydWN0aW9ucyBsaWtlIHBhZGRpL3BsZCk6CisrLy8gICBbMC4uNV0gICBzdWZm aXggcHJpbWFyeSBvcGNvZGUgKHNlbGVjdHMgdGhlIGFjdHVhbCBpbnN0cnVjdGlvbikKKysvLyAg IFs2Li4xMF0gIFJUIChvciBSUyBmb3Igc3RvcmVzKQorKy8vICAgWzExLi4xNV0gUkEKKysvLyAg IFsxNi4uMzFdIGQxIChsb3cgMTYgYml0cyBvZiBpbW1lZGlhdGUpCisrLy8KKysvLyBTdWZmaXgg d29yZCAoOExTIHBseHYgcXVpcmspOiB0aGUgc3VmZml4IG9wY29kZSBmaWVsZCBpcyBvbmx5IDUg Yml0cworKy8vIHdpZGUgYW5kIGJpdCBbNV0gaG9sZHMgVFgsIHRoZSBoaWdoIGJpdCBvZiB0aGUg Ni1iaXQgWFQgVlNSIG51bWJlcjoKKysvLyAgIFswLi40XSAgIHBseHYgc3VmZml4IG9wY29kZSA9 IDExMDAxICg9IDI1KQorKy8vICAgWzVdICAgICAgVFgKKysvLyAgIFs2Li4xMF0gIFQKKysvLyAg IFsxMS4uMTVdIFJBCisrLy8gICBbMTYuLjMxXSBkMQorKy8vIENvbWJpbmVkOiBYVCA9IChUWCA8 PCA1KSB8IFQuIChFcXVpdmFsZW50OiBmdWxsIDYtYml0IGZpZWxkIGF0IFswLi41XQorKy8vIGlz IDBiMTEwMDEoVFgpIOKAlCB2YWx1ZXMgNTAgb3IgNTEgaW4gb3VyIExFIGJpdHMgMzEuLjI2LikK KysvLworKy8vIENvbWJpbmVkIGltbWVkaWF0ZTogU0kgPSBzaWduX2V4dGVuZCgoZDAgPDwgMTYp IHwgZDEsIDM0KS4KKysvLyBFQSB3aGVuIFI9MTogYWRkcmVzcy1vZi1wcmVmaXggKyBTSS4gKFJB IG11c3QgYmUgMC4pCisrLy8gRUEgd2hlbiBSPTA6IChSQSA9PSAwID8gMCA6IEdQUltSQV0pICsg U0kuCisrLy8KKysvLyBTdWZmaXggb3Bjb2RlcyBpbXBsZW1lbnRlZCBoZXJlOgorKy8vICAgTUxT IChUeXBlIDIpIC8gc3VmZml4PTE0ICBwYWRkaQorKy8vICAgTUxTIChUeXBlIDIpIC8gc3VmZml4 PTQ4ICBwbGZzICAgKGxvYWQgRlAgc2luZ2xlLCB3aWRlbnMgdG8gZG91YmxlKQorKy8vICAgTUxT IChUeXBlIDIpIC8gc3VmZml4PTUwICBwbGZkICAgKGxvYWQgRlAgZG91YmxlKQorKy8vICAgOExT IChUeXBlIDApIC8gc3VmZml4PTU3ICBwbGQKKysvLyAgIDhMUyAoVHlwZSAwKSAvIDUtYml0IHN1 ZmZpeD0yNSwgYml0IDI2ID0gVFggIHBseHYKKysvLworKy8vIFZlcmlmaWNhdGlvbiByZWNpcGUg d2hlbiBhZGRpbmcgbW9yZTogYXNzZW1ibGUgd2l0aCBgZ2NjIC1tY3B1PXBvd2VyMTAKKysvLyAt Y2AgKG9yIGNsYW5nKSBhbmQgY29tcGFyZSB0aGUgZW1pdHRlZCBieXRlcyBhZ2FpbnN0IHRoZSBl bmNvZGVyOyBlbmNvZGUKKysvLyBpbiBhIHNtYWxsIGlubGluZS1hc20gcHJvZ3JhbSBhbmQgc3Rl cCB0aHJvdWdoIHVuZGVyIHRoaXMgc2ltLgorKworK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVQcmVm aXhlZChTaW1JbnN0cnVjdGlvbiogcHJlZml4KSB7CisrICAvLyBQcmVmaXggYW5kIHN1ZmZpeCBt dXN0IHJlc2lkZSBpbiB0aGUgc2FtZSA2NC1ieXRlIGJsb2NrLgorKyAgdWludDY0X3QgcHJlZml4 QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHByZWZpeCk7CisrICBNT1pfQVNTRVJU KChwcmVmaXhBZGRyICYgNjMpIDw9IDU2LAorKyAgICAgICAgICAgICAiUE9XRVIxMCBwcmVmaXhl ZCBpbnN0cnVjdGlvbiBjcm9zc2VzIDY0LWJ5dGUgYm91bmRhcnkiKTsKKysKKysgIFNpbUluc3Ry dWN0aW9uKiBzdWZmaXggPSByZWludGVycHJldF9jYXN0PFNpbUluc3RydWN0aW9uKj4oCisrICAg ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHJlZml4KSArIFNpbUluc3RydWN0aW9uOjpr SW5zdHJTaXplKTsKKysKKysgIHVpbnQzMl90IHR5cGUgPSBwcmVmaXgtPmJpdHMoMjUsIDI0KTsK KysgIHVpbnQzMl90IFIgPSBwcmVmaXgtPmJpdCgyMCk7CisrICB1aW50MzJfdCBkMCA9IHByZWZp eC0+Yml0cygxNywgMCk7ICAvLyAxOCBiaXRzCisrICB1aW50MzJfdCBzdWZmaXhPcDYgPSBzdWZm aXgtPmJpdHMoMzEsIDI2KTsgIC8vIDYtYml0IGZvcm0gKHBhZGRpLCBwbGQpCisrICB1aW50MzJf dCBzdWZmaXhPcDUgPSBzdWZmaXgtPmJpdHMoMzEsIDI3KTsgIC8vIDUtYml0IGZvcm0gKHBseHYp CisrICB1aW50MzJfdCBwbHh2VFggPSBzdWZmaXgtPmJpdCgyNik7CisrICB1aW50MzJfdCBydCA9 IHN1ZmZpeC0+cnRWYWx1ZSgpOworKyAgdWludDMyX3QgcmEgPSBzdWZmaXgtPnJhVmFsdWUoKTsK KysgIHVpbnQzMl90IGQxID0gc3VmZml4LT51aW1tMTZWYWx1ZSgpOworKworKyAgLy8gUmVhc3Nl bWJsZSAzNC1iaXQgc2lnbmVkIGRpc3BsYWNlbWVudC4KKysgIGludDY0X3QgaW1tMzQgPSAoc3Rh dGljX2Nhc3Q8aW50NjRfdD4oZDApIDw8IDE2KSB8IGQxOworKyAgaW1tMzQgPSAoaW1tMzQgPDwg MzApID4+IDMwOyAgLy8gc2lnbi1leHRlbmQgZnJvbSBiaXQgMzMKKysKKysgIC8vIFI9MSBmb3Jt cyByZXF1aXJlIFJBPTAgcGVyIHRoZSBJU0EuCisrICBNT1pfQVNTRVJUKCFSIHx8IHJhID09IDAs CisrICAgICAgICAgICAgICJQT1dFUjEwIHByZWZpeGVkIFI9MSBmb3JtIHJlcXVpcmVzIFJBPTAi KTsKKysKKysgIC8vIFR5cGUgMiA9IE1MUywgVHlwZSAwID0gOExTLiBPdGhlciB0eXBlcyBhcmUg cmVzZXJ2ZWQgaGVyZS4KKysgIGlmICh0eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDE0KSB7Cisr ICAgIC8vIHBhZGRpIFJULCBSQSwgU0ksIFIgKE1MUykKKysgICAgaW50NjRfdCBiYXNlID0gUiA/ IHN0YXRpY19jYXN0PGludDY0X3Q+KHByZWZpeEFkZHIpCisrICAgICAgICAgICAgICAgICAgICAg OiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpOworKyAgICBzZXRSZWdpc3RlcihydCwg YmFzZSArIGltbTM0KTsKKysgIH0gZWxzZSBpZiAodHlwZSA9PSAwICYmIHN1ZmZpeE9wNiA9PSA1 NykgeworKyAgICAvLyBwbGQgUlQsIEQoUkEpLCBSICg4TFMpCisrICAgIHVpbnQ2NF90IGVhID0g UiA/IHByZWZpeEFkZHIgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpCisrICAgICAgICAg ICAgICAgICAgICA6IChyYSA9PSAwID8gMCA6IGdldFJlZ2lzdGVyKHJhKSkgKworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKKysgICAgaWYg KCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDgpKSB7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHJl YWREVyhlYSwgcHJlZml4KSk7CisrICAgIH0KKysgIH0gZWxzZSBpZiAodHlwZSA9PSAyICYmIHN1 ZmZpeE9wNiA9PSA1MCkgeworKyAgICAvLyBwbGZkIEZSVCwgRChSQSksIFIgKE1MUykg4oCUIGxv YWQgOC1ieXRlIGRvdWJsZSBpbnRvIEZQUi4KKysgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4 QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKKysgICAgICAgICAgICAgICAgICAg IDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCisrICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOworKyAgICBpZiAoIWhhbmRsZVdh c21TZWdGYXVsdChlYSwgOCkpIHsKKysgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVh ZEQoZWEsIHByZWZpeCkpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZm aXhPcDYgPT0gNDgpIHsKKysgICAgLy8gcGxmcyBGUlQsIEQoUkEpLCBSIChNTFMpIOKAlCBsb2Fk IDQtYnl0ZSBzaW5nbGUsIHdpZGVuIE5hTi1wcmVzZXJ2aW5nLgorKyAgICB1aW50NjRfdCBlYSA9 IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQorKyAgICAgICAg ICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKKysgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7CisrICAgIGlm ICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA0KSkgeworKyAgICAgIGZsb2F0IHZhbCA9ICpyZWlu dGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpOworKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0 LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKHZhbCkpOworKyAgICB9CisrICB9IGVsc2UgaWYg KHR5cGUgPT0gMCAmJiBzdWZmaXhPcDUgPT0gMjUpIHsKKysgICAgLy8gcGx4diBYVCwgRChSQSks IFIgKDhMUykg4oCUIFhUID0gKFRYIDw8IDUpIHwgVCwgVFggYXQgc3VmZml4IGJpdCAyNi4KKysg ICAgaW50IHh0ID0gc3RhdGljX2Nhc3Q8aW50PihydCB8IChwbHh2VFggPDwgNSkpOworKyAgICB1 aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0 KQorKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkp ICsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0z NCk7CisrICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikpIHsKKysgICAgICB1aW50 OF90IGJ1ZlsxNl07CisrICAgICAgbWVtY3B5KGJ1ZiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2 b2lkKj4oZWEpLCAxNik7CisrICAgICAgc2V0VlNSMTI4KHh0LCBidWYpOworKyAgICB9CisrICB9 IGVsc2UgaWYgKHR5cGUgPT0gMCAmJiBzdWZmaXhPcDYgPT0gNjEpIHsKKysgICAgLy8gcHN0ZCBS UywgRChSQSksIFIgKDhMUykg4oCUIHN0b3JlIGRvdWJsZXdvcmQuCisrICAgIHVpbnQ2NF90IGVh ID0gUiA/IHByZWZpeEFkZHIgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpCisrICAgICAg ICAgICAgICAgICAgICA6IChyYSA9PSAwID8gMCA6IGdldFJlZ2lzdGVyKHJhKSkgKworKyAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKKysgICAg aWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDgpKSB7CisrICAgICAgd3JpdGVEVyhlYSwgZ2V0 UmVnaXN0ZXIocnQpLCBwcmVmaXgpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAm JiBzdWZmaXhPcDYgPT0gNTQpIHsKKysgICAgLy8gcHN0ZmQgRlJTLCBEKFJBKSwgUiAoTUxTKSDi gJQgc3RvcmUgZG91YmxlLgorKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3Rh dGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQorKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0g MCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7CisrICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0 KGVhLCA4KSkgeworKyAgICAgIHdyaXRlRChlYSwgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnQpLCBw cmVmaXgpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYgPT0g NTIpIHsKKysgICAgLy8gcHN0ZnMgRlJTLCBEKFJBKSwgUiAoTUxTKSDigJQgc3RvcmUgc2luZ2xl IChuYXJyb3cgZnJvbSBkb3VibGUgaW4gRlBSKS4KKysgICAgdWludDY0X3QgZWEgPSBSID8gcHJl Zml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKKysgICAgICAgICAgICAgICAg ICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCisrICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOworKyAgICBpZiAoIWhhbmRs ZVdhc21TZWdGYXVsdChlYSwgNCkpIHsKKysgICAgICBkb3VibGUgZHZhbCA9IGdldEZwdVJlZ2lz dGVyRG91YmxlKHJ0KTsKKysgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKSA9IGRl bW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZHZhbCk7CisrICAgIH0KKysgIH0gZWxzZSBpZiAodHlw ZSA9PSAwICYmIHN1ZmZpeE9wNSA9PSAyNykgeworKyAgICAvLyBwc3R4diBYUywgRChSQSksIFIg KDhMUykg4oCUIFhTID0gKFNYIDw8IDUpIHwgUywgU1ggYXQgc3VmZml4IGJpdCAyNi4KKysgICAg aW50IHhzID0gc3RhdGljX2Nhc3Q8aW50PihydCB8IChwbHh2VFggPDwgNSkpOworKyAgICB1aW50 NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQor KyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsK KysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7 CisrICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikpIHsKKysgICAgICB1aW50OF90 IGJ1ZlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhzLCBidWYpOworKyAgICAgIG1lbWNweShyZWlu dGVycHJldF9jYXN0PHZvaWQqPihlYSksIGJ1ZiwgMTYpOworKyAgICB9CisrICB9IGVsc2Ugewor KyAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICJkZWNvZGVQcmVmaXhlZDog dW5pbXBsZW1lbnRlZCB0eXBlPSV1ICIKKysgICAgICAgICIocHJlZml4IDB4JTA4eCwgc3VmZml4 IDB4JTA4eCkiLAorKyAgICAgICAgdHlwZSwgcHJlZml4LT5pbnN0cnVjdGlvbkJpdHMoKSwgc3Vm Zml4LT5pbnN0cnVjdGlvbkJpdHMoKSk7CisrICB9CisrCisrICAvLyBBZHZhbmNlIHBhc3QgdGhl IGZ1bGwgOC1ieXRlIHByZWZpeGVkIGluc3RydWN0aW9uIHVubGVzcyBhIGhhbmRsZXIKKysgIC8v IGFscmVhZHkgcmVkaXJlY3RlZCB0aGUgUEMuIFRoZSBjYWxsZXIgKGluc3RydWN0aW9uRGVjb2Rl KSByZXR1cm5zCisrICAvLyBpbW1lZGlhdGVseSBhZnRlciB1cywgc28gaXRzIDQtYnl0ZSB0cmFp bGluZyBhZHZhbmNlIGlzIHNraXBwZWQuCisrICBpZiAoIXBjX21vZGlmaWVkXykgeworKyAgICBz ZXRfcGMoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocHJlZml4QWRkcikgKyAyICogU2ltSW5zdHJ1Y3Rp b246OmtJbnN0clNpemUpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor Ky8vIFRvcC1sZXZlbCBpbnN0cnVjdGlvbiBkZWNvZGVyLgorKy8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrCisrdm9pZCBTaW11bGF0b3I6Omluc3RydWN0aW9uRGVjb2RlKFNpbUluc3RydWN0aW9u KiBpbnN0cikgeworKyAgaWYgKCFTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVDaGVja2luZ0Rpc2Fi bGVDb3VudCkgeworKyAgICBBdXRvTG9ja1NpbXVsYXRvckNhY2hlIGFsczsKKysgICAgU2ltdWxh dG9yUHJvY2Vzczo6Y2hlY2tJQ2FjaGVMb2NrZWQoaW5zdHIpOworKyAgfQorKyAgcGNfbW9kaWZp ZWRfID0gZmFsc2U7CisrCisrICB1aW50MzJfdCBpbnN0ckJpdHMgPSBpbnN0ci0+aW5zdHJ1Y3Rp b25CaXRzKCk7CisrCisrICAvLyBDaGVjayBmb3Iga0NhbGxSZWRpckluc3RyIGZpcnN0IChQUENf c3RvcCA9IDB4NEMwMDAyRTQpLgorKyAgaWYgKGluc3RyQml0cyA9PSBrQ2FsbFJlZGlySW5zdHIp IHsKKysgICAgc29mdHdhcmVJbnRlcnJ1cHQoaW5zdHIpOworKyAgICBpZiAoIXBjX21vZGlmaWVk XykgeworKyAgICAgIHNldF9wYyhyZWludGVycHJldF9jYXN0PGludDY0X3Q+KGluc3RyKSArIFNp bUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgfQorKyAgICByZXR1cm47CisrICB9Cisr CisrICAvLyBDaGVjayBmb3IgUFBDX3RyYXAgKDB4N0ZFMDAwMDgpLgorKyAgaWYgKGluc3RyQml0 cyA9PSAweDdGRTAwMDA4KSB7CisrICAgIHNvZnR3YXJlSW50ZXJydXB0KGluc3RyKTsKKysgICAg aWYgKCFwY19tb2RpZmllZF8pIHsKKysgICAgICBzZXRfcGMocmVpbnRlcnByZXRfY2FzdDxpbnQ2 NF90PihpbnN0cikgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgIH0KKysgICAg cmV0dXJuOworKyAgfQorKworKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOwor KworKyAgLy8gUG93ZXIgSVNBIHYzLjEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb25zOiBwcmltYXJ5IG9w Y29kZSAxIG1hcmtzIGEKKysgIC8vIDQtYnl0ZSBwcmVmaXggd29yZCBmb2xsb3dlZCBieSBhIDQt Ynl0ZSBzdWZmaXggd29yZC4gZGVjb2RlUHJlZml4ZWQKKysgIC8vIGFkdmFuY2VzIHRoZSBQQyBi eSB0aGUgZnVsbCA4IGJ5dGVzIChvciBsZWF2ZXMgaXQgbW9kaWZpZWQgZm9yCisrICAvLyBQQy1y ZWxhdGl2ZSBzaWRlLWVmZmVjdHMpLgorKyAgaWYgKG9wY29kZSA9PSAxKSB7CisrICAgIGRlY29k ZVByZWZpeGVkKGluc3RyKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgc3dpdGNoIChvcGNv ZGUpIHsKKysgICAgLy8gRC1mb3JtIEFMVQorKyAgICBjYXNlIDM6ICAgLy8gdHdpCisrICAgIGNh c2UgNzogICAvLyBtdWxsaQorKyAgICBjYXNlIDg6ICAgLy8gc3ViZmljCisrICAgIGNhc2UgMTA6 ICAvLyBjbXBsaQorKyAgICBjYXNlIDExOiAgLy8gY21waQorKyAgICBjYXNlIDEyOiAgLy8gYWRk aWMKKysgICAgY2FzZSAxMzogIC8vIGFkZGljLgorKyAgICBjYXNlIDE0OiAgLy8gYWRkaQorKyAg ICBjYXNlIDE1OiAgLy8gYWRkaXMKKysgICAgY2FzZSAyNDogIC8vIG9yaQorKyAgICBjYXNlIDI1 OiAgLy8gb3JpcworKyAgICBjYXNlIDI2OiAgLy8geG9yaQorKyAgICBjYXNlIDI3OiAgLy8geG9y aXMKKysgICAgY2FzZSAyODogIC8vIGFuZGkuCisrICAgIGNhc2UgMjk6ICAvLyBhbmRpcy4KKysg ICAgICBkZWNvZGVERm9ybUFMVShpbnN0cik7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8vIEQt Zm9ybSBsb2FkcworKyAgICBjYXNlIDMyOiAgLy8gbHd6CisrICAgIGNhc2UgMzM6ICAvLyBsd3p1 CisrICAgIGNhc2UgMzQ6ICAvLyBsYnoKKysgICAgY2FzZSAzNTogIC8vIGxienUKKysgICAgY2Fz ZSA0MDogIC8vIGxoegorKyAgICBjYXNlIDQxOiAgLy8gbGh6dQorKyAgICBjYXNlIDQyOiAgLy8g bGhhCisrICAgIGNhc2UgNDM6ICAvLyBsaGF1CisrICAgIGNhc2UgNDg6ICAvLyBsZnMKKysgICAg Y2FzZSA0OTogIC8vIGxmc3UKKysgICAgY2FzZSA1MDogIC8vIGxmZAorKyAgICBjYXNlIDUxOiAg Ly8gbGZkdQorKyAgICAgIGRlY29kZURGb3JtTG9hZChpbnN0cik7CisrICAgICAgYnJlYWs7Cisr CisrICAgIC8vIEQtZm9ybSBzdG9yZXMKKysgICAgY2FzZSAzNjogIC8vIHN0dworKyAgICBjYXNl IDM4OiAgLy8gc3RiCisrICAgIGNhc2UgMzk6ICAvLyBzdGJ1CisrICAgIGNhc2UgNDQ6ICAvLyBz dGgKKysgICAgY2FzZSA0NTogIC8vIHN0aHUKKysgICAgY2FzZSA1MjogIC8vIHN0ZnMKKysgICAg Y2FzZSA1MzogIC8vIHN0ZnN1CisrICAgIGNhc2UgNTQ6ICAvLyBzdGZkCisrICAgIGNhc2UgNTU6 ICAvLyBzdGZkdQorKyAgICAgIGRlY29kZURGb3JtU3RvcmUoaW5zdHIpOworKyAgICAgIGJyZWFr OworKworKyAgICAvLyBEUy1mb3JtCisrICAgIGNhc2UgNTg6ICAvLyBsZCwgbGR1LCBsd2EKKysg ICAgY2FzZSA2MjogIC8vIHN0ZCwgc3RkdQorKyAgICAgIGRlY29kZURTRm9ybShpbnN0cik7Cisr ICAgICAgYnJlYWs7CisrCisrICAgIC8vIEItZm9ybSBjb25kaXRpb25hbCBicmFuY2gKKysgICAg Y2FzZSAxNjoKKysgICAgICBkZWNvZGVCcmFuY2goaW5zdHIpOworKyAgICAgIGJyZWFrOworKwor KyAgICAvLyBTQyAoc3lzdGVtIGNhbGwpIC0gdW51c2VkIGluIEpJVAorKyAgICBjYXNlIDE3Ogor KyAgICAgIE1PWl9DUkFTSCgiU2ltdWxhdG9yOiBzYyBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVk Iik7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8vIEktZm9ybSB1bmNvbmRpdGlvbmFsIGJyYW5j aAorKyAgICBjYXNlIDE4OgorKyAgICAgIGRlY29kZUJyYW5jaChpbnN0cik7CisrICAgICAgYnJl YWs7CisrCisrICAgIC8vIFhMLWZvcm0gKGJyYW5jaCB0byBMUi9DVFIsIENSIG9wZXJhdGlvbnMp CisrICAgIGNhc2UgMTk6CisrICAgICAgZGVjb2RlQnJhbmNoKGluc3RyKTsKKysgICAgICBicmVh azsKKysKKysgICAgLy8gTS1mb3JtIC8gTUQtZm9ybSByb3RhdGUvbWFzaworKyAgICBjYXNlIDIw OiAgLy8gcmx3aW1pCisrICAgIGNhc2UgMjE6ICAvLyBybHdpbm0KKysgICAgY2FzZSAyMzogIC8v IHJsd25tCisrICAgIGNhc2UgMzA6ICAvLyBybGRpY2wsIHJsZGljciwgcmxkaWMsIHJsZGltaSwg cmxkY2wsIHJsZGNyCisrICAgICAgZGVjb2RlUm90YXRlTWFzayhpbnN0cik7CisrICAgICAgYnJl YWs7CisrCisrICAgIC8vIFZNWCAoQWx0aVZlYykg4oCUIHByaW1hcnkgb3Bjb2RlIDQuIFZlY3Rv ciBhcml0aG1ldGljIC8gY29tcGFyZSAvIHNoaWZ0IC8KKysgICAgLy8gc3BsYXQgLyBtZXJnZSAv IHBhY2sgLyB1bnBhY2sgb24gVlIwLVZSMzEuIFRoZSB3YXNtIFNJTUQgbG93ZXJpbmcKKysgICAg Ly8gZW1pdHMgdGhlc2UgZGlyZWN0bHkgKFNpbWQxMjggbGl2ZXMgaW4gdGhlIFZSIG5hbWVzcGFj ZSkuCisrICAgIGNhc2UgNDoKKysgICAgICBkZWNvZGVWTVgoaW5zdHIpOworKyAgICAgIGJyZWFr OworKworKyAgICAvLyBYLWZvcm0gLyBYTy1mb3JtCisrICAgIGNhc2UgMzE6CisrICAgICAgZGVj b2RlWEZvcm0oaW5zdHIpOworKyAgICAgIGJyZWFrOworKworKyAgICAvLyBGUCBzaW5nbGUgKEEt Zm9ybSkKKysgICAgY2FzZSA1OToKKysgICAgICBkZWNvZGVGUChpbnN0cik7CisrICAgICAgYnJl YWs7CisrCisrICAgIC8vIFZTWCAoWFgxLWZvcm0pCisrICAgIGNhc2UgNjA6CisrICAgICAgZGVj b2RlVlNYKGluc3RyKTsKKysgICAgICBicmVhazsKKysKKysgICAgLy8gRlAgZG91YmxlIChYLWZv cm0gLyBBLWZvcm0pCisrICAgIGNhc2UgNjM6CisrICAgICAgZGVjb2RlRlAoaW5zdHIpOworKyAg ICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJ TlRGKAorKyAgICAgICAgICAiaW5zdHJ1Y3Rpb25EZWNvZGU6IHVuc3VwcG9ydGVkIG9wY29kZSAl dSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsCisrICAgICAgICAgIG9wY29kZSwgaW5zdHJCaXRzKTsK KysgIH0KKysKKysgIGlmICghcGNfbW9kaWZpZWRfKSB7CisrICAgIHNldF9wYyhyZWludGVycHJl dF9jYXN0PGludDY0X3Q+KGluc3RyKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysg IH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBTaW5nbGUtc3RlcHBpbmcg LyBleGVjdXRlIGxvb3AuCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKyt2b2lkIFNpbXVs YXRvcjo6ZW5hYmxlX3NpbmdsZV9zdGVwcGluZyhTaW5nbGVTdGVwQ2FsbGJhY2sgY2IsIHZvaWQq IGFyZykgeworKyAgc2luZ2xlX3N0ZXBwaW5nXyA9IHRydWU7CisrICBzaW5nbGVfc3RlcF9jYWxs YmFja18gPSBjYjsKKysgIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18gPSBhcmc7CisrICBzaW5n bGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgKHZvaWQq KWdldF9wYygpKTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmRpc2FibGVfc2luZ2xlX3N0ZXBw aW5nKCkgeworKyAgaWYgKCFzaW5nbGVfc3RlcHBpbmdfKSB7CisrICAgIHJldHVybjsKKysgIH0K KysgIHNpbmdsZV9zdGVwX2NhbGxiYWNrXyhzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfLCB0aGlz LCAodm9pZCopZ2V0X3BjKCkpOworKyAgc2luZ2xlX3N0ZXBwaW5nXyA9IGZhbHNlOworKyAgc2lu Z2xlX3N0ZXBfY2FsbGJhY2tfID0gbnVsbHB0cjsKKysgIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2Fy Z18gPSBudWxscHRyOworK30KKysKKyt0ZW1wbGF0ZSA8Ym9vbCBlbmFibGVTdG9wU2ltQXQ+Cisr dm9pZCBTaW11bGF0b3I6OmV4ZWN1dGUoKSB7CisrICBpZiAoc2luZ2xlX3N0ZXBwaW5nXyAmJiBn ZXRlbnYoIlBQQzY0X1RSQUNFX1NJTSIpKSB7CisrICAgIGZwcmludGYoc3RkZXJyLCAiW3NpbV0g ZW50ZXIgZXhlY3V0ZSBwYz0weCVseCBscj0weCVseCBmcD0weCVseCBzcD0weCVseFxuIiwKKysg ICAgICAgICAgICAobG9uZylnZXRfcGMoKSwgKGxvbmcpZ2V0TFIoKSwgKGxvbmcpZ2V0UmVnaXN0 ZXIoZnApLAorKyAgICAgICAgICAgIChsb25nKWdldFJlZ2lzdGVyKHNwKSk7CisrICB9CisrICBp ZiAoc2luZ2xlX3N0ZXBwaW5nXykgeworKyAgICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xl X3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgbnVsbHB0cik7CisrICB9CisrCisrICBpbnQ2NF90 IHByb2dyYW1fY291bnRlciA9IGdldF9wYygpOworKworKyAgd2hpbGUgKHByb2dyYW1fY291bnRl ciAhPSBlbmRfc2ltX3BjKSB7CisrICAgIGlmIChlbmFibGVTdG9wU2ltQXQgJiYgKGljb3VudF8g PT0gU2ltdWxhdG9yOjpTdG9wU2ltQXQpKSB7CisrICAgICAgcHBjNjREZWJ1Z2dlciBkYmcodGhp cyk7CisrICAgICAgZGJnLmRlYnVnKCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgaWYgKHNpbmds ZV9zdGVwcGluZ18pIHsKKysgICAgICAgIGlmIChnZXRlbnYoIlBQQzY0X1RSQUNFX1NJTSIpKSB7 CisrICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAgICJbc2ltXSBz dGVwIGljb3VudD0lbGx1IHBjPTB4JWx4IGluc3RyPTB4JTA4eCBscj0weCVseCBmcD0weCVseCBz cD0weCVseFxuIiwKKysgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWljb3Vu dF8sIChsb25nKXByb2dyYW1fY291bnRlciwKKysgICAgICAgICAgICAgICAgICAqKHVpbnQzMl90 Kilwcm9ncmFtX2NvdW50ZXIsIChsb25nKWdldExSKCksCisrICAgICAgICAgICAgICAgICAgKGxv bmcpZ2V0UmVnaXN0ZXIoZnApLCAobG9uZylnZXRSZWdpc3RlcihzcCkpOworKyAgICAgICAgfQor KyAgICAgICAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18s IHRoaXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKXByb2dyYW1fY291 bnRlcik7CisrICAgICAgfQorKyAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0ciA9CisrICAgICAg ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24qPihwcm9ncmFtX2NvdW50ZXIpOwor KyAgICAgIGluc3RydWN0aW9uRGVjb2RlKGluc3RyKTsKKysgICAgICBpY291bnRfKys7CisrICAg IH0KKysgICAgcHJvZ3JhbV9jb3VudGVyID0gZ2V0X3BjKCk7CisrICB9CisrCisrICBpZiAoc2lu Z2xlX3N0ZXBwaW5nXykgeworKyAgICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBf Y2FsbGJhY2tfYXJnXywgdGhpcywgbnVsbHB0cik7CisrICB9CisrfQorKworKy8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrLy8gY2FsbEludGVybmFsIC8gY2FsbC4KKysvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKworK3ZvaWQgU2ltdWxhdG9yOjpjYWxsSW50ZXJuYWwodWludDhfdCogZW50cnkp IHsKKysgIC8vIFByZXBhcmUgdG8gZXhlY3V0ZSB0aGUgY29kZSBhdCBlbnRyeS4KKysgIHNldFJl Z2lzdGVyKHBjLCByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGVudHJ5KSk7CisrICAvLyBUaGUg c2ltdWxhdGlvbiBzdG9wcyB3aGVuIHJldHVybmluZyB0byB0aGlzIGNhbGwgcG9pbnQgKExSID09 IGVuZF9zaW1fcGMpLgorKyAgc2V0TFIoZW5kX3NpbV9wYyk7CisrCisrICAvLyBSZW1lbWJlciB0 aGUgdmFsdWVzIG9mIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgKHIxNC1yMzEgaW4gRUxGdjIpLgor KyAgaW50NjRfdCByMTRfdmFsID0gZ2V0UmVnaXN0ZXIocjE0KTsKKysgIGludDY0X3QgcjE1X3Zh bCA9IGdldFJlZ2lzdGVyKHIxNSk7CisrICBpbnQ2NF90IHIxNl92YWwgPSBnZXRSZWdpc3Rlcihy MTYpOworKyAgaW50NjRfdCByMTdfdmFsID0gZ2V0UmVnaXN0ZXIocjE3KTsKKysgIGludDY0X3Qg cjE4X3ZhbCA9IGdldFJlZ2lzdGVyKHIxOCk7CisrICBpbnQ2NF90IHIxOV92YWwgPSBnZXRSZWdp c3RlcihyMTkpOworKyAgaW50NjRfdCByMjBfdmFsID0gZ2V0UmVnaXN0ZXIocjIwKTsKKysgIGlu dDY0X3QgcjIxX3ZhbCA9IGdldFJlZ2lzdGVyKHIyMSk7CisrICBpbnQ2NF90IHIyMl92YWwgPSBn ZXRSZWdpc3RlcihyMjIpOworKyAgaW50NjRfdCByMjNfdmFsID0gZ2V0UmVnaXN0ZXIocjIzKTsK KysgIGludDY0X3QgcjI0X3ZhbCA9IGdldFJlZ2lzdGVyKHIyNCk7CisrICBpbnQ2NF90IHIyNV92 YWwgPSBnZXRSZWdpc3RlcihyMjUpOworKyAgaW50NjRfdCByMjZfdmFsID0gZ2V0UmVnaXN0ZXIo cjI2KTsKKysgIGludDY0X3QgcjI3X3ZhbCA9IGdldFJlZ2lzdGVyKHIyNyk7CisrICBpbnQ2NF90 IHIyOF92YWwgPSBnZXRSZWdpc3RlcihyMjgpOworKyAgaW50NjRfdCByMjlfdmFsID0gZ2V0UmVn aXN0ZXIocjI5KTsKKysgIGludDY0X3QgcjMwX3ZhbCA9IGdldFJlZ2lzdGVyKHIzMCk7CisrICBp bnQ2NF90IHIzMV92YWwgPSBnZXRSZWdpc3RlcihyMzEpOworKyAgaW50NjRfdCBzcF92YWwgPSBn ZXRSZWdpc3RlcihzcCk7CisrCisrI2lmZGVmIERFQlVHCisrICAvLyBTZXQgdXAgY2FsbGVlLXNh dmVkIHJlZ2lzdGVycyB3aXRoIGEga25vd24gdmFsdWUgdG8gZGV0ZWN0IGNsb2JiZXJzLgorKyAg Ly8gREVCVUctb25seTogaW4gcmVsZWFzZSB0aGlzIHdvdWxkIHNpbGVudGx5IGNvcnJ1cHQgZXZl cnkgSlMtaml0LWVudHJ5CisrICAvLyBzdHViIGZyYW1lLCBzaW5jZSB0aGUgc3R1YiBzYXZlcyBy MTQtcjMxIHRvIGl0cyBzdGFjayBlYXJseSBvbi4gQW55CisrICAvLyBzaW5nbGUtc3RlcC1wcm9m aWxpbmcgc2FtcGxlIHRha2VuIGxhdGVyIChvciBhbnkgdW53aW5kIHRocm91Z2ggdGhlCisrICAv LyBzdHViJ3Mgc2F2ZWQgQ1NSIGFyZWEpIHRoZW4gZGVyZWZlcmVuY2VzIGBpY291bnRfYCBhcyBh IGZyYW1lCisrICAvLyBwb2ludGVyIGFuZCBjcmFzaGVzIOKAlCBzZWUgZS5nLiB3YXNtL3Byb2Zp bGluZy5qcywgaW9uLWVycm9yLSouanMsCisrICAvLyBpb24tbGF6eS10YWJsZXMuanMsIGlvbi1j YWxsZXJmcC10YWcuanMsIHJldHVybi1jYWxsLXByb2ZpbGluZy5qcywKKysgIC8vIGV4dGVybnJl Zi1nbG9iYWwtcG9zdGJhcnJpZXIuanMsIGJ1aWx0aW4tbW9kdWxlcy9pOHZlY211bC5qcywKKysg IC8vIGFzbS5qcy90ZXN0QnVnMTM1NzA1My5qcyAoYWxsIHNpbmdsZS1zdGVwLXByb2ZpbGluZyB0 ZXN0cykuIEluCisrICAvLyBkZWJ1ZyBidWlsZHMgdGhlIHZhbHVlIGNvbGxpZGVzIHdpdGggdGhl IHNhbWUgY2FsbHNpdGVzIGJ1dCB0aGUKKysgIC8vIE1PWl9BU1NFUlRzIGJlbG93IGNhdGNoIGFu eSBhY3R1YWwgQUJJIHZpb2xhdGlvbiwgd2hpY2ggaXMgdGhlCisrICAvLyBlbnRpcmUgcG9pbnQu CisrICBpbnQ2NF90IGNhbGxlZV9zYXZlZF92YWx1ZSA9IGljb3VudF87CisrICBzZXRSZWdpc3Rl cihyMTQsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMTUsIGNhbGxlZV9z YXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMTYsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Cisr ICBzZXRSZWdpc3RlcihyMTcsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3Rlcihy MTgsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMTksIGNhbGxlZV9zYXZl ZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjAsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBz ZXRSZWdpc3RlcihyMjEsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjIs IGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjMsIGNhbGxlZV9zYXZlZF92 YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjQsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRS ZWdpc3RlcihyMjUsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjYsIGNh bGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMjcsIGNhbGxlZV9zYXZlZF92YWx1 ZSk7CisrICBzZXRSZWdpc3RlcihyMjgsIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdp c3RlcihyMjksIGNhbGxlZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMzAsIGNhbGxl ZV9zYXZlZF92YWx1ZSk7CisrICBzZXRSZWdpc3RlcihyMzEsIGNhbGxlZV9zYXZlZF92YWx1ZSk7 CisrI2VuZGlmCisrCisrICAvLyBTdGFydCB0aGUgc2ltdWxhdGlvbi4KKysgIGlmIChTaW11bGF0 b3I6OlN0b3BTaW1BdCAhPSAtMSkgeworKyAgICBleGVjdXRlPHRydWU+KCk7CisrICB9IGVsc2Ug eworKyAgICBleGVjdXRlPGZhbHNlPigpOworKyAgfQorKworKyNpZmRlZiBERUJVRworKyAgLy8g Q2hlY2sgdGhhdCB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBoYXZlIGJlZW4gcHJlc2VydmVk LgorKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE0KSk7 CisrICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTUpKTsK KysgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxNikpOwor KyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE3KSk7Cisr ICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTgpKTsKKysg IE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxOSkpOworKyAg TU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjIwKSk7CisrICBN T1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjEpKTsKKysgIE1P Wl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyMikpOworKyAgTU9a X0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjIzKSk7CisrICBNT1pf QVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjQpKTsKKysgIE1PWl9B U1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyNSkpOworKyAgTU9aX0FT U0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjI2KSk7CisrICBNT1pfQVNT RVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjcpKTsKKysgIE1PWl9BU1NF UlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyOCkpOworKyAgTU9aX0FTU0VS VChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjI5KSk7CisrICBNT1pfQVNTRVJU KGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMzApKTsKKysgIE1PWl9BU1NFUlQo Y2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIzMSkpOworKyNlbmRpZgorKworKyAg Ly8gUmVzdG9yZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLgorKyAgc2V0UmVnaXN0ZXIocjE0LCBy MTRfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIxNSwgcjE1X3ZhbCk7CisrICBzZXRSZWdpc3Rlcihy MTYsIHIxNl92YWwpOworKyAgc2V0UmVnaXN0ZXIocjE3LCByMTdfdmFsKTsKKysgIHNldFJlZ2lz dGVyKHIxOCwgcjE4X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMTksIHIxOV92YWwpOworKyAgc2V0 UmVnaXN0ZXIocjIwLCByMjBfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIyMSwgcjIxX3ZhbCk7Cisr ICBzZXRSZWdpc3RlcihyMjIsIHIyMl92YWwpOworKyAgc2V0UmVnaXN0ZXIocjIzLCByMjNfdmFs KTsKKysgIHNldFJlZ2lzdGVyKHIyNCwgcjI0X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMjUsIHIy NV92YWwpOworKyAgc2V0UmVnaXN0ZXIocjI2LCByMjZfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIy NywgcjI3X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMjgsIHIyOF92YWwpOworKyAgc2V0UmVnaXN0 ZXIocjI5LCByMjlfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIzMCwgcjMwX3ZhbCk7CisrICBzZXRS ZWdpc3RlcihyMzEsIHIzMV92YWwpOworKyAgc2V0UmVnaXN0ZXIoc3AsIHNwX3ZhbCk7CisrfQor KworK2ludDY0X3QgU2ltdWxhdG9yOjpjYWxsKHVpbnQ4X3QqIGVudHJ5LCBpbnQgYXJndW1lbnRf Y291bnQsIC4uLikgeworKyAgdmFfbGlzdCBwYXJhbWV0ZXJzOworKyAgdmFfc3RhcnQocGFyYW1l dGVycywgYXJndW1lbnRfY291bnQpOworKworKyAgaW50NjRfdCBvcmlnaW5hbF9zdGFjayA9IGdl dFJlZ2lzdGVyKHNwKTsKKysgIC8vIENvbXB1dGUgcG9zaXRpb24gb2Ygc3RhY2sgb24gZW50cnkg dG8gZ2VuZXJhdGVkIGNvZGUuCisrICBpbnQ2NF90IGVudHJ5X3N0YWNrID0gb3JpZ2luYWxfc3Rh Y2s7CisrICBpZiAoYXJndW1lbnRfY291bnQgPiBrQ0FyZ1Nsb3RDb3VudCkgeworKyAgICBlbnRy eV9zdGFjayA9IGVudHJ5X3N0YWNrIC0gYXJndW1lbnRfY291bnQgKiBzaXplb2YoaW50NjRfdCk7 CisrICB9IGVsc2UgeworKyAgICBlbnRyeV9zdGFjayA9IGVudHJ5X3N0YWNrIC0ga0NBcmdzU2xv dHNTaXplOworKyAgfQorKworKyAgZW50cnlfc3RhY2sgJj0gflU2NChBQklTdGFja0FsaWdubWVu dCAtIDEpOworKworKyAgaW50cHRyX3QqIHN0YWNrX2FyZ3VtZW50ID0gcmVpbnRlcnByZXRfY2Fz dDxpbnRwdHJfdCo+KGVudHJ5X3N0YWNrKTsKKysKKysgIC8vIFBQQzY0IEVMRnYyOiBmaXJzdCA4 IGludGVnZXIgYXJncyBnbyBpbiByMy1yMTAuCisrICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Vt ZW50X2NvdW50OyBpKyspIHsKKysgICAganM6OmppdDo6UmVnaXN0ZXIgYXJnUmVnOworKyAgICBp ZiAoR2V0SW50QXJnUmVnKGksICZhcmdSZWcpKSB7CisrICAgICAgc2V0UmVnaXN0ZXIoYXJnUmVn LmNvZGUoKSwgdmFfYXJnKHBhcmFtZXRlcnMsIGludDY0X3QpKTsKKysgICAgfSBlbHNlIHsKKysg ICAgICBzdGFja19hcmd1bWVudFtpXSA9IHZhX2FyZyhwYXJhbWV0ZXJzLCBpbnQ2NF90KTsKKysg ICAgfQorKyAgfQorKworKyAgdmFfZW5kKHBhcmFtZXRlcnMpOworKyAgc2V0UmVnaXN0ZXIoc3As IGVudHJ5X3N0YWNrKTsKKysKKysgIGNhbGxJbnRlcm5hbChlbnRyeSk7CisrCisrICBNT1pfQVNT RVJUKGVudHJ5X3N0YWNrID09IGdldFJlZ2lzdGVyKHNwKSk7CisrICBzZXRSZWdpc3RlcihzcCwg b3JpZ2luYWxfc3RhY2spOworKworKyAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihyMyk7 CisrICByZXR1cm4gcmVzdWx0OworK30KKysKKyt1aW50cHRyX3QgU2ltdWxhdG9yOjpwdXNoQWRk cmVzcyh1aW50cHRyX3QgYWRkcmVzcykgeworKyAgaW50NjRfdCBuZXdfc3AgPSBnZXRSZWdpc3Rl cihzcCkgLSBzaXplb2YodWludHB0cl90KTsKKysgIHVpbnRwdHJfdCogc3RhY2tfc2xvdCA9IHJl aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4obmV3X3NwKTsKKysgICpzdGFja19zbG90ID0gYWRk cmVzczsKKysgIHNldFJlZ2lzdGVyKHNwLCBuZXdfc3ApOworKyAgcmV0dXJuIG5ld19zcDsKKyt9 CisrCisrdWludHB0cl90IFNpbXVsYXRvcjo6cG9wQWRkcmVzcygpIHsKKysgIGludDY0X3QgY3Vy cmVudF9zcCA9IGdldFJlZ2lzdGVyKHNwKTsKKysgIHVpbnRwdHJfdCogc3RhY2tfc2xvdCA9IHJl aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oY3VycmVudF9zcCk7CisrICB1aW50cHRyX3QgYWRk cmVzcyA9ICpzdGFja19zbG90OworKyAgc2V0UmVnaXN0ZXIoc3AsIGN1cnJlbnRfc3AgKyBzaXpl b2YodWludHB0cl90KSk7CisrICByZXR1cm4gYWRkcmVzczsKKyt9CisrCisrfSAgLy8gbmFtZXNw YWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcworKworK2pzOjpqaXQ6OlNpbXVsYXRvciogSlND b250ZXh0OjpzaW11bGF0b3IoKSBjb25zdCB7IHJldHVybiBzaW11bGF0b3JfOyB9CitkaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBj NjQvU2ltdWxhdG9yLXBwYzY0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAwMDAuLmM3YTNmMzc2N2Q2MQorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2 NC9TaW11bGF0b3ItcHBjNjQuaAorQEAgLTAsMCArMSw1NTYgQEAKKysvKiAtKi0gTW9kZTogQysr OyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg LSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291 cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJs aWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlz dHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6 Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaWZuZGVmIGppdF9wcGM2NF9TaW11bGF0 b3JfcHBjNjRfaAorKyNkZWZpbmUgaml0X3BwYzY0X1NpbXVsYXRvcl9wcGM2NF9oCisrCisrI2lm ZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAorKworKyMgIGluY2x1ZGUgIm1vemlsbGEvQXRvbWljcy5o IgorKworKyMgIGluY2x1ZGUgImppdC9Jb25UeXBlcy5oIgorKyMgIGluY2x1ZGUgImpzL1Byb2Zp bGluZ0ZyYW1lSXRlcmF0b3IuaCIKKysjICBpbmNsdWRlICJ0aHJlYWRpbmcvVGhyZWFkLmgiCisr IyAgaW5jbHVkZSAidm0vTXV0ZXhJRHMuaCIKKysjICBpbmNsdWRlICJ3YXNtL1dhc21TaWduYWxI YW5kbGVycy5oIgorKworK25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrY2xh c3MgSml0QWN0aXZhdGlvbjsKKytjbGFzcyBTaW11bGF0b3I7CisrY2xhc3MgUmVkaXJlY3Rpb247 CisrY2xhc3MgQ2FjaGVQYWdlOworK2NsYXNzIEF1dG9Mb2NrU2ltdWxhdG9yOworKworK3R5cGVk ZWYgdm9pZCAoKlNpbmdsZVN0ZXBDYWxsYmFjaykodm9pZCogYXJnLCBTaW11bGF0b3IqIHNpbSwg dm9pZCogcGMpOworKworK2NvbnN0IGludHB0cl90IGtQb2ludGVyQWxpZ25tZW50ID0gODsKKytj b25zdCBpbnRwdHJfdCBrUG9pbnRlckFsaWdubWVudE1hc2sgPSBrUG9pbnRlckFsaWdubWVudCAt IDE7CisrY29uc3QgaW50cHRyX3Qga0RvdWJsZUFsaWdubWVudCA9IDg7CisrY29uc3QgaW50cHRy X3Qga0RvdWJsZUFsaWdubWVudE1hc2sgPSBrRG91YmxlQWxpZ25tZW50IC0gMTsKKysKKytjb25z dCBpbnQga051bUdQUmVnaXN0ZXJzID0gMzI7CisrY29uc3QgaW50IGtQQ1JlZ2lzdGVyID0gMzI7 CisrY29uc3QgaW50IGtOdW1GUFVSZWdpc3RlcnMgPSAzMjsKKytjb25zdCBpbnQga051bVZSUmVn aXN0ZXJzID0gMzI7ICAvLyBWUjAtVlIzMSAoQWx0aXZlYy9WTVg7ID0gVlNSMzItNjMgaW4gVlNY KQorKworKy8vIFBQQzY0IENvbmRpdGlvbiBSZWdpc3RlcjogOCBmaWVsZHMgb2YgNCBiaXRzIGVh Y2guCisrLy8gRWFjaCBmaWVsZDogYml0Mz1MVCwgYml0Mj1HVCwgYml0MT1FUSwgYml0MD1TTyAo aW4gUFBDIGJpZy1lbmRpYW4gbnVtYmVyaW5nCisrLy8gd2l0aGluIGEgZmllbGQsIGJ1dCBzdG9y ZWQgaW4gbGl0dGxlLWVuZGlhbiBuaWJibGUgb3JkZXIgaW4gb3VyIHVpbnQzMl90KS4KKytjb25z dCBpbnQga051bUNSRmllbGRzID0gODsKKysKKysvLyBDUiBmaWVsZCBiaXQgcG9zaXRpb25zICh3 aXRoaW4gYSA0LWJpdCBmaWVsZCkuCisrY29uc3QgdWludDhfdCBrQ1JGaWVsZExUID0gMHg4Owor K2NvbnN0IHVpbnQ4X3Qga0NSRmllbGRHVCA9IDB4NDsKKytjb25zdCB1aW50OF90IGtDUkZpZWxk RVEgPSAweDI7CisrY29uc3QgdWludDhfdCBrQ1JGaWVsZFNPID0gMHgxOworKworKy8vIFhFUiBy ZWdpc3RlciBiaXQgcG9zaXRpb25zLgorK2NvbnN0IGludCBrWEVSU09CaXQgPSAzMTsKKytjb25z dCBpbnQga1hFUk9WQml0ID0gMzA7CisrY29uc3QgaW50IGtYRVJDQUJpdCA9IDI5OworK2NvbnN0 IGludCBrWEVST1YzMkJpdCA9IDE5OworK2NvbnN0IGludCBrWEVSQ0EzMkJpdCA9IDE4OworKwor Ky8vIEZQU0NSIHJvdW5kaW5nIG1vZGUgYml0cyAoYml0cyA2Mjo2Mywgc3RvcmVkIGluIGxvdyBi aXRzIG9mIG91ciB1aW50NjRfdCkuCisrY29uc3QgdWludDY0X3Qga0ZQU0NSUk5NYXNrID0gMHgz OworKworKy8vIEZQVSByb3VuZGluZyBtb2RlcyBtYXRjaGluZyBQUEM2NCBGUFNDUiBSTiBmaWVs ZC4KKytlbnVtIEZQVVJvdW5kaW5nTW9kZSB7CisrICBSTiA9IDAsICAvLyBSb3VuZCB0byBOZWFy ZXN0ICh0aWVzIHRvIGV2ZW4pCisrICBSWiA9IDEsICAvLyBSb3VuZCB0b3dhcmQgWmVybworKyAg UlAgPSAyLCAgLy8gUm91bmQgdG93YXJkICtJbmZpbml0eQorKyAgUk0gPSAzLCAgLy8gUm91bmQg dG93YXJkIC1JbmZpbml0eQorK307CisrCisrLy8gRlBVIGludmFsaWQgcmVzdWx0IGNvbnN0YW50 cy4KKytjb25zdCB1aW50MzJfdCBrRlBVSW52YWxpZFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQz Ml90PigxIDw8IDMxKSAtIDE7CisrY29uc3QgaW50MzJfdCBrRlBVSW52YWxpZFJlc3VsdE5lZ2F0 aXZlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oMXUgPDwgMzEpOworK2NvbnN0IHVpbnQ2NF90IGtG UFU2NEludmFsaWRSZXN1bHQgPQorKyAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh c3Q8dWludDY0X3Q+KDEpIDw8IDYzKSAtIDE7CisrY29uc3QgaW50NjRfdCBrRlBVNjRJbnZhbGlk UmVzdWx0TmVnYXRpdmUgPQorKyAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDx1 aW50NjRfdD4oMSkgPDwgNjMpOworKworKy8vIEJyZWFrcG9pbnQvc3RvcCBjb2RlIHJhbmdlcy4K Kytjb25zdCB1aW50MzJfdCBrTWF4V2F0Y2hwb2ludENvZGUgPSAzMTsKKytjb25zdCB1aW50MzJf dCBrTWF4U3RvcENvZGUgPSAxMjc7CisrY29uc3QgdWludDMyX3Qga1dhc21UcmFwQ29kZSA9IDY7 CisrCisrLy8gUmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb246IFBQQ19zdG9wICgweDRDMDAwMkU0KS4K KysvLyBEaXN0aW5jdCBmcm9tIFBQQ190cmFwICgweDdGRTAwMDA4KSB1c2VkIGZvciB3YXNtIHRy YXBzLgorK2NvbnN0IHVpbnQzMl90IGtDYWxsUmVkaXJJbnN0ciA9IDB4NEMwMDAyRTQ7CisrCisr dHlwZWRlZiB1aW50MzJfdCBJbnN0cjsKKytjbGFzcyBTaW1JbnN0cnVjdGlvbjsKKysKKytjbGFz cyBTaW11bGF0b3IgeworKyAgZnJpZW5kIGNsYXNzIHBwYzY0RGVidWdnZXI7CisrCisrIHB1Ymxp YzoKKysgIGVudW0gUmVnaXN0ZXIgeworKyAgICBub19yZWcgPSAtMSwKKysgICAgcjAgPSAwLAor KyAgICByMSwKKysgICAgcjIsCisrICAgIHIzLAorKyAgICByNCwKKysgICAgcjUsCisrICAgIHI2 LAorKyAgICByNywKKysgICAgcjgsCisrICAgIHI5LAorKyAgICByMTAsCisrICAgIHIxMSwKKysg ICAgcjEyLAorKyAgICByMTMsCisrICAgIHIxNCwKKysgICAgcjE1LAorKyAgICByMTYsCisrICAg IHIxNywKKysgICAgcjE4LAorKyAgICByMTksCisrICAgIHIyMCwKKysgICAgcjIxLAorKyAgICBy MjIsCisrICAgIHIyMywKKysgICAgcjI0LAorKyAgICByMjUsCisrICAgIHIyNiwKKysgICAgcjI3 LAorKyAgICByMjgsCisrICAgIHIyOSwKKysgICAgcjMwLAorKyAgICByMzEsCisrICAgIHBjLAor KyAgICBrTnVtU2ltdVJlZ2lzdGVycywKKysgICAgLy8gQWxpYXNlcworKyAgICBzcCA9IHIxLAor KyAgICBmcCA9IHIzMSwKKysgIH07CisrCisrICBlbnVtIEZQVVJlZ2lzdGVyIHsKKysgICAgZjAg PSAwLAorKyAgICBmMSwKKysgICAgZjIsCisrICAgIGYzLAorKyAgICBmNCwKKysgICAgZjUsCisr ICAgIGY2LAorKyAgICBmNywKKysgICAgZjgsCisrICAgIGY5LAorKyAgICBmMTAsCisrICAgIGYx MSwKKysgICAgZjEyLAorKyAgICBmMTMsCisrICAgIGYxNCwKKysgICAgZjE1LAorKyAgICBmMTYs CisrICAgIGYxNywKKysgICAgZjE4LAorKyAgICBmMTksCisrICAgIGYyMCwKKysgICAgZjIxLAor KyAgICBmMjIsCisrICAgIGYyMywKKysgICAgZjI0LAorKyAgICBmMjUsCisrICAgIGYyNiwKKysg ICAgZjI3LAorKyAgICBmMjgsCisrICAgIGYyOSwKKysgICAgZjMwLAorKyAgICBmMzEsCisrICAg IGtOdW1GUFVSZWdpc3RlcnMKKysgIH07CisrCisrICBzdGF0aWMgU2ltdWxhdG9yKiBDcmVhdGUo KTsKKysgIHN0YXRpYyB2b2lkIERlc3Ryb3koU2ltdWxhdG9yKiBzaW11bGF0b3IpOworKworKyAg U2ltdWxhdG9yKCk7CisrICB+U2ltdWxhdG9yKCk7CisrCisrICBzdGF0aWMgU2ltdWxhdG9yKiBD dXJyZW50KCk7CisrCisrICBzdGF0aWMgaW5saW5lIHVpbnRwdHJfdCBTdGFja0xpbWl0KCkgewor KyAgICByZXR1cm4gU2ltdWxhdG9yOjpDdXJyZW50KCktPnN0YWNrTGltaXQoKTsKKysgIH0KKysK KysgIHVpbnRwdHJfdCogYWRkcmVzc09mU3RhY2tMaW1pdCgpOworKworKyAgLy8gR1BSIGFjY2Vz c29ycy4KKysgIHZvaWQgc2V0UmVnaXN0ZXIoaW50IHJlZywgaW50NjRfdCB2YWx1ZSk7CisrICBp bnQ2NF90IGdldFJlZ2lzdGVyKGludCByZWcpIGNvbnN0OworKworKyAgLy8gRlBSIGFjY2Vzc29y cy4KKysgIHZvaWQgc2V0RnB1UmVnaXN0ZXIoaW50IGZwdXJlZywgaW50NjRfdCB2YWx1ZSk7Cisr ICB2b2lkIHNldEZwdVJlZ2lzdGVyV29yZChpbnQgZnB1cmVnLCBpbnQzMl90IHZhbHVlKTsKKysg IHZvaWQgc2V0RnB1UmVnaXN0ZXJGbG9hdChpbnQgZnB1cmVnLCBmbG9hdCB2YWx1ZSk7CisrICB2 b2lkIHNldEZwdVJlZ2lzdGVyRG91YmxlKGludCBmcHVyZWcsIGRvdWJsZSB2YWx1ZSk7CisrICBp bnQ2NF90IGdldEZwdVJlZ2lzdGVyKGludCBmcHVyZWcpIGNvbnN0OworKyAgaW50MzJfdCBnZXRG cHVSZWdpc3RlcldvcmQoaW50IGZwdXJlZykgY29uc3Q7CisrICBpbnQzMl90IGdldEZwdVJlZ2lz dGVyU2lnbmVkV29yZChpbnQgZnB1cmVnKSBjb25zdDsKKysgIGZsb2F0IGdldEZwdVJlZ2lzdGVy RmxvYXQoaW50IGZwdXJlZykgY29uc3Q7CisrICBkb3VibGUgZ2V0RnB1UmVnaXN0ZXJEb3VibGUo aW50IGZwdXJlZykgY29uc3Q7CisrCisrICAvLyBWUiBhY2Nlc3NvcnMgKEFsdGl2ZWMvVk1YIHJl Z2lzdGVycyBWUjAtVlIzMSkuIFRoZSBieXRlcyBhcnJheSBpcyB0aGUKKysgIC8vIGdyb3VuZCB0 cnV0aDogYnl0ZXNbMF0gaXMgdGhlIG1vc3Qtc2lnbmlmaWNhbnQtYnl0ZSBvbiBQUEM2NCBiaWct ZW5kaWFuCisrICAvLyBudW1iZXJpbmcsIGkuZS4sIFZTUltNU0IuLkxTQl0gbWFwcGVkIGFzIGJ5 dGVzWzAuLjE1XS4gQ2FsbGVycyB0aGF0IHdhbnQKKysgIC8vIHR5cGVkIHZpZXdzIChsYW5lIDAg ZXRjLikgc2hvdWxkIGV4dHJhY3QgZnJvbSB0aGUgYnl0ZXMgYXJyYXkgYWNjb3JkaW5nCisrICAv LyB0byB0aGUgSVNBJ3MgbGFuZSBudW1iZXJpbmcgZm9yIHRoYXQgaW5zdHJ1Y3Rpb24uCisrICB2 b2lkIHNldFZSQnl0ZXMoaW50IHZyZWcsIGNvbnN0IHVpbnQ4X3QgYnl0ZXNbMTZdKTsKKysgIHZv aWQgZ2V0VlJCeXRlcyhpbnQgdnJlZywgdWludDhfdCBieXRlc1sxNl0pIGNvbnN0OworKworKyAg Ly8gVlNSIChWZWN0b3ItU2NhbGFyIFJlZ2lzdGVyKSBhY2Nlc3NvcnM6IHVuaWZpZWQgNjQtcmVn aXN0ZXIgbmFtZXNwYWNlCisrICAvLyB3aGVyZSBWU1IgMC0zMSBhbGlhc2VzIEZQUiAwLTMxIChE VzAgaXMgdGhlIEZQUiB2YWx1ZSwgRFcxIGlzCisrICAvLyBhcmNoaXRlY3R1cmFsbHkgdW5kZWZp bmVkIOKAlCB3ZSBtb2RlbCBpdCBhcyB6ZXJvIG9uIHJlYWQsIGlnbm9yZWQgb24KKysgIC8vIHdy aXRlKSBhbmQgVlNSIDMyLTYzIGFsaWFzZXMgVlIgMC0zMS4gVXNlZCBieSBWU1ggaW5zdHJ1Y3Rp b25zCisrICAvLyAoeHhwZXJtZGksIHh4bG9yLCB4eGx4b3IsIG10dnNyZCwgbWZ2c3JkLCAuLi4p LgorKyAgdm9pZCBnZXRWU1IxMjgoaW50IHZzciwgdWludDhfdCBieXRlc1sxNl0pIGNvbnN0Owor KyAgdm9pZCBzZXRWU1IxMjgoaW50IHZzciwgY29uc3QgdWludDhfdCBieXRlc1sxNl0pOworKwor KyAgLy8gU1BSIGFjY2Vzc29ycy4KKysgIGludDY0X3QgZ2V0TFIoKSBjb25zdCB7IHJldHVybiBM Ul87IH0KKysgIHZvaWQgc2V0TFIoaW50NjRfdCB2YWx1ZSkgeyBMUl8gPSB2YWx1ZTsgfQorKyAg aW50NjRfdCBnZXRDVFIoKSBjb25zdCB7IHJldHVybiBDVFJfOyB9CisrICB2b2lkIHNldENUUihp bnQ2NF90IHZhbHVlKSB7IENUUl8gPSB2YWx1ZTsgfQorKyAgdWludDMyX3QgZ2V0Q1IoKSBjb25z dCB7IHJldHVybiBDUl87IH0KKysgIHZvaWQgc2V0Q1IodWludDMyX3QgdmFsdWUpIHsgQ1JfID0g dmFsdWU7IH0KKysgIHVpbnQ2NF90IGdldFhFUigpIGNvbnN0IHsgcmV0dXJuIFhFUl87IH0KKysg IHZvaWQgc2V0WEVSKHVpbnQ2NF90IHZhbHVlKSB7IFhFUl8gPSB2YWx1ZTsgfQorKyAgdWludDY0 X3QgZ2V0RlBTQ1IoKSBjb25zdCB7IHJldHVybiBGUFNDUl87IH0KKysgIHZvaWQgc2V0RlBTQ1Io dWludDY0X3QgdmFsdWUpIHsgRlBTQ1JfID0gdmFsdWU7IH0KKysKKysgIC8vIENSIGZpZWxkIGFj Y2Vzc29yczogZmllbGQgMCBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBuaWJibGUgKGJpdHMgMzE6 MjgpLgorKyAgdWludDhfdCBnZXRDUkZpZWxkKGludCBmaWVsZCkgY29uc3QgeworKyAgICByZXR1 cm4gKENSXyA+PiAoNCAqICg3IC0gZmllbGQpKSkgJiAweEY7CisrICB9CisrICB2b2lkIHNldENS RmllbGQoaW50IGZpZWxkLCB1aW50OF90IHZhbCkgeworKyAgICB1aW50MzJfdCBzaGlmdCA9IDQg KiAoNyAtIGZpZWxkKTsKKysgICAgQ1JfID0gKENSXyAmIH4oMHhGdSA8PCBzaGlmdCkpIHwgKCh2 YWwgJiAweEZ1KSA8PCBzaGlmdCk7CisrICB9CisrCisrICAvLyBYRVIgYml0IGFjY2Vzc29ycy4K KysgIGJvb2wgZ2V0WEVSU08oKSBjb25zdCB7IHJldHVybiAoWEVSXyA+PiBrWEVSU09CaXQpICYg MTsgfQorKyAgdm9pZCBzZXRYRVJTTyhib29sIHYpIHsKKysgICAgWEVSXyA9IChYRVJfICYgfigx dWxsIDw8IGtYRVJTT0JpdCkpIHwgKCh1aW50NjRfdCl2IDw8IGtYRVJTT0JpdCk7CisrICB9Cisr ICBib29sIGdldFhFUk9WKCkgY29uc3QgeyByZXR1cm4gKFhFUl8gPj4ga1hFUk9WQml0KSAmIDE7 IH0KKysgIHZvaWQgc2V0WEVST1YoYm9vbCB2KSB7CisrICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVs bCA8PCBrWEVST1ZCaXQpKSB8ICgodWludDY0X3QpdiA8PCBrWEVST1ZCaXQpOworKyAgICAvLyBN aXJyb3IgdG8gT1YzMi4gUmVhbCBQT1dFUjkgc2lsaWNvbiBzZXRzIE9WMzIgPT0gT1YgZm9yIGJv dGggMzItYml0CisrICAgIC8vIGFuZCA2NC1iaXQgb3ZlcmZsb3cgb3BzOiBtdWxsZG8oMiwgMl42 MikgcHJvZHVjZXMgT1Y9T1YzMj0xOworKyAgICAvLyBtdWxsZG8oMl4zMCwgNCkgcHJvZHVjZXMg T1Y9T1YzMj0wLiBUaGUgSklUJ3MKKysgICAgLy8gUE9XRVI5IE92ZXJmbG93IHBhdGggaXMgYG11 bGxkbyArIG1jcnhyeCArIGJjIE92ZXJmbG93YCwgd2hlcmUKKysgICAgLy8gbWNyeHJ4IHBsYWNl cyBPVjMyIGluIHRoZSBHVCBzbG90IGFuZCB0aGUgT3ZlcmZsb3cgY29uZGl0aW9uIHRlc3RzCisr ICAgIC8vIEdUIOKAlCBzbyBPVjMyIG11c3QgYmUgbGl2ZSBvciBuby1vdmVyZmxvdyBpcyByZXBv cnRlZCBldmVuIHdoZW4KKysgICAgLy8gT1Y9MS4gV2l0aG91dCB0aGlzIG1pcnJvciwgQmlnSW50 IGZhc3QtcGF0aCBtdWwgc2lsZW50bHkgd3JhcHMuCisrICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVs bCA8PCBrWEVST1YzMkJpdCkpIHwgKCh1aW50NjRfdCl2IDw8IGtYRVJPVjMyQml0KTsKKysgICAg aWYgKHYpIHNldFhFUlNPKHRydWUpOworKyAgfQorKyAgYm9vbCBnZXRYRVJDQSgpIGNvbnN0IHsg cmV0dXJuIChYRVJfID4+IGtYRVJDQUJpdCkgJiAxOyB9CisrICB2b2lkIHNldFhFUkNBKGJvb2wg dikgeworKyAgICBYRVJfID0gKFhFUl8gJiB+KDF1bGwgPDwga1hFUkNBQml0KSkgfCAoKHVpbnQ2 NF90KXYgPDwga1hFUkNBQml0KTsKKysgIH0KKysKKysgIC8vIFBDIGFjY2Vzc29ycy4KKysgIHZv aWQgc2V0X3BjKGludDY0X3QgdmFsdWUpOworKyAgaW50NjRfdCBnZXRfcGMoKSBjb25zdDsKKysK KysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgVCBnZXRfcGNfYXMoKSBjb25zdCB7CisrICAg IHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KGdldF9wYygpKTsKKysgIH0KKysKKysgIHZvaWQg ZW5hYmxlX3NpbmdsZV9zdGVwcGluZyhTaW5nbGVTdGVwQ2FsbGJhY2sgY2IsIHZvaWQqIGFyZyk7 CisrICB2b2lkIGRpc2FibGVfc2luZ2xlX3N0ZXBwaW5nKCk7CisrCisrICB1aW50cHRyX3Qgc3Rh Y2tMaW1pdCgpIGNvbnN0OworKyAgYm9vbCBvdmVyUmVjdXJzZWQodWludHB0cl90IG5ld3NwID0g MCkgY29uc3Q7CisrICBib29sIG92ZXJSZWN1cnNlZFdpdGhFeHRyYSh1aW50MzJfdCBleHRyYSkg Y29uc3Q7CisrCisrICB0ZW1wbGF0ZSA8Ym9vbCBlbmFibGVTdG9wU2ltQXQ+CisrICB2b2lkIGV4 ZWN1dGUoKTsKKysKKysgIGludDY0X3QgY2FsbCh1aW50OF90KiBlbnRyeSwgaW50IGFyZ3VtZW50 X2NvdW50LCAuLi4pOworKworKyAgdWludHB0cl90IHB1c2hBZGRyZXNzKHVpbnRwdHJfdCBhZGRy ZXNzKTsKKysgIHVpbnRwdHJfdCBwb3BBZGRyZXNzKCk7CisrCisrICB2b2lkIHNldExhc3REZWJ1 Z2dlcklucHV0KGNoYXIqIGlucHV0KTsKKysgIGNoYXIqIGxhc3REZWJ1Z2dlcklucHV0KCkgeyBy ZXR1cm4gbGFzdERlYnVnZ2VySW5wdXRfOyB9CisrCisrICBib29sIGhhc19iYWRfcGMoKSBjb25z dDsKKysKKysgIC8vIFVwZGF0ZSBDUiBmaWVsZCAwIGZyb20gYSA2NC1iaXQgcmVzdWx0LgorKyAg dm9pZCB1cGRhdGVDUjAoaW50NjRfdCByZXN1bHQpIHsKKysgICAgdWludDhfdCBmaWVsZCA9IGtD UkZpZWxkU08gKiBnZXRYRVJTTygpOworKyAgICBpZiAocmVzdWx0IDwgMCkKKysgICAgICBmaWVs ZCB8PSBrQ1JGaWVsZExUOworKyAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQorKyAgICAgIGZpZWxk IHw9IGtDUkZpZWxkR1Q7CisrICAgIGVsc2UKKysgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEVROwor KyAgICBzZXRDUkZpZWxkKDAsIGZpZWxkKTsKKysgIH0KKysKKysgIC8vIFVwZGF0ZSBDUiBmaWVs ZCAwIGZyb20gYSAzMi1iaXQgcmVzdWx0IChzaWduLWV4dGVuZGVkIGNvbXBhcmlzb24pLgorKyAg dm9pZCB1cGRhdGVDUjBfMzIoaW50MzJfdCByZXN1bHQpIHsKKysgICAgdWludDhfdCBmaWVsZCA9 IGtDUkZpZWxkU08gKiBnZXRYRVJTTygpOworKyAgICBpZiAocmVzdWx0IDwgMCkKKysgICAgICBm aWVsZCB8PSBrQ1JGaWVsZExUOworKyAgICBlbHNlIGlmIChyZXN1bHQgPiAwKQorKyAgICAgIGZp ZWxkIHw9IGtDUkZpZWxkR1Q7CisrICAgIGVsc2UKKysgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEVR OworKyAgICBzZXRDUkZpZWxkKDAsIGZpZWxkKTsKKysgIH0KKysKKysgIC8vIENvbXBhcmUgYW5k IHNldCBhbiBhcmJpdHJhcnkgQ1IgZmllbGQuCisrICB2b2lkIHNldENSRmllbGRDbXAoaW50IGZp ZWxkLCBpbnQ2NF90IGxocywgaW50NjRfdCByaHMpIHsKKysgICAgdWludDhfdCB2YWwgPSBrQ1JG aWVsZFNPICogZ2V0WEVSU08oKTsKKysgICAgaWYgKGxocyA8IHJocykKKysgICAgICB2YWwgfD0g a0NSRmllbGRMVDsKKysgICAgZWxzZSBpZiAobGhzID4gcmhzKQorKyAgICAgIHZhbCB8PSBrQ1JG aWVsZEdUOworKyAgICBlbHNlCisrICAgICAgdmFsIHw9IGtDUkZpZWxkRVE7CisrICAgIHNldENS RmllbGQoZmllbGQsIHZhbCk7CisrICB9CisrCisrICB2b2lkIHNldENSRmllbGRDbXBVKGludCBm aWVsZCwgdWludDY0X3QgbGhzLCB1aW50NjRfdCByaHMpIHsKKysgICAgdWludDhfdCB2YWwgPSBr Q1JGaWVsZFNPICogZ2V0WEVSU08oKTsKKysgICAgaWYgKGxocyA8IHJocykKKysgICAgICB2YWwg fD0ga0NSRmllbGRMVDsKKysgICAgZWxzZSBpZiAobGhzID4gcmhzKQorKyAgICAgIHZhbCB8PSBr Q1JGaWVsZEdUOworKyAgICBlbHNlCisrICAgICAgdmFsIHw9IGtDUkZpZWxkRVE7CisrICAgIHNl dENSRmllbGQoZmllbGQsIHZhbCk7CisrICB9CisrCisrIHByaXZhdGU6CisrICBlbnVtIFNwZWNp YWxWYWx1ZXMgeworKyAgICAvLyBQUEM2NCBtYXNrcyB0aGUgbG93IDIgYml0cyBvZiBicmFuY2gg dGFyZ2V0cywgc28gdGhlc2UgbXVzdCBiZQorKyAgICAvLyA0LWJ5dGUgYWxpZ25lZCB0byBzdXJ2 aXZlIHRoZSAmIH4zIG1hc2sgaW4gYmxyL2JjY3RyLgorKyAgICBiYWRfcmEgPSAtNCwKKysgICAg ZW5kX3NpbV9wYyA9IC04LAorKyAgICBVbnByZWRpY3RhYmxlID0gMHhiYWRiZWFmCisrICB9Owor KworKyAgYm9vbCBpbml0KCk7CisrCisrICB2b2lkIGZvcm1hdChTaW1JbnN0cnVjdGlvbiogaW5z dHIsIGNvbnN0IGNoYXIqIGZvcm1hdCk7CisrCisrICAvLyBNZW1vcnkgYWNjZXNzLgorKyAgaW5s aW5lIHVpbnQ4X3QgcmVhZEJVKHVpbnQ2NF90IGFkZHIpOworKyAgaW5saW5lIGludDhfdCByZWFk Qih1aW50NjRfdCBhZGRyKTsKKysgIGlubGluZSB2b2lkIHdyaXRlQih1aW50NjRfdCBhZGRyLCB1 aW50OF90IHZhbHVlKTsKKysgIGlubGluZSB2b2lkIHdyaXRlQih1aW50NjRfdCBhZGRyLCBpbnQ4 X3QgdmFsdWUpOworKworKyAgaW5saW5lIHVpbnQxNl90IHJlYWRIVSh1aW50NjRfdCBhZGRyLCBT aW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgaW5saW5lIGludDE2X3QgcmVhZEgodWludDY0X3Qg YWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSB2b2lkIHdyaXRlSCh1aW50 NjRfdCBhZGRyLCB1aW50MTZfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlu bGluZSB2b2lkIHdyaXRlSCh1aW50NjRfdCBhZGRyLCBpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVj dGlvbiogaW5zdHIpOworKworKyAgaW5saW5lIHVpbnQzMl90IHJlYWRXVSh1aW50NjRfdCBhZGRy LCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgaW5saW5lIGludDMyX3QgcmVhZFcodWludDY0 X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSB2b2lkIHdyaXRlVyh1 aW50NjRfdCBhZGRyLCB1aW50MzJfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysg IGlubGluZSB2b2lkIHdyaXRlVyh1aW50NjRfdCBhZGRyLCBpbnQzMl90IHZhbHVlLCBTaW1JbnN0 cnVjdGlvbiogaW5zdHIpOworKworKyAgaW5saW5lIGludDY0X3QgcmVhZERXKHVpbnQ2NF90IGFk ZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgdm9pZCB3cml0ZURXKHVpbnQ2 NF90IGFkZHIsIGludDY0X3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrCisrICBp bmxpbmUgZG91YmxlIHJlYWREKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7 CisrICBpbmxpbmUgdm9pZCB3cml0ZUQodWludDY0X3QgYWRkciwgZG91YmxlIHZhbHVlLCBTaW1J bnN0cnVjdGlvbiogaW5zdHIpOworKworKyAgaW5saW5lIHVpbnQ4X3QgbG9hZExpbmtlZEIodWlu dDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSBpbnQgc3RvcmVD b25kaXRpb25hbEIodWludDY0X3QgYWRkciwgdWludDhfdCB2YWx1ZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSB1aW50 MTZfdCBsb2FkTGlua2VkSCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwor KyAgaW5saW5lIGludCBzdG9yZUNvbmRpdGlvbmFsSCh1aW50NjRfdCBhZGRyLCB1aW50MTZfdCB2 YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKTsKKysgIGlubGluZSBpbnQzMl90IGxvYWRMaW5rZWRXKHVpbnQ2NF90IGFkZHIsIFNpbUlu c3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgaW50IHN0b3JlQ29uZGl0aW9uYWxXKHVpbnQ2 NF90IGFkZHIsIGludDMyX3QgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgaW50NjRfdCBsb2FkTGlua2VkRCh1 aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgaW5saW5lIGludCBzdG9y ZUNvbmRpdGlvbmFsRCh1aW50NjRfdCBhZGRyLCBpbnQ2NF90IHZhbHVlLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKworKyAgLy8gSW5z dHJ1Y3Rpb24gZGVjb2RlcnMuCisrICB2b2lkIGRlY29kZURGb3JtQUxVKFNpbUluc3RydWN0aW9u KiBpbnN0cik7CisrICB2b2lkIGRlY29kZURGb3JtTG9hZChTaW1JbnN0cnVjdGlvbiogaW5zdHIp OworKyAgdm9pZCBkZWNvZGVERm9ybVN0b3JlKFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICB2 b2lkIGRlY29kZURTRm9ybShTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgdm9pZCBkZWNvZGVY Rm9ybShTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgdm9pZCBkZWNvZGVSb3RhdGVNYXNrKFNp bUluc3RydWN0aW9uKiBpbnN0cik7CisrICB2b2lkIGRlY29kZUJyYW5jaChTaW1JbnN0cnVjdGlv biogaW5zdHIpOworKyAgdm9pZCBkZWNvZGVGUChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAg dm9pZCBkZWNvZGVWU1goU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIHZvaWQgZGVjb2RlVk1Y KFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICAvLyBQb3dlciBJU0EgdjMuMSBwcmVmaXhlZCBp bnN0cnVjdGlvbnMuIGBwcmVmaXhgIHBvaW50cyBhdCB0aGUKKysgIC8vIDQtYnl0ZSBwcmVmaXgg d29yZDsgdGhlIHN1ZmZpeCBpcyByZWFkIGZyb20gYHByZWZpeCArIDRgLgorKyAgdm9pZCBkZWNv ZGVQcmVmaXhlZChTaW1JbnN0cnVjdGlvbiogcHJlZml4KTsKKysKKysgIHZvaWQgc29mdHdhcmVJ bnRlcnJ1cHQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysKKysgIC8vIFN0b3AvYnJlYWtwb2lu dCBoZWxwZXJzLgorKyAgYm9vbCBpc1dhdGNocG9pbnQodWludDMyX3QgY29kZSk7CisrICB2b2lk IHByaW50V2F0Y2hwb2ludCh1aW50MzJfdCBjb2RlKTsKKysgIHZvaWQgaGFuZGxlU3RvcCh1aW50 MzJfdCBjb2RlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgYm9vbCBpc1N0b3BJbnN0cnVj dGlvbihTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgYm9vbCBpc0VuYWJsZWRTdG9wKHVpbnQz Ml90IGNvZGUpOworKyAgdm9pZCBlbmFibGVTdG9wKHVpbnQzMl90IGNvZGUpOworKyAgdm9pZCBk aXNhYmxlU3RvcCh1aW50MzJfdCBjb2RlKTsKKysgIHZvaWQgaW5jcmVhc2VTdG9wQ291bnRlcih1 aW50MzJfdCBjb2RlKTsKKysgIHZvaWQgcHJpbnRTdG9wSW5mbyh1aW50MzJfdCBjb2RlKTsKKysK KysgIEpTOjpQcm9maWxpbmdGcmFtZUl0ZXJhdG9yOjpSZWdpc3RlclN0YXRlIHJlZ2lzdGVyU3Rh dGUoKTsKKysKKysgIGJvb2wgTU9aX0FMV0FZU19JTkxJTkUgaGFuZGxlV2FzbVNlZ0ZhdWx0KHVp bnQ2NF90IGFkZHIsIHVuc2lnbmVkIG51bUJ5dGVzKSB7CisrICAgIGlmIChNT1pfTElLRUxZKCFq czo6d2FzbTo6Q29kZUV4aXN0cykpIHsKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysg ICAgdWludDhfdCogbmV3UEM7CisrICAgIGlmICghanM6Ondhc206Ok1lbW9yeUFjY2Vzc1RyYXBz KHJlZ2lzdGVyU3RhdGUoKSwgKHVpbnQ4X3QqKWFkZHIsIG51bUJ5dGVzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3UEMpKSB7CisrICAgICAgcmV0dXJuIGZhbHNl OworKyAgICB9CisrICAgIExMQml0XyA9IGZhbHNlOworKyAgICBzZXRfcGMoaW50NjRfdChuZXdQ QykpOworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysKKysgIHZvaWQgaW5zdHJ1Y3Rpb25EZWNv ZGUoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysKKysgcHVibGljOgorKyAgc3RhdGljIGludDY0 X3QgU3RvcFNpbUF0OworKworKyAgc3RhdGljIHZvaWQqIFJlZGlyZWN0TmF0aXZlRnVuY3Rpb24o dm9pZCogbmF0aXZlRnVuY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBQklGdW5jdGlvblR5cGUgdHlwZSk7CisrCisrIHByaXZhdGU6CisrICB2b2lkIHNldENh bGxSZXN1bHREb3VibGUoZG91YmxlIHJlc3VsdCk7CisrICB2b2lkIHNldENhbGxSZXN1bHRGbG9h dChmbG9hdCByZXN1bHQpOworKyAgdm9pZCBzZXRDYWxsUmVzdWx0KGludDY0X3QgcmVzKTsKKysj ICBpZmRlZiBYUF9EQVJXSU4KKysgIHZvaWQgc2V0Q2FsbFJlc3VsdChpbnRwdHJfdCByZXMpOwor KyMgIGVuZGlmCisrICB2b2lkIHNldENhbGxSZXN1bHQoX19pbnQxMjggcmVzKTsKKysKKysgIHZv aWQgY2FsbEludGVybmFsKHVpbnQ4X3QqIGVudHJ5KTsKKysKKysgIC8vIEFyY2hpdGVjdHVyZSBz dGF0ZS4KKysgIGludDY0X3QgcmVnaXN0ZXJzX1trTnVtU2ltdVJlZ2lzdGVyc107CisrICBpbnQ2 NF90IEZQVXJlZ2lzdGVyc19ba051bUZQVVJlZ2lzdGVyc107CisrICAvLyBWUiBuYW1lc3BhY2Ug KEFsdGl2ZWMvVk1YIHJlZ2lzdGVycyBWUjAtVlIzMSA9PSBWU1IzMi02MykuIFN0b3JlZCBhcwor KyAgLy8gMTYgcmF3IGJ5dGVzIHBlciByZWdpc3RlciB0byBwcmVzZXJ2ZSBleGFjdCBhcmNoaXRl Y3R1cmFsIGJ5dGUgb3JkZXIKKysgIC8vIGluZGVwZW5kZW50IG9mIGhvc3QgZW5kaWFubmVzcy4g QWNjZXNzb3JzIGRlZmluZWQgYmVsb3c7IHRoZSBieXRlcworKyAgLy8gYXJyYXkgaXMgdGhlIGdy b3VuZCB0cnV0aC4KKysgIHVpbnQ4X3QgVlJyZWdpc3RlcnNfW2tOdW1WUlJlZ2lzdGVyc11bMTZd OworKworKyAgLy8gUFBDNjQgU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycy4KKysgIGludDY0X3Qg TFJfOworKyAgaW50NjRfdCBDVFJfOworKyAgdWludDMyX3QgQ1JfOworKyAgdWludDY0X3QgWEVS XzsKKysgIHVpbnQ2NF90IEZQU0NSXzsKKysKKysgIC8vIEF0b21pY3MuCisrICBib29sIExMQml0 XzsKKysgIHVpbnRwdHJfdCBMTEFkZHJfOworKyAgaW50NjRfdCBsYXN0TExWYWx1ZV87CisrCisr ICAvLyBTaW11bGF0b3Igc3VwcG9ydC4KKysgIGNoYXIqIHN0YWNrXzsKKysgIHVpbnRwdHJfdCBz dGFja0xpbWl0XzsKKysgIGJvb2wgcGNfbW9kaWZpZWRfOworKyAgaW50NjRfdCBpY291bnRfOwor KyAgaW50NjRfdCBicmVha19jb3VudF87CisrCisrICBjaGFyKiBsYXN0RGVidWdnZXJJbnB1dF87 CisrCisrICBTaW1JbnN0cnVjdGlvbiogYnJlYWtfcGNfOworKyAgSW5zdHIgYnJlYWtfaW5zdHJf OworKworKyAgYm9vbCBzaW5nbGVfc3RlcHBpbmdfOworKyAgU2luZ2xlU3RlcENhbGxiYWNrIHNp bmdsZV9zdGVwX2NhbGxiYWNrXzsKKysgIHZvaWQqIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ187 CisrCisrICBzdGF0aWMgY29uc3QgdWludDMyX3Qga051bU9mV2F0Y2hlZFN0b3BzID0gMjU2Owor KyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtTdG9wRGlzYWJsZWRCaXQgPSAxVSA8PCAzMTsKKysK KysgIHN0cnVjdCBTdG9wQ291bnRBbmREZXNjIHsKKysgICAgdWludDMyX3QgY291bnRfOworKyAg ICBjaGFyKiBkZXNjXzsKKysgIH07CisrICBTdG9wQ291bnRBbmREZXNjIHdhdGNoZWRTdG9wc19b a051bU9mV2F0Y2hlZFN0b3BzXTsKKyt9OworKworKy8vIFByb2Nlc3Mtd2lkZSBzaW11bGF0b3Ig c3RhdGUuCisrY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyB7CisrICBmcmllbmQgY2xhc3MgUmVkaXJl Y3Rpb247CisrICBmcmllbmQgY2xhc3MgQXV0b0xvY2tTaW11bGF0b3JDYWNoZTsKKysKKysgcHJp dmF0ZToKKysgIHN0cnVjdCBJQ2FjaGVIYXNoZXIgeworKyAgICB0eXBlZGVmIHZvaWQqIEtleTsK KysgICAgdHlwZWRlZiB2b2lkKiBMb29rdXA7CisrICAgIHN0YXRpYyBIYXNoTnVtYmVyIGhhc2go Y29uc3QgTG9va3VwJiBsKTsKKysgICAgc3RhdGljIGJvb2wgbWF0Y2goY29uc3QgS2V5JiBrLCBj b25zdCBMb29rdXAmIGwpOworKyAgfTsKKysKKysgcHVibGljOgorKyAgdHlwZWRlZiBIYXNoTWFw PHZvaWQqLCBDYWNoZVBhZ2UqLCBJQ2FjaGVIYXNoZXIsIFN5c3RlbUFsbG9jUG9saWN5PiBJQ2Fj aGVNYXA7CisrCisrICBzdGF0aWMgbW96aWxsYTo6QXRvbWljPHNpemVfdCwgbW96aWxsYTo6UmVs ZWFzZUFjcXVpcmU+CisrICAgICAgSUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQ7CisrICBzdGF0 aWMgdm9pZCBGbHVzaElDYWNoZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpOworKyAgc3RhdGlj IHZvaWQgY2hlY2tJQ2FjaGVMb2NrZWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysKKysgIHN0 YXRpYyBib29sIGluaXRpYWxpemUoKSB7CisrICAgIHNpbmdsZXRvbl8gPSBqc19uZXc8U2ltdWxh dG9yUHJvY2Vzcz4oKTsKKysgICAgcmV0dXJuIHNpbmdsZXRvbl87CisrICB9CisrICBzdGF0aWMg dm9pZCBkZXN0cm95KCkgeworKyAgICBqc19kZWxldGUoc2luZ2xldG9uXyk7CisrICAgIHNpbmds ZXRvbl8gPSBudWxscHRyOworKyAgfQorKworKyAgU2ltdWxhdG9yUHJvY2VzcygpOworKyAgflNp bXVsYXRvclByb2Nlc3MoKTsKKysKKysgcHJpdmF0ZToKKysgIHN0YXRpYyBTaW11bGF0b3JQcm9j ZXNzKiBzaW5nbGV0b25fOworKworKyAgTXV0ZXggY2FjaGVMb2NrXzsKKysgIFJlZGlyZWN0aW9u KiByZWRpcmVjdGlvbl87CisrICBJQ2FjaGVNYXAgaWNhY2hlXzsKKysKKysgcHVibGljOgorKyAg c3RhdGljIElDYWNoZU1hcCYgaWNhY2hlKCkgeworKyAgICBzaW5nbGV0b25fLT5jYWNoZUxvY2tf LmFzc2VydE93bmVkQnlDdXJyZW50VGhyZWFkKCk7CisrICAgIHJldHVybiBzaW5nbGV0b25fLT5p Y2FjaGVfOworKyAgfQorKworKyAgc3RhdGljIFJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbigpIHsK KysgICAgc2luZ2xldG9uXy0+Y2FjaGVMb2NrXy5hc3NlcnRPd25lZEJ5Q3VycmVudFRocmVhZCgp OworKyAgICByZXR1cm4gc2luZ2xldG9uXy0+cmVkaXJlY3Rpb25fOworKyAgfQorKworKyAgc3Rh dGljIHZvaWQgc2V0UmVkaXJlY3Rpb24oanM6OmppdDo6UmVkaXJlY3Rpb24qIHJlZGlyZWN0aW9u KSB7CisrICAgIHNpbmdsZXRvbl8tPmNhY2hlTG9ja18uYXNzZXJ0T3duZWRCeUN1cnJlbnRUaHJl YWQoKTsKKysgICAgc2luZ2xldG9uXy0+cmVkaXJlY3Rpb25fID0gcmVkaXJlY3Rpb247CisrICB9 CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNwYWNlIGpzCisrCisr I2VuZGlmIC8qIEpTX1NJTVVMQVRPUl9QUEM2NCAqLworKworKyNlbmRpZiAvKiBqaXRfcHBjNjRf U2ltdWxhdG9yX3BwYzY0X2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1RyYW1w b2xpbmUtcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcAor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uNTE1YTkzMWM4NmIwCist LS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L1RyYW1wb2xpbmUtcHBjNjQuY3Bw CitAQCAtMCwwICsxLDY0OCBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5k ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0 cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1 YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYu IDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMK KysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8y LjAvLiAqLworKworKyNpbmNsdWRlICJqaXQvQmFpbG91dHMuaCIKKysjaW5jbHVkZSAiaml0L0Jh c2VsaW5lRnJhbWUuaCIKKysjaW5jbHVkZSAiaml0L0NhbGxlZVRva2VuLmgiCisrI2luY2x1ZGUg ImppdC9KaXRGcmFtZXMuaCIKKysjaW5jbHVkZSAiaml0L0ppdFJ1bnRpbWUuaCIKKysjaW5jbHVk ZSAiaml0L1BlcmZTcGV3ZXIuaCIKKysjaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElDSGVscGVy cy1wcGM2NC5oIgorKyNpbmNsdWRlICJqaXQvVk1GdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAidm0v Sml0QWN0aXZhdGlvbi5oIgorKyNpbmNsdWRlICJ2bS9KU0NvbnRleHQuaCIKKysKKysjaW5jbHVk ZSAiaml0L01hY3JvQXNzZW1ibGVyLWlubC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBqczsKKyt1 c2luZyBuYW1lc3BhY2UganM6OmppdDsKKysKKysvLyBGbG9hdCAoU2luZ2xlK0RvdWJsZSkgYW5k IGFsbCBHUFJzLiBTaW1kMTI4IGV4Y2x1ZGVkIOKAlCBJb24gY29tcGlsZXMgSlMKKysvLyAobm8g djEyOCB0eXBlKSwgc28gU0lNRCByZWdzIGFyZSBuZXZlciBsaXZlIGF0IGJhaWxvdXQgLyBpbnZh bGlkYXRvciAvCisrLy8gcHJlQmFycmllciBlbnRyeS4gSW5jbHVkaW5nIHRoZW0gd291bGQgZm9y Y2UgdGhlIGJhaWxvdXQgZnJhbWUncworKy8vIEZQVUFycmF5IHRvIGhvbGQgdjEyOCBzbG90cyB0 aGF0IElvbiBuZXZlciB3cml0ZXMuCisrc3RhdGljIGNvbnN0IExpdmVSZWdpc3RlclNldCBBbGxS ZWdzID0gTGl2ZVJlZ2lzdGVyU2V0KAorKyAgICBHZW5lcmFsUmVnaXN0ZXJTZXQoUmVnaXN0ZXJz OjpBbGxNYXNrKSwKKysgICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVyczo6QWxsU2lu Z2xlTWFzayB8CisrICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbERvdWJs ZU1hc2spKTsKKysKKytzdGF0aWNfYXNzZXJ0KHNpemVvZih1aW50cHRyX3QpID09IHNpemVvZih1 aW50NjRfdCksICJOb3QgNjQtYml0IGNsZWFuLiIpOworKworKy8vIFBQQzY0IEVMRnYyIGNhbGxl ZS1zYXZlZDogR1BScyByMTQtcjMxLCBGUFJzIGYxNC1mMzEsIFZScyBWUjIwLVZSMzEsIExSLgor Ky8vIFdlIGFsc28gc2F2ZSByZWdfdnAgKHIxMCAvIEludEFyZ1JlZzcpIHNvIHdlIGNhbiB1c2Ug aXQgYWZ0ZXIgdGhlIEpJVCBjYWxsLgorKy8vCisrLy8gTGF5b3V0IGlzIGFsaWduYXMoMTYpIHNv IHRoYXQgYWZ0ZXIgYHJlc2VydmVTdGFjayhzaXplb2YoRW50ZXJKSVRSZWdzKSlgCisrLy8gdGhl IFNQLXJlbGF0aXZlIG9mZnNldCBvZiBldmVyeSBWUiBzbG90IGlzIDE2LWJ5dGUgYWxpZ25lZCwg c2F0aXNmeWluZworKy8vIHRoZSAxNi1ieXRlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBzdHh2 ZDJ4IC8gc3R2eCAoc3R2eCBpcyB0ZWNobmljYWxseQorKy8vIGFsaWdubWVudC10b2xlcmFudCwg YnV0IHdlJ2QgcmF0aGVyIGFsaWduIGJ5IGNvbnN0cnVjdGlvbikuIFBhZGRpbmcgYXQKKysvLyB0 aGUgZW5kIGtlZXBzIHNpemVvZiBhIG11bHRpcGxlIG9mIDE2IHNvIFNQIHN0YXlzIHF1YWR3b3Jk LWFsaWduZWQgcGVyCisrLy8gdGhlIEVMRnYyIHN0YWNrLXBvaW50ZXIgcnVsZS4KKytzdHJ1Y3Qg YWxpZ25hcygxNikgRW50ZXJKSVRSZWdzIHsKKysgIC8vIFZSMjAtVlIzMSBmaXJzdCBzbyB0aGVp ciBTUC1yZWxhdGl2ZSBvZmZzZXRzIGFyZSAwLCAxNiwgMzIsIC4uLiDigJQgYWxsCisrICAvLyAx Ni1ieXRlIGFsaWduZWQgcmVnYXJkbGVzcyBvZiB3aGF0IGZvbGxvd3MuCisrICB1aW50OF90IHZy MjBbMTZdOworKyAgdWludDhfdCB2cjIxWzE2XTsKKysgIHVpbnQ4X3QgdnIyMlsxNl07CisrICB1 aW50OF90IHZyMjNbMTZdOworKyAgdWludDhfdCB2cjI0WzE2XTsKKysgIHVpbnQ4X3QgdnIyNVsx Nl07CisrICB1aW50OF90IHZyMjZbMTZdOworKyAgdWludDhfdCB2cjI3WzE2XTsKKysgIHVpbnQ4 X3QgdnIyOFsxNl07CisrICB1aW50OF90IHZyMjlbMTZdOworKyAgdWludDhfdCB2cjMwWzE2XTsK KysgIHVpbnQ4X3QgdnIzMVsxNl07CisrCisrICBkb3VibGUgZjMxOworKyAgZG91YmxlIGYzMDsK KysgIGRvdWJsZSBmMjk7CisrICBkb3VibGUgZjI4OworKyAgZG91YmxlIGYyNzsKKysgIGRvdWJs ZSBmMjY7CisrICBkb3VibGUgZjI1OworKyAgZG91YmxlIGYyNDsKKysgIGRvdWJsZSBmMjM7Cisr ICBkb3VibGUgZjIyOworKyAgZG91YmxlIGYyMTsKKysgIGRvdWJsZSBmMjA7CisrICBkb3VibGUg ZjE5OworKyAgZG91YmxlIGYxODsKKysgIGRvdWJsZSBmMTc7CisrICBkb3VibGUgZjE2OworKyAg ZG91YmxlIGYxNTsKKysgIGRvdWJsZSBmMTQ7CisrCisrICB1aW50NjRfdCByMzE7ICAvLyBGcmFt ZVBvaW50ZXIKKysgIHVpbnQ2NF90IHIzMDsKKysgIHVpbnQ2NF90IHIyOTsKKysgIHVpbnQ2NF90 IHIyODsKKysgIHVpbnQ2NF90IHIyNzsKKysgIHVpbnQ2NF90IHIyNjsKKysgIHVpbnQ2NF90IHIy NTsKKysgIHVpbnQ2NF90IHIyNDsKKysgIHVpbnQ2NF90IHIyMzsKKysgIHVpbnQ2NF90IHIyMjsK KysgIHVpbnQ2NF90IHIyMTsKKysgIHVpbnQ2NF90IHIyMDsKKysgIHVpbnQ2NF90IHIxOTsKKysg IHVpbnQ2NF90IHIxODsKKysgIHVpbnQ2NF90IHIxNzsKKysgIHVpbnQ2NF90IHIxNjsKKysgIHVp bnQ2NF90IHIxNTsKKysgIHVpbnQ2NF90IHIxNDsKKysgIHVpbnQ2NF90IHIyOyAgLy8gVE9DIHBv aW50ZXIKKysgIHVpbnQ2NF90IGxyOworKyAgLy8gU2F2ZSByZWdfdnAgKHIxMCkgb24gc3RhY2sg c28gd2UgY2FuIHVzZSBpdCBhZnRlciB0aGUgSklUIGNhbGwgcmV0dXJucy4KKysgIHVpbnQ2NF90 IHIxMDsKKyt9OworKy8vIGFsaWduYXMoMTYpIG9uIHRoZSBzdHJ1Y3QgZW5zdXJlcyBzaXplb2Yg aXMgYSBtdWx0aXBsZSBvZiAxNiwgd2hpY2gga2VlcHMKKysvLyBTUCBxdWFkd29yZC1hbGlnbmVk IGFmdGVyIGByZXNlcnZlU3RhY2soc2l6ZW9mKEVudGVySklUUmVncykpYC4gVGhlCisrLy8gZXhp c3RpbmcgZmllbGRzIHRvdGFsIDMxMiBieXRlczsgd2l0aCB0aGUgMTkyIGJ5dGVzIG9mIFZSIHNs b3RzIHdlIGFyZQorKy8vIGF0IDUwNCwgd2hpY2ggYWxpZ25hcygxNikgYnVtcHMgdG8gNTEyLgor K3N0YXRpY19hc3NlcnQoKHNpemVvZihFbnRlckpJVFJlZ3MpICUgMTYpID09IDAsCisrICAgICAg ICAgICAgICAiRW50ZXJKSVRSZWdzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkIHRvIGtlZXAgU1Ag YWxpZ25lZCIpOworKworK3N0YXRpYyB2b2lkIEdlbmVyYXRlUmV0dXJuKE1hY3JvQXNzZW1ibGVy JiBtYXNtKSB7CisrICBNT1pfQVNTRVJUKG1hc20uZnJhbWVQdXNoZWQoKSA9PSBzaXplb2YoRW50 ZXJKSVRSZWdzKSk7CisrCisrICAvLyBSZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzLgorKyAgbWFz bS5hc19sZChyMTQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTQpKTsK KysgIG1hc20uYXNfbGQocjE1LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywg cjE1KSk7CisrICBtYXNtLmFzX2xkKHIxNiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIHIxNikpOworKyAgbWFzbS5hc19sZChyMTcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCByMTcpKTsKKysgIG1hc20uYXNfbGQocjE4LCBTdGFja1BvaW50ZXIsIG9m ZnNldG9mKEVudGVySklUUmVncywgcjE4KSk7CisrICBtYXNtLmFzX2xkKHIxOSwgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxOSkpOworKyAgbWFzbS5hc19sZChyMjAsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjApKTsKKysgIG1hc20uYXNfbGQo cjIxLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIxKSk7CisrICBtYXNt LmFzX2xkKHIyMiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMikpOwor KyAgbWFzbS5hc19sZChyMjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBy MjMpKTsKKysgIG1hc20uYXNfbGQocjI0LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgcjI0KSk7CisrICBtYXNtLmFzX2xkKHIyNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihF bnRlckpJVFJlZ3MsIHIyNSkpOworKyAgbWFzbS5hc19sZChyMjYsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMjYpKTsKKysgIG1hc20uYXNfbGQocjI3LCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI3KSk7CisrICBtYXNtLmFzX2xkKHIyOCwgU3Rh Y2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyOCkpOworKyAgbWFzbS5hc19sZChy MjksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjkpKTsKKysgIG1hc20u YXNfbGQocjMwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjMwKSk7Cisr ICBtYXNtLmFzX2xkKHIzMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIz MSkpOworKyAgbWFzbS5hc19sZChyMiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIyKSk7CisrCisrICAvLyBSZXN0b3JlIExSLgorKyAgbWFzbS5hc19sZChyMCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGxyKSk7CisrICBtYXNtLnhzX210bHIocjAp OworKworKyAgLy8gUmVzdG9yZSBub24tdm9sYXRpbGUgRlBScy4KKysgIG1hc20uYXNfbGZkKGYx NCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNCkpOworKyAgbWFzbS5h c19sZmQoZjE1LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjE1KSk7Cisr ICBtYXNtLmFzX2xmZChmMTYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MTYpKTsKKysgIG1hc20uYXNfbGZkKGYxNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYxNykpOworKyAgbWFzbS5hc19sZmQoZjE4LCBTdGFja1BvaW50ZXIsIG9mZnNldG9m KEVudGVySklUUmVncywgZjE4KSk7CisrICBtYXNtLmFzX2xmZChmMTksIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTkpKTsKKysgIG1hc20uYXNfbGZkKGYyMCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMCkpOworKyAgbWFzbS5hc19sZmQoZjIx LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjIxKSk7CisrICBtYXNtLmFz X2xmZChmMjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjIpKTsKKysg IG1hc20uYXNfbGZkKGYyMywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYy MykpOworKyAgbWFzbS5hc19sZmQoZjI0LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgZjI0KSk7CisrICBtYXNtLmFzX2xmZChmMjUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjUpKTsKKysgIG1hc20uYXNfbGZkKGYyNiwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNikpOworKyAgbWFzbS5hc19sZmQoZjI3LCBTdGFja1Bv aW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjI3KSk7CisrICBtYXNtLmFzX2xmZChmMjgs IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjgpKTsKKysgIG1hc20uYXNf bGZkKGYyOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyOSkpOworKyAg bWFzbS5hc19sZmQoZjMwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjMw KSk7CisrICBtYXNtLmFzX2xmZChmMzEsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRS ZWdzLCBmMzEpKTsKKysKKysgIC8vIFJlc3RvcmUgY2FsbGVlLXNhdmVkIFZSMjAtVlIzMSAoRUxG djIpLiBsdnggdXNlcyBpbmRleGVkIGFkZHJlc3NpbmcKKysgIC8vIChSQSArIFJCKSwgYW5kIHIw J3MgdmFsdWUgaXMgdXNlZCBoZXJlIGFzIFJCIChSQSA9IFN0YWNrUG9pbnRlciBpcworKyAgLy8g bm9uLXplcm8sIHNvIGl0cyB2YWx1ZSBpcyBhZGRlZCkuIHIwIGlzIG5vbi1hbGxvY2F0YWJsZS4K KysjZGVmaW5lIFJFU1RPUkVfVlIoTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgbWFzbS54c19saShyMCwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCB2ciMjTikpOyAgICAgICAgICAgICAgICAgICAgICBcCisrICBtYXNtLmFzX2x2eChOLCBTdGFj a1BvaW50ZXIsIHIwKQorKyAgUkVTVE9SRV9WUigyMCk7IFJFU1RPUkVfVlIoMjEpOyBSRVNUT1JF X1ZSKDIyKTsgUkVTVE9SRV9WUigyMyk7CisrICBSRVNUT1JFX1ZSKDI0KTsgUkVTVE9SRV9WUigy NSk7IFJFU1RPUkVfVlIoMjYpOyBSRVNUT1JFX1ZSKDI3KTsKKysgIFJFU1RPUkVfVlIoMjgpOyBS RVNUT1JFX1ZSKDI5KTsgUkVTVE9SRV9WUigzMCk7IFJFU1RPUkVfVlIoMzEpOworKyN1bmRlZiBS RVNUT1JFX1ZSCisrCisrICBtYXNtLmZyZWVTdGFjayhzaXplb2YoRW50ZXJKSVRSZWdzKSk7Cisr CisrICBtYXNtLmFzX2JscigpOworK30KKysKKytzdGF0aWMgdm9pZCBHZW5lcmF0ZVByb2xvZ3Vl KE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7CisrICAvLyBTYXZlIExSIGZpcnN0IChQUEM2NCBMUiBp cyBTUFIsIG5vdCBHUFIpLgorKyAgbWFzbS54c19tZmxyKHIwKTsKKysKKysgIC8vIEVMRnYyIHBy b2xvZ3VlIGNvbnZlbnRpb246IHNhdmUgTFIgYXQgY2FsbGVyJ3MgZnJhbWUgW1NQKzE2XSBCRUZP UkUKKysgIC8vIGRlY3JlbWVudGluZyBTUC4gRXh0ZXJuYWwgdW53aW5kZXJzIChnZGIsIHBlcmYs IGxpYnVud2luZCkgd2FsayB0aGUKKysgIC8vIHN0YWNrIGJ5IHJlYWRpbmcgTFItc2F2ZSBzbG90 cyBhdCBbU1ArMTZdIG9mIGV2ZXJ5IGZyYW1lOyB3aXRob3V0CisrICAvLyB0aGlzIHdyaXRlIHRo ZXknZCBmaW5kIGp1bmsgYXQgb3VyIGNhbGxlcidzIHNsb3QuIENvc3RzIDEgZXh0cmEKKysgIC8v IGluc3RydWN0aW9uOyB3ZSBzdGlsbCBrZWVwIHRoZSBpbi1mcmFtZSBzYXZlIGJlbG93IGZvciBj bGVhbgorKyAgLy8gcmVzdG9yZSBzeW1tZXRyeS4KKysgIG1hc20uYXNfc3RkKHIwLCBTdGFja1Bv aW50ZXIsIDE2KTsKKysKKysgIG1hc20ucmVzZXJ2ZVN0YWNrKHNpemVvZihFbnRlckpJVFJlZ3Mp KTsKKysKKysgIC8vIFNhdmUgTFIgKGFsc28ga2VwdCBpbiBvdXIgb3duIGZyYW1lIGZvciB0aGUg Y2xlYW4gcmVzdG9yZSBpbgorKyAgLy8gR2VuZXJhdGVSZXR1cm4g4oCUIHNlZSBjb21tZW50IHRo ZXJlKS4KKysgIG1hc20uYXNfc3RkKHIwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgbHIpKTsKKysKKysgIC8vIFNhdmUgbm9uLXZvbGF0aWxlIEdQUnMuCisrICBtYXNtLmFz X3N0ZChyMiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyKSk7CisrICBt YXNtLmFzX3N0ZChyMTQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTQp KTsKKysgIG1hc20uYXNfc3RkKHIxNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIxNSkpOworKyAgbWFzbS5hc19zdGQocjE2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVu dGVySklUUmVncywgcjE2KSk7CisrICBtYXNtLmFzX3N0ZChyMTcsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMTcpKTsKKysgIG1hc20uYXNfc3RkKHIxOCwgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxOCkpOworKyAgbWFzbS5hc19zdGQocjE5LCBT dGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE5KSk7CisrICBtYXNtLmFzX3N0 ZChyMjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjApKTsKKysgIG1h c20uYXNfc3RkKHIyMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMSkp OworKyAgbWFzbS5hc19zdGQocjIyLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjIyKSk7CisrICBtYXNtLmFzX3N0ZChyMjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCByMjMpKTsKKysgIG1hc20uYXNfc3RkKHIyNCwgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIHIyNCkpOworKyAgbWFzbS5hc19zdGQocjI1LCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI1KSk7CisrICBtYXNtLmFzX3N0ZChyMjYsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjYpKTsKKysgIG1hc20uYXNfc3Rk KHIyNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNykpOworKyAgbWFz bS5hc19zdGQocjI4LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI4KSk7 CisrICBtYXNtLmFzX3N0ZChyMjksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCByMjkpKTsKKysgIG1hc20uYXNfc3RkKHIzMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIHIzMCkpOworKyAgbWFzbS5hc19zdGQocjMxLCBTdGFja1BvaW50ZXIsIG9mZnNl dG9mKEVudGVySklUUmVncywgcjMxKSk7CisrCisrICAvLyBTYXZlIHJlZ192cCAocjEwKSBzbyB3 ZSBjYW4gcmV0cmlldmUgaXQgYWZ0ZXIgdGhlIEpJVCBjYWxsLgorKyAgbWFzbS5hc19zdGQocjEw LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjEwKSk7CisrCisrICAvLyBT YXZlIG5vbi12b2xhdGlsZSBGUFJzLgorKyAgbWFzbS5hc19zdGZkKGYxNCwgU3RhY2tQb2ludGVy LCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNCkpOworKyAgbWFzbS5hc19zdGZkKGYxNSwgU3Rh Y2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNSkpOworKyAgbWFzbS5hc19zdGZk KGYxNiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNikpOworKyAgbWFz bS5hc19zdGZkKGYxNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNykp OworKyAgbWFzbS5hc19zdGZkKGYxOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIGYxOCkpOworKyAgbWFzbS5hc19zdGZkKGYxOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihF bnRlckpJVFJlZ3MsIGYxOSkpOworKyAgbWFzbS5hc19zdGZkKGYyMCwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMCkpOworKyAgbWFzbS5hc19zdGZkKGYyMSwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMSkpOworKyAgbWFzbS5hc19zdGZkKGYy MiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMikpOworKyAgbWFzbS5h c19zdGZkKGYyMywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMykpOwor KyAgbWFzbS5hc19zdGZkKGYyNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3Ms IGYyNCkpOworKyAgbWFzbS5hc19zdGZkKGYyNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIGYyNSkpOworKyAgbWFzbS5hc19zdGZkKGYyNiwgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIGYyNikpOworKyAgbWFzbS5hc19zdGZkKGYyNywgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNykpOworKyAgbWFzbS5hc19zdGZkKGYyOCwg U3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyOCkpOworKyAgbWFzbS5hc19z dGZkKGYyOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyOSkpOworKyAg bWFzbS5hc19zdGZkKGYzMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYz MCkpOworKyAgbWFzbS5hc19zdGZkKGYzMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYzMSkpOworKworKyAgLy8gU2F2ZSBjYWxsZWUtc2F2ZWQgVlIyMC1WUjMxIChFTEZ2 MikuIFRoZSBKSVQgZnJlZWx5IHVzZXMgVk1YIHJlZ2lzdGVycworKyAgLy8gdmlhIEVtaXRWbXhC aW5hcnkgZXRjLjsgd2l0aG91dCB0aGlzIHNhdmUgdGhlIEMgY2FsbGVyJ3MgVlIyMC1WUjMxCisr ICAvLyBjb250ZW50cyB3b3VsZCBiZSB0cmFzaGVkIG9uIHJldHVybi4gc3R2eCB1c2VzIGluZGV4 ZWQgYWRkcmVzc2luZyDigJQKKysgIC8vIHIwIGhvbGRzIHRoZSBvZmZzZXQgKG5vbi1hbGxvY2F0 YWJsZSBpbiBKSVQgcmVnYWxsb2M7IHNhZmUgdG8gdXNlIGFzCisrICAvLyBhIGZyZWUgdGVtcCBo ZXJlKS4KKysjZGVmaW5lIFNBVkVfVlIoTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgbWFzbS54c19saShyMCwgb2Zmc2V0b2YoRW50ZXJK SVRSZWdzLCB2ciMjTikpOyAgICAgICAgICAgICAgICAgICAgICBcCisrICBtYXNtLmFzX3N0dngo TiwgU3RhY2tQb2ludGVyLCByMCkKKysgIFNBVkVfVlIoMjApOyBTQVZFX1ZSKDIxKTsgU0FWRV9W UigyMik7IFNBVkVfVlIoMjMpOworKyAgU0FWRV9WUigyNCk7IFNBVkVfVlIoMjUpOyBTQVZFX1ZS KDI2KTsgU0FWRV9WUigyNyk7CisrICBTQVZFX1ZSKDI4KTsgU0FWRV9WUigyOSk7IFNBVkVfVlIo MzApOyBTQVZFX1ZSKDMxKTsKKysjdW5kZWYgU0FWRV9WUgorK30KKysKKyt2b2lkIEppdFJ1bnRp bWU6OmdlbmVyYXRlRW50ZXJKSVQoSlNDb250ZXh0KiBjeCwgTWFjcm9Bc3NlbWJsZXImIG1hc20p IHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUVudGVy SklUIik7CisrCisrICBlbnRlckpJVE9mZnNldF8gPSBzdGFydFRyYW1wb2xpbmVDb2RlKG1hc20p OworKworKyAgLy8gRW50ZXJKaXRDb2RlIHNpZ25hdHVyZTogKHZvaWQqIGNvZGUsIHVuc2lnbmVk IGFyZ2MsIFZhbHVlKiBhcmd2LAorKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludGVy cHJldGVyRnJhbWUqIGZwLCBDYWxsZWVUb2tlbiBjYWxsZWVUb2tlbiwKKysgIC8vICAgICAgICAg ICAgICAgICAgICAgICAgICBKU09iamVjdCogZW52Q2hhaW4sIHNpemVfdCBudW1TdGFja1ZhbHVl cywKKysgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogdnApCisrICBjb25zdCBS ZWdpc3RlciByZWdfY29kZSA9IEludEFyZ1JlZzA7ICAgICAgICAgICAgICAgICAgICAgICAvLyBy MworKyAgY29uc3QgUmVnaXN0ZXIgcmVnX2FyZ2MgPSBJbnRBcmdSZWcxOyAgICAgICAgICAgICAg ICAgICAgICAgLy8gcjQKKysgIGNvbnN0IFJlZ2lzdGVyIHJlZ19hcmd2ID0gSW50QXJnUmVnMjsg ICAgICAgICAgICAgICAgICAgICAgIC8vIHI1CisrICBjb25zdCBtb3ppbGxhOjpEZWJ1Z09ubHk8 UmVnaXN0ZXI+IHJlZ19mcmFtZSA9IEludEFyZ1JlZzM7ICAvLyByNgorKyAgY29uc3QgUmVnaXN0 ZXIgcmVnX3Rva2VuID0gSW50QXJnUmVnNDsgICAgICAgICAgICAgICAgICAgICAgLy8gcjcKKysg IGNvbnN0IFJlZ2lzdGVyIHJlZ19jaGFpbiA9IEludEFyZ1JlZzU7ICAgICAgICAgICAgICAgICAg ICAgIC8vIHI4CisrICBjb25zdCBSZWdpc3RlciByZWdfdmFsdWVzID0gSW50QXJnUmVnNjsgICAg ICAgICAgICAgICAgICAgICAvLyByOQorKyAgY29uc3QgUmVnaXN0ZXIgcmVnX3ZwID0gSW50QXJn UmVnNzsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcjEwCisrCisrICBNT1pfQVNTRVJUKE9z ckZyYW1lUmVnID09IHJlZ19mcmFtZSk7CisrCisrICBHZW5lcmF0ZVByb2xvZ3VlKG1hc20pOwor KworKyAgLy8gU2F2ZSBzdGFjayBwb2ludGVyIGFzIGJhc2VsaW5lIGZyYW1lLgorKyAgbWFzbS5t b3ZlUHRyKFN0YWNrUG9pbnRlciwgRnJhbWVQb2ludGVyKTsKKysKKysgIC8vIFVzZSBub24tdm9s YXRpbGUgc2NyYXRjaCByZWdpc3RlcnMgZm9yIGdlbmVyYXRlRW50ZXJKaXRTaGFyZWQuCisrICAv LyByMTQsIHIxNSwgcjE3IGFyZSBub24tdm9sYXRpbGUgYW5kIG5vdCBzcGVjaWFsLXB1cnBvc2Ug aW4gSklULgorKyAgZ2VuZXJhdGVFbnRlckppdFNoYXJlZChtYXNtLCByZWdfYXJnYywgcmVnX2Fy Z3YsIHJlZ190b2tlbiwgcjE0LCByMTUsIHIxNyk7CisrCisrICAvLyBQdXNoIHRoZSBkZXNjcmlw dG9yLgorKyAgbWFzbS51bmJveEludDMyKEFkZHJlc3MocmVnX3ZwLCAwKSwgcjE0KTsKKysgIG1h c20ucHVzaEZyYW1lRGVzY3JpcHRvckZvckppdENhbGwoRnJhbWVUeXBlOjpDcHBUb0pTSml0LCBy MTQsIHIxNCk7CisrCisrICBDb2RlTGFiZWwgcmV0dXJuTGFiZWw7CisrICBMYWJlbCBvb21SZXR1 cm5MYWJlbDsKKysgIHsKKysgICAgLy8gSGFuZGxlIEludGVycHJldGVyIC0+IEJhc2VsaW5lIE9T Ui4KKysgICAgQWxsb2NhdGFibGVHZW5lcmFsUmVnaXN0ZXJTZXQgcmVncyhHZW5lcmFsUmVnaXN0 ZXJTZXQ6OkFsbCgpKTsKKysgICAgTU9aX0FTU0VSVCghcmVncy5oYXMoRnJhbWVQb2ludGVyKSk7 CisrICAgIHJlZ3MudGFrZShPc3JGcmFtZVJlZyk7CisrICAgIHJlZ3MudGFrZShyZWdfY29kZSk7 CisrICAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFzKFJldHVyblJlZyksICJSZXR1cm5SZWcgbWF0Y2hl cyByZWdfY29kZSIpOworKworKyAgICBMYWJlbCBub3RPc3I7CisrICAgIG1hc20uYnJhbmNoVGVz dFB0cihBc3NlbWJsZXI6Olplcm8sIE9zckZyYW1lUmVnLCBPc3JGcmFtZVJlZywgJm5vdE9zcik7 CisrCisrICAgIFJlZ2lzdGVyIG51bVN0YWNrVmFsdWVzID0gcmVnX3ZhbHVlczsKKysgICAgcmVn cy50YWtlKG51bVN0YWNrVmFsdWVzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHJlZ3MudGFr ZUFueSgpOworKworKyAgICAvLyBQdXNoIHJldHVybiBhZGRyZXNzLgorKyAgICBtYXNtLnN1YlB0 cihJbW0zMihzaXplb2YodWludHB0cl90KSksIFN0YWNrUG9pbnRlcik7CisrICAgIG1hc20ubW92 KCZyZXR1cm5MYWJlbCwgc2NyYXRjaCk7CisrICAgIG1hc20uc3RvcmVQdHIoc2NyYXRjaCwgQWRk cmVzcyhTdGFja1BvaW50ZXIsIDApKTsKKysKKysgICAgLy8gUHVzaCBwcmV2aW91cyBmcmFtZSBw b2ludGVyLgorKyAgICBtYXNtLnN1YlB0cihJbW0zMihzaXplb2YodWludHB0cl90KSksIFN0YWNr UG9pbnRlcik7CisrICAgIG1hc20uc3RvcmVQdHIoRnJhbWVQb2ludGVyLCBBZGRyZXNzKFN0YWNr UG9pbnRlciwgMCkpOworKworKyAgICAvLyBSZXNlcnZlIGZyYW1lLgorKyAgICBSZWdpc3RlciBm cmFtZVB0ciA9IEZyYW1lUG9pbnRlcjsKKysgICAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwg ZnJhbWVQdHIpOworKyAgICBtYXNtLnN1YlB0cihJbW0zMihCYXNlbGluZUZyYW1lOjpTaXplKCkp LCBTdGFja1BvaW50ZXIpOworKworKyAgICBSZWdpc3RlciBmcmFtZVB0clNjcmF0Y2ggPSByZWdz LnRha2VBbnkoKTsKKysgICAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwgZnJhbWVQdHJTY3Jh dGNoKTsKKysKKysgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWxzIGFuZCBzdGFjayB2YWx1 ZXMuCisrICAgIG1hc20ueF9zbGRpKHNjcmF0Y2gsIG51bVN0YWNrVmFsdWVzLCAzKTsKKysgICAg bWFzbS5zdWJQdHIoc2NyYXRjaCwgU3RhY2tQb2ludGVyKTsKKysKKysgICAgLy8gRW50ZXIgZXhp dCBmcmFtZS4KKysgICAgbWFzbS5yZXNlcnZlU3RhY2soMyAqIHNpemVvZih1aW50cHRyX3QpKTsK KysgICAgbWFzbS5zdG9yZVB0cihJbW1Xb3JkKE1ha2VGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBl OjpCYXNlbGluZUpTKSksCisrICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIs IDIgKiBzaXplb2YodWludHB0cl90KSkpOworKyAgICBtYXNtLnN0b3JlUHRyKEltbVB0cihudWxs cHRyKSwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIHNpemVvZih1aW50cHRyX3QpKSk7CisrICAgIG1h c20uc3RvcmVQdHIoRnJhbWVQb2ludGVyLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOworKwor KyAgICAvLyBObyBHQyB0aGluZ3MgdG8gbWFyaywgcHVzaCBhIGJhcmUgdG9rZW4uCisrICAgIG1h c20ubG9hZEpTQ29udGV4dChzY3JhdGNoKTsKKysgICAgbWFzbS5lbnRlckZha2VFeGl0RnJhbWUo c2NyYXRjaCwgc2NyYXRjaCwgRXhpdEZyYW1lVHlwZTo6QmFyZSk7CisrCisrICAgIG1hc20ucmVz ZXJ2ZVN0YWNrKDIgKiBzaXplb2YodWludHB0cl90KSk7CisrICAgIG1hc20uc3RvcmVQdHIoZnJh bWVQdHIsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBzaXplb2YodWludHB0cl90KSkpOworKyAgICBt YXNtLnN0b3JlUHRyKHJlZ19jb2RlLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOworKworKyAg ICB1c2luZyBGbiA9IHZvaWQgKCopKEJhc2VsaW5lRnJhbWUqIGZyYW1lLCBJbnRlcnByZXRlckZy YW1lKiBpbnRlcnBGcmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1T dGFja1ZhbHVlcyk7CisrICAgIG1hc20uc2V0dXBVbmFsaWduZWRBQklDYWxsKHNjcmF0Y2gpOwor KyAgICBtYXNtLnBhc3NBQklBcmcoZnJhbWVQdHJTY3JhdGNoKTsKKysgICAgbWFzbS5wYXNzQUJJ QXJnKE9zckZyYW1lUmVnKTsKKysgICAgbWFzbS5wYXNzQUJJQXJnKG51bVN0YWNrVmFsdWVzKTsK KysgICAgbWFzbS5jYWxsV2l0aEFCSTxGbiwgaml0OjpJbml0QmFzZWxpbmVGcmFtZUZvck9zcj4o CisrICAgICAgICBBQklUeXBlOjpHZW5lcmFsLCBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJOjpEb250 Q2hlY2tIYXNFeGl0RnJhbWUpOworKworKyAgICByZWdzLmFkZChPc3JGcmFtZVJlZyk7CisrICAg IFJlZ2lzdGVyIGppdGNvZGUgPSByZWdzLnRha2VBbnkoKTsKKysgICAgbWFzbS5sb2FkUHRyKEFk ZHJlc3MoU3RhY2tQb2ludGVyLCAwKSwgaml0Y29kZSk7CisrICAgIG1hc20ubG9hZFB0cihBZGRy ZXNzKFN0YWNrUG9pbnRlciwgc2l6ZW9mKHVpbnRwdHJfdCkpLCBmcmFtZVB0cik7CisrICAgIG1h c20uZnJlZVN0YWNrKDIgKiBzaXplb2YodWludHB0cl90KSk7CisrCisrICAgIG1hc20uZnJlZVN0 YWNrKEV4aXRGcmFtZUxheW91dDo6U2l6ZVdpdGhGb290ZXIoKSk7CisrCisrICAgIC8vIElmIE9T Ui1pbmcsIHRoZW4gZW1pdCBpbnN0cnVtZW50YXRpb24gZm9yIHNldHRpbmcgbGFzdFByb2ZpbGVy RnJhbWUKKysgICAgLy8gaWYgcHJvZmlsZXIgaW5zdHJ1bWVudGF0aW9uIGlzIGVuYWJsZWQuCisr ICAgIHsKKysgICAgICBMYWJlbCBza2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uOworKyAgICAg IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzT2ZFbmFibGVkKAorKyAgICAgICAgICBjeC0+cnVudGlt ZSgpLT5nZWNrb1Byb2ZpbGVyKCkuYWRkcmVzc09mRW5hYmxlZCgpKTsKKysgICAgICBtYXNtLmJy YW5jaDMyKEFzc2VtYmxlcjo6RXF1YWwsIGFkZHJlc3NPZkVuYWJsZWQsIEltbTMyKDApLAorKyAg ICAgICAgICAgICAgICAgICAgJnNraXBQcm9maWxpbmdJbnN0cnVtZW50YXRpb24pOworKyAgICAg IG1hc20ucHJvZmlsZXJFbnRlckZyYW1lKGZyYW1lUHRyLCBzY3JhdGNoKTsKKysgICAgICBtYXNt LmJpbmQoJnNraXBQcm9maWxpbmdJbnN0cnVtZW50YXRpb24pOworKyAgICB9CisrCisrICAgIG1h c20uanVtcChqaXRjb2RlKTsKKysKKysgICAgbWFzbS5iaW5kKCZub3RPc3IpOworKyAgICAvLyBM b2FkIHRoZSBzY29wZSBjaGFpbiBpbiBSMS4KKysgICAgTU9aX0FTU0VSVChSMS5zY3JhdGNoUmVn KCkgIT0gcmVnX2NvZGUpOworKyAgICBtYXNtLm1vdmVQdHIocmVnX2NoYWluLCBSMS5zY3JhdGNo UmVnKCkpOworKyAgfQorKworKyAgLy8gVGhlIGNhbGwgd2lsbCBwdXNoIHRoZSByZXR1cm4gYWRk cmVzcyBhbmQgZnJhbWUgcG9pbnRlciBvbiB0aGUgc3RhY2ssIHRodXMKKysgIC8vIHdlIGNoZWNr IHRoYXQgdGhlIHN0YWNrIHdvdWxkIGJlIGFsaWduZWQgb25jZSB0aGUgY2FsbCBpcyBjb21wbGV0 ZS4KKysgIG1hc20uYXNzZXJ0U3RhY2tBbGlnbm1lbnQoSml0U3RhY2tBbGlnbm1lbnQsIDIgKiBz aXplb2YodWludHB0cl90KSk7CisrCisrICAvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHB1c2hp bmcgcmV0dXJuIGFkZHJlc3MgdG8gc3RhY2suCisrICBtYXNtLmNhbGxKaXROb1Byb2ZpbGVyKHJl Z19jb2RlKTsKKysKKysgIHsKKysgICAgLy8gSW50ZXJwcmV0ZXIgLT4gQmFzZWxpbmUgT1NSIHdp bGwgcmV0dXJuIGhlcmUuCisrICAgIG1hc20uYmluZCgmcmV0dXJuTGFiZWwpOworKyAgICBtYXNt LmFkZENvZGVMYWJlbChyZXR1cm5MYWJlbCk7CisrICAgIG1hc20uYmluZCgmb29tUmV0dXJuTGFi ZWwpOworKyAgfQorKworKyAgLy8gRGlzY2FyZCBhcmd1bWVudHMgYW5kIHBhZGRpbmcuIFNldCBz cCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgRW50ZXJKSVRSZWdzCisrICAvLyBvbiB0aGUgc3RhY2su CisrICBtYXNtLm1vdmVQdHIoRnJhbWVQb2ludGVyLCBTdGFja1BvaW50ZXIpOworKworKyAgLy8g U3RvcmUgdGhlIHJldHVybmVkIHZhbHVlIGludG8gdGhlIHZwLgorKyAgbWFzbS5hc19sZChyZWdf dnAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTApKTsKKysgIG1hc20u c3RvcmVWYWx1ZShKU1JldHVybk9wZXJhbmQsIEFkZHJlc3MocmVnX3ZwLCAwKSk7CisrCisrICAv LyBSZXN0b3JlIG5vbi12b2xhdGlsZSByZWdpc3RlcnMgYW5kIHJldHVybi4KKysgIEdlbmVyYXRl UmV0dXJuKG1hc20pOworK30KKysKKysvLyBzdGF0aWMKKyttb3ppbGxhOjpNYXliZTw6OkpTOjpQ cm9maWxpbmdGcmFtZUl0ZXJhdG9yOjpSZWdpc3RlclN0YXRlPgorK0ppdFJ1bnRpbWU6OmdldENw cEVudHJ5UmVnaXN0ZXJzKEppdEZyYW1lTGF5b3V0KiBmcmFtZVN0YWNrQWRkcmVzcykgeworKyAg cmV0dXJuIG1vemlsbGE6Ok5vdGhpbmd7fTsKKyt9CisrCisrdm9pZCBKaXRSdW50aW1lOjpnZW5l cmF0ZUludmFsaWRhdG9yKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBMYWJlbCogYmFpbG91dFRhaWwp IHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUludmFs aWRhdG9yIik7CisrCisrICBpbnZhbGlkYXRvck9mZnNldF8gPSBzdGFydFRyYW1wb2xpbmVDb2Rl KG1hc20pOworKworKyAgbWFzbS5jaGVja1N0YWNrQWxpZ25tZW50KCk7CisrCisrICAvLyBQdXNo IGFsbCByZWdpc3RlcnMgc28gd2UgY2FuIGFjY2VzcyB0aGVtIGZyb20gW2Jhc2UgKyBjb2RlXS4K KysgIG1hc20uUHVzaFJlZ3NJbk1hc2soQWxsUmVncyk7CisrCisrICAvLyBQYXNzIHBvaW50ZXIg dG8gSW52YWxpZGF0aW9uQmFpbG91dFN0YWNrIHN0cnVjdHVyZS4KKysgIG1hc20ubW92ZVB0cihT dGFja1BvaW50ZXIsIEludEFyZ1JlZzApOworKworKyAgLy8gUmVzZXJ2ZSBwbGFjZSBmb3IgQmFp bG91dEluZm8gcG9pbnRlci4gVHdvIHdvcmRzIHRvIGVuc3VyZSBhbGlnbm1lbnQgZm9yCisrICAv LyBzZXR1cEFsaWduZWRBQklDYWxsLgorKyAgbWFzbS5zdWJQdHIoSW1tMzIoMiAqIHNpemVvZih1 aW50cHRyX3QpKSwgU3RhY2tQb2ludGVyKTsKKysgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIs IEludEFyZ1JlZzEpOworKworKyAgdXNpbmcgRm4gPSBib29sICgqKShJbnZhbGlkYXRpb25CYWls b3V0U3RhY2sqIHNwLCBCYXNlbGluZUJhaWxvdXRJbmZvKiogaW5mbyk7CisrICBtYXNtLnNldHVw QWxpZ25lZEFCSUNhbGwoKTsKKysgIG1hc20ucGFzc0FCSUFyZyhJbnRBcmdSZWcwKTsKKysgIG1h c20ucGFzc0FCSUFyZyhJbnRBcmdSZWcxKTsKKysgIG1hc20uY2FsbFdpdGhBQkk8Rm4sIEludmFs aWRhdGlvbkJhaWxvdXQ+KAorKyAgICAgIEFCSVR5cGU6OkdlbmVyYWwsIENoZWNrVW5zYWZlQ2Fs bFdpdGhBQkk6OkRvbnRDaGVja090aGVyKTsKKysKKysgIG1hc20ucG9wKEludEFyZ1JlZzIpOwor KworKyAgLy8gUG9wIHRoZSBtYWNoaW5lIHN0YXRlIGFuZCB0aGUgZGVhZCBmcmFtZS4KKysgIG1h c20ubW92ZVRvU3RhY2tQdHIoRnJhbWVQb2ludGVyKTsKKysKKysgIC8vIEp1bXAgdG8gc2hhcmVk IGJhaWxvdXQgdGFpbC4gVGhlIEJhaWxvdXRJbmZvIHBvaW50ZXIgaGFzIHRvIGJlIGluCisrICAv LyBJbnRBcmdSZWcyIChyNSkuCisrICBtYXNtLmp1bXAoYmFpbG91dFRhaWwpOworK30KKysKKysv LyBXaGVuIGJhaWxvdXQgaXMgZG9uZSB2aWEgb3V0IG9mIGxpbmUgY29kZSAobGF6eSBiYWlsb3V0 KS4KKysvLyBGcmFtZSBzaXplIGlzIHN0b3JlZCBpbiBMUiAobG9vayBhdAorKy8vIENvZGVHZW5l cmF0b3JQUEM2NDo6Z2VuZXJhdGVPdXRPZkxpbmVDb2RlKCkpIGFuZCB0aHVuayBjb2RlIHNob3Vs ZCBzYXZlIGl0CisrLy8gb24gc3RhY2suCisrc3RhdGljIHZvaWQgUHVzaEJhaWxvdXRGcmFtZShN YWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnaXN0ZXIgc3BBcmcpIHsKKysgIC8vIFB1c2ggdGhlIGZy YW1lU2l6ZV8gc3RvcmVkIGluIExSLgorKyAgLy8gU2VlOiBDb2RlR2VuZXJhdG9yUFBDNjQ6Omdl bmVyYXRlT3V0T2ZMaW5lQ29kZSgpCisrICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7CisrCisr ICAvLyBQdXNoIHJlZ2lzdGVycyBzdWNoIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVtIGZyb20gW2Jh c2UgKyBjb2RlXS4KKysgIG1hc20uUHVzaFJlZ3NJbk1hc2soQWxsUmVncyk7CisrCisrICAvLyBQ dXQgcG9pbnRlciB0byBCYWlsb3V0U3RhY2sgYXMgZmlyc3QgYXJndW1lbnQgdG8gdGhlIEJhaWxv dXQoKS4KKysgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIHNwQXJnKTsKKyt9CisrCisrc3Rh dGljIHZvaWQgR2VuZXJhdGVCYWlsb3V0VGh1bmsoTWFjcm9Bc3NlbWJsZXImIG1hc20sIExhYmVs KiBiYWlsb3V0VGFpbCkgeworKyAgUHVzaEJhaWxvdXRGcmFtZShtYXNtLCBJbnRBcmdSZWcwKTsK KysKKysgIC8vIE1ha2Ugc3BhY2UgZm9yIEJhaWxvdXQncyBiYWlsb3V0SW5mbyBvdXRwYXJhbS4K KysgIG1hc20ucmVzZXJ2ZVN0YWNrKHNpemVvZih2b2lkKikpOworKyAgbWFzbS5tb3ZlUHRyKFN0 YWNrUG9pbnRlciwgSW50QXJnUmVnMSk7CisrCisrICAvLyBDYWxsIHRoZSBiYWlsb3V0IGZ1bmN0 aW9uLgorKyAgdXNpbmcgRm4gPSBib29sICgqKShCYWlsb3V0U3RhY2sqIHNwLCBCYXNlbGluZUJh aWxvdXRJbmZvKiogaW5mbyk7CisrICBtYXNtLnNldHVwVW5hbGlnbmVkQUJJQ2FsbChJbnRBcmdS ZWcyKTsKKysgIG1hc20ucGFzc0FCSUFyZyhJbnRBcmdSZWcwKTsKKysgIG1hc20ucGFzc0FCSUFy ZyhJbnRBcmdSZWcxKTsKKysgIG1hc20uY2FsbFdpdGhBQkk8Rm4sIEJhaWxvdXQ+KEFCSVR5cGU6 OkdlbmVyYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1Vuc2FmZUNh bGxXaXRoQUJJOjpEb250Q2hlY2tPdGhlcik7CisrCisrICAvLyBHZXQgdGhlIGJhaWxvdXRJbmZv IG91dHBhcmFtLgorKyAgbWFzbS5wb3AoSW50QXJnUmVnMik7CisrCisrICAvLyBSZW1vdmUgYm90 aCB0aGUgYmFpbG91dCBmcmFtZSBhbmQgdGhlIHRvcG1vc3QgSW9uIGZyYW1lJ3Mgc3RhY2suCisr ICBtYXNtLm1vdmVUb1N0YWNrUHRyKEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBKdW1wIHRvIHNo YXJlZCBiYWlsb3V0IHRhaWwuIFRoZSBCYWlsb3V0SW5mbyBwb2ludGVyIGhhcyB0byBiZSBpbgor KyAgLy8gSW50QXJnUmVnMiAocjUpLgorKyAgbWFzbS5qdW1wKGJhaWxvdXRUYWlsKTsKKyt9Cisr Cisrdm9pZCBKaXRSdW50aW1lOjpnZW5lcmF0ZUJhaWxvdXRIYW5kbGVyKE1hY3JvQXNzZW1ibGVy JiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog YmFpbG91dFRhaWwpIHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpn ZW5lcmF0ZUJhaWxvdXRIYW5kbGVyIik7CisrCisrICBiYWlsb3V0SGFuZGxlck9mZnNldF8gPSBz dGFydFRyYW1wb2xpbmVDb2RlKG1hc20pOworKworKyAgR2VuZXJhdGVCYWlsb3V0VGh1bmsobWFz bSwgYmFpbG91dFRhaWwpOworK30KKysKKytib29sIEppdFJ1bnRpbWU6OmdlbmVyYXRlVk1XcmFw cGVyKEpTQ29udGV4dCogY3gsIE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVk1GdW5jdGlvbklkIGlkLCBjb25zdCBWTUZ1bmN0aW9uRGF0 YSYgZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bkZuIG5hdGl2ZUZ1 biwgdWludDMyX3QqIHdyYXBwZXJPZmZzZXQpIHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20s ICJKaXRSdW50aW1lOjpnZW5lcmF0ZVZNV3JhcHBlciIpOworKworKyAgKndyYXBwZXJPZmZzZXQg PSBzdGFydFRyYW1wb2xpbmVDb2RlKG1hc20pOworKworKyAgLy8gQXZvaWQgY29uZmxpY3RzIHdp dGggYXJndW1lbnQgcmVnaXN0ZXJzIHdoaWxlIGRpc2NhcmRpbmcgdGhlIHJlc3VsdCBhZnRlcgor KyAgLy8gdGhlIGZ1bmN0aW9uIGNhbGwuCisrICBBbGxvY2F0YWJsZUdlbmVyYWxSZWdpc3RlclNl dCByZWdzKFJlZ2lzdGVyOjpDb2Rlczo6V3JhcHBlck1hc2spOworKworKyAgc3RhdGljX2Fzc2Vy dCgKKysgICAgICAoUmVnaXN0ZXI6OkNvZGVzOjpWb2xhdGlsZU1hc2sgJiB+UmVnaXN0ZXI6OkNv ZGVzOjpXcmFwcGVyTWFzaykgPT0gMCwKKysgICAgICAiV3JhcHBlciByZWdpc3RlciBzZXQgc2hv dWxkIGJlIGEgc3VwZXJzZXQgb2YgVm9sYXRpbGUgcmVnaXN0ZXIgc2V0LiIpOworKworKyAgLy8g VGhlIGNvbnRleHQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50OyByMyBpcyB0aGUgZmlyc3QgYXJndW1l bnQgcmVnaXN0ZXIuCisrICBSZWdpc3RlciBjeHJlZyA9IEludEFyZ1JlZzA7CisrICByZWdzLnRh a2UoY3hyZWcpOworKworKyAgLy8gT24gbGluay1yZWdpc3RlciBwbGF0Zm9ybXMsIGl0IGlzIHRo ZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgVk0gKmNhbGxlZSogdG8KKysgIC8vIHB1c2ggdGhlIHJl dHVybiBhZGRyZXNzLCB3aGlsZSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGFkZHJl c3MKKysgIC8vIGlzIHN0b3JlZCBpbiBMUiBvbiBlbnRyeS4gVGhpcyBhbGxvd3MgdGhlIFZNIHdy YXBwZXIgdG8gd29yayB3aXRoIGJvdGgKKysgIC8vIGRpcmVjdCBjYWxscyBhbmQgdGFpbCBjYWxs cy4KKysgIG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKKysKKysgIC8vIFB1c2ggdGhlIGZyYW1l IHBvaW50ZXIgdG8gZmluaXNoIHRoZSBleGl0IGZyYW1lLCB0aGVuIGxpbmsgaXQgdXAuCisrICBt YXNtLlB1c2goRnJhbWVQb2ludGVyKTsKKysgIG1hc20ubW92ZVN0YWNrUHRyVG8oRnJhbWVQb2lu dGVyKTsKKysgIG1hc20ubG9hZEpTQ29udGV4dChjeHJlZyk7CisrICBtYXNtLmVudGVyRXhpdEZy YW1lKGN4cmVnLCByZWdzLmdldEFueSgpLCBpZCk7CisrCisrICAvLyBSZXNlcnZlIHNwYWNlIGZv ciB0aGUgb3V0cGFyYW1ldGVyLgorKyAgbWFzbS5yZXNlcnZlVk1GdW5jdGlvbk91dFBhcmFtU3Bh Y2UoZik7CisrCisrICBtYXNtLnNldHVwVW5hbGlnbmVkQUJJQ2FsbERvbnRTYXZlUmVzdG9yZVNQ KCk7CisrICBtYXNtLnBhc3NBQklBcmcoY3hyZWcpOworKworKyAgc2l6ZV90IGFyZ0Rpc3AgPSBF eGl0RnJhbWVMYXlvdXQ6OlNpemUoKTsKKysKKysgIC8vIENvcHkgYW55IGFyZ3VtZW50cy4KKysg IGZvciAodWludDMyX3QgZXhwbGljaXRBcmcgPSAwOyBleHBsaWNpdEFyZyA8IGYuZXhwbGljaXRB cmdzOyBleHBsaWNpdEFyZysrKSB7CisrICAgIHN3aXRjaCAoZi5hcmdQcm9wZXJ0aWVzKGV4cGxp Y2l0QXJnKSkgeworKyAgICAgIGNhc2UgVk1GdW5jdGlvbkRhdGE6OldvcmRCeVZhbHVlOgorKyAg ICAgICAgaWYgKGYuYXJnUGFzc2VkSW5GbG9hdFJlZyhleHBsaWNpdEFyZykpIHsKKysgICAgICAg ICAgbWFzbS5wYXNzQUJJQXJnKE1vdmVPcGVyYW5kKEZyYW1lUG9pbnRlciwgYXJnRGlzcCksIEFC SVR5cGU6OkZsb2F0NjQpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5wYXNz QUJJQXJnKE1vdmVPcGVyYW5kKEZyYW1lUG9pbnRlciwgYXJnRGlzcCksIEFCSVR5cGU6OkdlbmVy YWwpOworKyAgICAgICAgfQorKyAgICAgICAgYXJnRGlzcCArPSBzaXplb2Yodm9pZCopOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBWTUZ1bmN0aW9uRGF0YTo6V29yZEJ5UmVmOgorKyAg ICAgICAgbWFzbS5wYXNzQUJJQXJnKE1vdmVPcGVyYW5kKEZyYW1lUG9pbnRlciwgYXJnRGlzcCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlT3BlcmFuZDo6S2luZDo6 RWZmZWN0aXZlQWRkcmVzcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgQUJJVHlwZTo6R2Vu ZXJhbCk7CisrICAgICAgICBhcmdEaXNwICs9IHNpemVvZih2b2lkKik7CisrICAgICAgICBicmVh azsKKysgICAgICBjYXNlIFZNRnVuY3Rpb25EYXRhOjpEb3VibGVCeVZhbHVlOgorKyAgICAgIGNh c2UgVk1GdW5jdGlvbkRhdGE6OkRvdWJsZUJ5UmVmOgorKyAgICAgICAgTU9aX0NSQVNIKCJOWUk6 IFBQQzY0IGNhbGxWTSBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCAxMjhiaXRzIHZhbHVlcy4iKTsK KysgICAgICAgIGJyZWFrOworKyAgICB9CisrICB9CisrCisrICAvLyBDb3B5IHRoZSBpbXBsaWNp dCBvdXRwYXJhbSwgaWYgYW55LgorKyAgY29uc3QgaW50MzJfdCBvdXRQYXJhbU9mZnNldCA9Cisr ICAgICAgLWludDMyX3QoRXhpdEZvb3RlckZyYW1lOjpTaXplKCkpIC0gZi5zaXplT2ZPdXRQYXJh bVN0YWNrU2xvdCgpOworKyAgaWYgKGYub3V0UGFyYW0gIT0gVHlwZV9Wb2lkKSB7CisrICAgIG1h c20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFuZChGcmFtZVBvaW50ZXIsIG91dFBhcmFtT2Zmc2V0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZU9wZXJhbmQ6OktpbmQ6OkVmZmVj dGl2ZUFkZHJlc3MpLAorKyAgICAgICAgICAgICAgICAgICAgQUJJVHlwZTo6R2VuZXJhbCk7Cisr ICB9CisrCisrICBtYXNtLmNhbGxXaXRoQUJJKG5hdGl2ZUZ1biwgQUJJVHlwZTo6R2VuZXJhbCwK KysgICAgICAgICAgICAgICAgICAgQ2hlY2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrSGFz RXhpdEZyYW1lKTsKKysKKysgIC8vIFRlc3QgZm9yIGZhaWx1cmUuCisrICBzd2l0Y2ggKGYuZmFp bFR5cGUoKSkgeworKyAgICBjYXNlIFR5cGVfQ2VsbDoKKysgICAgICBtYXNtLmJyYW5jaFRlc3RQ dHIoQXNzZW1ibGVyOjpaZXJvLCBJbnRBcmdSZWcwLCBJbnRBcmdSZWcwLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICBtYXNtLmZhaWx1cmVMYWJlbCgpKTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSBUeXBlX0Jvb2w6CisrICAgICAgbWFzbS5icmFuY2hJZkZhbHNlQm9vbChJbnRBcmdSZWcw LCBtYXNtLmZhaWx1cmVMYWJlbCgpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBUeXBlX1Zv aWQ6CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJ1bmtu b3duIGZhaWx1cmUga2luZCIpOworKyAgfQorKworKyAgLy8gTG9hZCB0aGUgb3V0cGFyYW0uCisr ICBtYXNtLmxvYWRWTUZ1bmN0aW9uT3V0UGFyYW0oZiwgQWRkcmVzcyhGcmFtZVBvaW50ZXIsIG91 dFBhcmFtT2Zmc2V0KSk7CisrCisrICAvLyBQb3AgZnJhbWUgYW5kIHJlc3RvcmUgZnJhbWUgcG9p bnRlci4KKysgIG1hc20ubW92ZVRvU3RhY2tQdHIoRnJhbWVQb2ludGVyKTsKKysgIG1hc20ucG9w KEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBSZXR1cm4uIFN1YnRyYWN0IHNpemVvZih2b2lkKikg Zm9yIHRoZSBmcmFtZSBwb2ludGVyLgorKyAgbWFzbS5yZXRuKEltbTMyKHNpemVvZihFeGl0RnJh bWVMYXlvdXQpIC0gc2l6ZW9mKHZvaWQqKSArCisrICAgICAgICAgICAgICAgICAgZi5leHBsaWNp dFN0YWNrU2xvdHMoKSAqIHNpemVvZih2b2lkKikgKworKyAgICAgICAgICAgICAgICAgIGYuZXh0 cmFWYWx1ZXNUb1BvcCAqIHNpemVvZihWYWx1ZSkpKTsKKysKKysgIHJldHVybiB0cnVlOworK30K KysKKyt1aW50MzJfdCBKaXRSdW50aW1lOjpnZW5lcmF0ZVByZUJhcnJpZXIoSlNDb250ZXh0KiBj eCwgTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1JUlR5cGUgdHlwZSkgeworKyAgQXV0b0NyZWF0ZWRCeSBhY2IobWFzbSwgIkpp dFJ1bnRpbWU6OmdlbmVyYXRlUHJlQmFycmllciIpOworKworKyAgdWludDMyX3Qgb2Zmc2V0ID0g c3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKKysKKysgIE1PWl9BU1NFUlQoUHJlQmFycmllclJl ZyA9PSBJbnRBcmdSZWcxKTsgIC8vIHI0CisrICBSZWdpc3RlciB0ZW1wMSA9IEludEFyZ1JlZzA7 ICAgICAgICAgICAgICAvLyByMworKyAgUmVnaXN0ZXIgdGVtcDIgPSBJbnRBcmdSZWcyOyAgICAg ICAgICAgICAgLy8gcjUKKysgIFJlZ2lzdGVyIHRlbXAzID0gSW50QXJnUmVnMzsgICAgICAgICAg ICAgIC8vIHI2CisrICBtYXNtLnB1c2godGVtcDEpOworKyAgbWFzbS5wdXNoKHRlbXAyKTsKKysg IG1hc20ucHVzaCh0ZW1wMyk7CisrCisrICBMYWJlbCBub0JhcnJpZXI7CisrICBtYXNtLmVtaXRQ cmVCYXJyaWVyRmFzdFBhdGgodHlwZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgJm5vQmFycmllcik7 CisrCisrICAvLyBDYWxsIGludG8gQysrIHRvIG1hcmsgdGhpcyBHQyB0aGluZy4KKysgIG1hc20u cG9wKHRlbXAzKTsKKysgIG1hc20ucG9wKHRlbXAyKTsKKysgIG1hc20ucG9wKHRlbXAxKTsKKysK KysgIExpdmVSZWdpc3RlclNldCBzYXZlOworKyAgc2F2ZS5zZXQoKSA9IFJlZ2lzdGVyU2V0KEdl bmVyYWxSZWdpc3RlclNldChSZWdpc3RlcnM6OlZvbGF0aWxlTWFzayksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVyczo6Vm9sYXRpbGVN YXNrKSk7CisrICAvLyBPbiBQUEM2NCwgc2F2ZSBMUiBzaW5jZSB3ZSdsbCBiZSBtYWtpbmcgYSBj YWxsLgorKyAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygpOworKyAgbWFzbS5QdXNoUmVnc0luTWFz ayhzYXZlKTsKKysKKysgIG1hc20ubW92ZVB0cihJbW1QdHIoY3gtPnJ1bnRpbWUoKSksIEludEFy Z1JlZzApOworKworKyAgbWFzbS5zZXR1cFVuYWxpZ25lZEFCSUNhbGwoSW50QXJnUmVnMik7Cisr ICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMCk7CisrICBtYXNtLnBhc3NBQklBcmcoSW50QXJn UmVnMSk7CisrICBtYXNtLmNhbGxXaXRoQUJJKEppdFByZVdyaXRlQmFycmllcih0eXBlKSk7Cisr CisrICBtYXNtLlBvcFJlZ3NJbk1hc2soc2F2ZSk7CisrICBtYXNtLnJldCgpOworKworKyAgbWFz bS5iaW5kKCZub0JhcnJpZXIpOworKyAgbWFzbS5wb3AodGVtcDMpOworKyAgbWFzbS5wb3AodGVt cDIpOworKyAgbWFzbS5wb3AodGVtcDEpOworKyAgbWFzbS5hYmlyZXQoKTsKKysKKysgIHJldHVy biBvZmZzZXQ7CisrfQorKworK3ZvaWQgSml0UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0VGFpbFN0 dWIoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogYmFpbG91dFRhaWwpIHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1h c20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUJhaWxvdXRUYWlsU3R1YiIpOworKworKyAgbWFzbS5i aW5kKGJhaWxvdXRUYWlsKTsKKysgIG1hc20uZ2VuZXJhdGVCYWlsb3V0VGFpbChJbnRBcmdSZWcx LCBJbnRBcmdSZWcyKTsKKyt9CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFyZWQvQXNzZW1i bGVyLXNoYXJlZC5oIGIvanMvc3JjL2ppdC9zaGFyZWQvQXNzZW1ibGVyLXNoYXJlZC5oCitpbmRl eCBkNWZlZDJmYWJlMzEuLjQ5MGE5ZjUzOTFlMCAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvc2hh cmVkL0Fzc2VtYmxlci1zaGFyZWQuaAorKysrIGIvanMvc3JjL2ppdC9zaGFyZWQvQXNzZW1ibGVy LXNoYXJlZC5oCitAQCAtMzAsMTQgKzMwLDE1IEBACisgCisgI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgICAgICBcCisgICAgIGRlZmlu ZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBc CistICAgIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgLy8g UHVzaCByZXR1cm4gYWRkcmVzc2VzIGNhbGxlZS1zaWRlLgorICMgIGRlZmluZSBKU19VU0VfTElO S19SRUdJU1RFUgorICNlbmRpZgorIAorICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8ICAgIFwKKyAgICAgZGVmaW5lZChKU19DT0RF R0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCistICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9BUk0pCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAvLyBKU19DT0RFTEFCRUxfTElOS01PREUgZ2l2ZXMg bGFiZWxzIGFkZGl0aW9uYWwgbWV0YWRhdGEKKyAvLyBkZXNjcmliaW5nIGhvdyBCaW5kKCkgc2hv dWxkIHBhdGNoIHRoZW0uCisgIyAgZGVmaW5lIEpTX0NPREVMQUJFTF9MSU5LTU9ERQorZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQvc2hhcmVkL0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1n Y2MuaCBiL2pzL3NyYy9qaXQvc2hhcmVkL0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1n Y2MuaAoraW5kZXggYTY5MDllNTYwYmVmLi5kODg2Y2JhMmM3ZTYgMTAwNjQ0CistLS0gYS9qcy9z cmMvaml0L3NoYXJlZC9BdG9taWNPcGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmgKKysrKyBi L2pzL3NyYy9qaXQvc2hhcmVkL0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1nY2MuaAor QEAgLTQ2LDcgKzQ2LDggQEAKKyAvLyBjb2RlIGluIHRoaXMgZmlsZS4KKyAKKyAjaWYgZGVmaW5l ZChKU19TSU1VTEFUT1JfQVJNNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0FSTSkgfHwgXAor LSAgICBkZWZpbmVkKEpTX1NJTVVMQVRPUl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9S X0xPT05HNjQpCisrICAgIGRlZmluZWQoSlNfU0lNVUxBVE9SX01JUFM2NCkgfHwgZGVmaW5lZChK U19TSU1VTEFUT1JfTE9PTkc2NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX1NJTVVMQVRPUl9QUEM2 NCkKKyAvLyBPbiBzb21lIHg4NiAoMzItYml0KSBzeXN0ZW1zIHRoaXMgd2lsbCBub3Qgd29yayBi ZWNhdXNlIHRoZSBjb21waWxlciBkb2VzIG5vdAorIC8vIG9wZW4tY29kZSA2NC1iaXQgYXRvbWlj cy4gIElmIHNvLCB0cnkgbGlua2luZyB3aXRoIC1sYXRvbWljLiAgSWYgdGhhdCBkb2Vzbid0Cisg Ly8gd29yaywgeW91J3JlIG1vc3RseSBvbiB5b3VyIG93bi4KK2RpZmYgLS1naXQgYS9qcy9zcmMv aml0L3NoYXJlZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC5jcHAgYi9qcy9zcmMvaml0L3NoYXJlZC9D b2RlR2VuZXJhdG9yLXNoYXJlZC5jcHAKK2luZGV4IGFkYTg3ZjFmMTFhMi4uMTQ0NjgzNTZjZjMx IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3Bw CisrKysgYi9qcy9zcmMvaml0L3NoYXJlZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC5jcHAKK0BAIC04 Niw4ICs4Niw4IEBAIENvZGVHZW5lcmF0b3JTaGFyZWQ6OkNvZGVHZW5lcmF0b3JTaGFyZWQoTUlS R2VuZXJhdG9yKiBnZW4sIExJUkdyYXBoKiBncmFwaCwKKyAKKyAjaWZkZWYgRU5BQkxFX1dBU01f U0lNRAorICMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9YODYpIHx8IFwKKy0gICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCistICAgIC8vIE9u IFg2NC94ODYgYW5kIEFSTTY0LCB3ZSBkb24ndCBuZWVkIGFsaWdubWVudCBmb3IgV2FzbSBTSU1E IGF0IHRoaXMgdGltZS4KKysgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgLy8gT24gWDY0L3g4NiwgQVJNNjQsIGFuZCBQUEM2 NCwgd2UgZG9uJ3QgbmVlZCBhbGlnbm1lbnQgZm9yIFdhc20gU0lNRCBhdCB0aGlzIHRpbWUuCisg IyAgZWxzZQorICMgICAgZXJyb3IgXAorICAgICAgICAgIndlIG1heSBuZWVkIHBhZGRpbmcgc28g dGhhdCBsb2NhbCBzbG90cyBhcmUgU0lNRC1hbGlnbmVkIGFuZCB0aGUgc3RhY2sgbXVzdCBiZSBr ZXB0IFNJTUQtYWxpZ25lZCB0b28uIgorQEAgLTEwNzUsNyArMTA3NSw3IEBAIExhYmVsKiBDb2Rl R2VuZXJhdG9yU2hhcmVkOjpnZXRKdW1wTGFiZWxGb3JCcmFuY2goTUJhc2ljQmxvY2sqIGJsb2Nr KSB7CisgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgdXNlZCBmb3IgTUlQUzY0L0xPT05HNjQvUklT Q1Y2NC4gVGhleSBoYXZlCisgLy8gYnJhbmNoVG9CbG9jay4KKyAjaWYgIWRlZmluZWQoSlNfQ09E RUdFTl9NSVBTNjQpICYmICFkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgJiYgXAorLSAgICAh ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgICFkZWZpbmVkKEpTX0NPREVHRU5fUklT Q1Y2NCkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyB2b2lkIENvZGVHZW5lcmF0b3JT aGFyZWQ6Omp1bXBUb0Jsb2NrKE1CYXNpY0Jsb2NrKiBtaXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kKSB7CisgICAvLyBT a2lwIHBhc3QgdHJpdmlhbCBibG9ja3MuCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFyZWQv TG93ZXJpbmctc2hhcmVkLWlubC5oIGIvanMvc3JjL2ppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVk LWlubC5oCitpbmRleCBiZGNjMWRhN2Q0MWEuLmI2MmY4ZjY4MWRmMSAxMDA2NDQKKy0tLSBhL2pz L3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaAorKysrIGIvanMvc3JjL2ppdC9z aGFyZWQvTG93ZXJpbmctc2hhcmVkLWlubC5oCitAQCAtNTI3LDcgKzUyNyw3IEBAIExBbGxvY2F0 aW9uIExJUkdlbmVyYXRvclNoYXJlZDo6dXNlUmVnaXN0ZXJPck5vbkRvdWJsZUNvbnN0YW50KAor IAorICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJN NjQpIHx8ICAgICAgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2 NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9QUEM2NCkKKyBMQWxsb2NhdGlvbiBMSVJHZW5lcmF0b3JTaGFyZWQ6OnVzZUFueU9yQ29uc3Rh bnQoTURlZmluaXRpb24qIG1pcikgeworICAgcmV0dXJuIHVzZVJlZ2lzdGVyT3JDb25zdGFudCht aXIpOworIH0KK2RpZmYgLS1naXQgYS9qcy9zcmMvanMtY29uZmlnLm1vemJ1aWxkIGIvanMvc3Jj L2pzLWNvbmZpZy5tb3pidWlsZAoraW5kZXggMjJiZWNhZjRlY2ZiLi5mZjUyOTQ4MjVlOWQgMTAw NjQ0CistLS0gYS9qcy9zcmMvanMtY29uZmlnLm1vemJ1aWxkCisrKysgYi9qcy9zcmMvanMtY29u ZmlnLm1vemJ1aWxkCitAQCAtOCw2ICs4LDcgQEAgaWYgKAorICAgICBDT05GSUdbIkpTX0NPREVH RU5fWDY0Il0KKyAgICAgb3IgQ09ORklHWyJKU19DT0RFR0VOX0FSTTY0Il0KKyAgICAgb3IgQ09O RklHWyJKU19DT0RFR0VOX1JJU0NWNjQiXQorKyAgICBvciBDT05GSUdbIkpTX0NPREVHRU5fUFBD NjQiXQorICk6CisgICAgIERFRklORVNbIldBU01fU1VQUE9SVFNfSFVHRV9NRU1PUlkiXSA9IFRy dWUKKyAKK2RpZmYgLS1naXQgYS9qcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNw cCBiL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0Sml0QUJJY2FsbHMuY3BwCitpbmRleCBiNWMwM2E0 N2RkODMuLjg4N2FkOWUzZDk1OSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0 Sml0QUJJY2FsbHMuY3BwCisrKysgYi9qcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxz LmNwcAorQEAgLTcxOCw2ICs3MTgsOSBAQCBjbGFzcyBKaXRBQklDYWxsIGZpbmFsIDogcHVibGlj IGpzYXBpdGVzdDo6UnVudGltZVRlc3QsCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCisgICAgIFJlZ2lzdGVyIGJhc2UgPSB0MDsKKyAgICAgcmVncy50YWtlKGJhc2UpOworKyNl bGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgUmVnaXN0ZXIgYmFzZSA9IHIxMTsK KysgICAgcmVncy50YWtlKGJhc2UpOworICNlbHNlCisgIyAgZXJyb3IgIlVua25vd24gYXJjaGl0 ZWN0dXJlISIKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9qcy9zcmMvanNhcGktdGVzdHMvdGVzdFdh c21SZXR1cm5DYWxscy5jcHAgYi9qcy9zcmMvanNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxs cy5jcHAKK2luZGV4IDQ3MjhmMjQwNGFlOC4uYTA3ZGRiMmYyMTRlIDEwMDY0NAorLS0tIGEvanMv c3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwCisrKysgYi9qcy9zcmMvanNh cGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxscy5jcHAKK0BAIC0zMiw3ICszMiwxMCBAQCBCRUdJ Tl9URVNUKHRlc3RXYXNtQ2hlY2tTbG93Q2FsbE1hcmtlckhpdCkgeworIAorICAgbWFzbS5iaW5k KCZjaGVjayk7CisgIyAgaWZkZWYgSlNfVVNFX0xJTktfUkVHSVNURVIKKy0jICAgIGlmICFkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpICYm IFwKKysjICAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIHN0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgcmEgPSBBQklOb25BcmdSZWczOworKyAgbWFzbS54c19tZmxyKHJhKTsKKysj ICAgIGVsaWYgIWRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSAmJiAhZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgJiYgXAorICAgICAgICAgIWRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQor ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByYSA9IGxyOworICMgICAgZW5kaWYKK0BAIC03 MCw3ICs3MywxMCBAQCBCRUdJTl9URVNUKHRlc3RXYXNtQ2hlY2tTbG93Q2FsbE1hcmtlck1pc3Mp IHsKKyAKKyAgIG1hc20uYmluZCgmY2hlY2spOworICMgIGlmZGVmIEpTX1VTRV9MSU5LX1JFR0lT VEVSCistIyAgICBpZiAhZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpICYmICFkZWZpbmVkKEpT X0NPREVHRU5fTUlQUzY0KSAmJiBcCisrIyAgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp CisrICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHJhID0gQUJJTm9uQXJnUmVnMzsKKysgIG1h c20ueHNfbWZscihyYSk7CisrIyAgICBlbGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg JiYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpICYmIFwKKyAgICAgICAgICFkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKKyAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcmEgPSBscjsK KyAjICAgIGVuZGlmCitkaWZmIC0tZ2l0IGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNw cCBiL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAKK2luZGV4IGEyZGZlNWQwMTk2Yy4u N2YzZGNjYTg5NWQyIDEwMDY0NAorLS0tIGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNw cAorKysrIGIvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNwcAorQEAgLTI1LDYgKzI1LDE0 IEBAIHZvaWQgUHJlcGFyZUppdChqczo6aml0OjpNYWNyb0Fzc2VtYmxlciYgbWFzbSkgeworICNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIHNhdmUuYWRkKGpz OjpqaXQ6OnJhKTsKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBMUiBv biBQUEM2NCBpc24ndCBhIEdQUjsgc2F2ZSBpdCB0byB0aGUgc3RhY2sgbWFudWFsbHkuCisrICB7 CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtYXNtLnhzX21mbHIoc2NyYXRjaCk7 CisrICAgIG1hc20uYXNfc3RkdShzY3JhdGNoLCBTdGFja1BvaW50ZXIsIC04KTsKKysgIH0KKyAj ZWxpZiBkZWZpbmVkKEpTX1VTRV9MSU5LX1JFR0lTVEVSKQorICAgc2F2ZS5hZGQoanM6OmppdDo6 bHIpOworICNlbmRpZgorQEAgLTQ0LDYgKzUyLDggQEAgYm9vbCBFeGVjdXRlSml0KEpTQ29udGV4 dCogY3gsIGpzOjpqaXQ6Ok1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7CisgI2lmIGRlZmluZWQoSlNf Q09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCisgICAg IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICAgcmVzdG9yZS5hZGQoanM6OmppdDo6cmEp OworKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8vIExSIHdpbGwgYmUgcmVz dG9yZWQgbWFudWFsbHkgYWZ0ZXIgUG9wUmVnc0luTWFzay4KKyAjZWxpZiBkZWZpbmVkKEpTX1VT RV9MSU5LX1JFR0lTVEVSKQorICAgcmVzdG9yZS5hZGQoanM6OmppdDo6bHIpOworICNlbmRpZgor QEAgLTU1LDYgKzY1LDE2IEBAIGJvb2wgRXhlY3V0ZUppdChKU0NvbnRleHQqIGN4LCBqczo6aml0 OjpNYWNyb0Fzc2VtYmxlciYgbWFzbSkgeworIAorICAgLy8gUmVzZXQgc3RhY2sgcG9pbnRlci4K KyAgIG1hc20uU2V0U3RhY2tQb2ludGVyNjQoUHNldWRvU3RhY2tQb2ludGVyNjQpOworKyNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8vIFJlc3RvcmUgTFIgZnJvbSB0aGUgc3Rh Y2sgYW5kIHJldHVybi4KKysgIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo bWFzbSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1h c20uYXNfbGQoc2NyYXRjaCwgU3RhY2tQb2ludGVyLCAwKTsKKysgICAgbWFzbS54c19tdGxyKHNj cmF0Y2gpOworKyAgICBtYXNtLmFzX2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgp OworKyAgfQorKyAgbWFzbS5hc19ibHIoKTsKKyAjZWxzZQorICAgLy8gRXhpdCB0aGUgSklULWVk IGNvZGUgdXNpbmcgdGhlIEFCSSByZXR1cm4gc3R5bGUuCisgICBtYXNtLmFiaXJldCgpOworZGlm ZiAtLWdpdCBhL2pzL3NyYy9zaGVsbC9qcy5jcHAgYi9qcy9zcmMvc2hlbGwvanMuY3BwCitpbmRl eCA0NWJjMDc5NmI5NjQuLjIwZWIxMjMxYmI3ZiAxMDA2NDQKKy0tLSBhL2pzL3NyYy9zaGVsbC9q cy5jcHAKKysrKyBiL2pzL3NyYy9zaGVsbC9qcy5jcHAKK0BAIC03ODk1LDYgKzc4OTUsMTMgQEAg c3RhdGljIHZvaWQgU2luZ2xlU3RlcENhbGxiYWNrKHZvaWQqIGFyZywgaml0OjpTaW11bGF0b3Iq IHNpbSwgdm9pZCogcGMpIHsKKyAgIHN0YXRlLmZwID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIo aml0OjpTaW11bGF0b3I6OmZwKTsKKyAgIC8vIHNlZSBXYXNtVGFpbENhbGxGUFNjcmF0Y2hSZWcg YW5kIENvbGxhcHNlV2FzbUZyYW1lRmFzdAorICAgc3RhdGUudGVtcEZQID0gKHZvaWQqKXNpbS0+ Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0b3I6OnQzKTsKKysjICBlbGlmIGRlZmluZWQoSlNfU0lN VUxBVE9SX1BQQzY0KQorKyAgc3RhdGUuc3AgPSAodm9pZCopc2ltLT5nZXRSZWdpc3RlcihqaXQ6 OlNpbXVsYXRvcjo6c3ApOworKyAgc3RhdGUubHIgPSAodm9pZCopc2ltLT5nZXRMUigpOworKyAg c3RhdGUuZnAgPSAodm9pZCopc2ltLT5nZXRSZWdpc3RlcihqaXQ6OlNpbXVsYXRvcjo6ZnApOwor KyAgLy8gV2FzbVRhaWxDYWxsRlBTY3JhdGNoUmVnID0gQUJJTm9uQXJnUmVnMyA9IHIyMiBob2xk cyB0aGUgdW53aW5kIEZQCisrICAvLyBkdXJpbmcgdGhlIHdhc20gdGFpbC1jYWxsIGNvbGxhcHNl IHdpbmRvdyAoUmVzdG9yZUZwUmEgdW53aW5kIGluZm8pLgorKyAgc3RhdGUudGVtcEZQID0gKHZv aWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0b3I6OnIyMik7CisgIyAgZWxzZQorICMg ICAgZXJyb3IgIk5ZSTogU2luZ2xlLXN0ZXAgcHJvZmlsaW5nIHN1cHBvcnQiCisgIyAgZW5kaWYK K0BAIC0xMzE0NCw2ICsxMzE1MSwxNSBAQCBib29sIEluaXRPcHRpb25QYXJzZXIoT3B0aW9uUGFy c2VyJiBvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3AgdGhlIFJJU0MtViBzaW11 bGF0b3IgYWZ0ZXIgdGhlIGdpdmVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJOVU1CRVIg b2YgaW5zdHJ1Y3Rpb25zLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAtMSkgfHwKKysjZW5k aWYKKysjaWZkZWYgSlNfU0lNVUxBVE9SX1BQQzY0CisrICAgICAgIW9wLmFkZEJvb2xPcHRpb24o J1wwJywgInBwYzY0LXNpbS1pY2FjaGUtY2hlY2tzIiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAiRW5hYmxlIGljYWNoZSBmbHVzaCBjaGVja3MgaW4gdGhlIFBQQzY0ICIKKysgICAgICAgICAg ICAgICAgICAgICAgICAic2ltdWxhdG9yLiIpIHx8CisrICAgICAgIW9wLmFkZEludE9wdGlvbign XDAnLCAicHBjNjQtc2ltLXN0b3AtYXQiLCAiTlVNQkVSIiwKKysgICAgICAgICAgICAgICAgICAg ICAgICJTdG9wIHRoZSBQUEM2NCBzaW11bGF0b3IgYWZ0ZXIgdGhlIGdpdmVuICIKKysgICAgICAg ICAgICAgICAgICAgICAgICJOVU1CRVIgb2YgaW5zdHJ1Y3Rpb25zLiIsCisrICAgICAgICAgICAg ICAgICAgICAgICAtMSkgfHwKKyAjZW5kaWYKKyAgICAgICAhb3AuYWRkSW50T3B0aW9uKCdcMCcs ICJudXJzZXJ5LXNpemUiLCAiU0laRS1NQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiU2V0 IHRoZSBtYXhpbXVtIG51cnNlcnkgc2l6ZSBpbiBNQiIsCitAQCAtMTQyMzUsNiArMTQyNTEsMTUg QEAgYm9vbCBTZXRDb250ZXh0SklUT3B0aW9ucyhKU0NvbnRleHQqIGN4LCBjb25zdCBPcHRpb25Q YXJzZXImIG9wKSB7CisgICBpZiAoc3RvcEF0ID49IDApIHsKKyAgICAgaml0OjpTaW11bGF0b3I6 OlN0b3BTaW1BdCA9IHN0b3BBdDsKKyAgIH0KKysjZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9Q UEM2NCkKKysgIGlmIChvcC5nZXRCb29sT3B0aW9uKCJwcGM2NC1zaW0taWNhY2hlLWNoZWNrcyIp KSB7CisrICAgIGppdDo6U2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291 bnQgPSAwOworKyAgfQorKworKyAgaW50MzJfdCBzdG9wQXQgPSBvcC5nZXRJbnRPcHRpb24oInBw YzY0LXNpbS1zdG9wLWF0Iik7CisrICBpZiAoc3RvcEF0ID49IDApIHsKKysgICAgaml0OjpTaW11 bGF0b3I6OlN0b3BTaW1BdCA9IHN0b3BBdDsKKysgIH0KKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVC VUcKK2RpZmYgLS1naXQgYS9qcy9zcmMvc2hlbGwvanNzaGVsbC5oIGIvanMvc3JjL3NoZWxsL2pz c2hlbGwuaAoraW5kZXggZThkNDdiYTY4ODhjLi41N2UyYjE1ZjNjZGQgMTAwNjQ0CistLS0gYS9q cy9zcmMvc2hlbGwvanNzaGVsbC5oCisrKysgYi9qcy9zcmMvc2hlbGwvanNzaGVsbC5oCitAQCAt MjIsNyArMjIsOCBAQAorIAorIC8vIFNvbWUgcGxhdGZvcm0gaG9va3MgbXVzdCBiZSBpbXBsZW1l bnRlZCBmb3Igc2luZ2xlLXN0ZXAgcHJvZmlsaW5nLgorICNpZiBkZWZpbmVkKEpTX1NJTVVMQVRP Ul9BUk0pIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVk KEpTX1NJTVVMQVRPUl9BUk02NCkgfHwgZGVmaW5lZChKU19TSU1VTEFUT1JfTE9PTkc2NCkKKysg ICAgZGVmaW5lZChKU19TSU1VTEFUT1JfQVJNNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0xP T05HNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19TSU1VTEFUT1JfUklTQ1Y2NCkgfHwgZGVmaW5l ZChKU19TSU1VTEFUT1JfUFBDNjQpCisgIyAgZGVmaW5lIFNJTkdMRVNURVBfUFJPRklMSU5HCisg I2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvanMvc3JjL3Rlc3RzL3NoZWxsL29zLmpzIGIvanMvc3Jj L3Rlc3RzL3NoZWxsL29zLmpzCitpbmRleCA5Mjk5ODI3NTY1NDguLmYzZDIzOTZiMTdlYiAxMDA2 NDQKKy0tLSBhL2pzL3NyYy90ZXN0cy9zaGVsbC9vcy5qcworKysrIGIvanMvc3JjL3Rlc3RzL3No ZWxsL29zLmpzCitAQCAtMjAsNyArMjAsMTMgQEAgdmFyIGluZm8gPSBvcy53YWl0cGlkKGtpZHBp ZCwgdHJ1ZSk7CisgYXNzZXJ0RXEoaW5mby5oYXNPd25Qcm9wZXJ0eSgicGlkIiksIGZhbHNlKTsK KyBhc3NlcnRFcShpbmZvLmhhc093blByb3BlcnR5KCJleGl0U3RhdHVzIiksIGZhbHNlKTsKKyAK Ky1vcy5raWxsKGtpZHBpZCk7CisrLy8gVXNlIFNJR0tJTEwgKDkpIGluc3RlYWQgb2YgdGhlIGRl ZmF1bHQgU0lHSU5UOiB1bmRlciBoZWF2eSBwYXJhbGxlbCB0ZXN0CisrLy8gbG9hZCwgU0lHSU5U IGRlbGl2ZXJ5IGNhbiByYWNlIHdpdGggdGhlIGNoaWxkJ3Mgc2lnbmFsLWhhbmRsZXIgc2V0dXAg YW5kCisrLy8gdGhlIGtlcm5lbCdzIHJlYXBpbmcgcGF0aCwgbGVhZGluZyB0byB3YWl0cGlkIGJl bG93IGJsb2NraW5nIHVudGlsIHRoZQorKy8vIGBzbGVlcCA2MGAgZXhpdHMgbm9ybWFsbHkuIFNJ R0tJTEwgaXMgdW5jYXRjaGFibGUgYW5kIGZvcmNlcyBpbW1lZGlhdGUKKysvLyB0ZXJtaW5hdGlv biwgc28gdGhlIGFzc2VydGlvbiBiZWxvdyAoImtpbGxlZCBwcm9jZXNzIHNob3VsZCBub3QgaGF2 ZQorKy8vIGV4aXRTdGF0dXMiKSBpcyByZWxpYWJsZS4KKytvcy5raWxsKGtpZHBpZCwgOSk7Cisg CisgaW5mbyA9IG9zLndhaXRwaWQoa2lkcGlkKTsKKyBhc3NlcnRFcShpbmZvLmhhc093blByb3Bl cnR5KCJwaWQiKSwgdHJ1ZSwgIndhaXRpbmcgb24gZGVhZCBwcm9jZXNzIHNob3VsZCByZXR1cm4g cGlkIik7CitkaWZmIC0tZ2l0IGEvanMvc3JjL3V0aWwvUG9pc29uLmggYi9qcy9zcmMvdXRpbC9Q b2lzb24uaAoraW5kZXggNzIxZWNmZjYxNDlkLi5kZTc5ODFhYTZmNjAgMTAwNjQ0CistLS0gYS9q cy9zcmMvdXRpbC9Qb2lzb24uaAorKysrIGIvanMvc3JjL3V0aWwvUG9pc29uLmgKK0BAIC05Miw2 ICs5Miw4IEBAIGNvbnN0IHVpbnQ4X3QgSlNfU0NPUEVfREFUQV9UUkFJTElOR19OQU1FU19QQVRU RVJOID0gMHhDQzsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAjICBkZWZp bmUgSlNfU1dFUFRfQ09ERV9QQVRURVJOIFwKKyAgICAgMHgyOSAgLy8gaWxsZWdhbCBzYiBpbnN0 cnVjdGlvbiwgY3Jhc2hlcyBpbiB1c2VyIG1vZGUuCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorKyMgIGRlZmluZSBKU19TV0VQVF9DT0RFX1BBVFRFUk4gMHgwMCAgLy8gaWxsZWdh bCBpbnN0cnVjdGlvbiAoYWxsIHplcm9zKQorICNlbHNlCisgIyAgZXJyb3IgIkpTX1NXRVBUX0NP REVfUEFUVEVSTiBub3QgZGVmaW5lZCBmb3IgdGhpcyBwbGF0Zm9ybSIKKyAjZW5kaWYKK2RpZmYg LS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQW55UmVmLmggYi9qcy9zcmMvd2FzbS9XYXNtQW55UmVm LmgKK2luZGV4IGY4MWQ0YzYxNzFiNi4uNzIwMGU5YWIwZTIzIDEwMDY0NAorLS0tIGEvanMvc3Jj L3dhc20vV2FzbUFueVJlZi5oCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtQW55UmVmLmgKK0BAIC0y MDksNyArMjA5LDcgQEAgY2xhc3MgQW55UmVmIHsKKyAgICAgLy8gVHJ1bmNhdGUgdGhlIHZhbHVl IHRvIHRoZSAzMS1iaXQgdmFsdWUgc2l6ZS4KKyAgICAgdWludHB0cl90IHdpZGVWYWx1ZSA9IHVp bnRwdHJfdCh2YWx1ZSAmIDB4N0ZGRkZGRkYpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCistICAgIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgICAvLyBTaWduIGV4dGVuZCB0aGUgdmFsdWUg dG8gdGhlIG5hdGl2ZSBwb2ludGVyIHNpemUuCisgICAgIHVpbnRwdHJfdCB3aWRlVmFsdWUgPSB1 aW50cHRyX3QoaW50NjRfdCgodWludDY0X3QodmFsdWUpIDw8IDMzKSkgPj4gMzMpOworICNlbGlm ICFkZWZpbmVkKEpTXzY0QklUKQorQEAgLTIzNCw2ICsyMzQsMTEgQEAgY2xhc3MgQW55UmVmIHsK KyAjICBpZmRlZiBERUJVRworICMgICAgaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0FSTTY0KQorICAgICBNT1pfQVNTRVJUKHZhbHVlIDw9IFVJTlQzMl9N QVgpOworKyMgICAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX01JUFM2NCkgfHwgXAorKyAgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgLy8gT24gc2lnbi1leHRlbmRp bmcgcGxhdGZvcm1zLCBhIGNhbm9uaWNhbCBpMzIgbXVzdCBiZSB0aGUgc2lnbgorKyAgICAvLyBl eHRlbnNpb24gb2YgaXRzIGxvdyAzMiBiaXRzLgorKyAgICBNT1pfQVNTRVJUKHZhbHVlID09IHVp bnRwdHJfdChpbnQ2NF90KGludDMyX3QodmFsdWUpKSkpOworICMgICAgZW5kaWYKKyAjICBlbmRp ZgorICAgfQorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21CQ0RlZnMuaCBiL2pzL3NyYy93 YXNtL1dhc21CQ0RlZnMuaAoraW5kZXggYjQ0ZTkxZTI4NjkzLi42NmE4YzlhZmU4YzYgMTAwNjQ0 CistLS0gYS9qcy9zcmMvd2FzbS9XYXNtQkNEZWZzLmgKKysrKyBiL2pzL3NyYy93YXNtL1dhc21C Q0RlZnMuaAorQEAgLTQ0LDYgKzQ0LDkgQEAKKyAjaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCisgIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQvQXNzZW1ibGVyLXJpc2N2NjQuaCIKKyAjZW5k aWYKKysjaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2 NC9Bc3NlbWJsZXItcHBjNjQuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAianMvU2NhbGFyVHlwZS5o IgorICNpbmNsdWRlICJ1dGlsL01lbW9yeS5oIgorICNpbmNsdWRlICJ3YXNtL1dhc21Db2RlZ2Vu VHlwZXMuaCIKK0BAIC0xNTEsNiArMTU0LDEwIEBAIGVudW0gY2xhc3MgUmhzRGVzdE9wIHsgVHJ1 ZSA9IHRydWUgfTsKKyAjICBkZWZpbmUgUkFCQUxEUl9QSU5fSU5TVEFOQ0UKKyAjZW5kaWYKKyAK KysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyMgIGRlZmluZSBSQUJBTERSX1BJTl9JTlNUQU5D RQorKyNlbmRpZgorKworIC8vIE1heCBudW1iZXIgb2YgcHVzaGVzIG9udG8gdGhlIHZhbHVlIHN0 YWNrIGZvciBhbnkgb3Bjb2RlIG9yIGVtaXR0ZXIgdGhhdAorIC8vIGRvZXMgbm90IHB1c2ggYSB2 YXJpYWJsZSwgdW5ib3VuZGVkIGFtb3VudCAoYW55dGhpbmcgd2l0aCBtdWx0aXBsZQorIC8vIHJl c3VsdHMpLiAgVGhpcyBpbmNsdWRlcyBhbHNvIGludGVybWVkaWF0ZSBwdXNoZXMgc3VjaCBhcyB2 YWx1ZXMgcHVzaGVkIGFzCitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNw cCBiL2pzL3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAKK2luZGV4IDgzNTUxMmIwOWI4Yy4uOTEz N2IwOWY0Njg0IDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcAorKysr IGIvanMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcAorQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lk IEJhc2VDb21waWxlcjo6Ym91bmRzQ2hlY2tCZWxvdzRHQkFjY2Vzcyh1aW50MzJfdCBtZW1vcnlJ bmRleCwKKyAvLyBNYWtlIHN1cmUgdGhlIHB0ciBjb3VsZCBiZSB1c2VkIGFzIGFuIGluZGV4IHJl Z2lzdGVyLgorIHN0YXRpYyBpbmxpbmUgdm9pZCBUb1ZhbGlkSW5kZXgoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIFJlZ0kzMiBwdHIpIHsKKyAjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisgICAvLyBXaGVuIHB0ciBpcyB1c2VkIGFzIGFuIGluZGV4LCBpdCB3 aWxsIGJlIGFkZGVkIHRvIGEgNjQtYml0IHJlZ2lzdGVyLgorICAgLy8gU28gd2Ugc2hvdWxkIGV4 cGxpY2l0bHkgcHJvbW90ZSBwdHIgdG8gNjQtYml0LiBTaW5jZSBub3cgcHRyIGhvbGRzIGEKKyAg IC8vIHVuc2lnbmVkIDMyLWJpdCB2YWx1ZSwgd2UgemVyby1leHRlbmQgaXQgdG8gNjQtYml0IGhl cmUuCitAQCAtNjQ1LDYgKzY0NSwxMyBAQCB2b2lkIEJhc2VDb21waWxlcjo6ZXhlY3V0ZUxvYWQo TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLCBBY2Nlc3NDaGVjayogY2hlY2ssCisgICB9IGVsc2Ug eworICAgICBtYXNtLndhc21Mb2FkKCphY2Nlc3MsIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBkZXN0 LmFueSgpKTsKKyAgIH0KKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBNT1pf QVNTRVJUKHRlbXAuaXNJbnZhbGlkKCkpOworKyAgaWYgKGRlc3QudGFnID09IEFueVJlZzo6STY0 KSB7CisrICAgIG1hc20ud2FzbUxvYWRJNjQoKmFjY2VzcywgbWVtb3J5QmFzZSwgcHRyLCBwdHIs IGRlc3QuaTY0KCkpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS53YXNtTG9hZCgqYWNjZXNzLCBt ZW1vcnlCYXNlLCBwdHIsIHB0ciwgZGVzdC5hbnkoKSk7CisrICB9CisgI2Vsc2UKKyAgIE1PWl9D UkFTSCgiQmFzZUNvbXBpbGVyIHBsYXRmb3JtIGhvb2s6IGxvYWQiKTsKKyAjZW5kaWYKK0BAIC02 NzUsMTAgKzY4MiwxMSBAQCB2b2lkIEJhc2VDb21waWxlcjo6bG9hZChNZW1vcnlBY2Nlc3NEZXNj KiBhY2Nlc3MsIEFjY2Vzc0NoZWNrKiBjaGVjaywKKyAgIC8vIGdlbmVyYXRlZCBpcyB0aGUgc2Ft ZSBmb3IgdGhlIDY0LWJpdCBhbmQgdGhlIDMyLWJpdCBjYXNlLgorICAgcmV0dXJuIGV4ZWN1dGVM b2FkKGFjY2VzcywgY2hlY2ssIGluc3RhbmNlLCBtZW1vcnlCYXNlLCBSZWdJMzIocHRyLnJlZyks IGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgbWF5YmVGcm9tSTY0KHRlbXApKTsKKy0jZWxp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkKKy0gIC8vIE9uIG1pcHM2NCBhbmQgbG9vbmdhcmNoNjQsIHRoZSAncHJlcGFyZU1lbW9yeUFj Y2VzcycgZnVuY3Rpb24gd2lsbCBtYWtlCistICAvLyBzdXJlIHRoYXQgcHRyIGhvbGRzIGEgdmFs aWQgNjQtYml0IGluZGV4IHZhbHVlLiBUaHVzIHRoZSBjb2RlIGdlbmVyYXRlZCBpbgorLSAgLy8g J2V4ZWN1dGVMb2FkJyBpcyB0aGUgc2FtZSBmb3IgdGhlIDY0LWJpdCBhbmQgdGhlIDMyLWJpdCBj YXNlLgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBcCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8v IE9uIG1pcHM2NCwgbG9vbmdhcmNoNjQsIGFuZCBwcGM2NCwgdGhlICdwcmVwYXJlTWVtb3J5QWNj ZXNzJyBmdW5jdGlvbiB3aWxsCisrICAvLyBtYWtlIHN1cmUgdGhhdCBwdHIgaG9sZHMgYSB2YWxp ZCA2NC1iaXQgaW5kZXggdmFsdWUuIFRodXMgdGhlIGNvZGUKKysgIC8vIGdlbmVyYXRlZCBpbiAn ZXhlY3V0ZUxvYWQnIGlzIHRoZSBzYW1lIGZvciB0aGUgNjQtYml0IGFuZCB0aGUgMzItYml0IGNh c2UuCisgICByZXR1cm4gZXhlY3V0ZUxvYWQoYWNjZXNzLCBjaGVjaywgaW5zdGFuY2UsIG1lbW9y eUJhc2UsIFJlZ0kzMihwdHIucmVnKSwgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICBtYXli ZUZyb21JNjQodGVtcCkpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorQEAg LTc4OCw2ICs3OTYsMTMgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmV4ZWN1dGVTdG9yZShNZW1vcnlB Y2Nlc3NEZXNjKiBhY2Nlc3MsIEFjY2Vzc0NoZWNrKiBjaGVjaywKKyAgIH0gZWxzZSB7CisgICAg IG1hc20ud2FzbVN0b3JlKCphY2Nlc3MsIHNyYy5hbnkoKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIp OworICAgfQorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIE1PWl9BU1NFUlQo dGVtcC5pc0ludmFsaWQoKSk7CisrICBpZiAoYWNjZXNzLT50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2 NCkgeworKyAgICBtYXNtLndhc21TdG9yZUk2NCgqYWNjZXNzLCBzcmMuaTY0KCksIG1lbW9yeUJh c2UsIHB0ciwgcHRyKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20ud2FzbVN0b3JlKCphY2Nlc3Ms IHNyYy5hbnkoKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOworKyAgfQorICNlbHNlCisgICBNT1pf Q1JBU0goIkJhc2VDb21waWxlciBwbGF0Zm9ybSBob29rOiBzdG9yZSIpOworICNlbmRpZgorQEAg LTgxMiw3ICs4MjcsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6c3RvcmUoTWVtb3J5QWNjZXNzRGVz YyogYWNjZXNzLCBBY2Nlc3NDaGVjayogY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgIG1h eWJlRnJvbUk2NCh0ZW1wKSk7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgcmV0dXJuIGV4ZWN1dGVTdG9yZShhY2Nlc3Ms IGNoZWNrLCBpbnN0YW5jZSwgbWVtb3J5QmFzZSwgUmVnSTMyKHB0ci5yZWcpLCBzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgIG1heWJlRnJvbUk2NCh0ZW1wKSk7CisgI2Vsc2UKK0BAIC0xMjk1 LDcgKzEzMTAsOCBAQCBzdGF0aWMgdm9pZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJl Z0kzMiBydiwgY29uc3QgVGVtcHMmIHRlbXBzKSB7CisgICBiYy0+ZnJlZUkzMih0ZW1wcy50MCk7 CisgfQorIAorLSNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9MT09ORzY0KQorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkKKyAKKyBzdHJ1Y3QgVGVtcHMgeworICAgUmVnSTMyIHQwLCB0MSwgdDI7CitAQCAtMTUw NCw3ICsxNTIwLDcgQEAgc3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBB dG9taWNPcCBvcCwgUmVnSTY0IHJ2LCBSZWdJNjQgdGVtcCkgeworIH0KKyAKKyAjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwK Ky0gICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdF Tl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgCisgc3RhdGljIHZvaWQg UG9wQW5kQWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgQXRvbWljT3Agb3AsIFJlZ0k2NCogcmQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTY0KiBydiwgUmVnSTY0KiB0ZW1wKSB7 CitAQCAtMTY3OCw3ICsxNjk0LDggQEAgc3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGls ZXIqIGJjLCBSZWdJMzIgcnYsIGNvbnN0IFRlbXBzJikgeworICAgYmMtPmZyZWVJMzIocnYpOwor IH0KKyAKKy0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCisgCisgc3RydWN0IFRlbXBzIHsKKyAgIFJlZ0kzMiB0MCwgdDEsIHQyOworQEAgLTE4NDQs NyArMTg2MSw3IEBAIHN0YXRpYyB2b2lkIERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgUmVn STY0IHJkLCBSZWdJNjQgcnYpIHsKKyB9CisgCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FS TTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNf Q09ERUdFTl9MT09ORzY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KQorIAorIHN0YXRpYyB2b2lkIFBvcEFuZEFsbG9jYXRlKEJh c2VDb21waWxlciogYmMsIFJlZ0k2NCogcmQsIFJlZ0k2NCogcnYpIHsKKyAgICpydiA9IGJjLT5w b3BJNjQoKTsKK0BAIC0yMDE3LDcgKzIwMzQsOCBAQCBzdGF0aWMgdm9pZCBEZWFsbG9jYXRlKEJh c2VDb21waWxlciogYmMsIFJlZ0kzMiByZXhwZWN0LCBSZWdJMzIgcm5ldywKKyAgIGJjLT5mcmVl STMyKHJleHBlY3QpOworIH0KKyAKKy0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f TUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorKyAgICBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCisgCisgc3RydWN0IFRlbXBzIHsKKyAgIFJlZ0kzMiB0MCwgdDEs IHQyOworQEAgLTIyODcsNyArMjMwNSw3IEBAIHN0YXRpYyB2b2lkIERlYWxsb2NhdGUoQmFzZUNv bXBpbGVyKiBiYywgUmVnSTY0IHJleHBlY3QsIFJlZ0k2NCBybmV3KSB7CisgfQorIAorICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkg fHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKKysgICAgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAKKyB0ZW1wbGF0 ZSA8dHlwZW5hbWUgUmVnQWRkcmVzc1R5cGU+Cisgc3RhdGljIHZvaWQgUG9wQW5kQWxsb2NhdGUo QmFzZUNvbXBpbGVyKiBiYywgUmVnSTY0KiByZXhwZWN0LCBSZWdJNjQqIHJuZXcsCitAQCAtMjg4 NSw2ICsyOTAzLDExIEBAIHZvaWQgQmFzZUNvbXBpbGVyOjpsb2FkRXh0ZW5kKE1lbW9yeUFjY2Vz c0Rlc2MqIGFjY2VzcywgU2NhbGFyOjpUeXBlIHZpZXdUeXBlKSB7CisgICBSZWdJNjQgcnMgPSBw b3BJNjQoKTsKKyAgIFJlZ1YxMjggcmQgPSBuZWVkVjEyOCgpOworICAgbWFzbS5tb3ZlR1BSNjRU b0RvdWJsZShycywgcmQpOworKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAvLyBtdHZzcmQg cGxhY2VzIHZhbHVlIGluIEJFIGR3MCAoPSBMRSBkdzEpLiB3aWRlbkxvdyogb3BlcmF0ZXMgb24g TEUgZHcwLgorKyAgLy8gU3dhcCBkd29yZHMgdG8gbW92ZSBsb2FkZWQgZGF0YSB0byB0aGUgY29y cmVjdCBoYWxmLgorKyAgbWFzbS5hc194eHBlcm1kaShyZCwgcmQsIHJkLCAyKTsKKysjZW5kaWYK KyAgIHN3aXRjaCAodmlld1R5cGUpIHsKKyAgICAgY2FzZSBTY2FsYXI6OkludDg6CisgICAgICAg bWFzbS53aWRlbkxvd0ludDh4MTYocmQsIHJkKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9X YXNtQkNSZWdEZWZzLmggYi9qcy9zcmMvd2FzbS9XYXNtQkNSZWdEZWZzLmgKK2luZGV4IGJiODRm MDg2M2RlMi4uZmQzN2JkNDY0ZjM5IDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUJDUmVn RGVmcy5oCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtQkNSZWdEZWZzLmgKK0BAIC0xMTgsNiArMTE4 LDEzIEBAIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmFiYWxkclNjcmF0Y2hJMzIgPSBDYWxs VGVtcFJlZzI7Cisgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSYWJhbGRyU2NyYXRjaEkzMiA9 IENhbGxUZW1wUmVnMjsKKyAjZW5kaWYKKyAKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyMg IGRlZmluZSBSQUJBTERSX1NDUkFUQ0hfSTMyCisrLy8gVXNlIHIyNSAoY2FsbGVlLXNhdmVkLCBu b24tYXJnLCBub3QgdXNlZCBieSBhbnkgd2FzbSBpbmZyYXN0cnVjdHVyZSkKKysvLyBpbnN0ZWFk IG9mIENhbGxUZW1wUmVnMiAocjEwKSB3aGljaCBpcyBJbnRBcmdSZWc3LgorK3N0YXRpYyBjb25z dGV4cHIgUmVnaXN0ZXIgUmFiYWxkclNjcmF0Y2hJMzIgPSByMjU7CisrI2VuZGlmCisrCisgI2lm ZGVmIFJBQkFMRFJfU0NSQVRDSF9GMzJfQUxJQVNFU19GNjQKKyAjICBpZiAhZGVmaW5lZChSQUJB TERSX1NDUkFUQ0hfRjMyKSB8fCAhZGVmaW5lZChSQUJBTERSX1NDUkFUQ0hfRjY0KQorICMgICAg ZXJyb3IgIkJhZCBjb25maWd1cmF0aW9uIgorQEAgLTM4Niw4ICszOTMsOSBAQCBzdHJ1Y3QgU3Bl Y2lmaWNSZWdzIHsKKyAKKyAgIFNwZWNpZmljUmVncygpIDogYWJpUmV0dXJuUmVnSTY0KFJldHVy blJlZzY0KSB7fQorIH07CistI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09O RzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICBcCisrICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkg fHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgc3RydWN0IFNwZWNpZmljUmVn cyB7CisgICAvLyBSZXF1aXJlZCBieSBnY2MuCisgICBTcGVjaWZpY1JlZ3MoKSB7fQorZGlmZiAt LWdpdCBhL2pzL3NyYy93YXNtL1dhc21CYXNlbGluZUNvbXBpbGUuY3BwIGIvanMvc3JjL3dhc20v V2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAKK2luZGV4IDJhZjdhZDdmNTgzYi4uYzU3MTgwZGQzNjJi IDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAKKysrKyBi L2pzL3NyYy93YXNtL1dhc21CYXNlbGluZUNvbXBpbGUuY3BwCitAQCAtMzc2LDExICszNzYsMTUg QEAgdm9pZCBCYXNlQ29tcGlsZXI6OnRhYmxlU3dpdGNoKExhYmVsKiB0aGVUYWJsZSwgUmVnSTMy IHN3aXRjaFZhbHVlLAorICAgbWFzbS5tYV9sZHIoRFRSQWRkcihzY3JhdGNoLCBEdHJSZWdJbW1T aGlmdChzd2l0Y2hWYWx1ZSwgTFNMLCAyKSksIHBjLCBPZmZzZXQsCisgICAgICAgICAgICAgICBB c3NlbWJsZXI6OkFsd2F5cyk7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisgICBTY3JhdGNoSTMyIHNjcmF0Y2goKnRoaXMpOworICAgQ29kZUxh YmVsIHRhYmxlQ2w7CisgCisrIyAgaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgbWFz bS5tb3YoJnRhYmxlQ2wsIHNjcmF0Y2gpOworKyMgIGVsc2UKKyAgIG1hc20ubWFfbGkoc2NyYXRj aCwgJnRhYmxlQ2wpOworKyMgIGVuZGlmCisgCisgICB0YWJsZUNsLnRhcmdldCgpLT5iaW5kKHRo ZVRhYmxlLT5vZmZzZXQoKSk7CisgICBtYXNtLmFkZENvZGVMYWJlbCh0YWJsZUNsKTsKK0BAIC04 OTgsNyArOTAyLDcgQEAgdm9pZCBCYXNlQ29tcGlsZXI6Omluc2VydEJyZWFrYWJsZVBvaW50KENh bGxTaXRlS2luZCBraW5kKSB7CisgICBtYXNtLmFwcGVuZChDYWxsU2l0ZURlc2MoaXRlcl8ubGFz dE9wY29kZU9mZnNldCgpLCBraW5kKSwKKyAgICAgICAgICAgICAgIENvZGVPZmZzZXQobWFzbS5j dXJyZW50T2Zmc2V0KCkpKTsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5f UklTQ1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKKyAgIFNjcmF0Y2hQdHIgc2NyYXRjaCgqdGhpcyk7CisgICBMYWJlbCBM OworICAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoSW5zdGFuY2VSZWcsIEluc3RhbmNlOjpvZmZzZXRP ZkRlYnVnU3R1YigpKSwgc2NyYXRjaCk7CitAQCAtOTcyLDcgKzk3Niw3IEBAIHZvaWQgQmFzZUNv bXBpbGVyOjppbnNlcnRQZXJGdW5jdGlvbkRlYnVnU3R1YigpIHsKKyAgICAgbWFzbS5tYV9ieChs ciwgQXNzZW1ibGVyOjpaZXJvKTsKKyAgIH0KKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIHsKKyAgICAgU2NyYXRjaFB0ciBzY3JhdGNoKCp0 aGlzKTsKKyAKK0BAIC0xNDAzLDcgKzE0MDcsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6cG9wU3Rh Y2tSZXN1bHRzKEFCSVJlc3VsdEl0ZXImIGl0ZXIsIFN0YWNrSGVpZ2h0IHN0YWNrQmFzZSkgewor ICAgICBzd2l0Y2ggKHYua2luZCgpKSB7CisgICAgICAgY2FzZSBTdGs6OkNvbnN0STMyOgorICNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysgICAgZGVmaW5lZChK U19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgICAgICAg IGZyLnN0b3JlSW1tZWRpYXRlUHRyVG9TdGFjayh2LmkzMnZhbF8sIHJlc3VsdEhlaWdodCwgdGVt cCk7CisgI2Vsc2UKKyAgICAgICAgIGZyLnN0b3JlSW1tZWRpYXRlUHRyVG9TdGFjayh1aW50MzJf dCh2LmkzMnZhbF8pLCByZXN1bHRIZWlnaHQsIHRlbXApOworQEAgLTE3MjMsNiArMTcyNywxMyBA QCB2b2lkIEJhc2VDb21waWxlcjo6cGFzc0FyZyhWYWxUeXBlIHR5cGUsIGNvbnN0IFN0ayYgYXJn LCBGdW5jdGlvbkNhbGwqIGNhbGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFyZ0xvYy5vZmZzZXRGcm9tQXJnQmFzZSgpKSk7CisgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgIGxvYWRJMzIoYXJnLCBSZWdJMzIoYXJnTG9jLmdwcigpKSk7CisrI2lmZGVmIEpTX0NP REVHRU5fUFBDNjQKKysgICAgICAgIC8vIGFkZGkgY2FuIHNpZ24tZXh0ZW5kLCB3aGljaCB5aWVs ZHMgd3JvbmcgdmFsdWVzIHdoZW4gdGhlIEMrKworKyAgICAgICAgLy8gY2FsbGVlIGV4cGVjdHMg YSB1aW50MzJfdC4gQ2xlYXIgdGhlIHVwcGVyIDMyIGJpdHMuCisrICAgICAgICBpZiAoY2FsbC0+ YWJpS2luZCA9PSBBQklLaW5kOjpTeXN0ZW0pIHsKKysgICAgICAgICAgbWFzbS5hc19ybGRpY2wo YXJnTG9jLmdwcigpLCBhcmdMb2MuZ3ByKCksIDAsIDMyKTsKKysgICAgICAgIH0KKysjZW5kaWYK KyAgICAgICB9CisgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yMzcyLDkgKzIzODMsMTAgQEAg dm9pZCBCYXNlQ29tcGlsZXI6OmZpbmlzaFRyeU5vdGUoc2l6ZV90IHRyeU5vdGVJbmRleCkgewor IFJlZ0kzMiBCYXNlQ29tcGlsZXI6Om5lZWRSb3RhdGU2NFRlbXAoKSB7CisgI2lmIGRlZmluZWQo SlNfQ09ERUdFTl9YODYpCisgICByZXR1cm4gbmVlZEkzMigpOworLSNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgIFwKKy0gICAgZGVm aW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBc CistICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f UklTQ1Y2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fQVJNKSB8fCAgICAgICBcCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgICAgXAorKyAgICBkZWZpbmVkKEpTX0NPREVH RU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IFwKKysgICAgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgcmV0dXJuIFJlZ0kzMjo6SW52YWxpZCgpOworICNl bHNlCisgICBNT1pfQ1JBU0goIkJhc2VDb21waWxlciBwbGF0Zm9ybSBob29rOiBuZWVkUm90YXRl NjRUZW1wIik7CitAQCAtMjQzMyw2ICsyNDQ1LDggQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnBvcEFu ZEFsbG9jYXRlRm9yTXVsSTY0KFJlZ0k2NCogcjAsIFJlZ0k2NCogcjEsCisgICBwb3AyeEk2NChy MCwgcjEpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICAgcG9wMnhJNjQo cjAsIHIxKTsKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBwb3AyeEk2NChy MCwgcjEpOworICNlbHNlCisgICBNT1pfQ1JBU0goIkJhc2VDb21waWxlciBwb3J0aW5nIGludGVy ZmFjZTogcG9wQW5kQWxsb2NhdGVGb3JNdWxJNjQiKTsKKyAjZW5kaWYKK0BAIC0yODY2LDYgKzI4 ODAsOSBAQCBzdGF0aWMgUmVnSTMyIFBvcGNudFRlbXAoQmFzZUNvbXBpbGVyJiBiYykgeworICAg ICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIHJldHVybiBiYy5u ZWVkSTMyKCk7CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgLy8gUFBDNjQg aGFzIG5hdGl2ZSBwb3BjbnRkL3BvcGNudHc7IG5vIHRlbXAgcmVnaXN0ZXIgbmVlZGVkLgorKyAg cmV0dXJuIFJlZ0kzMjo6SW52YWxpZCgpOworICNlbHNlCisgICBNT1pfQ1JBU0goIkJhc2VDb21w aWxlciBwbGF0Zm9ybSBob29rOiBQb3BjbnRUZW1wIik7CisgI2VuZGlmCitAQCAtOTM2Miw2ICs5 Mzc5LDExIEBAIHN0YXRpYyB2b2lkIE11bEk2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdW MTI4IHJzLCBSZWdWMTI4IHJzZCwKKyAgICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXAx LCBSZWdWMTI4IHRlbXAyKSB7CisgICBtYXNtLm11bEludDY0eDIocnNkLCBycywgcnNkLCB0ZW1w MSwgdGVtcDIpOworIH0KKysjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKytzdGF0 aWMgdm9pZCBNdWxJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEy OCByc2QsCisrICAgICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wMSwgUmVnVjEyOCB0ZW1w MikgeworKyAgbWFzbS5tdWxJbnQ2NHgyKHJzZCwgcnMsIHJzZCwgdGVtcDEsIHRlbXAyKTsKKyt9 CisgIyAgZW5kaWYKKyAKKyBzdGF0aWMgdm9pZCBNdWxGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFz bSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKK0BAIC05Mzc2LDcgKzkzOTgsOCBAQCBzdGF0 aWMgdm9pZCBEaXZGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEy OCByc2QpIHsKKyAgIG1hc20uZGl2RmxvYXQ2NHgyKHJzZCwgcnMsIHJzZCk7CisgfQorIAorLSMg IGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpCisr IyAgaWYgZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkg fHwgXAorKyAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyBzdGF0aWMgdm9pZCBNaW5G MzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QsCisgICAg ICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wMSwgUmVnVjEyOCB0ZW1wMikgeworICAgbWFz bS5taW5GbG9hdDMyeDQocnNkLCBycywgcnNkLCB0ZW1wMSwgdGVtcDIpOworQEAgLTkzOTcsNiAr OTQyMCwyMiBAQCBzdGF0aWMgdm9pZCBNYXhGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn VjEyOCBycywgUmVnVjEyOCByc2QsCisgICBtYXNtLm1heEZsb2F0NjR4Mihyc2QsIHJzLCByc2Qs IHRlbXAxLCB0ZW1wMik7CisgfQorIAorKyMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK KysvLyBQUEM2NDogdXNlIG5vbi1SaHNEZXN0T3AgY29udmVudGlvbiAoZmlyc3Q9cmhzLCBzZWNv bmQ9bGhzRGVzdCksCisrLy8gbWF0Y2hpbmcgdGhlIHBzZXVkb01pbi9NYXggZnVuY3Rpb24gc2ln bmF0dXJlLgorK3N0YXRpYyB2b2lkIFBNaW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn VjEyOCBycywgUmVnVjEyOCByc2QpIHsKKysgIG1hc20ucHNldWRvTWluRmxvYXQzMng0KHJzLCBy c2QpOworK30KKytzdGF0aWMgdm9pZCBQTWluRjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJl Z1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7CisrICBtYXNtLnBzZXVkb01pbkZsb2F0NjR4Mihycywg cnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgUE1heEYzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBS ZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCkgeworKyAgbWFzbS5wc2V1ZG9NYXhGbG9hdDMyeDQocnMs IHJzZCk7CisrfQorK3N0YXRpYyB2b2lkIFBNYXhGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwg UmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKKysgIG1hc20ucHNldWRvTWF4RmxvYXQ2NHgyKHJz LCByc2QpOworK30KKysjICBlbHNlCisgc3RhdGljIHZvaWQgUE1pbkYzMng0KE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBSZWdWMTI4IHJzZCwgUmVnVjEyOCBycywKKyAgICAgICAgICAgICAgICAgICAg ICAgUmhzRGVzdE9wKSB7CisgICBtYXNtLnBzZXVkb01pbkZsb2F0MzJ4NChyc2QsIHJzKTsKK0BA IC05NDE2LDYgKzk0NTUsNyBAQCBzdGF0aWMgdm9pZCBQTWF4RjY0eDIoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIFJlZ1YxMjggcnNkLCBSZWdWMTI4IHJzLAorICAgICAgICAgICAgICAgICAgICAgICBS aHNEZXN0T3ApIHsKKyAgIG1hc20ucHNldWRvTWF4RmxvYXQ2NHgyKHJzZCwgcnMpOworIH0KKysj ICBlbmRpZgorICMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorIHN0YXRpYyB2b2lk IE1pbkYzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCkg eworICAgbWFzbS5taW5GbG9hdDMyeDQocnMsIHJzZCk7CitAQCAtOTgwNiw2ICs5ODQ2LDY4IEBA IHN0YXRpYyB2b2lkIFNoaWZ0UmlnaHRJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMy IHJzLCBSZWdWMTI4IHJzZCwKKyAgIG1hc20ucmlnaHRTaGlmdEludDY0eDIocnNkLCB0ZW1wLCBy c2QpOworIH0KKyAKKytzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0VUk2NHgyKE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJT aHJVLCBycywgdGVtcCk7CisrICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIocnNkLCB0 ZW1wLCByc2QpOworK30KKysjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysvLyBQ UEM2NDogc2FtZSBhcyBBUk02NCBwYXR0ZXJuIChzaGlmdCBhbW91bnQgaW4gR1BSLCByZXN1bHQg aW4gdmVjdG9yIHJlZykKKytzdGF0aWMgdm9pZCBTaGlmdExlZnRJOHgxNihNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJOHgxNlNo bCwgcnMsIHRlbXApOworKyAgbWFzbS5sZWZ0U2hpZnRJbnQ4eDE2KHJzZCwgdGVtcCwgcnNkKTsK Kyt9Cisrc3RhdGljIHZvaWQgU2hpZnRMZWZ0STE2eDgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJl Z0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMy IHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STE2eDhTaGwsIHJzLCB0ZW1w KTsKKysgIG1hc20ubGVmdFNoaWZ0SW50MTZ4OChyc2QsIHRlbXAsIHJzZCk7CisrfQorK3N0YXRp YyB2b2lkIFNoaWZ0TGVmdEkzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJl Z1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Cisr ICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkzMng0U2hsLCBycywgdGVtcCk7CisrICBtYXNt LmxlZnRTaGlmdEludDMyeDQocnNkLCB0ZW1wLCByc2QpOworK30KKytzdGF0aWMgdm9pZCBTaGlm dExlZnRJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1h c2sobWFzbSwgU2ltZE9wOjpJNjR4MlNobCwgcnMsIHRlbXApOworKyAgbWFzbS5sZWZ0U2hpZnRJ bnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRSaWdodEk4eDE2 KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwg U2ltZE9wOjpJOHgxNlNoclMsIHJzLCB0ZW1wKTsKKysgIG1hc20ucmlnaHRTaGlmdEludDh4MTYo cnNkLCB0ZW1wLCByc2QpOworK30KKytzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0VUk4eDE2KE1hY3Jv QXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRP cDo6STh4MTZTaHJVLCBycywgdGVtcCk7CisrICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDh4 MTYocnNkLCB0ZW1wLCByc2QpOworK30KKytzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0STE2eDgoTWFj cm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1k T3A6OkkxNng4U2hyUywgcnMsIHRlbXApOworKyAgbWFzbS5yaWdodFNoaWZ0SW50MTZ4OChyc2Qs IHRlbXAsIHJzZCk7CisrfQorK3N0YXRpYyB2b2lkIFNoaWZ0UmlnaHRVSTE2eDgoTWFjcm9Bc3Nl bWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJ MTZ4OFNoclUsIHJzLCB0ZW1wKTsKKysgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChy c2QsIHRlbXAsIHJzZCk7CisrfQorK3N0YXRpYyB2b2lkIFNoaWZ0UmlnaHRJMzJ4NChNYWNyb0Fz c2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6 STMyeDRTaHJTLCBycywgdGVtcCk7CisrICBtYXNtLnJpZ2h0U2hpZnRJbnQzMng0KHJzZCwgdGVt cCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRSaWdodFVJMzJ4NChNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ0kzMiB0ZW1wKSB7CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkzMng0 U2hyVSwgcnMsIHRlbXApOworKyAgbWFzbS51bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0KHJzZCwg dGVtcCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRSaWdodEk2NHgyKE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJNjR4 MlNoclMsIHJzLCB0ZW1wKTsKKysgIG1hc20ucmlnaHRTaGlmdEludDY0eDIocnNkLCB0ZW1wLCBy c2QpOworK30KKyBzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0VUk2NHgyKE1hY3JvQXNzZW1ibGVyJiBt YXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnSTMyIHRlbXApIHsKKyAgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaHJV LCBycywgdGVtcCk7CitAQCAtMTAxMDcsNiArMTAyMDksMjMgQEAgc3RhdGljIHZvaWQgQml0bWFz a0kzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQsCisgICBt YXNtLmJpdG1hc2tJbnQzMng0KHJzLCByZCwgdGVtcCk7CisgfQorIAorK3N0YXRpYyB2b2lkIEJp dG1hc2tJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAor KyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXApIHsKKysgIG1hc20uYml0bWFz a0ludDY0eDIocnMsIHJkLCB0ZW1wKTsKKyt9CisrIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCisrc3RhdGljIHZvaWQgQml0bWFza0k4eDE2KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBS ZWdWMTI4IHJzLCBSZWdJMzIgcmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjgg dGVtcCkgeworKyAgbWFzbS5iaXRtYXNrSW50OHgxNihycywgcmQsIHRlbXApOworK30KKytzdGF0 aWMgdm9pZCBCaXRtYXNrSTE2eDgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJl Z0kzMiByZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wKSB7CisrICBt YXNtLmJpdG1hc2tJbnQxNng4KHJzLCByZCwgdGVtcCk7CisrfQorK3N0YXRpYyB2b2lkIEJpdG1h c2tJMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXApIHsKKysgIG1hc20uYml0bWFza0lu dDMyeDQocnMsIHJkLCB0ZW1wKTsKKyt9Cisgc3RhdGljIHZvaWQgQml0bWFza0k2NHgyKE1hY3Jv QXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ1YxMjggdGVtcCkgeworICAgbWFzbS5iaXRtYXNrSW50NjR4MihycywgcmQs IHRlbXApOworQEAgLTEwMTgyLDYgKzEwMzAxLDEzIEBAIHN0YXRpYyB2b2lkIEJpdHNlbGVjdFYx MjgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcmhzLCBSZWdWMTI4IGNvbnRyb2wsCisg ICBtYXNtLmJpdHdpc2VTZWxlY3RTaW1kMTI4KGxoc0Rlc3QsIHJocywgdGVtcCk7CisgICBtYXNt Lm1vdmVTaW1kMTI4KHRlbXAsIGxoc0Rlc3QpOworIH0KKysjICBlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKKytzdGF0aWMgdm9pZCBCaXRzZWxlY3RWMTI4KE1hY3JvQXNzZW1ibGVyJiBt YXNtLCBSZWdWMTI4IHJocywgUmVnVjEyOCBjb250cm9sLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnVjEyOCBsaHNEZXN0LCBSZWdWMTI4IHRlbXApIHsKKysgIG1hc20ubW92ZVNpbWQx MjgoY29udHJvbCwgdGVtcCk7CisrICBtYXNtLmJpdHdpc2VTZWxlY3RTaW1kMTI4KGxoc0Rlc3Qs IHJocywgdGVtcCk7CisrICBtYXNtLm1vdmVTaW1kMTI4KHRlbXAsIGxoc0Rlc3QpOworK30KKyAj ICBlbmRpZgorIAorICMgIGlmZGVmIEVOQUJMRV9XQVNNX1JFTEFYRURfU0lNRAorQEAgLTEwMjU3 LDcgKzEwMzgzLDcgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmVtaXREb3RJOHgxNkk3eDE2QWRkUygp IHsKKyAgIFJlZ1YxMjggcnNkID0gcG9wVjEyOCgpOworICAgUmVnVjEyOCByczAsIHJzMTsKKyAg IHBvcDJ4VjEyOCgmcnMwLCAmcnMxKTsKKy0jICAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkKKysjICAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQorICAgUmVnVjEyOCB0ZW1wID0gbmVlZFYxMjgoKTsKKyAgIG1hc20uZG90SW50 OHgxNkludDd4MTZUaGVuQWRkKHJzMCwgcnMxLCByc2QsIHRlbXApOworICAgZnJlZVYxMjgodGVt cCk7CitAQCAtMTA0NjMsNyArMTA1ODksNyBAQCBib29sIEJhc2VDb21waWxlcjo6ZW1pdFZlY3Rv ckxhbmVTZWxlY3QoKSB7CisgICBmcmVlVjEyOChsaHMpOworICAgZnJlZVYxMjgobWFzayk7Cisg ICBwdXNoVjEyOChyaHNEZXN0KTsKKy0jICAgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0 KQorKyMgICAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKKyAgIFJlZ1YxMjggbWFza0Rlc3QgPSBwb3BWMTI4KCk7CisgICBSZWdWMTI4 IHJocyA9IHBvcFYxMjgoKTsKKyAgIFJlZ1YxMjggbGhzID0gcG9wVjEyOCgpOworQEAgLTEyNjI4 LDcgKzEyNzU0LDcgQEAgYm9vbCBqczo6d2FzbTo6QmFzZWxpbmVQbGF0Zm9ybVN1cHBvcnQoKSB7 CisgI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YODYp IHx8ICAgICAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkgfHwgICAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQorICAgcmV0dXJuIHRydWU7CisgI2Vsc2UKKyAgIHJldHVybiBm YWxzZTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlbkNvbnN0YW50cy5oIGIv anMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaAoraW5kZXggOWMxMGQzMDdhZTZmLi5l MjUzMzJiNTQ2NGUgMTAwNjQ0CistLS0gYS9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlbkNvbnN0YW50 cy5oCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlbkNvbnN0YW50cy5oCitAQCAtNDMsNyAr NDMsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW50ZXJwRmFpbEluc3RhbmNlUmVnID0gMHhi YWQ7CisgLy8gVGhlIGZvbGxvd2luZyB0aHJlc2hvbGRzIHdlcmUgZGVyaXZlZCBmcm9tIGEgbWlj cm9iZW5jaG1hcmsuIElmIHdlIGJlZ2luIHRvCisgLy8gc2hpcCB0aGlzIG9wdGltaXphdGlvbiBm b3IgbW9yZSBwbGF0Zm9ybXMsIHdlIHdpbGwgbmVlZCB0byBleHRlbmQgdGhpcyBsaXN0LgorIAor LSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp CisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgc3RhdGljIGNvbnN0IHVp bnQzMl90IE1heElubGluZU1lbW9yeUNvcHlMZW5ndGggPSA2NDsKKyBzdGF0aWMgY29uc3QgdWlu dDMyX3QgTWF4SW5saW5lTWVtb3J5RmlsbExlbmd0aCA9IDY0OworICNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9YODYpCitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5j cHAgYi9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlblR5cGVzLmNwcAoraW5kZXggOGI5ZjMyNjM5ZWEz Li5lOTA2YzRhZmVjYzMgMTAwNjQ0CistLS0gYS9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlblR5cGVz LmNwcAorKysrIGIvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5jcHAKK0BAIC0xNDQsMTQg KzE0NCwxNSBAQCB2b2lkIFRyYXBTaXRlc0ZvcktpbmQ6OmNoZWNrSW52YXJpYW50cyhjb25zdCB1 aW50OF90KiBjb2RlQmFzZSkgY29uc3QgeworICAgICBsYXN0ID0gcGNPZmZzZXQ7CisgICB9Cisg CistIyAgaWYgKGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9Y ODYpIHx8ICAgXAorLSAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9BUk0pIHx8IFwKKy0gICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpKQorKyMgIGlmIChkZWZpbmVkKEpTX0NPREVH RU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAgICAgICAgXAorKyAgICAgICBk ZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAg ICAgXAorKyAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX01JUFM2NCkgfHwgXAorKyAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpKQor ICAgLy8gQ2hlY2sgdGhhdCBlYWNoIHRyYXBzaXRlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBsYXVz aWJsZSBpbnN0cnVjdGlvbi4gIFRoZQorICAgLy8gcmVxdWlyZWQgaW5zdHJ1Y3Rpb24ga2luZCBk ZXBlbmRzIG9uIHRoZSB0cmFwc2l0ZSBraW5kLgorICAgLy8KKy0gIC8vIE5PVEU6IGN1cnJlbnRs eSBlbmFibGVkIG9uIHg4Nl97MzIsNjR9LCBhcm17MzIsNjR9LCBsb29uZ3NvbjY0IGFuZCBtaXBz NjQuCistICAvLyBJZGVhbGx5IGl0IHNob3VsZCBiZSBleHRlbmRlZCB0byByaXNjdjY0IHRvby4K KysgIC8vIE5PVEU6IGN1cnJlbnRseSBlbmFibGVkIG9uIHg4Nl97MzIsNjR9LCBhcm17MzIsNjR9 LCBsb29uZ3NvbjY0LCBtaXBzNjQsCisrICAvLyBhbmQgcHBjNjQuIElkZWFsbHkgaXQgc2hvdWxk IGJlIGV4dGVuZGVkIHRvIHJpc2N2NjQgdG9vLgorICAgLy8KKyAgIGZvciAodWludDMyX3QgaSA9 IDA7IGkgPCBsZW5ndGgoKTsgaSsrKSB7CisgICAgIHVpbnQzMl90IHBjT2Zmc2V0ID0gcGNPZmZz ZXRzX1tpXTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAgYi9qcy9z cmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAKK2luZGV4IDA1MWM2MGViYWE1NS4uODk0NDdhYTY2OGZm IDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUNvbXBpbGUuY3BwCisrKysgYi9qcy9zcmMv d2FzbS9XYXNtQ29tcGlsZS5jcHAKK0BAIC03MSw4ICs3MSw5IEBAIHVpbnQzMl90IHdhc206Ok9i c2VydmVkQ1BVRmVhdHVyZXMoKSB7CisgICAgIEFSTTY0ID0gMHg2LAorICAgICBMT09ORzY0ID0g MHg3LAorICAgICBSSVNDVjY0ID0gMHg4LAorKyAgICBQUEM2NCA9IDB4OSwKKyAKKy0gICAgTEFT VCA9IFJJU0NWNjQsCisrICAgIExBU1QgPSBQUEM2NCwKKyAgICAgQVJDSF9CSVRTID0gNAorICAg fTsKKyAKK0BAIC0xMDEsNiArMTAyLDkgQEAgdWludDMyX3Qgd2FzbTo6T2JzZXJ2ZWRDUFVGZWF0 dXJlcygpIHsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIE1PWl9BU1NF UlQoaml0OjpHZXRSSVNDVjY0RmxhZ3MoKSA8PSAoVUlOVDMyX01BWCA+PiBBUkNIX0JJVFMpKTsK KyAgIHJldHVybiBSSVNDVjY0IHwgKGppdDo6R2V0UklTQ1Y2NEZsYWdzKCkgPDwgQVJDSF9CSVRT KTsKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBNT1pfQVNTRVJUKGppdDo6 R2V0UFBDNjRGbGFncygpIDw9IChVSU5UMzJfTUFYID4+IEFSQ0hfQklUUykpOworKyAgcmV0dXJu IFBQQzY0IHwgKGppdDo6R2V0UFBDNjRGbGFncygpIDw8IEFSQ0hfQklUUyk7CisgI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX05PTkUpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgICBy ZXR1cm4gMDsKKyAjZWxzZQorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIu Y3BwIGIvanMvc3JjL3dhc20vV2FzbUZyYW1lSXRlci5jcHAKK2luZGV4IGIzYjI2NGJjNjI1YS4u YjU0MGFjZjlhMDVkIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUZyYW1lSXRlci5jcHAK KysrKyBiL2pzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwCitAQCAtNjIyLDYgKzYyMiwxOSBA QCBzdGF0aWMgY29uc3QgdW5zaWduZWQgUHVzaGVkRlAgPSAxNjsKKyBzdGF0aWMgY29uc3QgdW5z aWduZWQgU2V0RlAgPSAyMDsKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgUG9wcGVkRlAgPSA0Owor IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQb3BwZWRGUEppdEVudHJ5ID0gODsKKysjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpCisrLy8gcHVzaFJldHVybkFkZHJlc3MgPSBtZmxyKDQpICsg c3RkdSg0KSA9IDggYnl0ZXMuCisrLy8gcHVzaChGUCkgPSBzdGR1KDQpID0gNCBieXRlcyAoUFBD NjQgc3RkdSBpcyBhIHNpbmdsZSBEUy1mb3JtIGluc3RydWN0aW9uKS4KKysvLyBtb3ZlU3RhY2tQ dHJUbyA9IG1yKDQpID0gNCBieXRlcy4KKytzdGF0aWMgY29uc3QgdW5zaWduZWQgUHVzaGVkUmV0 QWRkciA9IDg7Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIFB1c2hlZEZQID0gMTI7Cisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIFNldEZQID0gMTY7CisrLy8gQ2FsbGFibGUgKyBqaXQtZW50cnkgZXBp bG9ndWVzIGJldHdlZW4gcG9wcGVkRlAgYW5kICpyZXQgYXJlOgorKy8vICAgbXRsciByMDsgYWRk aSBzcCwgc3AsIDE2ICAodHdvIDQtYnl0ZSBpbnN0cnVjdGlvbnMg4oCUIDggYnl0ZXMpLgorKy8v IG10bHIgbXVzdCBjb21lIGJlZm9yZSBhZGRpIHNvIExSIGhvbGRzIHRoZSBjYWxsZXIncyBSQSB0 aHJvdWdob3V0IHRoZQorKy8vIHBvc3QtcG9wcGVkRlAgd2luZG93IChzaW5nbGUtc3RlcCBwcm9m aWxpbmcgZmlyZXMgZXZlcnkgaW5zdHJ1Y3Rpb24pLgorK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQ b3BwZWRGUCA9IDg7Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBvcHBlZEZQSml0RW50cnkgPSA4 OworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f V0FTTTMyKQorIC8vIFN5bnRoZXRpYyB2YWx1ZXMgdG8gc2F0aXNmeSBhc3NlcnRzIGFuZCBhdm9p ZCBjb21waWxlciB3YXJuaW5ncy4KKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgUHVzaGVkUmV0QWRk ciA9IDA7CitAQCAtNzEwLDYgKzcyMywxNyBAQCBzdGF0aWMgdm9pZCBHZW5lcmF0ZUNhbGxhYmxl UHJvbG9ndWUoTWFjcm9Bc3NlbWJsZXImIG1hc20sIHVpbnQzMl90KiBlbnRyeSkgeworICAgICBt YXNtLm1vdmVTdGFja1B0clRvKEZyYW1lUG9pbnRlcik7CisgICAgIE1PWl9BU1NFUlRfSUYoIW1h c20ub29tKCksIFNldEZQID09IG1hc20uY3VycmVudE9mZnNldCgpIC0gKmVudHJ5KTsKKyAgIH0K KysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICB7CisrICAgICplbnRyeSA9IG1h c20uY3VycmVudE9mZnNldCgpOworKworKyAgICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7Cisr ICAgIE1PWl9BU1NFUlRfSUYoIW1hc20ub29tKCksIFB1c2hlZFJldEFkZHIgPT0gbWFzbS5jdXJy ZW50T2Zmc2V0KCkgLSAqZW50cnkpOworKyAgICBtYXNtLnB1c2goRnJhbWVQb2ludGVyKTsKKysg ICAgTU9aX0FTU0VSVF9JRighbWFzbS5vb20oKSwgUHVzaGVkRlAgPT0gbWFzbS5jdXJyZW50T2Zm c2V0KCkgLSAqZW50cnkpOworKyAgICBtYXNtLm1vdmVTdGFja1B0clRvKEZyYW1lUG9pbnRlcik7 CisrICAgIE1PWl9BU1NFUlRfSUYoIW1hc20ub29tKCksIFNldEZQID09IG1hc20uY3VycmVudE9m ZnNldCgpIC0gKmVudHJ5KTsKKysgIH0KKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp CisgICB7CisgICAgIC8vIFdlIGRvIG5vdCB1c2UgdGhlIFBzZXVkb1N0YWNrUG9pbnRlci4gIEhv d2V2ZXIsIHdlIG1heSBiZSBjYWxsZWQgaW4gYQorQEAgLTgwMyw2ICs4MjcsMzggQEAgc3RhdGlj IHZvaWQgR2VuZXJhdGVDYWxsYWJsZUVwaWxvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCB1bnNp Z25lZCBmcmFtZVB1c2hlZCwKKyAgICAgbWFzbS5qYWxyKHplcm8sIHJhLCAwKTsKKyAgICAgbWFz bS5ub3AoKTsKKyAgIH0KKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBM b2FkIFJBIGFuZCBGUCBmcm9tIHRoZSBGcmFtZSB3aGlsZSBpdCdzIHN0aWxsIG9uIHRoZSBzdGFj ay4KKysgIC8vIFVzaW5nIHIwIChqczo6aml0OjpyMCkgZm9yIFJBIGlzIHNhZmU6IGl0J3Mgdm9s YXRpbGUsIHVzZWQgYXMKKysgIC8vIFJUIChub3QgYmFzZSksIGFuZCB3ZSdyZSBpbiBhbiBlcGls b2d1ZSB3aGVyZSBpdCdzIG5vdCBsaXZlLgorKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQ b2ludGVyLCBGcmFtZTo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwKKysgICAgICAgICAgICAgICBq czo6aml0OjpyMCk7CisrICBtYXNtLmxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIEZyYW1l OjpjYWxsZXJGUE9mZnNldCgpKSwgRnJhbWVQb2ludGVyKTsKKysKKysgIC8vIEZlbmNlIHRoZSBw b29sIEJFRk9SRSBjYXB0dXJpbmcgcG9wcGVkRlAuIFBvcHBlZEZQIGlzIGEgc3RhdGljIDgKKysg IC8vIChtdGxyICsgYWRkaSk7IGVudGVyTm9Qb29sIGl0c2VsZiBjYW4gZW1pdCBpbnNlcnROb3BG aWxsKCkgYW5kIGEKKysgIC8vIHByZWVtcHRpdmUgZmluaXNoUG9vbCgpIGF0IGl0cyB0b3AgZWRn ZSwgc28gYW55IGxlYWRpbmcgaW5zZXJ0aW9ucworKyAgLy8gbXVzdCBsYW5kIGJlZm9yZSBwb3Bw ZWRGUCDigJQgbm90IGJldHdlZW4gcG9wcGVkRlAgYW5kICpyZXQuIEEgcG9vbAorKyAgLy8gZmx1 c2ggaW5zaWRlIHRoZSAyLWluc24gd2luZG93IHdvdWxkIG90aGVyd2lzZSBleHRlbmQgKnJldCAt IHBvcHBlZEZQCisrICAvLyBhbmQgdHJpcCB0aGUgcG9zdC1jb25kaXRpb24gYXNzZXJ0aW9uIGJl bG93LiBQOSByb3V0ZXMgRlAgY29uc3RhbnRzCisrICAvLyB0aHJvdWdoIHRoZSBwb29sIHNvIGZs dXNoZXMgYXJlIG1vcmUgZnJlcXVlbnQgdGhhbiBvbiBQOCAodGhlCisrICAvLyBhc3NlcnRpb24g d2FzIGhpc3RvcmljYWxseSBzaWxlbnQgb24gUDggYnV0IHJlcHJvZHVjaWJsZSBvbiBQOSBkYmdv cHQpLgorKyAgbWFzbS5lbnRlck5vUG9vbCgyKTsKKysgIHBvcHBlZEZQID0gbWFzbS5jdXJyZW50 T2Zmc2V0KCk7CisrCisrICAvLyBNb3ZlIFJBIGludG8gTFIgQkVGT1JFIHBvcHBpbmcgdGhlIEZy YW1lLiBJZiB0aGUgb3JkZXIgd2VyZSBhZGRpL210bHIsCisrICAvLyBzaW5nbGUtc3RlcCBwcm9m aWxpbmcgZmlyaW5nIGF0IHRoZSBtdGxyIGluc3RydWN0aW9uIHdvdWxkIHNlZTogc3AKKysgIC8v IGFscmVhZHkgbW92ZWQgKHNvIHNhdmVkIFJBIGF0IHNwWzhdIGlzIGdvbmUpLCBhZGRpIGFscmVh ZHkgZXhlY3V0ZWQsCisrICAvLyBhbmQgTFIgc3RpbGwgaG9sZGluZyB0aGUgYWRkcmVzcyByaWdo dCBhZnRlciB0aGUgZnVuY3Rpb24ncyBsYXN0IGBibGAKKysgIC8vIChpLmUuIGluc2lkZSB0aGlz IGZ1bmN0aW9uLCBub3QgdGhlIGNhbGxlcidzIFJBKS4gV2l0aCBtdGxyIGZpcnN0LAorKyAgLy8g dGhlIGVudGlyZSBwb3N0LXBvcHBlZEZQIHdpbmRvdyBoYXMgTFIgPT0gY2FsbGVyJ3MgUkEgYXZh aWxhYmxlCisrICAvLyBlaXRoZXIgdmlhIHNwWzhdIChwcmUtYWRkaSkgb3IgcmVnaXN0ZXJzLmxy IChwb3N0LW10bHIpLgorKyAgbWFzbS54c19tdGxyKGpzOjpqaXQ6OnIwKTsKKysgIG1hc20uYWRk VG9TdGFja1B0cihJbW0zMihzaXplb2YoRnJhbWUpKSk7CisrICAqcmV0ID0gbWFzbS5jdXJyZW50 T2Zmc2V0KCk7CisrICBtYXNtLmxlYXZlTm9Qb29sKCk7CisrICBtYXNtLmFzX2JscigpOworKwor ICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKyAKKyAgIC8vIFNlZSBjb21tZW50IGF0 IGVxdWl2YWxlbnQgcGxhY2UgaW4gfEdlbmVyYXRlQ2FsbGFibGVQcm9sb2d1ZXwgYWJvdmUuCitA QCAtMTQ4Myw2ICsxNTM5LDkgQEAgdm9pZCB3YXNtOjpHZW5lcmF0ZUppdEVudHJ5UHJvbG9ndWUo TWFjcm9Bc3NlbWJsZXImIG1hc20sCisgICAgIEJsb2NrVHJhbXBvbGluZVBvb2xTY29wZSBibG9j a190cmFtcG9saW5lX3Bvb2woJm1hc20sIDEwKTsKKyAgICAgb2Zmc2V0cy0+YmVnaW4gPSBtYXNt LmN1cnJlbnRPZmZzZXQoKTsKKyAgICAgbWFzbS5wdXNoKHJhKTsKKysjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisrICAgIG9mZnNldHMtPmJlZ2luID0gbWFzbS5jdXJyZW50T2Zmc2V0 KCk7CisrICAgIG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKKyAjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fQVJNNjQpCisgICAgIHsKKyAgICAgICBBdXRvRm9yYmlkUG9vbHNBbmROb3BzIGFmcCgm bWFzbSwKK0BAIC0xNTM2LDYgKzE1OTUsMjAgQEAgdm9pZCB3YXNtOjpHZW5lcmF0ZUppdEVudHJ5 RXBpbG9ndWUoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisgICAgIG1hc20uUmV0KEFSTVJlZ2lzdGVy KGxyLCA2NCkpOworICAgICBtYXNtLnNldEZyYW1lUHVzaGVkKDApOworICAgfQorKyNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8vIExvYWQgUkEgYW5kIEZQIGZyb20gdGhlIGZy YW1lIHdoaWxlIGl0J3Mgc3RpbGwgb24gdGhlIHN0YWNrLCB0aGVuCisrICAvLyByZXN0b3JlIExS LCBwb3AgdGhlIGZyYW1lLCBhbmQgcmV0dXJuLiBtdGxyIG11c3QgcHJlY2VkZSBhZGRpIHNvIExS CisrICAvLyBob2xkcyB0aGUgY2FsbGVyJ3MgUkEgYWNyb3NzIHRoZSB3aG9sZSBwb3N0LXBvcHBl ZEZQIHdpbmRvdyAoc2VlCisrICAvLyBHZW5lcmF0ZUNhbGxhYmxlRXBpbG9ndWUgZm9yIHRoZSBt YXRjaGluZyByYXRpb25hbGUpLgorKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVy LCBGcmFtZTo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwKKysgICAgICAgICAgICAgICBqczo6aml0 OjpyMCk7CisrICBtYXNtLmxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIEZyYW1lOjpjYWxs ZXJGUE9mZnNldCgpKSwgRnJhbWVQb2ludGVyKTsKKysgIHBvcHBlZEZQID0gbWFzbS5jdXJyZW50 T2Zmc2V0KCk7CisrCisrICBtYXNtLnhzX210bHIoanM6OmppdDo6cjApOworKyAgbWFzbS5hZGRU b1N0YWNrUHRyKEltbTMyKHNpemVvZihGcmFtZSkpKTsKKysgIG9mZnNldHMtPnJldCA9IG1hc20u Y3VycmVudE9mZnNldCgpOworKyAgbWFzbS5hc19ibHIoKTsKKyAjZWxzZQorICAgLy8gRm9yYmlk IHBvb2xzIGZvciB0aGUgc2FtZSByZWFzb24gYXMgZGVzY3JpYmVkIGluIEdlbmVyYXRlQ2FsbGFi bGVQcm9sb2d1ZS4KKyAjICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKQorQEAgLTE5MDUsNiAr MTk3OCwyMiBAQCBib29sIGpzOjp3YXNtOjpTdGFydFVud2luZGluZyhjb25zdCBSZWdpc3RlclN0 YXRlJiByZWdpc3RlcnMsCisgICAgICAgICBmaXhlZEZQID0gZnA7CisgICAgICAgICBBc3NlcnRN YXRjaGVzQ2FsbFNpdGUoZml4ZWRQQywgZml4ZWRGUCk7CisgICAgICAgfSBlbHNlCisrI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgICAgIGlmIChjb2RlUmFuZ2UtPmlzVGh1bmso KSkgeworKyAgICAgICAgLy8gVGhlIEZhckp1bXBJc2xhbmQgc2VxdWVuY2UgdGVtcG9yYXJ5IHNj cmFtYmxlcyB0aGUgbGluayByZWdpc3Rlci4KKysgICAgICAgIGZpeGVkUEMgPSBwYzsKKysgICAg ICAgIGZpeGVkRlAgPSBmcDsKKysgICAgICAgICp1bndvdW5kQ2FsbGVyID0gZmFsc2U7CisrICAg ICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoCisrICAgICAgICAgICAgRnJhbWU6OmZyb21VbnRh Z2dlZFdhc21FeGl0RlAoZnApLT5yZXR1cm5BZGRyZXNzKCksCisrICAgICAgICAgICAgRnJhbWU6 OmZyb21VbnRhZ2dlZFdhc21FeGl0RlAoZnApLT5yYXdDYWxsZXIoKSk7CisrICAgICAgfSBlbHNl IGlmIChvZmZzZXRGcm9tRW50cnkgPCBQdXNoZWRGUCkgeworKyAgICAgICAgLy8gT24gUFBDNjQg dGhlIHJldHVybiBhZGRyZXNzIGlzIGluIExSIChyZWdpc3RlcnMubHIpIHVudGlsCisrICAgICAg ICAvLyBwdXNoUmV0dXJuQWRkcmVzcygpIHNhdmVzIGl0IHRvIHRoZSBzdGFjay4KKysgICAgICAg IGZpeGVkUEMgPSAodWludDhfdCopcmVnaXN0ZXJzLmxyOworKyAgICAgICAgZml4ZWRGUCA9IGZw OworKyAgICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVkUEMsIGZpeGVkRlApOworKyAg ICAgIH0gZWxzZQorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKyAgICAgICBpZiAo b2Zmc2V0RnJvbUVudHJ5IDwgU2V0RlAgfHwgY29kZVJhbmdlLT5pc1RodW5rKCkpIHsKKyAgICAg ICAgIC8vIE9uIEFSTTY0IHdlIHJlbHkgb24gcmVnaXN0ZXIgc3RhdGUgaW5zdGVhZCBvZiBzdGF0 ZSBzYXZlZCBvbgorQEAgLTE5NTYsNiArMjA0NSwzNSBAQCBib29sIGpzOjp3YXNtOjpTdGFydFVu d2luZGluZyhjb25zdCBSZWdpc3RlclN0YXRlJiByZWdpc3RlcnMsCisgICAgICAgICBmaXhlZFBD ID0gRnJhbWU6OmZyb21VbnRhZ2dlZFdhc21FeGl0RlAoc3ApLT5yZXR1cm5BZGRyZXNzKCk7Cisg ICAgICAgICBmaXhlZEZQID0gZnA7CisgICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoZml4 ZWRQQywgZml4ZWRGUCk7CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgICAg IH0gZWxzZSBpZiAob2Zmc2V0SW5Db2RlID49IGNvZGVSYW5nZS0+cmV0KCkgLSBQb3BwZWRGUCAm JgorKyAgICAgICAgICAgICAgICAgb2Zmc2V0SW5Db2RlIDwgY29kZVJhbmdlLT5yZXQoKSkgewor KyAgICAgICAgLy8gUFBDNjQgZXBpbG9ndWUgKFJBIGxvYWRlZCBpbnRvIHIwLCBGUCByZXN0b3Jl ZCwgUkEgbm90IHlldAorKyAgICAgICAgLy8gbW92ZWQgdG8gTFIsIFNQIG5vdCB5ZXQgYWRqdXN0 ZWQpOgorKyAgICAgICAgLy8gICBsZCByMCwgOChzcCkgICAgICA7IHJlc3RvcmUgY2FsbGVyJ3Mg UkEgaW50byByMAorKyAgICAgICAgLy8gICBsZCBGUCwgMChzcCkgICAgICA7IHJlc3RvcmUgY2Fs bGVyJ3MgRlAKKysgICAgICAgIC8vICAgPC0tIHBvcHBlZEZQIC0tPgorKyAgICAgICAgLy8gICBt dGxyIHIwICAgICAgICAgICA7IExSIDo9IGNhbGxlcidzIFJBCisrICAgICAgICAvLyAgIGFkZGkg c3AsIHNwLCAxNiAgIDsgcG9wIHRoZSBGcmFtZQorKyAgICAgICAgLy8gICA8LS0gcmV0IC0tPgor KyAgICAgICAgLy8gICBibHIKKysgICAgICAgIC8vIEluIHRoZSBbcG9wcGVkRlAsIHJldCkgd2lu ZG93IHRoZSBhZGRpIGhhcyBub3QgcnVuLCBzbyAqc3AKKysgICAgICAgIC8vIGlzIHN0aWxsIHRo ZSBzYXZlZCBGcmFtZSBhbmQgc3BbOF0gaXMgdGhlIGNhbGxlcidzIFJBLgorKyAgICAgICAgLy8g KHJlZ2lzdGVycy5sciB3b3VsZCBhbHNvIGJlIGNvcnJlY3QgYWZ0ZXIgbXRsciBleGVjdXRlcywg YnV0CisrICAgICAgICAvLyBzcFs4XSBpcyB2YWxpZCB0aHJvdWdob3V0IHRoaXMgd2luZG93IOKA lCBpbmNsdWRpbmcgYmVmb3JlIG10bHIg4oCUCisrICAgICAgICAvLyBzbyB3ZSByZWFkIGl0IGNv bnNpc3RlbnRseS4pCisrICAgICAgICBNT1pfQVNTRVJUKCpzcCA9PSBmcCk7CisrICAgICAgICBm aXhlZFBDID0gRnJhbWU6OmZyb21VbnRhZ2dlZFdhc21FeGl0RlAoc3ApLT5yZXR1cm5BZGRyZXNz KCk7CisrICAgICAgICBmaXhlZEZQID0gZnA7CisrICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNp dGUoZml4ZWRQQywgZml4ZWRGUCk7CisrICAgICAgfSBlbHNlIGlmIChvZmZzZXRJbkNvZGUgPT0g Y29kZVJhbmdlLT5yZXQoKSkgeworKyAgICAgICAgLy8gUFBDNjQgZXBpbG9ndWUsIGF0IHRoZSBi bHI6IGFkZGkgaGFzIHJ1biwgc28gU1AgaXMgdGhlCisrICAgICAgICAvLyBjYWxsZXIncyBhbmQg KnNwIGlzIHVucmVsYXRlZCBtZW1vcnkuIG10bHIgcmFuIGVhcmxpZXIgaW4KKysgICAgICAgIC8v IHRoZSBbcG9wcGVkRlAsIHJldCkgd2luZG93LCBzbyBMUiBob2xkcyB0aGUgY2FsbGVyJ3MgUkEu CisrICAgICAgICAvLyBmcCBob2xkcyB0aGUgcmVzdG9yZWQgY2FsbGVyJ3MgRlAuCisrICAgICAg ICBmaXhlZFBDID0gKHVpbnQ4X3QqKXJlZ2lzdGVycy5scjsKKysgICAgICAgIGZpeGVkRlAgPSBm cDsKKysgICAgICAgIEFzc2VydE1hdGNoZXNDYWxsU2l0ZShmaXhlZFBDLCBmaXhlZEZQKTsKKyAj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09O RzY0KQorICAgICAgICAgLy8gVGhlIHN0YWNrIHBvaW50ZXIgZG9lcyBub3QgbW92ZSB1bnRpbCBh bGwgdmFsdWVzIGhhdmUKKyAgICAgICAgIC8vIGJlZW4gcmVzdG9yZWQgc28gc2V2ZXJhbCBjYXNl cyBjYW4gYmUgY29hbGVzY2VkIGhlcmUuCitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUdD LmNwcCBiL2pzL3NyYy93YXNtL1dhc21HQy5jcHAKK2luZGV4IGU1OWNkNGY1YWJhMC4uMjFjZDAx ZmQxYzVlIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUdDLmNwcAorKysrIGIvanMvc3Jj L3dhc20vV2FzbUdDLmNwcAorQEAgLTQ0NCw2ICs0NDQsMTQgQEAgYm9vbCB3YXNtOjpJc1BsYXVz aWJsZVN0YWNrTWFwS2V5KGNvbnN0IHVpbnQ4X3QqIG5leHRQQykgeworICAgICAgICAgICAgIGlu c25bLTFdID09IDB4MDAwMDAwMTMgLyogYWRkaSB6ZXJvLCB6ZXJvLCAwICovKSB8fCAgLy8gamFs OyBub3AKKyAgICAgICAgICAgIChpbnNuWy0xXSA9PSAweDAwMTAwMDczICYmCisgICAgICAgICAg ICAgKGluc25bLTJdICYga0lUeXBlTWFzaykgPT0gUk9fQ1NSUldJKSkpOyAgLy8gd2FzbSB0cmFw CisrIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBjb25zdCB1aW50MzJfdCog aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihuZXh0UEMpOworKyAgTU9a X0FTU0VSVCgodWludHB0cl90KGluc24pICYgMykgPT0gMCk7CisrICAvLyB4c190cmFwKCkgPSB0 dyAzMSxyMCxyMCAoUFBDX3RyYXApOyBiY3RybCA9IFBQQ19iY3RyfDE7IGJsID0gSS1mb3JtCisr ICAvLyBvcGNvZGUgMTggKFBQQ19iKSB3aXRoIExLPTEsIEFBPTAsIGNoZWNrZWQgdmlhIDB4RkMw MDAwMDMgbWFzay4KKysgIHJldHVybiBpbnNuWy0xXSA9PSB1aW50MzJfdChQUENfdHJhcCkgfHwK KysgICAgICAgICBpbnNuWy0xXSA9PSAodWludDMyX3QoUFBDX2JjdHIpIHwgMXUpIHx8CisrICAg ICAgICAgKGluc25bLTFdICYgMHhGQzAwMDAwM3UpID09ICh1aW50MzJfdChQUENfYikgfCAxdSk7 CisgIyAgZWxzZQorICAgTU9aX0NSQVNIKCJJc1ZhbGlkU3RhY2tNYXBLZXk6IHJlcXVpcmVzIGlt cGxlbWVudGF0aW9uIG9uIHRoaXMgcGxhdGZvcm0iKTsKKyAjICBlbmRpZgorZGlmZiAtLWdpdCBh L2pzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwIGIvanMvc3JjL3dhc20vV2FzbUdlbmVyYXRv ci5jcHAKK2luZGV4IDJkYWZhYzczZTk2YS4uMDdmZmUxNTBmYzU3IDEwMDY0NAorLS0tIGEvanMv c3JjL3dhc20vV2FzbUdlbmVyYXRvci5jcHAKKysrKyBiL2pzL3NyYy93YXNtL1dhc21HZW5lcmF0 b3IuY3BwCitAQCAtOTMwLDcgKzkzMCwyMyBAQCBib29sIE1vZHVsZUdlbmVyYXRvcjo6ZmluaXNo Q29kZUJsb2NrKENvZGVCbG9ja1Jlc3VsdCogcmVzdWx0KSB7CisgICBjYWxsU2l0ZVRhcmdldHNf LmNsZWFyKCk7CisgICBjYWxsRmFySnVtcHNfLmNsZWFyKCk7CisgCistICAvLyBOb25lIG9mIHRo ZSBsaW5raW5nIG9yIGZhci1qdW1wIG9wZXJhdGlvbnMgc2hvdWxkIGVtaXQgbWFzbSBtZXRhZGF0 YS4KKysgIC8vIE5vbmUgb2YgdGhlIGxpbmtpbmcgb3IgZmFyLWp1bXAgb3BlcmF0aW9ucyBzaG91 bGQgZW1pdCBtYXNtIG1ldGFkYXRhLAorKyAgLy8gZXhjZXB0IG9uIFBQQzY0IHdoZXJlIHBhdGNo RmFySnVtcCB1c2VzIGFkZExvbmdKdW1wIHRvIGNyZWF0ZSBDb2RlTGFiZWxzCisrICAvLyBmb3Ig YWJzb2x1dGUtYWRkcmVzcyBmYXIganVtcHMuIERyYWluIHRob3NlIGludG8gbGlua0RhdGFfIGhl cmUuCisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKKysgIGZvciAoY29uc3Qgaml0OjpDb2RlTGFi ZWwmIGNvZGVMYWJlbCA6IG1hc21fLT5jb2RlTGFiZWxzKCkpIHsKKysgICAgTGlua0RhdGE6Oklu dGVybmFsTGluayBsaW5rOworKyAgICBsaW5rLnBhdGNoQXRPZmZzZXQgPSBjb2RlTGFiZWwucGF0 Y2hBdCgpLm9mZnNldCgpOworKyAgICBsaW5rLnRhcmdldE9mZnNldCA9IGNvZGVMYWJlbC50YXJn ZXQoKS5vZmZzZXQoKTsKKysjICBpZmRlZiBKU19DT0RFTEFCRUxfTElOS01PREUKKysgICAgbGlu ay5tb2RlID0gY29kZUxhYmVsLmxpbmtNb2RlKCk7CisrIyAgZW5kaWYKKysgICAgaWYgKCFsaW5r RGF0YV8tPmludGVybmFsTGlua3MuYXBwZW5kKGxpbmspKSB7CisrICAgICAgcmV0dXJuIGZhbHNl OworKyAgICB9CisrICB9CisrICBtYXNtXy0+Y29kZUxhYmVscygpLmNsZWFyKCk7CisrI2VuZGlm CisgCisgICBNT1pfQVNTRVJUKG1hc21fLT5pbmxpbmluZ0NvbnRleHQoKS5lbXB0eSgpKTsKKyAg IE1PWl9BU1NFUlQobWFzbV8tPmNhbGxTaXRlcygpLmVtcHR5KCkpOworZGlmZiAtLWdpdCBhL2pz L3NyYy93YXNtL1dhc21Jb25Db21waWxlLmNwcCBiL2pzL3NyYy93YXNtL1dhc21Jb25Db21waWxl LmNwcAoraW5kZXggOWM3OWI5Y2YwNzA0Li4wZDBlNjYxNzcwYWYgMTAwNjQ0CistLS0gYS9qcy9z cmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAKKysrKyBiL2pzL3NyYy93YXNtL1dhc21Jb25Db21w aWxlLmNwcAorQEAgLTExNjAyLDcgKzExNjAyLDcgQEAgYm9vbCBqczo6d2FzbTo6SW9uUGxhdGZv cm1TdXBwb3J0KCkgeworICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fWDg2KSB8fCAgICAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAgIFwKKyAgICAgZGVmaW5lZChKU19DT0RF R0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIHJldHVybiB0cnVlOworICNlbHNlCisg ICByZXR1cm4gZmFsc2U7CitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAg Yi9qcy9zcmMvd2FzbS9XYXNtTWVtb3J5LmNwcAoraW5kZXggMGUzZTZkMzUwOWFkLi5mZWVlOWY2 ZWExYzkgMTAwNjQ0CistLS0gYS9qcy9zcmMvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysrIGIvanMv c3JjL3dhc20vV2FzbU1lbW9yeS5jcHAKK0BAIC0yODgsOSArMjg4LDkgQEAgc3RhdGljX2Fzc2Vy dChNYXhNZW1vcnlBY2Nlc3NTaXplIDw9IEh1Z2VVbmFsaWduZWRHdWFyZFBhZ2UsCisgc3RhdGlj X2Fzc2VydChIdWdlT2Zmc2V0R3VhcmRMaW1pdCA8IFVJTlQzMl9NQVgsCisgICAgICAgICAgICAg ICAiY2hlY2tpbmcgZm9yIG92ZXJmbG93IGFnYWluc3QgT2Zmc2V0R3VhcmRMaW1pdCBpcyBlbm91 Z2guIik7CisgCistLy8gV2UgaGF2ZSBvbmx5IHRlc3RlZCBodWdlIG1lbW9yeSBvbiB4NjQsIGFy bTY0IGFuZCByaXNjdjY0LgorKy8vIFdlIGhhdmUgb25seSB0ZXN0ZWQgaHVnZSBtZW1vcnkgb24g eDY0LCBhcm02NCwgcmlzY3Y2NCBhbmQgcHBjNjQuCisgIyAgaWYgIShkZWZpbmVkKEpTX0NPREVH RU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IFwKKy0gICAgICAgIGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSkKKysgICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpKQorICMgICAgZXJyb3IgIk5vdCBhbiBl eHBlY3RlZCBjb25maWd1cmF0aW9uIgorICMgIGVuZGlmCisgCitkaWZmIC0tZ2l0IGEvanMvc3Jj L3dhc20vV2FzbVNpZ25hbEhhbmRsZXJzLmNwcCBiL2pzL3NyYy93YXNtL1dhc21TaWduYWxIYW5k bGVycy5jcHAKK2luZGV4IGNjOGJjMjc1NTc0NS4uODRkM2M0ZWMxNjRkIDEwMDY0NAorLS0tIGEv anMvc3JjL3dhc20vV2FzbVNpZ25hbEhhbmRsZXJzLmNwcAorKysrIGIvanMvc3JjL3dhc20vV2Fz bVNpZ25hbEhhbmRsZXJzLmNwcAorQEAgLTExMSw3ICsxMTEsOSBAQCB1c2luZyBuYW1lc3BhY2Ug anM6Ondhc207CisgIyAgICBpZiBkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX1BQQzY0 X18pIHx8IGRlZmluZWQoX19wcGM2NGxlX18pIHx8IFwKKyAgICAgICAgIGRlZmluZWQoX19QUEM2 NExFX18pCisgIyAgICAgIGRlZmluZSBSMDFfc2lnKHApICgocCktPnNjX2ZyYW1lLmZpeHJlZ1sx XSkKKysjICAgICAgZGVmaW5lIFIzMV9zaWcocCkgKChwKS0+c2NfZnJhbWUuZml4cmVnWzMxXSkK KyAjICAgICAgZGVmaW5lIFIzMl9zaWcocCkgKChwKS0+c2NfZnJhbWUuc3JyMCkKKysjICAgICAg ZGVmaW5lIFIzNl9zaWcocCkgKChwKS0+c2NfZnJhbWUubHIpCisgIyAgICBlbmRpZgorICMgIGVs aWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19zdW4pCisgIyAgICBpZiBkZWZpbmVk KF9fbGludXhfXykKK0BAIC0xNTcsNyArMTU5LDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNt OworICMgICAgaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIChkZWZpbmVkKF9fcHBjNjRfXykgfHwg ZGVmaW5lZChfX1BQQzY0X18pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVmaW5lZChfX3BwYzY0bGVfXykgfHwgZGVmaW5lZChfX1BQQzY0TEVfXykpCisgIyAgICAgIGRl ZmluZSBSMDFfc2lnKHApICgocCktPnVjX21jb250ZXh0LmdwX3JlZ3NbMV0pCisrIyAgICAgIGRl ZmluZSBSMzFfc2lnKHApICgocCktPnVjX21jb250ZXh0LmdwX3JlZ3NbMzFdKQorICMgICAgICBk ZWZpbmUgUjMyX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5ncF9yZWdzWzMyXSkKKysjICAgICAg ZGVmaW5lIFIzNl9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuZ3BfcmVnc1szNl0pCisgIyAgICBl bmRpZgorICMgICAgaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19sb29uZ2FyY2hf XykKKyAjICAgICAgZGVmaW5lIEVQQ19zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19wYykKK0BA IC0yMDAsNyArMjA0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNtOworICMgICAgaWYgZGVm aW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRs ZV9fKSB8fCBcCisgICAgICAgICBkZWZpbmVkKF9fUFBDNjRMRV9fKQorICMgICAgICBkZWZpbmUg UjAxX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5fX2dyZWdzW19SRUdfUjFdKQorKyMgICAgICBk ZWZpbmUgUjMxX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5fX2dyZWdzW19SRUdfUjMxXSkKKyAj ICAgICAgZGVmaW5lIFIzMl9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tfUkVHX1BD XSkKKysjICAgICAgZGVmaW5lIFIzNl9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tf UkVHX0xSXSkKKyAjICAgIGVuZGlmCisgIyAgZWxpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8 IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IFwKKyAgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9rZXJu ZWxfXykKK0BAIC0yMzQsNyArMjQwLDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNtOworICMg ICAgaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgKGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZp bmVkKF9fUFBDNjRfXykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl ZmluZWQoX19wcGM2NGxlX18pIHx8IGRlZmluZWQoX19QUEM2NExFX18pKQorICMgICAgICBkZWZp bmUgUjAxX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5tY19ncHJbMV0pCisrIyAgICAgIGRlZmlu ZSBSMzFfc2lnKHApICgocCktPnVjX21jb250ZXh0Lm1jX2dwclszMV0pCisgIyAgICAgIGRlZmlu ZSBSMzJfc2lnKHApICgocCktPnVjX21jb250ZXh0Lm1jX3NycjApCisrIyAgICAgIGRlZmluZSBS MzZfc2lnKHApICgocCktPnVjX21jb250ZXh0Lm1jX2xyKQorICMgICAgZW5kaWYKKyAjICBlbGlm IGRlZmluZWQoWFBfREFSV0lOKQorICMgICAgZGVmaW5lIEVJUF9zaWcocCkgKChwKS0+dGhyZWFk LnV0cy50czMyLl9fZWlwKQorQEAgLTQxMiw3ICs0MjAsOCBAQCBzdHJ1Y3QgbWFjb3NfYWFyY2g2 NF9jb250ZXh0IHsKKyAgICAgICBkZWZpbmVkKF9fUFBDNjRMRV9fKQorICMgICAgZGVmaW5lIFBD X3NpZyhwKSBSMzJfc2lnKHApCisgIyAgICBkZWZpbmUgU1Bfc2lnKHApIFIwMV9zaWcocCkKKy0j ICAgIGRlZmluZSBGUF9zaWcocCkgUjAxX3NpZyhwKQorKyMgICAgZGVmaW5lIEZQX3NpZyhwKSBS MzFfc2lnKHApCisrIyAgICBkZWZpbmUgTFJfc2lnKHApIFIzNl9zaWcocCkKKyAjICBlbGlmIGRl ZmluZWQoX19sb29uZ2FyY2hfXykKKyAjICAgIGRlZmluZSBQQ19zaWcocCkgRVBDX3NpZyhwKQor ICMgICAgZGVmaW5lIEZQX3NpZyhwKSBSRlBfc2lnKHApCitAQCAtNDU4LDcgKzQ2Nyw4IEBAIHN0 YXRpYyB1aW50OF90KiBDb250ZXh0VG9TUChDT05URVhUKiBjb250ZXh0KSB7CisgfQorIAorICMg IGlmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgZGVmaW5lZChf X21pcHNfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChf X3Jpc2N2KQorKyAgICAgIGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChfX3Jpc2N2 KSB8fCBcCisrICAgICAgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKQor IHN0YXRpYyB1aW50OF90KiBDb250ZXh0VG9MUihDT05URVhUKiBjb250ZXh0KSB7CisgIyAgICBp ZmRlZiBMUl9zaWcKKyAgIHJldHVybiBtb3ppbGxhOjpCaXR3aXNlQ2FzdDx1aW50OF90Kj4oTFJf c2lnKGNvbnRleHQpKTsKK0BAIC00NzUsNyArNDg1LDggQEAgc3RhdGljIEpTOjpQcm9maWxpbmdG cmFtZUl0ZXJhdG9yOjpSZWdpc3RlclN0YXRlIFRvUmVnaXN0ZXJTdGF0ZSgKKyAgIHN0YXRlLnBj ID0gQ29udGV4dFRvUEMoY29udGV4dCk7CisgICBzdGF0ZS5zcCA9IENvbnRleHRUb1NQKGNvbnRl eHQpOworICMgIGlmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwg ZGVmaW5lZChfX21pcHNfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwg ZGVmaW5lZChfX3Jpc2N2KQorKyAgICAgIGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5l ZChfX3Jpc2N2KSB8fCBcCisrICAgICAgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19Q UEM2NF9fKQorICAgc3RhdGUubHIgPSBDb250ZXh0VG9MUihjb250ZXh0KTsKKyAjICBlbHNlCisg ICBzdGF0ZS5sciA9ICh2b2lkKilVSU5UUFRSX01BWDsKK0BAIC03NzYsNiArNzg3LDkgQEAgc3Rh dGljIHZvaWQgTWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKSB7CisgCisgIyAgICBpZiBkZWZp bmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fbG9vbmdhcmNoX18pCisgc3RhdGljIGNvbnN0IHVp bnQzMl90IGtXYXNtVHJhcFNpZ25hbCA9IFNJR0ZQRTsKKysjICAgIGVsaWYgZGVmaW5lZChfX3Bw YzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKSB8fCBcIAorKyAgICAgICAgICBkZWZpbmVkKF9f cHBjNjRsZV9fKSB8fCBkZWZpbmVkKF9fUFBDNjRMRV9fKQorK3N0YXRpYyBjb25zdCB1aW50MzJf dCBrV2FzbVRyYXBTaWduYWwgPSBTSUdUUkFQOworICMgICAgZWxzZQorIHN0YXRpYyBjb25zdCB1 aW50MzJfdCBrV2FzbVRyYXBTaWduYWwgPSBTSUdJTEw7CisgIyAgICBlbmRpZgorZGlmZiAtLWdp dCBhL2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwIGIvanMvc3JjL3dhc20vV2FzbVN0YWNrcy5j cHAKK2luZGV4IDcxNDk3MzUzYzVjMS4uNjUxNGQ4YjBlMmU0IDEwMDY0NAorLS0tIGEvanMvc3Jj L3dhc20vV2FzbVN0YWNrcy5jcHAKKysrKyBiL2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwCitA QCAtNDI2LDYgKzQyNiwzMCBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBDb250U3RhY2tNYXhK aXRTdGFja1NpemUgPSAxMCAqIDEwMjQgKiAxMDI0OworIC8vIG9yIHN0YWNrIHNuYXBzaG90cyB1 dGlsaXRpZXMuCisgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQ29udFN0YWNrUmVkWm9uZVNpemUg PSAweDgwMDA7CisgCisrLy8gRWZmZWN0aXZlIHJlZC16b25lIHNpemUgdXNlZCB3aGVuIGxheWlu ZyBvdXQgYSBjb250aW51YXRpb24gc3RhY2suCisrLy8KKysvLyBUaGUgaml0IHN0YWNrIChhbmQg dGhlcmVmb3JlIHRoZSBib3R0b20gZ3VhcmQgcGFnZSkgbXVzdCBzdGFydCBvbiBhIHBhZ2UKKysv LyBib3VuZGFyeTsgb3RoZXJ3aXNlIGdjOjpQcm90ZWN0UGFnZXMgdHJpcHMgTU9aX1JFTEVBU0Vf QVNTRVJUKGxlbmd0aCAlCisrLy8gcGFnZVNpemUgPT0gMCkuIFRoZSByZWQgem9uZSBzaXRzIGJl dHdlZW4gdGhlIHRvcCBndWFyZCBwYWdlIGFuZCB0aGUgaml0CisrLy8gc3RhY2ssIHNvIGl0cyBz aXplIGhhcyB0byBiZSBhIHBhZ2UgbXVsdGlwbGUgdG8ga2VlcCB0aGF0IHN0YXJ0IGFsaWduZWQu CisrLy8KKysvLyBSb3VuZGluZyB0aGUgcmVkIHpvbmUgdXAgdG8gYSBwYWdlIGlzIGNvcnJlY3Qg b24gZXZlcnkgcGxhdGZvcm0gYW5kIHdvdWxkCisrLy8gYWxzbyBjb3ZlciBhbnkgY29uZmlndXJh dGlvbiB3aG9zZSBwYWdlIHNpemUgZXhjZWVkcyBDb250U3RhY2tSZWRab25lU2l6ZQorKy8vICgz MkspIC0tIGUuZy4gYSA2NEstcGFnZSBBQXJjaDY0IGtlcm5lbCAtLSBidXQgQ29udFN0YWNrUmVk Wm9uZVNpemUgaXMKKysvLyBhbHJlYWR5IGEgbXVsdGlwbGUgb2YgdGhlIDRLLzE2SyBwYWdlcyB1 c2VkIG9uIHRoZSB0aWVyLTEgcGxhdGZvcm1zLCBzbyB0aGUKKysvLyByb3VuZC11cCBpcyBhIG5v LW9wIHRoZXJlIHRvZGF5LiBXZSBkZWxpYmVyYXRlbHkgZ2F0ZSBpdCB0byBQUEM2NCAoNjRLCisr Ly8gcGFnZXMsIHdoZXJlIHRoZSByb3VuZC11cCBpcyBsb2FkLWJlYXJpbmcpIHNvIHRoaXMgcGF0 Y2ggY2Fubm90IGFsdGVyCisrLy8gY29udGludWF0aW9uIHN0YWNrIGxheW91dCBvbiBhbnkgdGll ci0xIHBsYXRmb3JtLiBEcm9wIHRoZSBnYXRlIGlmIHRoZQorKy8vIGdlbmVyYWwgY2FzZSBpcyBl dmVyIHdhbnRlZC4KKytzdGF0aWMgaW5saW5lIHNpemVfdCBDb250U3RhY2tFZmZlY3RpdmVSZWRa b25lU2l6ZSgKKysgICAgW1ttYXliZV91bnVzZWRdXSBzaXplX3QgcGFnZVNpemUpIHsKKysjaWZk ZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgcmV0dXJuIFJvdW5kVXAoQ29udFN0YWNrUmVkWm9uZVNp emUsIHBhZ2VTaXplKTsKKysjZWxzZQorKyAgcmV0dXJuIENvbnRTdGFja1JlZFpvbmVTaXplOwor KyNlbmRpZgorK30KKysKKyAvLyBOdW1iZXIgb2YgZ3VhcmQgcGFnZXMgYXQgdGhlIHRvcCBhbmQg Ym90dG9tIG9mIGVhY2ggY29udGludWF0aW9uIHN0YWNrIHNsb3QuCisgc3RhdGljIGNvbnN0ZXhw ciBzaXplX3QgQ29udFN0YWNrVG9wR3VhcmRQYWdlcyA9IDE7Cisgc3RhdGljIGNvbnN0ZXhwciBz aXplX3QgQ29udFN0YWNrQm90dG9tR3VhcmRQYWdlcyA9IDE7CitAQCAtNDQ0LDggKzQ2OCw4IEBA IHZvaWQgQ29udFN0YWNrU2l6ZTo6Y29tcHV0ZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgQ29udFN0YWNrTWluSml0U3RhY2tTaXplLCBDb250U3RhY2tNYXhKaXRTdGFja1NpemUpLAor ICAgICAgICAgICAgICAgcGFnZVNpemUpOworICAgaGVhZGVyU2l6ZSA9IFJvdW5kVXAoc2l6ZW9m KENvbnRTdGFjayksIHBhZ2VTaXplKTsKKy0gIHRvdGFsU2l6ZSA9IHRvcEd1YXJkU2l6ZSArIENv bnRTdGFja1JlZFpvbmVTaXplICsgaml0U3RhY2tTaXplICsKKy0gICAgICAgICAgICAgIGJvdHRv bUd1YXJkU2l6ZSArIGhlYWRlclNpemU7CisrICB0b3RhbFNpemUgPSB0b3BHdWFyZFNpemUgKyBD b250U3RhY2tFZmZlY3RpdmVSZWRab25lU2l6ZShwYWdlU2l6ZSkgKworKyAgICAgICAgICAgICAg aml0U3RhY2tTaXplICsgYm90dG9tR3VhcmRTaXplICsgaGVhZGVyU2l6ZTsKKyAKKyAgIC8vIEFz c2VydCB3ZSBjYW4ndCBvdmVyZmxvdyB3aGVuIG11bHRpcGx5aW5nIG91ciBzaXplIGJ5IGNhcGFj aXR5LiBBc3N1bWUKKyAgIC8vIDMyLWJpdCBpbnRlZ2VycyB0byBiZSBjb25zZXJ2YXRpdmUuCitA QCAtNDY3LDcgKzQ5MSw4IEBAIHZvaWQgQ29udFN0YWNrOjppbml0KENvbnRTdGFja0FyZW5hKiBh cmVuYSwgdWludHB0cl90IGFsbG9jYXRpb25CYXNlLAorICAgdWludHB0cl90IHRvcEd1YXJkUGFn ZVBoeXNpY2FsU3RhcnQgPSBhbGxvY2F0aW9uQmFzZTsKKyAgIHVpbnRwdHJfdCB0b3BHdWFyZFBh Z2VQaHlzaWNhbEVuZCA9IGFsbG9jYXRpb25CYXNlICsgdG9wR3VhcmRQYWdlU2l6ZTsKKyAgIHVp bnRwdHJfdCByZWRab25lUGh5c2ljYWxTdGFydCA9IHRvcEd1YXJkUGFnZVBoeXNpY2FsRW5kOwor LSAgdWludHB0cl90IGppdFN0YWNrUGh5c2ljYWxTdGFydCA9IHJlZFpvbmVQaHlzaWNhbFN0YXJ0 ICsgQ29udFN0YWNrUmVkWm9uZVNpemU7CisrICB1aW50cHRyX3Qgaml0U3RhY2tQaHlzaWNhbFN0 YXJ0ID0KKysgICAgICByZWRab25lUGh5c2ljYWxTdGFydCArIENvbnRTdGFja0VmZmVjdGl2ZVJl ZFpvbmVTaXplKHBhZ2VTaXplKTsKKyAgIHVpbnRwdHJfdCBqaXRTdGFja1BoeXNpY2FsRW5kID0g aml0U3RhY2tQaHlzaWNhbFN0YXJ0ICsgaml0U3RhY2tTaXplOworICAgdWludHB0cl90IGJvdHRv bUd1YXJkUGFnZVBoeXNpY2FsU3RhcnQgPSBqaXRTdGFja1BoeXNpY2FsRW5kOworICAgdWludHB0 cl90IGhlYWRlclBoeXNpY2FsU3RhcnQgPQorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21T dHVicy5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3BwCitpbmRleCA4YTk4ZTIwMWE0NTIu Ljg0OTc4MTRmY2QzNyAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21TdHVicy5jcHAKKysr KyBiL2pzL3NyYy93YXNtL1dhc21TdHVicy5jcHAKK0BAIC02NDYsOCArNjQ2LDkgQEAgc3RhdGlj IGJvb2wgR2VuZXJhdGVJbnRlcnBFbnRyeShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgY29uc3QgRnVu Y0V4cG9ydCYgZmUsCisgCisgICAvLyBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcyBpZiBpdCB3YXNu J3QgYWxyZWFkeSBzYXZlZCBieSB0aGUgY2FsbCBpbnNuLgorICNpZmRlZiBKU19VU0VfTElOS19S RUdJU1RFUgorLSMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9NSVBTNjQpIHx8IFwKKy0gICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrIyAgaWYgZGVmaW5lZChKU19DT0RFR0VOX0FS TSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgICAgICBcCisrICAgICAgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBc CisrICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgbWFzbS5wdXNoUmV0dXJuQWRk cmVzcygpOworICMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorICAgLy8gV2FzbVB1 c2ggdXBkYXRlcyBmcmFtZVB1c2hlZCgpIHVubGlrZSBwdXNoUmV0dXJuQWRkcmVzcygpLCBidXQg dGhhdCdzCitAQCAtMjEyMyw5ICsyMTI0LDEwIEBAIHN0YXRpYyBib29sIEdlbmVyYXRlSW1wb3J0 SW50ZXJwRXhpdChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgY29uc3QgRnVuY0ltcG9ydCYgZmksCisg ICAvLyBUaGUgbmF0aXZlIEFCSSBwcmVzZXJ2ZXMgdGhlIGluc3RhbmNlLCBoZWFwIGFuZCBnbG9i YWwgcmVnaXN0ZXJzIHNpbmNlIHRoZXkKKyAgIC8vIGFyZSBub24tdm9sYXRpbGUuCisgICBNT1pf QVNTRVJUKE5vblZvbGF0aWxlUmVncy5oYXMoSW5zdGFuY2VSZWcpKTsKKy0jaWYgZGVmaW5lZChK U19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgICAgICBcCistICAg IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkg fHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk0pIHx8ICAgICAgICAgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAgIFwKKysgICAgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCisrICAg IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIE1PWl9BU1NFUlQoTm9uVm9sYXRpbGVSZWdz LmhhcyhIZWFwUmVnKSk7CisgI2VuZGlmCisgCitAQCAtMjU3MSw2ICsyNTczLDE1IEBAIGJvb2wg d2FzbTo6R2VuZXJhdGVCdWlsdGluVGh1bmsoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEFCSUZ1bmN0 aW9uVHlwZSBhYmlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyOjpGcm9t Q29kZShyZWdJZCArIDEpKTsKKyAgICAgICAgIH0KKyAgICAgICB9CisrI2VuZGlmCisrI2lmZGVm IEpTX0NPREVHRU5fUFBDNjQKKysgICAgICAvLyBQUEM2NCAzMi1iaXQgb3BlcmF0aW9ucyBkbyBu b3QgemVyby1leHRlbmQgdG8gNjQgYml0cyAodW5saWtlCisrICAgICAgLy8geDg2LTY0L0FSTTY0 L0xBNjQpLiBUaGUgRUxGdjIgQUJJIHJlcXVpcmVzIGNhbGxlcnMgdG8gemVyby9zaWduLWV4dGVu ZAorKyAgICAgIC8vIG5hcnJvdyBhcmdzLiBXYXNtIGkzMiB2YWx1ZXMgbWF5IGhhdmUgZ2FyYmFn ZSB1cHBlciBiaXRzIGluIDY0LWJpdAorKyAgICAgIC8vIHJlZ2lzdGVycywgc28gemVyby1leHRl bmQgdGhlbSBiZWZvcmUgY2FsbGluZyBDKysgYnVpbHRpbnMuCisrICAgICAgaWYgKHNlbGZBcmdz Lm1pclR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgeworKyAgICAgICAgbWFzbS5tb3ZlMzJaZXJv RXh0ZW5kVG9QdHIoc2VsZkFyZ3MtPmdwcigpLCBzZWxmQXJncy0+Z3ByKCkpOworKyAgICAgIH0K KyAjZW5kaWYKKyAgICAgICBjb250aW51ZTsKKyAgICAgfQorQEAgLTI2NTksNiArMjY3MCwyOCBA QCBzdGF0aWMgY29uc3QgTGl2ZVJlZ2lzdGVyU2V0IFJlZ3NUb1ByZXNlcnZlKAorICMgIGlmZGVm IEVOQUJMRV9XQVNNX1NJTUQKKyAjICAgIGVycm9yICJoaWdoIGxhbmVzIG9mIFNJTUQgcmVnaXN0 ZXJzIG5lZWQgdG8gYmUgc2F2ZWQgdG9vLiIKKyAjICBlbmRpZgorKyNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKKysvLyBFeGNsdWRlIHIwIChTY3JhdGNoUmVnaXN0ZXIsIG5vdCBhbGxv Y2F0YWJsZSwgc3BlY2lhbCBhZGRyZXNzaW5nIHNlbWFudGljcyksCisrLy8gcjEgKFNQKSwgcjIg KFRPQyBwb2ludGVyLCByZXNlcnZlZCksIGFuZCByMTMgKFRMUyBwb2ludGVyLCByZXNlcnZlZCku Cisrc3RhdGljIGNvbnN0IExpdmVSZWdpc3RlclNldCBSZWdzVG9QcmVzZXJ2ZSgKKysgICAgR2Vu ZXJhbFJlZ2lzdGVyU2V0KFJlZ2lzdGVyczo6QWxsTWFzayAmIH4oKHVpbnQzMl90KDEpIDw8IFJl Z2lzdGVyczo6cjApIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVpbnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6cjEpIHwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6 cjIpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVp bnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6cjEzKSkpLAorKyMgIGlmZGVmIEVOQUJMRV9XQVNNX1NJ TUQKKysgICAgLy8gVW5saWtlIEFSTTY0LCB3aGVyZSB0aGUgdmVjdG9yIHJlZ2lzdGVycyBhbGlh cyB0aGUgZG91YmxlcywgUFBDNjQKKysgICAgLy8gZG91YmxlcyBsaXZlIGluIHRoZSBGUFJzIChW U1IwLTMxKSB3aGlsZSB3YXNtIHYxMjggdmFsdWVzIGxpdmUgaW4gdGhlCisrICAgIC8vIFZScyAo VlNSMzItNjMpIC0tIHR3byBkaXNqb2ludCBwaHlzaWNhbCBwb29scywgc28gYm90aCBtdXN0IGJl CisrICAgIC8vIHByZXNlcnZlZC4gU2F2aW5nIG9ubHkgdGhlIGRvdWJsZXMgbG9zZXMgdGhlIGVu dGlyZSBsaXZlIHYxMjggc3RhdGU6IGEKKysgICAgLy8gdHJhcCBmaXJpbmcgd2hpbGUgYSB2MTI4 IGlzIGxpdmUgKG5vdGFibHkgdGhlIGludGVycnVwdC1jaGVjayB0cmFwLAorKyAgICAvLyB3aGlj aCBmaXJlcyBjb25zdGFudGx5IGluIGhvdCBsb29wcykgcmVzdW1lcyB3aXRoIHdoYXRldmVyIHRo ZSBDKysKKysgICAgLy8gaGFuZGxlcidzIGxpYmMgbGVmdCBpbiB0aGUgVlJzIChlLmcuIGdsaWJj J3MgdmVjdG9yIG1lbWNweSBsZWF2ZXMgbHZzbAorKyAgICAvLyBhbGlnbm1lbnQtY29udHJvbCBw YXR0ZXJucyBpbiBsb3cgVlJzKS4KKysgICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVy czo6QWxsRG91YmxlTWFzayB8CisrICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6 OkFsbFNpbWQxMjhNYXNrKSk7CisrIyAgZWxzZQorKyAgICBGbG9hdFJlZ2lzdGVyU2V0KEZsb2F0 UmVnaXN0ZXJzOjpBbGxEb3VibGVNYXNrKSk7CisrIyAgZW5kaWYKKyAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNNjQpCisgLy8gV2UgYXNzdW1lIHRoYXQgdHJhcHMgZG8gbm90IGhhcHBlbiB3 aGlsZSBsciBpcyBsaXZlLiBUaGlzIGJvdGggZW5zdXJlcyB0aGF0CisgLy8gdGhlIHNpemUgb2Yg UmVnc1RvUHJlc2VydmUgaXMgYSBtdWx0aXBsZSBvZiAyIChwcmVzZXJ2aW5nIFdhc21TdGFja0Fs aWdubWVudCkKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtU3VtbWFyaXplSW5zbi5jcHAg Yi9qcy9zcmMvd2FzbS9XYXNtU3VtbWFyaXplSW5zbi5jcHAKK2luZGV4IDdiYjRmNGI3YTcyNS4u MmFlNTVhMWIxYjllIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24u Y3BwCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtU3VtbWFyaXplSW5zbi5jcHAKK0BAIC0xNzMxLDYg KzE3MzEsMTY5IEBAIE1heWJlPFRyYXBNYWNoaW5lSW5zbj4gU3VtbWFyaXplVHJhcEluc3RydWN0 aW9uKGNvbnN0IHVpbnQ4X3QqIGluc25BZGRyKSB7CisgICByZXR1cm4gTm90aGluZygpOworIH0K KyAKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0gcHBjNjQgPT09PQorKworKyMgIGVsaWYgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQorKworK01heWJlPFRyYXBNYWNoaW5lSW5zbj4gU3VtbWFyaXplVHJhcEluc3Ry dWN0aW9uKGNvbnN0IHVpbnQ4X3QqIGluc25BZGRyKSB7CisrICBNT1pfQVNTRVJUKDAgPT0gKHVp bnRwdHJfdChpbnNuQWRkcikgJiAzKSk7CisrCisrICBjb25zdCB1aW50MzJfdCBpbnNuID0gKih1 aW50MzJfdCopaW5zbkFkZHI7CisrICBjb25zdCB1aW50MzJfdCBtYWpvck9wID0gaW5zbiA+PiAy NjsKKysgIC8vIFgtZm9ybSBzZWNvbmRhcnkgb3Bjb2RlOiBiaXRzIDEwLi4xLgorKyAgY29uc3Qg dWludDMyX3QgeG8gPSAoaW5zbiA+PiAxKSAmIDB4M0ZGOworKworKyAgLy8gUFBDX3RyYXAgPSAw eDdGRTAwMDA4ID0gdHcgMzEsMCwwLgorKyAgaWYgKGluc24gPT0gMHg3RkUwMDAwOCkgeworKyAg ICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246Ok9mZmljaWFsVUQpOworKyAgfQorKworKyAg Ly8gRC1mb3JtIC8gRFMtZm9ybSBsb2Fkcy4KKysgIHN3aXRjaCAobWFqb3JPcCkgeworKyAgICBj YXNlIDM0OiAgLy8gbGJ6CisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2Fk OCk7CisrICAgIGNhc2UgNDA6ICAvLyBsaHoKKysgICAgY2FzZSA0MjogIC8vIGxoYQorKyAgICAg IHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDE2KTsKKysgICAgY2FzZSAzMjogIC8v IGx3egorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDMyKTsKKysgICAg Y2FzZSA1ODogIC8vIGxkIChEUz0wKSAvIGx3YSAoRFM9MikKKysgICAgICBpZiAoKGluc24gJiAz KSA9PSAyKSB7CisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7 ICAvLyBsd2EKKysgICAgICB9CisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpM b2FkNjQpOyAgLy8gbGQKKysgICAgY2FzZSA0ODogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBsZnMKKysgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7 CisrICAgIGNhc2UgNTA6ICAvLyBsZmQKKysgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUlu c246OkxvYWQ2NCk7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICB9CisrCisrICAv LyBELWZvcm0gLyBEUy1mb3JtIHN0b3Jlcy4KKysgIHN3aXRjaCAobWFqb3JPcCkgeworKyAgICBj YXNlIDM4OiAgLy8gc3RiCisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9y ZTgpOworKyAgICBjYXNlIDQ0OiAgLy8gc3RoCisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hp bmVJbnNuOjpTdG9yZTE2KTsKKysgICAgY2FzZSAzNjogIC8vIHN0dworKyAgICBjYXNlIDM3OiAg Ly8gc3R3dQorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Cisr ICAgIGNhc2UgNTI6ICAvLyBzdGZzCisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNu OjpTdG9yZTMyKTsKKysgICAgY2FzZSA2MjogIC8vIHN0ZCAoRFM9MCkgLyBzdGR1IChEUz0xKQor KyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2NCk7CisrICAgIGNhc2Ug NTQ6ICAvLyBzdGZkCisrICAgIGNhc2UgNTU6ICAvLyBzdGZkdQorKyAgICAgIHJldHVybiBTb21l KFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2NCk7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7 CisrICB9CisrCisrICAvLyBYLWZvcm0gaW5zdHJ1Y3Rpb25zIChtYWpvciBvcGNvZGUgMzEpLgor KyAgaWYgKG1ham9yT3AgPT0gMzEpIHsKKysgICAgc3dpdGNoICh4bykgeworKyAgICAgIC8vIElu ZGV4ZWQgbG9hZHMuCisrICAgICAgY2FzZSA4NzogIC8vIGxiengKKysgICAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDgpOworKyAgICAgIGNhc2UgMjc5OiAgLy8gbGh6eAor KyAgICAgIGNhc2UgMzQzOiAgLy8gbGhheAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hp bmVJbnNuOjpMb2FkMTYpOworKyAgICAgIGNhc2UgMjM6ICAvLyBsd3p4CisrICAgICAgICByZXR1 cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7CisrICAgICAgY2FzZSAyMTogIC8vIGxk eAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQpOworKyAgICAg IGNhc2UgNTM1OiAgLy8gbGZzeAorKyAgICAgIGNhc2UgODU1OiAgLy8gbGZpd2F4CisrICAgICAg Y2FzZSA4ODc6ICAvLyBsZml3engKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5z bjo6TG9hZDMyKTsKKysgICAgICBjYXNlIDU5OTogIC8vIGxmZHgKKysgICAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsKKysgICAgICBjYXNlIDc5MDogIC8vIGxoYnJ4 IChieXRlLXJldmVyc2UgaGFsZndvcmQpCisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGlu ZUluc246OkxvYWQxNik7CisrICAgICAgY2FzZSA1MzQ6ICAvLyBsd2JyeCAoYnl0ZS1yZXZlcnNl IHdvcmQpCisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7Cisr CisrICAgICAgLy8gSW5kZXhlZCBzdG9yZXMuCisrICAgICAgY2FzZSAyMTU6ICAvLyBzdGJ4Cisr ICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlOCk7CisrICAgICAgY2Fz ZSA0MDc6ICAvLyBzdGh4CisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0 b3JlMTYpOworKyAgICAgIGNhc2UgMTUxOiAgLy8gc3R3eAorKyAgICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpTdG9yZTMyKTsKKysgICAgICBjYXNlIDE0OTogIC8vIHN0ZHgKKysg ICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2NCk7CisrICAgICAgY2Fz ZSA2NjM6ICAvLyBzdGZzeAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpT dG9yZTMyKTsKKysgICAgICBjYXNlIDcyNzogIC8vIHN0ZmR4CisrICAgICAgICByZXR1cm4gU29t ZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOworKyAgICAgIGNhc2UgOTE4OiAgLy8gc3RoYnJ4 IChieXRlLXJldmVyc2UgaGFsZndvcmQgc3RvcmUpCisrICAgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OlN0b3JlMTYpOworKyAgICAgIGNhc2UgNjYyOiAgLy8gc3R3YnJ4IChieXRl LXJldmVyc2Ugd29yZCBzdG9yZSkKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5z bjo6U3RvcmUzMik7CisrCisrICAgICAgLy8gVlNYIFNJTUQgaW5kZXhlZCBsb2FkL3N0b3JlIChY WDEtZm9ybSwgc2FtZSBtYWpvciBvcGNvZGUgMzEpLgorKyAgICAgIGNhc2UgMjY4OiAgLy8gbHh2 eCAoUE9XRVI5KQorKyAgICAgIGNhc2UgODQ0OiAgLy8gbHh2ZDJ4IChQT1dFUjgpCisrICAgICAg ICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQxMjgpOworKyAgICAgIGNhc2UgMzk2 OiAgLy8gc3R4dnggKFBPV0VSOSkKKysgICAgICBjYXNlIDk3MjogIC8vIHN0eHZkMnggKFBPV0VS OCkKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUxMjgpOworKwor KyAgICAgIC8vIEF0b21pYyAobG9hZC1yZXNlcnZlIC8gc3RvcmUtY29uZGl0aW9uYWwpLgorKyAg ICAgIGNhc2UgMjA6ICAgLy8gbHdhcngKKysgICAgICBjYXNlIDUyOiAgIC8vIGxiYXJ4IChQT1dF UjcrKQorKyAgICAgIGNhc2UgODQ6ICAgLy8gbGRhcngKKysgICAgICBjYXNlIDExNjogIC8vIGxo YXJ4IChQT1dFUjcrKQorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpBdG9t aWMpOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBicmVhazsKKysgICAgfQorKyAgICAvLyBz dHdjeC4gKFhPPTE1MCwgUmM9MSksIHN0ZGN4LiAoWE89MjE0LCBSYz0xKSwgc3RiY3guIChYTz02 OTQsIFJjPTEpCisrICAgIC8vIGFuZCBzdGhjeC4gKFhPPTcyNiwgUmM9MSkgaGF2ZSBiaXQgMCBz ZXQuIE5vdGUgeG8gYWJvdmUgYWxyZWFkeQorKyAgICAvLyBkaXNjYXJkcyBiaXQgMCwgc28gd2Ug bmVlZCBhIHNlcGFyYXRlIGxvdy0xMS1iaXQgbWF0Y2guCisrICAgIGNvbnN0IHVpbnQzMl90IHhv UmMgPSBpbnNuICYgMHg3RkY7ICAvLyBiaXRzIDEwLi4wCisrICAgIGlmICh4b1JjID09ICgoMTUw IDw8IDEpIHwgMSkgfHwgeG9SYyA9PSAoKDIxNCA8PCAxKSB8IDEpIHx8CisrICAgICAgICB4b1Jj ID09ICgoNjk0IDw8IDEpIHwgMSkgfHwgeG9SYyA9PSAoKDcyNiA8PCAxKSB8IDEpKSB7CisrICAg ICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpBdG9taWMpOworKyAgICB9CisrICB9Cisr CisrICAvLyBQT1dFUjEwIHByZWZpeGVkIGxvYWRzL3N0b3JlcyAobWFqb3Igb3Bjb2RlIDEpLiBU aGUgdHJhcC1zaXRlIFBDCisrICAvLyBwb2ludHMgYXQgdGhlIHByZWZpeCB3b3JkOyB0aGUgYWN0 dWFsIGxvYWQvc3RvcmUga2luZCBpcyBlbmNvZGVkIGluCisrICAvLyB0aGUgc3VmZml4IHdvcmQg YXQgaW5zbkFkZHIgKyA0LiBUaGUgNjQtYnl0ZS1ib3VuZGFyeSBydWxlCisrICAvLyAoZW5zdXJl UHJlZml4ZWRBbGlnbm1lbnQpIGd1YXJhbnRlZXMgdGhlIHN1ZmZpeCBpcyBpbiB0aGUgc2FtZSBi bG9jay4KKysgIGlmIChtYWpvck9wID09IDEpIHsKKysgICAgY29uc3QgdWludDMyX3Qgc3VmZml4 ID0gKih1aW50MzJfdCopKGluc25BZGRyICsgNCk7CisrICAgIGNvbnN0IHVpbnQzMl90IHN1ZmZp eE9wNiA9IHN1ZmZpeCA+PiAyNjsgICAgICAgICAgLy8gNi1iaXQgc3VmZml4IG9wCisrICAgIGNv bnN0IHVpbnQzMl90IHN1ZmZpeE9wNSA9IHN1ZmZpeCA+PiAyNzsgICAgICAgICAgLy8gNS1iaXQg c3VmZml4IG9wIChwbHh2L3BzdHh2KQorKyAgICBzd2l0Y2ggKHN1ZmZpeE9wNikgeworKyAgICAg IGNhc2UgNTc6ICAvLyBwbGQKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6 TG9hZDY0KTsKKysgICAgICBjYXNlIDUwOiAgLy8gcGxmZAorKyAgICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQpOworKyAgICAgIGNhc2UgNDg6ICAvLyBwbGZzCisrICAg ICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7CisrICAgICAgY2FzZSA2 MTogIC8vIHBzdGQKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2 NCk7CisrICAgICAgY2FzZSA1NDogIC8vIHBzdGZkCisrICAgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OlN0b3JlNjQpOworKyAgICAgIGNhc2UgNTI6ICAvLyBwc3RmcworKyAgICAg ICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTMyKTsKKysgICAgICBkZWZhdWx0 OgorKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgaWYgKHN1ZmZpeE9wNSA9PSAyNSkgeyAg Ly8gcGx4dgorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDEyOCk7Cisr ICAgIH0KKysgICAgaWYgKHN1ZmZpeE9wNSA9PSAyNykgeyAgLy8gcHN0eHYKKysgICAgICByZXR1 cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMTI4KTsKKysgICAgfQorKyAgfQorKworKyAg cmV0dXJuIE5vdGhpbmcoKTsKKyt9CisrCisgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IG5vbmUgPT09PQorIAorICMg IGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20v V2FzbVZhbHVlLmNwcCBiL2pzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAKK2luZGV4IGZkYTA5OTY4 NTFlMS4uNDVmZmYyNGZhNTgyIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbVZhbHVlLmNw cAorKysrIGIvanMvc3JjL3dhc20vV2FzbVZhbHVlLmNwcAorQEAgLTQzMCw3ICs0MzAsNyBAQCBi b29sIFRvV2ViQXNzZW1ibHlWYWx1ZV9pMzIoSlNDb250ZXh0KiBjeCwgSGFuZGxlVmFsdWUgdmFs LCBpbnQzMl90KiBsb2MsCisgICBib29sIG9rID0gVG9JbnQzMihjeCwgdmFsLCBsb2MpOworICAg aWYgKG9rICYmIG11c3RXcml0ZTY0KSB7CisgI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQorICAgICBsb2NbMV0gPSBsb2NbMF0gPj4gMzE7CisgI2Vsc2UK KyAgICAgbG9jWzFdID0gMDsKK2RpZmYgLS1naXQgYS9tZmJ0L0Fzc2VydGlvbnMuaCBiL21mYnQv QXNzZXJ0aW9ucy5oCitpbmRleCBhNDM2ZDAxOWExOTcuLjQ4ODdhZjdlNzY3NiAxMDA2NDQKKy0t LSBhL21mYnQvQXNzZXJ0aW9ucy5oCisrKysgYi9tZmJ0L0Fzc2VydGlvbnMuaAorQEAgLTI4Miw2 ICsyODIsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIE1PWl9DcmFzaFNlcXVlbmNlKHZvaWQqIGFB ZGRyZXNzLCBpbnRwdHJfdCBhTGluZSkgeworICAgICAgICJzdC5kICUxLCUwLDA7XG4iICAvLyBX cml0ZSB0aGUgbGluZSBudW1iZXIgdG8gdGhlIGNyYXNoaW5nIGFkZHJlc3MKKyAgICAgICA6ICAg ICAgICAgICAgICAgICAgLy8gbm8gb3V0cHV0IHJlZ2lzdGVycworICAgICAgIDogInIiKGFBZGRy ZXNzKSwgInIiKGFMaW5lKSk7CisrIyAgZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisrICBh c20gdm9sYXRpbGUoCisrICAgICAgInN0ZCAlMSwwKCUwKTtcbiIgIC8vIFdyaXRlIHRoZSBsaW5l IG51bWJlciB0byB0aGUgY3Jhc2hpbmcgYWRkcmVzcworKyAgICAgIDogICAgICAgICAgICAgICAg ICAvLyBubyBvdXRwdXQgcmVnaXN0ZXJzCisrICAgICAgOiAiciIoYUFkZHJlc3MpLCAiciIoYUxp bmUpKTsKKyAjICBlbHNlCisgIyAgICB3YXJuaW5nIFwKKyAgICAgICAgICJVbnN1cHBvcnRlZCBh cmNoaXRlY3R1cmUsIHJlcGxhY2UgdGhlIGNvZGUgYmVsb3cgd2l0aCBhc3NlbWJseSBzdWl0YWJs ZSB0byBjcmFzaCB0aGUgcHJvY2VzcyIKKy0tIAorMi41Mi4wCisKCmRpZmYgLS1naXQgYS9maXJl Zm94LnNwZWMgYi9maXJlZm94LnNwZWMKaW5kZXggMDZhNjkwMC4uYmU4YWJhZiAxMDA2NDQKLS0t IGEvZmlyZWZveC5zcGVjCisrKyBiL2ZpcmVmb3guc3BlYwpAQCAtMjgxLDYgKzI4MSwxMSBAQCBQ YXRjaDYwMDogICAgICAgIHBnby5wYXRjaAogUGF0Y2g2MDI6ICAgICAgICBtb3ppbGxhLTE1MTY4 MDMucGF0Y2gKIFBhdGNoNjAzOiAgICAgICAgZmlyZWZveC1nY2MtYWx3YXlzLWlubGluZS5wYXRj aAogCisjIHBwYzY0bGUgSklUCitQYXRjaDkwMDogICAgICAgIDAwMDEtQWRkLVZTWC1pbnN0cnVj dGlvbnMtZm9yLVNLSUEucGF0Y2gKK1BhdGNoOTAxOiAgICAgICAgMDAwMi1BZGQtVlNYLWluc3Ry dWN0aW9ucy1mb3ItbGlid2VicC5wYXRjaAorUGF0Y2g5MDI6ICAgICAgICAwMDAzLUFkZC1QUEM2 NExFLUpJVC1iYWNrZW5kLnBhdGNoCisKIAogJWlmICV7P3N5c3RlbV9uc3N9CiBCdWlsZFJlcXVp cmVzOiAgcGtnY29uZmlnKG5zcHIpID49ICV7bnNwcl92ZXJzaW9ufQpAQCAtNjAxLDYgKzYwNiwx MSBAQCBjYXQgJXtTT1VSQ0U0OX0gfCBzZWQgLWUgInN8TElCQ0xBTkdfUlRfUExBQ0VIT0xERVJ8 YHB3ZGAvd2FzaS1zZGstMzAvYnVpbGQvc3lzcgogJWVuZGlmCiAlcGF0Y2ggLVA2MDMgLXAxIC1i IC5pbmxpbmUKIAorIyBwcGM2NGxlIEpJVAorJXBhdGNoIC1QOTAwIC1wMQorJXBhdGNoIC1QOTAx IC1wMQorJXBhdGNoIC1QOTAyIC1wMQorCiBybSAtZiAubW96Y29uZmlnCiBjcCAle1NPVVJDRTEw fSAubW96Y29uZmlnCiBlY2hvICJhY19hZGRfb3B0aW9ucyAtLWVuYWJsZS1kZWZhdWx0LXRvb2xr aXQ9Y2Fpcm8tZ3RrMy13YXlsYW5kIiA+PiAubW96Y29uZmlnCg==