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: Revert "add ppc64le JIT" Date: Tue, 16 Jun 2026 13:11:44 GMT Message-ID: <178161550412.1.17533838050797496154.rpms-firefox-430380f3f64c@fedoraproject.org> List-ID: X-Git-Repo: rpms/firefox X-Git-Branch: rawhide X-Git-Rev: 430380f3f64c47eba746c7e67fa2160ef8865644 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZmlyZWZveAogICAgICAgICAgICBCcmFuY2ggOiByYXdoaWRlCiAgICAgICAg ICAgIENvbW1pdCA6IDQzMDM4MGYzZjY0YzQ3ZWJhNzQ2YzdlNjdmYTIxNjBlZjg4NjU2NDQKICAg ICAgICAgICAgQXV0aG9yIDogRGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6PgogICAgICAgICAgICBE YXRlICAgOiAyMDI2LTA2LTE2VDEzOjExOjI2KzAwOjAwCiAgICAgICAgICAgIFN0YXRzICA6ICsw Ly00MjA4NiBpbiA0IGZpbGUocykKICAgICAgICAgICAgVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVk b3JhcHJvamVjdC5vcmcvcnBtcy9maXJlZm94L2MvNDMwMzgwZjNmNjRjNDdlYmE3NDZjN2U2N2Zh MjE2MGVmODg2NTY0ND9icmFuY2g9cmF3aGlkZQoKICAgICAgICAgICAgTG9nOgogICAgICAgICAg ICBSZXZlcnQgImFkZCBwcGM2NGxlIEpJVCIKClRoaXMgcmV2ZXJ0cyBjb21taXQgZTk5ZjBkNDky NWFjNTk2YWQ3NWYyYWUwODQ2MjBkMzZjNDRhODVjMi4KCi0tLQpkaWZmIC0tZ2l0IGEvMDAwMS1B ZGQtVlNYLWluc3RydWN0aW9ucy1mb3ItU0tJQS5wYXRjaCBiLzAwMDEtQWRkLVZTWC1pbnN0cnVj dGlvbnMtZm9yLVNLSUEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjM2Ew ZDguLjAwMDAwMDAKLS0tIGEvMDAwMS1BZGQtVlNYLWluc3RydWN0aW9ucy1mb3ItU0tJQS5wYXRj aAorKysgL2Rldi9udWxsCkBAIC0xLDEzNDcgKzAsMCBAQAotRnJvbSBhNDdjOTkxZGJiZmI3MDkx MzQ3MzdhNTRlOGJiZTdlMGIxYmNlODAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTog PT9VVEYtOD9xP1RydW5nPTIwTD1DMz1BQT89IDw4QHRsZS5pZC5hdT4KLURhdGU6IEZyaSwgMTIg SnVuIDIwMjYgMTU6MjM6MTAgKzEwMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzNdIEFkZCBWU1ggaW5z dHJ1Y3Rpb25zIGZvciBTS0lBCi0KLUFkYXB0ZWQgZnJvbSB3b3JrIGRvbmUgYnkgUmFwdG9yIEVu Z2luZWVyaW5nIGZvciBjaHJvbWl1bSdzIHZlbmRvcmVkCi1TS0lBCi0KLUNvLWF1dGhvcmVkLWJ5 OiBUaW1vdGh5IFBlYXJzb24gPHRwZWFyc29uQHJhcHRvcmVuZ2luZWVyaW5nLmNvbT4KLS0tLQot IGdmeC9za2lhL3NraWEvc3JjL2Jhc2UvU2tWeC5oICAgICAgICAgICAgICAgICB8ICA1OCArKyst Ci0gZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcCAgICAgIHwgIDk4ICsr KysrKwotIGdmeC9za2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAgICB8IDI2 OCArKysrKysrKysrKysrKysrCi0gLi4uL3NraWEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVf b3B0cy5oICAgIHwgMTY0ICsrKysrKysrKysKLSBnZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQmxp dFJvd19vcHRzLmggICAgICAgfCAgNDggKysrCi0gLi4uL3NraWEvc3JjL29wdHMvU2tSYXN0ZXJQ aXBlbGluZV9vcHRzLmggICAgIHwgMjM3ICsrKysrKysrKysrKysrCi0gZ2Z4L3NraWEvc2tpYS9z cmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5jICAgIHwgMjg5ICsrKysrKysrKysrKysrKysrKwot IDcgZmlsZXMgY2hhbmdlZCwgMTE2MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1k aWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvYmFzZS9Ta1Z4LmggYi9nZngvc2tpYS9za2lh L3NyYy9iYXNlL1NrVnguaAotaW5kZXggZjg3Y2E0NGQ0YWYwLi5lZDgwYzkxZmQzOGUgMTAwNjQ0 Ci0tLS0gYS9nZngvc2tpYS9za2lhL3NyYy9iYXNlL1NrVnguaAotKysrIGIvZ2Z4L3NraWEvc2tp YS9zcmMvYmFzZS9Ta1Z4LmgKLUBAIC01Miw2ICs1Miw4IEBACi0gICAgICAgICAjaW5jbHVkZSA8 YXJtX25lb24uaD4KLSAgICAgI2VsaWYgZGVmaW5lZChfX3dhc21fc2ltZDEyOF9fKQotICAgICAg ICAgI2luY2x1ZGUgPHdhc21fc2ltZDEyOC5oPgotKyAgICAjZWxpZiBkZWZpbmVkKFNLX0NQVV9Q UEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+Ci0g ICAgICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZFTF9MQVNYCi0gICAg ICAgICAjaW5jbHVkZSA8bGFzeGludHJpbi5oPgotICAgICAgICAgI2luY2x1ZGUgPGxzeGludHJp bi5oPgotQEAgLTUwOSw2ICs1MTEsMTQgQEAgU0lOVCBWZWM8TixUPiBpZl90aGVuX2Vsc2UoY29u c3QgVmVjPE4sTTxUPj4mIGNvbmQsIGNvbnN0IFZlYzxOLFQ+JiB0LCBjb25zdCBWZWMKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tfYml0X2Nhc3Q8dWlu dDh4MTZfdD4oZSkpKTsKLSAgICAgfQotICNlbmRpZgotKyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRl ZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICBpZiBjb25zdGV4cHIg KE4qc2l6ZW9mKFQpID09IDE2KSB7Ci0rICAgICAgICByZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4s VD4+KAotKyAgICAgICAgICAgICAgICB2ZWNfc2VsKHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2ln bmVkIGNoYXI+KGUpLAotKyAgICAgICAgICAgICAgICAgICAgICAgIHNrX2JpdF9jYXN0PF9fdmVj dG9yIHVuc2lnbmVkIGNoYXI+KHQpLAotKyAgICAgICAgICAgICAgICAgICAgICAgIHNrX2JpdF9j YXN0PF9fdmVjdG9yIHVuc2lnbmVkIGNoYXI+KGNvbmQpKSk7Ci0rICAgIH0KLSsjZW5kaWYKLSAj aWYgU0tWWF9VU0VfU0lNRCAmJiBTS19DUFVfTFNYX0xFVkVMID49IFNLX0NQVV9MU1hfTEVWRUxf TEFTWAotICAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9mKFQpID09IDMyKSB7Ci0gICAgICAgICBy ZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4sVD4+KF9fbGFzeF94dmJpdHNlbF92KHNrX2JpdF9jYXN0 PF9fbTI1Nmk+KGUpLAotQEAgLTU3OSw2ICs1ODksMTEgQEAgU0lOVCBib29sIGFueShjb25zdCBW ZWM8TixUPiYgeCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBza19iaXRfY2FzdDxfX20xMjhpPih4KSkpOwotICAgICAgICAgcmV0 dXJuIHJldHZbMF0gIT0gMGIwMDAwOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIFNLVlhfVVNFX1NJ TUQgJiYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgIGlmIGNv bnN0ZXhwciAoTipzaXplb2YoVCkgPT0gMTYpIHsKLSsgICAgICAgIHJldHVybiB2ZWNfYW55X25l KHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIGludD4oeCksIHZlY19zcGxhdHMoMHUpKTsK LSsgICAgfQotICNlbmRpZgotICAgICByZXR1cm4gYW55KHgubG8pCi0gICAgICAgICB8fCBhbnko eC5oaSk7Ci1AQCAtNjIyLDYgKzYzNywxMSBAQCBTSU5UIGJvb2wgYWxsKGNvbnN0IFZlYzxOLFQ+ JiB4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNrX2JpdF9jYXN0PF9fbTEyOGk+KHgpKSk7Ci0gICAgICAgICByZXR1cm4gcmV0 dlswXSA9PSAwYjExMTE7Ci0gICAgIH0KLSsjZW5kaWYKLSsjaWYgU0tWWF9VU0VfU0lNRCAmJiBk ZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgaWYgY29uc3RleHBy IChOKnNpemVvZihUKSA9PSAxNikgewotKyAgICAgICAgcmV0dXJuIHZlY19hbGxfbmUoc2tfYml0 X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgaW50Pih4KSwgdmVjX3NwbGF0cygwdSkpOwotKyAgICB9 Ci0gI2VuZGlmCi0gICAgIHJldHVybiBhbGwoeC5sbykKLSAgICAgICAgICYmIGFsbCh4LmhpKTsK LUBAIC02NDcsOCArNjY3LDIyIEBAIFNJVCAgVCBtYXgoY29uc3QgVmVjPDEsVD4mIHgpIHsgcmV0 dXJuIHgudmFsOyB9Ci0gU0lOVCBUIG1pbihjb25zdCBWZWM8TixUPiYgeCkgeyByZXR1cm4gc3Rk OjptaW4obWluKHgubG8pLCBtaW4oeC5oaSkpOyB9Ci0gU0lOVCBUIG1heChjb25zdCBWZWM8TixU PiYgeCkgeyByZXR1cm4gc3RkOjptYXgobWF4KHgubG8pLCBtYXgoeC5oaSkpOyB9Ci0gCi0tU0lO VCBWZWM8TixUPiBtaW4oY29uc3QgVmVjPE4sVD4mIHgsIGNvbnN0IFZlYzxOLFQ+JiB5KSB7IHJl dHVybiBuYWl2ZV9pZl90aGVuX2Vsc2UoeSA8IHgsIHksIHgpOyB9Ci0tU0lOVCBWZWM8TixUPiBt YXgoY29uc3QgVmVjPE4sVD4mIHgsIGNvbnN0IFZlYzxOLFQ+JiB5KSB7IHJldHVybiBuYWl2ZV9p Zl90aGVuX2Vsc2UoeCA8IHksIHksIHgpOyB9Ci0rU0lOVCBWZWM8TixUPiBtaW4oY29uc3QgVmVj PE4sVD4mIHgsIGNvbnN0IFZlYzxOLFQ+JiB5KSB7Ci0rI2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVm aW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgIGlmIGNvbnN0ZXhwciAo TipzaXplb2YoVCkgPT0gMTYpIHsKLSsgICAgICAgIHJldHVybiBza19iaXRfY2FzdDxWZWM8TixU Pj4odmVjX21pbih0b192ZXh0KHgpLCB0b192ZXh0KHkpKSk7Ci0rICAgIH0KLSsjZW5kaWYKLSsg ICAgcmV0dXJuIG5haXZlX2lmX3RoZW5fZWxzZSh5IDwgeCwgeSwgeCk7Ci0rfQotK1NJTlQgVmVj PE4sVD4gbWF4KGNvbnN0IFZlYzxOLFQ+JiB4LCBjb25zdCBWZWM8TixUPiYgeSkgewotKyNpZiBT S1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQot KyAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9mKFQpID09IDE2KSB7Ci0rICAgICAgICByZXR1cm4g c2tfYml0X2Nhc3Q8VmVjPE4sVD4+KHZlY19tYXgodG9fdmV4dCh4KSwgdG9fdmV4dCh5KSkpOwot KyAgICB9Ci0rI2VuZGlmCi0rICAgIHJldHVybiBuYWl2ZV9pZl90aGVuX2Vsc2UoeCA8IHksIHks IHgpOwotK30KLSAKLSBTSU5UVSBWZWM8TixUPiBtaW4oY29uc3QgVmVjPE4sVD4mIHgsIFUgeSkg eyByZXR1cm4gbWluKHgsIFZlYzxOLFQ+KHkpKTsgfQotIFNJTlRVIFZlYzxOLFQ+IG1heChjb25z dCBWZWM8TixUPiYgeCwgVSB5KSB7IHJldHVybiBtYXgoeCwgVmVjPE4sVD4oeSkpOyB9Ci1AQCAt OTYwLDYgKzk5NCwyNiBAQCBTSU4gVmVjPE4sdWludDE2X3Q+IG11bGhpKGNvbnN0IFZlYzxOLHVp bnQxNl90PiYgeCwKLSAgICAgfSBlbHNlIHsgLy8gTiA+IDgKLSAgICAgICAgIHJldHVybiBqb2lu KG11bGhpKHgubG8sIHkubG8pLCBtdWxoaSh4LmhpLCB5LmhpKSk7Ci0gICAgIH0KLSsjZWxpZiBT S1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQot KyAgICBpZiBjb25zdGV4cHIgKE4gPT0gOCkgewotKyAgICAgICAgLy8gdTE2KnUxNiAtPiB1MzIg ZXZlbi9vZGQgcHJvZHVjdHMgKHZtdWxldWgvdm11bG91aCksIHRoZW4gZ2F0aGVyIHRoZQotKyAg ICAgICAgLy8gaGlnaCAxNiBiaXRzIG9mIGVhY2ggYmFjayBpbnRvIHNlcXVlbnRpYWwgbGFuZXMu IFNhbWUgaWRpb20gYXMgdGhlCi0rICAgICAgICAvLyBWU1ggc2NhbGUoKSBpbiBTa1N3aXp6bGVy X29wdHMuCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB4cyA9IHNrX2JpdF9jYXN0 PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0Pih4KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IHlzID0gc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+KHkpOwotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGV2ZW4gPSB2ZWNfdm11bGV1aCh4cywgeXMpOwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IG9kZCAgPSB2ZWNfdm11bG91aCh4cywgeXMp OwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBoaSA9IHsKLSsgICAgICAg ICAgICAweDAyLDB4MDMsIDB4MTIsMHgxMywgIDB4MDYsMHgwNywgMHgxNiwweDE3LAotKyAgICAg ICAgICAgIDB4MEEsMHgwQiwgMHgxQSwweDFCLCAgMHgwRSwweDBGLCAweDFFLDB4MUYKLSsgICAg ICAgIH07Ci0rICAgICAgICByZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPDgsdWludDE2X3Q+PigKLSsg ICAgICAgICAgICB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilldmVuLCAoX192ZWN0 b3IgdW5zaWduZWQgY2hhcilvZGQsIGhpKSk7Ci0rICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKE4g PCA4KSB7Ci0rICAgICAgICByZXR1cm4gbXVsaGkoam9pbih4LHgpLCBqb2luKHkseSkpLmxvOwot KyAgICB9IGVsc2UgeyAvLyBOID4gOAotKyAgICAgICAgcmV0dXJuIGpvaW4obXVsaGkoeC5sbywg eS5sbyksIG11bGhpKHguaGksIHkuaGkpKTsKLSsgICAgfQotICNlbHNlCi0gICAgIHJldHVybiBz a3Z4OjpjYXN0PHVpbnQxNl90PihtdWxsKHgsIHkpID4+IDE2KTsKLSAjZW5kaWYKLWRpZmYgLS1n aXQgYS9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdFJvd19EMzIuY3BwIGIvZ2Z4L3NraWEv c2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcAotaW5kZXggYmNiZjJlNjZiZDQ2Li45MjBk NmE5YjIzNjYgMTAwNjQ0Ci0tLS0gYS9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdFJvd19E MzIuY3BwCi0rKysgYi9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdFJvd19EMzIuY3BwCi1A QCAtNTE3LDYgKzUxNywxMDQgQEAgc3RhdGljIHZvaWQgYmxpdF9yb3dfczMyX29wYXF1ZShTa1BN Q29sb3IqIGRzdCwKLSAgICAgICAgIH0KLSAgICAgfQotIAotKyNlbGlmIGRlZmluZWQoU0tfQ1BV X1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICAjaW5jbHVkZSA8YWx0aXZlYy5oPgotKwot KyAgICAvLyBkc3QgKyAoKChzcmMgLSBkc3QpICogc3JjX3NjYWxlKSA+PiA4KSwgc3BsYXllZCBp bnRvIDE2LWJpdCBsYW5lczsgdGhlCi0rICAgIC8vIHZlY18qIHRyYW5zY3JpcHRpb24gb2YgU2tQ TUxlcnBfU1NFMi4KLSsgICAgc3RhdGljIGlubGluZSBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIFNr UE1MZXJwX1ZTWChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNyYywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIGRzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBzcmNfc2NhbGUpIHsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVu c2lnbmVkIGludCBtYXNrID0gdmVjX3NwbGF0cygweDAwRkYwMEZGdSk7Ci0rICAgICAgICBjb25z dCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBlaWdodCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTgpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3JjX3JiID0gKF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0KXZlY19hbmQoKF9fdmVjdG9yIHVuc2lnbmVkIGludClzcmMsIG1h c2spOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3JjX2FnID0gdmVjX3NyKChf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmMsIGVpZ2h0KTsKLSsgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IGRzdF9yYiA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfYW5kKChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpZHN0LCBtYXNrKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGRzdF9hZyA9IHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZHN0LCBl aWdodCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBzID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpc3JjX3NjYWxlKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0IGRpZmZfcmIgPSB2ZWNfbXVsKHZlY19zdWIoc3JjX3JiLCBkc3RfcmIpLCBzKTsKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRpZmZfYWcgPSB2ZWNfbXVsKHZlY19zdWIoc3Jj X2FnLCBkc3RfYWcpLCBzKTsKLSsgICAgICAgIGRpZmZfcmIgPSB2ZWNfc3IoZGlmZl9yYiwgZWln aHQpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGRpZmYgPSB2ZWNfb3IoKF9fdmVj dG9yIHVuc2lnbmVkIGludClkaWZmX3JiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmVjX2FuZGMoKF9fdmVjdG9yIHVuc2lnbmVkIGludClkaWZmX2FnLCBt YXNrKSk7Ci0rICAgICAgICByZXR1cm4gdmVjX2FkZChkc3QsIChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKWRpZmYpOwotKyAgICB9Ci0rCi0rICAgIHN0YXRpYyB2b2lkIGJsaXRfcm93X3MzMl9ibGVu ZChTa1BNQ29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCBjb3VudCwgVThDUFUg YWxwaGEpIHsKLSsgICAgICAgIFNrQVNTRVJUKGFscGhhIDw9IDI1NSk7Ci0rICAgICAgICB1bnNp Z25lZCBzcmNfc2NhbGUgPSBTa0FscGhhMjU1VG8yNTYoYWxwaGEpOwotKyAgICAgICAgd2hpbGUg KGNvdW50ID49IDQpIHsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHMgPSB2 ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYyk7Ci0rICAgICAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBkID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilkc3Qp OwotKyAgICAgICAgICAgIHZlY194c3QoU2tQTUxlcnBfVlNYKHMsIGQsIHNyY19zY2FsZSksIDAs ICh1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgICAgIHNyYyArPSA0OyBkc3QgKz0gNDsg Y291bnQgLT0gNDsKLSsgICAgICAgIH0KLSsgICAgICAgIHdoaWxlIChjb3VudCAtLT4gMCkgewot KyAgICAgICAgICAgICpkc3QgPSBTa1BNTGVycCgqc3JjLCAqZHN0LCBzcmNfc2NhbGUpOwotKyAg ICAgICAgICAgIHNyYysrOwotKyAgICAgICAgICAgIGRzdCsrOwotKyAgICAgICAgfQotKyAgICB9 Ci0rCi0rICAgIC8vIFRoZSB2ZWNfKiB0cmFuc2NyaXB0aW9uIG9mIFNrQmxlbmRBUkdCMzJfU1NF Mjogc2NhbGUgc3JjIGJ5IGFhIGFuZCBkc3QgYnkKLSsgICAgLy8gU2tBbHBoYU11bEludjI1Nihz cmNBLCBhYSksIHRoZW4gYWRkIHRoZSBzcGxheWVkIGhhbHZlcy4KLSsgICAgc3RhdGljIGlubGlu ZSBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIFNrQmxlbmRBUkdCMzJfVlNYKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBkc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBhYSkgewotKyAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBTa0FscGhhMjU1VG8yNTYoYWEpOwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3JjX3NjYWxlID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpYWxwaGEpOwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQg aW50IG1hc2sgPSB2ZWNfc3BsYXRzKDB4MDBGRjAwRkZ1KTsKLSsgICAgICAgIGNvbnN0IF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0IGVpZ2h0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7 Ci0rCi0rICAgICAgICAvLyBkc3Rfc2NhbGUgPSBTa0FscGhhTXVsSW52MjU2KFNrR2V0UGFja2Vk QTMyKHNyYyksIGFscGhhKSwgcGVyIDMyLWJpdCBsYW5lLgotKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgaW50IHNyY0EgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludClzcmMsIHZlY19z cGxhdHMoMjR1KSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZHMgPSAoX192ZWN0 b3IgdW5zaWduZWQgaW50KXZlY19tdWwoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNyY0EsIHNy Y19zY2FsZSk7Ci0rICAgICAgICBkcyA9IHZlY19zdWIodmVjX3NwbGF0cygodW5zaWduZWQgaW50 KTB4RkZGRiksIGRzKTsKLSsgICAgICAgIGRzID0gdmVjX2FkZChkcywgdmVjX3NyKGRzLCB2ZWNf c3BsYXRzKDh1KSkpOwotKyAgICAgICAgZHMgPSB2ZWNfc3IoZHMsIHZlY19zcGxhdHMoOHUpKTsK LSsgICAgICAgIC8vIER1cGxpY2F0ZSB0aGUgbG93IDE2LWJpdCB3b3JkIG9mIGVhY2ggMzItYml0 IGxhbmUgaW50byBib3RoIGhhbHZlcwotKyAgICAgICAgLy8gKHRoZSBTU0Ugc2h1ZmZsZWxvL3No dWZmbGVoaSBfTU1fU0hVRkZMRSgyLDIsMCwwKSkuCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIGR1cCA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAg ICAwLDEsMCwxLCA0LDUsNCw1LCA4LDksOCw5LCAxMiwxMywxMiwxMwotKyAgICAgICAgfTsKLSsg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRzdF9zY2FsZSA9Ci0rICAgICAgICAgICAg KF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KWRzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192 ZWN0b3IgdW5zaWduZWQgY2hhcilkcywgZHVwKTsKLSsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IHNyY19yYiA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfYW5kKChfX3Zl Y3RvciB1bnNpZ25lZCBpbnQpc3JjLCBtYXNrKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IHNyY19hZyA9IHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpc3JjLCBlaWdo dCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBkc3RfcmIgPSAoX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQpdmVjX2FuZCgoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdCwgbWFzayk7 Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBkc3RfYWcgPSB2ZWNfc3IoKF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0KWRzdCwgZWlnaHQpOwotKwotKyAgICAgICAgc3JjX3JiID0gdmVj X211bChzcmNfcmIsIHNyY19zY2FsZSk7Ci0rICAgICAgICBzcmNfYWcgPSB2ZWNfbXVsKHNyY19h Zywgc3JjX3NjYWxlKTsKLSsgICAgICAgIGRzdF9yYiA9IHZlY19tdWwoZHN0X3JiLCBkc3Rfc2Nh bGUpOwotKyAgICAgICAgZHN0X2FnID0gdmVjX211bChkc3RfYWcsIGRzdF9zY2FsZSk7Ci0rCi0r ICAgICAgICBkc3RfcmIgPSB2ZWNfYWRkKHNyY19yYiwgZHN0X3JiKTsKLSsgICAgICAgIGRzdF9h ZyA9IHZlY19hZGQoc3JjX2FnLCBkc3RfYWcpOwotKwotKyAgICAgICAgZHN0X3JiID0gdmVjX3Ny KGRzdF9yYiwgZWlnaHQpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IG91dCA9IHZl Y19vcigoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdF9yYiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdmVjX2FuZGMoKF9fdmVjdG9yIHVuc2lnbmVkIGludClk c3RfYWcsIG1hc2spKTsKLSsgICAgICAgIHJldHVybiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilv dXQ7Ci0rICAgIH0KLSsKLSsgICAgc3RhdGljIHZvaWQgYmxpdF9yb3dfczMyYV9ibGVuZChTa1BN Q29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCBjb3VudCwgVThDUFUgYWxwaGEp IHsKLSsgICAgICAgIFNrQVNTRVJUKGFscGhhIDw9IDI1NSk7Ci0rICAgICAgICB3aGlsZSAoY291 bnQgPj0gNCkgewotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcyA9IHZlY194 bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIGQgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRzdCk7Ci0r ICAgICAgICAgICAgdmVjX3hzdChTa0JsZW5kQVJHQjMyX1ZTWChzLCBkLCBhbHBoYSksIDAsICh1 bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgICAgIHNyYyArPSA0OyBkc3QgKz0gNDsgY291 bnQgLT0gNDsKLSsgICAgICAgIH0KLSsgICAgICAgIHdoaWxlIChjb3VudCAtLT4gMCkgewotKyAg ICAgICAgICAgICpkc3QgPSBTa0JsZW5kQVJHQjMyKCpzcmMsICpkc3QsIGFscGhhKTsKLSsgICAg ICAgICAgICBzcmMrKzsKLSsgICAgICAgICAgICBkc3QrKzsKLSsgICAgICAgIH0KLSsgICAgfQot KwotICNlbHNlCi0gICAgIHN0YXRpYyB2b2lkIGJsaXRfcm93X3MzMl9ibGVuZChTa1BNQ29sb3Iq IGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCBjb3VudCwgVThDUFUgYWxwaGEpIHsKLSAg ICAgICAgIFNrQVNTRVJUKGFscGhhIDw9IDI1NSk7Ci1kaWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tp YS9zcmMvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcCBiL2dmeC9za2lhL3NraWEvc3JjL2NvcmUv U2tCbGl0dGVyX0FSR0IzMi5jcHAKLWluZGV4IGE3NTM4MDI3Yjg1ZC4uOTY2OTQzMTI5MmI2IDEw MDY0NAotLS0tIGEvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcAot KysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcAotQEAgLTQ4 MCw2ICs0ODAsMjc0IEBAIHN0YXRpYyBpbmxpbmUgU2tQTUNvbG9yIGJsZW5kX2xjZDE2X29wYXF1 ZShpbnQgc3JjUiwgaW50IHNyY0csIGludCBzcmNCLAotICAgICAgICAgfQotICAgICB9Ci0gCi0r I2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgICNpbmNs dWRlIDxhbHRpdmVjLmg+Ci0rCi0rICAgIC8vIE5hdGl2ZSBWU1gvQWx0aVZlYyBwb3J0IG9mIHRo ZSBTU0UyIExDRC1zdWJwaXhlbCBibGVuZCBibG9jayBiZWxvdy4KLSsgICAgLy8gU2FtZSBhbGdv cml0aG0g4oCUIG9ubHkgdGhlIGludHJpbnNpY3MgY2hhbmdlLiBUcmFuc2xhdGlvbnMgZm9sbG93 IHRoZQotKyAgICAvLyBHQ0MgcHBjX3dyYXBwZXJzIHBhdHRlcm4gKHZlY19tZXJnZWgvbCwgdmVj X3BhY2tzdSwgZXRjLikuCi0rCi0rICAgIC8vIFRoZSBmb2xsb3dpbmcgKGxlZnQpIHNoaWZ0cyBj YXVzZSB0aGUgdG9wIDUgYml0cyBvZiB0aGUgbWFzayBjb21wb25lbnRzIHRvCi0rICAgIC8vIGxp bmUgdXAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnRzIGluIGFuIFNrUE1Db2xvci4K LSsgICAgLy8gTm90ZSB0aGF0IHRoZSBtYXNrJ3MgUkdCMTYgb3JkZXIgbWF5IGRpZmZlciBmcm9t IHRoZSBTa1BNQ29sb3Igb3JkZXIuCi0rICAgICNkZWZpbmUgU0tfUjE2eDVfUjMyeDVfU0hJRlQg KFNLX1IzMl9TSElGVCAtIFNLX1IxNl9TSElGVCAtIFNLX1IxNl9CSVRTICsgNSkKLSsgICAgI2Rl ZmluZSBTS19HMTZ4NV9HMzJ4NV9TSElGVCAoU0tfRzMyX1NISUZUIC0gU0tfRzE2X1NISUZUIC0g U0tfRzE2X0JJVFMgKyA1KQotKyAgICAjZGVmaW5lIFNLX0IxNng1X0IzMng1X1NISUZUIChTS19C MzJfU0hJRlQgLSBTS19CMTZfU0hJRlQgLSBTS19CMTZfQklUUyArIDUpCi0rCi0rICAgIC8vIEVh Y2ggbWFjcm8gbXVzdCBhbHdheXMgcmV0dXJuIF9fdmVjdG9yIHVuc2lnbmVkIGludCBzbyB0aGUg c3Vycm91bmRpbmcKLSsgICAgLy8gdmVjX2FuZCBnZXRzIG1hdGNoaW5nIGVsZW1lbnQgdHlwZXMu IFRoZSBwYXNzLXRocm91Z2ggY2FzZSAoU0hJRlQgPT0gMCkKLSsgICAgLy8gc3RpbGwgbmVlZHMg YW4gZXhwbGljaXQgcmVpbnRlcnByZXQtY2FzdCBzaW5jZSBgbWFza2AgaXMgX192ZWN0b3IKLSsg ICAgLy8gdW5zaWduZWQgY2hhciBpbiBvdXIgZnVuY3Rpb24gc2lnbmF0dXJlLgotKyAgICAjaWYg U0tfUjE2eDVfUjMyeDVfU0hJRlQgPT0gMAotKyAgICAgICAgI2RlZmluZSBTa1BhY2tlZFIxNng1 VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSAoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCkpCi0rICAg ICNlbGlmIFNLX1IxNng1X1IzMng1X1NISUZUID4gMAotKyAgICAgICAgI2RlZmluZSBTa1BhY2tl ZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSBcCi0rICAgICAgICAgICAgdmVjX3NsKChfX3Zl Y3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpU0tfUjE2eDVf UjMyeDVfU0hJRlQpKQotKyAgICAjZWxzZQotKyAgICAgICAgI2RlZmluZSBTa1BhY2tlZFIxNng1 VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSBcCi0rICAgICAgICAgICAgdmVjX3NyKChfX3ZlY3RvciB1 bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKC1TS19SMTZ4NV9SMzJ4 NV9TSElGVCkpKQotKyAgICAjZW5kaWYKLSsKLSsgICAgI2lmIFNLX0cxNng1X0czMng1X1NISUZU ID09IDAKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1go eCkgKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpKQotKyAgICAjZWxpZiBTS19HMTZ4NV9HMzJ4 NV9TSElGVCA+IDAKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4 NV9WU1goeCkgXAotKyAgICAgICAgICAgIHZlY19zbCgoX192ZWN0b3IgdW5zaWduZWQgaW50KSh4 KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KVNLX0cxNng1X0czMng1X1NISUZUKSkKLSsgICAg I2Vsc2UKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1go eCkgXAotKyAgICAgICAgICAgIHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgaW50KSh4KSwgdmVj X3NwbGF0cygodW5zaWduZWQgaW50KSgtU0tfRzE2eDVfRzMyeDVfU0hJRlQpKSkKLSsgICAgI2Vu ZGlmCi0rCi0rICAgICNpZiBTS19CMTZ4NV9CMzJ4NV9TSElGVCA9PSAwCi0rICAgICAgICAjZGVm aW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfVlNYKHgpICgoX192ZWN0b3IgdW5zaWdu ZWQgaW50KSh4KSkKLSsgICAgI2VsaWYgU0tfQjE2eDVfQjMyeDVfU0hJRlQgPiAwCi0rICAgICAg ICAjZGVmaW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfVlNYKHgpIFwKLSsgICAgICAg ICAgICB2ZWNfc2woKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZlY19zcGxhdHMoKHVuc2ln bmVkIGludClTS19CMTZ4NV9CMzJ4NV9TSElGVCkpCi0rICAgICNlbHNlCi0rICAgICAgICAjZGVm aW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfVlNYKHgpIFwKLSsgICAgICAgICAgICB2 ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZlY19zcGxhdHMoKHVuc2lnbmVkIGlu dCkoLVNLX0IxNng1X0IzMng1X1NISUZUKSkpCi0rICAgICNlbmRpZgotKwotKyAgICBzdGF0aWMg X192ZWN0b3IgdW5zaWduZWQgY2hhciBibGVuZF9sY2QxNl92c3goX192ZWN0b3IgdW5zaWduZWQg Y2hhciYgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIGRzdCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBt YXNrLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIHNyY0EpIHsKLSsgICAgICAgIC8vIEdldCB0aGUgUixH LEIgb2YgZWFjaCAxNmJpdCBtYXNrIHBpeGVsLCBhbGwgYWxpZ25lZCB0byA1LWJpdCBwb3NpdGlv bnMuCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgciA9IHZlY19hbmQoU2tQYWNrZWRS MTZ4NVRvVW5tYXNrZWRSMzJ4NV9WU1gobWFzayksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgweDFGIDw8IFNLX1Iz Ml9TSElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBnID0gdmVjX2FuZChT a1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWChtYXNrKSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYg PDwgU0tfRzMyX1NISUZUKSkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGIgPSB2 ZWNfYW5kKFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfVlNYKG1hc2spLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGlu dCkoMHgxRiA8PCBTS19CMzJfU0hJRlQpKSk7Ci0rCi0rICAgICAgICAvLyBhIG5lZWRzIHRvIGJl IGVpdGhlciB0aGUgbWluIG9yIHRoZSBtYXggb2YgdGhlIExDRCBjb3ZlcmFnZXMsIGRlcGVuZGlu ZyBvbiBzcmNBIDwgZHN0QS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCByQSA9IHZl Y19zbChyLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX1IzMl9T SElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBnQSA9IHZlY19zbChnLCB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX0czMl9TSElGVCkpKTsK LSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBiQSA9IHZlY19zbChiLCB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX0IzMl9TSElGVCkpKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYU1pbiA9IHZlY19taW4odmVjX21pbigoX192ZWN0b3Ig dW5zaWduZWQgY2hhcilyQSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ0EpLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQg Y2hhciliQSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGFNYXggPSB2ZWNfbWF4 KHZlY19tYXgoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpckEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKWdBKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYkEpOwotKyAgICAgICAgLy8gc3JjQSBoYXMgYmVlbiBi aWFzZWQgdG8gWzAtMjU2XTsgY29tcGFyZSBzcmNBIGFnYWluc3QgKGRzdEErMSkuCi0rICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZHN0QSA9IHZlY19hbmQodmVjX2FkZCgoX192ZWN0b3Ig dW5zaWduZWQgaW50KWRzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMSA8PCBTS19BMzJfU0hJ RlQpKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVj X3NwbGF0cygodW5zaWduZWQgaW50KVNLX0EzMl9NQVNLKSk7Ci0rICAgICAgICBfX3ZlY3RvciBf X2Jvb2wgaW50IGFMVCA9IHZlY19jbXBsdCgoX192ZWN0b3Igc2lnbmVkIGludClzcmNBLCAoX192 ZWN0b3Igc2lnbmVkIGludClkc3RBKTsKLSsgICAgICAgIC8vIGEgPSAoYU1pbiAmIGFMVCkgfCAo YU1heCAmIH5hTFQpCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGEgPSB2ZWNfb3Io dmVjX2FuZChhTWluLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilhTFQpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19hbmRjKGFNYXgsIChfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKWFMVCkpOwotKwotKyAgICAgICAgLy8gUGFjayB0aGUgNCAxNi1iaXQgbWFz ayBwaXhlbHMgaW50byA0IDMyLWJpdCBwaXhlbHMgKG0wQSwgbTBSLCBtMEcsIG0wQiwgLi4uKS4K LSsgICAgICAgIG1hc2sgPSB2ZWNfb3IodmVjX29yKGEsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KXIpLAotKyAgICAgICAgICAgICAgICAgICAgICB2ZWNfb3IoKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpZywgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYikpOwotKwotKyAgICAgICAgLy8gSW50ZXJs ZWF2ZSBpbnRvIDE2LWJpdCB3b3Jkcy4KLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFza0xvID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZl Y19tZXJnZWgobWFzaywgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg bWFza0hpID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWwobWFzaywgemVyb3Mp OwotKwotKyAgICAgICAgLy8gVXBzY2FsZSAwLi4zMSAtPiAwLi4zMiBieSBhZGRpbmcgKG1hc2sg Pj4gNCkuCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2NCA9IHZlY19z cGxhdHMoKHVuc2lnbmVkIHNob3J0KTQpOwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsKLSsgICAgICAgIGNv bnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY1ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hv cnQpNSk7Ci0rICAgICAgICBtYXNrTG8gPSB2ZWNfYWRkKG1hc2tMbywgdmVjX3NyKG1hc2tMbywg djQpKTsKLSsgICAgICAgIG1hc2tIaSA9IHZlY19hZGQobWFza0hpLCB2ZWNfc3IobWFza0hpLCB2 NCkpOwotKwotKyAgICAgICAgLy8gTXVsdGlwbHkgYnkgc3JjQSBwZXIgMTYtYml0IGxhbmUuCi0r ICAgICAgICBtYXNrTG8gPSB2ZWNfbXVsKG1hc2tMbywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 KXNyY0EpOwotKyAgICAgICAgbWFza0hpID0gdmVjX211bChtYXNrSGksIChfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydClzcmNBKTsKLSsgICAgICAgIC8vIERpdmlkZSBieSAyNTYgKHJpZ2h0LXNoaWZ0 IDgpLgotKyAgICAgICAgbWFza0xvID0gdmVjX3NyKG1hc2tMbywgdjgpOwotKyAgICAgICAgbWFz a0hpID0gdmVjX3NyKG1hc2tIaSwgdjgpOwotKwotKyAgICAgICAgLy8gVW5wYWNrIGRzdCBpbnRv IDE2LWJpdCB3b3Jkcy4KLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBkc3RMbyA9IChf X3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlaChkc3QsIHplcm9zKTsKLSsgICAgICAgIF9f dmVjdG9yIHNpZ25lZCBzaG9ydCBkc3RIaSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21l cmdlbChkc3QsIHplcm9zKTsKLSsgICAgICAgIC8vIG1hc2sgPSAoc3JjIC0gZHN0KSAqIG1hc2sK LSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBzcmNTID0gKF9fdmVjdG9yIHNpZ25lZCBz aG9ydClzcmM7Ci0rICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgbUxvUyA9IHZlY19tdWwo KF9fdmVjdG9yIHNpZ25lZCBzaG9ydCltYXNrTG8sIHZlY19zdWIoc3JjUywgZHN0TG8pKTsKLSsg ICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBtSGlTID0gdmVjX211bCgoX192ZWN0b3Igc2ln bmVkIHNob3J0KW1hc2tIaSwgdmVjX3N1YihzcmNTLCBkc3RIaSkpOwotKyAgICAgICAgLy8gYXJp dGhtZXRpYyBzaGlmdCByaWdodCBieSA1Ci0rICAgICAgICBtTG9TID0gdmVjX3NyYShtTG9TLCAo X192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdjUpOwotKyAgICAgICAgbUhpUyA9IHZlY19zcmEobUhp UywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXY1KTsKLSsgICAgICAgIC8vIHJlc3VsdCA9IGRz dCArICgoc3JjIC0gZHN0KSAqIG1hc2sgPj4gNSkKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBz aG9ydCByZXNMbyA9IHZlY19hZGQoZHN0TG8sIG1Mb1MpOwotKyAgICAgICAgX192ZWN0b3Igc2ln bmVkIHNob3J0IHJlc0hpID0gdmVjX2FkZChkc3RIaSwgbUhpUyk7Ci0rICAgICAgICAvLyBQYWNr IDE2LWJpdCBzaWduZWQgLT4gOC1iaXQgdW5zaWduZWQgd2l0aCBzYXR1cmF0aW9uLgotKyAgICAg ICAgcmV0dXJuIHZlY19wYWNrc3UocmVzTG8sIHJlc0hpKTsKLSsgICAgfQotKwotKyAgICBzdGF0 aWMgX192ZWN0b3IgdW5zaWduZWQgY2hhciBibGVuZF9sY2QxNl9vcGFxdWVfdnN4KF9fdmVjdG9y IHVuc2lnbmVkIGNoYXImIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciYgZHN0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBtYXNrKSB7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBpbnQgciA9IHZlY19hbmQoU2tQYWNrZWRSMTZ4NVRvVW5tYXNrZWRSMzJ4NV9WU1gobWFzayks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygo dW5zaWduZWQgaW50KSgweDFGIDw8IFNLX1IzMl9TSElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGludCBnID0gdmVjX2FuZChTa1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZT WChtYXNrKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tfRzMyX1NISUZUKSkpOwotKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgaW50IGIgPSB2ZWNfYW5kKFNrUGFja2VkQjE2eDVUb1VubWFza2Vk QjMyeDVfVlNYKG1hc2spLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgxRiA8PCBTS19CMzJfU0hJRlQpKSk7Ci0r Ci0rICAgICAgICAvLyBPcGFxdWUgc3JjOiBhID0gbWF4KHIsIGcsIGIpIHNoaWZ0ZWQgdG8gYWxw aGEgbGFuZS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCByQSA9IHZlY19zbChyLCB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX1IzMl9TSElGVCkpKTsK LSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBnQSA9IHZlY19zbChnLCB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX0czMl9TSElGVCkpKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGludCBiQSA9IHZlY19zbChiLCB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX0IzMl9TSElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgYSA9IHZlY19tYXgodmVjX21heCgoX192ZWN0b3IgdW5zaWduZWQgY2hh cilyQSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ0EpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhciliQSk7Ci0rCi0rICAg ICAgICBtYXNrID0gdmVjX29yKHZlY19vcihhLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyKSwK LSsgICAgICAgICAgICAgICAgICAgICAgdmVjX29yKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWcs IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWIpKTsKLSsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFza0xvID0gKF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0KXZlY19tZXJnZWgobWFzaywgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgbWFza0hpID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWwobWFz aywgemVyb3MpOwotKwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjQg PSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk0KTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHY1ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNSk7Ci0rICAg ICAgICBtYXNrTG8gPSB2ZWNfYWRkKG1hc2tMbywgdmVjX3NyKG1hc2tMbywgdjQpKTsKLSsgICAg ICAgIG1hc2tIaSA9IHZlY19hZGQobWFza0hpLCB2ZWNfc3IobWFza0hpLCB2NCkpOwotKwotKyAg ICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IGRzdExvID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9y dCl2ZWNfbWVyZ2VoKGRzdCwgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0 IGRzdEhpID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKGRzdCwgemVyb3MpOwot KyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHNyY1MgPSAoX192ZWN0b3Igc2lnbmVkIHNo b3J0KXNyYzsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBtTG9TID0gdmVjX211bCgo X192ZWN0b3Igc2lnbmVkIHNob3J0KW1hc2tMbywgdmVjX3N1YihzcmNTLCBkc3RMbykpOwotKyAg ICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IG1IaVMgPSB2ZWNfbXVsKChfX3ZlY3RvciBzaWdu ZWQgc2hvcnQpbWFza0hpLCB2ZWNfc3ViKHNyY1MsIGRzdEhpKSk7Ci0rICAgICAgICBtTG9TID0g dmVjX3NyYShtTG9TLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdjUpOwotKyAgICAgICAgbUhp UyA9IHZlY19zcmEobUhpUywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXY1KTsKLSsgICAgICAg IF9fdmVjdG9yIHNpZ25lZCBzaG9ydCByZXNMbyA9IHZlY19hZGQoZHN0TG8sIG1Mb1MpOwotKyAg ICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHJlc0hpID0gdmVjX2FkZChkc3RIaSwgbUhpUyk7 Ci0rICAgICAgICByZXR1cm4gdmVjX3BhY2tzdShyZXNMbywgcmVzSGkpOwotKyAgICB9Ci0rCi0r ICAgIHZvaWQgYmxpdF9yb3dfbGNkMTYoU2tQTUNvbG9yIGRzdFtdLCBjb25zdCB1aW50MTZfdCBt YXNrW10sIFNrQ29sb3Igc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwg U2tQTUNvbG9yKSB7Ci0rICAgICAgICBpZiAod2lkdGggPD0gMCkgewotKyAgICAgICAgICAgIHJl dHVybjsKLSsgICAgICAgIH0KLSsgICAgICAgIGludCBzcmNBID0gU2tDb2xvckdldEEoc3JjKTsK LSsgICAgICAgIGludCBzcmNSID0gU2tDb2xvckdldFIoc3JjKTsKLSsgICAgICAgIGludCBzcmNH ID0gU2tDb2xvckdldEcoc3JjKTsKLSsgICAgICAgIGludCBzcmNCID0gU2tDb2xvckdldEIoc3Jj KTsKLSsgICAgICAgIHNyY0EgPSBTa0FscGhhMjU1VG8yNTYoc3JjQSk7Ci0rCi0rICAgICAgICBp ZiAod2lkdGggPj0gNCkgewotKyAgICAgICAgICAgIFNrQVNTRVJUKFNrSXNBbGlnbjQoKHVpbnRw dHJfdCkgZHN0KSk7Ci0rICAgICAgICAgICAgd2hpbGUgKCFTa0lzQWxpZ24xNigodWludHB0cl90 KSBkc3QpKSB7Ci0rICAgICAgICAgICAgICAgICpkc3QgPSBibGVuZF9sY2QxNihzcmNBLCBzcmNS LCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFzayk7Ci0rICAgICAgICAgICAgICAgIG1hc2srKzsgZHN0 Kys7IHdpZHRoLS07Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgIC8vIFJlcGxpY2F0 ZSBzb3VyY2UgYWNyb3NzIDQgbGFuZXMsIHRoZW4gdW5wYWNrIGxvdyBoYWxmIHRvIGludGVybGVh dmVkIDE2LWJpdC4KLSsgICAgICAgICAgICB1aW50MzJfdCBzcmNQTSA9IFNrUGFja0FSR0IzMigw eEZGLCBzcmNSLCBzcmNHLCBzcmNCKTsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgc3JjX3YzMiA9IHZlY19zcGxhdHMoc3JjUE0pOwotKyAgICAgICAgICAgIGNvbnN0IF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwot KyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3JjX3YgPSB2ZWNfbWVyZ2VoKChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKXNyY192MzIsIHplcm9zKTsKLSsgICAgICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHNyY0FfdiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19z cGxhdHMoKHVuc2lnbmVkIHNob3J0KXNyY0EpOwotKwotKyAgICAgICAgICAgIHdoaWxlICh3aWR0 aCA+PSA0KSB7Ci0rICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0X3Yg PSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRzdCk7Ci0rICAgICAgICAgICAgICAg IC8vIExvYWQgOCBieXRlcyAoNHggdWludDE2IG1hc2spIGludG8gbG93IGhhbGYgb2YgdmVjdG9y LgotKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtbG87Ci0rICAgICAgICAgICAgICAgIG1lbWNw eSgmbWxvLCBtYXNrLCBzaXplb2YobWxvKSk7Ci0rICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGxvbmcgbG9uZyBtYXNrX2xvdyA9Ci0rICAgICAgICAgICAgICAgICAgICAoX192ZWN0 b3IgdW5zaWduZWQgbG9uZyBsb25nKXttbG8sIDB9OwotKyAgICAgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIG1hc2tfdiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW1hc2tfbG93 OwotKwotKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBhbGwgbWFzayB2YWx1ZXMgYXJlIHpl cm8gKHNraXAgYmxlbmRpbmcgaWYgc28pLgotKyAgICAgICAgICAgICAgICBpZiAoIXZlY19hbGxf ZXEoKF9fdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyltYXNrX3YsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpMCkpKSB7Ci0r ICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgbG93IDggYnl0ZXMgb2YgbWFzayAoNHggdWlu dDE2KSBpbnRvIDR4IHVpbnQzMiAod2l0aCB6ZXJvcykuCi0rICAgICAgICAgICAgICAgICAgICAv LyBaZXJvLWV4dGVuZCB0aGUgNCB1aW50MTYgbWFza3MgdG8gNCB1aW50MzIgKDE2LWJpdC1ncmFu dWxhcml0eQotKyAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UsIG1hdGNoaW5nIFNTRTIncyBf bW1fdW5wYWNrbG9fZXBpMTYpOyBhIGNoYXItZ3JhbnVsYXJpdHkKLSsgICAgICAgICAgICAgICAg ICAgIC8vIG1lcmdlIHdvdWxkIGJ5dGUtc3RyZXRjaCB0aGUgUkdCNTY1IHZhbHVlIGFuZCBtaXNw bGFjZSB0aGUgc2hpZnRzLgotKyAgICAgICAgICAgICAgICAgICAgbWFza192ID0gKF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpbWFza192 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl6ZXJvcyk7Ci0rICAgICAgICAgICAg ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJlc3VsdCA9Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgYmxlbmRfbGNkMTZfdnN4KHNyY192LCBkc3RfdiwgbWFza192LCBzcmNBX3YpOwot KyAgICAgICAgICAgICAgICAgICAgdmVjX3hzdChyZXN1bHQsIDAsICh1bnNpZ25lZCBjaGFyKilk c3QpOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgIGRzdCArPSA0OyBtYXNr ICs9IDQ7IHdpZHRoIC09IDQ7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKwotKyAgICAg ICAgd2hpbGUgKHdpZHRoID4gMCkgewotKyAgICAgICAgICAgICpkc3QgPSBibGVuZF9sY2QxNihz cmNBLCBzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFzayk7Ci0rICAgICAgICAgICAgbWFzaysr OyBkc3QrKzsgd2lkdGgtLTsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIGJsaXRf cm93X2xjZDE2X29wYXF1ZShTa1BNQ29sb3IgZHN0W10sIGNvbnN0IHVpbnQxNl90IG1hc2tbXSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDb2xvciBzcmMsIGludCB3aWR0aCwg U2tQTUNvbG9yIG9wYXF1ZURzdCkgewotKyAgICAgICAgaWYgKHdpZHRoIDw9IDApIHsKLSsgICAg ICAgICAgICByZXR1cm47Ci0rICAgICAgICB9Ci0rICAgICAgICBpbnQgc3JjUiA9IFNrQ29sb3JH ZXRSKHNyYyk7Ci0rICAgICAgICBpbnQgc3JjRyA9IFNrQ29sb3JHZXRHKHNyYyk7Ci0rICAgICAg ICBpbnQgc3JjQiA9IFNrQ29sb3JHZXRCKHNyYyk7Ci0rCi0rICAgICAgICBpZiAod2lkdGggPj0g NCkgewotKyAgICAgICAgICAgIFNrQVNTRVJUKFNrSXNBbGlnbjQoKHVpbnRwdHJfdCkgZHN0KSk7 Ci0rICAgICAgICAgICAgd2hpbGUgKCFTa0lzQWxpZ24xNigodWludHB0cl90KSBkc3QpKSB7Ci0r ICAgICAgICAgICAgICAgICpkc3QgPSBibGVuZF9sY2QxNl9vcGFxdWUoc3JjUiwgc3JjRywgc3Jj QiwgKmRzdCwgKm1hc2ssIG9wYXF1ZURzdCk7Ci0rICAgICAgICAgICAgICAgIG1hc2srKzsgZHN0 Kys7IHdpZHRoLS07Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgIHVpbnQzMl90IHNy Y1BNID0gU2tQYWNrQVJHQjMyKDB4RkYsIHNyY1IsIHNyY0csIHNyY0IpOwotKyAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGludCBzcmNfdjMyID0gdmVjX3NwbGF0cyhzcmNQTSk7Ci0rICAg ICAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvcyA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIGNoYXIpMCk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBz cmNfdiA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpc3JjX3YzMiwgemVyb3Mp OwotKwotKyAgICAgICAgICAgIHdoaWxlICh3aWR0aCA+PSA0KSB7Ci0rICAgICAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0X3YgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVk IGNoYXIqKWRzdCk7Ci0rICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1sbzsKLSsgICAgICAgICAg ICAgICAgbWVtY3B5KCZtbG8sIG1hc2ssIHNpemVvZihtbG8pKTsKLSsgICAgICAgICAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIG1hc2tfbG93ID0KLSsgICAgICAgICAgICAgICAg ICAgIChfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpe21sbywgMH07Ci0rICAgICAgICAgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFza192ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpbWFza19sb3c7Ci0rCi0rICAgICAgICAgICAgICAgIGlmICghdmVjX2FsbF9lcSgoX192ZWN0 b3IgdW5zaWduZWQgbG9uZyBsb25nKW1hc2tfdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZykwKSkpIHsKLSsgICAgICAgICAg ICAgICAgICAgIC8vIFplcm8tZXh0ZW5kIHRoZSA0IHVpbnQxNiBtYXNrcyB0byA0IHVpbnQzMiAo MTYtYml0LWdyYW51bGFyaXR5Ci0rICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSwgbWF0Y2hp bmcgU1NFMidzIF9tbV91bnBhY2tsb19lcGkxNik7IGEgY2hhci1ncmFudWxhcml0eQotKyAgICAg ICAgICAgICAgICAgICAgLy8gbWVyZ2Ugd291bGQgYnl0ZS1zdHJldGNoIHRoZSBSR0I1NjUgdmFs dWUgYW5kIG1pc3BsYWNlIHRoZSBzaGlmdHMuCi0rICAgICAgICAgICAgICAgICAgICBtYXNrX3Yg PSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCltYXNrX3YsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXplcm9zKTsKLSsg ICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmVzdWx0ID0KLSsgICAg ICAgICAgICAgICAgICAgICAgICBibGVuZF9sY2QxNl9vcGFxdWVfdnN4KHNyY192LCBkc3Rfdiwg bWFza192KTsKLSsgICAgICAgICAgICAgICAgICAgIHZlY194c3QocmVzdWx0LCAwLCAodW5zaWdu ZWQgY2hhciopZHN0KTsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBkc3Qg Kz0gNDsgbWFzayArPSA0OyB3aWR0aCAtPSA0OwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0K LSsKLSsgICAgICAgIHdoaWxlICh3aWR0aCA+IDApIHsKLSsgICAgICAgICAgICAqZHN0ID0gYmxl bmRfbGNkMTZfb3BhcXVlKHNyY1IsIHNyY0csIHNyY0IsICpkc3QsICptYXNrLCBvcGFxdWVEc3Qp OwotKyAgICAgICAgICAgIG1hc2srKzsgZHN0Kys7IHdpZHRoLS07Ci0rICAgICAgICB9Ci0rICAg IH0KLSsKLSAjZWxpZiBkZWZpbmVkKFNLX0FSTV9IQVNfTkVPTikKLSAgICAgI2luY2x1ZGUgPGFy bV9uZW9uLmg+Ci0gCi1kaWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1h cFByb2NTdGF0ZV9vcHRzLmggYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0 YXRlX29wdHMuaAotaW5kZXggNmQwMWEyZjQ0NThmLi44N2IxNjBlZDdhMWUgMTAwNjQ0Ci0tLS0g YS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHMuaAotKysrIGIv Z2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzLmgKLUBAIC0yOSw2 ICsyOSw4IEBACi0gICAgICNpbmNsdWRlIDxsYXN4aW50cmluLmg+Ci0gI2VsaWYgU0tfQ1BVX0xT WF9MRVZFTCA+PSBTS19DUFVfTFNYX0xFVkVMX0xTWAotICAgICAjaW5jbHVkZSA8bHN4aW50cmlu Lmg+Ci0rI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAg ICNpbmNsdWRlIDxhbHRpdmVjLmg+Ci0gI2VuZGlmCi0gCi0gbmFtZXNwYWNlIFNLX09QVFNfTlMg ewotQEAgLTI2MCw2ICsyNjIsMTY4IEBAIHN0YXRpYyB2b2lkIGRlY29kZV9wYWNrZWRfY29vcmRp bmF0ZXNfYW5kX3dlaWdodChVMzIgcGFja2VkLCBPdXQqIHYwLCBPdXQqIHYxLCBPCi0gICAgICAg ICB9Ci0gICAgIH0KLSAKLSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19W U1hfXykKLSsKLSsgICAgLy8gSGVscGVyOiBzY2FsYXIgdWludDMyX3QgLT4gMTYtYnl0ZSB2ZWN0 b3Igd2l0aCB4IGluIGxvdyAzMiBiaXRzLCB6ZXJvIGVsc2V3aGVyZS4KLSsgICAgLy8gRXF1aXZh bGVudCBvZiB4ODYncyBfbW1fY3Z0c2kzMl9zaTEyOC4KLSsgICAgc3RhdGljIGlubGluZSBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHZzeF9jdnRfdTMyX3RvX3ZlYyh1aW50MzJfdCB4KSB7Ci0rICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgdiA9IChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpe3gs IDAsIDAsIDB9OwotKyAgICAgICAgcmV0dXJuIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXY7Ci0r ICAgIH0KLSsKLSsgICAgLy8gSGVscGVyOiBQUEM2NCBWU1ggZXF1aXZhbGVudCBvZiB4ODYncyBf bW1fbWFkZHVic19lcGkxNi4gTXVsdGlwbGllcyBwYWlycyBvZgotKyAgICAvLyAodW5zaWduZWQg Ynl0ZSwgc2lnbmVkIGJ5dGUpIGFuZCBhZGRzIGFkamFjZW50IHBhaXJzIHRvIHByb2R1Y2UgMTYt Yml0IHNpZ25lZAotKyAgICAvLyB2YWx1ZXMsIHNhdHVyYXRpbmcgdG8gaW50MTYuIEltcGxlbWVu dGF0aW9uIHRyYW5zY3JpYmVzIHRoZSBHQ0MgcHBjX3dyYXBwZXJzCi0rICAgIC8vIHRtbWludHJp bi5oIHNlcXVlbmNlIGZvciBlbmRpYW5uZXNzIGNvcnJlY3RuZXNzIG9uIExFIFBQQzY0LgotKyAg ICBzdGF0aWMgaW5saW5lIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCB2c3hfbWFkZHVic19lcGkxNihf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIEEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIGNoYXIgQikgewot KyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IF9fZmYgPSB2ZWNfc3BsYXRzKChzaWduZWQg c2hvcnQpMHgwMEZGKTsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0MgPSB2ZWNf YW5kKHZlY191bnBhY2toKChfX3ZlY3RvciBzaWduZWQgY2hhcilBKSwgX19mZik7Ci0rICAgICAg ICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgX19EID0gdmVjX2FuZCh2ZWNfdW5wYWNrbCgoX192ZWN0 b3Igc2lnbmVkIGNoYXIpQSksIF9fZmYpOwotKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0 IF9fRSA9IHZlY191bnBhY2toKEIpOwotKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IF9f RiA9IHZlY191bnBhY2tsKEIpOwotKyAgICAgICAgX19DID0gdmVjX211bChfX0MsIF9fRSk7Ci0r ICAgICAgICBfX0QgPSB2ZWNfbXVsKF9fRCwgX19GKTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgX19vZGRzICA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAg ICAgICAgICAwLDEsIDQsNSwgOCw5LCAxMiwxMywgIDE2LDE3LCAyMCwyMSwgMjQsMjUsIDI4LDI5 Ci0rICAgICAgICB9OwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfX2V2 ZW5zID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgICAgIDIsMywgNiw3LCAx MCwxMSwgMTQsMTUsICAxOCwxOSwgMjIsMjMsIDI2LDI3LCAzMCwzMQotKyAgICAgICAgfTsKLSsg ICAgICAgIF9fRSA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX3Blcm0oKF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIpX19DLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilfX0QsIF9fb2Rkcyk7Ci0rICAgICAgICBf X0YgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKV9fQywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpX19ELCBfX2V2ZW5zKTsKLSsgICAgICAgIHJldHVybiB2 ZWNfYWRkcyhfX0UsIF9fRik7Ci0rICAgIH0KLSsKLSsgICAgLypub3Qgc3RhdGljKi8gaW5saW5l Ci0rICAgIHZvaWQgUzMyX2FscGhhX0QzMl9maWx0ZXJfRFgoY29uc3QgU2tCaXRtYXBQcm9jU3Rh dGUmIHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qq IHh5LCBpbnQgY291bnQsIHVpbnQzMl90KiBjb2xvcnMpIHsKLSsgICAgICAgIFNrQVNTRVJUKGNv dW50ID4gMCAmJiBjb2xvcnMgIT0gbnVsbHB0cik7Ci0rICAgICAgICBTa0FTU0VSVChzLmZCaWxl cnApOwotKyAgICAgICAgU2tBU1NFUlQoa04zMl9Ta0NvbG9yVHlwZSA9PSBzLmZQaXhtYXAuY29s b3JUeXBlKCkpOwotKyAgICAgICAgU2tBU1NFUlQocy5mQWxwaGFTY2FsZSA8PSAyNTYpOwotKwot KyAgICAgICAgLy8gaW50ZXJwb2xhdGVfaW5feCgpIGlzIHRoZSBjcnV4IG9mIHRoZSBpbXBsZW1l bnRhdGlvbiwgaW50ZXJwb2xhdGluZyBpbiBYCi0rICAgICAgICAvLyBmb3IgdXAgdG8gdHdvIG91 dHB1dCBwaXhlbHMgKEEgYW5kIEIpIHVzaW5nIHZzeF9tYWRkdWJzX2VwaTE2KCkuCi0rICAgICAg ICBhdXRvIGludGVycG9sYXRlX2luX3ggPSBbXSh1aW50MzJfdCBBMCwgdWludDMyX3QgQTEsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCMCwgdWludDMyX3Qg QjEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQg Y2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0cykgewotKyAgICAgICAgICAgIC8vIF9tbV91bnBhY2ts b19lcGk4KF9tbV9jdnRzaTMyX3NpMTI4KEEwKSwgX21tX2N2dHNpMzJfc2kxMjgoQTEpKQotKyAg ICAgICAgICAgIC8vID0gdmVjX21lcmdlaCBvbiB1Y2hhciwgc2luY2UgdGhlIGlucHV0IHZlY3Rv cnMgaGF2ZSBvbmx5IHRoZSBsb3cgMzIgYml0cyBzZXQuCi0rICAgICAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciBpbnRlcmxhY2VkX0EgPSB2ZWNfbWVyZ2VoKHZzeF9jdnRfdTMyX3RvX3Zl YyhBMCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2c3hfY3Z0X3UzMl90b192ZWMoQTEpKTsKLSsgICAgICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIGludGVybGFjZWRfQiA9IHZlY19tZXJnZWgodnN4X2N2dF91MzJf dG9fdmVjKEIwKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZzeF9jdnRfdTMyX3RvX3ZlYyhCMSkpOwotKyAgICAgICAgICAg IC8vIF9tbV91bnBhY2tsb19lcGk2NCA9IHZlY19tZXJnZWggb24gbG9uZyBsb25nLgotKyAgICAg ICAgICAgIF9fdmVjdG9yIGxvbmcgbG9uZyBsbzY0ID0gdmVjX21lcmdlaCgoX192ZWN0b3IgbG9u ZyBsb25nKWludGVybGFjZWRfQSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKF9fdmVjdG9yIGxvbmcgbG9uZylpbnRlcmxhY2VkX0IpOwotKyAgICAg ICAgICAgIHJldHVybiB2c3hfbWFkZHVic19lcGkxNigoX192ZWN0b3IgdW5zaWduZWQgY2hhcils bzY0LCBpbnRlcmxhY2VkX3hfd2VpZ2h0cyk7Ci0rICAgICAgICB9OwotKwotKyAgICAgICAgLy8g SW50ZXJwb2xhdGUge0EwLi5BM30gLS0+IG91dHB1dCBwaXhlbCBBLCBhbmQge0IwLi5CM30gLS0+ IG91dHB1dCBwaXhlbCBCLgotKyAgICAgICAgLy8gUmV0dXJucyB0d28gcGl4ZWxzLCB3aXRoIGVh Y2ggY29sb3IgY2hhbm5lbCBpbiBhIDE2LWJpdCBsYW5lIG9mIHRoZSByZXN1bHQuCi0rICAgICAg ICBhdXRvIGludGVycG9sYXRlX2luX3hfYW5kX3kgPSBbJl0odWludDMyX3QgQTAsIHVpbnQzMl90 IEExLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IEEyLCB1aW50MzJfdCBBMywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBCMCwgdWludDMyX3QgQjEsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgQjIsIHVpbnQzMl90IEIzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIGludGVy bGFjZWRfeF93ZWlnaHRzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB3eSkgewotKyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCB0b3AgPSBp bnRlcnBvbGF0ZV9pbl94KEEwLEExLCBCMCxCMSwgaW50ZXJsYWNlZF94X3dlaWdodHMpOwotKyAg ICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBib3QgPSBpbnRlcnBvbGF0ZV9pbl94KEEy LEEzLCBCMixCMywgaW50ZXJsYWNlZF94X3dlaWdodHMpOwotKwotKyAgICAgICAgICAgIC8vIDE2 KnRvcCArIChib3QtdG9wKSp3eSwgbWlycm9yaW5nIHRoZSBTU0UyIGZvcm0gKHNhdmVzIG9uZSBt dWx0aXBseSB2cy4gdGhlCi0rICAgICAgICAgICAgLy8gc3RyYWlnaHRmb3J3YXJkIHRvcCooMTYt d3kpICsgYm90Knd5KS4KLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2NCA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTQpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHNp Z25lZCBzaG9ydCB3eV92ID0gdmVjX3NwbGF0cygoc2lnbmVkIHNob3J0KXd5KTsKLSsgICAgICAg ICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgcHggPSB2ZWNfYWRkKHZlY19zbCh0b3AsIHY0KSwg dmVjX211bCh2ZWNfc3ViKGJvdCwgdG9wKSwgd3lfdikpOwotKwotKyAgICAgICAgICAgIC8vIFNj YWxlIGRvd24gYnkgdG90YWwgbWF4IHdlaWdodCAxNngxNiA9IDI1Ni4KLSsgICAgICAgICAgICBw eCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dClweCwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCkpOwotKwotKyAgICAgICAgICAgIC8v IFNjYWxlIGJ5IGFscGhhIGlmIG5lZWRlZC4KLSsgICAgICAgICAgICBpZiAocy5mQWxwaGFTY2Fs ZSA8IDI1NikgewotKyAgICAgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgc2NhbGVf diA9IHZlY19zcGxhdHMoKHNpZ25lZCBzaG9ydClzLmZBbHBoYVNjYWxlKTsKLSsgICAgICAgICAg ICAgICAgcHggPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19zcigoX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQpdmVjX211bChweCwgc2NhbGVfdiksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCkp OwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICByZXR1cm4gcHg7Ci0rICAgICAgICB9Owot KwotKyAgICAgICAgLy8gV2UncmUgaW4gX0RYIG1vZGUgaGVyZSwgc28gd2UncmUgb25seSB2YXJ5 aW5nIGluIFguCi0rICAgICAgICAvLyBUaGF0IG1lYW5zIHRoZSBmaXJzdCBlbnRyeSBvZiB4eSBp cyBvdXIgY29uc3RhbnQgcGFpciBvZiBZIGNvb3JkaW5hdGVzIGFuZCB3ZWlnaHQgaW4gWS4KLSsg ICAgICAgIGludCB5MCwgeTEsIHd5OwotKyAgICAgICAgZGVjb2RlX3BhY2tlZF9jb29yZGluYXRl c19hbmRfd2VpZ2h0KCp4eSsrLCAmeTAsICZ5MSwgJnd5KTsKLSsKLSsgICAgICAgIGF1dG8gcm93 MCA9IChjb25zdCB1aW50MzJfdCopKChjb25zdCB1aW50OF90KilzLmZQaXhtYXAuYWRkcigpICsg eTAgKiBzLmZQaXhtYXAucm93Qnl0ZXMoKSksCi0rICAgICAgICAgICAgIHJvdzEgPSAoY29uc3Qg dWludDMyX3QqKSgoY29uc3QgdWludDhfdCopcy5mUGl4bWFwLmFkZHIoKSArIHkxICogcy5mUGl4 bWFwLnJvd0J5dGVzKCkpOwotKwotKyAgICAgICAgd2hpbGUgKGNvdW50ID49IDQpIHsKLSsgICAg ICAgICAgICAvLyBXZSBjYW4gcmVhbGx5IGdldCBnb2luZywgbG9hZGluZyA0IFgtcGFpcnMgYXQg YSB0aW1lIHRvIHByb2R1Y2UgNCBvdXRwdXQgcGl4ZWxzLgotKyAgICAgICAgICAgIGludCB4MFs0 XSwKLSsgICAgICAgICAgICAgICAgeDFbNF07Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgaW50IHd4OwotKwotKyAgICAgICAgICAgIC8vIGRlY29kZV9wYWNrZWRfY29vcmRpbmF0ZXNf YW5kX3dlaWdodCgpLCA0eC4KLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgcGFj a2VkID0gKF9fdmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNo YXIqKXh5KTsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgeDBfdiA9IHZlY19z cihwYWNrZWQsIHZlY19zcGxhdHMoMTh1KSk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgaW50IHgxX3YgPSB2ZWNfYW5kKHBhY2tlZCwgdmVjX3NwbGF0cygweDNmZmZ1KSk7Ci0rICAg ICAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcil4MF92LCAwLCAodW5zaWdu ZWQgY2hhciopeDApOwotKyAgICAgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpeDFfdiwgMCwgKHVuc2lnbmVkIGNoYXIqKXgxKTsKLSsgICAgICAgICAgICB3eCA9IHZlY19h bmQodmVjX3NyKHBhY2tlZCwgdmVjX3NwbGF0cygxNHUpKSwgdmVjX3NwbGF0cygweGZ1KSk7ICAv LyBbMCwxNV0KLSsKLSsgICAgICAgICAgICAvLyBTcGxhdCBlYWNoIHggd2VpZ2h0IDR4IChmb3Ig ZWFjaCBjb2xvciBjaGFubmVsKSBhcyB3ciBmb3IgcGl4ZWxzIG9uIHRoZSByaWdodCBhdCB4MSwK LSsgICAgICAgICAgICAvLyBhbmQgc2l4dGVlbiBtaW51cyB0aGF0IGFzIHdsIGZvciBwaXhlbHMg b24gdGhlIGxlZnQgYXQgeDAuCi0rICAgICAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQg Y2hhciB3cl9tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgICAgICAg ICAwLDAsMCwwLCA0LDQsNCw0LCA4LDgsOCw4LCAxMiwxMiwxMiwxMgotKyAgICAgICAgICAgIH07 Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB3ciA9IHZlY19wZXJtKChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKXd4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpd3gsIHdyX21hc2spOwot KyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgd2wgPSB2ZWNfc3ViKHZlY19zcGxh dHMoKHVuc2lnbmVkIGNoYXIpMTYpLCB3cik7Ci0rCi0rICAgICAgICAgICAgLy8gSW50ZXJsYWNl IHdsIGFuZCB3ciBmb3IgdnN4X21hZGR1YnNfZXBpMTYoKS4KLSsgICAgICAgICAgICBfX3ZlY3Rv ciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0c19BQiA9IChfX3ZlY3RvciBzaWduZWQg Y2hhcil2ZWNfbWVyZ2VoKHdsLCB3cik7Ci0rICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIGNo YXIgaW50ZXJsYWNlZF94X3dlaWdodHNfQ0QgPSAoX192ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX21l cmdlbCh3bCwgd3IpOwotKwotKyAgICAgICAgICAgIGVudW0geyBBLEIsQyxEIH07Ci0rCi0rICAg ICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IEFCID0gaW50ZXJwb2xhdGVfaW5feF9hbmRf eSgKLSsgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBbQV1dLCByb3cwW3gxW0FdXSwgcm93MVt4 MFtBXV0sIHJvdzFbeDFbQV1dLAotKyAgICAgICAgICAgICAgICAgICAgcm93MFt4MFtCXV0sIHJv dzBbeDFbQl1dLCByb3cxW3gwW0JdXSwgcm93MVt4MVtCXV0sCi0rICAgICAgICAgICAgICAgICAg ICBpbnRlcmxhY2VkX3hfd2VpZ2h0c19BQiwgd3kpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHNp Z25lZCBzaG9ydCBDRCA9IGludGVycG9sYXRlX2luX3hfYW5kX3koCi0rICAgICAgICAgICAgICAg ICAgICByb3cwW3gwW0NdXSwgcm93MFt4MVtDXV0sIHJvdzFbeDBbQ11dLCByb3cxW3gxW0NdXSwK LSsgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBbRF1dLCByb3cwW3gxW0RdXSwgcm93MVt4MFtE XV0sIHJvdzFbeDFbRF1dLAotKyAgICAgICAgICAgICAgICAgICAgaW50ZXJsYWNlZF94X3dlaWdo dHNfQ0QsIHd5KTsKLSsKLSsgICAgICAgICAgICAvLyBQYWNrIDE2LWJpdCBzaWduZWQgLT4gOC1i aXQgdW5zaWduZWQgd2l0aCBzYXR1cmF0aW9uLCB3cml0ZSA0IHBpeGVscy4KLSsgICAgICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBhY2tlZF9vdXQgPSB2ZWNfcGFja3N1KEFCLCBDRCk7 Ci0rICAgICAgICAgICAgdmVjX3hzdChwYWNrZWRfb3V0LCAwLCAodW5zaWduZWQgY2hhciopY29s b3JzKTsKLSsgICAgICAgICAgICB4eSAgICAgKz0gNDsKLSsgICAgICAgICAgICBjb2xvcnMgKz0g NDsKLSsgICAgICAgICAgICBjb3VudCAgLT0gNDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIHdo aWxlIChjb3VudCAtLT4gMCkgewotKyAgICAgICAgICAgIC8vIFNhbWUgZmxvdyBhcyB0aGUgY291 bnQgPj0gNCBsb29wLCBidXQgd3JpdGluZyBvbmUgcGl4ZWwuCi0rICAgICAgICAgICAgaW50IHgw LCB4MSwgd3g7Ci0rICAgICAgICAgICAgZGVjb2RlX3BhY2tlZF9jb29yZGluYXRlc19hbmRfd2Vp Z2h0KCp4eSsrLCAmeDAsICZ4MSwgJnd4KTsKLSsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIHdyID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcil3eCk7Ci0rICAgICAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB3bCA9IHZlY19zdWIodmVjX3NwbGF0cygodW5zaWdu ZWQgY2hhcikxNiksIHdyKTsKLSsgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBpbnRl cmxhY2VkX3hfd2VpZ2h0cyA9IChfX3ZlY3RvciBzaWduZWQgY2hhcil2ZWNfbWVyZ2VoKHdsLCB3 cik7Ci0rCi0rICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IEF2ID0gaW50ZXJwb2xh dGVfaW5feF9hbmRfeSgKLSsgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBdLCByb3cwW3gxXSwg cm93MVt4MF0sIHJvdzFbeDFdLAotKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwKLSsg ICAgICAgICAgICAgICAgICAgIGludGVybGFjZWRfeF93ZWlnaHRzLCB3eSk7Ci0rICAgICAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBwYWNrZWRfb3V0ID0gdmVjX3BhY2tzdShBdiwKLSsg ICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciBzaWduZWQgc2hvcnQpKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpezB9KTsKLSsgICAgICAgICAgICAqY29sb3JzKysgPSAoKF9fdmVjdG9yIHVuc2ln bmVkIGludClwYWNrZWRfb3V0KVswXTsKLSsgICAgICAgIH0KLSsgICAgfQotKwotICNlbGlmIFNL X0NQVV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZFTF9MQVNYCi0gICAgIC8qbm90IHN0YXRp YyovIGlubGluZQotICAgICB2b2lkIFMzMl9hbHBoYV9EMzJfZmlsdGVyX0RYKGNvbnN0IFNrQml0 bWFwUHJvY1N0YXRlJiBzLAotZGlmZiAtLWdpdCBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tC bGl0Um93X29wdHMuaCBiL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tCbGl0Um93X29wdHMuaAot aW5kZXggZDFkZTU2ODFhNzJlLi5kMDM5MDhhMDNhMzIgMTAwNjQ0Ci0tLS0gYS9nZngvc2tpYS9z a2lhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzLmgKLSsrKyBiL2dmeC9za2lhL3NraWEvc3JjL29w dHMvU2tCbGl0Um93X29wdHMuaAotQEAgLTY4LDYgKzY4LDQzIEBACi0gICAgIH0KLSAjZW5kaWYK LSAKLSsjaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgICNp bmNsdWRlIDxhbHRpdmVjLmg+Ci0rCi0rICAgIC8vIE5hdGl2ZSBWU1gvQWx0aVZlYyBwb3J0IG9m IFNrUE1TcmNPdmVyX1NTRTIuCi0rICAgIC8vIFNhbWUgYWxnb3JpdGhtOiBzcmMgKyBkc3QqKDI1 Ni1zcmNBbHBoYSkvMjU2LgotKyAgICBzdGF0aWMgaW5saW5lIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgU2tQTVNyY092ZXJfVlNYKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3JjLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgZHN0KSB7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc3Jj X3UzMiA9IChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpc3JjOwotKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgaW50IGRzdF91MzIgPSAoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdDsKLSsKLSsgICAg ICAgIC8vIHNjYWxlID0gMjU2IC0gKHNyYyA+PiAyNCkgIChwZXIgMzItYml0IGxhbmUpCi0rICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc2NhbGUgPSB2ZWNfc3ViKHZlY19zcGxhdHMoKHVu c2lnbmVkIGludCkyNTYpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2ZWNfc3Ioc3JjX3UzMiwgdmVjX3NwbGF0cygyNHUpKSk7Ci0rICAgICAgICAvLyBz Y2FsZV94MiA9IChzY2FsZSA8PCAxNikgfCBzY2FsZSAgLS0gc3BsYXQgdGhlIHNjYWxlIGludG8g Ym90aCAxNi1iaXQgaGFsdmVzCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc2NhbGVf eDIgPSB2ZWNfb3IodmVjX3NsKHNjYWxlLCB2ZWNfc3BsYXRzKDE2dSkpLCBzY2FsZSk7Ci0rCi0r ICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgcmJfbWFzayA9IHZlY19zcGxhdHMo MHgwMEZGMDBGRnUpOwotKwotKyAgICAgICAgLy8gcmIgPSAoZHN0ICYgMHgwMEZGMDBGRikgKiBz Y2FsZV94MiA+PiA4ICAgKFIgYW5kIEIgY2hhbm5lbHMgaW4gMTYtYml0IGxhbmVzKQotKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQp dmVjX2FuZChyYl9tYXNrLCBkc3RfdTMyKTsKLSsgICAgICAgIHJiID0gdmVjX211bChyYiwgKF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0KXNjYWxlX3gyKTsKLSsgICAgICAgIHJiID0gdmVjX3NyKHJi LCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KSk7Ci0rCi0rICAgICAgICAvLyBnYSA9IChk c3QgPj4gOCkgKiBzY2FsZV94MiAgdGhlbiBtYXNrIG91dCB0aGUgcmIgY2hhbm5lbHMKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdhID0gdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydClkc3RfdTMyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCkpOwotKyAgICAgICAgZ2EgPSB2ZWNf bXVsKGdhLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpc2NhbGVfeDIpOwotKyAgICAgICAgLy8g YW5kYyhnYSwgcmJfbWFzaykgPSBnYSAmIH5yYl9tYXNrICAtLSBrZWVwIG9ubHkgRyBhbmQgQSBj aGFubmVscyBpbiAxNi1iaXQgbGFuZXMKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBn YV91MzIgPSB2ZWNfYW5kYygoX192ZWN0b3IgdW5zaWduZWQgaW50KWdhLCByYl9tYXNrKTsKLSsK LSsgICAgICAgIC8vIHJlc3VsdCA9IHNyYyArIGFkZHNfZXB1OChyYiB8IGdhKQotKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciBtZXJnZWQgPQotKyAgICAgICAgICAgIChfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKXZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgaW50KXJiLCBnYV91MzIpOwot KyAgICAgICAgcmV0dXJuIHZlY19hZGRzKHNyYywgbWVyZ2VkKTsKLSsgICAgfQotKyNlbmRpZgot KwotICNpZiBTS19DUFVfU1NFX0xFVkVMID49IFNLX0NQVV9TU0VfTEVWRUxfU1NFMgotICAgICAj aW5jbHVkZSA8aW1taW50cmluLmg+Ci0gCi1AQCAtMTc2LDYgKzIxMywxNyBAQCBpbmxpbmUgdm9p ZCBibGl0X3Jvd19zMzJhX29wYXF1ZShTa1BNQ29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9yKiBz cmMsIGludCBsZW4sCi0gICAgIH0KLSAjZW5kaWYKLSAKLSsjaWYgZGVmaW5lZChTS19DUFVfUFBD KSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgIHdoaWxlIChsZW4gPj0gNCkgewotKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciB2c3JjID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBj aGFyKilzcmMpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB2ZHN0ID0gdmVjX3hs KDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgdmVjX3hzdChTa1BNU3Jj T3Zlcl9WU1godnNyYywgdmRzdCksIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAg c3JjICs9IDQ7Ci0rICAgICAgICBkc3QgKz0gNDsKLSsgICAgICAgIGxlbiAtPSA0OwotKyAgICB9 Ci0rI2VuZGlmCi0rCi0gI2lmIFNLX0NQVV9TU0VfTEVWRUwgPj0gU0tfQ1BVX1NTRV9MRVZFTF9T U0UyCi0gICAgIHdoaWxlIChsZW4gPj0gNCkgewotICAgICAgICAgX21tX3N0b3JldV9zaTEyOCgo X19tMTI4aSopZHN0LCBTa1BNU3JjT3Zlcl9TU0UyKF9tbV9sb2FkdV9zaTEyOCgoY29uc3QgX19t MTI4aSopc3JjKSwKLWRpZmYgLS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrUmFzdGVy UGlwZWxpbmVfb3B0cy5oIGIvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5l X29wdHMuaAotaW5kZXggNjk1YjcxNDM0ZjhjLi5lMmFmMGI5NGYzOTIgMTAwNjQ0Ci0tLS0gYS9n Zngvc2tpYS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxpbmVfb3B0cy5oCi0rKysgYi9nZngv c2tpYS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxpbmVfb3B0cy5oCi1AQCAtODcsNiArODcs OCBAQCB1c2luZyBOb0N0eCA9IGNvbnN0IHZvaWQqOwotICAgICAjZGVmaW5lIFNLUlBfQ1BVX1ND QUxBUgotICNlbGlmIGRlZmluZWQoU0tfQVJNX0hBU19ORU9OKQotICAgICAjZGVmaW5lIFNLUlBf Q1BVX05FT04KLSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykK LSsgICAgI2RlZmluZSBTS1JQX0NQVV9WU1gKLSAjZWxpZiBTS19DUFVfU1NFX0xFVkVMID49IFNL X0NQVV9TU0VfTEVWRUxfU0tYCi0gICAgICNkZWZpbmUgU0tSUF9DUFVfU0tYCi0gI2VsaWYgU0tf Q1BVX1NTRV9MRVZFTCA+PSBTS19DUFVfU1NFX0xFVkVMX0FWWDIKLUBAIC0xMDksNiArMTExLDgg QEAgdXNpbmcgTm9DdHggPSBjb25zdCB2b2lkKjsKLSAgICAgI2luY2x1ZGUgPG1hdGguaD4KLSAj ZWxpZiBkZWZpbmVkKFNLUlBfQ1BVX05FT04pCi0gICAgICNpbmNsdWRlIDxhcm1fbmVvbi5oPgot KyNlbGlmIGRlZmluZWQoU0tSUF9DUFVfVlNYKQotKyAgICAjaW5jbHVkZSA8YWx0aXZlYy5oPgot ICNlbGlmIGRlZmluZWQoU0tSUF9DUFVfTEFTWCkKLSAgICAgI2luY2x1ZGUgPGxhc3hpbnRyaW4u aD4KLSAgICAgI2luY2x1ZGUgPGxzeGludHJpbi5oPgotQEAgLTMzNyw2ICszNDEsMjM5IEBAIG5h bWVzcGFjZSBTS19PUFRTX05TIHsKLSAgICAgICAgIHZzdDRxX2YzMihwdHIsIChmbG9hdDMyeDR4 NF90e3tyLGcsYixhfX0pKTsKLSAgICAgfQotIAotKyNlbGlmIGRlZmluZWQoU0tSUF9DUFVfVlNY KQotKyAgICAvLyBSZXVzZSB0aGUgZmlsZS1zY29wZSBWZWM8TixUPiBkZWZpbmVkIGFib3ZlLiBJ dCBhbHJlYWR5IGhhbmRsZXMgdGhlCi0rICAgIC8vIEdDQy12cy1DbGFuZyBkaXZlcmdlbmNlIChl eHRfdmVjdG9yX3R5cGUgb24gQ2xhbmc7IHZlY3Rvcl9zaXplIHZpYQotKyAgICAvLyBWZWNIZWxw ZXIgb24gR0NDKSBhbmQgcHJvZHVjZXMgdGhlIHJpZ2h0IHZlY3Rvci1yZWdpc3Rlci1wYXNzaW5n IEFCSQotKyAgICAvLyBvbiBQUEM2NC4gVGhlIHZlY18qIGludHJpbnNpY3MgaW4gPGFsdGl2ZWMu aD4gYWNjZXB0IGVpdGhlciBmb3JtLgotKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcg ViA9IFZlYzw0LCBUPjsKLSsgICAgdXNpbmcgRiAgID0gVjxmbG9hdCAgID47Ci0rICAgIHVzaW5n IEkzMiA9IFY8IGludDMyX3Q+OwotKyAgICB1c2luZyBVNjQgPSBWPHVpbnQ2NF90PjsKLSsgICAg dXNpbmcgVTMyID0gVjx1aW50MzJfdD47Ci0rICAgIHVzaW5nIFUxNiA9IFY8dWludDE2X3Q+Owot KyAgICB1c2luZyBVOCAgPSBWPHVpbnQ4X3QgPjsKLSsKLSsgICAgLy8gV2UgcG9seWZpbGwgYSBm ZXcgcm91dGluZXMgdGhhdCBDbGFuZyBkb2Vzbid0IGJ1aWxkIGludG8gZXh0X3ZlY3Rvcl90eXBl cy4KLSsgICAgU0kgRiAgIG1pbihGIGEsIEYgYikgICAgIHsgcmV0dXJuIHZlY19taW4oYSxiKTsg fQotKyAgICBTSSBJMzIgbWluKEkzMiBhLCBJMzIgYikgeyByZXR1cm4gdmVjX21pbihhLGIpOyB9 Ci0rICAgIFNJIFUzMiBtaW4oVTMyIGEsIFUzMiBiKSB7IHJldHVybiB2ZWNfbWluKGEsYik7IH0K LSsgICAgU0kgRiAgIG1heChGIGEsIEYgYikgICAgIHsgcmV0dXJuIHZlY19tYXgoYSxiKTsgfQot KyAgICBTSSBJMzIgbWF4KEkzMiBhLCBJMzIgYikgeyByZXR1cm4gdmVjX21heChhLGIpOyB9Ci0r ICAgIFNJIFUzMiBtYXgoVTMyIGEsIFUzMiBiKSB7IHJldHVybiB2ZWNfbWF4KGEsYik7IH0KLSsK LSsgICAgU0kgRiAgIGFic18gIChGIHYpICAgeyByZXR1cm4gdmVjX2Ficyh2KTsgfQotKyAgICBT SSBJMzIgYWJzXyAgKEkzMiB2KSB7IHJldHVybiB2ZWNfYWJzKHYpOyB9Ci0rICAgIFNJIEYgICBy Y3BfYXBwcm94KEYgdikgeyByZXR1cm4gdmVjX3JlKHYpOyB9Ci0rICAgIFNJIEYgICByY3BfcHJl Y2lzZSAoRiB2KSB7IEYgZSA9IHJjcF9hcHByb3godik7IHJldHVybiBlICogKDIuMGYgLSB2ICog ZSk7IH0KLSsgICAgU0kgRiAgIHJzcXJ0X2FwcHJveCAoRiB2KSAgIHsgcmV0dXJuIHZlY19yc3Fy dGUodik7IH0KLSsKLSsgICAgU0kgVTE2IHBhY2soVTMyIHYpICAgICAgIHsgcmV0dXJuIF9fYnVp bHRpbl9jb252ZXJ0dmVjdG9yKHYsIFUxNik7IH0KLSsgICAgU0kgVTggIHBhY2soVTE2IHYpICAg ICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKHYsICBVOCk7IH0KLSsKLSsgICAg U0kgRiBpZl90aGVuX2Vsc2UoSTMyIGMsIEYgdCwgRiBlKSB7Ci0rICAgICAgICByZXR1cm4gdmVj X29yKChfX3ZlY3RvciBmbG9hdCl2ZWNfYW5kKChfX3ZlY3RvciBmbG9hdCljLCAoX192ZWN0b3Ig ZmxvYXQpdCksIChfX3ZlY3RvciBmbG9hdCl2ZWNfYW5kYygoX192ZWN0b3IgZmxvYXQpZSwgKF9f dmVjdG9yIGZsb2F0KWMpKTsKLSsgICAgfQotKyAgICBTSSBJMzIgaWZfdGhlbl9lbHNlKEkzMiBj LCBJMzIgdCwgSTMyIGUpIHsKLSsgICAgICAgIHJldHVybiAoSTMyKXZlY19vcigoX192ZWN0b3Ig dW5zaWduZWQgaW50KXZlY19hbmQoKF9fdmVjdG9yIHVuc2lnbmVkIGludCljLCAoX192ZWN0b3Ig dW5zaWduZWQgaW50KXQpLCAoX192ZWN0b3IgdW5zaWduZWQgaW50KXZlY19hbmRjKChfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQpZSwgKF9fdmVjdG9yIHVuc2lnbmVkIGludCljKSk7Ci0rICAgIH0KLSsK LSsgICAgLy8gSW4gYm90aCBBbHRpVmVjIGFuZCBTU0UgdGhlcmUgaXMgbm8gaG9yaXpvbnRhbCBl bGVtZW50IGNvbXBhcmUsIHVubGlrZSBBUk0uICBGYWxsIGJhY2sgdG8gc2NhbGFyIG9wZXJhdGlv bnMgaGVyZS4uLgotKyAgICBTSSBib29sIGFueShJMzIgYykgewotKyAgICAgICAgaWYgKHZlY19l eHRyYWN0KChVMzIpYywgMCkgIT0gMCkgcmV0dXJuIDE7Ci0rICAgICAgICBpZiAodmVjX2V4dHJh Y3QoKFUzMiljLCAxKSAhPSAwKSByZXR1cm4gMTsKLSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgo VTMyKWMsIDIpICE9IDApIHJldHVybiAxOwotKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIp YywgMykgIT0gMCkgcmV0dXJuIDE7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBT SSBib29sIGFsbChJMzIgYykgewotKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMCkg PT0gMCkgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAxKSA9PSAw KSByZXR1cm4gMDsKLSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDIpID09IDApIHJl dHVybiAwOwotKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMykgPT0gMCkgcmV0dXJu IDA7Ci0rICAgICAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyAgICBTSSBGICAgICBtYWQoRiBm LCBGIG0sIEYgYSkgeyByZXR1cm4gdmVjX21hZGQoZixtLGEpOyB9Ci0rICAgIFNJIEYgICAgbm1h ZChGIGYsIEYgbSwgRiBhKSB7IHJldHVybiB2ZWNfbm1zdWIoZixtLGEpOyB9Ci0rICAgIFNJIEYg IGZsb29yXyhGIHYpIHsgcmV0dXJuIHZlY19mbG9vcih2KTsgfQotKyAgICBTSSBGICAgY2VpbF8o RiB2KSB7IHJldHVybiB2ZWNfY2VpbCh2KTsgfQotKyAgICBTSSBGICAgc3FydF8oRiB2KSB7IHJl dHVybiB2ZWNfc3FydCh2KTsgfQotKyAgICBTSSBJMzIgaXJvdW5kKEYgdikgeyByZXR1cm4gdmVj X2N0cygoX192ZWN0b3IgZmxvYXQpdmVjX3JpbnQodiksIDApOyB9Ci0rICAgIFNJIFUzMiByb3Vu ZChGIHYpICB7IHJldHVybiB2ZWNfY3R1KChfX3ZlY3RvciBmbG9hdCl2ZWNfcmludCh2KSwgMCk7 IH0KLSsgICAgU0kgVTMyIHJvdW5kKEYgdiwgRiBzY2FsZSkgeyByZXR1cm4gKFUzMil2ZWNfY3Rz KChfX3ZlY3RvciBmbG9hdCl2ZWNfcmludCh2KnNjYWxlKSwgMCk7IH0KLSsKLSsgICAgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0rICAgIFNJIFY8VD4gZ2F0aGVyKGNvbnN0IFQqIHAsIFUzMiBpeCkg ewotKyAgICAgICAgcmV0dXJuIFY8VD57cFtpeFswXV0sIHBbaXhbMV1dLCBwW2l4WzJdXSwgcFtp eFszXV19OwotKyAgICB9Ci0rICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgICBTSSBWPFQ+ IGdhdGhlcl91bmFsaWduZWQoY29uc3QgVCogcHRyLCBVMzIgaXgpIHsKLSsgICAgICAgIC8vIFRo aXMgdGVsbHMgdGhlIGNvbXBpbGVyIHB0ciBtaWdodCBub3QgYmUgYWxpZ25lZCBhcHByb3ByaWF0 ZWx5LCBzbwotKyAgICAgICAgLy8gaXQgZ2VuZXJhdGVzIGJldHRlciBhc3NlbWJseS4KLSsgICAg ICAgIHR5cGVkZWYgVCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMSkpKSB1bmFsaWduZWRfcHRy OwotKyAgICAgICAgY29uc3QgdW5hbGlnbmVkX3B0ciogdXB0ciA9IHN0YXRpY19jYXN0PGNvbnN0 IHVuYWxpZ25lZF9wdHIqPihwdHIpOwotKyAgICAgICAgcmV0dXJuIFY8VD57dXB0cltpeFswXV0s IHVwdHJbaXhbMV1dLCB1cHRyW2l4WzJdXSwgdXB0cltpeFszXV19OwotKyAgICB9Ci0rICAgIHRl bXBsYXRlIDx0eXBlbmFtZSBWLCB0eXBlbmFtZSBTPgotKyAgICBTSSB2b2lkIHNjYXR0ZXJfbWFz a2VkKFYgc3JjLCBTKiBkc3QsIFUzMiBpeCwgSTMyIG1hc2spIHsKLSsgICAgICAgIFYgYmVmb3Jl ID0gZ2F0aGVyKGRzdCwgaXgpOwotKyAgICAgICAgViBhZnRlciA9IGlmX3RoZW5fZWxzZShtYXNr LCBzcmMsIGJlZm9yZSk7Ci0rICAgICAgICBkc3RbaXhbMF1dID0gYWZ0ZXJbMF07Ci0rICAgICAg ICBkc3RbaXhbMV1dID0gYWZ0ZXJbMV07Ci0rICAgICAgICBkc3RbaXhbMl1dID0gYWZ0ZXJbMl07 Ci0rICAgICAgICBkc3RbaXhbM11dID0gYWZ0ZXJbM107Ci0rICAgIH0KLSsKLSsgICAgLy8gTmF0 aXZlIFZTWC9BbHRpVmVjIHBvcnRzIG9mIHRoZSBsb2FkMi9zdG9yZTIvbG9hZDMvbG9hZDQvc3Rv cmU0IGhlbHBlcnMuCi0rICAgIC8vIEVhY2ggdXNlcyB2ZWNfeGwvdmVjX3hzdCBmb3IgdW5hbGln bmVkIDE2LWJ5dGUgbG9hZHMvc3RvcmVzLCB2ZWNfbWVyZ2VoLwotKyAgICAvLyB2ZWNfbWVyZ2Vs IGZvciBTU0Utc3R5bGUgZXBpMTYvZXBpMzIvcHMgdW5wYWNrIG9wcywgYW5kIHZlY19wZXJtIHdp dGggYQotKyAgICAvLyBieXRlLW1hc2sgZm9yIHRoZSBTU0Ugc2h1ZmZsZWxvL3NodWZmbGVoaS9z aHVmZmxlL3NybGlfc2kxMjggb3BzLiBUaGUKLSsgICAgLy8gUFBDNjQgTEUgcmVnaXN0ZXItdG8t bWVtb3J5IGJ5dGUgb3JkZXIgbWF0Y2hlcyB4ODYgTEUsIHNvIHRoZSBieXRlLW1hc2sKLSsgICAg Ly8gcGF0dGVybnMgYXJlIGlkZW50aWNhbCB0byB0aGUgY29ycmVzcG9uZGluZyBfbW1fc2V0cl9l cGk4IGZvcm1zLgotKwotKyAgICBTSSB2b2lkIGxvYWQyKGNvbnN0IHVpbnQxNl90KiBwdHIsIFUx NiogciwgVTE2KiBnKSB7Ci0rICAgICAgICAvLyBMb2FkIDggdWludDE2OiByMCBnMCByMSBnMSBy MiBnMiByMyBnMyAoaW4gTEUgbWVtb3J5IG9yZGVyKS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgdiA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopcHRyKTsKLSsgICAg ICAgIC8vIEV4dHJhY3QgZXZlcnktb3RoZXIgMTYtYml0IHZhbHVlIHZpYSB2ZWNfcGVybSAoaGln aCBoYWxmIG9mIHJlc3VsdCBpcyB1bnVzZWQKLSsgICAgICAgIC8vIGJ1dCB3cml0dGVuOyBza191 bmFsaWduZWRfbG9hZCBiZWxvdyBwaWNrcyB1cCB0aGUgbG93IDggYnl0ZXMpLgotKyAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciByX21hc2sgPSAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcil7Ci0rICAgICAgICAgICAgMCwxLCA0LDUsIDgsOSwgMTIsMTMsICAwLDAsMCwwLDAsMCww LDAKLSsgICAgICAgIH07Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdf bWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICAyLDMsIDYsNywg MTAsMTEsIDE0LDE1LCAgMCwwLDAsMCwwLDAsMCwwCi0rICAgICAgICB9OwotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgY2hhciBSX3YgPSB2ZWNfcGVybSh2LCB2LCByX21hc2spOwotKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBHX3YgPSB2ZWNfcGVybSh2LCB2LCBnX21hc2spOwot KyAgICAgICAgKnIgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZSX3YpOwotKyAgICAgICAgKmcg PSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZHX3YpOwotKyAgICB9Ci0rCi0rICAgIFNJIHZvaWQg c3RvcmUyKHVpbnQxNl90KiBwdHIsIFUxNiByLCBVMTYgZykgewotKyAgICAgICAgLy8gSW50ZXJs ZWF2ZTogcmcgPSByMCBnMCByMSBnMSByMiBnMiByMyBnMy4KLSsgICAgICAgIC8vIHIgYW5kIGcg YXJlIDgtYnl0ZSB2ZWN0b3JzOyB3aWRlbiB0byAxNiBhbmQgdmVjX21lcmdlaCBvbiB1c2hvcnQg dGFrZXMKLSsgICAgICAgIC8vIHRoZSBsb3cgNCBsYW5lcyBvZiBlYWNoLgotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgcncgPSB3aWRlbl9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0PihyKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGd3ID0gd2lkZW5fY2Fz dDxfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4oZyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCByZyA9IHZlY19tZXJnZWgocncsIGd3KTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIpcmcsIDAsICh1bnNpZ25lZCBjaGFyKilwdHIpOwotKyAgICB9Ci0r Ci0rICAgIFNJIHZvaWQgbG9hZDMoY29uc3QgdWludDE2X3QqIHB0ciwgVTE2KiByLCBVMTYqIGcs IFUxNiogYikgewotKyAgICAgICAgLy8gNCBwaXhlbHMgeCAzIGNoYW5uZWxzIHggMiBieXRlcyA9 IDI0IGJ5dGVzLiBUd28gMTYtYnl0ZSBsb2FkcyB3aXRoIG92ZXJsYXAKLSsgICAgICAgIC8vIGF2 b2lkIHJlYWRpbmcgcGFzdCB0aGUgMjQtYnl0ZSBzb3VyY2UuCi0rICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIHYwMSA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHB0ciAr IDApKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdjIzX3JhdyA9IHZlY194bCgw LCAoY29uc3QgdW5zaWduZWQgY2hhciopKHB0ciArIDQpKTsKLSsgICAgICAgIGNvbnN0IF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0r ICAgICAgICAvLyB2MjMgPSB2MjNfcmF3ID4+IDQgYnl0ZXMgKGRyb3BzIHRoZSBvdmVybGFwcGlu ZyBwaXhlbC0xIHRyYWlsaW5nIFIpLgotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQg Y2hhciBzaGlmdDQgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7Ci0rICAgICAgICAgICAgNCw1 LDYsNywgOCw5LDEwLDExLCAxMiwxMywxNCwxNSwgMTYsMTYsMTYsMTYKLSsgICAgICAgIH07Ci0r ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHYyMyA9IHZlY19wZXJtKHYyM19yYXcsIHpl cm8sIHNoaWZ0NCk7Ci0rICAgICAgICAvLyBfTiBob2xkcyBSLEcsQiBmb3IgcGl4ZWwgTiBpbiBp dHMgbG93ZXIgMyBsYW5lcy4gc2hpZnQ2IGFkdmFuY2VzIHRvIHRoZSBuZXh0IHBpeGVsLgotKyAg ICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBzaGlmdDYgPSAoX192ZWN0b3IgdW5z aWduZWQgY2hhcil7Ci0rICAgICAgICAgICAgNiw3LDgsOSwgMTAsMTEsMTIsMTMsIDE0LDE1LCAx NiwxNiwgMTYsMTYsIDE2LDE2Ci0rICAgICAgICB9OwotKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgY2hhciBfMCA9IHYwMTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgXzEgPSB2 ZWNfcGVybSh2MDEsIHplcm8sIHNoaWZ0Nik7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIF8yID0gdjIzOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfMyA9IHZlY19w ZXJtKHYyMywgemVybywgc2hpZnQ2KTsKLSsgICAgICAgIC8vIERlLWludGVybGFjZSB0byBSLEcs QiBwZXIgdGhlIFNTRSBmbG93LgotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgXzAy ID0gdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzAsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQg c2hvcnQpXzIpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgXzEzID0gdmVjX21l cmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzEsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzMp OwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgUl92ID0gdmVjX21lcmdlaChfMDIs IF8xMyk7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNoaWZ0OCA9IChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICA4LDksMTAsMTEsIDEyLDEzLDE0 LDE1LCAxNiwxNiwxNiwxNiwgMTYsMTYsMTYsMTYKLSsgICAgICAgIH07Ci0rICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIEdfdiA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KVJfdiwgemVybywgc2hpZnQ4KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IEJf diA9IHZlY19tZXJnZWwoXzAyLCBfMTMpOwotKyAgICAgICAgKnIgPSBza191bmFsaWduZWRfbG9h ZDxVMTY+KCZSX3YpOwotKyAgICAgICAgKmcgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZHX3Yp OwotKyAgICAgICAgKmIgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZCX3YpOwotKyAgICB9Ci0r Ci0rICAgIFNJIHZvaWQgbG9hZDQoY29uc3QgdWludDE2X3QqIHB0ciwgVTE2KiByLCBVMTYqIGcs IFUxNiogYiwgVTE2KiBhKSB7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2MDEg PSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpCi0rICAgICAgICAgICAgdmVjX3hsKDAsIChjb25z dCB1bnNpZ25lZCBjaGFyKilwdHIpOyAgICAgICAgICAgIC8vIHIwIGcwIGIwIGEwIHIxIGcxIGIx IGExCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2MjMgPSAoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpCi0rICAgICAgICAgICAgdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFy KikocHRyICsgOCkpOyAgICAgIC8vIHIyIGcyIGIyIGEyIHIzIGczIGIzIGEzCi0rICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBfMDIgPSB2ZWNfbWVyZ2VoKHYwMSwgdjIzKTsgIC8vIHIw IHIyIGcwIGcyIGIwIGIyIGEwIGEyCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBf MTMgPSB2ZWNfbWVyZ2VsKHYwMSwgdjIzKTsgIC8vIHIxIHIzIGcxIGczIGIxIGIzIGExIGEzCi0r ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCByZyAgPSB2ZWNfbWVyZ2VoKF8wMiwgXzEz KTsgIC8vIHIwIHIxIHIyIHIzIGcwIGcxIGcyIGczCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCBiYSAgPSB2ZWNfbWVyZ2VsKF8wMiwgXzEzKTsgIC8vIGIwIGIxIGIyIGIzIGEwIGEx IGEyIGEzCi0rICAgICAgICAqciA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQx Nl90KikmcmcgKyAwKTsKLSsgICAgICAgICpnID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigoY29u c3QgdWludDE2X3QqKSZyZyArIDQpOwotKyAgICAgICAgKmIgPSBza191bmFsaWduZWRfbG9hZDxV MTY+KChjb25zdCB1aW50MTZfdCopJmJhICsgMCk7Ci0rICAgICAgICAqYSA9IHNrX3VuYWxpZ25l ZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQxNl90KikmYmEgKyA0KTsKLSsgICAgfQotKwotKyAgICBT SSB2b2lkIHN0b3JlNCh1aW50MTZfdCogcHRyLCBVMTYgciwgVTE2IGcsIFUxNiBiLCBVMTYgYSkg ewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcncgPSB3aWRlbl9jYXN0PF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0PihyKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGd3ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4oZyk7Ci0rICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBidyA9IHdpZGVuX2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQg c2hvcnQ+KGIpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgYXcgPSB3aWRlbl9j YXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0PihhKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IHJnID0gdmVjX21lcmdlaChydywgZ3cpOyAgLy8gcjAgZzAgcjEgZzEgcjIgZzIg cjMgZzMKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJhID0gdmVjX21lcmdlaChi dywgYXcpOyAgLy8gYjAgYTAgYjEgYTEgYjIgYTIgYjMgYTMKLSsgICAgICAgIC8vIE5vdyBpbnRl cmxlYXZlIDMyLWJpdCBsYW5lcyAoZWFjaCByZyBwYWlyID0gMSBsYW5lLCBlYWNoIGJhIHBhaXIg PSAxIGxhbmUpLgotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHJnYmFfbG8gPSB2ZWNf bWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpcmcsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpYmEp OwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHJnYmFfaGkgPSB2ZWNfbWVyZ2VsKChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpcmcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpYmEpOwotKyAgICAg ICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyZ2JhX2xvLCAwLCAodW5zaWduZWQg Y2hhciopcHRyKTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpcmdi YV9oaSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyA4KSk7Ci0rICAgIH0KLSsKLSsgICAgU0kg dm9pZCBsb2FkMihjb25zdCBmbG9hdCogcHRyLCBGKiByLCBGKiBnKSB7Ci0rICAgICAgICBfX3Zl Y3RvciBmbG9hdCBfMDEgPSB2ZWNfeGwoMCwgcHRyKTsgICAgICAgICAgLy8gcjAgZzAgcjEgZzEK LSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IF8yMyA9IHZlY194bCgwLCBwdHIgKyA0KTsgICAgICAv LyByMiBnMiByMyBnMwotKyAgICAgICAgLy8gciA9IGxhbmVzIHtfMDFbMF0sIF8wMVsyXSwgXzIz WzBdLCBfMjNbMl19OyBnID0ge18wMVsxXSwgXzAxWzNdLCBfMjNbMV0sIF8yM1szXX0uCi0rICAg ICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJfbWFzayA9IChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXsKLSsgICAgICAgICAgICAwLDEsMiwzLCA4LDksMTAsMTEsIDE2LDE3LDE4LDE5 LCAyNCwyNSwyNiwyNwotKyAgICAgICAgfTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgZ19tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgICAg IDQsNSw2LDcsIDEyLDEzLDE0LDE1LCAyMCwyMSwyMiwyMywgMjgsMjksMzAsMzEKLSsgICAgICAg IH07Ci0rICAgICAgICAqciA9IChGKXZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKV8w MSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzIzLCByX21hc2spOwotKyAgICAgICAgKmcgPSAo Ril2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilfMDEsIChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKV8yMywgZ19tYXNrKTsKLSsgICAgfQotKwotKyAgICBTSSB2b2lkIHN0b3JlMihmbG9h dCogcHRyLCBGIHIsIEYgZykgewotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgXzAxID0gdmVjX21l cmdlaCgoX192ZWN0b3IgZmxvYXQpciwgKF9fdmVjdG9yIGZsb2F0KWcpOyAgIC8vIHIwIGcwIHIx IGcxCi0rICAgICAgICBfX3ZlY3RvciBmbG9hdCBfMjMgPSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciBm bG9hdClyLCAoX192ZWN0b3IgZmxvYXQpZyk7ICAgLy8gcjIgZzIgcjMgZzMKLSsgICAgICAgIHZl Y194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzAxLCAwLCAodW5zaWduZWQgY2hhciopcHRy KTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzIzLCAwLCAodW5z aWduZWQgY2hhciopKHB0ciArIDQpKTsKLSsgICAgfQotKwotKyAgICBTSSB2b2lkIGxvYWQ0KGNv bnN0IGZsb2F0KiBwdHIsIEYqIHIsIEYqIGcsIEYqIGIsIEYqIGEpIHsKLSsgICAgICAgIC8vIDR4 NCBmbG9hdCBtYXRyaXggdHJhbnNwb3NlOiByb3dzIC0+IGNvbHVtbnMuCi0rICAgICAgICBfX3Zl Y3RvciBmbG9hdCByb3cwID0gdmVjX3hsKDAsIHB0ciArICAwKTsKLSsgICAgICAgIF9fdmVjdG9y IGZsb2F0IHJvdzEgPSB2ZWNfeGwoMCwgcHRyICsgIDQpOwotKyAgICAgICAgX192ZWN0b3IgZmxv YXQgcm93MiA9IHZlY194bCgwLCBwdHIgKyAgOCk7Ci0rICAgICAgICBfX3ZlY3RvciBmbG9hdCBy b3czID0gdmVjX3hsKDAsIHB0ciArIDEyKTsKLSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQwID0g dmVjX21lcmdlaChyb3cwLCByb3cyKTsgIC8vIHtyb3cwWzBdLCByb3cyWzBdLCByb3cwWzFdLCBy b3cyWzFdfQotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDEgPSB2ZWNfbWVyZ2VoKHJvdzEsIHJv dzMpOwotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDIgPSB2ZWNfbWVyZ2VsKHJvdzAsIHJvdzIp OwotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDMgPSB2ZWNfbWVyZ2VsKHJvdzEsIHJvdzMpOwot KyAgICAgICAgKnIgPSAoRil2ZWNfbWVyZ2VoKFQwLCBUMSk7ICAvLyB7cm93MFswXSwgcm93MVsw XSwgcm93MlswXSwgcm93M1swXX0KLSsgICAgICAgICpnID0gKEYpdmVjX21lcmdlbChUMCwgVDEp OwotKyAgICAgICAgKmIgPSAoRil2ZWNfbWVyZ2VoKFQyLCBUMyk7Ci0rICAgICAgICAqYSA9IChG KXZlY19tZXJnZWwoVDIsIFQzKTsKLSsgICAgfQotKwotKyAgICBTSSB2b2lkIHN0b3JlNChmbG9h dCogcHRyLCBGIHIsIEYgZywgRiBiLCBGIGEpIHsKLSsgICAgICAgIC8vIDR4NCBmbG9hdCBtYXRy aXggdHJhbnNwb3NlLCB0aGVuIHN0b3JlIHJvd3MuCi0rICAgICAgICBfX3ZlY3RvciBmbG9hdCBU MCA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIGZsb2F0KXIsIChfX3ZlY3RvciBmbG9hdCliKTsKLSsg ICAgICAgIF9fdmVjdG9yIGZsb2F0IFQxID0gdmVjX21lcmdlaCgoX192ZWN0b3IgZmxvYXQpZywg KF9fdmVjdG9yIGZsb2F0KWEpOwotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDIgPSB2ZWNfbWVy Z2VsKChfX3ZlY3RvciBmbG9hdClyLCAoX192ZWN0b3IgZmxvYXQpYik7Ci0rICAgICAgICBfX3Zl Y3RvciBmbG9hdCBUMyA9IHZlY19tZXJnZWwoKF9fdmVjdG9yIGZsb2F0KWcsIChfX3ZlY3RvciBm bG9hdClhKTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX21l cmdlaChUMCwgVDEpLCAwLCAodW5zaWduZWQgY2hhciopKHB0ciArICAwKSk7Ci0rICAgICAgICB2 ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWwoVDAsIFQxKSwgMCwgKHVu c2lnbmVkIGNoYXIqKShwdHIgKyAgNCkpOwotKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5z aWduZWQgY2hhcil2ZWNfbWVyZ2VoKFQyLCBUMyksIDAsICh1bnNpZ25lZCBjaGFyKikocHRyICsg IDgpKTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX21lcmdl bChUMiwgVDMpLCAwLCAodW5zaWduZWQgY2hhciopKHB0ciArIDEyKSk7Ci0rICAgIH0KLSsKLSAj ZWxpZiBkZWZpbmVkKFNLUlBfQ1BVX1NLWCkKLSAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVz aW5nIFYgPSBWZWM8MTYsIFQ+OwotICAgICB1c2luZyBGICAgPSBWPGZsb2F0ICAgPjsKLWRpZmYg LS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0cy5pbmMgYi9nZngv c2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0cy5pbmMKLWluZGV4IDY3MWRiM2YwNWY2 MS4uYzU3ODIzOGE5ZTU4IDEwMDY0NAotLS0tIGEvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1N3 aXp6bGVyX29wdHMuaW5jCi0rKysgYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJf b3B0cy5pbmMKLUBAIC04NCw2ICs4NCwyOSBAQCBTSSBmbG9hdCByZWNpcHJvY2FsX2FscGhhKGZs b2F0IGEpIHsKLSAgICAgYXV0byBxID0gRjR7MS4wZn0gLyB2QTsKLSAgICAgcmV0dXJuIF9tbV9h bmRfcHMoc2tfYml0X2Nhc3Q8X19tMTI4Pih2QSAhPSBGNHswLjBmfSksIHEpWzBdOwotIH0KLSsj ZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsvLyAtLSBWU1gg LS0gSGFyZGVuIGFnYWluc3QgdGltaW5nIGF0dGFja3MuCi0rLy8gdmVjX3NwbGF0cyAvIHZlY19k aXYgLyB2ZWNfY21wZ3QgLyB2ZWNfYW5kIGVhY2ggbWFwIHRvIGEgc2luZ2xlIFZTWCBvcCBvbgot Ky8vIGJvdGggR0NDIGFuZCBDbGFuZy4gdmVjX2NtcGd0KHZBLCAwKSBpcyBleGFjdCBmb3IgdGhl IG5vbi1uZWdhdGl2ZS1hbHBoYQotKy8vIGNvbnRyYWN0ICgwIDw9IGEpIGFuZCBhdm9pZHMgQ2xh bmcncyBzdGF0aWNfY2FzdDxmbG9hdD4odmVjdG9yKSBleHRlbnNpb24KLSsvLyB0aGF0IEdDQyBk b2VzIG5vdCBzdXBwb3J0LgotK1NLX05PX1NBTklUSVpFKCJmbG9hdC1kaXZpZGUtYnktemVybyIp Ci0rU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYV90aW1lc18yNTUoZmxvYXQgYSkgewotKyAgICBT a0FTU0VSVCgwIDw9IGEgJiYgYSA8PSAyNTUpOwotKyAgICBfX3ZlY3RvciBmbG9hdCB2QSA9IHZl Y19zcGxhdHMoYSk7Ci0rICAgIF9fdmVjdG9yIGZsb2F0IHEgPSB2ZWNfZGl2KHZlY19zcGxhdHMo MjU1LjBmKSwgdkEpOwotKyAgICBfX3ZlY3RvciBmbG9hdCB2TWFzayA9IChfX3ZlY3RvciBmbG9h dCl2ZWNfY21wZ3QodkEsIHZlY19zcGxhdHMoMC4wZikpOwotKyAgICByZXR1cm4gdmVjX2FuZCh2 TWFzaywgcSlbMF07Ci0rfQotKwotK1NLX05PX1NBTklUSVpFKCJmbG9hdC1kaXZpZGUtYnktemVy byIpCi0rU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYShmbG9hdCBhKSB7Ci0rICAgIFNrQVNTRVJU KDAgPD0gYSAmJiBhIDw9IDEpOwotKyAgICBfX3ZlY3RvciBmbG9hdCB2QSA9IHZlY19zcGxhdHMo YSk7Ci0rICAgIF9fdmVjdG9yIGZsb2F0IHEgPSB2ZWNfZGl2KHZlY19zcGxhdHMoMS4wZiksIHZB KTsKLSsgICAgX192ZWN0b3IgZmxvYXQgdk1hc2sgPSAoX192ZWN0b3IgZmxvYXQpdmVjX2NtcGd0 KHZBLCB2ZWNfc3BsYXRzKDAuMGYpKTsKLSsgICAgcmV0dXJuIHZlY19hbmQodk1hc2ssIHEpWzBd OwotK30KLSAjZWxzZQotIC8vIC0tIFBvcnRhYmxlIC0tICpOb3QqIGhhcmRlbmVkIGFnYWluc3Qg dGltaW5nIGF0dGFja3MKLSBTSSBmbG9hdCByZWNpcHJvY2FsX2FscGhhX3RpbWVzXzI1NShmbG9h dCBhKSB7Ci1AQCAtMTA4NSw2ICsxMTA4LDIwOCBAQCB2b2lkIHJnYkFfdG9fQkdSQSh1aW50MzJf dCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKLSAgICAgcmdiQV90b19C R1JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7Ci0gfQotIAotKyNlbGlmIGRlZmluZWQoU0tf Q1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKy8vIC0tIFZTWCAtLSBOYXRpdmUgUG93ZXIg VlNYL0FsdGlWZWMgcG9ydHMgb2YgdGhlIFNTU0UzIHN3aXp6bGVycyBiZWxvdy4KLSsvLyBFYWNo IF9tbV8qIG9wZXJhdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgY29ycmVzcG9uZGluZyB2ZWNfKiBz ZXF1ZW5jZSBwZXIKLSsvLyB0aGUgR0NDIHBwY193cmFwcGVycyB0cmFuc2xhdGlvbiBwYXR0ZXJu ICh2ZWNfbWVyZ2VoL2wsIHZlY19wZXJtLCBhbmQgdGhlCi0rLy8gdmVjX3ZtdWxldWgvdm11bG91 aCArIHBlcm11dGUgaWRpb20gZm9yIF9tbV9tdWxoaV9lcHUxNikuIFRoZSBwZXJtdXRlCi0rLy8g bWFza3MgZm9yIGJ5dGUtc2h1ZmZsZXMgdXNlIHRoZSBzYW1lIGJ5dGUtb3JkZXIgbGF5b3V0IGFz IHRoZSBTU0UKLSsvLyBfbW1fc2V0cl9lcGk4IGZvcm1zIGJlY2F1c2UgUFBDNjQgTEUgcmVnaXN0 ZXItdG8tbWVtb3J5IGJ5dGUgb3JkZXIgaXMgdGhlCi0rLy8gc2FtZSBhcyB4ODYgTEUuCi0rCi0r Ly8gU2NhbGU6ICgoeCp5KSArIDEyOCkgKiAyNTcgPj4gMTYsIHBlciAxNi1iaXQgbGFuZSAobWF0 Y2hlcyB0aGUgU1NTRTMgZm9ybSkuCi0rc3RhdGljIGlubGluZSBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCBzY2FsZShfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB4LCBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCB5KSB7Ci0rICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHYxMjggPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxMjgpOwotKyAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCB2MjU3ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMjU3KTsKLSsgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3VtbSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCkoKF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0KSh4ICogeSkgKyB2MTI4KTsKLSsgICAgLy8gX21tX211bGhp X2VwdTE2IGVxdWl2YWxlbnQ6IDE2eDE2IC0+IGhpZ2ggMTYgYml0cywgdmlhIG11bGUrbXVsbytw ZXJtdXRlLgotKyAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZXZlbiA9IHZlY192bXVsZXVoKHN1 bW0sIHYyNTcpOwotKyAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgb2RkICA9IHZlY192bXVsb3Vo KHN1bW0sIHYyNTcpOwotKyAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHhmb3JtID0g KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgMHgwMiwgMHgwMywgMHgxMiwgMHgx MywgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcsCi0rICAgICAgICAweDBBLCAweDBCLCAweDFBLCAw eDFCLCAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRgotKyAgICB9OwotKyAgICByZXR1cm4gKF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWV2ZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIpb2RkLCB4Zm9ybSk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIHByZW11bF9z aG91bGRfc3dhcFJCKGJvb2wga1N3YXBSQiwgdWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3Qq IHNyYywgaW50IGNvdW50KSB7Ci0rICAgIGF1dG8gcHJlbXVsOCA9IFs9XShfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKiBsbywgX192ZWN0b3IgdW5zaWduZWQgY2hhciogaGkpIHsKLSsgICAgICAgIGNv bnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hh cil7MH07Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBsYW5hciA9IGtT d2FwUkIKLSsgICAgICAgICAgICA/IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsyLDYsMTAsMTQs IDEsNSw5LDEzLCAwLDQsOCwxMiwgMyw3LDExLDE1fQotKyAgICAgICAgICAgIDogKF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIpezAsNCw4LDEyLCAxLDUsOSwxMywgMiw2LDEwLDE0LCAzLDcsMTEsMTV9 OwotKwotKyAgICAgICAgLy8gU3dpenpsZSBlYWNoIDE2LWJ5dGUgY2h1bmsgaW50byA4LWJpdCBw bGFuYXIgbGF5b3V0LgotKyAgICAgICAgKmxvID0gdmVjX3Blcm0oKmxvLCAqbG8sIHBsYW5hcik7 ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnJycmdnZ2cgYmJiYmFhYWEKLSsgICAgICAgICpo aSA9IHZlY19wZXJtKCpoaSwgKmhpLCBwbGFuYXIpOyAgICAgICAgICAgICAgICAgICAgICAgIC8v IFJSUlJHR0dHIEJCQkJBQUFBCi0rCi0rICAgICAgICAvLyBJbnRlcmxlYXZlIHRoZSB0d28gaGFs dmVzIGF0IDMyLWJpdCBncmFudWxhcml0eS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgcmcgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcikKLSsgICAgICAgICAgICB2ZWNfbWVyZ2Vo KChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmxvLCAoX192ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7 ICAvLyBycnJyUlJSUiBnZ2dnR0dHRwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBi YSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKQotKyAgICAgICAgICAgIHZlY19tZXJnZWwoKF9f dmVjdG9yIHVuc2lnbmVkIGludCkqbG8sIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmhpKTsgIC8v IGJiYmJCQkJCIGFhYWFBQUFBCi0rCi0rICAgICAgICAvLyBVbnBhY2sgdG8gMTYtYml0IHBsYW5h ci4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHIgPSAoX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQpdmVjX21lcmdlaChyZywgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgZyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKHJnLCB6ZXJv cyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiID0gKF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0KXZlY19tZXJnZWgoYmEsIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGEgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlbChiYSwgemVy b3MpOwotKwotKyAgICAgICAgLy8gUHJlbXVsdGlwbHkgZWFjaCBjb2xvdXIgY2hhbm5lbCBieSBh bHBoYS4KLSsgICAgICAgIHIgPSBzY2FsZShyLCBhKTsKLSsgICAgICAgIGcgPSBzY2FsZShnLCBh KTsKLSsgICAgICAgIGIgPSBzY2FsZShiLCBhKTsKLSsKLSsgICAgICAgIC8vIFJlcGFjayBpbnRv IGludGVybGFjZWQgcGl4ZWxzLgotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IHJnMiA9IHZlY19vcihyLCB2ZWNfc2woZywgdjgpKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJhMiA9IHZlY19vcihiLCB2ZWNfc2woYSwgdjgpKTsK LSsgICAgICAgICpsbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWgocmcyLCBi YTIpOwotKyAgICAgICAgKmhpID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlbChy ZzIsIGJhMik7Ci0rICAgIH07Ci0rCi0rICAgIHdoaWxlIChjb3VudCA+PSA4KSB7Ci0rICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGxvID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBj aGFyKikoc3JjICsgMCkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBoaSA9IHZl Y194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHNyYyArIDQpKTsKLSsgICAgICAgIHByZW11 bDgoJmxvLCAmaGkpOwotKyAgICAgICAgdmVjX3hzdChsbywgMCwgKHVuc2lnbmVkIGNoYXIqKShk c3QgKyAwKSk7Ci0rICAgICAgICB2ZWNfeHN0KGhpLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCAr IDQpKTsKLSsgICAgICAgIHNyYyArPSA4OyBkc3QgKz0gODsgY291bnQgLT0gODsKLSsgICAgfQot KwotKyAgICBpZiAoY291bnQgPj0gNCkgewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBsbyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsKLSsgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgaGkgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MH07Ci0r ICAgICAgICBwcmVtdWw4KCZsbywgJmhpKTsKLSsgICAgICAgIHZlY194c3QobG8sIDAsICh1bnNp Z25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgc3JjICs9IDQ7IGRzdCArPSA0OyBjb3VudCAtPSA0 OwotKyAgICB9Ci0rCi0rICAgIGF1dG8gcHJvYyA9IGtTd2FwUkIgPyBSR0JBX3RvX2JnckFfcG9y dGFibGUgOiBSR0JBX3RvX3JnYkFfcG9ydGFibGU7Ci0rICAgIHByb2MoZHN0LCBzcmMsIGNvdW50 KTsKLSt9Ci0rCi0rdm9pZCBSR0JBX3RvX3JnYkEodWludDMyX3QqIGRzdCwgY29uc3QgdWludDMy X3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgIHByZW11bF9zaG91bGRfc3dhcFJCKGZhbHNlLCBk c3QsIHNyYywgY291bnQpOwotK30KLSsKLSt2b2lkIFJHQkFfdG9fYmdyQSh1aW50MzJfdCogZHN0 LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKLSsgICAgcHJlbXVsX3Nob3VsZF9z d2FwUkIodHJ1ZSwgZHN0LCBzcmMsIGNvdW50KTsKLSt9Ci0rCi0rdm9pZCBSR0JBX3RvX0JHUkEo dWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgIGNv bnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3dhcFJCID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpewotKyAgICAgICAgMiwxLDAsMywgNiw1LDQsNywgMTAsOSw4LDExLCAxNCwxMywxMiwxNQot KyAgICB9OwotKyAgICB3aGlsZSAoY291bnQgPj0gNCkgewotKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciByZ2JhID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilzcmMpOwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBiZ3JhID0gdmVjX3Blcm0ocmdiYSwgcmdi YSwgc3dhcFJCKTsKLSsgICAgICAgIHZlY194c3QoYmdyYSwgMCwgKHVuc2lnbmVkIGNoYXIqKWRz dCk7Ci0rICAgICAgICBzcmMgKz0gNDsgZHN0ICs9IDQ7IGNvdW50IC09IDQ7Ci0rICAgIH0KLSsg ICAgUkdCQV90b19CR1JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7Ci0rfQotKwotK3ZvaWQg Z3JheUFfdG9fUkdCQSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291 bnQpIHsKLSsgICAgd2hpbGUgKGNvdW50ID49IDgpIHsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGdhID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY194bCgwLCBzcmMpOwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2cgPSB2ZWNfb3IoCi0rICAgICAgICAg ICAgICAgIHZlY19hbmQoZ2EsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTB4MDBGRikpLAot KyAgICAgICAgICAgICAgICB2ZWNfc2wgKGdhLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4 KSkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYV9sbyA9IHZlY19tZXJn ZWgoZ2csIGdhKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2FfaGkgPSB2 ZWNfbWVyZ2VsKGdnLCBnYSk7Ci0rICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKWdnZ2FfbG8sIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgMCkpOwotKyAgICAgICAgdmVj X3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhX2hpLCAwLCAodW5zaWduZWQgY2hhciop KGRzdCArIDQpKTsKLSsgICAgICAgIHNyYyArPSA4ICogMjsgZHN0ICs9IDg7IGNvdW50IC09IDg7 Ci0rICAgIH0KLSsgICAgZ3JheUFfdG9fUkdCQV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOwot K30KLSsKLSt2b2lkIGdyYXlBX3RvX3JnYkEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3Qq IHNyYywgaW50IGNvdW50KSB7Ci0rICAgIHdoaWxlIChjb3VudCA+PSA4KSB7Ci0rICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBncmF5QSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2 ZWNfeGwoMCwgc3JjKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGcwID0gdmVj X2FuZChncmF5QSwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMHgwMEZGKSk7Ci0rICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBhMCA9IHZlY19zciAgIChncmF5QSwgdmVjX3NwbGF0 cygodW5zaWduZWQgc2hvcnQpOCkpOwotKyAgICAgICAgZzAgPSBzY2FsZShnMCwgYTApOwotKyAg ICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBzaG9ydCk4KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnID0gdmVj X29yKGcwLCB2ZWNfc2woZzAsIHY4KSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBnYSA9IHZlY19vcihnMCwgdmVjX3NsKGEwLCB2OCkpOwotKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgZ2dnYV9sbyA9IHZlY19tZXJnZWgoZ2csIGdhKTsKLSsgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0IGdnZ2FfaGkgPSB2ZWNfbWVyZ2VsKGdnLCBnYSk7Ci0rICAgICAg ICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2FfbG8sIDAsICh1bnNpZ25lZCBj aGFyKikoZHN0ICsgMCkpOwotKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hh cilnZ2dhX2hpLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDQpKTsKLSsgICAgICAgIHNyYyAr PSA4ICogMjsgZHN0ICs9IDg7IGNvdW50IC09IDg7Ci0rICAgIH0KLSsgICAgZ3JheUFfdG9fcmdi QV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOwotK30KLSsKLStlbnVtIEZvcm1hdCB7IGtSR0Ix LCBrQkdSMSB9OwotK3N0YXRpYyB2b2lkIGludmVydGVkX2NteWtfdG8oRm9ybWF0IGZvcm1hdCwg dWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgIGF1 dG8gY29udmVydDggPSBbPV0oX192ZWN0b3IgdW5zaWduZWQgY2hhciogbG8sIF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIqIGhpKSB7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHplcm9zID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezB9OwotKyAgICAgICAgY29uc3QgX192 ZWN0b3IgdW5zaWduZWQgY2hhciBwbGFuYXIgPSAoa0JHUjEgPT0gZm9ybWF0KQotKyAgICAgICAg ICAgID8gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezIsNiwxMCwxNCwgMSw1LDksMTMsIDAsNCw4 LDEyLCAzLDcsMTEsMTV9Ci0rICAgICAgICAgICAgOiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7 MCw0LDgsMTIsIDEsNSw5LDEzLCAyLDYsMTAsMTQsIDMsNywxMSwxNX07Ci0rCi0rICAgICAgICAq bG8gPSB2ZWNfcGVybSgqbG8sICpsbywgcGxhbmFyKTsgICAgICAgICAgICAgICAgICAgICAgICAv LyBjY2NjbW1tbSB5eXl5a2trawotKyAgICAgICAgKmhpID0gdmVjX3Blcm0oKmhpLCAqaGksIHBs YW5hcik7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0NDQ01NTU0gWVlZWUtLS0sKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgY20gPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcikK LSsgICAgICAgICAgICB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmxvLCAoX192 ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHlrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpCi0rICAgICAgICAgICAgdmVjX21lcmdlbCgo X192ZWN0b3IgdW5zaWduZWQgaW50KSpsbywgKF9fdmVjdG9yIHVuc2lnbmVkIGludCkqaGkpOwot KwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgYyA9IChfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCl2ZWNfbWVyZ2VoKGNtLCB6ZXJvcyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCBtID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWwoY20sIHplcm9z KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHkgPSAoX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQpdmVjX21lcmdlaCh5aywgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgayA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKHlrLCB6ZXJv cyk7Ci0rCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCByID0gc2NhbGUoYywgayk7 Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnID0gc2NhbGUobSwgayk7Ci0rICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiID0gc2NhbGUoeSwgayk7Ci0rCi0rICAgICAg ICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2OCA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IHNob3J0KTgpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmcgPSB2ZWNfb3Io ciwgdmVjX3NsKGcsIHY4KSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiYSA9 IHZlY19vcihiLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkweEZGMDApKTsKLSsgICAgICAg ICpsbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWgocmcsIGJhKTsKLSsgICAg ICAgICpoaSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWwocmcsIGJhKTsKLSsg ICAgfTsKLSsKLSsgICAgd2hpbGUgKGNvdW50ID49IDgpIHsKLSsgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIgbG8gPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShzcmMgKyAw KSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGhpID0gdmVjX3hsKDAsIChjb25z dCB1bnNpZ25lZCBjaGFyKikoc3JjICsgNCkpOwotKyAgICAgICAgY29udmVydDgoJmxvLCAmaGkp OwotKyAgICAgICAgdmVjX3hzdChsbywgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAwKSk7Ci0r ICAgICAgICB2ZWNfeHN0KGhpLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDQpKTsKLSsgICAg ICAgIHNyYyArPSA4OyBkc3QgKz0gODsgY291bnQgLT0gODsKLSsgICAgfQotKyAgICBpZiAoY291 bnQgPj0gNCkgewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBsbyA9IHZlY194bCgw LCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgaGkgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MH07Ci0rICAgICAgICBjb252ZXJ0 OCgmbG8sICZoaSk7Ci0rICAgICAgICB2ZWNfeHN0KGxvLCAwLCAodW5zaWduZWQgY2hhciopZHN0 KTsKLSsgICAgICAgIHNyYyArPSA0OyBkc3QgKz0gNDsgY291bnQgLT0gNDsKLSsgICAgfQotKyAg ICBhdXRvIHByb2MgPSAoa0JHUjEgPT0gZm9ybWF0KSA/IGludmVydGVkX0NNWUtfdG9fQkdSMV9w b3J0YWJsZSA6IGludmVydGVkX0NNWUtfdG9fUkdCMV9wb3J0YWJsZTsKLSsgICAgcHJvYyhkc3Qs IHNyYywgY291bnQpOwotK30KLSsKLSt2b2lkIGludmVydGVkX0NNWUtfdG9fUkdCMSh1aW50MzJf dCBkc3RbXSwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgIGludmVydGVk X2NteWtfdG8oa1JHQjEsIGRzdCwgc3JjLCBjb3VudCk7Ci0rfQotKwotK3ZvaWQgaW52ZXJ0ZWRf Q01ZS190b19CR1IxKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291 bnQpIHsKLSsgICAgaW52ZXJ0ZWRfY215a190byhrQkdSMSwgZHN0LCBzcmMsIGNvdW50KTsKLSt9 Ci0rCi0rdm9pZCByZ2JBX3RvX1JHQkEodWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNy YywgaW50IGNvdW50KSB7Ci0rICAgIHJnYkFfdG9fUkdCQV9wb3J0YWJsZShkc3QsIHNyYywgY291 bnQpOwotK30KLSsKLSt2b2lkIHJnYkFfdG9fQkdSQSh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50 MzJfdCogc3JjLCBpbnQgY291bnQpIHsKLSsgICAgcmdiQV90b19CR1JBX3BvcnRhYmxlKGRzdCwg c3JjLCBjb3VudCk7Ci0rfQotKwotICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xT WF9MRVZFTF9MQVNYCi0gLy8gLS0gTEFTWCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0gCi1AQCAtMTczNiw2ICsxOTYxLDM5IEBAIHN0YXRpYyB2b2lkIGdyYXlfdG9fUkdCMV9wb3J0 YWJsZSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpCi0gICAg ICAgICB9Ci0gICAgICAgICBncmF5X3RvX1JHQjFfcG9ydGFibGUoZHN0LCBzcmMsIGNvdW50KTsK LSAgICAgfQotKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQot KyAgICB2b2lkIGdyYXlfdG9fUkdCMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3Jj LCBpbnQgY291bnQpIHsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYWxw aGFzID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikweEZGKTsKLSsgICAgICAgIHdoaWxlIChj b3VudCA+PSAxNikgewotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ3JheXMg PSB2ZWNfeGwoMCwgc3JjKTsKLSsKLSsgICAgICAgICAgICAvLyBSZXBsaWNhdGUgZ3JheSBieXRl OiBnZyA9IHVucGFjayhncmF5LCBncmF5KSBwZXIgOC1iaXQgbGFuZS4KLSsgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdnX2xvID0gdmVjX21lcmdlaChncmF5cywgZ3JheXMpOwot KyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ2dfaGkgPSB2ZWNfbWVyZ2VsKGdy YXlzLCBncmF5cyk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBnYV9sbyA9 IHZlY19tZXJnZWgoZ3JheXMsIGFscGhhcyk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgY2hhciBnYV9oaSA9IHZlY19tZXJnZWwoZ3JheXMsIGFscGhhcyk7Ci0rCi0rICAgICAgICAg ICAgLy8gSW50ZXJsZWF2ZSBnLXBhaXJzIGFuZCBnYS1wYWlycyBhdCAxNi1iaXQgZ3JhbnVsYXJp dHkuCi0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYTAgPSB2ZWNfbWVy Z2VoKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnZ19sbywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KWdhX2xvKTsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZ2dhMSA9 IHZlY19tZXJnZWwoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdnX2xvLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpZ2FfbG8pOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGdnZ2EyID0gdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZ2dfaGksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydClnYV9oaSk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgZ2dnYTMgPSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnZ19o aSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdhX2hpKTsKLSsKLSsgICAgICAgICAgICB2ZWNf eHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2EwLCAwLCAodW5zaWduZWQgY2hhciopKGRz dCArICAwKSk7Ci0rICAgICAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhciln Z2dhMSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAgNCkpOwotKyAgICAgICAgICAgIHZlY194 c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYTIsIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0 ICsgIDgpKTsKLSsgICAgICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdn Z2EzLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDEyKSk7Ci0rCi0rICAgICAgICAgICAgc3Jj ICs9IDE2OwotKyAgICAgICAgICAgIGRzdCArPSAxNjsKLSsgICAgICAgICAgICBjb3VudCAtPSAx NjsKLSsgICAgICAgIH0KLSsgICAgICAgIGdyYXlfdG9fUkdCMV9wb3J0YWJsZShkc3QsIHNyYywg Y291bnQpOwotKyAgICB9Ci0gI2VsaWYgU0tfQ1BVX0xTWF9MRVZFTCA+PSBTS19DUFVfTFNYX0xF VkVMX0xBU1gKLSAgICAgLypub3Qgc3RhdGljKi8gaW5saW5lIHZvaWQgZ3JheV90b19SR0IxKHVp bnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgewotICAgICAgICAg Y29uc3QgX19tMjU2aSBhbHBoYXMgPSBfX2xhc3hfeHZyZXBsZ3IydnJfYigweEZGKTsKLUBAIC0x OTIwLDYgKzIxNzgsMzcgQEAgc3RhdGljIHZvaWQgUkdCX3RvX0JHUjFfcG9ydGFibGUodWludDMy X3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KQotICAgICAgICAgcHJvYyhk c3QsIHNyYywgY291bnQpOwotICAgICB9Ci0gCi0rICAgIHZvaWQgUkdCX3RvX1JHQjEodWludDMy X3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgICAgICBpbnNl cnRfYWxwaGFfc2hvdWxkX3N3YXByYihmYWxzZSwgZHN0LCBzcmMsIGNvdW50KTsKLSsgICAgfQot KyAgICB2b2lkIFJHQl90b19CR1IxKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMs IGludCBjb3VudCkgewotKyAgICAgICAgaW5zZXJ0X2FscGhhX3Nob3VsZF9zd2FwcmIodHJ1ZSwg ZHN0LCBzcmMsIGNvdW50KTsKLSsgICAgfQotKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYg ZGVmaW5lZChfX1ZTWF9fKQotKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRfYWxwaGFfc2hvdWxkX3N3 YXByYihib29sIGtTd2FwUkIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgewot KyAgICAgICAgLy8gYWxwaGFNYXNrID0gMHhGRjAwMDAwMCBwZXIgMzItYml0IGxhbmUgLT4gYnl0 ZXMgKGluIExFIG1lbW9yeSBsYXlvdXQpIGFyZQotKyAgICAgICAgLy8gezAwLDAwLDAwLEZGLCAw MCwwMCwwMCxGRiwgLi4ufS4KLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg YWxwaGFNYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgICAgIDAsMCww LDB4RkYsIDAsMCwwLDB4RkYsIDAsMCwwLDB4RkYsIDAsMCwwLDB4RkYKLSsgICAgICAgIH07Ci0r ICAgICAgICAvLyAnWCcgKD0gMCkgaXMgaXJyZWxldmFudDogdGhlIGFscGhhTWFzayBPUiBvdmVy d3JpdGVzIHRob3NlIGxhbmVzIHdpdGggRkYuCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIGV4cGFuZCA9IGtTd2FwUkIKLSsgICAgICAgICAgICA/IChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXsyLDEsMCwwLCA1LDQsMywwLCA4LDcsNiwwLCAxMSwxMCw5LDB9Ci0rICAgICAg ICAgICAgOiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MCwxLDIsMCwgMyw0LDUsMCwgNiw3LDgs MCwgIDksMTAsMTEsMH07Ci0rCi0rICAgICAgICB3aGlsZSAoY291bnQgPj0gNikgewotKyAgICAg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdiID0gdmVjX3hsKDAsIHNyYyk7Ci0rICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2JhID0gdmVjX29yKHZlY19wZXJtKHJn YiwgcmdiLCBleHBhbmQpLCBhbHBoYU1hc2spOwotKyAgICAgICAgICAgIHZlY194c3QocmdiYSwg MCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7Ci0rICAgICAgICAgICAgc3JjICs9IDQqMzsKLSsgICAg ICAgICAgICBkc3QgKz0gNDsKLSsgICAgICAgICAgICBjb3VudCAtPSA0OwotKyAgICAgICAgfQot KyAgICAgICAgYXV0byBwcm9jID0ga1N3YXBSQiA/IFJHQl90b19CR1IxX3BvcnRhYmxlIDogUkdC X3RvX1JHQjFfcG9ydGFibGU7Ci0rICAgICAgICBwcm9jKGRzdCwgc3JjLCBjb3VudCk7Ci0rICAg IH0KLSsKLSAgICAgdm9pZCBSR0JfdG9fUkdCMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhf dCogc3JjLCBpbnQgY291bnQpIHsKLSAgICAgICAgIGluc2VydF9hbHBoYV9zaG91bGRfc3dhcHJi KGZhbHNlLCBkc3QsIHNyYywgY291bnQpOwotICAgICB9Ci0KLWJhc2UtY29tbWl0OiBhOGQ1MzBh YzEzZjBjZTdlOTM3YzA0N2YwMWYwZDM2NzY0ZjVkMzRlCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0t Z2l0IGEvMDAwMi1BZGQtVlNYLWluc3RydWN0aW9ucy1mb3ItbGlid2VicC5wYXRjaCBiLzAwMDIt QWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLWxpYndlYnAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDFmODU3YTcuLjAwMDAwMDAKLS0tIGEvMDAwMi1BZGQtVlNYLWluc3RydWN0 aW9ucy1mb3ItbGlid2VicC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MjQgKzAsMCBAQAot RnJvbSBiOWUxMTY4OTg4MzBhMGY5ZWRkMWIwNTY2NjUxY2UyZDQ5ODk2MThkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP1RydW5nPTIwTD1DMz1BQT89IDw4QHRsZS5p ZC5hdT4KLURhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTU6MzA6MTMgKzEwMDAKLVN1YmplY3Q6IFtQ QVRDSCAyLzNdIEFkZCBWU1ggaW5zdHJ1Y3Rpb25zIGZvciBsaWJ3ZWJwCi0KLUFzc2lzdGVkLWJ5 OiBMYW5jZSBBbGJlcnRzb24gPGxhbmNlQG9zdW9zbC5vcmc+Ci1Bc3Npc3RlZC1ieTogVGh1c2hh biBGZXJuYW5kbyA8dGh1c2hhbkB0aHVzaGFuZmVybmFuZG8uY29tPgotLS0tCi0gbWVkaWEvbGli d2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYyAgICAgfCAgIDYgKwotIG1lZGlhL2xpYndl YnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3ZzeC5jIHwgMjQ2ICsrKysrKysKLSBtZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvY3B1LmggICAgICAgICAgICAgICAgICB8ICAxNCArLQotIG1lZGlhL2xp YndlYnAvc3JjL2RzcC9kZWMuYyAgICAgICAgICAgICAgICAgIHwgICA2ICsKLSBtZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvZGVjX3ZzeC5jICAgICAgICAgICAgICB8IDczNyArKysrKysrKysrKysrKysr KysrCi0gbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnMuYyAgICAgICAgICAgICAgfCAgIDYg KwotIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzX3ZzeC5jICAgICAgICAgIHwgMTYyICsr KysKLSBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3MuYyAgICAgICAgICAgICB8ICAgNiAr Ci0gbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3ZzeC5jICAgICAgICAgfCA0NDkgKysr KysrKysrKysKLSBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbW96LmJ1aWxkICAgICAgICAgICAgICB8 ICAxNCArCi0gbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyLmMgICAgICAgICAgICAgfCAg IDYgKwotIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlcl92c3guYyAgICAgICAgIHwgMjAx ICsrKysrCi0gbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmcuYyAgICAgICAgICAgfCAg MTIgKwotIG1lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBsaW5nX3ZzeC5jICAgICAgIHwgMTUx ICsrKysKLSBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmMgICAgICAgICAgICAgICAgICB8ICAg NiArCi0gbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5oICAgICAgICAgICAgICAgICAgfCAgMjEg KwotIG1lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZfdnN4LmMgICAgICAgICAgICAgIHwgMjA2ICsr KysrKwotIG1lZGlhL2xpYndlYnAvc3JjL21vei9jcHUuY3BwICAgICAgICAgICAgICAgIHwgICA0 ICsKLSAxOCBmaWxlcyBjaGFuZ2VkLCAyMjUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK LSBjcmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3Np bmdfdnN4LmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlY192 c3guYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVyc192 c3guYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3Nf dnN4LmMKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVy X3ZzeC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBs aW5nX3ZzeC5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZf dnN4LmMKLQotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNz aW5nLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCi1pbmRleCA0 OTI3ZTczZTgxYmYuLjVmOTE1MmJmNzAxYSAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3Jj L2RzcC9hbHBoYV9wcm9jZXNzaW5nLmMKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBo YV9wcm9jZXNzaW5nLmMKLUBAIC00MzQsNiArNDM0LDcgQEAgZXh0ZXJuIHZvaWQgV2ViUEluaXRB bHBoYVByb2Nlc3NpbmdNSVBTZHNwUjIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUEluaXRBbHBo YVByb2Nlc3NpbmdTU0UyKHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNz aW5nU1NFNDEodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdORU9O KHZvaWQpOwotK2V4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nVlNYKHZvaWQpOwot IAotIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdEFscGhhUHJvY2Vzc2luZykgewotICAgV2Vi UE11bHRBUkdCUm93ID0gV2ViUE11bHRBUkdCUm93X0M7Ci1AQCAtNDcyLDYgKzQ3MywxMSBAQCBX RUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRBbHBoYVByb2Nlc3NpbmcpIHsKLSAgICAgaWYgKFZQ OEdldENQVUluZm8oa01JUFNkc3BSMikpIHsKLSAgICAgICBXZWJQSW5pdEFscGhhUHJvY2Vzc2lu Z01JUFNkc3BSMigpOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZT WCkKLSsgICAgaWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBXZWJQSW5pdEFscGhh UHJvY2Vzc2luZ1ZTWCgpOwotKyAgICB9Ci0gI2VuZGlmCi0gICB9Ci0gCi1kaWZmIC0tZ2l0IGEv bWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmdfdnN4LmMgYi9tZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZ192c3guYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LWluZGV4IDAwMDAwMDAwMDAwMC4uMmFhZDFjZDhiNjQ4Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9t ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZ192c3guYwotQEAgLTAsMCArMSwy NDYgQEAKLSsvLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk LgotKy8vCi0rLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt c3R5bGUgbGljZW5zZQotKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSsvLyBpbiB0aGUgZmls ZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSsvLyBiZSBm b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K LSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9u IG9mIGFscGhhIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgotKwotKyNpbmNsdWRlICJzcmMvZHNwL2Rz cC5oIgotKwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKLSsKLSsjaW5jbHVkZSA8YWx0aXZl Yy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC9jcHUuaCIK LSsjaW5jbHVkZSAic3JjL3dlYnAvdHlwZXMuaCIKLSsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgdTh4MTY7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB1MTZ4ODsK LSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBpMTZ4ODsKLSt0eXBlZGVmIF9fdmVjdG9y IHVuc2lnbmVkIGludCB1MzJ4NDsKLSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBpbnQgaTMyeDQ7 Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBBbHBoYSBkaXNwYXRjaCAvIGV4dHJh Y3Rpb24uCi0rCi0rc3RhdGljIGludCBEaXNwYXRjaEFscGhhX1ZTWChjb25zdCB1aW50OF90KiBX RUJQX1JFU1RSSUNUIGFscGhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFs cGhhX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QsIGludCBkc3Rfc3RyaWRlKSB7Ci0r ICB1aW50MzJfdCBhbHBoYV9hbmQgPSAweGZmOwotKyAgaW50IGksIGosIGs7Ci0rICBjb25zdCB1 OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgIGNvbnN0IHUxNng4 IHoxNiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTApOwotKyAgY29uc3QgdTMyeDQgYV9t YXNrID0gdmVjX3NwbGF0cygodWludDMyX3QpMHhmZik7ICAvLyBzZWxlY3RzIHRoZSBsb3cgYnl0 ZQotKyAgdTh4MTYgYWxsX2FuZCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhmZik7Ci0r ICBjb25zdCBpbnQgbGltaXQgPSB3aWR0aCAmIH4xNTsKLSsKLSsgIGZvciAoaiA9IDA7IGogPCBo ZWlnaHQ7ICsraikgewotKyAgICB1aW50OF90KiBwdHIgPSBkc3Q7Ci0rICAgIGZvciAoaSA9IDA7 IGkgPCBsaW1pdDsgaSArPSAxNikgewotKyAgICAgIGNvbnN0IHU4eDE2IGEwID0gdmVjX3hsKDAs ICh1bnNpZ25lZCBjaGFyKikmYWxwaGFbaV0pOwotKyAgICAgIC8vIFNwcmVhZCB0aGUgMTYgYWxw aGEgYnl0ZXMgdG8gdGhlIGxvdyBieXRlIG9mIDE2IDMyLWJpdCBsYW5lcy4KLSsgICAgICBjb25z dCB1MTZ4OCBhMV9sbyA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKGEwLCB6ZXJvKTsKLSsgICAgICBjb25z dCB1MTZ4OCBhMV9oaSA9ICh1MTZ4OCl2ZWNfbWVyZ2VsKGEwLCB6ZXJvKTsKLSsgICAgICBjb25z dCB1MzJ4NCBzMCA9ICh1MzJ4NCl2ZWNfbWVyZ2VoKGExX2xvLCB6MTYpOwotKyAgICAgIGNvbnN0 IHUzMng0IHMxID0gKHUzMng0KXZlY19tZXJnZWwoYTFfbG8sIHoxNik7Ci0rICAgICAgY29uc3Qg dTMyeDQgczIgPSAodTMyeDQpdmVjX21lcmdlaChhMV9oaSwgejE2KTsKLSsgICAgICBjb25zdCB1 MzJ4NCBzMyA9ICh1MzJ4NCl2ZWNfbWVyZ2VsKGExX2hpLCB6MTYpOwotKyAgICAgIGNvbnN0IHUz Mng0KiBzcHJlYWRbNF0gPSB7JnMwLCAmczEsICZzMiwgJnMzfTsKLSsgICAgICBmb3IgKGsgPSAw OyBrIDwgNDsgKytrKSB7Ci0rICAgICAgICBjb25zdCB1MzJ4NCBkID0gdmVjX3hsKDAsICh1aW50 MzJfdCopKHB0ciArIDE2ICogaykpOwotKyAgICAgICAgdmVjX3hzdCh2ZWNfc2VsKGQsICpzcHJl YWRba10sIGFfbWFzayksIDAsICh1aW50MzJfdCopKHB0ciArIDE2ICogaykpOwotKyAgICAgIH0K LSsgICAgICBhbGxfYW5kID0gdmVjX2FuZChhbGxfYW5kLCBhMCk7Ci0rICAgICAgcHRyICs9IDY0 OwotKyAgICB9Ci0rICAgIGZvciAoOyBpIDwgd2lkdGg7ICsraSkgewotKyAgICAgIGNvbnN0IHVp bnQzMl90IGFscGhhX3ZhbHVlID0gYWxwaGFbaV07Ci0rICAgICAgZHN0WzQgKiBpXSA9IGFscGhh X3ZhbHVlOwotKyAgICAgIGFscGhhX2FuZCAmPSBhbHBoYV92YWx1ZTsKLSsgICAgfQotKyAgICBh bHBoYSArPSBhbHBoYV9zdHJpZGU7Ci0rICAgIGRzdCArPSBkc3Rfc3RyaWRlOwotKyAgfQotKyAg ewotKyAgICB1bnNpZ25lZCBjaGFyIHRtcFsxNl07Ci0rICAgIG1lbWNweSh0bXAsICZhbGxfYW5k LCAxNik7Ci0rICAgIGZvciAoayA9IDA7IGsgPCAxNjsgKytrKSBhbHBoYV9hbmQgJj0gdG1wW2td OwotKyAgfQotKyAgcmV0dXJuIChhbHBoYV9hbmQgIT0gMHhmZik7Ci0rfQotKwotK3N0YXRpYyB2 b2lkIERpc3BhdGNoQWxwaGFUb0dyZWVuX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNU IGFscGhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFf c3RyaWRlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIGRzdCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdF9zdHJpZGUpIHsKLSsgIGludCBpLCBqOwot KyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0rICBj b25zdCB1MTZ4OCB6MTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkwKTsKLSsgIGNvbnN0 IGludCBsaW1pdCA9IHdpZHRoICYgfjE1OwotKyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgKytq KSB7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSArPSAxNikgewotKyAgICAgIGNvbnN0 IHU4eDE2IGEwID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKikmYWxwaGFbaV0pOwotKyAgICAg IC8vIFBsYWNlIGVhY2ggYWxwaGEgYnl0ZSBpbnRvIHRoZSBncmVlbiBzbG90ICg8PCA4KSBvZiBh IDMyLWJpdCBsYW5lLgotKyAgICAgIGNvbnN0IHUxNng4IGExX2xvID0gKHUxNng4KXZlY19tZXJn ZWgoemVybywgYTApOyAgLy8gbm90ZSB0aGUgJ3plcm8nIGZpcnN0Ci0rICAgICAgY29uc3QgdTE2 eDggYTFfaGkgPSAodTE2eDgpdmVjX21lcmdlbCh6ZXJvLCBhMCk7Ci0rICAgICAgY29uc3QgdTMy eDQgZzAgPSAodTMyeDQpdmVjX21lcmdlaChhMV9sbywgejE2KTsKLSsgICAgICBjb25zdCB1MzJ4 NCBnMSA9ICh1MzJ4NCl2ZWNfbWVyZ2VsKGExX2xvLCB6MTYpOwotKyAgICAgIGNvbnN0IHUzMng0 IGcyID0gKHUzMng0KXZlY19tZXJnZWgoYTFfaGksIHoxNik7Ci0rICAgICAgY29uc3QgdTMyeDQg ZzMgPSAodTMyeDQpdmVjX21lcmdlbChhMV9oaSwgejE2KTsKLSsgICAgICB2ZWNfeHN0KGcwLCAw LCAmZHN0W2kgKyAwXSk7Ci0rICAgICAgdmVjX3hzdChnMSwgMCwgJmRzdFtpICsgNF0pOwotKyAg ICAgIHZlY194c3QoZzIsIDAsICZkc3RbaSArIDhdKTsKLSsgICAgICB2ZWNfeHN0KGczLCAwLCAm ZHN0W2kgKyAxMl0pOwotKyAgICB9Ci0rICAgIGZvciAoOyBpIDwgd2lkdGg7ICsraSkgZHN0W2ld ID0gYWxwaGFbaV0gPDwgODsKLSsgICAgYWxwaGEgKz0gYWxwaGFfc3RyaWRlOwotKyAgICBkc3Qg Kz0gZHN0X3N0cmlkZTsKLSsgIH0KLSt9Ci0rCi0rc3RhdGljIGludCBFeHRyYWN0QWxwaGFfVlNY KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYXJnYiwgaW50IGFyZ2Jfc3RyaWRlLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQ4X3Qq IFdFQlBfUkVTVFJJQ1QgYWxwaGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBh bHBoYV9zdHJpZGUpIHsKLSsgIHVpbnQzMl90IGFscGhhX2FuZCA9IDB4ZmY7Ci0rICBpbnQgaSwg aiwgazsKLSsgIGNvbnN0IHUzMng0IGFfbWFzayA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTB4ZmYp OyAgLy8ga2VlcHMgdGhlIGxvdyBieXRlCi0rICB1OHgxNiBhbGxfYW5kID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikweGZmKTsKLSsgIGNvbnN0IGludCBsaW1pdCA9IHdpZHRoICYgfjc7Ci0r Ci0rICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKLSsgICAgY29uc3QgdWludDMyX3Qq IHNyYyA9IChjb25zdCB1aW50MzJfdCopYXJnYjsKLSsgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0 OyBpICs9IDgpIHsKLSsgICAgICBjb25zdCB1MzJ4NCBhMCA9IHZlY19hbmQodmVjX3hsKDAsICh1 aW50MzJfdCopKHNyYyArIDApKSwgYV9tYXNrKTsKLSsgICAgICBjb25zdCB1MzJ4NCBhMSA9IHZl Y19hbmQodmVjX3hsKDAsICh1aW50MzJfdCopKHNyYyArIDQpKSwgYV9tYXNrKTsKLSsgICAgICBj b25zdCBpMTZ4OCBjMCA9IHZlY19wYWNrcygoaTMyeDQpYTAsIChpMzJ4NClhMSk7Ci0rICAgICAg Y29uc3QgdTh4MTYgZDAgPSB2ZWNfcGFja3N1KGMwLCBjMCk7ICAvLyA4IGFscGhhIGJ5dGVzIGlu IHRoZSBsb3cgaGFsZgotKyAgICAgIG1lbWNweSgmYWxwaGFbaV0sICZkMCwgOCk7Ci0rICAgICAg YWxsX2FuZCA9IHZlY19hbmQoYWxsX2FuZCwgZDApOwotKyAgICAgIHNyYyArPSA4OwotKyAgICB9 Ci0rICAgIGZvciAoOyBpIDwgd2lkdGg7ICsraSkgewotKyAgICAgIGNvbnN0IHVpbnQzMl90IGFs cGhhX3ZhbHVlID0gYXJnYls0ICogaV07Ci0rICAgICAgYWxwaGFbaV0gPSBhbHBoYV92YWx1ZTsK LSsgICAgICBhbHBoYV9hbmQgJj0gYWxwaGFfdmFsdWU7Ci0rICAgIH0KLSsgICAgYXJnYiArPSBh cmdiX3N0cmlkZTsKLSsgICAgYWxwaGEgKz0gYWxwaGFfc3RyaWRlOwotKyAgfQotKyAgewotKyAg ICB1bnNpZ25lZCBjaGFyIHRtcFsxNl07Ci0rICAgIG1lbWNweSh0bXAsICZhbGxfYW5kLCAxNik7 Ci0rICAgIGZvciAoayA9IDA7IGsgPCA4OyArK2spIGFscGhhX2FuZCAmPSB0bXBba107Ci0rICB9 Ci0rICByZXR1cm4gKGFscGhhX2FuZCA9PSAweGZmKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgRXh0 cmFjdEdyZWVuX1ZTWChjb25zdCB1aW50MzJfdCogV0VCUF9SRVNUUklDVCBhcmdiLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBhbHBoYSwgaW50 IHNpemUpIHsKLSsgIGludCBpOwotKyAgY29uc3QgdTMyeDQgbWFzayA9IHZlY19zcGxhdHMoKHVp bnQzMl90KTB4ZmYpOwotKyAgY29uc3QgdTMyeDQgc2g4ID0gdmVjX3NwbGF0cygodWludDMyX3Qp OCk7Ci0rICBmb3IgKGkgPSAwOyBpICsgMTYgPD0gc2l6ZTsgaSArPSAxNikgewotKyAgICBjb25z dCB1MzJ4NCBhMCA9Ci0rICAgICAgICB2ZWNfYW5kKHZlY19zcih2ZWNfeGwoMCwgKHVpbnQzMl90 KikoYXJnYiArIGkgKyAwKSksIHNoOCksIG1hc2spOwotKyAgICBjb25zdCB1MzJ4NCBhMSA9Ci0r ICAgICAgICB2ZWNfYW5kKHZlY19zcih2ZWNfeGwoMCwgKHVpbnQzMl90KikoYXJnYiArIGkgKyA0 KSksIHNoOCksIG1hc2spOwotKyAgICBjb25zdCB1MzJ4NCBhMiA9Ci0rICAgICAgICB2ZWNfYW5k KHZlY19zcih2ZWNfeGwoMCwgKHVpbnQzMl90KikoYXJnYiArIGkgKyA4KSksIHNoOCksIG1hc2sp OwotKyAgICBjb25zdCB1MzJ4NCBhMyA9Ci0rICAgICAgICB2ZWNfYW5kKHZlY19zcih2ZWNfeGwo MCwgKHVpbnQzMl90KikoYXJnYiArIGkgKyAxMikpLCBzaDgpLCBtYXNrKTsKLSsgICAgY29uc3Qg aTE2eDggZDAgPSB2ZWNfcGFja3MoKGkzMng0KWEwLCAoaTMyeDQpYTEpOwotKyAgICBjb25zdCBp MTZ4OCBkMSA9IHZlY19wYWNrcygoaTMyeDQpYTIsIChpMzJ4NClhMyk7Ci0rICAgIGNvbnN0IHU4 eDE2IGUgPSB2ZWNfcGFja3N1KGQwLCBkMSk7Ci0rICAgIHZlY194c3QoZSwgMCwgJmFscGhhW2ld KTsKLSsgIH0KLSsgIGZvciAoOyBpIDwgc2l6ZTsgKytpKSBhbHBoYVtpXSA9IGFyZ2JbaV0gPj4g ODsKLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBQcmVtdWx0aXBseS4KLSsK LSsjZGVmaW5lIE1VTFRJUExJRVIoYSkgKChhKSAqIDMyODk3VSkKLSsjZGVmaW5lIFBSRU1VTFRJ UExZKHgsIG0pICgoKHgpICogKG0pKSA+PiAyMykKLSsKLSsvLyBTcHJlYWRzIHRoZSBhbHBoYSBs YW5lIGFjcm9zcyByL2cvYiBhbmQgaW5zZXJ0cyAweGZmIGluIHRoZSBhbHBoYSBsYW5lLCBmb3IK LSsvLyB0aGUgdHdvIHBpeGVscyBwYWNrZWQgaW4gYSAxNi1iaXQtcGVyLWNoYW5uZWwgdmVjdG9y LiBCdWlsdCBhZ2FpbnN0IHRoZQotKy8vIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcjsgc3JjIGlz IHRoZSBjaGFubmVsIHZlY3RvciwgdGhlIHNlY29uZCBvcGVyYW5kIGlzCi0rLy8gYW4gYWxsLTB4 ZmYgdmVjdG9yLgotK3N0YXRpYyBjb25zdCB1OHgxNiBrU3ByZWFkQWxwaGFMYXN0ID0gezYsICA3 LCAgNiwgIDcsICA2LCAgNywgIDE2LCA3LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDE0LCAxNSwgMTQsIDE1LCAxNCwgMTUsIDE2LCAxNX07Ci0rc3RhdGljIGNvbnN0 IHU4eDE2IGtTcHJlYWRBbHBoYUZpcnN0ID0gezE2LCAxLCAwLCAxLCAwLCAxLCAwLCAxLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgOSwgOCwgOSwgOCwgOSwg OCwgOX07Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHUxNng4IE11bEhpMTYodTE2eDggYSwgdTE2 eDggYikgewotKyAgY29uc3QgdTMyeDQgc2ggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMTYp OwotKyAgY29uc3QgdTMyeDQgZSA9IHZlY19zcih2ZWNfbXVsZShhLCBiKSwgc2gpOwotKyAgY29u c3QgdTMyeDQgbyA9IHZlY19zcih2ZWNfbXVsbyhhLCBiKSwgc2gpOwotKyAgcmV0dXJuIHZlY19w YWNrKHZlY19tZXJnZWgoZSwgbyksIHZlY19tZXJnZWwoZSwgbykpOwotK30KLSsKLStzdGF0aWMg dm9pZCBBcHBseUFscGhhTXVsdGlwbHlfVlNYKHVpbnQ4X3QqIHJnYmEsIGludCBhbHBoYV9maXJz dCwgaW50IHcsIGludCBoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHN0cmlkZSkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNo YXIpMCk7Ci0rICBjb25zdCB1OHgxNiBhbGxmZiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIp MHhmZik7Ci0rICBjb25zdCB1MTZ4OCB6MTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkw KTsKLSsgIGNvbnN0IHUxNng4IGtNdWx0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMHg4 MDgxKTsKLSsgIGNvbnN0IHUxNng4IHNoNyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTcp OwotKyAgY29uc3QgdTh4MTYgY3RybCA9IGFscGhhX2ZpcnN0ID8ga1NwcmVhZEFscGhhRmlyc3Qg OiBrU3ByZWFkQWxwaGFMYXN0OwotKyAgY29uc3QgaW50IGtTcGFuID0gNDsKLSsgIHdoaWxlICho LS0gPiAwKSB7Ci0rICAgIHVpbnQ4X3QqIGNvbnN0IHJnYnggPSByZ2JhOwotKyAgICBpbnQgaTsK LSsgICAgZm9yIChpID0gMDsgaSArIGtTcGFuIDw9IHc7IGkgKz0ga1NwYW4pIHsKLSsgICAgICBj b25zdCB1OHgxNiBhcmdiMCA9IHZlY194bCgwLCAodW5zaWduZWQgY2hhciopKHJnYnggKyA0ICog aSkpOwotKyAgICAgIGNvbnN0IHUxNng4IGxvID0gKHUxNng4KXZlY19tZXJnZWgoYXJnYjAsIHpl cm8pOwotKyAgICAgIGNvbnN0IHUxNng4IGhpID0gKHUxNng4KXZlY19tZXJnZWwoYXJnYjAsIHpl cm8pOwotKyAgICAgIGNvbnN0IHUxNng4IGFfbG8gPSAodTE2eDgpdmVjX3Blcm0oKHU4eDE2KWxv LCBhbGxmZiwgY3RybCk7Ci0rICAgICAgY29uc3QgdTE2eDggYV9oaSA9ICh1MTZ4OCl2ZWNfcGVy bSgodTh4MTYpaGksIGFsbGZmLCBjdHJsKTsKLSsgICAgICBjb25zdCB1MTZ4OCBBMGxvID0gdmVj X21sYWRkKGFfbG8sIGxvLCB6MTYpOwotKyAgICAgIGNvbnN0IHUxNng4IEEwaGkgPSB2ZWNfbWxh ZGQoYV9oaSwgaGksIHoxNik7Ci0rICAgICAgY29uc3QgdTE2eDggQTJsbyA9IHZlY19zcihNdWxI aTE2KEEwbG8sIGtNdWx0KSwgc2g3KTsKLSsgICAgICBjb25zdCB1MTZ4OCBBMmhpID0gdmVjX3Ny KE11bEhpMTYoQTBoaSwga011bHQpLCBzaDcpOwotKyAgICAgIGNvbnN0IHU4eDE2IG91dCA9IHZl Y19wYWNrc3UoKGkxNng4KUEybG8sIChpMTZ4OClBMmhpKTsKLSsgICAgICB2ZWNfeHN0KG91dCwg MCwgKHVuc2lnbmVkIGNoYXIqKShyZ2J4ICsgNCAqIGkpKTsKLSsgICAgfQotKyAgICAvLyBGaW5p c2ggd2l0aCBsZWZ0LW92ZXJzLgotKyAgICBmb3IgKDsgaSA8IHc7ICsraSkgewotKyAgICAgIHVp bnQ4X3QqIGNvbnN0IHJnYiA9IHJnYmEgKyAoYWxwaGFfZmlyc3QgPyAxIDogMCk7Ci0rICAgICAg Y29uc3QgdWludDhfdCogY29uc3QgYWxwaGEgPSByZ2JhICsgKGFscGhhX2ZpcnN0ID8gMCA6IDMp OwotKyAgICAgIGNvbnN0IHVpbnQzMl90IGEgPSBhbHBoYVs0ICogaV07Ci0rICAgICAgaWYgKGEg IT0gMHhmZikgewotKyAgICAgICAgY29uc3QgdWludDMyX3QgbXVsdCA9IE1VTFRJUExJRVIoYSk7 Ci0rICAgICAgICByZ2JbNCAqIGkgKyAwXSA9IFBSRU1VTFRJUExZKHJnYls0ICogaSArIDBdLCBt dWx0KTsKLSsgICAgICAgIHJnYls0ICogaSArIDFdID0gUFJFTVVMVElQTFkocmdiWzQgKiBpICsg MV0sIG11bHQpOwotKyAgICAgICAgcmdiWzQgKiBpICsgMl0gPSBQUkVNVUxUSVBMWShyZ2JbNCAq IGkgKyAyXSwgbXVsdCk7Ci0rICAgICAgfQotKyAgICB9Ci0rICAgIHJnYmEgKz0gc3RyaWRlOwot KyAgfQotK30KLSsKLSsjdW5kZWYgTVVMVElQTElFUgotKyN1bmRlZiBQUkVNVUxUSVBMWQotKwot Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rZXh0ZXJuIHZvaWQgV2ViUEluaXRBbHBoYVBy b2Nlc3NpbmdWU1godm9pZCk7Ci0rCi0rV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFdl YlBJbml0QWxwaGFQcm9jZXNzaW5nVlNYKHZvaWQpIHsKLSsgIFdlYlBBcHBseUFscGhhTXVsdGlw bHkgPSBBcHBseUFscGhhTXVsdGlwbHlfVlNYOwotKyAgV2ViUERpc3BhdGNoQWxwaGEgPSBEaXNw YXRjaEFscGhhX1ZTWDsKLSsgIFdlYlBEaXNwYXRjaEFscGhhVG9HcmVlbiA9IERpc3BhdGNoQWxw aGFUb0dyZWVuX1ZTWDsKLSsgIFdlYlBFeHRyYWN0QWxwaGEgPSBFeHRyYWN0QWxwaGFfVlNYOwot KyAgV2ViUEV4dHJhY3RHcmVlbiA9IEV4dHJhY3RHcmVlbl9WU1g7Ci0rfQotKwotKyNlbHNlICAv LyAhV0VCUF9VU0VfVlNYCi0rCi0rV0VCUF9EU1BfSU5JVF9TVFVCKFdlYlBJbml0QWxwaGFQcm9j ZXNzaW5nVlNYKQotKwotKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCi1kaWZmIC0tZ2l0IGEvbWVk aWEvbGlid2VicC9zcmMvZHNwL2NwdS5oIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2NwdS5oCi1p bmRleCAxN2M0ZGI5NzFjN2YuLmQxZDRiMzEyN2M4NCAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndl YnAvc3JjL2RzcC9jcHUuaAotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2NwdS5oCi1AQCAt MTU0LDYgKzE1NCwxNyBAQAotICNkZWZpbmUgV0VCUF9VU0VfTVNBCi0gI2VuZGlmCi0gCi0rLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBQUEM2NCAvIFBvd2VyIFZTWCAoSVNBIDIuMDcgLyBQ T1dFUjggYmFzZWxpbmUpLgotKwotKyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pICYmIGRlZmlu ZWQoX19WU1hfXykKLSsjZGVmaW5lIFdFQlBfVVNFX1ZTWAotKyNlbmRpZgotKwotKyNpZiBkZWZp bmVkKFdFQlBfVVNFX1ZTWCkgJiYgIWRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKLSsjZGVmaW5lIFdF QlBfSEFWRV9WU1gKLSsjZW5kaWYKLSsKLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIAotICNp Zm5kZWYgV0VCUF9EU1BfT01JVF9DX0NPREUKLUBAIC0zMDgsNyArMzE5LDggQEAgdHlwZWRlZiBl bnVtIHsKLSAgIGtORU9OLAotICAga01JUFMzMiwKLSAgIGtNSVBTZHNwUjIsCi0tICBrTVNBCi0r ICBrTVNBLAotKyAga1ZTWAotIH0gQ1BVRmVhdHVyZTsKLSAKLSAvLyByZXR1cm5zIHRydWUgaWYg dGhlIENQVSBzdXBwb3J0cyB0aGUgZmVhdHVyZS4KLWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJw L3NyYy9kc3AvZGVjLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZGVjLmMKLWluZGV4IDRmMzgz MDk5ODBjZS4uZjM0Mjc2YmE3MzE2IDEwMDY0NAotLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNw L2RlYy5jCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZGVjLmMKLUBAIC03NTIsNiArNzUy LDcgQEAgZXh0ZXJuIHZvaWQgVlA4RHNwSW5pdE5FT04odm9pZCk7Ci0gZXh0ZXJuIHZvaWQgVlA4 RHNwSW5pdE1JUFMzMih2b2lkKTsKLSBleHRlcm4gdm9pZCBWUDhEc3BJbml0TUlQU2RzcFIyKHZv aWQpOwotIGV4dGVybiB2b2lkIFZQOERzcEluaXRNU0Eodm9pZCk7Ci0rZXh0ZXJuIHZvaWQgVlA4 RHNwSW5pdFZTWCh2b2lkKTsKLSAKLSBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4RHNwSW5pdCkgewot ICAgVlA4SW5pdENsaXBUYWJsZXMoKTsKLUBAIC04NDMsNiArODQ0LDExIEBAIFdFQlBfRFNQX0lO SVRfRlVOQyhWUDhEc3BJbml0KSB7Ci0gICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNU0EpKSB7Ci0g ICAgICAgVlA4RHNwSW5pdE1TQSgpOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoV0VC UF9IQVZFX1ZTWCkKLSsgICAgaWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBWUDhE c3BJbml0VlNYKCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAgIH0KLSAKLWRpZmYgLS1naXQgYS9tZWRp YS9saWJ3ZWJwL3NyYy9kc3AvZGVjX3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlY192 c3guYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uZTBjMWNiYzNi NzFiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZGVjX3ZzeC5j Ci1AQCAtMCwwICsxLDczNyBAQAotKy8vIENvcHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCi0rLy8KLSsvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0rLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl IENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0rLy8gdHJlZS4gQW4gYWRk aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot Ky8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz IG1heQotKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl IHNvdXJjZSB0cmVlLgotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8KLSsvLyBWU1ggKFBv d2VyUEMpIHZlcnNpb24gb2YgZGVjb2RpbmcgZnVuY3Rpb25zLgotKwotKyNpbmNsdWRlICJzcmMv ZHNwL2RzcC5oIgotKwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKLSsKLSsjaW5jbHVkZSA8 YWx0aXZlYy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSt0eXBlZGVmIF9fdmVjdG9yIHNp Z25lZCBzaG9ydCAgICAgaTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCAg IHUxNng4OwotK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIGludCAgICAgICBpMzJ4NDsKLSt0eXBl ZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGludCAgICAgdTMyeDQ7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyICAgIHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIGNoYXIgICAg ICBpOHgxNjsKLSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgaTY0eDI7Ci0rCi0r Ly8gU2lnbmVkIG11bHRpcGx5LWhpZ2ggb2YgcGFja2VkIDE2LWJpdCBsYW5lcyAoUE9XRVI4IGhh cyBubyB2bXVsaHNoKS4KLStzdGF0aWMgV0VCUF9JTkxJTkUgaTE2eDggTXVsSGkxNl9TKGkxNng4 IGEsIGkxNng4IGIpIHsKLSsgIGNvbnN0IHUzMng0IHNoID0gdmVjX3NwbGF0cygodW5zaWduZWQg aW50KTE2KTsKLSsgIGNvbnN0IGkzMng0IGUgPSB2ZWNfc3JhKHZlY19tdWxlKGEsIGIpLCBzaCk7 Ci0rICBjb25zdCBpMzJ4NCBvID0gdmVjX3NyYSh2ZWNfbXVsbyhhLCBiKSwgc2gpOwotKyAgcmV0 dXJuIChpMTZ4OCl2ZWNfcGFjayh2ZWNfbWVyZ2VoKGUsIG8pLCB2ZWNfbWVyZ2VsKGUsIG8pKTsK LSt9Ci0rCi0rLy8gVHJhbnNwb3NlIHR3byBpbnRlcmxlYXZlZCA0eDQgYmxvY2tzIG9mIDE2LWJp dCB2YWx1ZXMuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgVHJhbnNwb3NlMl80eDQoaTE2eDgg aW4wLCBpMTZ4OCBpbjEsIGkxNng4IGluMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpMTZ4OCBpbjMsIGkxNng4KiBvdXQwLCBpMTZ4OCogb3V0MSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMTZ4OCogb3V0MiwgaTE2eDgqIG91dDMp IHsKLSsgIGNvbnN0IGkxNng4IHQwID0gKGkxNng4KXZlY19tZXJnZWgoaW4wLCBpbjEpOwotKyAg Y29uc3QgaTE2eDggdDEgPSAoaTE2eDgpdmVjX21lcmdlaChpbjIsIGluMyk7Ci0rICBjb25zdCBp MTZ4OCB0MiA9IChpMTZ4OCl2ZWNfbWVyZ2VsKGluMCwgaW4xKTsKLSsgIGNvbnN0IGkxNng4IHQz ID0gKGkxNng4KXZlY19tZXJnZWwoaW4yLCBpbjMpOwotKyAgY29uc3QgaTMyeDQgdTAgPSB2ZWNf bWVyZ2VoKChpMzJ4NCl0MCwgKGkzMng0KXQxKTsKLSsgIGNvbnN0IGkzMng0IHUxID0gdmVjX21l cmdlaCgoaTMyeDQpdDIsIChpMzJ4NCl0Myk7Ci0rICBjb25zdCBpMzJ4NCB1MiA9IHZlY19tZXJn ZWwoKGkzMng0KXQwLCAoaTMyeDQpdDEpOwotKyAgY29uc3QgaTMyeDQgdTMgPSB2ZWNfbWVyZ2Vs KChpMzJ4NCl0MiwgKGkzMng0KXQzKTsKLSsgICpvdXQwID0gKGkxNng4KXZlY19tZXJnZWgoKGk2 NHgyKXUwLCAoaTY0eDIpdTEpOwotKyAgKm91dDEgPSAoaTE2eDgpdmVjX21lcmdlbCgoaTY0eDIp dTAsIChpNjR4Mil1MSk7Ci0rICAqb3V0MiA9IChpMTZ4OCl2ZWNfbWVyZ2VoKChpNjR4Mil1Miwg KGk2NHgyKXUzKTsKLSsgICpvdXQzID0gKGkxNng4KXZlY19tZXJnZWwoKGk2NHgyKXUyLCAoaTY0 eDIpdTMpOwotK30KLSsKLSsvLyBCb3VuZGVkIDQtY29lZmZpY2llbnQgbG9hZCBpbnRvIHRoZSBs b3cgaGFsZiBvZiBhIDE2LWJpdCB2ZWN0b3IuCi0rc3RhdGljIFdFQlBfSU5MSU5FIGkxNng4IExv YWQ0Q29lZmZzKGNvbnN0IGludDE2X3QqIFdFQlBfUkVTVFJJQ1QgcCkgewotKyAgaW50MTZfdCB0 bXBbOF0gPSB7MH07Ci0rICBtZW1jcHkodG1wLCBwLCA0ICogc2l6ZW9mKGludDE2X3QpKTsKLSsg IHJldHVybiAqKGNvbnN0IGkxNng4Kil0bXA7Ci0rfQotKwotKy8vIEJvdW5kZWQgbG9hZCBvZiBu IHBpeGVscywgemVyby1leHRlbmRlZCB0byAxNi1iaXQgbGFuZXMuCi0rc3RhdGljIFdFQlBfSU5M SU5FIGkxNng4IExvYWREc3QoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBwLCBpbnQgbikg ewotKyAgdW5zaWduZWQgY2hhciB0bXBbMTZdID0gezB9OwotKyAgbWVtY3B5KHRtcCwgcCwgbik7 Ci0rICByZXR1cm4gKGkxNng4KXZlY19tZXJnZWgodmVjX3hsKDAsIHRtcCksIHZlY19zcGxhdHMo KHVuc2lnbmVkIGNoYXIpMCkpOwotK30KLSsKLStzdGF0aWMgdm9pZCBUcmFuc2Zvcm1fVlNYKGNv bnN0IGludDE2X3QqIFdFQlBfUkVTVFJJQ1QgaW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwgaW50IGRvX3R3bykgewotKyAgY29uc3QgaTE2 eDggazEgPSB2ZWNfc3BsYXRzKChzaG9ydCkyMDA5MSk7Ci0rICBjb25zdCBpMTZ4OCBrMiA9IHZl Y19zcGxhdHMoKHNob3J0KS0zMDA2OCk7Ci0rICBjb25zdCB1MTZ4OCB0aHJlZSA9IHZlY19zcGxh dHMoKHVuc2lnbmVkIHNob3J0KTMpOwotKyAgaTE2eDggaW4wID0gTG9hZDRDb2VmZnMoaW4gKyAw KSwgaW4xID0gTG9hZDRDb2VmZnMoaW4gKyA0KTsKLSsgIGkxNng4IGluMiA9IExvYWQ0Q29lZmZz KGluICsgOCksIGluMyA9IExvYWQ0Q29lZmZzKGluICsgMTIpOwotKyAgaTE2eDggVDAsIFQxLCBU MiwgVDM7Ci0rCi0rICBpZiAoZG9fdHdvKSB7Ci0rICAgIGluMCA9IChpMTZ4OCl2ZWNfbWVyZ2Vo KChpNjR4MilpbjAsIChpNjR4MilMb2FkNENvZWZmcyhpbiArIDE2KSk7Ci0rICAgIGluMSA9IChp MTZ4OCl2ZWNfbWVyZ2VoKChpNjR4MilpbjEsIChpNjR4MilMb2FkNENvZWZmcyhpbiArIDIwKSk7 Ci0rICAgIGluMiA9IChpMTZ4OCl2ZWNfbWVyZ2VoKChpNjR4MilpbjIsIChpNjR4MilMb2FkNENv ZWZmcyhpbiArIDI0KSk7Ci0rICAgIGluMyA9IChpMTZ4OCl2ZWNfbWVyZ2VoKChpNjR4MilpbjMs IChpNjR4MilMb2FkNENvZWZmcyhpbiArIDI4KSk7Ci0rICB9Ci0rCi0rICB7ICAvLyBWZXJ0aWNh bCBwYXNzICsgdHJhbnNwb3NlLgotKyAgICBjb25zdCBpMTZ4OCBhID0gdmVjX2FkZChpbjAsIGlu Mik7Ci0rICAgIGNvbnN0IGkxNng4IGIgPSB2ZWNfc3ViKGluMCwgaW4yKTsKLSsgICAgY29uc3Qg aTE2eDggYyA9IHZlY19hZGQodmVjX3N1YihpbjEsIGluMyksCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZlY19zdWIoTXVsSGkxNl9TKGluMSwgazIpLCBNdWxIaTE2X1MoaW4zLCBrMSkp KTsKLSsgICAgY29uc3QgaTE2eDggZCA9IHZlY19hZGQodmVjX2FkZChpbjEsIGluMyksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19hZGQoTXVsSGkxNl9TKGluMSwgazEpLCBNdWxI aTE2X1MoaW4zLCBrMikpKTsKLSsgICAgVHJhbnNwb3NlMl80eDQodmVjX2FkZChhLCBkKSwgdmVj X2FkZChiLCBjKSwgdmVjX3N1YihiLCBjKSwgdmVjX3N1YihhLCBkKSwKLSsgICAgICAgICAgICAg ICAgICAgJlQwLCAmVDEsICZUMiwgJlQzKTsKLSsgIH0KLSsgIHsgIC8vIEhvcml6b250YWwgcGFz cyArIHRyYW5zcG9zZS4KLSsgICAgY29uc3QgaTE2eDggZGMgPSB2ZWNfYWRkKFQwLCB2ZWNfc3Bs YXRzKChzaG9ydCk0KSk7Ci0rICAgIGNvbnN0IGkxNng4IGEgPSB2ZWNfYWRkKGRjLCBUMik7Ci0r ICAgIGNvbnN0IGkxNng4IGIgPSB2ZWNfc3ViKGRjLCBUMik7Ci0rICAgIGNvbnN0IGkxNng4IGMg PSB2ZWNfYWRkKHZlY19zdWIoVDEsIFQzKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmVjX3N1YihNdWxIaTE2X1MoVDEsIGsyKSwgTXVsSGkxNl9TKFQzLCBrMSkpKTsKLSsgICAgY29u c3QgaTE2eDggZCA9IHZlY19hZGQodmVjX2FkZChUMSwgVDMpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2ZWNfYWRkKE11bEhpMTZfUyhUMSwgazEpLCBNdWxIaTE2X1MoVDMsIGsyKSkp OwotKyAgICBjb25zdCBpMTZ4OCBzMCA9IHZlY19zcmEodmVjX2FkZChhLCBkKSwgdGhyZWUpOwot KyAgICBjb25zdCBpMTZ4OCBzMSA9IHZlY19zcmEodmVjX2FkZChiLCBjKSwgdGhyZWUpOwotKyAg ICBjb25zdCBpMTZ4OCBzMiA9IHZlY19zcmEodmVjX3N1YihiLCBjKSwgdGhyZWUpOwotKyAgICBj b25zdCBpMTZ4OCBzMyA9IHZlY19zcmEodmVjX3N1YihhLCBkKSwgdGhyZWUpOwotKyAgICBUcmFu c3Bvc2UyXzR4NChzMCwgczEsIHMyLCBzMywgJlQwLCAmVDEsICZUMiwgJlQzKTsKLSsgIH0KLSsg IHsgIC8vIEFkZCB0byB0aGUgcmVmZXJlbmNlIHBpeGVscyBhbmQgc3RvcmUgd2l0aCBzYXR1cmF0 aW9uLgotKyAgICBjb25zdCBpbnQgbiA9IGRvX3R3byA/IDggOiA0OwotKyAgICBjb25zdCBpMTZ4 OCBkMCA9IExvYWREc3QoZHN0ICsgMCAqIEJQUywgbik7Ci0rICAgIGNvbnN0IGkxNng4IGQxID0g TG9hZERzdChkc3QgKyAxICogQlBTLCBuKTsKLSsgICAgY29uc3QgaTE2eDggZDIgPSBMb2FkRHN0 KGRzdCArIDIgKiBCUFMsIG4pOwotKyAgICBjb25zdCBpMTZ4OCBkMyA9IExvYWREc3QoZHN0ICsg MyAqIEJQUywgbik7Ci0rICAgIGNvbnN0IHU4eDE2IHIwID0gdmVjX3BhY2tzdSh2ZWNfYWRkKGQw LCBUMCksIHZlY19hZGQoZDAsIFQwKSk7Ci0rICAgIGNvbnN0IHU4eDE2IHIxID0gdmVjX3BhY2tz dSh2ZWNfYWRkKGQxLCBUMSksIHZlY19hZGQoZDEsIFQxKSk7Ci0rICAgIGNvbnN0IHU4eDE2IHIy ID0gdmVjX3BhY2tzdSh2ZWNfYWRkKGQyLCBUMiksIHZlY19hZGQoZDIsIFQyKSk7Ci0rICAgIGNv bnN0IHU4eDE2IHIzID0gdmVjX3BhY2tzdSh2ZWNfYWRkKGQzLCBUMyksIHZlY19hZGQoZDMsIFQz KSk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYjBbMTZdLCBiMVsxNl0sIGIyWzE2XSwgYjNbMTZdOwot KyAgICBtZW1jcHkoYjAsICZyMCwgMTYpOyBtZW1jcHkoYjEsICZyMSwgMTYpOwotKyAgICBtZW1j cHkoYjIsICZyMiwgMTYpOyBtZW1jcHkoYjMsICZyMywgMTYpOwotKyAgICBtZW1jcHkoZHN0ICsg MCAqIEJQUywgYjAsIG4pOyBtZW1jcHkoZHN0ICsgMSAqIEJQUywgYjEsIG4pOwotKyAgICBtZW1j cHkoZHN0ICsgMiAqIEJQUywgYjIsIG4pOyBtZW1jcHkoZHN0ICsgMyAqIEJQUywgYjMsIG4pOwot KyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIFNpbXBsZSBpbi1sb29w IGVkZ2UgZmlsdGVyaW5nLgotKwotKyNkZWZpbmUgQUJTVShwLCBxKSB2ZWNfb3IodmVjX3N1YnMo KHU4eDE2KShxKSwgKHU4eDE2KShwKSksIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHZl Y19zdWJzKCh1OHgxNikocCksICh1OHgxNikocSkpKQotKwotKy8vIFBlci1ieXRlIHNpZ25lZCBh cml0aG1ldGljID4+MywgcGFja2VkIHdpdGggc2F0dXJhdGlvbi4KLStzdGF0aWMgV0VCUF9JTkxJ TkUgaTh4MTYgU2lnbmVkU2hpZnQzKGk4eDE2IHgpIHsKLSsgIGNvbnN0IHU4eDE2IHogPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgY29uc3QgdTE2eDggc2ggPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBzaG9ydCkoMyArIDgpKTsKLSsgIGNvbnN0IGkxNng4IGxvID0gdmVjX3NyYSgo aTE2eDgpdmVjX21lcmdlaCh6LCAodTh4MTYpeCksIHNoKTsKLSsgIGNvbnN0IGkxNng4IGhpID0g dmVjX3NyYSgoaTE2eDgpdmVjX21lcmdlbCh6LCAodTh4MTYpeCksIHNoKTsKLSsgIHJldHVybiAo aTh4MTYpdmVjX3BhY2tzKGxvLCBoaSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lk IERvRmlsdGVyMl9WU1godTh4MTYqIFdFQlBfUkVTVFJJQ1QgcDEsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1OHgxNiogV0VCUF9SRVNUUklDVCBwMCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBXRUJQX1JFU1RSSUNUIHEwLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYqIFdFQlBfUkVTVFJJ Q1QgcTEsIGludCB0aHJlc2gpIHsKLSsgIGNvbnN0IHU4eDE2IHNpZ24gPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBjaGFyKTB4ODApOwotKyAgY29uc3QgdTh4MTYgdDEgPSBBQlNVKCpwMSwgKnExKTsK LSsgIGNvbnN0IHU4eDE2IHQyID0gdmVjX2FuZCh0MSwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hh cikweEZFKSk7Ci0rICBjb25zdCB1OHgxNiB0MyA9ICh1OHgxNil2ZWNfc3IoKHUxNng4KXQyLCB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKSk7Ci0rICBjb25zdCB1OHgxNiB0NCA9IEFCU1Uo KnAwLCAqcTApOwotKyAgY29uc3QgdTh4MTYgdDYgPSB2ZWNfYWRkcyh2ZWNfYWRkcyh0NCwgdDQp LCB0Myk7Ci0rICBjb25zdCB1OHgxNiB0NyA9IHZlY19zdWJzKHQ2LCB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBjaGFyKXRocmVzaCkpOwotKyAgY29uc3QgdTh4MTYgbWFzayA9ICh1OHgxNil2ZWNfY21w ZXEodDcsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCkpOwotKwotKyAgY29uc3QgaTh4MTYg cDFzID0gKGk4eDE2KXZlY194b3IoKnAxLCBzaWduKTsKLSsgIGNvbnN0IGk4eDE2IHExcyA9IChp OHgxNil2ZWNfeG9yKCpxMSwgc2lnbik7Ci0rICBpOHgxNiBQMCA9IChpOHgxNil2ZWNfeG9yKCpw MCwgc2lnbik7Ci0rICBpOHgxNiBRMCA9IChpOHgxNil2ZWNfeG9yKCpxMCwgc2lnbik7Ci0rCi0r ICBjb25zdCBpOHgxNiBkMCA9IHZlY19zdWJzKFEwLCBQMCk7Ci0rICBjb25zdCBpOHgxNiBzMSA9 IHZlY19hZGRzKHZlY19zdWJzKHAxcywgcTFzKSwgZDApOwotKyAgaTh4MTYgYSA9IHZlY19hZGRz KGQwLCB2ZWNfYWRkcyhkMCwgczEpKTsKLSsgIGEgPSB2ZWNfYW5kKGEsIChpOHgxNiltYXNrKTsK LSsgIGNvbnN0IGk4eDE2IHYzID0gU2lnbmVkU2hpZnQzKHZlY19hZGRzKGEsIHZlY19zcGxhdHMo KHNpZ25lZCBjaGFyKTMpKSk7Ci0rICBjb25zdCBpOHgxNiB2NCA9IFNpZ25lZFNoaWZ0Myh2ZWNf YWRkcyhhLCB2ZWNfc3BsYXRzKChzaWduZWQgY2hhcik0KSkpOwotKyAgUTAgPSB2ZWNfc3VicyhR MCwgdjQpOwotKyAgUDAgPSB2ZWNfYWRkcyhQMCwgdjMpOwotKyAgKnAwID0gdmVjX3hvcigodTh4 MTYpUDAsIHNpZ24pOwotKyAgKnEwID0gdmVjX3hvcigodTh4MTYpUTAsIHNpZ24pOwotK30KLSsK LStzdGF0aWMgdm9pZCBTaW1wbGVWRmlsdGVyMTZfVlNYKHVpbnQ4X3QqIHAsIGludCBzdHJpZGUs IGludCB0aHJlc2gpIHsKLSsgIHU4eDE2IHAxID0gdmVjX3hsKDAsIHAgLSAyICogc3RyaWRlKTsK LSsgIHU4eDE2IHAwID0gdmVjX3hsKDAsIHAgLSBzdHJpZGUpOwotKyAgdTh4MTYgcTAgPSB2ZWNf eGwoMCwgcCk7Ci0rICB1OHgxNiBxMSA9IHZlY194bCgwLCBwICsgc3RyaWRlKTsKLSsgIERvRmls dGVyMl9WU1goJnAxLCAmcDAsICZxMCwgJnExLCB0aHJlc2gpOwotKyAgdmVjX3hzdChwMCwgMCwg cCAtIHN0cmlkZSk7Ci0rICB2ZWNfeHN0KHEwLCAwLCBwKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQg U2ltcGxlVkZpbHRlcjE2aV9WU1godWludDhfdCogcCwgaW50IHN0cmlkZSwgaW50IHRocmVzaCkg ewotKyAgaW50IGs7Ci0rICBmb3IgKGsgPSAzOyBrID4gMDsgLS1rKSB7Ci0rICAgIHAgKz0gNCAq IHN0cmlkZTsKLSsgICAgU2ltcGxlVkZpbHRlcjE2X1ZTWChwLCBzdHJpZGUsIHRocmVzaCk7Ci0r ICB9Ci0rfQotKwotKy8vIFRyYW5zcG9zZSBmb3VyIGNvbHVtbnMgb3V0IG9mIC8gaW50byAxNiBy b3dzIGZvciBob3Jpem9udGFsLWVkZ2UgZmlsdGVyaW5nLgotK3N0YXRpYyBXRUJQX0lOTElORSB2 b2lkIExvYWQ4eDQoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBiLCBpbnQgcywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBXRUJQX1JFU1RSSUNUIHAsIHU4eDE2 KiBXRUJQX1JFU1RSSUNUIHEpIHsKLSsgIHVpbnQzMl90IGEwWzRdLCBhMVs0XTsKLSsgIG1lbWNw eSgmYTBbMF0sIGIgKyAwICogcywgNCk7IG1lbWNweSgmYTBbMV0sIGIgKyA0ICogcywgNCk7Ci0r ICBtZW1jcHkoJmEwWzJdLCBiICsgMiAqIHMsIDQpOyBtZW1jcHkoJmEwWzNdLCBiICsgNiAqIHMs IDQpOwotKyAgbWVtY3B5KCZhMVswXSwgYiArIDEgKiBzLCA0KTsgbWVtY3B5KCZhMVsxXSwgYiAr IDUgKiBzLCA0KTsKLSsgIG1lbWNweSgmYTFbMl0sIGIgKyAzICogcywgNCk7IG1lbWNweSgmYTFb M10sIGIgKyA3ICogcywgNCk7Ci0rICBjb25zdCB1OHgxNiBBMCA9IHZlY194bCgwLCAodW5zaWdu ZWQgY2hhciopYTApOwotKyAgY29uc3QgdTh4MTYgQTEgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNo YXIqKWExKTsKLSsgIGNvbnN0IHU4eDE2IEIwID0gdmVjX21lcmdlaChBMCwgQTEpLCBCMSA9IHZl Y19tZXJnZWwoQTAsIEExKTsKLSsgIGNvbnN0IHUxNng4IEMwID0gdmVjX21lcmdlaCgodTE2eDgp QjAsICh1MTZ4OClCMSk7Ci0rICBjb25zdCB1MTZ4OCBDMSA9IHZlY19tZXJnZWwoKHUxNng4KUIw LCAodTE2eDgpQjEpOwotKyAgKnAgPSAodTh4MTYpdmVjX21lcmdlaCgodTMyeDQpQzAsICh1MzJ4 NClDMSk7Ci0rICAqcSA9ICh1OHgxNil2ZWNfbWVyZ2VsKCh1MzJ4NClDMCwgKHUzMng0KUMxKTsK LSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgTG9hZDE2eDQoY29uc3QgdWludDhfdCog V0VCUF9SRVNUUklDVCByMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHI4LCBpbnQgcywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1OHgxNiogcDEsIHU4eDE2KiBwMCwgdTh4MTYqIHEwLCB1OHgxNiogcTEp IHsKLSsgIExvYWQ4eDQocjAsIHMsIHAxLCBxMCk7Ci0rICBMb2FkOHg0KHI4LCBzLCBwMCwgcTEp OwotKyAgY29uc3QgdTh4MTYgdDEgPSAqcDEsIHQyID0gKnEwOwotKyAgKnAxID0gKHU4eDE2KXZl Y19tZXJnZWgoKGk2NHgyKXQxLCAoaTY0eDIpKnAwKTsKLSsgICpwMCA9ICh1OHgxNil2ZWNfbWVy Z2VsKChpNjR4Mil0MSwgKGk2NHgyKSpwMCk7Ci0rICAqcTAgPSAodTh4MTYpdmVjX21lcmdlaCgo aTY0eDIpdDIsIChpNjR4MikqcTEpOwotKyAgKnExID0gKHU4eDE2KXZlY19tZXJnZWwoKGk2NHgy KXQyLCAoaTY0eDIpKnExKTsKLSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgU3RvcmU0 eDQodTh4MTYgeCwgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QsIGludCBzKSB7Ci0rICB1bnNp Z25lZCBjaGFyIGJbMTZdOwotKyAgaW50IGk7Ci0rICBtZW1jcHkoYiwgJngsIDE2KTsKLSsgIGZv ciAoaSA9IDA7IGkgPCA0OyArK2kpIG1lbWNweShkc3QgKyBpICogcywgYiArIDQgKiBpLCA0KTsK LSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgU3RvcmUxNng0KHU4eDE2IHAxLCB1OHgx NiBwMCwgdTh4MTYgcTAsIHU4eDE2IHExLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHIwLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHI4LCBpbnQgcykgewotKyAgdTh4MTYg dCA9IHAwOwotKyAgdTh4MTYgcDBzID0gdmVjX21lcmdlaChwMSwgdCksIHAxcyA9IHZlY19tZXJn ZWwocDEsIHQpOwotKyAgdCA9IHEwOwotKyAgdTh4MTYgcTBzID0gdmVjX21lcmdlaCh0LCBxMSks IHExcyA9IHZlY19tZXJnZWwodCwgcTEpOwotKyAgdCA9IHAwczsKLSsgIHAwcyA9ICh1OHgxNil2 ZWNfbWVyZ2VoKCh1MTZ4OCl0LCAodTE2eDgpcTBzKTsKLSsgIHEwcyA9ICh1OHgxNil2ZWNfbWVy Z2VsKCh1MTZ4OCl0LCAodTE2eDgpcTBzKTsKLSsgIHQgPSBwMXM7Ci0rICBwMXMgPSAodTh4MTYp dmVjX21lcmdlaCgodTE2eDgpdCwgKHUxNng4KXExcyk7Ci0rICBxMXMgPSAodTh4MTYpdmVjX21l cmdlbCgodTE2eDgpdCwgKHUxNng4KXExcyk7Ci0rICBTdG9yZTR4NChwMHMsIHIwLCBzKTsgU3Rv cmU0eDQocTBzLCByMCArIDQgKiBzLCBzKTsKLSsgIFN0b3JlNHg0KHAxcywgcjgsIHMpOyBTdG9y ZTR4NChxMXMsIHI4ICsgNCAqIHMsIHMpOwotK30KLSsKLStzdGF0aWMgdm9pZCBTaW1wbGVIRmls dGVyMTZfVlNYKHVpbnQ4X3QqIHAsIGludCBzdHJpZGUsIGludCB0aHJlc2gpIHsKLSsgIHU4eDE2 IHAxLCBwMCwgcTAsIHExOwotKyAgcCAtPSAyOyAgLy8gYmVnaW5uaW5nIG9mIHAxCi0rICBMb2Fk MTZ4NChwLCBwICsgOCAqIHN0cmlkZSwgc3RyaWRlLCAmcDEsICZwMCwgJnEwLCAmcTEpOwotKyAg RG9GaWx0ZXIyX1ZTWCgmcDEsICZwMCwgJnEwLCAmcTEsIHRocmVzaCk7Ci0rICBTdG9yZTE2eDQo cDEsIHAwLCBxMCwgcTEsIHAsIHAgKyA4ICogc3RyaWRlLCBzdHJpZGUpOwotK30KLSsKLStzdGF0 aWMgdm9pZCBTaW1wbGVIRmlsdGVyMTZpX1ZTWCh1aW50OF90KiBwLCBpbnQgc3RyaWRlLCBpbnQg dGhyZXNoKSB7Ci0rICBpbnQgazsKLSsgIGZvciAoayA9IDM7IGsgPiAwOyAtLWspIHsKLSsgICAg cCArPSA0OwotKyAgICBTaW1wbGVIRmlsdGVyMTZfVlNYKHAsIHN0cmlkZSwgdGhyZXNoKTsKLSsg IH0KLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBDb21wbGV4IGluLWxvb3Ag ZWRnZSBmaWx0ZXJpbmcgKHZlcnRpY2FsL2x1bWEpLgotKwotK3N0YXRpYyBjb25zdCB1OHgxNiBr U2lnbkJpdCA9IHsKLSsgICAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4 MCwgMHg4MCwKLSsgICAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwg MHg4MH07Ci0rI2RlZmluZSBGTElQQih4KSAoKHgpID0gKGk4eDE2KXZlY194b3IoKHU4eDE2KSh4 KSwga1NpZ25CaXQpKQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBHZXROb3RIRVYodTh4 MTYgcDEsIHU4eDE2IHAwLCB1OHgxNiBxMCwgdTh4MTYgcTEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaGV2X3RocmVzaCkgewotKyAgY29uc3QgdTh4MTYgZCA9IHZl Y19zdWJzKHZlY19tYXgoQUJTVShwMSwgcDApLCBBQlNVKHExLCBxMCkpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpaGV2X3RocmVzaCkpOwot KyAgcmV0dXJuICh1OHgxNil2ZWNfY21wZXEoZCwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikw KSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSBpOHgxNiBHZXRCYXNlRGVsdGEoaTh4MTYg cDEsIGk4eDE2IHAwLCBpOHgxNiBxMCwgaTh4MTYgcTEpIHsKLSsgIGNvbnN0IGk4eDE2IGQgPSB2 ZWNfc3VicyhxMCwgcDApOwotKyAgY29uc3QgaTh4MTYgczEgPSB2ZWNfYWRkcyh2ZWNfc3Vicyhw MSwgcTEpLCBkKTsKLSsgIHJldHVybiB2ZWNfYWRkcyhkLCB2ZWNfYWRkcyhkLCBzMSkpOwotK30K LSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb1NpbXBsZUZpbHRlclMoaTh4MTYqIHAwLCBp OHgxNiogcTAsIGk4eDE2IGYpIHsKLSsgICpxMCA9IHZlY19zdWJzKCpxMCwgU2lnbmVkU2hpZnQz KHZlY19hZGRzKGYsIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTQpKSkpOwotKyAgKnAwID0gdmVj X2FkZHMoKnAwLCBTaWduZWRTaGlmdDModmVjX2FkZHMoZiwgdmVjX3NwbGF0cygoc2lnbmVkIGNo YXIpMykpKSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFVwZGF0ZTJQaXhlbHMo aTh4MTYqIHBpLCBpOHgxNiogcWksIGkxNng4IGxvLCBpMTZ4OCBoaSkgewotKyAgY29uc3QgdTE2 eDggczcgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk3KTsKLSsgIGNvbnN0IGk4eDE2IGQg PSAoaTh4MTYpdmVjX3BhY2tzKHZlY19zcmEobG8sIHM3KSwgdmVjX3NyYShoaSwgczcpKTsKLSsg ICpwaSA9IHZlY19hZGRzKCpwaSwgZCk7Ci0rICAqcWkgPSB2ZWNfc3VicygqcWksIGQpOwotKyAg RkxJUEIoKnBpKTsKLSsgIEZMSVBCKCpxaSk7Ci0rfQotKwotKy8vIG1hc2sgPSAobWF4IGlubmVy IGFicy1kaWZmIDw9IGl0aHJlc2gpICYmIE5lZWRzRmlsdGVyKHRocmVzaCkuCi0rc3RhdGljIFdF QlBfSU5MSU5FIHU4eDE2IENvbXBsZXhNYXNrKHU4eDE2IHAzLCB1OHgxNiBwMiwgdTh4MTYgcDEs IHU4eDE2IHAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OHgxNiBx MCwgdTh4MTYgcTEsIHU4eDE2IHEyLCB1OHgxNiBxMywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHRocmVzaCwgaW50IGl0aHJlc2gpIHsKLSsgIHU4eDE2IG0gPSBB QlNVKHAxLCBwMCk7Ci0rICBtID0gdmVjX21heChtLCBBQlNVKHAzLCBwMikpOwotKyAgbSA9IHZl Y19tYXgobSwgQUJTVShwMiwgcDEpKTsKLSsgIG0gPSB2ZWNfbWF4KG0sIEFCU1UocTEsIHEwKSk7 Ci0rICBtID0gdmVjX21heChtLCBBQlNVKHEzLCBxMikpOwotKyAgbSA9IHZlY19tYXgobSwgQUJT VShxMiwgcTEpKTsKLSsgIGNvbnN0IHU4eDE2IHRtID0gKHU4eDE2KXZlY19jbXBlcSgKLSsgICAg ICB2ZWNfc3VicyhtLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKWl0aHJlc2gpKSwKLSsgICAg ICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApKTsKLSsgIGNvbnN0IHU4eDE2IHQyID0gdmVj X2FuZChBQlNVKHAxLCBxMSksIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhGRSkpOwotKyAg Y29uc3QgdTh4MTYgdDMgPSAodTh4MTYpdmVjX3NyKCh1MTZ4OCl0MiwgdmVjX3NwbGF0cygodW5z aWduZWQgc2hvcnQpMSkpOwotKyAgY29uc3QgdTh4MTYgdDYgPSB2ZWNfYWRkcyh2ZWNfYWRkcyhB QlNVKHAwLCBxMCksIEFCU1UocDAsIHEwKSksIHQzKTsKLSsgIGNvbnN0IHU4eDE2IGZtID0gKHU4 eDE2KXZlY19jbXBlcSgKLSsgICAgICB2ZWNfc3Vicyh0NiwgdmVjX3NwbGF0cygodW5zaWduZWQg Y2hhcil0aHJlc2gpKSwKLSsgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApKTsKLSsg IHJldHVybiB2ZWNfYW5kKHRtLCBmbSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lk IERvRmlsdGVyNCh1OHgxNiogcDF1LCB1OHgxNiogcDB1LCB1OHgxNiogcTB1LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1OHgxNiogcTF1LCB1OHgxNiBtYXNrLCBpbnQgaGV2 X3RocmVzaCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNo YXIpMCk7Ci0rICBjb25zdCB1OHgxNiBub3RfaGV2ID0gR2V0Tm90SEVWKCpwMXUsICpwMHUsICpx MHUsICpxMXUsIGhldl90aHJlc2gpOwotKyAgaTh4MTYgcDEgPSAoaTh4MTYpdmVjX3hvcigqcDF1 LCBrU2lnbkJpdCksIHAwID0gKGk4eDE2KXZlY194b3IoKnAwdSwga1NpZ25CaXQpOwotKyAgaTh4 MTYgcTAgPSAoaTh4MTYpdmVjX3hvcigqcTB1LCBrU2lnbkJpdCksIHExID0gKGk4eDE2KXZlY194 b3IoKnExdSwga1NpZ25CaXQpOwotKyAgaTh4MTYgdDEgPSB2ZWNfYW5kYyh2ZWNfc3VicyhwMSwg cTEpLCAoaTh4MTYpbm90X2hldik7Ci0rICBjb25zdCBpOHgxNiB0MiA9IHZlY19zdWJzKHEwLCBw MCk7Ci0rICB0MSA9IHZlY19hZGRzKHQxLCB0Mik7IHQxID0gdmVjX2FkZHModDEsIHQyKTsgdDEg PSB2ZWNfYWRkcyh0MSwgdDIpOwotKyAgdDEgPSB2ZWNfYW5kKHQxLCAoaTh4MTYpbWFzayk7Ci0r ICBjb25zdCBpOHgxNiBhMyA9IFNpZ25lZFNoaWZ0Myh2ZWNfYWRkcyh0MSwgdmVjX3NwbGF0cygo c2lnbmVkIGNoYXIpNCkpKTsKLSsgIHAwID0gdmVjX2FkZHMocDAsIFNpZ25lZFNoaWZ0Myh2ZWNf YWRkcyh0MSwgdmVjX3NwbGF0cygoc2lnbmVkIGNoYXIpMykpKSk7Ci0rICBxMCA9IHZlY19zdWJz KHEwLCBhMyk7Ci0rICBGTElQQihwMCk7IEZMSVBCKHEwKTsKLSsgIGNvbnN0IGk4eDE2IHQgPSB2 ZWNfYWRkKGEzLCAoaTh4MTYpa1NpZ25CaXQpOwotKyAgaTh4MTYgdDMgPSB2ZWNfc3ViKChpOHgx Nil2ZWNfYXZnKCh1OHgxNil0LCB6ZXJvKSwgdmVjX3NwbGF0cygoc2lnbmVkIGNoYXIpNjQpKTsK LSsgIHQzID0gdmVjX2FuZCgoaTh4MTYpbm90X2hldiwgdDMpOwotKyAgcTEgPSB2ZWNfc3Vicyhx MSwgdDMpOyBwMSA9IHZlY19hZGRzKHAxLCB0Myk7Ci0rICBGTElQQihwMSk7IEZMSVBCKHExKTsK LSsgICpwMXUgPSAodTh4MTYpcDE7ICpwMHUgPSAodTh4MTYpcDA7ICpxMHUgPSAodTh4MTYpcTA7 ICpxMXUgPSAodTh4MTYpcTE7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIERvRmls dGVyNih1OHgxNiogcDJ1LCB1OHgxNiogcDF1LCB1OHgxNiogcDB1LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1OHgxNiogcTB1LCB1OHgxNiogcTF1LCB1OHgxNiogcTJ1LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OHgxNiBtYXNrLCBpbnQgaGV2X3Ro cmVzaCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIp MCk7Ci0rICBjb25zdCB1OHgxNiBub3RfaGV2ID0gR2V0Tm90SEVWKCpwMXUsICpwMHUsICpxMHUs ICpxMXUsIGhldl90aHJlc2gpOwotKyAgaTh4MTYgcDIgPSAoaTh4MTYpdmVjX3hvcigqcDJ1LCBr U2lnbkJpdCksIHAxID0gKGk4eDE2KXZlY194b3IoKnAxdSwga1NpZ25CaXQpOwotKyAgaTh4MTYg cDAgPSAoaTh4MTYpdmVjX3hvcigqcDB1LCBrU2lnbkJpdCksIHEwID0gKGk4eDE2KXZlY194b3Io KnEwdSwga1NpZ25CaXQpOwotKyAgaTh4MTYgcTEgPSAoaTh4MTYpdmVjX3hvcigqcTF1LCBrU2ln bkJpdCksIHEyID0gKGk4eDE2KXZlY194b3IoKnEydSwga1NpZ25CaXQpOwotKyAgY29uc3QgaTh4 MTYgYSA9IEdldEJhc2VEZWx0YShwMSwgcDAsIHEwLCBxMSk7Ci0rICB7ICAvLyBoZXYgcGl4ZWxz OiBzaW1wbGUgZmlsdGVyCi0rICAgIGNvbnN0IGk4eDE2IGYgPSB2ZWNfYW5kKGEsIChpOHgxNil2 ZWNfYW5kYyhtYXNrLCBub3RfaGV2KSk7Ci0rICAgIERvU2ltcGxlRmlsdGVyUygmcDAsICZxMCwg Zik7Ci0rICB9Ci0rICB7ICAvLyBub24taGV2IHBpeGVsczogc3Ryb25nIGZpbHRlcgotKyAgICBj b25zdCBpOHgxNiBmID0gdmVjX2FuZChhLCB2ZWNfYW5kKChpOHgxNilub3RfaGV2LCAoaTh4MTYp bWFzaykpOwotKyAgICBjb25zdCBpMTZ4OCBrOSA9IHZlY19zcGxhdHMoKHNob3J0KTB4MDkwMCks IGs2MyA9IHZlY19zcGxhdHMoKHNob3J0KTYzKTsKLSsgICAgY29uc3QgaTE2eDggZjlsbyA9IE11 bEhpMTZfUygoaTE2eDgpdmVjX21lcmdlaCh6ZXJvLCAodTh4MTYpZiksIGs5KTsKLSsgICAgY29u c3QgaTE2eDggZjloaSA9IE11bEhpMTZfUygoaTE2eDgpdmVjX21lcmdlbCh6ZXJvLCAodTh4MTYp ZiksIGs5KTsKLSsgICAgY29uc3QgaTE2eDggYTJsbyA9IHZlY19hZGQoZjlsbywgazYzKSwgYTJo aSA9IHZlY19hZGQoZjloaSwgazYzKTsKLSsgICAgY29uc3QgaTE2eDggYTFsbyA9IHZlY19hZGQo YTJsbywgZjlsbyksIGExaGkgPSB2ZWNfYWRkKGEyaGksIGY5aGkpOwotKyAgICBjb25zdCBpMTZ4 OCBhMGxvID0gdmVjX2FkZChhMWxvLCBmOWxvKSwgYTBoaSA9IHZlY19hZGQoYTFoaSwgZjloaSk7 Ci0rICAgIFVwZGF0ZTJQaXhlbHMoJnAyLCAmcTIsIGEybG8sIGEyaGkpOwotKyAgICBVcGRhdGUy UGl4ZWxzKCZwMSwgJnExLCBhMWxvLCBhMWhpKTsKLSsgICAgVXBkYXRlMlBpeGVscygmcDAsICZx MCwgYTBsbywgYTBoaSk7Ci0rICB9Ci0rICAqcDJ1ID0gKHU4eDE2KXAyOyAqcDF1ID0gKHU4eDE2 KXAxOyAqcDB1ID0gKHU4eDE2KXAwOwotKyAgKnEwdSA9ICh1OHgxNilxMDsgKnExdSA9ICh1OHgx NilxMTsgKnEydSA9ICh1OHgxNilxMjsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgVkZpbHRlcjE2X1ZT WCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVzaCwgaW50IGl0aHJlc2gsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaGV2X3RocmVzaCkgewotKyAgdTh4MTYgcDMgPSB2ZWNfeGwo MCwgcCAtIDQgKiBzKSwgcDIgPSB2ZWNfeGwoMCwgcCAtIDMgKiBzKTsKLSsgIHU4eDE2IHAxID0g dmVjX3hsKDAsIHAgLSAyICogcyksIHAwID0gdmVjX3hsKDAsIHAgLSBzKTsKLSsgIHU4eDE2IHEw ID0gdmVjX3hsKDAsIHApLCBxMSA9IHZlY194bCgwLCBwICsgcyk7Ci0rICB1OHgxNiBxMiA9IHZl Y194bCgwLCBwICsgMiAqIHMpLCBxMyA9IHZlY194bCgwLCBwICsgMyAqIHMpOwotKyAgY29uc3Qg dTh4MTYgbSA9IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMywgdGhy ZXNoLCBpdGhyZXNoKTsKLSsgIERvRmlsdGVyNigmcDIsICZwMSwgJnAwLCAmcTAsICZxMSwgJnEy LCBtLCBoZXZfdGhyZXNoKTsKLSsgIHZlY194c3QocDIsIDAsIHAgLSAzICogcyk7IHZlY194c3Qo cDEsIDAsIHAgLSAyICogcyk7IHZlY194c3QocDAsIDAsIHAgLSBzKTsKLSsgIHZlY194c3QocTAs IDAsIHApOyB2ZWNfeHN0KHExLCAwLCBwICsgcyk7IHZlY194c3QocTIsIDAsIHAgKyAyICogcyk7 Ci0rfQotKwotK3N0YXRpYyB2b2lkIFZGaWx0ZXIxNmlfVlNYKHVpbnQ4X3QqIHAsIGludCBzLCBp bnQgdGhyZXNoLCBpbnQgaXRocmVzaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg aGV2X3RocmVzaCkgewotKyAgaW50IGs7Ci0rICBmb3IgKGsgPSAzOyBrID4gMDsgLS1rKSB7Ci0r ICAgIHAgKz0gNCAqIHM7Ci0rICAgIHU4eDE2IHAzID0gdmVjX3hsKDAsIHAgLSA0ICogcyksIHAy ID0gdmVjX3hsKDAsIHAgLSAzICogcyk7Ci0rICAgIHU4eDE2IHAxID0gdmVjX3hsKDAsIHAgLSAy ICogcyksIHAwID0gdmVjX3hsKDAsIHAgLSBzKTsKLSsgICAgdTh4MTYgcTAgPSB2ZWNfeGwoMCwg cCksIHExID0gdmVjX3hsKDAsIHAgKyBzKTsKLSsgICAgdTh4MTYgcTIgPSB2ZWNfeGwoMCwgcCAr IDIgKiBzKSwgcTMgPSB2ZWNfeGwoMCwgcCArIDMgKiBzKTsKLSsgICAgY29uc3QgdTh4MTYgbSA9 IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMywgdGhyZXNoLCBpdGhy ZXNoKTsKLSsgICAgRG9GaWx0ZXI0KCZwMSwgJnAwLCAmcTAsICZxMSwgbSwgaGV2X3RocmVzaCk7 Ci0rICAgIHZlY194c3QocDEsIDAsIHAgLSAyICogcyk7IHZlY194c3QocDAsIDAsIHAgLSBzKTsK LSsgICAgdmVjX3hzdChxMCwgMCwgcCk7IHZlY194c3QocTEsIDAsIHAgKyBzKTsKLSsgIH0KLSt9 Ci0rCi0rLy8gQ29tcGxleCBob3Jpem9udGFsIGx1bWE6IHR3byAxNng0IHRyYW5zcG9zZXMgYXJv dW5kIHRoZSB2ZXJ0aWNhbCBlZGdlIGZlZWQKLSsvLyB0aGUgc2FtZSBEb0ZpbHRlcjQvRG9GaWx0 ZXI2IHVzZWQgYnkgdGhlIHZlcnRpY2FsIHZhcmlhbnRzLgotK3N0YXRpYyB2b2lkIEhGaWx0ZXIx Nl9WU1godWludDhfdCogcCwgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJlc2gpIHsKLSsgIHVpbnQ4X3QqIGNvbnN0 IGIgPSBwIC0gNDsKLSsgIHU4eDE2IHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMzsKLSsg IExvYWQxNng0KGIsIGIgKyA4ICogcywgcywgJnAzLCAmcDIsICZwMSwgJnAwKTsKLSsgIExvYWQx Nng0KHAsIHAgKyA4ICogcywgcywgJnEwLCAmcTEsICZxMiwgJnEzKTsKLSsgIGNvbnN0IHU4eDE2 IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwg aXRocmVzaCk7Ci0rICBEb0ZpbHRlcjYoJnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwg aGV2X3RocmVzaCk7Ci0rICBTdG9yZTE2eDQocDMsIHAyLCBwMSwgcDAsIGIsIGIgKyA4ICogcywg cyk7Ci0rICBTdG9yZTE2eDQocTAsIHExLCBxMiwgcTMsIHAsIHAgKyA4ICogcywgcyk7Ci0rfQot KwotK3N0YXRpYyB2b2lkIEhGaWx0ZXIxNmlfVlNYKHVpbnQ4X3QqIHAsIGludCBzLCBpbnQgdGhy ZXNoLCBpbnQgaXRocmVzaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGV2X3Ro cmVzaCkgewotKyAgaW50IGs7Ci0rICBmb3IgKGsgPSAzOyBrID4gMDsgLS1rKSB7Ci0rICAgIHAg Kz0gNDsKLSsgICAgdTh4MTYgcDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzOwotKyAgICBM b2FkMTZ4NChwIC0gNCwgcCAtIDQgKyA4ICogcywgcywgJnAzLCAmcDIsICZwMSwgJnAwKTsKLSsg ICAgTG9hZDE2eDQocCwgcCArIDggKiBzLCBzLCAmcTAsICZxMSwgJnEyLCAmcTMpOwotKyAgICBj b25zdCB1OHgxNiBtID0KLSsgICAgICAgIENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwg cTEsIHEyLCBxMywgdGhyZXNoLCBpdGhyZXNoKTsKLSsgICAgRG9GaWx0ZXI0KCZwMSwgJnAwLCAm cTAsICZxMSwgbSwgaGV2X3RocmVzaCk7Ci0rICAgIFN0b3JlMTZ4NChwMSwgcDAsIHEwLCBxMSwg cCAtIDIsIHAgLSAyICsgOCAqIHMsIHMpOwotKyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotKy8vIENvbXBsZXggY2hyb21hIGZpbHRlcmluZzogb3BlcmF0ZSBvbiB0aGUgdSBh bmQgdiBwbGFuZXMgKDggd2lkZSkgdG9nZXRoZXIuCi0rCi0rLy8gUGFjayA4IHUtYnl0ZXMgaW50 byB0aGUgbG93IGhhbGYgYW5kIDggdi1ieXRlcyBpbnRvIHRoZSBoaWdoIGhhbGYuCi0rc3RhdGlj IFdFQlBfSU5MSU5FIHU4eDE2IExvYWRVVihjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIHYpIHsKLSsgIHVuc2lnbmVkIGNoYXIgYlsxNl07Ci0rICBtZW1jcHkoYiwgdSwgOCk7 Ci0rICBtZW1jcHkoYiArIDgsIHYsIDgpOwotKyAgcmV0dXJuIHZlY194bCgwLCBiKTsKLSt9Ci0r Ci0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgU3RvcmVVVih1OHgxNiB4LCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBX RUJQX1JFU1RSSUNUIHYpIHsKLSsgIHVuc2lnbmVkIGNoYXIgYlsxNl07Ci0rICBtZW1jcHkoYiwg JngsIDE2KTsKLSsgIG1lbWNweSh1LCBiLCA4KTsKLSsgIG1lbWNweSh2LCBiICsgOCwgOCk7Ci0r fQotKwotK3N0YXRpYyB2b2lkIFZGaWx0ZXI4X1ZTWCh1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUs IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLCBpbnQgaGV2X3RocmVzaCkgewotKyAgdTh4MTYg cDMgPSBMb2FkVVYodSAtIDQgKiBzLCB2IC0gNCAqIHMpLCBwMiA9IExvYWRVVih1IC0gMyAqIHMs IHYgLSAzICogcyk7Ci0rICB1OHgxNiBwMSA9IExvYWRVVih1IC0gMiAqIHMsIHYgLSAyICogcyks IHAwID0gTG9hZFVWKHUgLSBzLCB2IC0gcyk7Ci0rICB1OHgxNiBxMCA9IExvYWRVVih1LCB2KSwg cTEgPSBMb2FkVVYodSArIHMsIHYgKyBzKTsKLSsgIHU4eDE2IHEyID0gTG9hZFVWKHUgKyAyICog cywgdiArIDIgKiBzKSwgcTMgPSBMb2FkVVYodSArIDMgKiBzLCB2ICsgMyAqIHMpOwotKyAgY29u c3QgdTh4MTYgbSA9IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMywg dGhyZXNoLCBpdGhyZXNoKTsKLSsgIERvRmlsdGVyNigmcDIsICZwMSwgJnAwLCAmcTAsICZxMSwg JnEyLCBtLCBoZXZfdGhyZXNoKTsKLSsgIFN0b3JlVVYocDIsIHUgLSAzICogcywgdiAtIDMgKiBz KTsgU3RvcmVVVihwMSwgdSAtIDIgKiBzLCB2IC0gMiAqIHMpOwotKyAgU3RvcmVVVihwMCwgdSAt IHMsIHYgLSBzKTsgU3RvcmVVVihxMCwgdSwgdik7Ci0rICBTdG9yZVVWKHExLCB1ICsgcywgdiAr IHMpOyBTdG9yZVVWKHEyLCB1ICsgMiAqIHMsIHYgKyAyICogcyk7Ci0rfQotKwotK3N0YXRpYyB2 b2lkIFZGaWx0ZXI4aV9WU1godWludDhfdCogV0VCUF9SRVNUUklDVCB1LCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcywgaW50IHRocmVz aCwgaW50IGl0aHJlc2gsIGludCBoZXZfdGhyZXNoKSB7Ci0rICB1ICs9IDQgKiBzOyB2ICs9IDQg KiBzOwotKyAgdTh4MTYgcDMgPSBMb2FkVVYodSAtIDQgKiBzLCB2IC0gNCAqIHMpLCBwMiA9IExv YWRVVih1IC0gMyAqIHMsIHYgLSAzICogcyk7Ci0rICB1OHgxNiBwMSA9IExvYWRVVih1IC0gMiAq IHMsIHYgLSAyICogcyksIHAwID0gTG9hZFVWKHUgLSBzLCB2IC0gcyk7Ci0rICB1OHgxNiBxMCA9 IExvYWRVVih1LCB2KSwgcTEgPSBMb2FkVVYodSArIHMsIHYgKyBzKTsKLSsgIHU4eDE2IHEyID0g TG9hZFVWKHUgKyAyICogcywgdiArIDIgKiBzKSwgcTMgPSBMb2FkVVYodSArIDMgKiBzLCB2ICsg MyAqIHMpOwotKyAgY29uc3QgdTh4MTYgbSA9IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBx MCwgcTEsIHEyLCBxMywgdGhyZXNoLCBpdGhyZXNoKTsKLSsgIERvRmlsdGVyNCgmcDEsICZwMCwg JnEwLCAmcTEsIG0sIGhldl90aHJlc2gpOwotKyAgU3RvcmVVVihwMSwgdSAtIDIgKiBzLCB2IC0g MiAqIHMpOyBTdG9yZVVWKHAwLCB1IC0gcywgdiAtIHMpOwotKyAgU3RvcmVVVihxMCwgdSwgdik7 IFN0b3JlVVYocTEsIHUgKyBzLCB2ICsgcyk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEhGaWx0ZXI4 X1ZTWCh1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNo LCBpbnQgaGV2X3RocmVzaCkgewotKyAgdTh4MTYgcDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIs IHEzOwotKyAgTG9hZDE2eDQodSAtIDQsIHYgLSA0LCBzLCAmcDMsICZwMiwgJnAxLCAmcDApOwot KyAgTG9hZDE2eDQodSwgdiwgcywgJnEwLCAmcTEsICZxMiwgJnEzKTsKLSsgIGNvbnN0IHU4eDE2 IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwg aXRocmVzaCk7Ci0rICBEb0ZpbHRlcjYoJnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwg aGV2X3RocmVzaCk7Ci0rICBTdG9yZTE2eDQocDMsIHAyLCBwMSwgcDAsIHUgLSA0LCB2IC0gNCwg cyk7Ci0rICBTdG9yZTE2eDQocTAsIHExLCBxMiwgcTMsIHUsIHYsIHMpOwotK30KLSsKLStzdGF0 aWMgdm9pZCBIRmlsdGVyOGlfVlNYKHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwgdWludDhfdCog V0VCUF9SRVNUUklDVCB2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHMsIGludCB0 aHJlc2gsIGludCBpdGhyZXNoLCBpbnQgaGV2X3RocmVzaCkgewotKyAgdSArPSA0OyB2ICs9IDQ7 Ci0rICB1OHgxNiBwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTM7Ci0rICBMb2FkMTZ4NCh1 IC0gNCwgdiAtIDQsIHMsICZwMywgJnAyLCAmcDEsICZwMCk7Ci0rICBMb2FkMTZ4NCh1LCB2LCBz LCAmcTAsICZxMSwgJnEyLCAmcTMpOwotKyAgY29uc3QgdTh4MTYgbSA9IENvbXBsZXhNYXNrKHAz LCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMywgdGhyZXNoLCBpdGhyZXNoKTsKLSsgIERvRmls dGVyNCgmcDEsICZwMCwgJnEwLCAmcTEsIG0sIGhldl90aHJlc2gpOwotKyAgU3RvcmUxNng0KHAx LCBwMCwgcTAsIHExLCB1IC0gMiwgdiAtIDIsIHMpOwotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotKy8vIEludHJhIHByZWRpY3Rpb24gKDE2eDE2IGx1bWEsIDh4OCBjaHJvbWEpLiBE QyB0b3Atc3VtcyBhcmUgc2NhbGFyICh0aGUgU0lNRAotKy8vIHdpbiBpcyB0aGUgYmxvY2sgZmls bCk7IFRydWVNb3Rpb24vVkUvSEUgYXJlIHZlY3Rvcml6ZWQuCi0rCi0rc3RhdGljIFdFQlBfSU5M SU5FIHZvaWQgUHV0MTYodWludDhfdCB2LCB1aW50OF90KiBkc3QpIHsKLSsgIGNvbnN0IHU4eDE2 IHggPSB2ZWNfc3BsYXRzKHYpOwotKyAgaW50IGo7Ci0rICBmb3IgKGogPSAwOyBqIDwgMTY7ICsr aikgdmVjX3hzdCh4LCAwLCBkc3QgKyBqICogQlBTKTsKLSt9Ci0rc3RhdGljIFdFQlBfSU5MSU5F IHZvaWQgUHV0OHg4dXYodWludDhfdCB2LCB1aW50OF90KiBkc3QpIHsKLSsgIGNvbnN0IHU4eDE2 IHggPSB2ZWNfc3BsYXRzKHYpOwotKyAgdW5zaWduZWQgY2hhciBiWzE2XTsKLSsgIGludCBqOwot KyAgbWVtY3B5KGIsICZ4LCAxNik7Ci0rICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBtZW1jcHko ZHN0ICsgaiAqIEJQUywgYiwgOCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIFZFMTZfVlNYKHVpbnQ4 X3QqIGRzdCkgewotKyAgY29uc3QgdTh4MTYgdG9wID0gdmVjX3hsKDAsIGRzdCAtIEJQUyk7Ci0r ICBpbnQgajsKLSsgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB2ZWNfeHN0KHRvcCwgMCwgZHN0 ICsgaiAqIEJQUyk7Ci0rfQotK3N0YXRpYyB2b2lkIEhFMTZfVlNYKHVpbnQ4X3QqIGRzdCkgewot KyAgaW50IGo7Ci0rICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgdmVjX3hzdCh2ZWNfc3BsYXRz KGRzdFstMSArIGogKiBCUFNdKSwgMCwgZHN0ICsgaiAqIEJQUyk7Ci0rfQotK3N0YXRpYyB2b2lk IERDMTZfVlNYKHVpbnQ4X3QqIGRzdCkgewotKyAgaW50IHMgPSAxNiwgajsKLSsgIGZvciAoaiA9 IDA7IGogPCAxNjsgKytqKSBzICs9IGRzdFstQlBTICsgal0gKyBkc3RbLTEgKyBqICogQlBTXTsK LSsgIFB1dDE2KHMgPj4gNSwgZHN0KTsKLSt9Ci0rc3RhdGljIHZvaWQgREMxNk5vVG9wX1ZTWCh1 aW50OF90KiBkc3QpIHsKLSsgIGludCBzID0gOCwgajsKLSsgIGZvciAoaiA9IDA7IGogPCAxNjsg KytqKSBzICs9IGRzdFstMSArIGogKiBCUFNdOwotKyAgUHV0MTYocyA+PiA0LCBkc3QpOwotK30K LStzdGF0aWMgdm9pZCBEQzE2Tm9MZWZ0X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsgIGludCBzID0g OCwgajsKLSsgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSBzICs9IGRzdFstQlBTICsgal07Ci0r ICBQdXQxNihzID4+IDQsIGRzdCk7Ci0rfQotK3N0YXRpYyB2b2lkIERDMTZOb1RvcExlZnRfVlNY KHVpbnQ4X3QqIGRzdCkgeyBQdXQxNigweDgwLCBkc3QpOyB9Ci0rc3RhdGljIHZvaWQgVE0xNl9W U1godWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcikwKTsKLSsgIGNvbnN0IHU4eDE2IHQgPSB2ZWNfeGwoMCwgZHN0IC0gQlBTKTsK LSsgIGNvbnN0IGkxNng4IHRsID0gKGkxNng4KXZlY19tZXJnZWgodCwgemVybyksIHRoID0gKGkx Nng4KXZlY19tZXJnZWwodCwgemVybyk7Ci0rICBjb25zdCBpbnQgYyA9IGRzdFstQlBTIC0gMV07 Ci0rICBpbnQgeTsKLSsgIGZvciAoeSA9IDA7IHkgPCAxNjsgKyt5KSB7Ci0rICAgIGNvbnN0IGkx Nng4IGIgPSB2ZWNfc3BsYXRzKChzaG9ydCkoZHN0Wy0xICsgeSAqIEJQU10gLSBjKSk7Ci0rICAg IHZlY194c3QoKHU4eDE2KXZlY19wYWNrc3UodmVjX2FkZChiLCB0bCksIHZlY19hZGQoYiwgdGgp KSwgMCwgZHN0ICsgeSAqIEJQUyk7Ci0rICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIFZFOHV2X1ZT WCh1aW50OF90KiBkc3QpIHsKLSsgIHVuc2lnbmVkIGNoYXIgdFs4XTsKLSsgIGludCBqOwotKyAg bWVtY3B5KHQsIGRzdCAtIEJQUywgOCk7Ci0rICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBtZW1j cHkoZHN0ICsgaiAqIEJQUywgdCwgOCk7Ci0rfQotK3N0YXRpYyB2b2lkIERDOHV2X1ZTWCh1aW50 OF90KiBkc3QpIHsKLSsgIGludCBzID0gOCwgajsKLSsgIGZvciAoaiA9IDA7IGogPCA4OyArK2op IHMgKz0gZHN0Wy1CUFMgKyBqXSArIGRzdFstMSArIGogKiBCUFNdOwotKyAgUHV0OHg4dXYocyA+ PiA0LCBkc3QpOwotK30KLStzdGF0aWMgdm9pZCBEQzh1dk5vVG9wX1ZTWCh1aW50OF90KiBkc3Qp IHsKLSsgIGludCBzID0gNCwgajsKLSsgIGZvciAoaiA9IDA7IGogPCA4OyArK2opIHMgKz0gZHN0 Wy0xICsgaiAqIEJQU107Ci0rICBQdXQ4eDh1dihzID4+IDMsIGRzdCk7Ci0rfQotK3N0YXRpYyB2 b2lkIERDOHV2Tm9MZWZ0X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsgIGludCBzID0gNCwgajsKLSsg IGZvciAoaiA9IDA7IGogPCA4OyArK2opIHMgKz0gZHN0Wy1CUFMgKyBqXTsKLSsgIFB1dDh4OHV2 KHMgPj4gMywgZHN0KTsKLSt9Ci0rc3RhdGljIHZvaWQgREM4dXZOb1RvcExlZnRfVlNYKHVpbnQ4 X3QqIGRzdCkgeyBQdXQ4eDh1digweDgwLCBkc3QpOyB9Ci0rc3RhdGljIHZvaWQgVE04dXZfVlNY KHVpbnQ4X3QqIGRzdCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIGNoYXIpMCk7Ci0rICBjb25zdCB1OHgxNiB0ID0gdmVjX3hsKDAsIGRzdCAtIEJQUyk7Ci0r ICBjb25zdCBpMTZ4OCB0bCA9IChpMTZ4OCl2ZWNfbWVyZ2VoKHQsIHplcm8pOwotKyAgY29uc3Qg aW50IGMgPSBkc3RbLUJQUyAtIDFdOwotKyAgaW50IHk7Ci0rICBmb3IgKHkgPSAwOyB5IDwgODsg Kyt5KSB7Ci0rICAgIGNvbnN0IGkxNng4IGIgPSB2ZWNfc3BsYXRzKChzaG9ydCkoZHN0Wy0xICsg eSAqIEJQU10gLSBjKSk7Ci0rICAgIGNvbnN0IHU4eDE2IG8gPSAodTh4MTYpdmVjX3BhY2tzdSh2 ZWNfYWRkKGIsIHRsKSwgdmVjX3NwbGF0cygoc2hvcnQpMCkpOwotKyAgICB1bnNpZ25lZCBjaGFy IGJiWzE2XTsKLSsgICAgbWVtY3B5KGJiLCAmbywgMTYpOwotKyAgICBtZW1jcHkoZHN0ICsgeSAq IEJQUywgYmIsIDgpOwotKyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8v IDR4NCBsdW1hIGludHJhIHByZWRpY3Rpb24uIFdob2xlLXZlY3RvciBieXRlIHNoaWZ0cyB3aW5k b3cgdGhlIGVkZ2Ugc2FtcGxlczoKLSsvLyAgIHNybGlfc2kxMjgoeCxuKSA9PSB2ZWNfc2xkKHpl cm8sIHgsIDE2IC0gbikKLSsvLyAgIHNsbGlfc2kxMjgoeCxuKSA9PSB2ZWNfc2xkKHgsIHplcm8s IG4pCi0rCi0rI2RlZmluZSBTUkxJKHgsIG4pIHZlY19zbGQoemVybywgKHgpLCAxNiAtIChuKSkK LSsjZGVmaW5lIFNMTEkoeCwgbikgdmVjX3NsZCgoeCksIHplcm8sIChuKSkKLSsjZGVmaW5lIElO UzE2KHYsIHZhbCwgaSkgKCh1OHgxNil2ZWNfaW5zZXJ0KChzaG9ydCkodmFsKSwgKGkxNng4KSh2 KSwgKGkpKSkKLSsjZGVmaW5lIEFWRzNDKGEsIGIsIGMpICgodWludDhfdCkoKChhKSArIDIgKiAo YikgKyAoYykgKyAyKSA+PiAyKSkKLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgTG9hZDY0 KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcCkgewotKyAgdW5zaWduZWQgY2hhciBiWzE2 XSA9IHswfTsKLSsgIG1lbWNweShiLCBwLCA4KTsKLSsgIHJldHVybiB2ZWNfeGwoMCwgYik7Ci0r fQotK3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBHZXRXb3JkKHU4eDE2IHYpIHsKLSsgIHVu c2lnbmVkIGNoYXIgYlsxNl07Ci0rICB1aW50MzJfdCByOwotKyAgbWVtY3B5KGIsICZ2LCAxNik7 Ci0rICBtZW1jcHkoJnIsIGIsIDQpOwotKyAgcmV0dXJuIHI7Ci0rfQotK3N0YXRpYyBXRUJQX0lO TElORSB1OHgxNiBTZXRXb3JkKHVpbnQzMl90IHYpIHsKLSsgIHVuc2lnbmVkIGNoYXIgYlsxNl0g PSB7MH07Ci0rICBtZW1jcHkoYiwgJnYsIDQpOwotKyAgcmV0dXJuIHZlY194bCgwLCBiKTsKLSt9 Ci0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgU3RvcmVXb3JkKHVpbnQzMl90IHYsIHVpbnQ4X3Qq IGRzdCkgewotKyAgbWVtY3B5KGRzdCwgJnYsIDQpOwotK30KLSsKLStzdGF0aWMgdm9pZCBWRTRf VlNYKHVpbnQ4X3QqIGRzdCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVu c2lnbmVkIGNoYXIpMCksIG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7Ci0rICBj b25zdCB1OHgxNiBBID0gTG9hZDY0KGRzdCAtIEJQUyAtIDEpLCBCID0gU1JMSShBLCAxKSwgQyA9 IFNSTEkoQSwgMik7Ci0rICBjb25zdCB1OHgxNiBhID0gdmVjX2F2ZyhBLCBDKSwgbHNiID0gdmVj X2FuZCh2ZWNfeG9yKEEsIEMpLCBvbmUpOwotKyAgY29uc3QgdTh4MTYgYXZnID0gdmVjX2F2Zyh2 ZWNfc3VicyhhLCBsc2IpLCBCKTsKLSsgIGNvbnN0IHVpbnQzMl90IHYgPSBHZXRXb3JkKGF2Zyk7 Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIFN0b3JlV29yZCh2LCBkc3Qg KyBpICogQlBTKTsKLSt9Ci0rc3RhdGljIHZvaWQgTEQ0X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsg IGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApLCBvbmUgPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgdTh4MTYgQSA9IExvYWQ2NChk c3QgLSBCUFMpLCBCID0gU1JMSShBLCAxKSwgQyA9IFNSTEkoQSwgMik7Ci0rICBjb25zdCB1OHgx NiBDSCA9IElOUzE2KEMsIGRzdFstQlBTICsgN10sIDMpOwotKyAgY29uc3QgdTh4MTYgYTEgPSB2 ZWNfYXZnKEEsIENIKSwgbHNiID0gdmVjX2FuZCh2ZWNfeG9yKEEsIENIKSwgb25lKTsKLSsgIGNv bnN0IHU4eDE2IHIgPSB2ZWNfYXZnKHZlY19zdWJzKGExLCBsc2IpLCBCKTsKLSsgIFN0b3JlV29y ZChHZXRXb3JkKHIpLCBkc3QgKyAwICogQlBTKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKFNSTEko ciwgMSkpLCBkc3QgKyAxICogQlBTKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKFNSTEkociwgMikp LCBkc3QgKyAyICogQlBTKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKFNSTEkociwgMykpLCBkc3Qg KyAzICogQlBTKTsKLSt9Ci0rc3RhdGljIHZvaWQgVlI0X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsg IGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApLCBvbmUgPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgaW50IEkgPSBkc3RbLTEgKyAw ICogQlBTXSwgSiA9IGRzdFstMSArIDEgKiBCUFNdLCBLID0gZHN0Wy0xICsgMiAqIEJQU107Ci0r ICBjb25zdCBpbnQgWCA9IGRzdFstMSAtIEJQU107Ci0rICBjb25zdCB1OHgxNiBYQSA9IExvYWQ2 NChkc3QgLSBCUFMgLSAxKSwgQTAgPSBTUkxJKFhBLCAxKTsKLSsgIGNvbnN0IHU4eDE2IGFiY2Qg PSB2ZWNfYXZnKFhBLCBBMCk7Ci0rICBjb25zdCB1OHgxNiBJWCA9IElOUzE2KFNMTEkoWEEsIDEp LCAoSSB8IChYIDw8IDgpKSwgMCk7Ci0rICBjb25zdCB1OHgxNiBhMSA9IHZlY19hdmcoSVgsIEEw KSwgbHNiID0gdmVjX2FuZCh2ZWNfeG9yKElYLCBBMCksIG9uZSk7Ci0rICBjb25zdCB1OHgxNiBl ZmdoID0gdmVjX2F2Zyh2ZWNfc3VicyhhMSwgbHNiKSwgWEEpOwotKyAgU3RvcmVXb3JkKEdldFdv cmQoYWJjZCksIGRzdCArIDAgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoZWZnaCksIGRz dCArIDEgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoU0xMSShhYmNkLCAxKSksIGRzdCAr IDIgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoU0xMSShlZmdoLCAxKSksIGRzdCArIDMg KiBCUFMpOwotKyAgZHN0WzAgKyAyICogQlBTXSA9IEFWRzNDKEosIEksIFgpOwotKyAgZHN0WzAg KyAzICogQlBTXSA9IEFWRzNDKEssIEosIEkpOwotK30KLStzdGF0aWMgdm9pZCBWTDRfVlNYKHVp bnQ4X3QqIGRzdCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IGNoYXIpMCksIG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7Ci0rICBjb25zdCB1 OHgxNiBBID0gTG9hZDY0KGRzdCAtIEJQUyksIEIgPSBTUkxJKEEsIDEpLCBDID0gU1JMSShBLCAy KTsKLSsgIGNvbnN0IHU4eDE2IGExID0gdmVjX2F2ZyhBLCBCKSwgYTIgPSB2ZWNfYXZnKEMsIEIp LCBhMyA9IHZlY19hdmcoYTEsIGEyKTsKLSsgIGNvbnN0IHU4eDE2IGxzYjEgPSB2ZWNfYW5kKHZl Y194b3IoYTEsIGEyKSwgb25lKTsKLSsgIGNvbnN0IHU4eDE2IGFiYmMgPSB2ZWNfb3IodmVjX3hv cihBLCBCKSwgdmVjX3hvcihDLCBCKSk7Ci0rICBjb25zdCB1OHgxNiBhNCA9IHZlY19zdWJzKGEz LCB2ZWNfYW5kKGFiYmMsIGxzYjEpKTsKLSsgIGNvbnN0IHVpbnQzMl90IGV4dHJhID0gR2V0V29y ZChTUkxJKGE0LCA0KSk7Ci0rICBTdG9yZVdvcmQoR2V0V29yZChhMSksIGRzdCArIDAgKiBCUFMp OwotKyAgU3RvcmVXb3JkKEdldFdvcmQoYTQpLCBkc3QgKyAxICogQlBTKTsKLSsgIFN0b3JlV29y ZChHZXRXb3JkKFNSTEkoYTEsIDEpKSwgZHN0ICsgMiAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0 V29yZChTUkxJKGE0LCAxKSksIGRzdCArIDMgKiBCUFMpOwotKyAgZHN0WzMgKyAyICogQlBTXSA9 IChleHRyYSA+PiAwKSAmIDB4ZmY7Ci0rICBkc3RbMyArIDMgKiBCUFNdID0gKGV4dHJhID4+IDgp ICYgMHhmZjsKLSt9Ci0rc3RhdGljIHZvaWQgUkQ0X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsgIGNv bnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApLCBvbmUgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgdWludDMyX3QgSSA9IGRzdFstMSAr IDAgKiBCUFNdLCBKID0gZHN0Wy0xICsgMSAqIEJQU107Ci0rICBjb25zdCB1aW50MzJfdCBLID0g ZHN0Wy0xICsgMiAqIEJQU10sIEwgPSBkc3RbLTEgKyAzICogQlBTXTsKLSsgIGNvbnN0IHU4eDE2 IFhBID0gTG9hZDY0KGRzdCAtIEJQUyAtIDEpOwotKyAgY29uc3QgdTh4MTYgYWxsID0gdmVjX29y KFNldFdvcmQoKHVpbnQzMl90KShMIHwgKEsgPDwgOCkgfCAoSiA8PCAxNikgfCAoSSA8PCAyNCkp KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBTTExJKFhBLCA0KSk7Ci0rICBjb25zdCB1 OHgxNiBrMSA9IFNSTEkoYWxsLCAxKSwgajIgPSBTUkxJKGFsbCwgMik7Ci0rICBjb25zdCB1OHgx NiBhMSA9IHZlY19hdmcoajIsIGFsbCksIGxzYiA9IHZlY19hbmQodmVjX3hvcihqMiwgYWxsKSwg b25lKTsKLSsgIGNvbnN0IHU4eDE2IHIgPSB2ZWNfYXZnKHZlY19zdWJzKGExLCBsc2IpLCBrMSk7 Ci0rICBTdG9yZVdvcmQoR2V0V29yZChyKSwgZHN0ICsgMyAqIEJQUyk7Ci0rICBTdG9yZVdvcmQo R2V0V29yZChTUkxJKHIsIDEpKSwgZHN0ICsgMiAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29y ZChTUkxJKHIsIDIpKSwgZHN0ICsgMSAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29yZChTUkxJ KHIsIDMpKSwgZHN0ICsgMCAqIEJQUyk7Ci0rfQotK3N0YXRpYyB2b2lkIFRNNF9WU1godWludDhf dCogZHN0KSB7Ci0rICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hh cikwKTsKLSsgIGNvbnN0IHU4eDE2IHQgPSBMb2FkNjQoZHN0IC0gQlBTKTsKLSsgIGNvbnN0IGkx Nng4IHRiID0gKGkxNng4KXZlY19tZXJnZWgodCwgemVybyk7Ci0rICBjb25zdCBpbnQgYyA9IGRz dFstQlBTIC0gMV07Ci0rICBpbnQgeTsKLSsgIGZvciAoeSA9IDA7IHkgPCA0OyArK3kpIHsKLSsg ICAgY29uc3QgaTE2eDggYiA9IHZlY19zcGxhdHMoKHNob3J0KShkc3RbLTEgKyB5ICogQlBTXSAt IGMpKTsKLSsgICAgY29uc3QgdTh4MTYgbyA9ICh1OHgxNil2ZWNfcGFja3N1KHZlY19hZGQoYiwg dGIpLCB2ZWNfc3BsYXRzKChzaG9ydCkwKSk7Ci0rICAgIFN0b3JlV29yZChHZXRXb3JkKG8pLCBk c3QgKyB5ICogQlBTKTsKLSsgIH0KLSt9Ci0rI3VuZGVmIFNSTEkKLSsjdW5kZWYgU0xMSQotKyN1 bmRlZiBJTlMxNgotKyN1bmRlZiBBVkczQwotKwotK2V4dGVybiB2b2lkIFZQOERzcEluaXRWU1go dm9pZCk7Ci0rCi0rV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFZQOERzcEluaXRWU1go dm9pZCkgewotKyAgVlA4VHJhbnNmb3JtID0gVHJhbnNmb3JtX1ZTWDsKLSsgIFZQOFNpbXBsZVZG aWx0ZXIxNiA9IFNpbXBsZVZGaWx0ZXIxNl9WU1g7Ci0rICBWUDhTaW1wbGVWRmlsdGVyMTZpID0g U2ltcGxlVkZpbHRlcjE2aV9WU1g7Ci0rICBWUDhTaW1wbGVIRmlsdGVyMTYgPSBTaW1wbGVIRmls dGVyMTZfVlNYOwotKyAgVlA4U2ltcGxlSEZpbHRlcjE2aSA9IFNpbXBsZUhGaWx0ZXIxNmlfVlNY OwotKyAgVlA4VkZpbHRlcjE2ID0gVkZpbHRlcjE2X1ZTWDsKLSsgIFZQOFZGaWx0ZXIxNmkgPSBW RmlsdGVyMTZpX1ZTWDsKLSsgIFZQOEhGaWx0ZXIxNiA9IEhGaWx0ZXIxNl9WU1g7Ci0rICBWUDhI RmlsdGVyMTZpID0gSEZpbHRlcjE2aV9WU1g7Ci0rICBWUDhWRmlsdGVyOCA9IFZGaWx0ZXI4X1ZT WDsKLSsgIFZQOFZGaWx0ZXI4aSA9IFZGaWx0ZXI4aV9WU1g7Ci0rICBWUDhIRmlsdGVyOCA9IEhG aWx0ZXI4X1ZTWDsKLSsgIFZQOEhGaWx0ZXI4aSA9IEhGaWx0ZXI4aV9WU1g7Ci0rCi0rICBWUDhQ cmVkTHVtYTE2WzBdID0gREMxNl9WU1g7Ci0rICBWUDhQcmVkTHVtYTE2WzFdID0gVE0xNl9WU1g7 Ci0rICBWUDhQcmVkTHVtYTE2WzJdID0gVkUxNl9WU1g7Ci0rICBWUDhQcmVkTHVtYTE2WzNdID0g SEUxNl9WU1g7Ci0rICBWUDhQcmVkTHVtYTE2WzRdID0gREMxNk5vVG9wX1ZTWDsKLSsgIFZQOFBy ZWRMdW1hMTZbNV0gPSBEQzE2Tm9MZWZ0X1ZTWDsKLSsgIFZQOFByZWRMdW1hMTZbNl0gPSBEQzE2 Tm9Ub3BMZWZ0X1ZTWDsKLSsgIFZQOFByZWRDaHJvbWE4WzBdID0gREM4dXZfVlNYOwotKyAgVlA4 UHJlZENocm9tYThbMV0gPSBUTTh1dl9WU1g7Ci0rICBWUDhQcmVkQ2hyb21hOFsyXSA9IFZFOHV2 X1ZTWDsKLSsgIFZQOFByZWRDaHJvbWE4WzRdID0gREM4dXZOb1RvcF9WU1g7Ci0rICBWUDhQcmVk Q2hyb21hOFs1XSA9IERDOHV2Tm9MZWZ0X1ZTWDsKLSsgIFZQOFByZWRDaHJvbWE4WzZdID0gREM4 dXZOb1RvcExlZnRfVlNYOwotKyAgVlA4UHJlZEx1bWE0WzFdID0gVE00X1ZTWDsKLSsgIFZQOFBy ZWRMdW1hNFsyXSA9IFZFNF9WU1g7Ci0rICBWUDhQcmVkTHVtYTRbNF0gPSBSRDRfVlNYOwotKyAg VlA4UHJlZEx1bWE0WzVdID0gVlI0X1ZTWDsKLSsgIFZQOFByZWRMdW1hNFs2XSA9IExENF9WU1g7 Ci0rICBWUDhQcmVkTHVtYTRbN10gPSBWTDRfVlNYOwotK30KLSsKLSsjZWxzZSAgLy8gIVdFQlBf VVNFX1ZTWAotKwotK1dFQlBfRFNQX0lOSVRfU1RVQihWUDhEc3BJbml0VlNYKQotKwotKyNlbmRp ZiAgLy8gV0VCUF9VU0VfVlNYCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2Zp bHRlcnMuYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMKLWluZGV4IDM4ZGE1MjUy ZGYzYS4uOTk2MmUxMjg3NDAyIDEwMDY0NAotLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2Zp bHRlcnMuYwotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnMuYwotQEAgLTIxNyw2 ICsyMTcsNyBAQCBleHRlcm4gdm9pZCBWUDhGaWx0ZXJzSW5pdE1JUFNkc3BSMih2b2lkKTsKLSBl eHRlcm4gdm9pZCBWUDhGaWx0ZXJzSW5pdE1TQSh2b2lkKTsKLSBleHRlcm4gdm9pZCBWUDhGaWx0 ZXJzSW5pdE5FT04odm9pZCk7Ci0gZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRTU0UyKHZvaWQp OwotK2V4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0VlNYKHZvaWQpOwotIAotIFdFQlBfRFNQX0lO SVRfRlVOQyhWUDhGaWx0ZXJzSW5pdCkgewotICAgV2ViUFVuZmlsdGVyc1tXRUJQX0ZJTFRFUl9O T05FXSA9IE5vbmVVbmZpbHRlcl9DOwotQEAgLTI0OCw2ICsyNDksMTEgQEAgV0VCUF9EU1BfSU5J VF9GVU5DKFZQOEZpbHRlcnNJbml0KSB7Ci0gICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNU0EpKSB7 Ci0gICAgICAgVlA4RmlsdGVyc0luaXRNU0EoKTsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBkZWZp bmVkKFdFQlBfSEFWRV9WU1gpCi0rICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Ci0rICAg ICAgVlA4RmlsdGVyc0luaXRWU1goKTsKLSsgICAgfQotICNlbmRpZgotICAgfQotIAotZGlmZiAt LWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzX3ZzeC5jIGIvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL2ZpbHRlcnNfdnN4LmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAw MDAwMDAwMDAuLmFlOGU1N2FjNjg1YwotLS0tIC9kZXYvbnVsbAotKysrIGIvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL2ZpbHRlcnNfdnN4LmMKLUBAIC0wLDAgKzEsMTYyIEBACi0rLy8gQ29weXJpZ2h0 IDIwMTUgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsvLwotKy8vIFVzZSBvZiB0 aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSsvLyB0 aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz b3VyY2UKLSsvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0rLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRy aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0rLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0rLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsvLwotKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBmaWx0ZXJpbmcgZnVuY3Rp b25zLgotKwotKyNpbmNsdWRlICJzcmMvZHNwL2RzcC5oIgotKwotKyNpZiBkZWZpbmVkKFdFQlBf VVNFX1ZTWCkKLSsKLSsjaW5jbHVkZSA8YWx0aXZlYy5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInNyYy9kc3AvY3B1LmgiCi0rI2lu Y2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgiCi0rCi0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdTE2eDg7Ci0rdHlw ZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hvcnQgaTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1bnNp Z25lZCBsb25nIGxvbmcgdTY0eDI7Ci0rCi0rLy8gQnl0ZS13aXNlIHNoaWZ0cyBvZiB0aGUgd2hv bGUgMTI4LWJpdCByZWdpc3RlciwgbWF0Y2hpbmcgdGhlIGxpdHRsZS1lbmRpYW4KLSsvLyBzZW1h bnRpY3Mgb2YgX21tX3NsbGlfc2kxMjggLyBfbW1fc3JsaV9zaTEyOC4gJ24nIG11c3QgYmUgYSBs aXRlcmFsLgotKyNkZWZpbmUgU0xMSSh4LCBuKSB2ZWNfc2xkKCh4KSwgemVybywgKG4pKQotKyNk ZWZpbmUgU1JMSSh4LCBuKSB2ZWNfc2xkKHplcm8sICh4KSwgMTYgLSAobikpCi0rCi0rLy8gTG9h ZHMgOCBieXRlcyBmcm9tICdwJyBpbnRvIHRoZSBsb3cgaGFsZiBvZiBhIHZlY3RvciAoaGlnaCBo YWxmIHVuZGVmaW5lZCkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHU4eDE2IExvYWQ4KGNvbnN0IHVp bnQ4X3QqIHApIHsKLSsgIHVpbnQ2NF90IHY7Ci0rICBtZW1jcHkoJnYsIHAsIDgpOwotKyAgcmV0 dXJuICh1OHgxNil2ZWNfc3BsYXRzKHYpOwotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotKy8vIEhvcml6b250YWwgdW5maWx0ZXI6IG91dFtpXSA9IGluW2ldICsgb3V0W2kgLSAxXSAo YSBwcmVmaXggc3VtKS4KLSsKLStzdGF0aWMgdm9pZCBIb3Jpem9udGFsVW5maWx0ZXJfVlNYKGNv bnN0IHVpbnQ4X3QqIHByZXYsIGNvbnN0IHVpbnQ4X3QqIGluLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCogb3V0LCBpbnQgd2lkdGgpIHsKLSsgIGNvbnN0IHU4 eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgY29uc3QgdTY0eDIg c2g1NiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZyk1Nik7Ci0rICB1OHgxNiBsYXN0 OwotKyAgaW50IGk7Ci0rICBvdXRbMF0gPSAodWludDhfdCkoaW5bMF0gKyAocHJldiA9PSBOVUxM ID8gMCA6IHByZXZbMF0pKTsKLSsgIGlmICh3aWR0aCA8PSAxKSByZXR1cm47Ci0rICBsYXN0ID0g dmVjX2luc2VydChvdXRbMF0sIHplcm8sIDApOwotKyAgZm9yIChpID0gMTsgaSArIDggPD0gd2lk dGg7IGkgKz0gOCkgewotKyAgICBjb25zdCB1OHgxNiBBMCA9IExvYWQ4KGluICsgaSk7Ci0rICAg IGNvbnN0IHU4eDE2IEExID0gdmVjX2FkZChBMCwgbGFzdCk7Ci0rICAgIGNvbnN0IHU4eDE2IEEy ID0gU0xMSShBMSwgMSk7Ci0rICAgIGNvbnN0IHU4eDE2IEEzID0gdmVjX2FkZChBMSwgQTIpOwot KyAgICBjb25zdCB1OHgxNiBBNCA9IFNMTEkoQTMsIDIpOwotKyAgICBjb25zdCB1OHgxNiBBNSA9 IHZlY19hZGQoQTMsIEE0KTsKLSsgICAgY29uc3QgdTh4MTYgQTYgPSBTTExJKEE1LCA0KTsKLSsg ICAgY29uc3QgdTh4MTYgQTcgPSB2ZWNfYWRkKEE1LCBBNik7Ci0rICAgIG1lbWNweShvdXQgKyBp LCAmQTcsIDgpOwotKyAgICBsYXN0ID0gKHU4eDE2KXZlY19zcigodTY0eDIpQTcsIHNoNTYpOyAg Ly8gYnJvYWRjYXN0IG91dFtpICsgN10gdG8gYnl0ZSAwCi0rICB9Ci0rICBmb3IgKDsgaSA8IHdp ZHRoOyArK2kpIG91dFtpXSA9ICh1aW50OF90KShpbltpXSArIG91dFtpIC0gMV0pOwotK30KLSsK LSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIFZlcnRpY2FsIHVuZmlsdGVyOiBvdXRbaV0g PSBpbltpXSArIHByZXZbaV0uCi0rCi0rc3RhdGljIHZvaWQgVmVydGljYWxVbmZpbHRlcl9WU1go Y29uc3QgdWludDhfdCogcHJldiwgY29uc3QgdWludDhfdCogaW4sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCogb3V0LCBpbnQgd2lkdGgpIHsKLSsgIGlmIChwcmV2 ID09IE5VTEwpIHsKLSsgICAgSG9yaXpvbnRhbFVuZmlsdGVyX1ZTWChOVUxMLCBpbiwgb3V0LCB3 aWR0aCk7Ci0rICB9IGVsc2UgewotKyAgICBpbnQgaTsKLSsgICAgY29uc3QgaW50IG1heF9wb3Mg PSB3aWR0aCAmIH4zMTsKLSsgICAgZm9yIChpID0gMDsgaSA8IG1heF9wb3M7IGkgKz0gMzIpIHsK LSsgICAgICBjb25zdCB1OHgxNiBBMCA9IHZlY194bCgwLCAodW5zaWduZWQgY2hhciopJmluW2kg KyAwXSk7Ci0rICAgICAgY29uc3QgdTh4MTYgQTEgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIq KSZpbltpICsgMTZdKTsKLSsgICAgICBjb25zdCB1OHgxNiBCMCA9IHZlY194bCgwLCAodW5zaWdu ZWQgY2hhciopJnByZXZbaSArIDBdKTsKLSsgICAgICBjb25zdCB1OHgxNiBCMSA9IHZlY194bCgw LCAodW5zaWduZWQgY2hhciopJnByZXZbaSArIDE2XSk7Ci0rICAgICAgdmVjX3hzdCh2ZWNfYWRk KEEwLCBCMCksIDAsICh1bnNpZ25lZCBjaGFyKikmb3V0W2kgKyAwXSk7Ci0rICAgICAgdmVjX3hz dCh2ZWNfYWRkKEExLCBCMSksIDAsICh1bnNpZ25lZCBjaGFyKikmb3V0W2kgKyAxNl0pOwotKyAg ICB9Ci0rICAgIGZvciAoOyBpIDwgd2lkdGg7ICsraSkgb3V0W2ldID0gKHVpbnQ4X3QpKGluW2ld ICsgcHJldltpXSk7Ci0rICB9Ci0rfQotKwotKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8g R3JhZGllbnQgdW5maWx0ZXI6IHJvd1tpXSA9IGluW2ldICsgY2xpcChyb3dbaS0xXSArIHRvcFtp XSAtIHRvcFtpLTFdKS4KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgaW50IEdyYWRpZW50UHJlZGlj dG9yX1ZTWCh1aW50OF90IGEsIHVpbnQ4X3QgYiwgdWludDhfdCBjKSB7Ci0rICBjb25zdCBpbnQg ZyA9IGEgKyBiIC0gYzsKLSsgIHJldHVybiAoKGcgJiB+MHhmZikgPT0gMCkgPyBnIDogKGcgPCAw KSA/IDAgOiAyNTU7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEdyYWRpZW50UHJlZGljdEludmVyc2Vf VlNYKGNvbnN0IHVpbnQ4X3QqIGluLCBjb25zdCB1aW50OF90KiB0b3AsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcm93LCBpbnQgbGVuZ3RoKSB7Ci0r ICBpZiAobGVuZ3RoID4gMCkgewotKyAgICBpbnQgaTsKLSsgICAgY29uc3QgaW50IG1heF9wb3Mg PSBsZW5ndGggJiB+NzsKLSsgICAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIGNoYXIpMCk7Ci0rICAgIHU4eDE2IEEgPSB2ZWNfaW5zZXJ0KCh1bnNpZ25lZCBjaGFyKXJv d1stMV0sIHplcm8sIDApOyAgLy8gbGVmdCBzYW1wbGUKLSsgICAgZm9yIChpID0gMDsgaSA8IG1h eF9wb3M7IGkgKz0gOCkgewotKyAgICAgIGNvbnN0IHU4eDE2IHQwID0gTG9hZDgodG9wICsgaSk7 Ci0rICAgICAgY29uc3QgdTh4MTYgdDEgPSBMb2FkOCh0b3AgKyBpIC0gMSk7Ci0rICAgICAgY29u c3QgdTE2eDggQiA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHQwLCB6ZXJvKTsKLSsgICAgICBjb25zdCB1 MTZ4OCBDID0gKHUxNng4KXZlY19tZXJnZWgodDEsIHplcm8pOwotKyAgICAgIGNvbnN0IHU4eDE2 IEQgPSBMb2FkOChpbiArIGkpOyAgLy8gYmFzZSBpbnB1dAotKyAgICAgIGNvbnN0IHUxNng4IEUg PSB2ZWNfc3ViKEIsIEMpOyAgLy8gdW5jbGlwcGVkIGdyYWRpZW50IGJhc2lzIGIgLSBjCi0rICAg ICAgdTh4MTYgb3V0ID0gemVybzsgICAgICAgICAgICAgICAvLyBhY2N1bXVsYXRvciBmb3Igb3V0 cHV0Ci0rICAgICAgdTh4MTYgbWFza19oaSA9IHZlY19pbnNlcnQoKHVuc2lnbmVkIGNoYXIpMHhm ZiwgemVybywgMCk7Ci0rICAgICAgaW50IGsgPSA4OwotKyAgICAgIHdoaWxlICgxKSB7Ci0rICAg ICAgICBjb25zdCB1MTZ4OCB0bXAzID0gdmVjX2FkZCgodTE2eDgpQSwgRSk7ICAvLyBkZWx0YSA9 IGEgKyBiIC0gYwotKyAgICAgICAgY29uc3QgdTh4MTYgdG1wNCA9IHZlY19wYWNrc3UoKGkxNng4 KXRtcDMsIChpMTZ4OCl6ZXJvKTsgIC8vIHNhdC4gZGVsdGEKLSsgICAgICAgIGNvbnN0IHU4eDE2 IHRtcDUgPSB2ZWNfYWRkKHRtcDQsIEQpOyAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdG8g aW5bXQotKyAgICAgICAgQSA9IHZlY19hbmQodG1wNSwgbWFza19oaSk7ICAvLyBrZWVwIG5ldyBz YW1wbGUKLSsgICAgICAgIG91dCA9IHZlY19vcihvdXQsIEEpOyAgICAgICAgLy8gYWNjdW11bGF0 ZSBvdXRwdXQKLSsgICAgICAgIGlmICgtLWsgPT0gMCkgYnJlYWs7Ci0rICAgICAgICBBID0gU0xM SShBLCAxKTsgICAgICAgICAgICAgICAgICAvLyByb3RhdGUgbGVmdCBzYW1wbGUKLSsgICAgICAg IG1hc2tfaGkgPSBTTExJKG1hc2tfaGksIDEpOyAgICAgIC8vIHJvdGF0ZSBtYXNrCi0rICAgICAg ICBBID0gKHU4eDE2KXZlY19tZXJnZWgoQSwgemVybyk7ICAvLyBjb252ZXJ0IDhiIC0+IDE2Ygot KyAgICAgIH0KLSsgICAgICBBID0gU1JMSShBLCA3KTsgIC8vIHByZXBhcmUgbGVmdCBzYW1wbGUg Zm9yIG5leHQgaXRlcmF0aW9uCi0rICAgICAgbWVtY3B5KHJvdyArIGksICZvdXQsIDgpOwotKyAg ICB9Ci0rICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSsgICAgICBjb25zdCBpbnQgZGVs dGEgPSBHcmFkaWVudFByZWRpY3Rvcl9WU1gocm93W2kgLSAxXSwgdG9wW2ldLCB0b3BbaSAtIDFd KTsKLSsgICAgICByb3dbaV0gPSAodWludDhfdCkoaW5baV0gKyBkZWx0YSk7Ci0rICAgIH0KLSsg IH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgR3JhZGllbnRVbmZpbHRlcl9WU1goY29uc3QgdWludDhf dCogcHJldiwgY29uc3QgdWludDhfdCogaW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCogb3V0LCBpbnQgd2lkdGgpIHsKLSsgIGlmIChwcmV2ID09IE5VTEwpIHsK LSsgICAgSG9yaXpvbnRhbFVuZmlsdGVyX1ZTWChOVUxMLCBpbiwgb3V0LCB3aWR0aCk7Ci0rICB9 IGVsc2UgewotKyAgICBvdXRbMF0gPSAodWludDhfdCkoaW5bMF0gKyBwcmV2WzBdKTsgIC8vIHBy ZWRpY3QgZnJvbSBhYm92ZQotKyAgICBHcmFkaWVudFByZWRpY3RJbnZlcnNlX1ZTWChpbiArIDEs IHByZXYgKyAxLCBvdXQgKyAxLCB3aWR0aCAtIDEpOwotKyAgfQotK30KLSsKLSsjdW5kZWYgU0xM SQotKyN1bmRlZiBTUkxJCi0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLStleHRlcm4g dm9pZCBWUDhGaWx0ZXJzSW5pdFZTWCh2b2lkKTsKLSsKLStXRUJQX1RTQU5fSUdOT1JFX0ZVTkNU SU9OIHZvaWQgVlA4RmlsdGVyc0luaXRWU1godm9pZCkgewotKyAgV2ViUFVuZmlsdGVyc1tXRUJQ X0ZJTFRFUl9IT1JJWk9OVEFMXSA9IEhvcml6b250YWxVbmZpbHRlcl9WU1g7Ci0rICBXZWJQVW5m aWx0ZXJzW1dFQlBfRklMVEVSX1ZFUlRJQ0FMXSA9IFZlcnRpY2FsVW5maWx0ZXJfVlNYOwotKyAg V2ViUFVuZmlsdGVyc1tXRUJQX0ZJTFRFUl9HUkFESUVOVF0gPSBHcmFkaWVudFVuZmlsdGVyX1ZT WDsKLSt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKLSsKLStXRUJQX0RTUF9JTklUX1NU VUIoVlA4RmlsdGVyc0luaXRWU1gpCi0rCi0rI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gKLWRpZmYg LS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3MuYyBiL21lZGlhL2xpYndlYnAv c3JjL2RzcC9sb3NzbGVzcy5jCi1pbmRleCAxYTNkODAwYzNmYmMuLjQ4YjVkNGEzYWVkYyAxMDA2 NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzcy5jCi0rKysgYi9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3MuYwotQEAgLTYwNiw2ICs2MDYsNyBAQCBleHRlcm4gdm9p ZCBWUDhMRHNwSW5pdEFWWDIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRORU9OKHZv aWQpOwotIGV4dGVybiB2b2lkIFZQOExEc3BJbml0TUlQU2RzcFIyKHZvaWQpOwotIGV4dGVybiB2 b2lkIFZQOExEc3BJbml0TVNBKHZvaWQpOwotK2V4dGVybiB2b2lkIFZQOExEc3BJbml0VlNYKHZv aWQpOwotIAotICNkZWZpbmUgQ09QWV9QUkVESUNUT1JfQVJSQVkoSU4sIE9VVCkgZG8geyAgICAg ICAgICAgICAgICBcCi0gICAoT1VUKVswXSA9IElOIyMwX0M7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLUBAIC02NzMsNiArNjc0LDExIEBAIFdFQlBfRFNQX0lOSVRfRlVO QyhWUDhMRHNwSW5pdCkgewotICAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgewotICAgICAg IFZQOExEc3BJbml0TVNBKCk7Ci0gICAgIH0KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChXRUJQX0hB VkVfVlNYKQotKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewotKyAgICAgIFZQOExEc3BJ bml0VlNYKCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAgIH0KLSAKLWRpZmYgLS1naXQgYS9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3NfdnN4LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9z c2xlc3NfdnN4LmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjg5 ZGEzMGM5NTg5YwotLS0tIC9kZXYvbnVsbAotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xv c3NsZXNzX3ZzeC5jCi1AQCAtMCwwICsxLDQ0OSBAQAotKy8vIENvcHlyaWdodCAyMDE0IEdvb2ds ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0rLy8KLSsvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0rLy8gdGhhdCBjYW4gYmUg Zm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0rLy8g dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh biBiZSBmb3VuZAotKy8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJv amVjdCBhdXRob3JzIG1heQotKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8K LSsvLyBWU1ggKFBvd2VyUEMpIHZlcnNpb24gb2YgbG9zc2xlc3MgZnVuY3Rpb25zLgotKwotKyNp bmNsdWRlICJzcmMvZHNwL2RzcC5oIgotKwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKLSsK LSsjaW5jbHVkZSA8YWx0aXZlYy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSsjaW5jbHVk ZSAic3JjL2RzcC9jcHUuaCIKLSsjaW5jbHVkZSAic3JjL2RzcC9sb3NzbGVzcy5oIgotKyNpbmNs dWRlICJzcmMvZHNwL2xvc3NsZXNzX2NvbW1vbi5oIgotKyNpbmNsdWRlICJzcmMvd2VicC9mb3Jt YXRfY29uc3RhbnRzLmgiCi0rI2luY2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgiCi0rCi0rdHlwZWRl ZiBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgdTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hvcnQgaTE2eDg7Ci0r dHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgdTMyeDQ7Ci0rdHlwZWRlZiBfX3ZlY3RvciBz aWduZWQgaW50IGkzMng0OwotKwotKy8vIFNpZ25lZCBtdWx0aXBseS1oaWdoIG9mIDE2LWJpdCBs YW5lczogKGEgKiBiKSA+PiAxNiwgbWF0Y2hpbmcKLSsvLyBfbW1fbXVsaGlfZXBpMTYuCi0rc3Rh dGljIFdFQlBfSU5MSU5FIGkxNng4IE11bEhpUzE2KGkxNng4IGEsIGkxNng4IGIpIHsKLSsgIGNv bnN0IHUzMng0IHNoID0gdmVjX3NwbGF0cygodW5zaWduZWQgaW50KTE2KTsKLSsgIGNvbnN0IGkz Mng0IGUgPSB2ZWNfc3JhKHZlY19tdWxlKGEsIGIpLCBzaCk7Ci0rICBjb25zdCBpMzJ4NCBvID0g dmVjX3NyYSh2ZWNfbXVsbyhhLCBiKSwgc2gpOwotKyAgcmV0dXJuIChpMTZ4OCl2ZWNfcGFjayh2 ZWNfbWVyZ2VoKGUsIG8pLCB2ZWNfbWVyZ2VsKGUsIG8pKTsKLSt9Ci0rCi0rLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSsvLyBDb2xvciB0cmFuc2Zvcm1zLgotKwotK3N0YXRpYyB2b2lkIEFkZEdy ZWVuVG9CbHVlQW5kUmVkX1ZTWChjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgbnVtX3BpeGVscywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIGRzdCkgewot KyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0rICAv LyBSZXBsaWNhdGUgdGhlIGdyZWVuIGJ5dGUgKG9mZnNldCAxIG9mIGVhY2ggcGl4ZWwpIGludG8g dGhlIGJsdWUvcmVkIHNsb3RzLgotKyAgY29uc3QgdTh4MTYga1NwcmVhZEdyZWVuID0gezEsIDE2 LCAxLCAxNiwgNSwgIDE2LCA1LCAgMTYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OSwgMTYsIDksIDE2LCAxMywgMTYsIDEzLCAxNn07Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7 IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICBjb25zdCB1OHgxNiBpbiA9ICh1 OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90Kikmc3JjW2ldKTsKLSsgICAgY29uc3QgdTh4MTYgZyA9 IHZlY19wZXJtKGluLCB6ZXJvLCBrU3ByZWFkR3JlZW4pOyAgLy8gMCBnIDAgZyBwZXIgcGl4ZWwK LSsgICAgdmVjX3hzdCgodTMyeDQpdmVjX2FkZChpbiwgZyksIDAsICZkc3RbaV0pOwotKyAgfQot KyAgaWYgKGkgIT0gbnVtX3BpeGVscykgewotKyAgICBWUDhMQWRkR3JlZW5Ub0JsdWVBbmRSZWRf QyhzcmMgKyBpLCBudW1fcGl4ZWxzIC0gaSwgZHN0ICsgaSk7Ci0rICB9Ci0rfQotKwotK3N0YXRp YyB2b2lkIFRyYW5zZm9ybUNvbG9ySW52ZXJzZV9WU1goY29uc3QgVlA4TE11bHRpcGxpZXJzKiBj b25zdCBtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDMyX3QqIHNyYywgaW50IG51bV9waXhlbHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCogZHN0KSB7Ci0rLy8gc2lnbi1leHRlbmRlZCBtdWx0aXBseWlu ZyBjb25zdGFudHMsIHByZS1zaGlmdGVkIGJ5IDUgKHNlZSBsb3NzbGVzc19zc2UyLmMpLgotKyNk ZWZpbmUgQ1NUKFgpICgoKGludDE2X3QpKChtLT5YKSA8PCA4KSkgPj4gNSkKLSsgIGNvbnN0IGkx Nng4IG11bHRzX3JiID0KLSsgICAgICAoaTE2eDgpdmVjX3NwbGF0cygoaW50KSgoKHVpbnQzMl90 KSh1aW50MTZfdClDU1QoZ3JlZW5fdG9fcmVkKSA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgodWludDE2X3QpQ1NUKGdyZWVuX3RvX2JsdWUpKSkpOwotKyAgY29uc3Qg aTE2eDggbXVsdHNfYjIgPQotKyAgICAgIChpMTZ4OCl2ZWNfc3BsYXRzKChpbnQpKCh1aW50MzJf dCkodWludDE2X3QpQ1NUKHJlZF90b19ibHVlKSA8PCAxNikpOwotKyN1bmRlZiBDU1QKLSsgIGNv bnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgY29uc3Qg dTMyeDQgbWFza19hZyA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTB4ZmYwMGZmMDApOyAgLy8gYWxw aGEvZ3JlZW4KLSsgIGNvbnN0IHUxNng4IHNoOF8xNiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTgpOwotKyAgY29uc3QgdTMyeDQgc2g4XzMyID0gdmVjX3NwbGF0cygodW5zaWduZWQgaW50 KTgpOwotKyAgLy8gQnJvYWRjYXN0IHRoZSBncmVlbiBieXRlIChvZmZzZXQgMSkgaW50byB0aGUg aGlnaCBieXRlIG9mIGJvdGggMTYtYml0Ci0rICAvLyBoYWx2ZXMgb2YgZWFjaCBwaXhlbDogeWll bGRzIGcgPDwgOCBpbiBlYWNoIGxhbmUuCi0rICBjb25zdCB1OHgxNiBrR3JlZW5IaSA9IHsxNiwg MSwgMTYsIDEsIDE2LCA1LCAgMTYsIDUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwg OSwgMTYsIDksIDE2LCAxMywgMTYsIDEzfTsKLSsgIGludCBpOwotKyAgZm9yIChpID0gMDsgaSAr IDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7Ci0rICAgIGNvbnN0IHU4eDE2IGluID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSZzcmNbaV0pOwotKyAgICBjb25zdCB1OHgxNiBBID0gKHU4 eDE2KXZlY19hbmQoKHUzMng0KWluLCBtYXNrX2FnKTsgICAvLyBhIDAgZyAwCi0rICAgIGNvbnN0 IGkxNng4IEMgPSAoaTE2eDgpdmVjX3Blcm0oQSwgemVybywga0dyZWVuSGkpOyAgIC8vIGcwZzAg KGcgPDwgOCkKLSsgICAgY29uc3QgdTh4MTYgRCA9ICh1OHgxNilNdWxIaVMxNihDLCBtdWx0c19y Yik7ICAgICAgICAgLy8geCBkciB4IGRiMQotKyAgICBjb25zdCB1OHgxNiBFID0gdmVjX2FkZChp biwgRCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyB4IHInIHggYicKLSsgICAgY29uc3QgdTE2 eDggRiA9IHZlY19zbCgodTE2eDgpRSwgc2g4XzE2KTsgICAgICAgICAgICAgLy8gcicgMCBiJyAw Ci0rICAgIGNvbnN0IHU4eDE2IEcgPSAodTh4MTYpTXVsSGlTMTYoKGkxNng4KUYsIG11bHRzX2Iy KTsgIC8vIHggZGIyIDAgMAotKyAgICBjb25zdCB1OHgxNiBIID0gKHU4eDE2KXZlY19zcigodTMy eDQpRywgc2g4XzMyKTsgICAgICAvLyAwIHggZGIyIDAKLSsgICAgY29uc3QgdTE2eDggSSA9ICh1 MTZ4OCl2ZWNfYWRkKEgsICh1OHgxNilGKTsgICAgICAgICAgLy8gcicgeCBiJycgMAotKyAgICBj b25zdCB1OHgxNiBKID0gKHU4eDE2KXZlY19zcihJLCBzaDhfMTYpOyAgICAgICAgICAgICAvLyAw IHInIDAgYicnCi0rICAgIHZlY194c3QodmVjX29yKCh1MzJ4NClKLCAodTMyeDQpQSksIDAsICZk c3RbaV0pOwotKyAgfQotKyAgaWYgKGkgIT0gbnVtX3BpeGVscykgewotKyAgICBWUDhMVHJhbnNm b3JtQ29sb3JJbnZlcnNlX0MobSwgc3JjICsgaSwgbnVtX3BpeGVscyAtIGksIGRzdCArIGkpOwot KyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIENvbG9yLXNwYWNlIGNv bnZlcnNpb24gZnVuY3Rpb25zLgotKwotK3N0YXRpYyB2b2lkIENvbnZlcnRCR1JBVG9SR0JBX1ZT WChjb25zdCB1aW50MzJfdCogV0VCUF9SRVNUUklDVCBzcmMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRz dCkgewotKyAgLy8gU3dhcCB0aGUgYmx1ZSAob2Zmc2V0IDApIGFuZCByZWQgKG9mZnNldCAyKSBi eXRlcyBvZiBlYWNoIHBpeGVsLgotKyAgY29uc3QgdTh4MTYga1N3YXBCUiA9IHsyLCAxLCAwLCAz LCA2LCA1LCA0LCA3LCAxMCwgOSwgOCwgMTEsIDE0LCAxMywgMTIsIDE1fTsKLSsgIGludCBpOwot KyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7Ci0rICAgIGNvbnN0 IHU4eDE2IGluID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZzcmNbaV0pOwotKyAgICB2 ZWNfeHN0KHZlY19wZXJtKGluLCBpbiwga1N3YXBCUiksIDAsICZkc3RbNCAqIGldKTsKLSsgIH0K LSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TENvbnZlcnRCR1JBVG9SR0JBX0Mo c3JjICsgaSwgbnVtX3BpeGVscyAtIGksIGRzdCArIDQgKiBpKTsKLSsgIH0KLSt9Ci0rCi0rc3Rh dGljIHZvaWQgQ29udmVydEJHUkFUb1JHQl9WU1goY29uc3QgdWludDMyX3QqIFdFQlBfUkVTVFJJ Q1Qgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxz LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCkgewotKyAgLy8gQkdSQSAtPiBSR0I6IGdhdGhl ciBSLEcsQiAob2Zmc2V0cyAyLDEsMCkgb2YgZWFjaCBwaXhlbCwgZHJvcCBhbHBoYS4KLSsgIGNv bnN0IHU4eDE2IGtUb1JHQiA9IHsyLCAxLCAwLCA2LCA1LCA0LCAxMCwgOSwgOCwgMTQsIDEzLCAx MiwgMCwgMCwgMCwgMH07Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9w aXhlbHM7IGkgKz0gNCkgewotKyAgICBjb25zdCB1OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwoMCwg KHVpbnQzMl90Kikmc3JjW2ldKTsKLSsgICAgY29uc3QgdTh4MTYgb3V0ID0gdmVjX3Blcm0oaW4s IGluLCBrVG9SR0IpOwotKyAgICBtZW1jcHkoJmRzdFszICogaV0sICZvdXQsIDEyKTsKLSsgIH0K LSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TENvbnZlcnRCR1JBVG9SR0JfQyhz cmMgKyBpLCBudW1fcGl4ZWxzIC0gaSwgZHN0ICsgMyAqIGkpOwotKyAgfQotK30KLSsKLStzdGF0 aWMgdm9pZCBDb252ZXJ0QkdSQVRvQkdSX1ZTWChjb25zdCB1aW50MzJfdCogV0VCUF9SRVNUUklD VCBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMs IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7Ci0rICAvLyBCR1JBIC0+IEJHUjogZ2F0aGVy IEIsRyxSIChvZmZzZXRzIDAsMSwyKSBvZiBlYWNoIHBpeGVsLCBkcm9wIGFscGhhLgotKyAgY29u c3QgdTh4MTYga1RvQkdSID0gezAsIDEsIDIsIDQsIDUsIDYsIDgsIDksIDEwLCAxMiwgMTMsIDE0 LCAwLCAwLCAwLCAwfTsKLSsgIGludCBpOwotKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3Bp eGVsczsgaSArPSA0KSB7Ci0rICAgIGNvbnN0IHU4eDE2IGluID0gKHU4eDE2KXZlY194bCgwLCAo dWludDMyX3QqKSZzcmNbaV0pOwotKyAgICBjb25zdCB1OHgxNiBvdXQgPSB2ZWNfcGVybShpbiwg aW4sIGtUb0JHUik7Ci0rICAgIG1lbWNweSgmZHN0WzMgKiBpXSwgJm91dCwgMTIpOwotKyAgfQot KyAgaWYgKGkgIT0gbnVtX3BpeGVscykgewotKyAgICBWUDhMQ29udmVydEJHUkFUb0JHUl9DKHNy YyArIGksIG51bV9waXhlbHMgLSBpLCBkc3QgKyAzICogaSk7Ci0rICB9Ci0rfQotKwotKy8vLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gUHJlZGljdG9yIHRyYW5zZm9ybS4KLSsKLSsvLyBCeXRl LXdpc2Ugc2hpZnRzIG9mIHRoZSB3aG9sZSByZWdpc3RlciAobGl0dGxlLWVuZGlhbiBfbW1fc3ts LHJ9bGlfc2kxMjgpLgotKyNkZWZpbmUgU0xMSSh4LCBuKSB2ZWNfc2xkKCh4KSwga1plcm8sIChu KSkKLSsjZGVmaW5lIFNSTEkoeCwgbikgdmVjX3NsZChrWmVybywgKHgpLCAxNiAtIChuKSkKLStz dGF0aWMgY29uc3QgdTh4MTYga1plcm8gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMH07Ci0rCi0rLy8gUGVyLWJ5dGUgZmxvb3IgYXZlcmFnZSAoYSArIGIp ID4+IDEsIG1hdGNoaW5nIHRoZSBDIEF2ZXJhZ2UyKCkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHU4 eDE2IEF2ZXJhZ2UyX3U4KHU4eDE2IGEsIHU4eDE2IGIpIHsKLSsgIGNvbnN0IHU4eDE2IG9uZSA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7Ci0rICBjb25zdCB1OHgxNiBhdmcxID0gdmVj X2F2ZyhhLCBiKTsgIC8vIChhICsgYiArIDEpID4+IDEKLSsgIHJldHVybiB2ZWNfc3ViKGF2ZzEs IHZlY19hbmQodmVjX3hvcihhLCBiKSwgb25lKSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElO RSB1MzJ4NCBMYW5lMCh1aW50MzJfdCB2KSB7Ci0rICBjb25zdCB1MzJ4NCByID0ge3YsIDAsIDAs IDB9OwotKyAgcmV0dXJuIHI7Ci0rfQotKwotKy8vIFNpbmdsZS1waXhlbCBoZWxwZXJzIG9wZXJh dGluZyBvbiB0aGUgbG93IDMyLWJpdCBsYW5lIG9ubHkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHUx Nng4IFVucGFjazE2KHVpbnQzMl90IGEpIHsKLSsgIHJldHVybiAodTE2eDgpdmVjX21lcmdlaCgo dTh4MTYpTGFuZTAoYSksIGtaZXJvKTsKLSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQz Ml90IEF2ZXJhZ2UyX1ZTWCh1aW50MzJfdCBhMCwgdWludDMyX3QgYTEpIHsKLSsgIHJldHVybiB2 ZWNfZXh0cmFjdCgodTMyeDQpQXZlcmFnZTJfdTgoKHU4eDE2KUxhbmUwKGEwKSwgKHU4eDE2KUxh bmUwKGExKSksIDApOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdTE2eDggQXZlcmFnZTJf MTYodWludDMyX3QgYTAsIHVpbnQzMl90IGExKSB7Ci0rICBjb25zdCB1MTZ4OCBvbmUgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKTsKLSsgIHJldHVybiB2ZWNfc3IodmVjX2FkZChVbnBh Y2sxNihhMCksIFVucGFjazE2KGExKSksIG9uZSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElO RSB1aW50MzJfdCBBdmVyYWdlM19WU1godWludDMyX3QgYTAsIHVpbnQzMl90IGExLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYTIpIHsKLSsgIGNv bnN0IHUxNng4IG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpOwotKyAgY29uc3Qg dTE2eDggYXZnMSA9IEF2ZXJhZ2UyXzE2KGEwLCBhMik7Ci0rICBjb25zdCB1MTZ4OCBhdmcyID0g dmVjX3NyKHZlY19hZGQoYXZnMSwgVW5wYWNrMTYoYTEpKSwgb25lKTsKLSsgIHJldHVybiB2ZWNf ZXh0cmFjdCgodTMyeDQpdmVjX3BhY2tzdSgoaTE2eDgpYXZnMiwgKGkxNng4KWF2ZzIpLCAwKTsK LSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IEF2ZXJhZ2U0X1ZTWCh1aW50MzJf dCBhMCwgdWludDMyX3QgYTEsIHVpbnQzMl90IGEyLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgYTMpIHsKLSsgIGNvbnN0IHUxNng4IG9uZSA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpOwotKyAgY29uc3QgdTE2eDggYXZnMSA9IEF2ZXJh Z2UyXzE2KGEwLCBhMSk7Ci0rICBjb25zdCB1MTZ4OCBhdmcyID0gQXZlcmFnZTJfMTYoYTIsIGEz KTsKLSsgIGNvbnN0IHUxNng4IGF2ZzMgPSB2ZWNfc3IodmVjX2FkZChhdmcxLCBhdmcyKSwgb25l KTsKLSsgIHJldHVybiB2ZWNfZXh0cmFjdCgodTMyeDQpdmVjX3BhY2tzdSgoaTE2eDgpYXZnMywg KGkxNng4KWF2ZzMpLCAwKTsKLSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IENs YW1wZWRBZGRTdWJ0cmFjdEZ1bGxfVlNYKHVpbnQzMl90IGMwLCB1aW50MzJfdCBjMSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgYzIpIHsKLSsgIGNvbnN0IGkxNng4IHYgPQotKyAgICAgIHZlY19zdWIoKGkxNng4KXZlY19h ZGQoVW5wYWNrMTYoYzApLCBVbnBhY2sxNihjMSkpLCAoaTE2eDgpVW5wYWNrMTYoYzIpKTsKLSsg IHJldHVybiB2ZWNfZXh0cmFjdCgodTMyeDQpdmVjX3BhY2tzdSh2LCB2KSwgMCk7Ci0rfQotKwot K3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBDbGFtcGVkQWRkU3VidHJhY3RIYWxmX1ZTWCh1 aW50MzJfdCBjMCwgdWludDMyX3QgYzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGMyKSB7Ci0rICBjb25zdCB1MTZ4OCBv bmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKTsKLSsgIGNvbnN0IHUxNng4IEMwID0g VW5wYWNrMTYoYzApOwotKyAgY29uc3QgdTE2eDggQzEgPSBVbnBhY2sxNihjMSk7Ci0rICBjb25z dCB1MTZ4OCBCMCA9IFVucGFjazE2KGMyKTsKLSsgIGNvbnN0IHUxNng4IEEwID0gdmVjX3NyKHZl Y19hZGQoQzEsIEMwKSwgb25lKTsgIC8vIGF2ZQotKyAgY29uc3QgaTE2eDggQTEgPSB2ZWNfc3Vi KChpMTZ4OClBMCwgKGkxNng4KUIwKTsKLSsgIGNvbnN0IGkxNng4IEJndEEgPSAoaTE2eDgpdmVj X2NtcGd0KEIwLCBBMCk7ICAvLyAwIG9yIC0xCi0rICBjb25zdCBpMTZ4OCBBMiA9IHZlY19zdWIo QTEsIEJndEEpOwotKyAgY29uc3QgaTE2eDggQTMgPSB2ZWNfc3JhKEEyLCBvbmUpOwotKyAgY29u c3QgaTE2eDggQTQgPSB2ZWNfYWRkKChpMTZ4OClBMCwgQTMpOwotKyAgcmV0dXJuIHZlY19leHRy YWN0KCh1MzJ4NCl2ZWNfcGFja3N1KEE0LCBBNCksIDApOwotK30KLSsKLStzdGF0aWMgV0VCUF9J TkxJTkUgdWludDMyX3QgU2VsZWN0X1ZTWCh1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJf dCBjKSB7Ci0rICBjb25zdCB1OHgxNiBBID0gKHU4eDE2KUxhbmUwKGEpOwotKyAgY29uc3QgdTh4 MTYgQiA9ICh1OHgxNilMYW5lMChiKTsKLSsgIGNvbnN0IHU4eDE2IEMgPSAodTh4MTYpTGFuZTAo Yyk7Ci0rICBjb25zdCB1MzJ4NCBzYSA9IHZlY19zdW00cyh2ZWNfb3IodmVjX3N1YnMoQSwgQyks IHZlY19zdWJzKEMsIEEpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxh dHMoKHVuc2lnbmVkIGludCkwKSk7Ci0rICBjb25zdCB1MzJ4NCBzYiA9IHZlY19zdW00cyh2ZWNf b3IodmVjX3N1YnMoQiwgQyksIHZlY19zdWJzKEMsIEIpKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkwKSk7Ci0rICByZXR1cm4gdmVjX2V4 dHJhY3QoKHUzMng0KXZlY19jbXBndChzYiwgc2EpLCAwKSA/IGIgOiBhOwotK30KLSsKLStzdGF0 aWMgdWludDMyX3QgUHJlZGljdG9yNV9WU1goY29uc3QgdWludDMyX3QqIGNvbnN0IGxlZnQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCB0b3Ap IHsKLSsgIHJldHVybiBBdmVyYWdlM19WU1goKmxlZnQsIHRvcFswXSwgdG9wWzFdKTsKLSt9Ci0r c3RhdGljIHVpbnQzMl90IFByZWRpY3RvcjZfVlNYKGNvbnN0IHVpbnQzMl90KiBjb25zdCBsZWZ0 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogY29uc3Qg dG9wKSB7Ci0rICByZXR1cm4gQXZlcmFnZTJfVlNYKCpsZWZ0LCB0b3BbLTFdKTsKLSt9Ci0rc3Rh dGljIHVpbnQzMl90IFByZWRpY3RvcjdfVlNYKGNvbnN0IHVpbnQzMl90KiBjb25zdCBsZWZ0LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogY29uc3QgdG9w KSB7Ci0rICByZXR1cm4gQXZlcmFnZTJfVlNYKCpsZWZ0LCB0b3BbMF0pOwotK30KLStzdGF0aWMg dWludDMyX3QgUHJlZGljdG9yMTNfVlNYKGNvbnN0IHVpbnQzMl90KiBjb25zdCBsZWZ0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHRvcCkg ewotKyAgcmV0dXJuIENsYW1wZWRBZGRTdWJ0cmFjdEhhbGZfVlNYKCpsZWZ0LCB0b3BbMF0sIHRv cFstMV0pOwotK30KLSsKLStzdGF0aWMgdm9pZCBQcmVkaWN0b3JBZGQwX1ZTWChjb25zdCB1aW50 MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90KiB1cHBlciwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgb3V0KSB7Ci0r ICBjb25zdCB1OHgxNiBibGFjayA9ICh1OHgxNil2ZWNfc3BsYXRzKCh1aW50MzJfdClBUkdCX0JM QUNLKTsKLSsgIGludCBpOwotKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSAr PSA0KSB7Ci0rICAgIGNvbnN0IHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90 KikmaW5baV0pOwotKyAgICB2ZWNfeHN0KCh1MzJ4NCl2ZWNfYWRkKHNyYywgYmxhY2spLCAwLCAm b3V0W2ldKTsKLSsgIH0KLSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TFByZWRp Y3RvcnNBZGRfQ1swXShpbiArIGksIE5VTEwsIG51bV9waXhlbHMgLSBpLCBvdXQgKyBpKTsKLSsg IH0KLSsgICh2b2lkKXVwcGVyOwotK30KLSsKLStzdGF0aWMgdm9pZCBQcmVkaWN0b3JBZGQxX1ZT WChjb25zdCB1aW50MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90KiB1cHBlciwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDMyX3QqIFdFQlBfUkVTVFJJ Q1Qgb3V0KSB7Ci0rICB1MzJ4NCBwcmV2ID0gdmVjX3NwbGF0cyhvdXRbLTFdKTsKLSsgIGludCBp OwotKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7Ci0rICAgIGNv bnN0IHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5baV0pOwotKyAg ICBjb25zdCB1OHgxNiBzdW0wID0gdmVjX2FkZChzcmMsIFNMTEkoc3JjLCA0KSk7ICAgIC8vIGEg fCBhK2IgfCBiK2MgfCBjK2QKLSsgICAgY29uc3QgdTh4MTYgc3VtMSA9IHZlY19hZGQoc3VtMCwg U0xMSShzdW0wLCA4KSk7ICAvLyBydW5uaW5nIHN1bQotKyAgICBjb25zdCB1OHgxNiByZXMgPSB2 ZWNfYWRkKHN1bTEsICh1OHgxNilwcmV2KTsKLSsgICAgdmVjX3hzdCgodTMyeDQpcmVzLCAwLCAm b3V0W2ldKTsKLSsgICAgcHJldiA9IHZlY19zcGxhdCgodTMyeDQpcmVzLCAzKTsgIC8vIHJlcGxp Y2F0ZSBsYXN0IHBpeGVsCi0rICB9Ci0rICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQ OExQcmVkaWN0b3JzQWRkX0NbMV0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMgLSBpLCBv dXQgKyBpKTsKLSsgIH0KLSt9Ci0rCi0rI2RlZmluZSBHRU5FUkFURV9QUkVESUNUT1JfMV9WU1go WCwgSU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHN0YXRp YyB2b2lkIFByZWRpY3RvckFkZCMjWCMjX1ZTWChjb25zdCB1aW50MzJfdCogaW4sIGNvbnN0IHVp bnQzMl90KiB1cHBlciwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBudW1fcGl4ZWxzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgb3V0KSB7ICAg ICAgICAgICAgIFwKLSsgICAgaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBmb3IgKGkgPSAwOyBp ICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgY29uc3QgdTh4MTYgc3JjID0gKHU4eDE2KXZlY194bCgwLCAodWludDMy X3QqKSZpbltpXSk7ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBjb25zdCB1OHgxNiBvdGhl ciA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmKElOKSk7ICAgICAgICAgICAgICAgICAg XAotKyAgICAgIHZlY194c3QoKHUzMng0KXZlY19hZGQoc3JjLCBvdGhlciksIDAsICZvdXRbaV0p OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgaWYgKGkgIT0gbnVtX3BpeGVscykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbKFgpXShp biArIGksIHVwcGVyICsgaSwgbnVtX3BpeGVscyAtIGksIG91dCArIGkpOyAgICBcCi0rICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIH0KLStHRU5FUkFURV9QUkVESUNUT1JfMV9WU1goMiwgdXBw ZXJbaV0pICAgICAgLy8gVG9wLgotK0dFTkVSQVRFX1BSRURJQ1RPUl8xX1ZTWCgzLCB1cHBlcltp ICsgMV0pICAvLyBUb3AtcmlnaHQuCi0rR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYKDQsIHVwcGVy W2kgLSAxXSkgIC8vIFRvcC1sZWZ0LgotKyN1bmRlZiBHRU5FUkFURV9QUkVESUNUT1JfMV9WU1gK LSsKLSsvLyBQcmVkaWN0b3JzIDUsIDYsIDcsIDEzIHVzZSBpbnRlZ2VyIGF2ZXJhZ2VzIGFuZCBj YW5ub3QgYmUgYWNjdW11bGF0ZWQgaW4KLSsvLyBwYXJhbGxlbCwgc28gdXNlIHRoZSBnZW5lcmlj IG9uZS1waXhlbC1hdC1hLXRpbWUgYmF0Y2guCi0rR0VORVJBVEVfUFJFRElDVE9SX0FERChQcmVk aWN0b3I1X1ZTWCwgUHJlZGljdG9yQWRkNV9WU1gpCi0rR0VORVJBVEVfUFJFRElDVE9SX0FERChQ cmVkaWN0b3I2X1ZTWCwgUHJlZGljdG9yQWRkNl9WU1gpCi0rR0VORVJBVEVfUFJFRElDVE9SX0FE RChQcmVkaWN0b3I3X1ZTWCwgUHJlZGljdG9yQWRkN19WU1gpCi0rR0VORVJBVEVfUFJFRElDVE9S X0FERChQcmVkaWN0b3IxM19WU1gsIFByZWRpY3RvckFkZDEzX1ZTWCkKLSsKLSsjZGVmaW5lIEdF TkVSQVRFX1BSRURJQ1RPUl8yX1ZTWChYLCBJTikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkIyNYIyNfVlNYKGNvbnN0 IHVpbnQzMl90KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLCBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCog V0VCUF9SRVNUUklDVCBvdXQpIHsgICAgICAgICAgICAgXAotKyAgICBpbnQgaTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBjb25zdCB1OHgxNiBUb3RoZXIg PSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJihJTikpOyAgICAgICAgICAgICAgICAgXAot KyAgICAgIGNvbnN0IHU4eDE2IFQgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVwcGVy W2ldKTsgICAgICAgICAgICAgICAgICBcCi0rICAgICAgY29uc3QgdTh4MTYgc3JjID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSZpbltpXSk7ICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICB2ZWNfeHN0KCh1MzJ4NCl2ZWNfYWRkKEF2ZXJhZ2UyX3U4KFQsIFRvdGhlciksIHNyYyksIDAs ICZvdXRbaV0pOyAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChp ICE9IG51bV9waXhlbHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICBWUDhMUHJlZGljdG9yc0FkZF9DWyhYKV0oaW4gKyBpLCB1 cHBlciArIGksIG51bV9waXhlbHMgLSBpLCBvdXQgKyBpKTsgICAgXAotKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9Ci0rR0VORVJBVEVfUFJFRElDVE9SXzJfVlNYKDgsIHVwcGVyW2kgLSAx XSkgIC8vIEF2ZXJhZ2UgVEwsIFQuCi0rR0VORVJBVEVfUFJFRElDVE9SXzJfVlNYKDksIHVwcGVy W2kgKyAxXSkgIC8vIEF2ZXJhZ2UgVCwgVFIuCi0rI3VuZGVmIEdFTkVSQVRFX1BSRURJQ1RPUl8y X1ZTWAotKwotKy8vIFByZWRpY3RvcjEwOiBhdmVyYWdlIG9mIChhdmVyYWdlKEwsIFRMKSwgYXZl cmFnZShULCBUUikpLgotK3N0YXRpYyB2b2lkIFByZWRpY3RvckFkZDEwX1ZTWChjb25zdCB1aW50 MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90KiB1cHBlciwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgewot KyAgdTh4MTYgTCA9ICh1OHgxNilMYW5lMChvdXRbLTFdKTsKLSsgIGludCBpLCBrOwotKyAgZm9y IChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7Ci0rICAgIHU4eDE2IHNyYyA9 ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5baV0pOwotKyAgICB1OHgxNiBUTCA9ICh1 OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaSAtIDFdKTsKLSsgICAgY29uc3QgdTh4 MTYgVCA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaV0pOwotKyAgICBjb25z dCB1OHgxNiBUUiA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaSArIDFdKTsK LSsgICAgdTh4MTYgYXZnVFRSID0gQXZlcmFnZTJfdTgoVCwgVFIpOwotKyAgICBmb3IgKGsgPSAw OyBrIDwgNDsgKytrKSB7Ci0rICAgICAgY29uc3QgdTh4MTYgYXZnID0gQXZlcmFnZTJfdTgoYXZn VFRSLCBBdmVyYWdlMl91OChMLCBUTCkpOwotKyAgICAgIEwgPSB2ZWNfYWRkKGF2Zywgc3JjKTsK LSsgICAgICBvdXRbaSArIGtdID0gdmVjX2V4dHJhY3QoKHUzMng0KUwsIDApOwotKyAgICAgIGF2 Z1RUUiA9IFNSTEkoYXZnVFRSLCA0KTsKLSsgICAgICBUTCA9IFNSTEkoVEwsIDQpOwotKyAgICAg IHNyYyA9IFNSTEkoc3JjLCA0KTsKLSsgICAgfQotKyAgfQotKyAgaWYgKGkgIT0gbnVtX3BpeGVs cykgewotKyAgICBWUDhMUHJlZGljdG9yc0FkZF9DWzEwXShpbiArIGksIHVwcGVyICsgaSwgbnVt X3BpeGVscyAtIGksIG91dCArIGkpOwotKyAgfQotK30KLSsKLSsvLyBQcmVkaWN0b3IxMTogc2Vs ZWN0IGJldHdlZW4gVCBhbmQgTCBiYXNlZCBvbiB8VC1UTHwgdnMgfEwtVEx8LgotK3N0YXRpYyB2 b2lkIFByZWRpY3RvckFkZDExX1ZTWChjb25zdCB1aW50MzJfdCogaW4sIGNvbnN0IHVpbnQzMl90 KiB1cHBlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMs IHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgewotKyAgY29uc3QgdTMyeDQgejMyID0gdmVj X3NwbGF0cygodW5zaWduZWQgaW50KTApOwotKyAgdTh4MTYgTCA9ICh1OHgxNilMYW5lMChvdXRb LTFdKTsKLSsgIGludCBpLCBrOwotKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsg aSArPSA0KSB7Ci0rICAgIHU4eDE2IFQgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVw cGVyW2ldKTsKLSsgICAgdTh4MTYgVEwgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVw cGVyW2kgLSAxXSk7Ci0rICAgIHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90 KikmaW5baV0pOwotKyAgICB1OHgxNiBwYSA9ICh1OHgxNil2ZWNfc3VtNHModmVjX29yKHZlY19z dWJzKFQsIFRMKSwgdmVjX3N1YnMoVEwsIFQpKSwgejMyKTsKLSsgICAgZm9yIChrID0gMDsgayA8 IDQ7ICsraykgewotKyAgICAgIGNvbnN0IHUzMng0IHBiID0gdmVjX3N1bTRzKHZlY19vcih2ZWNf c3VicyhMLCBUTCksIHZlY19zdWJzKFRMLCBMKSksIHozMik7Ci0rICAgICAgY29uc3QgdTMyeDQg bWFzayA9ICh1MzJ4NCl2ZWNfY21wZ3QocGIsICh1MzJ4NClwYSk7ICAvLyBwYiA+IHBhID8gTCA6 IFQKLSsgICAgICBjb25zdCB1OHgxNiBwcmVkID0gdmVjX3NlbChULCBMLCAodTh4MTYpbWFzayk7 Ci0rICAgICAgTCA9IHZlY19hZGQoc3JjLCBwcmVkKTsKLSsgICAgICBvdXRbaSArIGtdID0gdmVj X2V4dHJhY3QoKHUzMng0KUwsIDApOwotKyAgICAgIFQgPSBTUkxJKFQsIDQpOwotKyAgICAgIFRM ID0gU1JMSShUTCwgNCk7Ci0rICAgICAgc3JjID0gU1JMSShzcmMsIDQpOwotKyAgICAgIHBhID0g U1JMSShwYSwgNCk7Ci0rICAgIH0KLSsgIH0KLSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsg ICAgVlA4TFByZWRpY3RvcnNBZGRfQ1sxMV0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMg LSBpLCBvdXQgKyBpKTsKLSsgIH0KLSt9Ci0rCi0rLy8gUHJlZGljdG9yMTI6IENsYW1wZWRBZGRT dWJ0cmFjdEZ1bGwuICdMJyBpcyBrZXB0IHVucGFja2VkIHRvIDE2IGJpdHMgaW4gdGhlCi0rLy8g bG93IDQgbGFuZXM7ICdkaWZmJyAoPSBUIC0gVEwpIGhvbGRzIHR3byBwaXhlbHMsIHRoZSBhY3Rp dmUgb25lIGluIGxhbmVzIDAtMy4KLSsjZGVmaW5lIERPX1BSRUQxMihESUZGKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGNvbnN0IGkxNng4IGFsbCA9IHZl Y19hZGQoKGkxNng4KUwsIChESUZGKSk7ICAgICAgICAgIFwKLSsgICAgY29uc3QgdTh4MTYgcmVz ID0gdmVjX2FkZChzcmMsIHZlY19wYWNrc3UoYWxsLCBhbGwpKTsgXAotKyAgICBvdXRbaSArIG91 dF9pZHgrK10gPSB2ZWNfZXh0cmFjdCgodTMyeDQpcmVzLCAwKTsgICAgICBcCi0rICAgIEwgPSAo dTE2eDgpdmVjX21lcmdlaChyZXMsIGtaZXJvKTsgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0g d2hpbGUgKDApCi0rCi0rc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkMTJfVlNYKGNvbnN0IHVpbnQz Ml90KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgb3V0KSB7Ci0r ICB1MTZ4OCBMID0gVW5wYWNrMTYob3V0Wy0xXSk7Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7 IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICBpbnQgb3V0X2lkeCA9IDA7Ci0r ICAgIHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5baV0pOwotKyAg ICBjb25zdCB1OHgxNiBUID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpXSk7 Ci0rICAgIGNvbnN0IHU4eDE2IFRMID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBl cltpIC0gMV0pOwotKyAgICAvLyAxNi1iaXQgZ3JhZGllbnQgYmFzaXMgVCAtIFRMIGZvciB0aGUg Zm91ciBwaXhlbHMgKGxvdyBhbmQgaGlnaCBoYWx2ZXMpLgotKyAgICBpMTZ4OCBkaWZmX2xvID0K LSsgICAgICAgIHZlY19zdWIoKGkxNng4KXZlY19tZXJnZWgoVCwga1plcm8pLCAoaTE2eDgpdmVj X21lcmdlaChUTCwga1plcm8pKTsKLSsgICAgaTE2eDggZGlmZl9oaSA9Ci0rICAgICAgICB2ZWNf c3ViKChpMTZ4OCl2ZWNfbWVyZ2VsKFQsIGtaZXJvKSwgKGkxNng4KXZlY19tZXJnZWwoVEwsIGta ZXJvKSk7Ci0rICAgIERPX1BSRUQxMihkaWZmX2xvKTsKLSsgICAgZGlmZl9sbyA9IChpMTZ4OClT UkxJKCh1OHgxNilkaWZmX2xvLCA4KTsKLSsgICAgc3JjID0gU1JMSShzcmMsIDQpOwotKyAgICBE T19QUkVEMTIoZGlmZl9sbyk7Ci0rICAgIHNyYyA9IFNSTEkoc3JjLCA0KTsKLSsgICAgRE9fUFJF RDEyKGRpZmZfaGkpOwotKyAgICBkaWZmX2hpID0gKGkxNng4KVNSTEkoKHU4eDE2KWRpZmZfaGks IDgpOwotKyAgICBzcmMgPSBTUkxJKHNyYywgNCk7Ci0rICAgIERPX1BSRUQxMihkaWZmX2hpKTsK LSsgIH0KLSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TFByZWRpY3RvcnNBZGRf Q1sxMl0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMgLSBpLCBvdXQgKyBpKTsKLSsgIH0K LSt9Ci0rI3VuZGVmIERPX1BSRUQxMgotKwotKyN1bmRlZiBTTExJCi0rI3VuZGVmIFNSTEkKLSsK LSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotK2V4dGVybiB2b2lkIFZQOExEc3BJbml0VlNY KHZvaWQpOwotKwotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBWUDhMRHNwSW5pdFZT WCh2b2lkKSB7Ci0rICBWUDhMUHJlZGljdG9yc0FkZFswXSA9IFByZWRpY3RvckFkZDBfVlNYOwot KyAgVlA4TFByZWRpY3RvcnNBZGRbMV0gPSBQcmVkaWN0b3JBZGQxX1ZTWDsKLSsgIFZQOExQcmVk aWN0b3JzQWRkWzJdID0gUHJlZGljdG9yQWRkMl9WU1g7Ci0rICBWUDhMUHJlZGljdG9yc0FkZFsz XSA9IFByZWRpY3RvckFkZDNfVlNYOwotKyAgVlA4TFByZWRpY3RvcnNBZGRbNF0gPSBQcmVkaWN0 b3JBZGQ0X1ZTWDsKLSsgIFZQOExQcmVkaWN0b3JzQWRkWzVdID0gUHJlZGljdG9yQWRkNV9WU1g7 Ci0rICBWUDhMUHJlZGljdG9yc0FkZFs2XSA9IFByZWRpY3RvckFkZDZfVlNYOwotKyAgVlA4TFBy ZWRpY3RvcnNBZGRbN10gPSBQcmVkaWN0b3JBZGQ3X1ZTWDsKLSsgIFZQOExQcmVkaWN0b3JzQWRk WzhdID0gUHJlZGljdG9yQWRkOF9WU1g7Ci0rICBWUDhMUHJlZGljdG9yc0FkZFs5XSA9IFByZWRp Y3RvckFkZDlfVlNYOwotKyAgVlA4TFByZWRpY3RvcnNBZGRbMTBdID0gUHJlZGljdG9yQWRkMTBf VlNYOwotKyAgVlA4TFByZWRpY3RvcnNBZGRbMTFdID0gUHJlZGljdG9yQWRkMTFfVlNYOwotKyAg VlA4TFByZWRpY3RvcnNBZGRbMTJdID0gUHJlZGljdG9yQWRkMTJfVlNYOwotKyAgVlA4TFByZWRp Y3RvcnNBZGRbMTNdID0gUHJlZGljdG9yQWRkMTNfVlNYOwotKwotKyAgVlA4TEFkZEdyZWVuVG9C bHVlQW5kUmVkID0gQWRkR3JlZW5Ub0JsdWVBbmRSZWRfVlNYOwotKyAgVlA4TFRyYW5zZm9ybUNv bG9ySW52ZXJzZSA9IFRyYW5zZm9ybUNvbG9ySW52ZXJzZV9WU1g7Ci0rICBWUDhMQ29udmVydEJH UkFUb1JHQkEgPSBDb252ZXJ0QkdSQVRvUkdCQV9WU1g7Ci0rICBWUDhMQ29udmVydEJHUkFUb1JH QiA9IENvbnZlcnRCR1JBVG9SR0JfVlNYOwotKyAgVlA4TENvbnZlcnRCR1JBVG9CR1IgPSBDb252 ZXJ0QkdSQVRvQkdSX1ZTWDsKLSt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKLSsKLStX RUJQX0RTUF9JTklUX1NUVUIoVlA4TERzcEluaXRWU1gpCi0rCi0rI2VuZGlmICAvLyBXRUJQX1VT RV9WU1gKLWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbW96LmJ1aWxkIGIvbWVk aWEvbGlid2VicC9zcmMvZHNwL21vei5idWlsZAotaW5kZXggOGQ2Zjg0MjdjOTAwLi5mM2U5ZDEy NzMxMTAgMTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbW96LmJ1aWxkCi0rKysg Yi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbW96LmJ1aWxkCi1AQCAtMTE4LDYgKzExOCwyMCBAQCBl bGlmIENPTkZJR1snVEFSR0VUX0NQVSddLnN0YXJ0c3dpdGgoJ21pcHMnKToKLSAgICAgICAgICd5 dXZfbWlwczMyLmMnLAotICAgICAgICAgJ3l1dl9taXBzX2RzcF9yMi5jJywKLSAgICAgXQotK2Vs aWYgQ09ORklHWydUQVJHRVRfQ1BVJ10gPT0gJ3BwYzY0JzoKLSsgICAgU09VUkNFUyArPSBbCi0r ICAgICAgICAnYWxwaGFfcHJvY2Vzc2luZ192c3guYycsCi0rICAgICAgICAnZGVjX3ZzeC5jJywK LSsgICAgICAgICdmaWx0ZXJzX3ZzeC5jJywKLSsgICAgICAgICdsb3NzbGVzc192c3guYycsCi0r ICAgICAgICAncmVzY2FsZXJfdnN4LmMnLAotKyAgICAgICAgJ3Vwc2FtcGxpbmdfdnN4LmMnLAot KyAgICAgICAgJ3l1dl92c3guYycsCi0rICAgIF0KLSsgICAgREVGSU5FU1snV0VCUF9IQVZFX1ZT WCddID0gMTsKLSsgICAgZm9yIGYgaW4gU09VUkNFUzoKLSsgICAgICBpZiBmLmVuZHN3aXRoKCd2 c3guYycpOgotKyAgICAgICAgU09VUkNFU1tmXS5mbGFncyArPSBbJy1tdnN4J10KLSAKLSBpZiBD T05GSUdbJ0NDX1RZUEUnXSBpbiAoJ2NsYW5nJywgJ2NsYW5nLWNsJyk6Ci0gICAgIENGTEFHUyAr PSBbJy1Xbm8tdW5yZWFjaGFibGUtY29kZSddCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL3Jlc2NhbGVyLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXIuYwotaW5k ZXggZWFmY2NkNDQyZjI1Li4yYzBjOGM0N2E3YTMgMTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJw L3NyYy9kc3AvcmVzY2FsZXIuYwotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVy LmMKLUBAIC0yMDcsNiArMjA3LDcgQEAgZXh0ZXJuIHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdE1J UFMzMih2b2lkKTsKLSBleHRlcm4gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0TUlQU2RzcFIyKHZv aWQpOwotIGV4dGVybiB2b2lkIFdlYlBSZXNjYWxlckRzcEluaXRNU0Eodm9pZCk7Ci0gZXh0ZXJu IHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdE5FT04odm9pZCk7Ci0rZXh0ZXJuIHZvaWQgV2ViUFJl c2NhbGVyRHNwSW5pdFZTWCh2b2lkKTsKLSAKLSBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUFJlc2Nh bGVyRHNwSW5pdCkgewotICNpZiAhZGVmaW5lZChXRUJQX1JFRFVDRV9TSVpFKQotQEAgLTIzOCw2 ICsyMzksMTEgQEAgV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBSZXNjYWxlckRzcEluaXQpIHsKLSAg ICAgaWYgKFZQOEdldENQVUluZm8oa01TQSkpIHsKLSAgICAgICBXZWJQUmVzY2FsZXJEc3BJbml0 TVNBKCk7Ci0gICAgIH0KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChXRUJQX0hBVkVfVlNYKQotKyAg ICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewotKyAgICAgIFdlYlBSZXNjYWxlckRzcEluaXRW U1goKTsKLSsgICAgfQotICNlbmRpZgotICAgfQotIAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndl YnAvc3JjL2RzcC9yZXNjYWxlcl92c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxl cl92c3guYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uMDAyZjIz MmQ2NDdhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2Fs ZXJfdnN4LmMKLUBAIC0wLDAgKzEsMjAxIEBACi0rLy8gQ29weXJpZ2h0IDIwMTUgR29vZ2xlIElu Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsvLwotKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSsvLyB0aGF0IGNhbiBiZSBmb3Vu ZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSsvLyB0cmVl LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl IGZvdW5kCi0rLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0 IGF1dGhvcnMgbWF5Ci0rLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v dCBvZiB0aGUgc291cmNlIHRyZWUuCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLwotKy8v IFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiByZXNjYWxpbmcgZnVuY3Rpb25zLgotKwotKyNpbmNs dWRlICJzcmMvZHNwL2RzcC5oIgotKwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkgJiYgIWRl ZmluZWQoV0VCUF9SRURVQ0VfU0laRSkKLSsKLSsjaW5jbHVkZSA8YWx0aXZlYy5oPgotKyNpbmNs dWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInNyYy9k c3AvY3B1LmgiCi0rI2luY2x1ZGUgInNyYy91dGlscy9yZXNjYWxlcl91dGlscy5oIgotKyNpbmNs dWRlICJzcmMvd2VicC90eXBlcy5oIgotKwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hh ciB1OHgxNjsKLSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBpMTZ4ODsKLSt0eXBlZGVm IF9fdmVjdG9yIHVuc2lnbmVkIGludCB1MzJ4NDsKLSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBp bnQgaTMyeDQ7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgdTY0eDI7Ci0r Ci0rI2RlZmluZSBST1VOREVSIChXRUJQX1JFU0NBTEVSX09ORSA+PiAxKQotKyNkZWZpbmUgTVVM VF9GSVhfQyh4LCB5KSAoKCh1aW50NjRfdCkoeCkgKiAoeSkgKyBST1VOREVSKSA+PiBXRUJQX1JF U0NBTEVSX1JGSVgpCi0rI2RlZmluZSBNVUxUX0ZJWF9GTE9PUl9DKHgsIHkpICgoKHVpbnQ2NF90 KSh4KSAqICh5KSkgPj4gV0VCUF9SRVNDQUxFUl9SRklYKQotKwotKyNpZiAoV0VCUF9SRVNDQUxF Ul9SRklYICE9IDMyKQotKyNlcnJvciAiTVVMVF9GSVgvV0VCUF9SRVNDQUxFUl9SRklYIG5lZWQg c29tZSBtb3JlIHdvcmsiCi0rI2VuZGlmCi0rCi0rLy8gUmV0dXJucyAoeCAqIHNjYWxlICsgUk9V TkRFUikgPj4gMzIgZm9yIGVhY2ggb2YgdGhlIGZvdXIgMzItYml0IGxhbmVzLgotK3N0YXRpYyBX RUJQX0lOTElORSB1MzJ4NCBNdWx0Rml4X1ZTWCh1MzJ4NCB4LCB1aW50MzJfdCBzY2FsZSkgewot KyAgY29uc3QgdTY0eDIgcm91bmRlciA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylS T1VOREVSKTsKLSsgIGNvbnN0IHU2NHgyIHNoaWZ0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgbG9u ZyBsb25nKVdFQlBfUkVTQ0FMRVJfUkZJWCk7Ci0rICBjb25zdCB1MzJ4NCBzID0gdmVjX3NwbGF0 cyhzY2FsZSk7Ci0rICAvLyB2ZWNfbXVsZS92ZWNfbXVsbyBwcm9kdWNlIHRoZSAzMngzMi0+NjQg cHJvZHVjdHMgb2YgdGhlIGV2ZW4gKDAsIDIpIGFuZAotKyAgLy8gb2RkICgxLCAzKSBsYW5lcyBy ZXNwZWN0aXZlbHkuCi0rICB1NjR4MiBlID0gdmVjX2FkZCh2ZWNfbXVsZSh4LCBzKSwgcm91bmRl cik7Ci0rICB1NjR4MiBvID0gdmVjX2FkZCh2ZWNfbXVsbyh4LCBzKSwgcm91bmRlcik7Ci0rICBl ID0gdmVjX3NyKGUsIHNoaWZ0KTsKLSsgIG8gPSB2ZWNfc3Iobywgc2hpZnQpOwotKyAgcmV0dXJu IHZlY19tZXJnZWUoKHUzMng0KWUsICh1MzJ4NClvKTsKLSt9Ci0rCi0rLy8gUmV0dXJucyAoeCAq IHNjYWxlKSA+PiAzMiBmb3IgZWFjaCBsYW5lIChubyByb3VuZGluZykuCi0rc3RhdGljIFdFQlBf SU5MSU5FIHUzMng0IE11bHRGaXhGbG9vcl9WU1godTMyeDQgeCwgdWludDMyX3Qgc2NhbGUpIHsK LSsgIGNvbnN0IHU2NHgyIHNoaWZ0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgbG9uZyBsb25nKVdF QlBfUkVTQ0FMRVJfUkZJWCk7Ci0rICBjb25zdCB1MzJ4NCBzID0gdmVjX3NwbGF0cyhzY2FsZSk7 Ci0rICB1NjR4MiBlID0gdmVjX3NyKHZlY19tdWxlKHgsIHMpLCBzaGlmdCk7Ci0rICB1NjR4MiBv ID0gdmVjX3NyKHZlY19tdWxvKHgsIHMpLCBzaGlmdCk7Ci0rICByZXR1cm4gdmVjX21lcmdlZSgo dTMyeDQpZSwgKHUzMng0KW8pOwotK30KLSsKLSsvLyBSZXR1cm5zIChBICogZnJvdyArIEIgKiBp cm93ICsgUk9VTkRFUikgPj4gMzIgZm9yIGVhY2ggbGFuZS4KLStzdGF0aWMgV0VCUF9JTkxJTkUg dTMyeDQgSW50ZXJwb2xhdGVfVlNYKGNvbnN0IHJlc2NhbGVyX3QqIFdFQlBfUkVTVFJJQ1QgZnJv dywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2Nh bGVyX3QqIFdFQlBfUkVTVFJJQ1QgaXJvdywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IEEsIHVpbnQzMl90IEIpIHsKLSsgIGNvbnN0IHU2NHgyIHJv dW5kZXIgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpUk9VTkRFUik7Ci0rICBjb25z dCB1NjR4MiBzaGlmdCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylXRUJQX1JFU0NB TEVSX1JGSVgpOwotKyAgY29uc3QgdTMyeDQgZiA9IHZlY194bCgwLCAodWludDMyX3QqKWZyb3cp OwotKyAgY29uc3QgdTMyeDQgaXIgPSB2ZWNfeGwoMCwgKHVpbnQzMl90Kilpcm93KTsKLSsgIGNv bnN0IHUzMng0IHZhID0gdmVjX3NwbGF0cyhBKTsKLSsgIGNvbnN0IHUzMng0IHZiID0gdmVjX3Nw bGF0cyhCKTsKLSsgIHU2NHgyIGUgPSB2ZWNfYWRkKHZlY19tdWxlKGYsIHZhKSwgdmVjX211bGUo aXIsIHZiKSk7Ci0rICB1NjR4MiBvID0gdmVjX2FkZCh2ZWNfbXVsbyhmLCB2YSksIHZlY19tdWxv KGlyLCB2YikpOwotKyAgZSA9IHZlY19zcih2ZWNfYWRkKGUsIHJvdW5kZXIpLCBzaGlmdCk7Ci0r ICBvID0gdmVjX3NyKHZlY19hZGQobywgcm91bmRlciksIHNoaWZ0KTsKLSsgIHJldHVybiB2ZWNf bWVyZ2VlKCh1MzJ4NCllLCAodTMyeDQpbyk7Ci0rfQotKwotKy8vIFNhdHVyYXRlZCBwYWNrIG9m IHR3byAzMi1iaXQgbGFuZSB2ZWN0b3JzICg4IHZhbHVlcykgaW50byA4IGJ5dGVzIGF0IGRzdC4K LStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBTdG9yZThfVlNYKHUzMng0IGxvLCB1MzJ4NCBoaSwg dWludDhfdCogZHN0KSB7Ci0rICBjb25zdCBpMTZ4OCBzMTYgPSB2ZWNfcGFja3MoKGkzMng0KWxv LCAoaTMyeDQpaGkpOwotKyAgY29uc3QgdTh4MTYgczggPSB2ZWNfcGFja3N1KHMxNiwgczE2KTsK LSsgIG1lbWNweShkc3QsICZzOCwgOCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIFJlc2NhbGVyRXhw b3J0Um93RXhwYW5kX1ZTWChXZWJQUmVzY2FsZXIqIGNvbnN0IHdyaykgewotKyAgaW50IHhfb3V0 OwotKyAgdWludDhfdCogY29uc3QgZHN0ID0gd3JrLT5kc3Q7Ci0rICByZXNjYWxlcl90KiBjb25z dCBpcm93ID0gd3JrLT5pcm93OwotKyAgY29uc3QgaW50IHhfb3V0X21heCA9IHdyay0+ZHN0X3dp ZHRoICogd3JrLT5udW1fY2hhbm5lbHM7Ci0rICBjb25zdCBpbnQgbWF4X3NwYW4gPSB4X291dF9t YXggJiB+NzsKLSsgIGNvbnN0IHJlc2NhbGVyX3QqIGNvbnN0IGZyb3cgPSB3cmstPmZyb3c7Ci0r ICBjb25zdCB1aW50MzJfdCBmeV9zY2FsZSA9IHdyay0+Znlfc2NhbGU7Ci0rICBhc3NlcnQoIVdl YlBSZXNjYWxlck91dHB1dERvbmUod3JrKSk7Ci0rICBhc3NlcnQod3JrLT55X2FjY3VtIDw9IDAp OwotKyAgYXNzZXJ0KHdyay0+eV9leHBhbmQpOwotKyAgYXNzZXJ0KHdyay0+eV9zdWIgIT0gMCk7 Ci0rICBpZiAod3JrLT55X2FjY3VtID09IDApIHsKLSsgICAgZm9yICh4X291dCA9IDA7IHhfb3V0 IDwgbWF4X3NwYW47IHhfb3V0ICs9IDgpIHsKLSsgICAgICBjb25zdCB1MzJ4NCBBMCA9IHZlY194 bCgwLCAodWludDMyX3QqKShmcm93ICsgeF9vdXQgKyAwKSk7Ci0rICAgICAgY29uc3QgdTMyeDQg QTEgPSB2ZWNfeGwoMCwgKHVpbnQzMl90KikoZnJvdyArIHhfb3V0ICsgNCkpOwotKyAgICAgIGNv bnN0IHUzMng0IEIwID0gTXVsdEZpeF9WU1goQTAsIGZ5X3NjYWxlKTsKLSsgICAgICBjb25zdCB1 MzJ4NCBCMSA9IE11bHRGaXhfVlNYKEExLCBmeV9zY2FsZSk7Ci0rICAgICAgU3RvcmU4X1ZTWChC MCwgQjEsIGRzdCArIHhfb3V0KTsKLSsgICAgfQotKyAgICBmb3IgKDsgeF9vdXQgPCB4X291dF9t YXg7ICsreF9vdXQpIHsKLSsgICAgICBjb25zdCB1aW50MzJfdCBKID0gZnJvd1t4X291dF07Ci0r ICAgICAgY29uc3QgaW50IHYgPSAoaW50KU1VTFRfRklYX0MoSiwgZnlfc2NhbGUpOwotKyAgICAg IGRzdFt4X291dF0gPSAodiA+IDI1NSkgPyAyNTV1IDogKHVpbnQ4X3QpdjsKLSsgICAgfQotKyAg fSBlbHNlIHsKLSsgICAgY29uc3QgdWludDMyX3QgQiA9IFdFQlBfUkVTQ0FMRVJfRlJBQygtd3Jr LT55X2FjY3VtLCB3cmstPnlfc3ViKTsKLSsgICAgY29uc3QgdWludDMyX3QgQSA9ICh1aW50MzJf dCkoV0VCUF9SRVNDQUxFUl9PTkUgLSBCKTsKLSsgICAgZm9yICh4X291dCA9IDA7IHhfb3V0IDwg bWF4X3NwYW47IHhfb3V0ICs9IDgpIHsKLSsgICAgICBjb25zdCB1MzJ4NCBDMCA9Ci0rICAgICAg ICAgIEludGVycG9sYXRlX1ZTWChmcm93ICsgeF9vdXQgKyAwLCBpcm93ICsgeF9vdXQgKyAwLCBB LCBCKTsKLSsgICAgICBjb25zdCB1MzJ4NCBDMSA9Ci0rICAgICAgICAgIEludGVycG9sYXRlX1ZT WChmcm93ICsgeF9vdXQgKyA0LCBpcm93ICsgeF9vdXQgKyA0LCBBLCBCKTsKLSsgICAgICBjb25z dCB1MzJ4NCBEMCA9IE11bHRGaXhfVlNYKEMwLCBmeV9zY2FsZSk7Ci0rICAgICAgY29uc3QgdTMy eDQgRDEgPSBNdWx0Rml4X1ZTWChDMSwgZnlfc2NhbGUpOwotKyAgICAgIFN0b3JlOF9WU1goRDAs IEQxLCBkc3QgKyB4X291dCk7Ci0rICAgIH0KLSsgICAgZm9yICg7IHhfb3V0IDwgeF9vdXRfbWF4 OyArK3hfb3V0KSB7Ci0rICAgICAgY29uc3QgdWludDY0X3QgSSA9ICh1aW50NjRfdClBICogZnJv d1t4X291dF0gKyAodWludDY0X3QpQiAqIGlyb3dbeF9vdXRdOwotKyAgICAgIGNvbnN0IHVpbnQz Ml90IEogPSAodWludDMyX3QpKChJICsgUk9VTkRFUikgPj4gV0VCUF9SRVNDQUxFUl9SRklYKTsK LSsgICAgICBjb25zdCBpbnQgdiA9IChpbnQpTVVMVF9GSVhfQyhKLCBmeV9zY2FsZSk7Ci0rICAg ICAgZHN0W3hfb3V0XSA9ICh2ID4gMjU1KSA/IDI1NXUgOiAodWludDhfdCl2OwotKyAgICB9Ci0r ICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIFJlc2NhbGVyRXhwb3J0Um93U2hyaW5rX1ZTWChXZWJQ UmVzY2FsZXIqIGNvbnN0IHdyaykgewotKyAgaW50IHhfb3V0OwotKyAgdWludDhfdCogY29uc3Qg ZHN0ID0gd3JrLT5kc3Q7Ci0rICByZXNjYWxlcl90KiBjb25zdCBpcm93ID0gd3JrLT5pcm93Owot KyAgY29uc3QgaW50IHhfb3V0X21heCA9IHdyay0+ZHN0X3dpZHRoICogd3JrLT5udW1fY2hhbm5l bHM7Ci0rICBjb25zdCBpbnQgbWF4X3NwYW4gPSB4X291dF9tYXggJiB+NzsKLSsgIGNvbnN0IHJl c2NhbGVyX3QqIGNvbnN0IGZyb3cgPSB3cmstPmZyb3c7Ci0rICBjb25zdCB1aW50MzJfdCB5c2Nh bGUgPSB3cmstPmZ5X3NjYWxlICogKC13cmstPnlfYWNjdW0pOwotKyAgY29uc3QgdWludDMyX3Qg Znh5X3NjYWxlID0gd3JrLT5meHlfc2NhbGU7Ci0rICBhc3NlcnQoIVdlYlBSZXNjYWxlck91dHB1 dERvbmUod3JrKSk7Ci0rICBhc3NlcnQod3JrLT55X2FjY3VtIDw9IDApOwotKyAgYXNzZXJ0KCF3 cmstPnlfZXhwYW5kKTsKLSsgIGlmICh5c2NhbGUpIHsKLSsgICAgZm9yICh4X291dCA9IDA7IHhf b3V0IDwgbWF4X3NwYW47IHhfb3V0ICs9IDgpIHsKLSsgICAgICBjb25zdCB1MzJ4NCBpbjAgPSB2 ZWNfeGwoMCwgKHVpbnQzMl90KikoZnJvdyArIHhfb3V0ICsgMCkpOwotKyAgICAgIGNvbnN0IHUz Mng0IGluMSA9IHZlY194bCgwLCAodWludDMyX3QqKShmcm93ICsgeF9vdXQgKyA0KSk7Ci0rICAg ICAgY29uc3QgdTMyeDQgaW4yID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291dCAr IDApKTsKLSsgICAgICBjb25zdCB1MzJ4NCBpbjMgPSB2ZWNfeGwoMCwgKHVpbnQzMl90KikoaXJv dyArIHhfb3V0ICsgNCkpOwotKyAgICAgIGNvbnN0IHUzMng0IEEwID0gTXVsdEZpeEZsb29yX1ZT WChpbjAsIHlzY2FsZSk7Ci0rICAgICAgY29uc3QgdTMyeDQgQTEgPSBNdWx0Rml4Rmxvb3JfVlNY KGluMSwgeXNjYWxlKTsKLSsgICAgICBjb25zdCB1MzJ4NCBCMCA9IHZlY19zdWIoaW4yLCBBMCk7 Ci0rICAgICAgY29uc3QgdTMyeDQgQjEgPSB2ZWNfc3ViKGluMywgQTEpOwotKyAgICAgIGNvbnN0 IHUzMng0IEMwID0gTXVsdEZpeF9WU1goQjAsIGZ4eV9zY2FsZSk7Ci0rICAgICAgY29uc3QgdTMy eDQgQzEgPSBNdWx0Rml4X1ZTWChCMSwgZnh5X3NjYWxlKTsKLSsgICAgICBTdG9yZThfVlNYKEMw LCBDMSwgZHN0ICsgeF9vdXQpOwotKyAgICAgIHZlY194c3QoQTAsIDAsICh1aW50MzJfdCopKGly b3cgKyB4X291dCArIDApKTsKLSsgICAgICB2ZWNfeHN0KEExLCAwLCAodWludDMyX3QqKShpcm93 ICsgeF9vdXQgKyA0KSk7Ci0rICAgIH0KLSsgICAgZm9yICg7IHhfb3V0IDwgeF9vdXRfbWF4OyAr K3hfb3V0KSB7Ci0rICAgICAgY29uc3QgdWludDMyX3QgZnJhYyA9ICh1aW50MzJfdClNVUxUX0ZJ WF9GTE9PUl9DKGZyb3dbeF9vdXRdLCB5c2NhbGUpOwotKyAgICAgIGNvbnN0IGludCB2ID0gKGlu dClNVUxUX0ZJWF9DKGlyb3dbeF9vdXRdIC0gZnJhYywgZnh5X3NjYWxlKTsKLSsgICAgICBkc3Rb eF9vdXRdID0gKHYgPiAyNTUpID8gMjU1dSA6ICh1aW50OF90KXY7Ci0rICAgICAgaXJvd1t4X291 dF0gPSBmcmFjOyAgLy8gbmV3IGZyYWN0aW9uYWwgc3RhcnQKLSsgICAgfQotKyAgfSBlbHNlIHsK LSsgICAgY29uc3QgdTMyeDQgemVybyA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTApOwotKyAgICBm b3IgKHhfb3V0ID0gMDsgeF9vdXQgPCBtYXhfc3BhbjsgeF9vdXQgKz0gOCkgewotKyAgICAgIGNv bnN0IHUzMng0IGluMCA9IHZlY194bCgwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyAwKSk7 Ci0rICAgICAgY29uc3QgdTMyeDQgaW4xID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGlyb3cgKyB4 X291dCArIDQpKTsKLSsgICAgICBjb25zdCB1MzJ4NCBBMCA9IE11bHRGaXhfVlNYKGluMCwgZnh5 X3NjYWxlKTsKLSsgICAgICBjb25zdCB1MzJ4NCBBMSA9IE11bHRGaXhfVlNYKGluMSwgZnh5X3Nj YWxlKTsKLSsgICAgICBTdG9yZThfVlNYKEEwLCBBMSwgZHN0ICsgeF9vdXQpOwotKyAgICAgIHZl Y194c3QoemVybywgMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgMCkpOwotKyAgICAgIHZl Y194c3QoemVybywgMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgNCkpOwotKyAgICB9Ci0r ICAgIGZvciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291dCkgewotKyAgICAgIGNvbnN0IGlu dCB2ID0gKGludClNVUxUX0ZJWF9DKGlyb3dbeF9vdXRdLCBmeHlfc2NhbGUpOwotKyAgICAgIGRz dFt4X291dF0gPSAodiA+IDI1NSkgPyAyNTV1IDogKHVpbnQ4X3QpdjsKLSsgICAgICBpcm93W3hf b3V0XSA9IDA7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rI3VuZGVmIE1VTFRfRklYX0ZMT09SX0MK LSsjdW5kZWYgTVVMVF9GSVhfQwotKyN1bmRlZiBST1VOREVSCi0rCi0rLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsKLStleHRlcm4gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0VlNYKHZvaWQpOwot KwotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0VlNY KHZvaWQpIHsKLSsgIFdlYlBSZXNjYWxlckV4cG9ydFJvd0V4cGFuZCA9IFJlc2NhbGVyRXhwb3J0 Um93RXhwYW5kX1ZTWDsKLSsgIFdlYlBSZXNjYWxlckV4cG9ydFJvd1NocmluayA9IFJlc2NhbGVy RXhwb3J0Um93U2hyaW5rX1ZTWDsKLSt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKLSsK LStXRUJQX0RTUF9JTklUX1NUVUIoV2ViUFJlc2NhbGVyRHNwSW5pdFZTWCkKLSsKLSsjZW5kaWYg IC8vIFdFQlBfVVNFX1ZTWAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNh bXBsaW5nLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5jCi1pbmRleCBjNTdm NjZjMzU1M2YuLmZhZWNkZjI3NzM5MyAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2Rz cC91cHNhbXBsaW5nLmMKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBsaW5nLmMK LUBAIC0yMzUsNiArMjM1LDcgQEAgZXh0ZXJuIFZQOENQVUluZm8gVlA4R2V0Q1BVSW5mbzsKLSBl eHRlcm4gdm9pZCBXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNNSVBTZHNwUjIodm9pZCk7Ci0gZXh0 ZXJuIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzU1NFMih2b2lkKTsKLSBleHRlcm4gdm9p ZCBXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNTU0U0MSh2b2lkKTsKLStleHRlcm4gdm9pZCBXZWJQ SW5pdFlVVjQ0NENvbnZlcnRlcnNWU1godm9pZCk7Ci0gCi0gV0VCUF9EU1BfSU5JVF9GVU5DKFdl YlBJbml0WVVWNDQ0Q29udmVydGVycykgewotICAgV2ViUFlVVjQ0NENvbnZlcnRlcnNbTU9ERV9S R0JBXSAgICAgID0gV2ViUFl1djQ0NFRvUmdiYV9DOwotQEAgLTI2NCw2ICsyNjUsMTEgQEAgV0VC UF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0WVVWNDQ0Q29udmVydGVycykgewotICAgICBpZiAoVlA4 R2V0Q1BVSW5mbyhrTUlQU2RzcFIyKSkgewotICAgICAgIFdlYlBJbml0WVVWNDQ0Q29udmVydGVy c01JUFNkc3BSMigpOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZT WCkKLSsgICAgaWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBXZWJQSW5pdFlVVjQ0 NENvbnZlcnRlcnNWU1goKTsKLSsgICAgfQotICNlbmRpZgotICAgfQotIH0KLUBAIC0yNzYsNiAr MjgyLDcgQEAgZXh0ZXJuIHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzU1NFNDEodm9pZCk7Ci0gZXh0 ZXJuIHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzTkVPTih2b2lkKTsKLSBleHRlcm4gdm9pZCBXZWJQ SW5pdFVwc2FtcGxlcnNNSVBTZHNwUjIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUEluaXRVcHNh bXBsZXJzTVNBKHZvaWQpOwotK2V4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc1ZTWCh2b2lk KTsKLSAKLSBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRVcHNhbXBsZXJzKSB7Ci0gI2lmZGVm IEZBTkNZX1VQU0FNUExJTkcKLUBAIC0zMTQsNiArMzIxLDExIEBAIFdFQlBfRFNQX0lOSVRfRlVO QyhXZWJQSW5pdFVwc2FtcGxlcnMpIHsKLSAgICAgaWYgKFZQOEdldENQVUluZm8oa01TQSkpIHsK LSAgICAgICBXZWJQSW5pdFVwc2FtcGxlcnNNU0EoKTsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBk ZWZpbmVkKFdFQlBfSEFWRV9WU1gpCi0rICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Ci0r ICAgICAgV2ViUEluaXRVcHNhbXBsZXJzVlNYKCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAgIH0KLSAK LWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3guYyBiL21l ZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBsaW5nX3ZzeC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwMDAwLi5hNzE5MTk3MmZjNmUKLS0tLSAvZGV2L251bGwKLSsrKyBi L21lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBsaW5nX3ZzeC5jCi1AQCAtMCwwICsxLDE1MSBA QAotKy8vIENvcHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0r Ly8KLSsvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls ZSBsaWNlbnNlCi0rLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0 aGUgcm9vdCBvZiB0aGUgc291cmNlCi0rLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1 YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotKy8vIGluIHRoZSBmaWxlIFBB VEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotKy8vIGJlIGZvdW5k IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotKy8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8KLSsvLyBWU1ggKFBvd2VyUEMpIHZlcnNpb24gb2Yg WVVWIHRvIFJHQiB1cHNhbXBsaW5nIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC9k c3AuaCIKLSsKLSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCi0rCi0rI2luY2x1ZGUgPGFsdGl2 ZWMuaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNp bmNsdWRlICJzcmMvZHNwL2NwdS5oIgotKyNpbmNsdWRlICJzcmMvZHNwL3l1di5oIgotKyNpbmNs dWRlICJzcmMvd2VicC9kZWNvZGUuaCIKLSsjaW5jbHVkZSAic3JjL3dlYnAvdHlwZXMuaCIKLSsK LSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdTh4MTY7Ci0rdHlwZWRlZiBfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCB1MTZ4ODsKLSsKLSsvLyBVcHNhbXBsZSAxNiBjaHJvbWEgcGFpcnMg ZnJvbSByb3dzIHIxL3IyICgxNyByZWFkYWJsZSBieXRlcyBlYWNoKSBpbnRvIDMyCi0rLy8gInRv cCIgYnl0ZXMgYXQgb3V0WzAuLjMxXSBhbmQgMzIgImJvdHRvbSIgYnl0ZXMgYXQgb3V0WzY0Li45 NV0sIG1hdGNoaW5nIHRoZQotKy8vIGZhbmN5LXVwc2FtcGxlciBkaWFnb25hbCB3ZWlnaHRzIChh ICsgM2IgKyAzYyArIGQpIC8gOCBldGMuCi0rI2RlZmluZSBHRVRfTShpaiwgaW4pIFwKLSsgIHZl Y19zdWIodmVjX2F2ZyhrLCAoaW4pKSwgXAotKyAgICAgICAgICB2ZWNfYW5kKHZlY19vcih2ZWNf YW5kKChpaiksIHN0KSwgdmVjX3hvcihrLCAoaW4pKSksIG9uZSkpCi0rCi0rc3RhdGljIHZvaWQg VXBzYW1wbGUzMlBpeGVscyhjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHIxLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCByMiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qgb3V0 KSB7Ci0rICBjb25zdCB1OHgxNiBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwot KyAgY29uc3QgdTh4MTYgYSA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopcjEpOwot KyAgY29uc3QgdTh4MTYgYiA9IHZlY194bCgxLCAoY29uc3QgdW5zaWduZWQgY2hhciopcjEpOwot KyAgY29uc3QgdTh4MTYgYyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopcjIpOwot KyAgY29uc3QgdTh4MTYgZCA9IHZlY194bCgxLCAoY29uc3QgdW5zaWduZWQgY2hhciopcjIpOwot KyAgY29uc3QgdTh4MTYgcyA9IHZlY19hdmcoYSwgZCk7Ci0rICBjb25zdCB1OHgxNiB0ID0gdmVj X2F2ZyhiLCBjKTsKLSsgIGNvbnN0IHU4eDE2IHN0ID0gdmVjX3hvcihzLCB0KTsKLSsgIGNvbnN0 IHU4eDE2IHQzID0KLSsgICAgICB2ZWNfYW5kKHZlY19vcih2ZWNfb3IodmVjX3hvcihhLCBkKSwg dmVjX3hvcihiLCBjKSksIHN0KSwgb25lKTsKLSsgIGNvbnN0IHU4eDE2IGsgPSB2ZWNfc3ViKHZl Y19hdmcocywgdCksIHQzKTsKLSsgIGNvbnN0IHU4eDE2IGRpYWcxID0gR0VUX00odmVjX3hvcihi LCBjKSwgdCk7Ci0rICBjb25zdCB1OHgxNiBkaWFnMiA9IEdFVF9NKHZlY194b3IoYSwgZCksIHMp OwotKyAgY29uc3QgdTh4MTYgdGEgPSB2ZWNfYXZnKGEsIGRpYWcxKSwgdGIgPSB2ZWNfYXZnKGIs IGRpYWcyKTsKLSsgIGNvbnN0IHU4eDE2IHRjID0gdmVjX2F2ZyhjLCBkaWFnMiksIHRkID0gdmVj X2F2ZyhkLCBkaWFnMSk7Ci0rICB2ZWNfeHN0KHZlY19tZXJnZWgodGEsIHRiKSwgMCwgb3V0KTsK LSsgIHZlY194c3QodmVjX21lcmdlbCh0YSwgdGIpLCAwLCBvdXQgKyAxNik7Ci0rICB2ZWNfeHN0 KHZlY19tZXJnZWgodGMsIHRkKSwgMCwgb3V0ICsgNjQpOwotKyAgdmVjX3hzdCh2ZWNfbWVyZ2Vs KHRjLCB0ZCksIDAsIG91dCArIDgwKTsKLSt9Ci0rCi0rI2RlZmluZSBVUFNBTVBMRV9GVU5DKEZV TkNfTkFNRSwgRlVOQywgRlVOQzMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LStzdGF0aWMgdm9pZCBGVU5DX05BTUUoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB0b3Bf eSwgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIGJvdHRvbV95LCAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdG9wX3UsICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCogV0VCUF9SRVNUUklDVCB0b3BfdiwgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGN1cl91LCAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgY3VyX3YsICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCB0b3BfZHN0LCAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNU IGJvdHRvbV9kc3QsIGludCBsZW4pIHsgICAgICAgICAgICBcCi0rICBpbnQgdXZfcG9zLCBwb3M7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgdWludDhfdCB1dl9idWZbMTQgKiAzMiArIDE1XSA9IHswfTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVpbnQ4X3QqIGNvbnN0IHJfdSA9ICh1 aW50OF90KikoKCh1aW50cHRyX3QpKHV2X2J1ZiArIDE1KSkgJiB+KHVpbnRwdHJfdCkxNSk7XAot KyAgdWludDhfdCogY29uc3Qgcl92ID0gcl91ICsgMzI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGFzc2VydCh0b3BfeSAhPSBOVUxMKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICBjb25zdCBpbnQgdV9kaWFnID0gKCh0b3BfdVswXSArIGN1 cl91WzBdKSA+PiAxKSArIDE7ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgY29uc3QgaW50 IHZfZGlhZyA9ICgodG9wX3ZbMF0gKyBjdXJfdlswXSkgPj4gMSkgKyAxOyAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIEZVTkModG9wX3lbMF0sICh0b3BfdVswXSArIHVfZGlhZykgPj4gMSwg KHRvcF92WzBdICsgdl9kaWFnKSA+PiAxLCAgICAgICAgXAotKyAgICAgICAgIHRvcF9kc3QpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBpZiAoYm90dG9tX3kgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBGVU5DKGJvdHRvbV95WzBdLCAoY3Vy X3VbMF0gKyB1X2RpYWcpID4+IDEsIChjdXJfdlswXSArIHZfZGlhZykgPj4gMSwgICBcCi0rICAg ICAgICAgICBib3R0b21fZHN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIGZvciAocG9zID0gMSwgdXZfcG9zID0gMDsgcG9zICsgMzIgKyAxIDw9 IGxlbjsgcG9zICs9IDMyLCB1dl9wb3MgKz0gMTYpIHsgICBcCi0rICAgIFVwc2FtcGxlMzJQaXhl bHModG9wX3UgKyB1dl9wb3MsIGN1cl91ICsgdXZfcG9zLCByX3UpOyAgICAgICAgICAgICAgICAg ICAgXAotKyAgICBVcHNhbXBsZTMyUGl4ZWxzKHRvcF92ICsgdXZfcG9zLCBjdXJfdiArIHV2X3Bv cywgcl92KTsgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgRlVOQzMyKHRvcF95ICsgcG9zLCBy X3UsIHJfdiwgdG9wX2RzdCArIHBvcyAqIDQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIGlmIChib3R0b21feSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEZVTkMzMihib3R0b21feSArIHBvcywgcl91 ICsgNjQsIHJfdiArIDY0LCBib3R0b21fZHN0ICsgcG9zICogNCk7ICAgICAgIFwKLSsgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKGxlbiA+IDEp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgY29uc3QgaW50IGxlZnRfb3ZlciA9ICgobGVuICsgMSkgPj4gMSkgLSAo cG9zID4+IDEpOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHVpbnQ4X3QqIGNvbnN0IHRt cF90b3BfZHN0ID0gcl91ICsgNCAqIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB1aW50OF90KiBjb25zdCB0bXBfYm90dG9tX2RzdCA9IHRtcF90b3BfZHN0ICsgNCAq IDMyOyAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdWludDhfdCogY29uc3QgdG1wX3RvcCA9 IHRtcF9ib3R0b21fZHN0ICsgNCAqIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IHVpbnQ4X3QqIGNvbnN0IHRtcF9ib3R0b20gPSAoYm90dG9tX3kgPT0gTlVMTCkgPyBOVUxMIDog dG1wX3RvcCArIDMyOyAgICAgXAotKyAgICB1aW50OF90IHIxWzE3XSwgcjJbMTddOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgYXNzZXJ0 KGxlZnRfb3ZlciA+IDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIG1lbWNweShyMSwgdG9wX3UgKyB1dl9wb3MsIGxlZnRfb3Zlcik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBtZW1jcHkocjIsIGN1 cl91ICsgdXZfcG9zLCBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgbWVtc2V0KHIxICsgbGVmdF9vdmVyLCByMVtsZWZ0X292ZXIgLSAxXSwgMTcg LSBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICBcCi0rICAgIG1lbXNldChyMiArIGxlZnRfb3Zl ciwgcjJbbGVmdF9vdmVyIC0gMV0sIDE3IC0gbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAgXAot KyAgICBVcHNhbXBsZTMyUGl4ZWxzKHIxLCByMiwgcl91KTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgbWVtY3B5KHIxLCB0b3BfdiArIHV2X3Bvcywg bGVmdF9vdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIG1l bWNweShyMiwgY3VyX3YgKyB1dl9wb3MsIGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICBtZW1zZXQocjEgKyBsZWZ0X292ZXIsIHIxW2xlZnRfb3Zl ciAtIDFdLCAxNyAtIGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgIFwKLSsgICAgbWVtc2V0KHIy ICsgbGVmdF9vdmVyLCByMltsZWZ0X292ZXIgLSAxXSwgMTcgLSBsZWZ0X292ZXIpOyAgICAgICAg ICAgICAgICBcCi0rICAgIFVwc2FtcGxlMzJQaXhlbHMocjEsIHIyLCByX3YpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBtZW1jcHkodG1wX3RvcCwg dG9wX3kgKyBwb3MsIGxlbiAtIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgaWYgKGJvdHRvbV95ICE9IE5VTEwpIG1lbWNweSh0bXBfYm90dG9tLCBib3R0b21f eSArIHBvcywgbGVuIC0gcG9zKTsgICAgICBcCi0rICAgIEZVTkMzMih0bXBfdG9wLCByX3UsIHJf diwgdG1wX3RvcF9kc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBpZiAoYm90dG9tX3kgIT0gTlVMTCkgRlVOQzMyKHRtcF9ib3R0b20sIHJfdSArIDY0LCByX3Yg KyA2NCwgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRt cF9ib3R0b21fZHN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBtZW1jcHko dG9wX2RzdCArIHBvcyAqIDQsIHRtcF90b3BfZHN0LCAobGVuIC0gcG9zKSAqIDQpOyAgICAgICAg ICAgICAgICAgIFwKLSsgICAgaWYgKGJvdHRvbV95ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgbWVtY3B5KGJvdHRv bV9kc3QgKyBwb3MgKiA0LCB0bXBfYm90dG9tX2RzdCwgKGxlbiAtIHBvcykgKiA0KTsgICAgICAg ICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r fQotKwotK1VQU0FNUExFX0ZVTkMoVXBzYW1wbGVSZ2JhTGluZVBhaXJfVlNYLCBWUDhZdXZUb1Jn YmEsIFZQOFl1dlRvUmdiYTMyX1ZTWCkKLStVUFNBTVBMRV9GVU5DKFVwc2FtcGxlQmdyYUxpbmVQ YWlyX1ZTWCwgVlA4WXV2VG9CZ3JhLCBWUDhZdXZUb0JncmEzMl9WU1gpCi0rVVBTQU1QTEVfRlVO QyhVcHNhbXBsZUFyZ2JMaW5lUGFpcl9WU1gsIFZQOFl1dlRvQXJnYiwgVlA4WXV2VG9BcmdiMzJf VlNYKQotKwotK2V4dGVybiBXZWJQVXBzYW1wbGVMaW5lUGFpckZ1bmMgV2ViUFVwc2FtcGxlcnNb LyogTU9ERV9MQVNUICovXTsKLSsKLStleHRlcm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNWU1go dm9pZCk7Ci0rCi0rV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFdlYlBJbml0VXBzYW1w bGVyc1ZTWCh2b2lkKSB7Ci0rICBXZWJQVXBzYW1wbGVyc1tNT0RFX1JHQkFdID0gVXBzYW1wbGVS Z2JhTGluZVBhaXJfVlNYOwotKyAgV2ViUFVwc2FtcGxlcnNbTU9ERV9CR1JBXSA9IFVwc2FtcGxl QmdyYUxpbmVQYWlyX1ZTWDsKLSsgIFdlYlBVcHNhbXBsZXJzW01PREVfcmdiQV0gPSBVcHNhbXBs ZVJnYmFMaW5lUGFpcl9WU1g7Ci0rICBXZWJQVXBzYW1wbGVyc1tNT0RFX2JnckFdID0gVXBzYW1w bGVCZ3JhTGluZVBhaXJfVlNYOwotKyNpZiAhZGVmaW5lZChXRUJQX1JFRFVDRV9DU1ApCi0rICBX ZWJQVXBzYW1wbGVyc1tNT0RFX0FSR0JdID0gVXBzYW1wbGVBcmdiTGluZVBhaXJfVlNYOwotKyAg V2ViUFVwc2FtcGxlcnNbTU9ERV9BcmdiXSA9IFVwc2FtcGxlQXJnYkxpbmVQYWlyX1ZTWDsKLSsj ZW5kaWYKLSt9Ci0rCi0rZXh0ZXJuIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzVlNYKHZv aWQpOwotKwotKy8vIFlVVjQ0NCBwb2ludCBjb252ZXJ0ZXJzIHN0YXkgb24gdGhlIEMgcGF0aCBm b3Igbm93LgotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBXZWJQSW5pdFlVVjQ0NENv bnZlcnRlcnNWU1godm9pZCkge30KLSsKLSsjZWxzZSAgLy8gIVdFQlBfVVNFX1ZTWAotKwotK1dF QlBfRFNQX0lOSVRfU1RVQihXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNWU1gpCi0rCi0rV0VCUF9E U1BfSU5JVF9TVFVCKFdlYlBJbml0VXBzYW1wbGVyc1ZTWCkKLSsKLSsjZW5kaWYgIC8vIFdFQlBf VVNFX1ZTWAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXYuYyBiL21lZGlh L2xpYndlYnAvc3JjL2RzcC95dXYuYwotaW5kZXggNjJmMWVjYzE1NjdkLi45YTk1YzVkZTFlMjMg MTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmMKLSsrKyBiL21lZGlhL2xp YndlYnAvc3JjL2RzcC95dXYuYwotQEAgLTgxLDYgKzgxLDcgQEAgZXh0ZXJuIHZvaWQgV2ViUElu aXRTYW1wbGVyc1NTRTIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVyc1NTRTQx KHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNNSVBTMzIodm9pZCk7Ci0gZXh0 ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVyc01JUFNkc3BSMih2b2lkKTsKLStleHRlcm4gdm9pZCBX ZWJQSW5pdFNhbXBsZXJzVlNYKHZvaWQpOwotIAotIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5p dFNhbXBsZXJzKSB7Ci0gICBXZWJQU2FtcGxlcnNbTU9ERV9SR0JdICAgICAgID0gWXV2VG9SZ2JS b3c7Ci1AQCAtMTE3LDYgKzExOCwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRTYW1w bGVycykgewotICAgICAgIFdlYlBJbml0U2FtcGxlcnNNSVBTZHNwUjIoKTsKLSAgICAgfQotICNl bmRpZiAgLy8gV0VCUF9VU0VfTUlQU19EU1BfUjIKLSsjaWYgZGVmaW5lZChXRUJQX0hBVkVfVlNY KQotKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewotKyAgICAgIFdlYlBJbml0U2FtcGxl cnNWU1goKTsKLSsgICAgfQotKyNlbmRpZgotICAgfQotIH0KLSAKLWRpZmYgLS1naXQgYS9tZWRp YS9saWJ3ZWJwL3NyYy9kc3AveXV2LmggYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmgKLWlu ZGV4IDZmMjE4Y2Y3ZTA3Zi4uOTc5ODkxZDMyMzJkIDEwMDY0NAotLS0tIGEvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL3l1di5oCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmgKLUBAIC0x ODIsNiArMTgyLDI3IEBAIHZvaWQgVlA4WXV2VG9SZ2I1NjUzMl9TU0UyKGNvbnN0IHVpbnQ4X3Qq IFdFQlBfUkVTVFJJQ1QgeSwKLSAKLSAjZW5kaWYgICAgLy8gV0VCUF9VU0VfU1NFMgotIAotKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBWU1ggZXh0cmEgZnVuY3Rpb25zIChtb3N0bHkgZm9y IHVwc2FtcGxpbmdfdnN4LmMpCi0rCi0rI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKQotKwotKy8v IFByb2Nlc3MgMzIgcGl4ZWxzIGFuZCBzdG9yZSB0aGUgMzJiLXBlci1waXhlbCByZXN1bHQgaW4g KmRzdC4KLSt2b2lkIFZQOFl1dlRvUmdiYTMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNU UklDVCB1LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNU IGRzdCk7Ci0rdm9pZCBWUDhZdXZUb0JncmEzMl9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNU UklDVCB5LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgdSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIHYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklD VCBkc3QpOwotK3ZvaWQgVlA4WXV2VG9BcmdiMzJfVlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9S RVNUUklDVCB2LAotKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJ Q1QgZHN0KTsKLSsKLSsjZW5kaWYgICAgLy8gV0VCUF9VU0VfVlNYCi0rCi0gLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIC8vIFNTRTQxIGV4dHJhIGZ1bmN0aW9ucyAobW9zdGx5IGZvciB1cHNhbXBs aW5nX3NzZTQxLmMpCi0gCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1dl92 c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZfdnN4LmMKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjFmZGM1YzgwYmExNgotLS0tIC9kZXYvbnVsbAotKysr IGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1dl92c3guYwotQEAgLTAsMCArMSwyMDYgQEAKLSsv LyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKy8vCi0r Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj ZW5zZQotKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJv b3Qgb2YgdGhlIHNvdXJjZQotKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSsvLyBpbiB0aGUgZmlsZSBQQVRFTlRT LiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSsvLyBiZSBmb3VuZCBpbiB0 aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSsvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9mIFlVVi0+ UkdCIGNvbnZlcnNpb24gZnVuY3Rpb25zLgotKwotKyNpbmNsdWRlICJzcmMvZHNwL2RzcC5oIgot KwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKLSsKLSsjaW5jbHVkZSA8YWx0aXZlYy5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC95dXYuaCIKLSsKLSt0 eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgIHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQgdTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgICBzaG9ydCBp MTZ4ODsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGludCAgIHUzMng0OwotKwotKy8vIFBP V0VSOCBoYXMgbm8gIm11bHRpcGx5LWhpZ2ggdW5zaWduZWQgaGFsZndvcmQiLCBzbyBlbXVsYXRl IF9tbV9tdWxoaV9lcHUxNgotKy8vIHZpYSBldmVuL29kZCAxNngxNi0+MzIgcHJvZHVjdHMsID4+ MTYsIHRoZW4gaW50ZXJsZWF2ZSBiYWNrLgotK3N0YXRpYyBXRUJQX0lOTElORSB1MTZ4OCBNdWxI aTE2KHUxNng4IGEsIHUxNng4IGIpIHsKLSsgIGNvbnN0IHUzMng0IHNoID0gdmVjX3NwbGF0cygo dW5zaWduZWQgaW50KTE2KTsKLSsgIGNvbnN0IHUzMng0IGUgPSB2ZWNfc3IodmVjX211bGUoYSwg YiksIHNoKTsKLSsgIGNvbnN0IHUzMng0IG8gPSB2ZWNfc3IodmVjX211bG8oYSwgYiksIHNoKTsK LSsgIHJldHVybiB2ZWNfcGFjayh2ZWNfbWVyZ2VoKGUsIG8pLCB2ZWNfbWVyZ2VsKGUsIG8pKTsK LSt9Ci0rCi0rLy8gMTRiIGZpeGVkLXBvaW50IElUVS1SIEJULjYwMSBZVVYtPlJHQiwgbWF0Y2hp bmcgdGhlIFNTRTIvc2NhbGFyIHBhdGguCi0rLy8gSW5wdXRzIGFyZSBzYW1wbGVzIHByZS1zaGlm dGVkIGludG8gdGhlIGhpZ2ggYnl0ZSAoPDwgOCkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQg Q29udmVydFlVVjQ0NFRvUkdCKHUxNng4IFkwLCB1MTZ4OCBVMCwgdTE2eDggVjAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxNng4KiBjb25zdCBSLCBpMTZ4 OCogY29uc3QgRywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTE2eDgqIGNvbnN0IEIpIHsKLSsgIGNvbnN0IHUxNng4IGsxOTA3NyA9IHZlY19zcGxhdHMoKHVu c2lnbmVkIHNob3J0KTE5MDc3KTsKLSsgIGNvbnN0IHUxNng4IGsyNjE0OSA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIHNob3J0KTI2MTQ5KTsKLSsgIGNvbnN0IHUxNng4IGsxNDIzNCA9IHZlY19zcGxh dHMoKHVuc2lnbmVkIHNob3J0KTE0MjM0KTsKLSsgIGNvbnN0IHUxNng4IGszMzA1MCA9IHZlY19z cGxhdHMoKHVuc2lnbmVkIHNob3J0KTMzMDUwKTsKLSsgIGNvbnN0IHUxNng4IGsxNzY4NSA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTE3Njg1KTsKLSsgIGNvbnN0IHUxNng4IGs2NDE5ICA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTY0MTkpOwotKyAgY29uc3QgdTE2eDggazEzMzIw ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMTMzMjApOwotKyAgY29uc3QgdTE2eDggazg3 MDggID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpODcwOCk7Ci0rICBjb25zdCB1MTZ4OCBz aXggICAgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk2KTsKLSsKLSsgIGNvbnN0IHUxNng4 IFkxID0gTXVsSGkxNihZMCwgazE5MDc3KTsKLSsgIGNvbnN0IHUxNng4IFIyID0gdmVjX2FkZCh2 ZWNfc3ViKFkxLCBrMTQyMzQpLCBNdWxIaTE2KFYwLCBrMjYxNDkpKTsKLSsgIGNvbnN0IHUxNng4 IEc0ID0gdmVjX3N1Yih2ZWNfYWRkKFkxLCBrODcwOCksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmVjX2FkZChNdWxIaTE2KFUwLCBrNjQxOSksIE11bEhpMTYoVjAsIGsxMzMyMCkpKTsK LSsgIC8vIDMzMDUwIG5lZWRzIHVuc2lnbmVkIHNhdHVyYXRpbmcgYXJpdGhtZXRpYzsgQiBjYW4g ZXhjZWVkIDMyNzY3LgotKyAgY29uc3QgdTE2eDggQjIgPSB2ZWNfc3Vicyh2ZWNfYWRkcyhNdWxI aTE2KFUwLCBrMzMwNTApLCBZMSksIGsxNzY4NSk7Ci0rCi0rICAqUiA9IHZlY19zcmEoKGkxNng4 KVIyLCBzaXgpOwotKyAgKkcgPSB2ZWNfc3JhKChpMTZ4OClHNCwgc2l4KTsKLSsgICpCID0gdmVj X3NyKEIyLCBzaXgpOwotK30KLSsKLSsvLyBMb2FkIDggYnl0ZXMgaW50byB0aGUgaGlnaCBieXRl IG9mIDggdTE2IGxhbmVzIChpLmUuIHNhbXBsZSA8PCA4KS4KLSsvLyBVc2UgYW4gOC1ieXRlIGNv cHkgKG5vdCBhIDE2LWJ5dGUgdmVjdG9yIGxvYWQpIHRvIGF2b2lkIHJlYWRpbmcgcGFzdCB0aGUK LSsvLyBlbmQgb2YgdGhlIHNvdXJjZSByb3csIG1hdGNoaW5nIHRoZSBTU0UyIF9tbV9sb2FkbF9l cGk2NCBiZWhhdmlvci4KLStzdGF0aWMgV0VCUF9JTkxJTkUgdTE2eDggTG9hZEhpMTYoY29uc3Qg dWludDhfdCogV0VCUF9SRVNUUklDVCBzcmMpIHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgdW5zaWduZWQgY2hhciB0bXBbMTZdID0gezB9 OwotKyAgbWVtY3B5KHRtcCwgc3JjLCA4KTsKLSsgIHJldHVybiAodTE2eDgpdmVjX21lcmdlaCh6 ZXJvLCB2ZWNfeGwoMCwgdG1wKSk7Ci0rfQotKwotKy8vIExvYWQgNCBVL1YgYnl0ZXMsIHNoaWZ0 IGludG8gdGhlIGhpZ2ggYnl0ZSwgYW5kIHJlcGxpY2F0ZSBlYWNoIHNhbXBsZS4KLStzdGF0aWMg V0VCUF9JTkxJTkUgdTE2eDggTG9hZFVWSGk4KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qg c3JjKSB7Ci0rICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikw KTsKLSsgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XSA9IHswfTsKLSsgIG1lbWNweSh0bXAsIHNyYywg NCk7Ci0rICBjb25zdCB1MTZ4OCB0ID0gKHUxNng4KXZlY19tZXJnZWgoemVybywgdmVjX3hsKDAs IHRtcCkpOwotKyAgcmV0dXJuIHZlY19tZXJnZWgodCwgdCk7Ci0rfQotKwotK3N0YXRpYyBXRUJQ X0lOTElORSB2b2lkIFlVVjQyMFRvUkdCKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dWludDhfdCogV0VCUF9SRVNUUklDVCB2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGkxNng4KiBjb25zdCBSLCBpMTZ4OCogY29uc3QgRywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1MTZ4OCogY29uc3QgQikgewotKyAgQ29udmVydFlVVjQ0NFRv UkdCKExvYWRIaTE2KHkpLCBMb2FkVVZIaTgodSksIExvYWRVVkhpOCh2KSwgUiwgRywgQik7Ci0r fQotKwotKy8vIFBhY2sgZm91ciA4LWxhbmUgY2hhbm5lbHMgaW50byAzMiBpbnRlcmxlYXZlZCBi eXRlcyAoYzAgYzEgYzIgYzMgcGVyIHBpeGVsKS4KLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBQ YWNrQW5kU3RvcmU0KGkxNng4IGMwLCBpMTZ4OCBjMSwgaTE2eDggYzIsIGkxNng4IGMzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklD VCBkc3QpIHsKLSsgIGNvbnN0IHU4eDE2IGMwMiA9IHZlY19wYWNrc3UoYzAsIGMyKTsKLSsgIGNv bnN0IHU4eDE2IGMxMyA9IHZlY19wYWNrc3UoYzEsIGMzKTsKLSsgIGNvbnN0IHU4eDE2IGxvOCA9 IHZlY19tZXJnZWgoYzAyLCBjMTMpOwotKyAgY29uc3QgdTh4MTYgaGk4ID0gdmVjX21lcmdlbChj MDIsIGMxMyk7Ci0rICB2ZWNfeHN0KCh1OHgxNil2ZWNfbWVyZ2VoKCh1MTZ4OClsbzgsICh1MTZ4 OCloaTgpLCAwLCBkc3QpOwotKyAgdmVjX3hzdCgodTh4MTYpdmVjX21lcmdlbCgodTE2eDgpbG84 LCAodTE2eDgpaGk4KSwgMCwgZHN0ICsgMTYpOwotK30KLSsKLStzdGF0aWMgY29uc3QgaTE2eDgg a0FscGhhID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSsKLStz dGF0aWMgdm9pZCBZdXZUb1JnYmFSb3dfVlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qg eSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgdSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgZHN0LCBpbnQgbGVuKSB7Ci0rICBpbnQgbjsKLSsgIGZvciAobiA9IDA7IG4g KyA4IDw9IGxlbjsgbiArPSA4LCBkc3QgKz0gMzIpIHsKLSsgICAgaTE2eDggUiwgRzsgdTE2eDgg QjsKLSsgICAgWVVWNDIwVG9SR0IoeSwgdSwgdiwgJlIsICZHLCAmQik7Ci0rICAgIFBhY2tBbmRT dG9yZTQoUiwgRywgKGkxNng4KUIsIGtBbHBoYSwgZHN0KTsKLSsgICAgeSArPSA4OyB1ICs9IDQ7 IHYgKz0gNDsKLSsgIH0KLSsgIGZvciAoOyBuIDwgbGVuOyArK24pIHsKLSsgICAgVlA4WXV2VG9S Z2JhKHlbMF0sIHVbMF0sIHZbMF0sIGRzdCk7Ci0rICAgIGRzdCArPSA0OyB5ICs9IDE7IHUgKz0g KG4gJiAxKTsgdiArPSAobiAmIDEpOwotKyAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBZdXZUb0Jn cmFSb3dfVlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0LCBp bnQgbGVuKSB7Ci0rICBpbnQgbjsKLSsgIGZvciAobiA9IDA7IG4gKyA4IDw9IGxlbjsgbiArPSA4 LCBkc3QgKz0gMzIpIHsKLSsgICAgaTE2eDggUiwgRzsgdTE2eDggQjsKLSsgICAgWVVWNDIwVG9S R0IoeSwgdSwgdiwgJlIsICZHLCAmQik7Ci0rICAgIFBhY2tBbmRTdG9yZTQoKGkxNng4KUIsIEcs IFIsIGtBbHBoYSwgZHN0KTsKLSsgICAgeSArPSA4OyB1ICs9IDQ7IHYgKz0gNDsKLSsgIH0KLSsg IGZvciAoOyBuIDwgbGVuOyArK24pIHsKLSsgICAgVlA4WXV2VG9CZ3JhKHlbMF0sIHVbMF0sIHZb MF0sIGRzdCk7Ci0rICAgIGRzdCArPSA0OyB5ICs9IDE7IHUgKz0gKG4gJiAxKTsgdiArPSAobiAm IDEpOwotKyAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBZdXZUb0FyZ2JSb3dfVlNYKGNvbnN0IHVp bnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0LCBpbnQgbGVuKSB7Ci0rICBpbnQg bjsKLSsgIGZvciAobiA9IDA7IG4gKyA4IDw9IGxlbjsgbiArPSA4LCBkc3QgKz0gMzIpIHsKLSsg ICAgaTE2eDggUiwgRzsgdTE2eDggQjsKLSsgICAgWVVWNDIwVG9SR0IoeSwgdSwgdiwgJlIsICZH LCAmQik7Ci0rICAgIFBhY2tBbmRTdG9yZTQoa0FscGhhLCBSLCBHLCAoaTE2eDgpQiwgZHN0KTsK LSsgICAgeSArPSA4OyB1ICs9IDQ7IHYgKz0gNDsKLSsgIH0KLSsgIGZvciAoOyBuIDwgbGVuOyAr K24pIHsKLSsgICAgVlA4WXV2VG9BcmdiKHlbMF0sIHVbMF0sIHZbMF0sIGRzdCk7Ci0rICAgIGRz dCArPSA0OyB5ICs9IDE7IHUgKz0gKG4gJiAxKTsgdiArPSAobiAmIDEpOwotKyAgfQotK30KLSsK LSsvLyBDb252ZXJ0IDMyIFlVVjQ0NCBwaXhlbHMgYW5kIHN0b3JlIHRoZSAzMmItcGVyLXBpeGVs IHJlc3VsdC4gVXNlZCBieSB0aGUKLSsvLyBmYW5jeSB1cHNhbXBsZXIgaW4gdXBzYW1wbGluZ192 c3guYy4KLSt2b2lkIFZQOFl1dlRvUmdiYTMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNU UklDVCB1LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNU IGRzdCkgewotKyAgaW50IG47Ci0rICBmb3IgKG4gPSAwOyBuIDwgMzI7IG4gKz0gOCwgZHN0ICs9 IDMyKSB7Ci0rICAgIGkxNng4IFIsIEc7IHUxNng4IEI7Ci0rICAgIENvbnZlcnRZVVY0NDRUb1JH QihMb2FkSGkxNih5ICsgbiksIExvYWRIaTE2KHUgKyBuKSwgTG9hZEhpMTYodiArIG4pLAotKyAg ICAgICAgICAgICAgICAgICAgICAgJlIsICZHLCAmQik7Ci0rICAgIFBhY2tBbmRTdG9yZTQoUiwg RywgKGkxNng4KUIsIGtBbHBoYSwgZHN0KTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBWUDhZdXZUb0Jn cmEzMl9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAotKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKLSsgIGludCBuOwotKyAg Zm9yIChuID0gMDsgbiA8IDMyOyBuICs9IDgsIGRzdCArPSAzMikgewotKyAgICBpMTZ4OCBSLCBH OyB1MTZ4OCBCOwotKyAgICBDb252ZXJ0WVVWNDQ0VG9SR0IoTG9hZEhpMTYoeSArIG4pLCBMb2Fk SGkxNih1ICsgbiksIExvYWRIaTE2KHYgKyBuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICZS LCAmRywgJkIpOwotKyAgICBQYWNrQW5kU3RvcmU0KChpMTZ4OClCLCBHLCBSLCBrQWxwaGEsIGRz dCk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgVlA4WXV2VG9BcmdiMzJfVlNYKGNvbnN0IHVpbnQ4X3Qq IFdFQlBfUkVTVFJJQ1QgeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCogV0VCUF9SRVNUUklDVCB2LAotKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdF QlBfUkVTVFJJQ1QgZHN0KSB7Ci0rICBpbnQgbjsKLSsgIGZvciAobiA9IDA7IG4gPCAzMjsgbiAr PSA4LCBkc3QgKz0gMzIpIHsKLSsgICAgaTE2eDggUiwgRzsgdTE2eDggQjsKLSsgICAgQ29udmVy dFlVVjQ0NFRvUkdCKExvYWRIaTE2KHkgKyBuKSwgTG9hZEhpMTYodSArIG4pLCBMb2FkSGkxNih2 ICsgbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAmUiwgJkcsICZCKTsKLSsgICAgUGFja0Fu ZFN0b3JlNChrQWxwaGEsIFIsIEcsIChpMTZ4OClCLCBkc3QpOwotKyAgfQotK30KLSsKLStleHRl cm4gdm9pZCBXZWJQSW5pdFNhbXBsZXJzVlNYKHZvaWQpOwotKwotK1dFQlBfVFNBTl9JR05PUkVf RlVOQ1RJT04gdm9pZCBXZWJQSW5pdFNhbXBsZXJzVlNYKHZvaWQpIHsKLSsgIFdlYlBTYW1wbGVy c1tNT0RFX1JHQkFdID0gWXV2VG9SZ2JhUm93X1ZTWDsKLSsgIFdlYlBTYW1wbGVyc1tNT0RFX0JH UkFdID0gWXV2VG9CZ3JhUm93X1ZTWDsKLSsgIFdlYlBTYW1wbGVyc1tNT0RFX0FSR0JdID0gWXV2 VG9BcmdiUm93X1ZTWDsKLSt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKLSsKLStXRUJQ X0RTUF9JTklUX1NUVUIoV2ViUEluaXRTYW1wbGVyc1ZTWCkKLSsKLSsjZW5kaWYgIC8vIFdFQlBf VVNFX1ZTWAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL21vei9jcHUuY3BwIGIvbWVk aWEvbGlid2VicC9zcmMvbW96L2NwdS5jcHAKLWluZGV4IGM2NjMzMTcwYzkyMy4uODI5ODZkMmY2 MzFlIDEwMDY0NAotLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvbW96L2NwdS5jcHAKLSsrKyBiL21l ZGlhL2xpYndlYnAvc3JjL21vei9jcHUuY3BwCi1AQCAtMzUsNiArMzUsMTAgQEAgc3RhdGljIGlu dCBNb3pDUFVJbmZvKENQVUZlYXR1cmUgZmVhdHVyZSkKLSAgICAgY2FzZSBrTUlQU2RzcFIyOgot ICAgICBjYXNlIGtNU0E6Ci0gICAgICAgcmV0dXJuIDE7Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQo V0VCUF9VU0VfVlNYKQotKyAgICBjYXNlIGtWU1g6Ci0rICAgICAgcmV0dXJuIDE7Ci0gI2VuZGlm Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgcmV0dXJuIDA7Ci0tLSAKLTIuNTIuMAotCgpkaWZmIC0t Z2l0IGEvMDAwMy1BZGQtUFBDNjRMRS1KSVQtYmFja2VuZC5wYXRjaCBiLzAwMDMtQWRkLVBQQzY0 TEUtSklULWJhY2tlbmQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDhi MzMuLjAwMDAwMDAKLS0tIGEvMDAwMy1BZGQtUFBDNjRMRS1KSVQtYmFja2VuZC5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDM4MjA1ICswLDAgQEAKLUZyb20gYzc5OTI2ZTQxNzY0YzZhYTZhZTU5 NjgxMmIyM2JjMzViNDcwMDI4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRG LTg/cT9UcnVuZz0yMEw9QzM9QUE/PSA8OEB0bGUuaWQuYXU+Ci1EYXRlOiBGcmksIDEyIEp1biAy MDI2IDE2OjAyOjI4ICsxMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMy8zXSBBZGQgUFBDNjRMRSBKSVQg YmFja2VuZAotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1CYXNlZCBvbiB0 aGUgd29yayBkb25lIGJ5IENhbWVyb24gS2Fpc2VyIGFuZCBKdXN0aW4gSGliYml0cwotaHR0cHM6 Ly9naXRodWIuY29tL2NobWVlZWRhbGYvZ2Vja28tZGV2Ci0KLUNvLWF1dGhvcmVkLWJ5OiBDYW1l cm9uIEthaXNlciA8Y2xhc3NpbGxhQGZsb29kZ2FwLmNvbT4KLUNvLWF1dGhvcmVkLWJ5OiBKdXN0 aW4gSGliYml0cyA8Y2htZWVlZGFsZkBnbWFpbC5jb20+Ci1Bc3Npc3RlZC1ieTogTGFuY2UgQWxi ZXJ0c29uIDxsYW5jZUBvc3Vvc2wub3JnPgotQXNzaXN0ZWQtYnk6IFRodXNoYW4gRmVybmFuZG8g PHRodXNoYW5AdGh1c2hhbmZlcm5hbmRvLmNvbT4KLUFzc2lzdGVkLWJ5OiBUaW1vdGh5IFBlYXJz b24gPHRwZWFyc29uQHNvbGlkc2lsaWNvbi5jb20+Ci1Bc3Npc3RlZC1ieTogRGFuIEhvcsOhayA8 ZGFuQGRhbm55LmN6PgotQXNzaXN0ZWQtYnk6IEhp4bq/dSBMw6ogPG1vZG9sb2d5QGdtYWlsLmNv bT4KLUFzc2lzdGVkLWJ5OiBDbGF1ZGUgRmFibGUgNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgot LS0tCi0gY29uZmlnL2NoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlLnB5ICAgICAgICAgIHwgICAg MiArCi0ganMvbW96LmNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz NCArLQotIGpzL3NyYy9idWlsdGluL1Rlc3RpbmdGdW5jdGlvbnMuY3BwICAgICAgICAgICB8ICAg MTggKwotIGpzL3NyYy9pcnJlZ2V4cC9SZWdFeHBBUEkuY3BwICAgICAgICAgICAgICAgICB8ICAg IDUgKy0KLSAuLi4vaXJyZWdleHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJsZXIuY3BwICAgfCAg IDI4ICsKLSAuLi4vdGVzdHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJyb3cuanMgfCAg MTAzICsKLSBqcy9zcmMvaml0LXRlc3QvdGVzdHMvZ2MvZ2NwYXJhbS5qcyAgICAgICAgICAgfCAg ICAzICstCi0gLi4uL3Rlc3RzL2lvbi9tb2QtY29uc3RhbnQtcG93Mi1taW51cy1vbmUuanMgIHwg ICA3OCArCi0gLi4uL3Rlc3RzL2lvbi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZpZGVuZC5qcyAgIHwg ICA3MSArCi0gLi4uL3Rlc3RzL21hdGgtbWluLW1heC1jb3JuZXItY2FzZXMuanMgICAgICAgIHwg ICA1MCArCi0ganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vYXRvbWljaXR5LmpzICAgICAgIHwg ICAgOCArLQotIC4uLi9qaXQtdGVzdC90ZXN0cy93YXNtL2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcyB8 ICAgMTkgKy0KLSAuLi4vaml0LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMg fCAgIDEwICstCi0gLi4uL3Rlc3RzL3dhc20vcHBjNjQtYXJnb24yLXRpZXJpbmcuanMgICAgICAg IHwgIDEyNCArCi0gLi4uL3Rlc3RzL3dhc20vcHBjNjQtY29tcGFyZS1zZWxlY3QtYmVuY2guanMg IHwgICA3MCArCi0gLi4uL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtZXh0bXVsLWFsaWFzLmpz IHwgIDEwNyArCi0gLi4uL3Rlc3RzL3dhc20vcHBjNjQtc2ltZC12ci1jbG9iYmVyLmpzICAgICAg IHwgIDE3OSArCi0ganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHJvZmlsaW5nLmpzICAgICAg IHwgICAgNyArCi0gLi4uL3dhc20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzICAg IHwgICA0OSArCi0gLi4uL3dhc20vcmVncmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0aW9uLmpzICAg IHwgICAzMCArCi0gLi4uL3dhc20vcmVncmVzcy1wcGM2NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpz IHwgICA2NCArCi0gLi4uL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLmpzICAgICAg IHwgICAgNyArCi0gLi4uL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLndhc20gICAg IHwgIEJpbiAwIC0+IDExNDggYnl0ZXMKLSBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1k L2J1ZzE5NDY2MTguanMgfCAgICA3ICstCi0gLi4uL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9p b24tYW5hbHlzaXMuanMgIHwgICAgNyArLQotIGpzL3NyYy9qaXQvQXNzZW1ibGVyLmggICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKwotIGpzL3NyYy9qaXQvQmFzZWxpbmVJQy5jcHAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKwotIGpzL3NyYy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNw cCAgICAgICAgICAgICAgICB8ICAgMTYgKwotIGpzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAg ICAgICAgICAgICAgICAgICB8ICAgIDYgKwotIGpzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5oICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKwotIGpzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVzc0Fu YWx5c2lzLmNwcCAgICAgICB8ICAgIDIgKy0KLSBqcy9zcmMvaml0L0V4ZWN1dGFibGVBbGxvY2F0 b3IuY3BwICAgICAgICAgICAgfCAgIDEwICstCi0ganMvc3JjL2ppdC9GbHVzaElDYWNoZS5jcHAg ICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQotIGpzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaCAg ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KLSBqcy9zcmMvaml0L0dlbmVyYXRlQUJJRnVu Y3Rpb25UeXBlLnB5ICAgICAgICAgfCAgMTAwICsKLSBqcy9zcmMvaml0L0ppdENvbnRleHQuY3Bw ICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKLSBqcy9zcmMvaml0L0ppdEZyYW1lcy5jcHAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKLSBqcy9zcmMvaml0L0ppdEZyYW1lcy5oICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICstCi0ganMvc3JjL2ppdC9MSVIuY3BwICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQotIGpzL3NyYy9qaXQvTElSLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KLSBqcy9zcmMvaml0L0xJUk9wcy55YW1s ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgyICstCi0ganMvc3JjL2ppdC9MYWJlbC5oICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQotIGpzL3NyYy9qaXQvTG93ZXJpbmcu Y3BwICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KLSBqcy9zcmMvaml0L0xvd2VyaW5n LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L01hY3JvQXNz ZW1ibGVyLWlubC5oICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L01hY3JvQXNz ZW1ibGVyLmNwcCAgICAgICAgICAgICAgICAgfCAgIDI1ICstCi0ganMvc3JjL2ppdC9NYWNyb0Fz c2VtYmxlci5oICAgICAgICAgICAgICAgICAgIHwgIDY0NyArLQotIGpzL3NyYy9qaXQvTW92ZUVt aXR0ZXIuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwotIGpzL3NyYy9qaXQvTW92ZVJl c29sdmVyLmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMTYgKwotIGpzL3NyYy9qaXQvUmVnaXN0 ZXJBbGxvY2F0b3IuaCAgICAgICAgICAgICAgICB8ICAgIDcgKy0KLSBqcy9zcmMvaml0L1JlZ2lz dGVycy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L1NhZmVw b2ludHMuY3BwICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKLSBqcy9zcmMvaml0L1NoYXJl ZElDSGVscGVycy1pbmwuaCAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L1NoYXJl ZElDSGVscGVycy5oICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L1NoYXJl ZElDUmVnaXN0ZXJzLmggICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L1NpbXVs YXRvci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L21vei5i dWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsKLSBqcy9zcmMvaml0L3BwYzY0 L0FyY2hpdGVjdHVyZS1wcGM2NC5jcHAgICAgICAgfCAgMjIxICsKLSBqcy9zcmMvaml0L3BwYzY0 L0FyY2hpdGVjdHVyZS1wcGM2NC5oICAgICAgICAgfCAgNTgxICsrCi0ganMvc3JjL2ppdC9wcGM2 NC9Bc3NlbWJsZXItcHBjNjQuY3BwICAgICAgICAgIHwgMzAyOCArKysrKysrCi0ganMvc3JjL2pp dC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCAgICAgICAgICAgIHwgMjExNCArKysrKwotIGpzL3Ny Yy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5jcHAgICAgICB8IDM2NDcgKysrKysrKysK LSBqcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaCAgICAgICAgfCAgMTAxICsK LSBqcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oICAgICAgICAgICAgICAgICAgfCAgMTM1ICsK LSBqcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmNwcCAgICAgICAgICAgfCAxMzI0ICsr KwotIGpzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCAgICAgICAgICAgICB8ICAxMDUg KwotIGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmggICB8IDYxNDIg KysrKysrKysrKysrKysKLSBqcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNw cCAgICAgfCAzNDY3ICsrKysrKysrCi0ganMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1w cGM2NC5oICAgICAgIHwgMjAzMSArKysrKwotIGpzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXIt cHBjNjQuY3BwICAgICAgICB8ICAzNTcgKwotIGpzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXIt cHBjNjQuaCAgICAgICAgICB8ICAgNjQgKwotIGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxw ZXJzLXBwYzY0LWlubC5oICB8ICAgODMgKwotIGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxw ZXJzLXBwYzY0LmggICAgICB8ICAgOTcgKwotIGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNSZWdp c3RlcnMtcHBjNjQuaCAgICB8ICAgNDYgKwotIGpzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBw YzY0LmNwcCAgICAgICAgICB8IDcyOTYgKysrKysrKysrKysrKysrKysKLSBqcy9zcmMvaml0L3Bw YzY0L1NpbXVsYXRvci1wcGM2NC5oICAgICAgICAgICAgfCAgNTU2ICsrCi0ganMvc3JjL2ppdC9w cGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcCAgICAgICAgIHwgIDY0OCArKwotIGpzL3NyYy9qaXQv c2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaCAgICAgICAgICB8ICAgIDUgKy0KLSAuLi4vQXRvbWlj T3BlcmF0aW9ucy1mZWVsaW5nLWx1Y2t5LWdjYy5oICAgICAgfCAgICAzICstCi0ganMvc3JjL2pp dC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3BwICAgIHwgICAgNiArLQotIGpzL3NyYy9q aXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaCAgICAgICB8ICAgIDIgKy0KLSBqcy9zcmMv anMtY29uZmlnLm1vemJ1aWxkICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKLSBqcy9zcmMv anNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcCAgICAgICAgfCAgICAzICsKLSBqcy9zcmMv anNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxscy5jcHAgICAgfCAgIDEwICstCi0ganMvc3Jj L2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNwcCAgICAgICAgICAgICAgIHwgICAyMCArCi0ganMvc3Jj L3NoZWxsL2pzLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArCi0ganMvc3Jj L3NoZWxsL2pzc2hlbGwuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQotIGpzL3Ny Yy90ZXN0cy9zaGVsbC9vcy5qcyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKy0KLSBqcy9z cmMvdXRpbC9Qb2lzb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9z cmMvd2FzbS9XYXNtQW55UmVmLmggICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCi0ganMv c3JjL3dhc20vV2FzbUJDRGVmcy5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCi0ganMv c3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcCAgICAgICAgICAgICAgICAgIHwgICA0NyArLQotIGpz L3NyYy93YXNtL1dhc21CQ1JlZ0RlZnMuaCAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KLSBq cy9zcmMvd2FzbS9XYXNtQmFzZWxpbmVDb21waWxlLmNwcCAgICAgICAgICAgfCAgMTQ4ICstCi0g anMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaCAgICAgICAgICAgIHwgICAgMyArLQot IGpzL3NyYy93YXNtL1dhc21Db2RlZ2VuVHlwZXMuY3BwICAgICAgICAgICAgICB8ICAgMTEgKy0K LSBqcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAgICAgICAgICAgICAgICAgICAgfCAgICA2ICst Ci0ganMvc3JjL3dhc20vV2FzbUZyYW1lSXRlci5jcHAgICAgICAgICAgICAgICAgIHwgIDExOCAr Ci0ganMvc3JjL3dhc20vV2FzbUdDLmNwcCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCAr Ci0ganMvc3JjL3dhc20vV2FzbUdlbmVyYXRvci5jcHAgICAgICAgICAgICAgICAgIHwgICAxOCAr LQotIGpzL3NyYy93YXNtL1dhc21Jb25Db21waWxlLmNwcCAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KLSBqcy9zcmMvd2FzbS9XYXNtTWVtb3J5LmNwcCAgICAgICAgICAgICAgICAgICAgfCAgICA0 ICstCi0ganMvc3JjL3dhc20vV2FzbVNpZ25hbEhhbmRsZXJzLmNwcCAgICAgICAgICAgIHwgICAy MCArLQotIGpzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwICAgICAgICAgICAgICAgICAgICB8ICAg MzEgKy0KLSBqcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3BwICAgICAgICAgICAgICAgICAgICAgfCAg IDQzICstCi0ganMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24uY3BwICAgICAgICAgICAgIHwg IDE2MyArCi0ganMvc3JjL3dhc20vV2FzbVZhbHVlLmNwcCAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiArLQotIG1mYnQvQXNzZXJ0aW9ucy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDUgKwotIDEwOCBmaWxlcyBjaGFuZ2VkLCAzNDQ0MiBpbnNlcnRpb25zKCspLCA0MzggZGVs ZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy9iYXNl bGluZS9wcGM2NC1icmFuY2g4LTE2LW5hcnJvdy5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9z cmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1jb25zdGFudC1wb3cyLW1pbnVzLW9uZS5qcwotIGNy ZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1wb3cyLW5lZ2F0 aXZlLWRpdmlkZW5kLmpzCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0 cy9tYXRoLW1pbi1tYXgtY29ybmVyLWNhc2VzLmpzCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWFyZ29uMi10aWVyaW5nLmpzCi0gY3JlYXRlIG1v ZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0 LWJlbmNoLmpzCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3BwYzY0LWV4dG11bC1hbGlhcy5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9wcGM2NC1zaW1kLXZyLWNsb2JiZXIuanMKLSBjcmVhdGUgbW9kZSAxMDA2 NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUt Y3R6LmpzCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Jl Z3Jlc3MtcHBjNjQtc2VsZWN0LWNvbmRpdGlvbi5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9z cmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LXRyYXAtZXhpdC1zaW1kLXNhdmUu anMKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVz cy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0 NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzL2J1Zy1wcGM2NC1zaW1kLXJlZHVj ZS1hbmQtYnJhbmNoLndhc20KLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9B cmNoaXRlY3R1cmUtcHBjNjQuY3BwCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBj NjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9w cGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQv cHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9w cGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMv aml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9z cmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQv cHBjNjQvTG93ZXJpbmctcHBjNjQuY3BwCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQv cHBjNjQvTG93ZXJpbmctcHBjNjQuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3Bw YzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3Ny Yy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwCi0gY3JlYXRlIG1vZGUgMTAwNjQ0 IGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuaAotIGNyZWF0ZSBtb2RlIDEw MDY0NCBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2Rl IDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmgKLSBjcmVhdGUgbW9k ZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQtaW5sLmgKLSBj cmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQu aAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJz LXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9TaW11bGF0b3It cHBjNjQuY3BwCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9y LXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5l LXBwYzY0LmNwcAotCi1kaWZmIC0tZ2l0IGEvY29uZmlnL2NoZWNrX21hY3JvYXNzZW1ibGVyX3N0 eWxlLnB5IGIvY29uZmlnL2NoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlLnB5Ci1pbmRleCBhYTFh NTQxMDRlMjYuLmJhNzNkZTM4ODA5OSAxMDA2NDQKLS0tLSBhL2NvbmZpZy9jaGVja19tYWNyb2Fz c2VtYmxlcl9zdHlsZS5weQotKysrIGIvY29uZmlnL2NoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxl LnB5Ci1AQCAtMzMsNiArMzMsNyBAQCBhbGxfYXJjaGl0ZWN0dXJlX25hbWVzID0gc2V0KFsKLSAg ICAgImFybTY0IiwKLSAgICAgImxvb25nNjQiLAotICAgICAicmlzY3Y2NCIsCi0rICAgICJwcGM2 NCIsCi0gICAgICJ3YXNtMzIiLAotIF0pCi0gYWxsX3NoYXJlZF9hcmNoaXRlY3R1cmVfbmFtZXMg PSBzZXQoWwotQEAgLTQxLDYgKzQyLDcgQEAgYWxsX3NoYXJlZF9hcmNoaXRlY3R1cmVfbmFtZXMg PSBzZXQoWwotICAgICAiYXJtNjQiLAotICAgICAibG9vbmc2NCIsCi0gICAgICJyaXNjdjY0IiwK LSsgICAgInBwYzY0IiwKLSAgICAgIndhc20zMiIsCi0gXSkKLSAKLWRpZmYgLS1naXQgYS9qcy9t b3ouY29uZmlndXJlIGIvanMvbW96LmNvbmZpZ3VyZQotaW5kZXggMjZjYzg1NjIyNjU0Li41MzEw ZGQwODUwNmYgMTAwNjQ0Ci0tLS0gYS9qcy9tb3ouY29uZmlndXJlCi0rKysgYi9qcy9tb3ouY29u ZmlndXJlCi1AQCAtMjY0LDYgKzI2NCw3IEBAIGRlZiBqaXRfZGVmYXVsdCh0YXJnZXQsIGVuYWJs ZV9wb3J0YWJsZV9iYXNlbGluZV9pbnRlcnApOgotICAgICAgICAgImFhcmNoNjQiLAotICAgICAg ICAgIm1pcHM2NCIsCi0gICAgICAgICAibG9vbmdhcmNoNjQiLAotKyAgICAgICAgInBwYzY0IiwK LSAgICAgICAgICJyaXNjdjY0IiwKLSAgICAgKToKLSAgICAgICAgIHJldHVybiBUcnVlCi1AQCAt Mjg1LDcgKzI4Niw3IEBAIGRlZiByZXBvcnRfZGVwcmVjYXRlZCh2YWx1ZSk6Ci0gIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gb3B0aW9u KAotICAgICAiLS1lbmFibGUtc2ltdWxhdG9yIiwKLS0gICAgY2hvaWNlcz0oImFybSIsICJhcm02 NCIsICJtaXBzNjQiLCAibG9vbmc2NCIsICJyaXNjdjY0IiksCi0rICAgIGNob2ljZXM9KCJhcm0i LCAiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAicmlzY3Y2NCIsICJwcGM2NCIpLAotICAg ICBuYXJncz0xLAotICAgICBoZWxwPSJFbmFibGUgYSBKSVQgY29kZSBzaW11bGF0b3IgZm9yIHRo ZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlIiwKLSApCi1AQCAtMzAyLDcgKzMwMyw3IEBAIGRlZiBz aW11bGF0b3Ioaml0X2VuYWJsZWQsIHNpbXVsYXRvcl9lbmFibGVkLCB0YXJnZXQpOgotICAgICAg ICAgaWYgdGFyZ2V0LmNwdSAhPSAieDg2IjoKLSAgICAgICAgICAgICBkaWUoIlRoZSAlcyBzaW11 bGF0b3Igb25seSB3b3JrcyBvbiB4ODYuIiAlIHNpbV9jcHUpCi0gCi0tICAgIGlmIHNpbV9jcHUg aW4gKCJhcm02NCIsICJtaXBzNjQiLCAibG9vbmc2NCIsICJyaXNjdjY0Iik6Ci0rICAgIGlmIHNp bV9jcHUgaW4gKCJhcm02NCIsICJtaXBzNjQiLCAibG9vbmc2NCIsICJyaXNjdjY0IiwgInBwYzY0 Iik6Ci0gICAgICAgICBpZiB0YXJnZXQuY3B1ICE9ICJ4ODZfNjQiIGFuZCB0YXJnZXQuY3B1ICE9 ICJhYXJjaDY0IjoKLSAgICAgICAgICAgICBkaWUoIlRoZSAlcyBzaW11bGF0b3Igb25seSB3b3Jr cyBvbiB4ODYtNjQgb3IgYXJtNjQuIiAlIHNpbV9jcHUpCi0gCi1AQCAtMzE1LDEyICszMTYsMTQg QEAgc2V0X2NvbmZpZygiSlNfU0lNVUxBVE9SX0FSTTY0Iiwgc2ltdWxhdG9yLmFybTY0KQotIHNl dF9jb25maWcoIkpTX1NJTVVMQVRPUl9NSVBTNjQiLCBzaW11bGF0b3IubWlwczY0KQotIHNldF9j b25maWcoIkpTX1NJTVVMQVRPUl9MT09ORzY0Iiwgc2ltdWxhdG9yLmxvb25nNjQpCi0gc2V0X2Nv bmZpZygiSlNfU0lNVUxBVE9SX1JJU0NWNjQiLCBzaW11bGF0b3IucmlzY3Y2NCkKLStzZXRfY29u ZmlnKCJKU19TSU1VTEFUT1JfUFBDNjQiLCBzaW11bGF0b3IucHBjNjQpCi0gc2V0X2RlZmluZSgi SlNfU0lNVUxBVE9SIiwgZGVwZW5kc19pZihzaW11bGF0b3IpKGxhbWJkYSB4OiBUcnVlKSkKLSBz ZXRfZGVmaW5lKCJKU19TSU1VTEFUT1JfQVJNIiwgc2ltdWxhdG9yLmFybSkKLSBzZXRfZGVmaW5l KCJKU19TSU1VTEFUT1JfQVJNNjQiLCBzaW11bGF0b3IuYXJtNjQpCi0gc2V0X2RlZmluZSgiSlNf U0lNVUxBVE9SX01JUFM2NCIsIHNpbXVsYXRvci5taXBzNjQpCi0gc2V0X2RlZmluZSgiSlNfU0lN VUxBVE9SX0xPT05HNjQiLCBzaW11bGF0b3IubG9vbmc2NCkKLSBzZXRfZGVmaW5lKCJKU19TSU1V TEFUT1JfUklTQ1Y2NCIsIHNpbXVsYXRvci5yaXNjdjY0KQotK3NldF9kZWZpbmUoIkpTX1NJTVVM QVRPUl9QUEM2NCIsIHNpbXVsYXRvci5wcGM2NCkKLSAKLSAKLSBAZGVwZW5kcygiLS1lbmFibGUt aml0Iiwgc2ltdWxhdG9yLCB0YXJnZXQpCi1AQCAtMzM3LDYgKzM0MCw4IEBAIGRlZiBqaXRfY29k ZWdlbihqaXRfZW5hYmxlZCwgc2ltdWxhdG9yLCB0YXJnZXQpOgotICAgICAgICAgcmV0dXJuIG5h bWVzcGFjZSh4NjQ9VHJ1ZSkKLSAgICAgZWxpZiB0YXJnZXQuY3B1ID09ICJsb29uZ2FyY2g2NCI6 Ci0gICAgICAgICByZXR1cm4gbmFtZXNwYWNlKGxvb25nNjQ9VHJ1ZSkKLSsgICAgZWxpZiB0YXJn ZXQuY3B1ID09ICJwcGM2NCI6Ci0rICAgICAgICByZXR1cm4gbmFtZXNwYWNlKHBwYzY0PVRydWUp Ci0gICAgIGVsaWYgdGFyZ2V0LmNwdSA9PSAicmlzY3Y2NCI6Ci0gICAgICAgICByZXR1cm4gbmFt ZXNwYWNlKHJpc2N2NjQ9VHJ1ZSkKLSAKLUBAIC0zNDgsNiArMzUzLDcgQEAgc2V0X2NvbmZpZygi SlNfQ09ERUdFTl9BUk0iLCBqaXRfY29kZWdlbi5hcm0pCi0gc2V0X2NvbmZpZygiSlNfQ09ERUdF Tl9BUk02NCIsIGppdF9jb2RlZ2VuLmFybTY0KQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fTUlQ UzY0Iiwgaml0X2NvZGVnZW4ubWlwczY0KQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fTE9PTkc2 NCIsIGppdF9jb2RlZ2VuLmxvb25nNjQpCi0rc2V0X2NvbmZpZygiSlNfQ09ERUdFTl9QUEM2NCIs IGppdF9jb2RlZ2VuLnBwYzY0KQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fUklTQ1Y2NCIsIGpp dF9jb2RlZ2VuLnJpc2N2NjQpCi0gc2V0X2NvbmZpZygiSlNfQ09ERUdFTl9YODYiLCBqaXRfY29k ZWdlbi54ODYpCi0gc2V0X2NvbmZpZygiSlNfQ09ERUdFTl9YNjQiLCBqaXRfY29kZWdlbi54NjQp Ci1AQCAtMzU4LDYgKzM2NCw3IEBAIHNldF9kZWZpbmUoIkpTX0NPREVHRU5fQVJNIiwgaml0X2Nv ZGVnZW4uYXJtKQotIHNldF9kZWZpbmUoIkpTX0NPREVHRU5fQVJNNjQiLCBqaXRfY29kZWdlbi5h cm02NCkKLSBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX01JUFM2NCIsIGppdF9jb2RlZ2VuLm1pcHM2 NCkKLSBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX0xPT05HNjQiLCBqaXRfY29kZWdlbi5sb29uZzY0 KQotK3NldF9kZWZpbmUoIkpTX0NPREVHRU5fUFBDNjQiLCBqaXRfY29kZWdlbi5wcGM2NCkKLSBz ZXRfZGVmaW5lKCJKU19DT0RFR0VOX1JJU0NWNjQiLCBqaXRfY29kZWdlbi5yaXNjdjY0KQotIHNl dF9kZWZpbmUoIkpTX0NPREVHRU5fWDg2Iiwgaml0X2NvZGVnZW4ueDg2KQotIHNldF9kZWZpbmUo IkpTX0NPREVHRU5fWDY0Iiwgaml0X2NvZGVnZW4ueDY0KQotQEAgLTcyOCw3ICs3MzUsNyBAQCBk ZWYgZGVmYXVsdF93YXNtX2pzcGkoCi0gICAgICAgICByZXR1cm4KLSAKLSAgICAgaWYgc2ltdWxh dG9yOgotLSAgICAgICAgcmV0dXJuIHNpbXVsYXRvclswXSBpbiAoImFybTY0IiwgImFybSIsICJs b29uZzY0IiwgIm1pcHM2NCIsICJyaXNjdjY0IikKLSsgICAgICAgIHJldHVybiBzaW11bGF0b3Jb MF0gaW4gKCJhcm02NCIsICJhcm0iLCAibG9vbmc2NCIsICJtaXBzNjQiLCAicHBjNjQiLCAicmlz Y3Y2NCIpCi0gCi0gICAgIGlmIHRhcmdldC5jcHUgaW4gKAotICAgICAgICAgIng4Nl82NCIsCi1A QCAtNzM3LDYgKzc0NCw3IEBAIGRlZiBkZWZhdWx0X3dhc21fanNwaSgKLSAgICAgICAgICJhcm0i LAotICAgICAgICAgImxvb25nYXJjaDY0IiwKLSAgICAgICAgICJtaXBzNjQiLAotKyAgICAgICAg InBwYzY0IiwKLSAgICAgICAgICJyaXNjdjY0IiwKLSAgICAgKToKLSAgICAgICAgIHJldHVybiBU cnVlCi1AQCAtNzY4LDEwICs3NzYsMTEgQEAgZGVmIHdhc21fanNwaSh2YWx1ZSwgaml0X2VuYWJs ZWQsIHNpbXVsYXRvciwgbm9fZXhwZXJpbWVudGFsLCB0YXJnZXQpOgotICAgICAgICAgImFybSIs Ci0gICAgICAgICAibG9vbmc2NCIsCi0gICAgICAgICAibWlwczY0IiwKLSsgICAgICAgICJwcGM2 NCIsCi0gICAgICAgICAicmlzY3Y2NCIsCi0gICAgICk6Ci0gICAgICAgICBkaWUoCi0tICAgICAg ICAgICAgIi0tZW5hYmxlLXdhc20tanNwaSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYXJtNjQvYXJt L2xvb25nNjQvbWlwczY0L3Jpc2N2NjQgc2ltdWxhdG9ycyIKLSsgICAgICAgICAgICAiLS1lbmFi bGUtd2FzbS1qc3BpIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBhcm02NC9hcm0vbG9vbmc2NC9taXBz NjQvcHBjNjQvcmlzY3Y2NCBzaW11bGF0b3JzIgotICAgICAgICAgKQotIAotICAgICBpZiB0YXJn ZXQuY3B1IGluICgKLUBAIC03ODEsMTIgKzc5MCwxMyBAQCBkZWYgd2FzbV9qc3BpKHZhbHVlLCBq aXRfZW5hYmxlZCwgc2ltdWxhdG9yLCBub19leHBlcmltZW50YWwsIHRhcmdldCk6Ci0gICAgICAg ICAiYXJtIiwKLSAgICAgICAgICJsb29uZ2FyY2g2NCIsCi0gICAgICAgICAibWlwczY0IiwKLSsg ICAgICAgICJwcGM2NCIsCi0gICAgICAgICAicmlzY3Y2NCIsCi0gICAgICk6Ci0gICAgICAgICBy ZXR1cm4gVHJ1ZQotIAotICAgICBkaWUoCi0tICAgICAgICAiLS1lbmFibGUtd2FzbS1qc3BpIG9u bHkgcG9zc2libGUgd2hlbiB0YXJnZXRpbmcgdGhlIHg4Nl82NC94ODYvYXJtNjQvYXJtL2xvb25n YXJjaDY0L21pcHM2NC9yaXNjdjY0IGppdHMiCi0rICAgICAgICAiLS1lbmFibGUtd2FzbS1qc3Bp IG9ubHkgcG9zc2libGUgd2hlbiB0YXJnZXRpbmcgdGhlIHg4Nl82NC94ODYvYXJtNjQvYXJtL2xv b25nYXJjaDY0L21pcHM2NC9wcGM2NC9yaXNjdjY0IGppdHMiCi0gICAgICkKLSAKLSAKLUBAIC04 MjEsMTAgKzgzMSwxMCBAQCBkZWYgZGVmYXVsdF93YXNtX3NpbWQoaml0X2VuYWJsZWQsIHNpbXVs YXRvciwgdGFyZ2V0KToKLSAgICAgaWYgbm90IGppdF9lbmFibGVkOgotICAgICAgICAgcmV0dXJu Ci0gCi0tICAgIGlmIHNpbXVsYXRvciBhbmQgKHNpbXVsYXRvclswXSAhPSAiYXJtNjQiKToKLSsg ICAgaWYgc2ltdWxhdG9yIGFuZCBzaW11bGF0b3JbMF0gbm90IGluICgiYXJtNjQiLCAicHBjNjQi KToKLSAgICAgICAgIHJldHVybgotIAotLSAgICBpZiB0YXJnZXQuY3B1IGluICgieDg2XzY0Iiwg Ing4NiIsICJhYXJjaDY0Iik6Ci0rICAgIGlmIHRhcmdldC5jcHUgaW4gKCJ4ODZfNjQiLCAieDg2 IiwgImFhcmNoNjQiLCAicHBjNjQiKToKLSAgICAgICAgIHJldHVybiBUcnVlCi0gCi0gCi1AQCAt ODQ5LDEzICs4NTksMTUgQEAgZGVmIHdhc21fc2ltZCh2YWx1ZSwgaml0X2VuYWJsZWQsIHNpbXVs YXRvciwgdGFyZ2V0LCBub19leHBlcmltZW50YWwpOgotICAgICBpZiBub3Qgaml0X2VuYWJsZWQ6 Ci0gICAgICAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2ltZCByZXF1aXJlcyAtLWVuYWJsZS1qaXQi KQotIAotLSAgICBpZiBzaW11bGF0b3IgYW5kIChzaW11bGF0b3JbMF0gIT0gImFybTY0Iik6Ci0t ICAgICAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2ltZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzaW11 bGF0b3JzLCBleGNlcHQgYXJtNjQiKQotKyAgICBpZiBzaW11bGF0b3IgYW5kIHNpbXVsYXRvclsw XSBub3QgaW4gKCJhcm02NCIsICJwcGM2NCIpOgotKyAgICAgICAgZGllKAotKyAgICAgICAgICAg ICItLWVuYWJsZS13YXNtLXNpbWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2ltdWxhdG9ycywgZXhj ZXB0IGFybTY0IGFuZCBwcGM2NCIKLSsgICAgICAgICkKLSAKLS0gICAgaWYgdGFyZ2V0LmNwdSBp biAoIng4Nl82NCIsICJ4ODYiLCAiYWFyY2g2NCIpOgotKyAgICBpZiB0YXJnZXQuY3B1IGluICgi eDg2XzY0IiwgIng4NiIsICJhYXJjaDY0IiwgInBwYzY0Iik6Ci0gICAgICAgICByZXR1cm4gVHJ1 ZQotIAotLSAgICBkaWUoIi0tZW5hYmxlLXdhc20tc2ltZCBvbmx5IHBvc3NpYmxlIHdoZW4gdGFy Z2V0aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0IGppdHMiKQotKyAgICBkaWUoIi0tZW5hYmxlLXdh c20tc2ltZCBvbmx5IHBvc3NpYmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0 L3BwYzY0IGppdHMiKQotIAotIAotIHNldF9jb25maWcoIkVOQUJMRV9XQVNNX1NJTUQiLCB3YXNt X3NpbWQpCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2J1aWx0aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAg Yi9qcy9zcmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rpb25zLmNwcAotaW5kZXggYmU4YjNkMGUxNmI2 Li4yMjkxZDU4ZGMwYTEgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rp b25zLmNwcAotKysrIGIvanMvc3JjL2J1aWx0aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAKLUBAIC00 NDcsNiArNDQ3LDE1IEBAIHN0YXRpYyBib29sIEdldEJ1aWxkQ29uZmlndXJhdGlvbihKU0NvbnRl eHQqIGN4LCB1bnNpZ25lZCBhcmdjLCBWYWx1ZSogdnApIHsKLSAgICAgcmV0dXJuIGZhbHNlOwot ICAgfQotIAotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICB2YWx1ZSA9IEJvb2xlYW5WYWx1 ZSh0cnVlKTsKLSsjZWxzZQotKyAgdmFsdWUgPSBCb29sZWFuVmFsdWUoZmFsc2UpOwotKyNlbmRp ZgotKyAgaWYgKCFKU19TZXRQcm9wZXJ0eShjeCwgaW5mbywgInBwYzY0IiwgdmFsdWUpKSB7Ci0r ICAgIHJldHVybiBmYWxzZTsKLSsgIH0KLSsKLSAjaWZkZWYgSlNfQ09ERUdFTl9MT09ORzY0Ci0g ICB2YWx1ZSA9IEJvb2xlYW5WYWx1ZSh0cnVlKTsKLSAjZWxzZQotQEAgLTQ4Myw2ICs0OTIsMTUg QEAgc3RhdGljIGJvb2wgR2V0QnVpbGRDb25maWd1cmF0aW9uKEpTQ29udGV4dCogY3gsIHVuc2ln bmVkIGFyZ2MsIFZhbHVlKiB2cCkgewotICAgICByZXR1cm4gZmFsc2U7Ci0gICB9Ci0gCi0rI2lm ZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAotKyAgdmFsdWUgPSBCb29sZWFuVmFsdWUodHJ1ZSk7Ci0r I2Vsc2UKLSsgIHZhbHVlID0gQm9vbGVhblZhbHVlKGZhbHNlKTsKLSsjZW5kaWYKLSsgIGlmICgh SlNfU2V0UHJvcGVydHkoY3gsIGluZm8sICJwcGM2NC1zaW11bGF0b3IiLCB2YWx1ZSkpIHsKLSsg ICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKwotICNpZmRlZiBNT1pfQVNBTgotICAgdmFsdWUgPSBC b29sZWFuVmFsdWUodHJ1ZSk7Ci0gI2Vsc2UKLWRpZmYgLS1naXQgYS9qcy9zcmMvaXJyZWdleHAv UmVnRXhwQVBJLmNwcCBiL2pzL3NyYy9pcnJlZ2V4cC9SZWdFeHBBUEkuY3BwCi1pbmRleCAzMTBj ZDg1YzZhMjAuLjM3NzUwOTU3NGYyOCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9pcnJlZ2V4cC9SZWdF eHBBUEkuY3BwCi0rKysgYi9qcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcAotQEAgLTQ5NSw3 ICs0OTUsMTAgQEAgY2xhc3MgUmVnRXhwRGVwdGhDaGVjayBmaW5hbCA6IHB1YmxpYyB2ODo6aW50 ZXJuYWw6OnJlZ2V4cDo6VmlzaXRvciB7Ci0gCi0gICAvLyBUaGlzIHNpemUgaXMgcGlja2VkIHRv IGJlIGNvbWZvcnRhYmx5IGxhcmdlciB0aGFuIGFueQotICAgLy8gUmVnRXhwKjo6VG9Ob2RlIHN0 YWNrIGZyYW1lLgotLSNpZiAhZGVmaW5lZChERUJVRykgJiYgIWRlZmluZWQoTU9aX0NPREVfQ09W RVJBR0UpCi0rI2lmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKLSsgIC8vIFBQQzY0IEVMRnYyIGhh cyBsYXJnZXIgbWluaW11bSBzdGFjayBmcmFtZXMuCi0rICBzdGF0aWMgY29uc3Qgc2l6ZV90IEZS QU1FX1BBRERJTkcgPSAyNTYgKiA0OwotKyNlbGlmICFkZWZpbmVkKERFQlVHKSAmJiAhZGVmaW5l ZChNT1pfQ09ERV9DT1ZFUkFHRSkKLSAgIHN0YXRpYyBjb25zdCBzaXplX3QgRlJBTUVfUEFERElO RyA9IDI1NjsKLSAjZWxzZQotICAgLy8gVXNlIGEgc2xpZ2h0bHkgbGFyZ2VyIHBhZGRpbmcgZm9y IGRlYnVnIGFuZCBjb2RlIGNvdmVyYWdlIGJ1aWxkcy4KLWRpZmYgLS1naXQgYS9qcy9zcmMvaXJy ZWdleHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJsZXIuY3BwIGIvanMvc3JjL2lycmVnZXhwL1Jl Z0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcAotaW5kZXggYWUzNTEyMjY3OTdiLi5hMzk2YWVi M2M3MzEgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaXJyZWdleHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3Nl bWJsZXIuY3BwCi0rKysgYi9qcy9zcmMvaXJyZWdleHAvUmVnRXhwTmF0aXZlTWFjcm9Bc3NlbWJs ZXIuY3BwCi1AQCAtOTkwLDggKzk5MCwyMSBAQCB2b2lkIFNNUmVnRXhwTWFjcm9Bc3NlbWJsZXI6 OkNoZWNrQmFja3RyYWNrU3RhY2tMaW1pdCgpIHsKLSAgICAgICBBYnNvbHV0ZUFkZHJlc3MoaXNv bGF0ZSgpLT5yZWdleHBfc3RhY2soKS0+bGltaXRfYWRkcmVzc19hZGRyZXNzKCkpLAotICAgICAg IGJhY2t0cmFja19zdGFja19wb2ludGVyXywgJm5vX3N0YWNrX292ZXJmbG93KTsKLSAKLSsjaWZk ZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAgLy8gTFIgb24gUG93ZXJQQyBpc24ndCBhIEdQUiwgc28g d2UgaGF2ZSB0byBleHBsaWNpdGx5IHNhdmUgaXQgYmVmb3JlCi0rICAvLyBjYWxsaW5nIG9yIHRo ZSByZWdleHAncyByZXR1cm4gYWRkcmVzcyB3aWxsIGJlIGNsb2JiZXJlZC4KLSsgIG1hc21fLnhz X21mbHIodGVtcDFfKTsKLSsgIG1hc21fLmFzX3N0ZHUodGVtcDFfLCBtYXNtXy5nZXRTdGFja1Bv aW50ZXIoKSwgLTgpOwotKyNlbmRpZgotKwotICAgbWFzbV8uY2FsbCgmc3RhY2tfb3ZlcmZsb3df bGFiZWxfKTsKLSAKLSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAgbWFzbV8uYXNfbGQodGVt cDFfLCBtYXNtXy5nZXRTdGFja1BvaW50ZXIoKSwgMCk7Ci0rICBtYXNtXy54c19tdGxyKHRlbXAx Xyk7Ci0rICBtYXNtXy5hc19hZGRpKG1hc21fLmdldFN0YWNrUG9pbnRlcigpLCBtYXNtXy5nZXRT dGFja1BvaW50ZXIoKSwgOCk7Ci0rI2VuZGlmCi0rCi0gICAvLyBFeGl0IHdpdGggYW4gZXhjZXB0 aW9uIGlmIHRoZSBjYWxsIGZhaWxlZAotICAgbWFzbV8uYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6 WmVybywgdGVtcDBfLCB0ZW1wMF8sCi0gICAgICAgICAgICAgICAgICAgICAgJmV4aXRfd2l0aF9l eGNlcHRpb25fbGFiZWxfKTsKLUBAIC0xMDgwLDYgKzEwOTMsMTMgQEAgdm9pZCBTTVJlZ0V4cE1h Y3JvQXNzZW1ibGVyOjpjcmVhdGVTdGFja0ZyYW1lKCkgewotICAgbWFzbV8uaW5pdFBzZXVkb1N0 YWNrUHRyKCk7Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIC8vIFBQ QzY0J3MgbGluayByZWdpc3RlciBpcyBhbiBTUFIsIG5vdCBhIEdQUiwgc28gaXQgY2Fubm90IGJl IGluY2x1ZGVkIGluCi0rICAvLyBTYXZlZE5vblZvbGF0aWxlUmVnaXN0ZXJzLiBTYXZlIGl0IGV4 cGxpY2l0bHkgYmVmb3JlIHRoZSBmcmFtZSBwb2ludGVyCi0rICAvLyBzbyB0aGF0IGFiaXJldCgp J3MgYmxyIGNhbiByZXR1cm4gdG8gdGhlIGNhbGxlciBhZnRlciB3ZSByZXN0b3JlIGl0LgotKyAg bWFzbV8ucHVzaFJldHVybkFkZHJlc3MoKTsKLSsjZW5kaWYKLSsKLSAgIG1hc21fLlB1c2goanM6 OmppdDo6RnJhbWVQb2ludGVyKTsKLSAgIG1hc21fLm1vdmVTdGFja1B0clRvKGpzOjpqaXQ6OkZy YW1lUG9pbnRlcik7Ci0gCi1AQCAtMTMwOCw2ICsxMzI4LDkgQEAgdm9pZCBTTVJlZ0V4cE1hY3Jv QXNzZW1ibGVyOjpleGl0SGFuZGxlcigpIHsKLSAgIC8vIFBlcmZvcm0gYSBwbGFpbiBSZXQoKSwg YXMgYWJpcmV0KCkgd2lsbCBtb3ZlIFNQIDwtIFBTUCBhbmQgdGhhdCBpcyB3cm9uZy4KLSAgIG1h c21fLlJldCh2aXhsOjpscik7Ci0gI2Vsc2UKLSsjICBpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0r ICBtYXNtXy5wb3BSZXR1cm5BZGRyZXNzKCk7Ci0rIyAgZW5kaWYKLSAgIG1hc21fLmFiaXJldCgp OwotICNlbmRpZgotIAotQEAgLTEzNTEsNiArMTM3NCwxMSBAQCB2b2lkIFNNUmVnRXhwTWFjcm9B c3NlbWJsZXI6OnN0YWNrT3ZlcmZsb3dIYW5kbGVyKCkgewotIAotICAgLy8gQWRqdXN0IGZvciB0 aGUgcmV0dXJuIGFkZHJlc3Mgb24gdGhlIHN0YWNrLgotICAgc2l6ZV90IGZyYW1lT2Zmc2V0ID0g c2l6ZW9mKHZvaWQqKTsKLSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAgLy8gQ2hlY2tCYWNr dHJhY2tTdGFja0xpbWl0IHB1c2hlcyBMUiBiZWZvcmUgY2FsbGluZyB1cywgc28gdGhlcmUncyBh Ci0rICAvLyBzZWNvbmQgcmV0dXJuIGFkZHJlc3Mgb24gdGhlIHN0YWNrLgotKyAgZnJhbWVPZmZz ZXQgKz0gc2l6ZW9mKHZvaWQqKTsKLSsjZW5kaWYKLSAKLSAgIHZvbGF0aWxlUmVncy50YWtlVW5j aGVja2VkKHRlbXAwXyk7Ci0gICB2b2xhdGlsZVJlZ3MudGFrZVVuY2hlY2tlZCh0ZW1wMV8pOwot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9iYXNlbGluZS9wcGM2NC1icmFuY2g4 LTE2LW5hcnJvdy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9iYXNlbGluZS9wcGM2NC1icmFu Y2g4LTE2LW5hcnJvdy5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAw MC4uZmMxMDc0YTllZjhiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVz dHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJyb3cuanMKLUBAIC0wLDAgKzEsMTAzIEBA Ci0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBQUEM2NCBicmFuY2g4L2JyYW5jaDE2IHdpZHRoLW5h cnJvd2luZyB1bmRlciBFcXVhbCAvCi0rLy8gTm90RXF1YWwgLyB1bnNpZ25lZCBjb21wYXJpc29u cy4gVHdvIHByaW9yIGJ1Z3M6Ci0rLy8KLSsvLyAgIDEuIFNpZ24tZXh0ZW5kaW5nIHRoZSBsb2Fk IHdoaWxlIG1vdmUzMihJbW0zMikgemVyby1leHRlbmRlZCB0aGUgaW1tCi0rLy8gICAgICBjYXVz ZWQgc3B1cmlvdXMgbWlzbWF0Y2ggd2hlbiB0aGUgbG9hZGVkIGJ5dGUvaGFsZndvcmQgaGFkIGl0 cyBoaWdoCi0rLy8gICAgICBiaXQgc2V0IChlLmcuICLDgMOBw4IiLnN0YXJ0c1dpdGgoIsOAw4HD giIpIHJldHVybmVkIGZhbHNlIGJlY2F1c2UgYnl0ZSAweEMwCi0rLy8gICAgICBzaWduLWV4dGVu ZGVkIHRvIDB4RkYuLi5DMCBidXQgdGhlIGltbSAweEMwIHplcm8tZXh0ZW5kZWQgdG8gMHgwMEMw LAotKy8vICAgICAgc28gY21wdyBvbiB0aGUgbG93IDMyIGJpdHMgc2F3IGEgbmVnYXRpdmUgdnMg cG9zaXRpdmUgdmFsdWUpLgotKy8vCi0rLy8gICAyLiBBbHdheXMgemVyby1leHRlbmRpbmcgdGhl IGxvYWQgYnJva2UgYGJ5dGUgPT0gSW1tMzIoLTEpYCBiZWNhdXNlIC0xCi0rLy8gICAgICBzaWdu LWV4dGVuZHMgaW4gdGhlIGltbSBwYXRoOiB0aGUgbG9hZGVkIDB4MDAwMDAwRkYgZGlkbid0IG1h dGNoIHRoZQotKy8vICAgICAgbWF0ZXJpYWxpemVkIDB4RkZGRkZGRkYuCi0rLy8KLSsvLyBGaXg6 IGNhc3QgdGhlIGltbWVkaWF0ZSB0byB1aW50OC91aW50MTYgKGVxdWFsaXR5ICsgdW5zaWduZWQp IG9yIGludDgvaW50MTYKLSsvLyAoc2lnbmVkIHJlbGF0aW9uYWwpIHNvIGJvdGggc2lkZXMgaGF2 ZSBtYXRjaGluZyBiaXQgcGF0dGVybnMgcmVnYXJkbGVzcyBvZgotKy8vIGhvdyBtb3ZlMzIoSW1t MzIpIGNob3NlIHRvIG1hdGVyaWFsaXplIGl0LiBNYXRjaCBBUk02NC9Mb29uZ0FyY2g2NC9SSVND LVYuCi0rLy8KLSsvLyBXZSBleGVyY2lzZSBib3RoIGJ5dGUgYW5kIGhhbGZ3b3JkIGJyYW5jaCBw YXRocyB2aWEgVHlwZWRBcnJheSBsb2FkcyBhbmQKLSsvLyBTdHJpbmcucHJvdG90eXBlLnN0YXJ0 c1dpdGggd2l0aCBhIGNvbnN0YW50IHNlYXJjaCBzdHJpbmcgKHRoZSBvcmlnaW5hbAotKy8vIGZh aWxpbmcgc2l0ZSBsb3dlcmVkIHRvIGJyYW5jaDE2KE5vdEVxdWFsLCBhZGRyLCBJbW0zMigweEMx QzApKSkuCi0rCi0rLy8gLS0tIERpcmVjdCBieXRlL2hhbGZ3b3JkIGVxdWFsaXR5IHRocm91Z2gg VHlwZWRBcnJheSAtLS0KLSt7Ci0rICBsZXQgdTggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMHg3 RiwgMHg4MCwgMHhDMCwgMHhDMSwgMHhGRSwgMHhGRl0pOwotKyAgbGV0IGk4ID0gbmV3IEludDhB cnJheSh1OC5idWZmZXIpOwotKyAgbGV0IHUxNiA9IG5ldyBVaW50MTZBcnJheShbMHgwMDAwLCAw eDdGRkYsIDB4ODAwMCwgMHhDMUMwLCAweEZGRkUsIDB4RkZGRl0pOwotKyAgbGV0IGkxNiA9IG5l dyBJbnQxNkFycmF5KHUxNi5idWZmZXIpOwotKwotKyAgLy8gRm9yY2UgYmFzZWxpbmUgKyBJb24g dG8gc3BlY2lhbGl6ZSB0aGUgY29tcGFyaXNvbnMuCi0rICBmdW5jdGlvbiBlcVU4KGFyciwgaWR4 LCB2YWwpIHsKLSsgICAgcmV0dXJuIGFycltpZHhdID09PSB2YWw7Ci0rICB9Ci0rICBmdW5jdGlv biBlcUk4KGFyciwgaWR4LCB2YWwpIHsKLSsgICAgcmV0dXJuIGFycltpZHhdID09PSB2YWw7Ci0r ICB9Ci0rICBmdW5jdGlvbiBlcVUxNihhcnIsIGlkeCwgdmFsKSB7Ci0rICAgIHJldHVybiBhcnJb aWR4XSA9PT0gdmFsOwotKyAgfQotKyAgZnVuY3Rpb24gZXFJMTYoYXJyLCBpZHgsIHZhbCkgewot KyAgICByZXR1cm4gYXJyW2lkeF0gPT09IHZhbDsKLSsgIH0KLSsKLSsgIGZvciAobGV0IGkgPSAw OyBpIDwgMjAwOyBpKyspIHsKLSsgICAgLy8gSGlnaC1iaXQtc2V0IGJ5dGVzOiBiaXQgcGF0dGVy biBlcXVhbGl0eSBtdXN0IGhvbGQgYm90aCBzaWduZWQgYW5kCi0rICAgIC8vIHVuc2lnbmVkIGlu dGVycHJldGF0aW9ucyBvZiB0aGUgaW1tZWRpYXRlLgotKyAgICBhc3NlcnRFcShlcVU4KHU4LCA0 LCAweEMwKSwgdHJ1ZSk7ICAgLy8gdW5zaWduZWQgY29tcGFyZSAweEMwID09IDB4QzAKLSsgICAg YXNzZXJ0RXEoZXFVOCh1OCwgNCwgMHhDMSksIGZhbHNlKTsKLSsgICAgYXNzZXJ0RXEoZXFVOCh1 OCwgNywgMHhGRiksIHRydWUpOwotKyAgICBhc3NlcnRFcShlcVU4KHU4LCA3LCAtMSAmIDB4RkYp LCB0cnVlKTsgICAvLyAweEZGIHdyaXR0ZW4gYXMgLTEmMHhGRgotKwotKyAgICAvLyBTaWduZWQg SW50OCB2aWV3OiAweEZGIGlzIC0xLCAweEMwIGlzIC02NC4KLSsgICAgYXNzZXJ0RXEoZXFJOChp OCwgNCwgLTY0KSwgdHJ1ZSk7Ci0rICAgIGFzc2VydEVxKGVxSTgoaTgsIDcsIC0xKSwgdHJ1ZSk7 Ci0rICAgIGFzc2VydEVxKGVxSTgoaTgsIDQsIC02MyksIGZhbHNlKTsKLSsKLSsgICAgLy8gSGFs ZndvcmQgdmFyaWFudHM6IHRoZSBvcmlnaW5hbCBzdGFydHN3aXRoIGZhaWx1cmUgcGF0dGVybiB3 YXMKLSsgICAgLy8gKExhdGluLTEgY2hhciAweEMxQzApIOKAlCBhIDE2LWJpdCB2YWx1ZSB3aXRo IGJpdCAxNSBzZXQuCi0rICAgIGFzc2VydEVxKGVxVTE2KHUxNiwgMywgMHhDMUMwKSwgdHJ1ZSk7 Ci0rICAgIGFzc2VydEVxKGVxVTE2KHUxNiwgMywgMHhDMUMxKSwgZmFsc2UpOwotKyAgICBhc3Nl cnRFcShlcVUxNih1MTYsIDUsIDB4RkZGRiksIHRydWUpOwotKyAgICBhc3NlcnRFcShlcVUxNih1 MTYsIDUsIC0xICYgMHhGRkZGKSwgdHJ1ZSk7Ci0rCi0rICAgIGFzc2VydEVxKGVxSTE2KGkxNiwg MywgLTE1OTM2KSwgdHJ1ZSk7ICAvLyAweEMxQzAgYXMgaTE2ID0gLTE1OTM2Ci0rICAgIGFzc2Vy dEVxKGVxSTE2KGkxNiwgNSwgLTEpLCB0cnVlKTsKLSsgICAgYXNzZXJ0RXEoZXFJMTYoaTE2LCA1 LCAtMiksIGZhbHNlKTsKLSsgIH0KLSt9Ci0rCi0rLy8gLS0tIFN0cmluZy5wcm90b3R5cGUuc3Rh cnRzV2l0aCB3aXRoIGEgTGF0aW4tMSBjb25zdGFudCBzZWFyY2ggLS0tCi0rLy8gVGhpcyB3YXMg dGhlIG9yaWdpbmFsIGZhaWxpbmcgc2l0ZSDigJQgSW9uIGxvd2VycyBhIGNvbnN0YW50IHNlYXJj aCBzdHJpbmcKLSsvLyBvZiBsZW5ndGggMS4uMzIgaW50byBhIHNlcXVlbmNlIG9mIGJ5dGUtd2lz ZSBjb21wYXJpc29ucy4KLSt7Ci0rICBsZXQgcyA9ICLDgMOBw4IiOyAgLy8gTGF0aW4tMSBsZW5n dGggMywgYnl0ZXMgMHhDMCAweEMxIDB4QzIgKGFsbCBoaWdoLWJpdCBzZXQpCi0rICBmdW5jdGlv biBjaGVjaygpIHsKLSsgICAgcmV0dXJuIHMuc3RhcnRzV2l0aCgiw4DDgcOCIik7Ci0rICB9Ci0r ICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0rICAgIGFzc2VydEVxKGNoZWNrKCks IHRydWUpOwotKyAgfQotKwotKyAgLy8gTWlzbWF0Y2ggb24gYSBzaW5nbGUgaGlnaC1iaXQgYnl0 ZSBtdXN0IHJlcG9ydCBub3QtZXF1YWwuCi0rICBsZXQgczIgPSAiw4DDgcODIjsgIC8vIGxhc3Qg Ynl0ZSAweEMzIGluc3RlYWQgb2YgMHhDMgotKyAgZnVuY3Rpb24gY2hlY2syKCkgewotKyAgICBy ZXR1cm4gczIuc3RhcnRzV2l0aCgiw4DDgcOCIik7Ci0rICB9Ci0rICBmb3IgKGxldCBpID0gMDsg aSA8IDIwMDsgaSsrKSB7Ci0rICAgIGFzc2VydEVxKGNoZWNrMigpLCBmYWxzZSk7Ci0rICB9Ci0r fQotKwotKy8vIC0tLSBTaWduZWQgcmVsYXRpb25hbCBjb21wYXJpc29ucyBzdGlsbCB3b3JrICh3 ZSBrZXB0IHRoZSBzaWduLWV4dGVuZCBwYXRoKSAtLS0KLSt7Ci0rICBsZXQgaTggPSBuZXcgSW50 OEFycmF5KFsweDdGLCAtMSwgLTEyOCwgMSwgMF0pOwotKyAgZnVuY3Rpb24gbHRaZXJvKGlkeCkg ewotKyAgICByZXR1cm4gaThbaWR4XSA8IDA7Ci0rICB9Ci0rICBmb3IgKGxldCBpID0gMDsgaSA8 IDIwMDsgaSsrKSB7Ci0rICAgIGFzc2VydEVxKGx0WmVybygwKSwgZmFsc2UpOyAgLy8gMHg3RiA9 ICsxMjcKLSsgICAgYXNzZXJ0RXEobHRaZXJvKDEpLCB0cnVlKTsgICAvLyAtMQotKyAgICBhc3Nl cnRFcShsdFplcm8oMiksIHRydWUpOyAgIC8vIC0xMjgKLSsgICAgYXNzZXJ0RXEobHRaZXJvKDMp LCBmYWxzZSk7ICAvLyAxCi0rICB9Ci0rfQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy9nYy9nY3BhcmFtLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2djL2djcGFyYW0uanMK LWluZGV4IDUxZDU4NjYyMTkzZi4uNDhlNWE5N2MxMzVmIDEwMDY0NAotLS0tIGEvanMvc3JjL2pp dC10ZXN0L3Rlc3RzL2djL2djcGFyYW0uanMKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9n Yy9nY3BhcmFtLmpzCi1AQCAtMzAsNyArMzAsOCBAQCB0ZXN0R2V0UGFyYW0oImNodW5rQnl0ZXMi KTsKLSB0ZXN0R2V0UGFyYW0oImhlbHBlclRocmVhZENvdW50Iik7Ci0gCi0gdGVzdENoYW5nZVBh cmFtKCJtYXhCeXRlcyIpOwotLXRlc3RDaGFuZ2VQYXJhbSgibWluTnVyc2VyeUJ5dGVzIiwgMTYg KiAxMDI0KTsKLSt2YXIgcGFnZVNpemUgPSBnY3BhcmFtKCJzeXN0ZW1QYWdlU2l6ZUtCIikgKiAx MDI0OwotK3Rlc3RDaGFuZ2VQYXJhbSgibWluTnVyc2VyeUJ5dGVzIiwgcGFnZVNpemUpOwotIHRl c3RDaGFuZ2VQYXJhbSgibWF4TnVyc2VyeUJ5dGVzIiwgMTAyNCAqIDEwMjQpOwotIHRlc3RDaGFu Z2VQYXJhbSgiaW5jcmVtZW50YWxHQ0VuYWJsZWQiKTsKLSB0ZXN0Q2hhbmdlUGFyYW0oInBlclpv bmVHQ0VuYWJsZWQiKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21v ZC1jb25zdGFudC1wb3cyLW1pbnVzLW9uZS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9pb24v bW9kLWNvbnN0YW50LXBvdzItbWludXMtb25lLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi45MDI4ZjU1ODdjNjUKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLWNvbnN0YW50LXBvdzItbWludXMtb25lLmpzCi1AQCAt MCwwICsxLDc4IEBACi0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBhIFBQQzY0IElvbiBtaXNjb21w aWxlIG9mIGludGVnZXIgbW9kdWxvIGJ5IGEKLSsvLyBjb25zdGFudCBvZiB0aGUgZm9ybSAyXm4g LSAxIChlLmcuIDY1NTM1KS4KLSsvLwotKy8vIGxvd2VyTW9kSSByb3V0ZXMgYHggJSAoMl5uIC0g MSlgIHRvIExNb2RNYXNrSSwgd2hvc2UgY29kZWdlbgotKy8vIChtYV9tb2RfbWFzaykgbWF0ZXJp YWxpemVkIHRoZSBtYXNrIDJebiAtIDEgd2l0aCB4c19saSgpLiB4c19saSB0YWtlcyBhCi0rLy8g c2lnbmVkIGludDE2X3QsIHNvIGEgbWFzayBvZiAweEZGRkYgd2FzIHRydW5jYXRlZCB0byAtMSwg Y29ycnVwdGluZyB0aGUKLSsvLyBkaWdpdC1zdW1taW5nIHJlZHVjdGlvbi4gVGhlIGJ1ZyBvbmx5 IGFmZmVjdGVkIG1hc2tzIHRoYXQgZG8gbm90IGZpdCBpbiBhCi0rLy8gc2lnbmVkIDE2LWJpdCBp bW1lZGlhdGUsIGkuZS4gZGl2aXNvcnMgPj0gNjU1MzUgKG4gPj0gMTYpOyBzbWFsbGVyCi0rLy8g Ml5uIC0gMSBkaXZpc29ycyBzdWNoIGFzIDI1NSB3ZXJlIHVuYWZmZWN0ZWQuCi0rLy8KLSsvLyBU aGUgcmVmZXJlbmNlIHVzZXMgYSBub24tY29uc3RhbnQgZGl2aXNvciwgd2hpY2ggbG93ZXJzIHRv IHRoZQotKy8vIGhhcmR3YXJlLWRpdmlkZSBtb2R1bG8gcGF0aCAoTE1vZEkpIGFuZCBpcyB0aGVy ZWZvcmUgaW5kZXBlbmRlbnQgb2YgdGhlCi0rLy8gTE1vZE1hc2tJIGNvZGVnZW4gdW5kZXIgdGVz dC4KLSsKLStmdW5jdGlvbiByZWZtb2QoeCwgZCkgewotKyAgLy8gZCBpcyBub3QgYSBjb25zdGFu dCBoZXJlIC0+IGRpdmlkZS1iYXNlZCBtb2R1bG8sIG5vdCBMTW9kTWFza0kuCi0rICByZXR1cm4g KHggJSBkKSB8IDA7Ci0rfQotKwotKy8vIE9uZSBmdW5jdGlvbiBwZXIgY29uc3RhbnQgZGl2aXNv ciBzbyB0aGUgZGl2aXNvciBpcyBhIGxpdGVyYWwgYW5kIHRoZQotKy8vIExNb2RNYXNrSSBwYXRo IGlzIHNlbGVjdGVkLgotK2Z1bmN0aW9uIG1vZDI1NSh4KSB7IHJldHVybiAoeCAlIDI1NSkgfCAw OyB9Ci0rZnVuY3Rpb24gbW9kMzI3NjcoeCkgeyByZXR1cm4gKHggJSAzMjc2NykgfCAwOyB9Ci0r ZnVuY3Rpb24gbW9kNjU1MzUoeCkgeyByZXR1cm4gKHggJSA2NTUzNSkgfCAwOyB9Ci0rZnVuY3Rp b24gbW9kMTMxMDcxKHgpIHsgcmV0dXJuICh4ICUgMTMxMDcxKSB8IDA7IH0KLStmdW5jdGlvbiBt b2QxMDQ4NTc1KHgpIHsgcmV0dXJuICh4ICUgMTA0ODU3NSkgfCAwOyB9Ci0rCi0rY29uc3QgY2Fz ZXMgPSBbCi0rICBbbW9kMjU1LCAyNTVdLAotKyAgW21vZDMyNzY3LCAzMjc2N10sCi0rICBbbW9k NjU1MzUsIDY1NTM1XSwKLSsgIFttb2QxMzEwNzEsIDEzMTA3MV0sCi0rICBbbW9kMTA0ODU3NSwg MTA0ODU3NV0sCi0rXTsKLSsKLSsvLyBJbnB1dHMgc3Bhbm5pbmcgc21hbGwgdmFsdWVzLCB2YWx1 ZXMgd2l0aCBiaXRzIGFib3ZlIHRoZSBtYXNrIHdpZHRoCi0rLy8gKHNvIHRoZSBtdWx0aS1kaWdp dCByZWR1Y3Rpb24gaXMgZXhlcmNpc2VkKSwgYW5kIG5lZ2F0aXZlcy4KLStjb25zdCBpbnB1dHMg PSBbXTsKLStmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHsKLSsgIGlucHV0cy5wdXNoKE1h dGguaW11bChpLCAyNjU0NDM1NzYxKSB8IDApOwotKyAgaW5wdXRzLnB1c2goKGkgKiA2NTUzNSAr IGkpIHwgMCk7Ci0rICBpbnB1dHMucHVzaCgoaSAqIDEzMTA3MSAtIDcpIHwgMCk7Ci0rICBpbnB1 dHMucHVzaCgtTWF0aC5pbXVsKGksIDQwNTAzKSB8IDApOwotK30KLStpbnB1dHMucHVzaCgwLCAx LCAtMSwgNjU1MzQsIDY1NTM1LCA2NTUzNiwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApOwotKwot Ky8vIFdhcm0gdXAgdGhyb3VnaCB0aGUgdGllcnMsIHRoZW4gYXNzZXJ0IGVhY2ggY29uc3RhbnQt ZGl2aXNvciByZXN1bHQKLSsvLyBtYXRjaGVzIHRoZSBkaXZpZGUtYmFzZWQgcmVmZXJlbmNlLgot K2ZvciAobGV0IGl0ZXIgPSAwOyBpdGVyIDwgMjAwMDsgaXRlcisrKSB7Ci0rICBmb3IgKGNvbnN0 IFtmbiwgZF0gb2YgY2FzZXMpIHsKLSsgICAgZm9yIChjb25zdCB4IG9mIGlucHV0cykgewotKyAg ICAgIGFzc2VydEVxKGZuKHgpLCByZWZtb2QoeCwgZCkpOwotKyAgICB9Ci0rICB9Ci0rfQotKwot Ky8vIFJlZ2lzdGVyLXByZXNzdXJlIHZhcmlhbnQ6IG1pcnJvcnMgdGhlIHNoYXBlIHRoYXQgZXhw b3NlZCB0aGUgYnVnIChtYW55Ci0rLy8gbGl2ZSBsb2NhbHMgZm9yY2luZyB0aGUgbWFzayBtYXRl cmlhbGl6YXRpb24gdG8gaW50ZXJhY3Qgd2l0aCBzcGlsbHMpLgotK2Z1bmN0aW9uIHByZXNzdXJl KGJ1ZiwgaSkgewotKyAgbGV0IHYwID0gaSwgdjEgPSBpICsgMSwgdjIgPSBpICsgMiwgdjMgPSBp ICsgMywgdjQgPSBpICsgNCwgdjUgPSBpICsgNTsKLSsgIGxldCB2NiA9IGkgKyA2LCB2NyA9IGkg KyA3LCB2OCA9IGkgKyA4LCB2OSA9IGkgKyA5LCB2MTAgPSBpICsgMTAsIHYxMSA9IGkgKyAxMTsK LSsgIGxldCB2MTIgPSBpICsgMTIsIHYxMyA9IGkgKyAxMywgdjE0ID0gaSArIDE0LCB2MTUgPSBp ICsgMTU7Ci0rICBjb25zdCByID0gKGJ1ZltpICYgNjNdICUgNjU1MzUpIHwgMDsKLSsgIC8vIEtl ZXAgZXZlcnkgbG9jYWwgbGl2ZSB0byB0aGUgcmV0dXJuIHdpdGhvdXQgYWx0ZXJpbmcgci4KLSsg IGNvbnN0IGxpdmUgPSAodjAgXiB2MSBeIHYyIF4gdjMgXiB2NCBeIHY1IF4gdjYgXiB2NyBeCi0r ICAgICAgICAgICAgICAgIHY4IF4gdjkgXiB2MTAgXiB2MTEgXiB2MTIgXiB2MTMgXiB2MTQgXiB2 MTUpICYgMDsKLSsgIHJldHVybiByICsgbGl2ZTsKLSt9Ci0rCi0rY29uc3QgYnVmID0gbmV3IElu dDMyQXJyYXkoNjQpOwotK2ZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7Ci0r ICBidWZbaV0gPSBNYXRoLmltdWwoaSwgMjY1NDQzNTc2MSkgfCAwOwotK30KLStmb3IgKGxldCBp dGVyID0gMDsgaXRlciA8IDUwMDA7IGl0ZXIrKykgewotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCA2 NDsgaSsrKSB7Ci0rICAgIGFzc2VydEVxKHByZXNzdXJlKGJ1ZiwgaSksIHJlZm1vZChidWZbaSAm IDYzXSwgNjU1MzUpKTsKLSsgIH0KLSt9Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL2lvbi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZpZGVuZC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUtZGl2aWRlbmQuanMKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjk5MDVjYzRhOGYzNgotLS0tIC9kZXYvbnVsbAotKysr IGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZpZGVuZC5q cwotQEAgLTAsMCArMSw3MSBAQAotKy8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBQUEM2NCBJb24g bWlzY29tcGlsZSBvZiBpbnRlZ2VyIG1vZHVsbyBieSBhIGNvbnN0YW50Ci0rLy8gcG93ZXIgb2Yg dHdvIChlLmcuIDY1NTM2KSB3aXRoIGEgbmVnYXRpdmUgZGl2aWRlbmQuCi0rLy8KLSsvLyBsb3dl ck1vZEkgcm91dGVzIGB4ICUgMl5uYCB0byBMTW9kUG93VHdvSSwgd2hvc2UgY29kZWdlbiB0ZXN0 ZWQgdGhlIHNpZ24gb2YKLSsvLyB0aGUgZGl2aWRlbmQgd2l0aCBicmFuY2hQdHIgKGEgNjQtYml0 IGNvbXBhcmUpLiBXaGVuIHRoZSBpbnQzMiBkaXZpZGVuZCB3YXMKLSsvLyBoZWxkIHplcm8tZXh0 ZW5kZWQgaW4gaXRzIHJlZ2lzdGVyLCB0aGUgNjQtYml0IHRlc3QgbWlzY2xhc3NpZmllZCBhIG5l Z2F0aXZlCi0rLy8gdmFsdWUgYXMgbm9uLW5lZ2F0aXZlIGFuZCB0b29rIHRoZSB1bm1hc2tlZCBw b3NpdGl2ZSBwYXRoLCByZXR1cm5pbmcKLSsvLyBgeCAmICgyXm4gLSAxKWAgaW5zdGVhZCBvZiB0 aGUgY29ycmVjdCAobmVnYXRpdmUpIGB4ICUgMl5uYC4gRml4ZWQgYnkgdXNpbmcgYQotKy8vIDMy LWJpdCBzaWduIHRlc3QgKGJyYW5jaDMyKS4KLSsvLwotKy8vIFRoZSByZWZlcmVuY2UgdXNlcyBh IG5vbi1jb25zdGFudCBkaXZpc29yLCB3aGljaCBsb3dlcnMgdG8gdGhlIGRpdmlkZS1iYXNlZAot Ky8vIG1vZHVsbyBwYXRoIChMTW9kSSksIGluZGVwZW5kZW50IG9mIExNb2RQb3dUd29JLgotKwot K2Z1bmN0aW9uIHJlZm1vZCh4LCBkKSB7Ci0rICByZXR1cm4gKHggJSBkKSB8IDA7Ci0rfQotKwot K2Z1bmN0aW9uIG1vZDI1Nih4KSB7IHJldHVybiAoeCAlIDI1NikgfCAwOyB9Ci0rZnVuY3Rpb24g bW9kMTAyNCh4KSB7IHJldHVybiAoeCAlIDEwMjQpIHwgMDsgfQotK2Z1bmN0aW9uIG1vZDQwOTYo eCkgeyByZXR1cm4gKHggJSA0MDk2KSB8IDA7IH0KLStmdW5jdGlvbiBtb2Q2NTUzNih4KSB7IHJl dHVybiAoeCAlIDY1NTM2KSB8IDA7IH0KLStmdW5jdGlvbiBtb2QxMDQ4NTc2KHgpIHsgcmV0dXJu ICh4ICUgMTA0ODU3NikgfCAwOyB9Ci0rZnVuY3Rpb24gbW9kMTA3Mzc0MTgyNCh4KSB7IHJldHVy biAoeCAlIDEwNzM3NDE4MjQpIHwgMDsgfQotKwotK2NvbnN0IGNhc2VzID0gWwotKyAgW21vZDI1 NiwgMjU2XSwKLSsgIFttb2QxMDI0LCAxMDI0XSwKLSsgIFttb2Q0MDk2LCA0MDk2XSwKLSsgIFtt b2Q2NTUzNiwgNjU1MzZdLAotKyAgW21vZDEwNDg1NzYsIDEwNDg1NzZdLAotKyAgW21vZDEwNzM3 NDE4MjQsIDEwNzM3NDE4MjRdLAotK107Ci0rCi0rLy8gSGVhdnkgb24gbmVnYXRpdmUgZGl2aWRl bmRzICh0aGUgYnJva2VuIHBhdGgpLCBwbHVzIGJvdW5kYXJ5IHZhbHVlcy4KLStjb25zdCBpbnB1 dHMgPSBbXTsKLStmb3IgKGxldCBpID0gMTsgaSA8PSA2NDsgaSsrKSB7Ci0rICBpbnB1dHMucHVz aCgtTWF0aC5pbXVsKGksIDI2NTQ0MzU3NjEpIHwgMCk7Ci0rICBpbnB1dHMucHVzaCgtKGkgKiAx NjgpKTsKLSsgIGlucHV0cy5wdXNoKC0oaSAqIDcwMDAxKSk7Ci0rICBpbnB1dHMucHVzaChNYXRo LmltdWwoaSwgNDA1MDMpIHwgMCk7Ci0rfQotK2lucHV0cy5wdXNoKDAsIC0xLCAxLCAtMTY4LCAt NjU1MzUsIC02NTUzNiwgLTY1NTM3LCAxNjgsCi0rICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4 ODAwMDAwMDAsIC0weDdmZmZmZmZmKTsKLSsKLStmb3IgKGxldCBpdGVyID0gMDsgaXRlciA8IDMw MDA7IGl0ZXIrKykgewotKyAgZm9yIChjb25zdCBbZm4sIGRdIG9mIGNhc2VzKSB7Ci0rICAgIGZv ciAoY29uc3QgeCBvZiBpbnB1dHMpIHsKLSsgICAgICBhc3NlcnRFcShmbih4KSwgcmVmbW9kKHgs IGQpKTsKLSsgICAgfQotKyAgfQotK30KLSsKLSsvLyBSZWdpc3Rlci1wcmVzc3VyZSB2YXJpYW50 OiBhIG5lZ2F0aXZlIGRpdmlkZW5kIHByb2R1Y2VkIGF0IHJ1bnRpbWUKLSsvLyAoZmxvYXQtPmlu dCkgd2l0aCBtYW55IGxpdmUgbG9jYWxzLCBtaXJyb3JpbmcgdGhlIHNoYXBlIHRoYXQgZXhwb3Nl ZCB0aGUgYnVnLgotK2Z1bmN0aW9uIHByZXNzdXJlKHNlZWQpIHsKLSsgIGxldCB2MCA9IHNlZWQs IHYxID0gc2VlZCArIDEsIHYyID0gc2VlZCArIDIsIHYzID0gc2VlZCArIDMsIHY0ID0gc2VlZCAr IDQ7Ci0rICBsZXQgdjUgPSBzZWVkICsgNSwgdjYgPSBzZWVkICsgNiwgdjcgPSBzZWVkICsgNywg djggPSBzZWVkICsgOCwgdjkgPSBzZWVkICsgOTsKLSsgIGxldCB2MTAgPSBzZWVkICsgMTAsIHYx MSA9IHNlZWQgKyAxMSwgdjEyID0gc2VlZCArIDEyLCB2MTMgPSBzZWVkICsgMTM7Ci0rICBsZXQg ZDAgPSBzZWVkICogMC41LCBkMSA9IHNlZWQgKiAxLjUsIGQyID0gLXNlZWQgKiAyLjU7Ci0rICBj b25zdCBuZWcgPSAoTWF0aC5mcm91bmQoLShNYXRoLmFicyhzZWVkKSArIDAuNykpIHwgMCk7Ci0r ICBjb25zdCByID0gKG5lZyAlIDY1NTM2KSB8IDA7Ci0rICBjb25zdCBsaXZlID0gKHYwIF4gdjEg XiB2MiBeIHYzIF4gdjQgXiB2NSBeIHY2IF4gdjcgXiB2OCBeIHY5IF4KLSsgICAgICAgICAgICAg ICAgdjEwIF4gdjExIF4gdjEyIF4gdjEzIF4gKGQwIHwgMCkgXiAoZDEgfCAwKSBeIChkMiB8IDAp KSAmIDA7Ci0rICByZXR1cm4gciArIGxpdmU7Ci0rfQotK2ZvciAobGV0IGl0ZXIgPSAwOyBpdGVy IDwgNTAwMDsgaXRlcisrKSB7Ci0rICBmb3IgKGxldCBzID0gMTsgcyA8PSAyMDA7IHMrKykgewot KyAgICBjb25zdCBleHBlY3QgPSAoKE1hdGguZnJvdW5kKC0ocyArIDAuNykpIHwgMCkgJSA2NTUz NikgfCAwOwotKyAgICBhc3NlcnRFcShwcmVzc3VyZShzKSwgZXhwZWN0KTsKLSsgIH0KLSt9Ci1k aWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL21hdGgtbWluLW1heC1jb3JuZXItY2Fz ZXMuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvbWF0aC1taW4tbWF4LWNvcm5lci1jYXNlcy5q cwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uN2FjMmM1OWNhZWZm Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvbWF0aC1taW4tbWF4 LWNvcm5lci1jYXNlcy5qcwotQEAgLTAsMCArMSw1MCBAQAotKy8vIE1hdGgubWluIC8gTWF0aC5t YXggY29ybmVyIGNhc2VzLiBFeGVyY2lzZXMgdGhlIFBPV0VSOSB4c21pbmpkcCAvCi0rLy8geHNt YXhqZHAgSi1mb3JtIGZhc3QgcGF0aCBvbiBQUEM2NCAoYW5kIHRoZSBmY21wdS9icmFuY2ggZmFs bGJhY2sgb24KLSsvLyBQT1dFUjggZm9yY2VkKTsgb3RoZXIgYmFja2VuZHMgYWxyZWFkeSBjb3Zl ciB0aGlzIHZpYSBzaGFyZWQgZnAgdGVzdHMKLSsvLyBidXQgdGhlIHRydXRoIHRhYmxlIGlzIHNt YWxsIGFuZCB3b3J0aCBwaW5uaW5nIGV4cGxpY2l0bHkuCi0rLy8KLSsvLyBKUyBzZW1hbnRpY3Mg KEVDTUEtMjYyKToKLSsvLyAgIC0gTWF0aC5tYXgoLTAsICswKSA9PT0gKzA7IE1hdGgubWluKC0w LCArMCkgPT09IC0wCi0rLy8gICAtIE1hdGgubWF4KC0wLCAtMCkgPT09IC0wOyBNYXRoLm1pbigr MCwgKzApID09PSArMAotKy8vICAgLSBBbnkgTmFOIG9wZXJhbmQg4oaSIE5hTgotKy8vICAgLSDC sUluZiBhbmQgb3JkaW5hcnkgbnVtZXJpY3MgYnkgdmFsdWUKLSsKLStmdW5jdGlvbiBvYmplY3RJ c1Bvc2l0aXZlWmVybyh2KSB7Ci0rICByZXR1cm4gdiA9PT0gMCAmJiBPYmplY3QuaXModiwgMCk7 Ci0rfQotK2Z1bmN0aW9uIG9iamVjdElzTmVnYXRpdmVaZXJvKHYpIHsKLSsgIHJldHVybiB2ID09 PSAwICYmIE9iamVjdC5pcyh2LCAtMCk7Ci0rfQotKwotKy8vIERpcmVjdCBjYWxscyDigJQgdGhl c2UgZ2V0IGlubGluZWQgYnkgSW9uIGFzIE1NaW5NYXggaW50cmluc2ljcywgd2hpY2gKLSsvLyBl bWl0IHRoZSByZWxldmFudCBtaW4vbWF4IGhlbHBlci4KLStmdW5jdGlvbiBjaGVjaygpIHsKLSsg IC8vIE1heCBjb3JuZXIgY2FzZXMuCi0rICBhc3NlcnRFcShvYmplY3RJc1Bvc2l0aXZlWmVybyhN YXRoLm1heCgtMCwgKzApKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShvYmplY3RJc1Bvc2l0aXZlWmVy byhNYXRoLm1heCgrMCwgLTApKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShvYmplY3RJc05lZ2F0aXZl WmVybyhNYXRoLm1heCgtMCwgLTApKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShvYmplY3RJc1Bvc2l0 aXZlWmVybyhNYXRoLm1heCgrMCwgKzApKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShOdW1iZXIuaXNO YU4oTWF0aC5tYXgoTmFOLCA1KSksIHRydWUpOwotKyAgYXNzZXJ0RXEoTnVtYmVyLmlzTmFOKE1h dGgubWF4KDUsIE5hTikpLCB0cnVlKTsKLSsgIGFzc2VydEVxKE51bWJlci5pc05hTihNYXRoLm1h eChOYU4sIE5hTikpLCB0cnVlKTsKLSsgIGFzc2VydEVxKE1hdGgubWF4KC1JbmZpbml0eSwgNSks IDUpOwotKyAgYXNzZXJ0RXEoTWF0aC5tYXgoSW5maW5pdHksIDUpLCBJbmZpbml0eSk7Ci0rICBh c3NlcnRFcShNYXRoLm1heCgxLCAyKSwgMik7Ci0rICBhc3NlcnRFcShNYXRoLm1heCgtMSwgLTIp LCAtMSk7Ci0rICBhc3NlcnRFcShNYXRoLm1heCgxLjUsIDIuNSksIDIuNSk7Ci0rCi0rICAvLyBN aW4gY29ybmVyIGNhc2VzLgotKyAgYXNzZXJ0RXEob2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0aC5t aW4oLTAsICswKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0 aC5taW4oKzAsIC0wKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNOZWdhdGl2ZVplcm8o TWF0aC5taW4oLTAsIC0wKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNQb3NpdGl2ZVpl cm8oTWF0aC5taW4oKzAsICswKSksIHRydWUpOwotKyAgYXNzZXJ0RXEoTnVtYmVyLmlzTmFOKE1h dGgubWluKE5hTiwgNSkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKE51bWJlci5pc05hTihNYXRoLm1p big1LCBOYU4pKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShNYXRoLm1pbigtSW5maW5pdHksIDUpLCAt SW5maW5pdHkpOwotKyAgYXNzZXJ0RXEoTWF0aC5taW4oSW5maW5pdHksIDUpLCA1KTsKLSsgIGFz c2VydEVxKE1hdGgubWluKDEsIDIpLCAxKTsKLSt9Ci0rCi0rLy8gUnVuIGNvbGQgKEJhc2VsaW5l KSBhbmQgaG90IChJb24pLgotK2NoZWNrKCk7Ci0rZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDsg aSsrKSBjaGVjaygpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0 b21pY2l0eS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0b21pY2l0eS5qcwotaW5k ZXggMzQzMjdlYzk1NzQxLi5hYzE1MTYwODMzMjUgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9hdG9taWNpdHkuanMKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93 YXNtL2F0b21pY2l0eS5qcwotQEAgLTgsNyArOCwxMSBAQAotIGNvbnN0IERFQlVHID0gMDsKLSAK LSAvLyBUaGUgbG9uZ2VyIHdlIHJ1biwgdGhlIGJldHRlciwgcmVhbGx5LCBidXQgd2UgZG9uJ3Qg d2FudCB0byB0aW1lIG91dC4KLS1jb25zdCBJVEVSQVRJT05TID0gMTAwMDAwOwotKy8vIFJlYWwg UFBDNjQgaGFyZHdhcmUgcmV0cmllcyBsd2FyeC9zdHdjeC4gcmVzZXJ2YXRpb24gbG9vcHMgdW5k ZXIKLSsvLyBjb250ZW50aW9uLCB3aGljaCBtYWtlcyB0aGUgZGVmYXVsdCBjb3VudCBleGNlZWQg aml0LXRlc3QncyAxNTAgcwotKy8vIGJ1ZGdldCBvbiBQT1dFUjggYW5kIChsZXNzIHNvKSBQT1dF UjkvUE9XRVIxMC4gUXVhcnRlciB0aGUgY291bnQKLSsvLyB0aGVyZSB0byBrZWVwIGNvdmVyYWdl IHdoaWxlIGZpdHRpbmcgdGhlIGRlZmF1bHQgYnVkZ2V0LgotK2NvbnN0IElURVJBVElPTlMgPSBn ZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0IikgPyAyNTAwMCA6IDEwMDAwMDsKLSAKLSAvLyBJ ZiB5b3UgY2hhbmdlIE5VTVdPUktFUlMgeW91IG11c3QgYWxzbyBjaGFuZ2UgdGhlIHRhYmxlcyBm b3IgSU5JVCwgVkFMLCBhbmQKLSAvLyBSRVNVTFQgZm9yIGFsbCB0aGUgb3BlcmF0aW9ucywgYmVs b3csIGJ5IGFkZGluZyBvciByZW1vdmluZyBiaXRzLgotQEAgLTM5LDcgKzQzLDcgQEAgaWYgKGdl dENvcmVDb3VudCgpIDwgTlVNQUdFTlRTKSB7Ci0gCi0gaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlv bigiYXJtLXNpbXVsYXRvciIpIHx8IGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtNjQtc2ltdWxh dG9yIikgfHwKLSAgICAgZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJtaXBzNjQtc2ltdWxhdG9yIikg fHwgZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJyaXNjdjY0LXNpbXVsYXRvciIpIHx8Ci0tICAgIGdl dEJ1aWxkQ29uZmlndXJhdGlvbigibG9vbmc2NC1zaW11bGF0b3IiKSkKLSsgICAgZ2V0QnVpbGRD b25maWd1cmF0aW9uKCJsb29uZzY0LXNpbXVsYXRvciIpIHx8IGdldEJ1aWxkQ29uZmlndXJhdGlv bigicHBjNjQtc2ltdWxhdG9yIikpCi0gewotICAgICBpZiAoREVCVUcgPiAwKQotICAgICAgICAg cHJpbnQoIkF0b21pY2l0eSB0ZXN0IGRpc2FibGVkIG9uIHNpbXVsYXRvciIpOwotZGlmZiAtLWdp dCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcyBiL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcwotaW5kZXggOTFl YzcxMGU0ZTQ2Li5hN2QzYjMyMTE1MTUgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVz dHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL2V4Y2Vzc2l2ZS1pbmxpbmluZy5qcwotQEAgLTc0LDIzICs3NCwyNiBAQCBhc3NlcnRF cSh0aWVyMmNvZGVCeXRlc1VzZWQgPiAyMDAwLCB0cnVlKTsKLSAKLSAvLyBCdXQgbm90IGFuIGV4 Y2Vzc2l2ZSBhbW91bnQuICBUaGlzIGlzIHRoZSBhc3NlcnRpb24gdGhhdCBjaGVja3MgdGhhdAot IC8vIHRoZSBpbmxpbmluZy1idWRnZXQgY3V0b2ZmIG1lY2hhbmlzbSBpcyB3b3JraW5nLgotLWFz c2VydEVxKHRpZXIyY29kZUJ5dGVzVXNlZCA8IDE1MDAwLCB0cnVlKTsKLSsvLyBQUEM2NCBnZW5l cmF0ZXMgbGFyZ2VyIGNvZGUgZHVlIHRvIGZpeGVkLXdpZHRoIDQtYnl0ZSBpbnN0cnVjdGlvbnMs Ci0rLy8gbXVsdGktaW5zdHJ1Y3Rpb24gYnJhbmNoIHN0YW56YXMsIGFuZCBsb25nZXIgY29uc3Rh bnQtbG9hZGluZyBzZXF1ZW5jZXMuCi0rbGV0IHRpZXIybGltaXQgPSBnZXRCdWlsZENvbmZpZ3Vy YXRpb24oInBwYzY0IikgPyAyNTAwMCA6IDE1MDAwOwotK2Fzc2VydEVxKHRpZXIyY29kZUJ5dGVz VXNlZCA8IHRpZXIybGltaXQsIHRydWUpOwotIAotIC8vIFRoZSB0aHJlc2hvbGRzIGFib3ZlIGFy ZSBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIG1lYXN1cmVtZW50cy4KLSAvLwotIC8vIHRpZXIxY29k ZUJ5dGVzVXNlZCAoYmFzZWxpbmUgc2l6ZSkKLSAvLwotLS8vICAgICB4NjQgICAgICB4MzIgICAg YXJtNjQgICAgYXJtMzIKLSsvLyAgICAgeDY0ICAgICAgeDMyICAgIGFybTY0ICAgIGFybTMyICAg IHBwYzY0Ci0gLy8KLS0vLyAgICAxMzc4ICAgICAxMDEwICAgICAxNDA4ICAgICAxMDA4ICAgIC0t ZW5hYmxlLWRlYnVnIGJ1aWxkCi0tLy8gICAgMTIxOCAgICAgIDg2NiAgICAgMTI0OCAgICAgIDg1 NiAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKLSsvLyAgICAxMzc4ICAgICAxMDEwICAgICAxNDA4 ICAgICAxMDA4ICAgICAyNzM2ICAgIC0tZW5hYmxlLWRlYnVnIGJ1aWxkCi0rLy8gICAgMTIxOCAg ICAgIDg2NiAgICAgMTI0OCAgICAgIDg1NiAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBidWls ZAotIC8vCi0gLy8gdGllcjJjb2RlQnl0ZXNVc2VkIChvcHRpbWl6ZWQgc2l6ZSksIHdpdGggaW5s aW5lLXNpemUgYnVkZ2V0aW5nIGVuYWJsZWQKLSAvLwotLS8vICAgICB4NjQgICAgICB4MzIgICAg YXJtNjQgICAgYXJtMzIKLSsvLyAgICAgeDY0ICAgICAgeDMyICAgIGFybTY0ICAgIGFybTMyICAg IHBwYzY0Ci0gLy8KLS0vLyAgICA1MTg2ICAgICA2OTk0ICAgICA3MTM2ICAgICA1NDcyICAgIC0t ZW5hYmxlLWRlYnVnIGJ1aWxkCi0tLy8gICAgMzY5OCAgICAgMzczMCAgICAgNTQ3MiAgICAgMzg4 OCAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKLSsvLyAgICA1MTg2ICAgICA2OTk0ICAgICA3MTM2 ICAgICA1NDcyICAgIDE3NDA4ICAgIC0tZW5hYmxlLWRlYnVnIGJ1aWxkCi0rLy8gICAgMzY5OCAg ICAgMzczMCAgICAgNTQ3MiAgICAgMzg4OCAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBidWls ZAotIC8vCi0gLy8gdGllcjJjb2RlQnl0ZXNVc2VkIChvcHRpbWl6ZWQgc2l6ZSksIHdpdGggaW5s aW5lLXNpemUgYnVkZ2V0aW5nIGRpc2FibGVkCi0gLy8KLUBAIC0xMDgsNyArMTExLDcgQEAgYXNz ZXJ0RXEodGllcjJjb2RlQnl0ZXNVc2VkIDwgMTUwMDAsIHRydWUpOwotIC8vICgyKSB0aGUgb3B0 aW1pemVkIHNpemUgd2lsbCBiZSBhdCBsZWFzdCAyMDAwIGJ5dGVzCi0gLy8KLSAvLyAoMykgaWYg dGhlIGlubGluZS1idWRnZXQgbWVjaGFuaXNtIGlzIHdvcmtpbmcgYXMgaW50ZW5kZWQsIHRoZSBv cHRpbWl6ZWQKLS0vLyAgICAgc2l6ZSB3aWxsIGJlIGxlc3MgdGhhbiAxNTAwMCBieXRlcwotKy8v ICAgICBzaXplIHdpbGwgYmUgbGVzcyB0aGFuIDE1MDAwIGJ5dGVzICgyNTAwMCBvbiBQUEM2NCkK LSAvLwotIC8vCi0gLy8gTm90ZSAoZm9yIGZ1dHVyZSB0ZXN0aW5nKTogaW5saW5lLXNpemUgYnVk Z2V0aW5nIHdhcyBkaXNhYmxlZCBieSBjaGFuZ2luZwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQt dGVzdC90ZXN0cy93YXNtL21lbW9yeS1vb2ItbWVzc2FnZS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy93YXNtL21lbW9yeS1vb2ItbWVzc2FnZS5qcwotaW5kZXggNzUyNDhjNmU2YTU2Li5jMDhl NDliY2M2ZTQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnkt b29iLW1lc3NhZ2UuanMKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL21lbW9yeS1v b2ItbWVzc2FnZS5qcwotQEAgLTgsOCArOCwxNiBAQCBjb25zdCBoYXNPZmZzZXRNZXNzYWdlID0g d2FzbUh1Z2VNZW1vcnlFbmFibGVkKCk7Ci0gCi0gZnVuY3Rpb24gb29iUGF0dGVybihtZW1JZHgs IGJ5dGVPZmZzZXQpIHsKLSAgICAgaWYgKGhhc09mZnNldE1lc3NhZ2UpIHsKLSsgICAgICAgIC8v IFRoZSByZXBvcnRlZCBhZGRyZXNzIGlzIHdoYXRldmVyIHRoZSBrZXJuZWwgcmV0dXJuZWQgaW4K LSsgICAgICAgIC8vIHNpZ2luZm8uc2lfYWRkciBmb3IgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9u LiBNb3N0IGJhY2tlbmRzIGVtaXQKLSsgICAgICAgIC8vIHRoZSB3YXNtIGFjY2VzcyBkaXJlY3Rs eSBzbyBzaV9hZGRyIGVxdWFscyBieXRlT2Zmc2V0LiBQUEM2NCBlbWl0cwotKyAgICAgICAgLy8g YSAxLWJ5dGUgcHJvYmluZyBsb2FkIGF0IGJ5dGVPZmZzZXQgKyAoc2l6ZSAtIDEpIGJlZm9yZSBl YWNoCi0rICAgICAgICAvLyBtdWx0aS1ieXRlIGFjY2VzcyAodG8gZW5mb3JjZSB3YXNtLXNwZWMg YXRvbWljaXR5IG9uIFBPV0VSIElTQSksCi0rICAgICAgICAvLyBzbyBzaV9hZGRyIHRoZXJlIGNh biBiZSB1cCB0byAxNSBieXRlcyBwYXN0IGJ5dGVPZmZzZXQuCi0rICAgICAgICBjb25zdCBvZmZz ZXRzID0gW107Ci0rICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIG9mZnNldHMu cHVzaChgJHtieXRlT2Zmc2V0ICsgaX1gKTsKLSAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKAot LSAgICAgICAgICAgIGBvdXQgb2YgYm91bmRzOiBtZW1vcnkgJHttZW1JZHh9IGFjY2VzcyBhdCBt ZW1vcnkgYWRkcmVzcyAke2J5dGVPZmZzZXR9YAotKyAgICAgICAgICAgIGBvdXQgb2YgYm91bmRz OiBtZW1vcnkgJHttZW1JZHh9IGFjY2VzcyBhdCBtZW1vcnkgYWRkcmVzcyAoPzoke29mZnNldHMu am9pbignfCcpfSlgCi0gICAgICAgICApOwotICAgICB9Ci0gICAgIHJldHVybiAvaW5kZXggb3V0 IG9mIGJvdW5kcy87Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBj NjQtYXJnb24yLXRpZXJpbmcuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1h cmdvbjItdGllcmluZy5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAw MC4uMDRkYWQ5MjQwNTM5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVz dHMvd2FzbS9wcGM2NC1hcmdvbjItdGllcmluZy5qcwotQEAgLTAsMCArMSwxMjQgQEAKLSsvLyBU ZXN0IGZvciB3YXNtIHRpZXJpbmcgY29ycmVjdG5lc3Mgd2l0aCBhcmdvbjItc3R5bGUgU0lNRCBj b21wdXRhdGlvbi4KLSsvLyBUaGUgYXJnb24yIGZCbGFNa2EgZnVuY3Rpb24gdXNlcyBpNjR4Mi5l eHRtdWxfbG93X2kzMng0X3UsIGk2NHgyLnNobCwKLSsvLyBpNjR4Mi5hZGQsIHYxMjgueG9yLCB2 MTI4Lm9yLCBpNjR4Mi5zaHJfdSwgYW5kIGk4eDE2LnNodWZmbGUuCi0rLy8gQSB0aWVyaW5nIGJ1 ZyBjYW4gY2F1c2UgaGFzaCBhbmQgdmVyaWZ5IHRvIHByb2R1Y2UgZGlmZmVyZW50IHJlc3VsdHMK LSsvLyB3aGVuIHRpZXItdXAgaGFwcGVucyBiZXR3ZWVuIHRoZW0uCi0rLy8KLSsvLyBUaGlzIHRl c3QgcnVucyB0aGUgY29tcHV0YXRpb24gdW5kZXIgYm90aCBiYXNlbGluZSBhbmQgb3B0aW1pemlu ZwotKy8vIGNvbXBpbGVycyBhbmQgdmVyaWZpZXMgdGhleSBwcm9kdWNlIGlkZW50aWNhbCByZXN1 bHRzLgotKwotK3ZhciBtb2QgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHdhc21UZXh0VG9CaW5h cnkoYAotKyAgKG1vZHVsZQotKyAgICAobWVtb3J5IChleHBvcnQgIm1lbSIpIDEwKQotKyAgICA7 OyBBcmdvbjIgZkJsYU1rYTogYSArIGIgKyAyICogdHJ1bmMzMihhKSAqIHRydW5jMzIoYikKLSsg ICAgOzsgdGhlbiByb3RhdGlvbnMgYnkgMzIsIDI0LCAxNiwgNjMKLSsgICAgKGZ1bmMgJEdfcm91 bmQgKHBhcmFtIGkzMikKLSsgICAgICAobG9jYWwgdjEyOCB2MTI4IHYxMjggdjEyOCB2MTI4IHYx MjggdjEyOCB2MTI4IHYxMjgpCi0rICAgICAgKGxvY2FsLnNldCAxICh2MTI4LmxvYWQgKGkzMi5h ZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDApKSkpCi0rICAgICAgKGxvY2FsLnNldCAyICh2 MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDE2KSkpKQotKyAgICAg IChsb2NhbC5zZXQgMyAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25z dCAzMikpKSkKLSsgICAgICAobG9jYWwuc2V0IDQgKHYxMjgubG9hZCAoaTMyLmFkZCAobG9jYWwu Z2V0IDApIChpMzIuY29uc3QgNDgpKSkpCi0rICAgICAgKGxvY2FsLnNldCA1ICh2MTI4LmxvYWQg KGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDY0KSkpKQotKyAgICAgIChsb2NhbC5z ZXQgNiAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA4MCkpKSkK LSsgICAgICAobG9jYWwuc2V0IDcgKHYxMjgubG9hZCAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChp MzIuY29uc3QgOTYpKSkpCi0rICAgICAgKGxvY2FsLnNldCA4ICh2MTI4LmxvYWQgKGkzMi5hZGQg KGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDExMikpKSkKLSsKLSsgICAgICA7OyBmQmxhTWthKHYw LCB2MikgKyByb3RyMzIKLSsgICAgICAobG9jYWwuc2V0IDEgKGk2NHgyLmFkZCAoaTY0eDIuYWRk IChsb2NhbC5nZXQgMSkgKGxvY2FsLmdldCAzKSkKLSsgICAgICAgIChpNjR4Mi5zaGwgKGk2NHgy LmV4dG11bF9sb3dfaTMyeDRfdQotKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDgg OSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDEpIChsb2NhbC5nZXQgMSkpCi0r ICAgICAgICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMgOCA5IDEwIDExIDAgMSAyIDMgOCA5IDEw IDExIChsb2NhbC5nZXQgMykgKGxvY2FsLmdldCAzKSkpCi0rICAgICAgICAgIChpMzIuY29uc3Qg MSkpKSkKLSsgICAgICAobG9jYWwuc2V0IDkgKHYxMjgueG9yIChsb2NhbC5nZXQgNykgKGxvY2Fs LmdldCAxKSkpCi0rICAgICAgKGxvY2FsLnNldCA3ICh2MTI4Lm9yIChpNjR4Mi5zaGwgKGxvY2Fs LmdldCA5KSAoaTMyLmNvbnN0IDMyKSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQgOSkgKGkzMi5j b25zdCAzMikpKSkKLSsKLSsgICAgICA7OyBmQmxhTWthKHY0LCB2NikgKyByb3RyMjQKLSsgICAg ICAobG9jYWwuc2V0IDUgKGk2NHgyLmFkZCAoaTY0eDIuYWRkIChsb2NhbC5nZXQgNSkgKGxvY2Fs LmdldCA3KSkKLSsgICAgICAgIChpNjR4Mi5zaGwgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfdQot KyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAx MCAxMSAobG9jYWwuZ2V0IDUpIChsb2NhbC5nZXQgNSkpCi0rICAgICAgICAgIChpOHgxNi5zaHVm ZmxlIDAgMSAyIDMgOCA5IDEwIDExIDAgMSAyIDMgOCA5IDEwIDExIChsb2NhbC5nZXQgNykgKGxv Y2FsLmdldCA3KSkpCi0rICAgICAgICAgIChpMzIuY29uc3QgMSkpKSkKLSsgICAgICAobG9jYWwu c2V0IDkgKHYxMjgueG9yIChsb2NhbC5nZXQgMykgKGxvY2FsLmdldCA1KSkpCi0rICAgICAgKGxv Y2FsLnNldCAzICh2MTI4Lm9yIChpNjR4Mi5zaGwgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0IDQw KSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCAyNCkpKSkKLSsKLSsgICAg ICA7OyBmQmxhTWthKHYwLCB2MikgKyByb3RyMTYKLSsgICAgICAobG9jYWwuc2V0IDEgKGk2NHgy LmFkZCAoaTY0eDIuYWRkIChsb2NhbC5nZXQgMSkgKGxvY2FsLmdldCAzKSkKLSsgICAgICAgIChp NjR4Mi5zaGwgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfdQotKyAgICAgICAgICAoaTh4MTYuc2h1 ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDEpIChs b2NhbC5nZXQgMSkpCi0rICAgICAgICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMgOCA5IDEwIDEx IDAgMSAyIDMgOCA5IDEwIDExIChsb2NhbC5nZXQgMykgKGxvY2FsLmdldCAzKSkpCi0rICAgICAg ICAgIChpMzIuY29uc3QgMSkpKSkKLSsgICAgICAobG9jYWwuc2V0IDkgKHYxMjgueG9yIChsb2Nh bC5nZXQgNykgKGxvY2FsLmdldCAxKSkpCi0rICAgICAgKGxvY2FsLnNldCA3ICh2MTI4Lm9yIChp NjR4Mi5zaGwgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0IDQ4KSkgKGk2NHgyLnNocl91IChsb2Nh bC5nZXQgOSkgKGkzMi5jb25zdCAxNikpKSkKLSsKLSsgICAgICA7OyBmQmxhTWthKHY0LCB2Nikg KyByb3RyNjMKLSsgICAgICAobG9jYWwuc2V0IDUgKGk2NHgyLmFkZCAoaTY0eDIuYWRkIChsb2Nh bC5nZXQgNSkgKGxvY2FsLmdldCA3KSkKLSsgICAgICAgIChpNjR4Mi5zaGwgKGk2NHgyLmV4dG11 bF9sb3dfaTMyeDRfdQotKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAx MSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDUpIChsb2NhbC5nZXQgNSkpCi0rICAgICAg ICAgIChpOHgxNi5zaHVmZmxlIDAgMSAyIDMgOCA5IDEwIDExIDAgMSAyIDMgOCA5IDEwIDExIChs b2NhbC5nZXQgNykgKGxvY2FsLmdldCA3KSkpCi0rICAgICAgICAgIChpMzIuY29uc3QgMSkpKSkK LSsgICAgICAobG9jYWwuc2V0IDkgKHYxMjgueG9yIChsb2NhbC5nZXQgMykgKGxvY2FsLmdldCA1 KSkpCi0rICAgICAgKGxvY2FsLnNldCAzICh2MTI4Lm9yIChpNjR4Mi5zaGwgKGxvY2FsLmdldCA5 KSAoaTMyLmNvbnN0IDEpKSAoaTY0eDIuc2hyX3UgKGxvY2FsLmdldCA5KSAoaTMyLmNvbnN0IDYz KSkpKQotKwotKyAgICAgICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5j b25zdCAwKSkgKGxvY2FsLmdldCAxKSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9j YWwuZ2V0IDApIChpMzIuY29uc3QgMTYpKSAobG9jYWwuZ2V0IDIpKQotKyAgICAgICh2MTI4LnN0 b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAzMikpIChsb2NhbC5nZXQgMykp Ci0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDQ4 KSkgKGxvY2FsLmdldCA0KSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0 IDApIChpMzIuY29uc3QgNjQpKSAobG9jYWwuZ2V0IDUpKQotKyAgICAgICh2MTI4LnN0b3JlIChp MzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA4MCkpIChsb2NhbC5nZXQgNikpCi0rICAg ICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDk2KSkgKGxv Y2FsLmdldCA3KSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChp MzIuY29uc3QgMTEyKSkgKGxvY2FsLmdldCA4KSkpCi0rCi0rICAgIChmdW5jIChleHBvcnQgImhh c2giKSAocGFyYW0gaTMyKSAocmVzdWx0IGk2NCkKLSsgICAgICAobG9jYWwgaTMyKQotKyAgICAg IDs7IEluaXQgd2l0aCBCbGFrZTJiIElWCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAw KSAodjEyOC5jb25zdCBpNjR4MiAweDZhMDllNjY3ZjNiY2M5MDggMHhiYjY3YWU4NTg0Y2FhNzNi KSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDE2KSAodjEyOC5jb25zdCBpNjR4MiAw eDNjNmVmMzcyZmU5NGY4MmIgMHhhNTRmZjUzYTVmMWQzNmYxKSkKLSsgICAgICAodjEyOC5zdG9y ZSAoaTMyLmNvbnN0IDMyKSAodjEyOC5jb25zdCBpNjR4MiAweDUxMGU1MjdmYWRlNjgyZDEgMHg5 YjA1Njg4YzJiM2U2YzFmKSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDQ4KSAodjEy OC5jb25zdCBpNjR4MiAweDFmODNkOWFiZmI0MWJkNmIgMHg1YmUwY2QxOTEzN2UyMTc5KSkKLSsg ICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDY0KSAodjEyOC5jb25zdCBpNjR4MiAweDAxMjM0 NTY3ODlhYmNkZWYgMHhmZWRjYmE5ODc2NTQzMjEwKSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMy LmNvbnN0IDgwKSAodjEyOC5jb25zdCBpNjR4MiAweGRlYWRiZWVmY2FmZWJhYmUgMHgxMTIyMzM0 NDU1NjY3Nzg4KSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDk2KSAodjEyOC5jb25z dCBpNjR4MiAweGFhYmJjY2RkMTEyMjMzNDQgMHg1NTY2Nzc4ODk5YWFiYmNjKSkKLSsgICAgICAo djEyOC5zdG9yZSAoaTMyLmNvbnN0IDExMikgKHYxMjguY29uc3QgaTY0eDIgMHhkZGVlZmYwMDEx MjIzMzQ0IDB4NTU2Njc3ODg5OWFhYmJjYykpCi0rICAgICAgKGxvY2FsLnNldCAxIChpMzIuY29u c3QgMCkpCi0rICAgICAgKGJsb2NrIChsb29wCi0rICAgICAgICAoY2FsbCAkR19yb3VuZCAoaTMy LmNvbnN0IDApKQotKyAgICAgICAgKGxvY2FsLnNldCAxIChpMzIuYWRkIChsb2NhbC5nZXQgMSkg KGkzMi5jb25zdCAxKSkpCi0rICAgICAgICAoYnJfaWYgMSAoaTMyLmdlX3UgKGxvY2FsLmdldCAx KSAobG9jYWwuZ2V0IDApKSkKLSsgICAgICAgIChiciAwKSkpCi0rICAgICAgKGk2NC54b3IgKGk2 NC5sb2FkIChpMzIuY29uc3QgMCkpCi0rICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5j b25zdCA4KSkKLSsgICAgICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgMTYpKQot KyAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDI0KSkKLSsgICAgICAg ICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDMyKSkKLSsgICAgICAgICAgICAg ICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgNDApKQotKyAgICAgICAgICAgICAgICAg IChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDQ4KSkKLSsgICAgICAgICAgICAgICAgICAg IChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDU2KSkKLSsgICAgICAgICAgICAgICAgICAg ICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgNjQpKQotKyAgICAgICAgICAgICAgICAg ICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDcyKSkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDgwKSkKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgODgpKQot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNv bnN0IDk2KSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQu bG9hZCAoaTMyLmNvbnN0IDEwNCkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDExMikpCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGk2NC5sb2FkIChpMzIuY29uc3QgMTIwKSkpKSkpKSkpKSkpKSkp KSkpCi0rICApCi0rYCkpOwotKwotK3ZhciBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl KG1vZCk7Ci0rCi0rLy8gR2V0IGEgcmVmZXJlbmNlIHJlc3VsdCBmcm9tIHRoZSBmaXJzdCBjYWxs LgotK3ZhciByZWZlcmVuY2UgPSBpbnN0LmV4cG9ydHMuaGFzaCgxMDApOwotKwotKy8vIFJ1biBt YW55IHRpbWVzIHRvIHRyaWdnZXIgdGllci11cCwgdGhlbiB2ZXJpZnkgcmVzdWx0IHN0YXlzIHRo ZSBzYW1lLgotK3ZhciBwYXNzID0gdHJ1ZTsKLStmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkr KykgewotKyAgICB2YXIgciA9IGluc3QuZXhwb3J0cy5oYXNoKDEwMCk7Ci0rICAgIGlmIChyICE9 PSByZWZlcmVuY2UpIHsKLSsgICAgICAgIHBhc3MgPSBmYWxzZTsKLSsgICAgICAgIHRocm93IG5l dyBFcnJvcigiVGllcmluZyBtaXNtYXRjaCBhdCBpdGVyYXRpb24gIiArIGkgKwotKyAgICAgICAg ICAgICI6IGdvdCAweCIgKyBCaWdJbnQuYXNVaW50Tig2NCwgcikudG9TdHJpbmcoMTYpICsKLSsg ICAgICAgICAgICAiLCBleHBlY3RlZCAweCIgKyBCaWdJbnQuYXNVaW50Tig2NCwgcmVmZXJlbmNl KS50b1N0cmluZygxNikpOwotKyAgICB9Ci0rfQotKwotK2Fzc2VydEVxKHBhc3MsIHRydWUpOwot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2Vs ZWN0LWJlbmNoLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtY29tcGFyZS1z ZWxlY3QtYmVuY2guanMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAu LmMxMWNlNzEzZjUxNAotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vcHBjNjQtY29tcGFyZS1zZWxlY3QtYmVuY2guanMKLUBAIC0wLDAgKzEsNzAgQEAKLSsv LyB8aml0LXRlc3R8IHNraXAtaWY6IHRydWUKLSsvLwotKy8vIEJlbmNobWFyayBvbmx5LCBub3Qg YSBjb3JyZWN0bmVzcyB0ZXN0LiBJbnZva2UgbWFudWFsbHkgYXMgc2hvd24gYmVsb3cuCi0rLy8K LSsvLyBNaWNyb2JlbmNobWFyayBmb3Igd2FzbSBjb21wYXJlK3NlbGVjdCBmdXNpb24gb24gUFBD NjQuCi0rLy8KLSsvLyBSdW4gd2l0aDoKLSsvLyAgICRKUyAtLXdhc20tY29tcGlsZXI9b3B0aW1p emluZyBcCi0rLy8gICAgICAganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtY29tcGFy ZS1zZWxlY3QtYmVuY2guanMKLSsvLwotKy8vIFByaW50cyB0aW1pbmdzIGZvciBmb3VyIHZhcmlh bnRzIChpMzIsIGk2NCwgZjMyLCBmNjQpIHRoYXQgZXhlcmNpc2UgYQotKy8vIHRpZ2h0IGxvb3Ag b2YgTiBzZWxlY3Qtb24tY29tcGFyZSBvcGVyYXRpb25zLiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVy Ci0rLy8gc3BlY2lhbGl6aW5nIGxvd2VyV2FzbUNvbXBhcmVBbmRTZWxlY3QgYmV5b25kIEludDMy IGlzIHdvcnRoIHRoZSBjb2RlLgotKy8vCi0rLy8gVGhlIGtlcm5lbCBpcyBhIDEwLXN0YWdlIHNl bGVjdCBjaGFpbiBzbyB0aGUgcGVyLW9wIG92ZXJoZWFkIGRvbWluYXRlcwotKy8vIHRoZSBsb29w IGZyYW1lLiBFYWNoIGl0ZXJhdGlvbiB0b3VjaGVzIDEwIGNvbXBhcmUrc2VsZWN0IG9wcyBwbHVz Ci0rLy8gfnRyaXZpYWwgYWRkcmVzcyBtYXRoLgotKwotK2NvbnN0IE5fSVRFUlMgPSAxXzAwMF8w MDA7Ci0rCi0rZnVuY3Rpb24gYnVpbGRNb2R1bGUoa2luZCkgewotKyAgY29uc3QgdHlwZXMgPSB7 aTMyOiBbJ2kzMicsICdpMzInLCAnaTMyLmx0X3MnXSwKLSsgICAgICAgICAgICAgICAgIHUzMjog WydpMzInLCAnaTMyJywgJ2kzMi5sdF91J10sCi0rICAgICAgICAgICAgICAgICBpNjQ6IFsnaTY0 JywgJ2k2NCcsICdpNjQubHRfcyddLAotKyAgICAgICAgICAgICAgICAgZjMyOiBbJ2YzMicsICdp MzInLCAnZjMyLmx0J10sCi0rICAgICAgICAgICAgICAgICBmNjQ6IFsnZjY0JywgJ2kzMicsICdm NjQubHQnXX1ba2luZF07Ci0rICBjb25zdCBbdHksIGl0ZXJUeSwgY21wT3BdID0gdHlwZXM7Ci0r ICAvLyBMb2FkIGEsIGI7IGNvbXB1dGUgY2hhaW4gb2YgKGIgPCBhID8gYiA6IGEpIDEwIHRpbWVz IHBlciBpdGVyLgotKyAgY29uc3Qgc3RhZ2UgPSBgCi0rICAgIChsb2NhbC5zZXQgJGEKLSsgICAg ICAoc2VsZWN0IChyZXN1bHQgJHt0eX0pCi0rICAgICAgICAobG9jYWwuZ2V0ICRiKSAobG9jYWwu Z2V0ICRhKQotKyAgICAgICAgKCR7Y21wT3B9IChsb2NhbC5nZXQgJGIpIChsb2NhbC5nZXQgJGEp KSkpYDsKLSsgIGNvbnN0IGJvZHkgPSBBcnJheSgxMCkuZmlsbChzdGFnZSkuam9pbignXG4nKTsK LSsgIGNvbnN0IHRleHQgPSBgCi0rICAgIChtb2R1bGUKLSsgICAgICAoZnVuYyAoZXhwb3J0ICJy dW4iKSAocGFyYW0gJG4gaTMyKSAocmVzdWx0ICR7dHl9KQotKyAgICAgICAgKGxvY2FsICRpIGkz MikgKGxvY2FsICRhICR7dHl9KSAobG9jYWwgJGIgJHt0eX0pCi0rICAgICAgICAobG9jYWwuc2V0 ICRhICgke3R5fS5jb25zdCAke2tpbmQgPT09ICdmMzInIHx8IGtpbmQgPT09ICdmNjQnID8gJzMu MTQnIDogJzEyMzQ1J30pKQotKyAgICAgICAgKGxvY2FsLnNldCAkYiAoJHt0eX0uY29uc3QgJHtr aW5kID09PSAnZjMyJyB8fCBraW5kID09PSAnZjY0JyA/ICcyLjcxJyA6ICc2Nzg5MCd9KSkKLSsg ICAgICAgIChsb29wICRMCi0rICAgICAgICAgICR7Ym9keX0KLSsgICAgICAgICAgKGxvY2FsLnNl dCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDEpKSkKLSsgICAgICAgICAg KGJyX2lmICRMIChpMzIubHRfcyAobG9jYWwuZ2V0ICRpKSAobG9jYWwuZ2V0ICRuKSkpKQotKyAg ICAgICAgKGxvY2FsLmdldCAkYSkpKWA7Ci0rICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs ZSh3YXNtVGV4dFRvQmluYXJ5KHRleHQpKTsKLSt9Ci0rCi0rZnVuY3Rpb24gYmVuY2goa2luZCkg ewotKyAgY29uc3QgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShidWlsZE1vZHVsZShr aW5kKSk7Ci0rICAvLyBXYXJtdXAg4oCUIGVuc3VyZSBJb24gY29tcGlsZXMuCi0rICBmb3IgKGxl dCBpID0gMDsgaSA8IDM7IGkrKykgaW5zdC5leHBvcnRzLnJ1bihOX0lURVJTKTsKLSsgIGNvbnN0 IHQwID0gZGF0ZU5vdygpOwotKyAgY29uc3QgcmVzID0gaW5zdC5leHBvcnRzLnJ1bihOX0lURVJT KTsKLSsgIGNvbnN0IHQxID0gZGF0ZU5vdygpOwotKyAgcmV0dXJuIHttczogdDEgLSB0MCwgcmVz dWx0OiByZXN9OwotK30KLSsKLStjb25zdCBraW5kcyA9IFsnaTMyJywgJ3UzMicsICdpNjQnLCAn ZjMyJywgJ2Y2NCddOwotK2NvbnN0IHJ1bnMgPSA1OwotK3ByaW50KGBcbndhc20gY29tcGFyZStz ZWxlY3QgbWljcm9iZW5jaCAoJHtOX0lURVJTLnRvTG9jYWxlU3RyaW5nKCl9IGl0ZXJzLCAxMCBv cHMvaXRlcik6YCk7Ci0rcHJpbnQoYCAgRWFjaCB0aW1pbmcgaXMgdGhlIGJlc3Qgb2YgJHtydW5z fSBydW5zLlxuYCk7Ci0rZm9yIChjb25zdCBraW5kIG9mIGtpbmRzKSB7Ci0rICBjb25zdCBzYW1w bGVzID0gW107Ci0rICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bnM7IGkrKykgc2FtcGxlcy5wdXNo KGJlbmNoKGtpbmQpLm1zKTsKLSsgIHNhbXBsZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpOwotKyAg Y29uc3QgYmVzdCA9IHNhbXBsZXNbMF07Ci0rICBjb25zdCBtZWRpYW4gPSBzYW1wbGVzWyhydW5z IC8gMikgfCAwXTsKLSsgIHByaW50KGAgICR7a2luZC5wYWRFbmQoNCl9IGJlc3Q9JHtiZXN0LnRv Rml4ZWQoMSl9bXMgIG1lZGlhbj0ke21lZGlhbi50b0ZpeGVkKDEpfW1zICAoc2FtcGxlczogJHtz YW1wbGVzLm1hcChzID0+IHMudG9GaXhlZCgwKSkuam9pbignLCcpfSlgKTsKLSt9Ci1kaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtZXh0bXVsLWFsaWFzLmpzIGIv anMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtZXh0bXVsLWFsaWFzLmpzCi1uZXcgZmls ZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi4yYWE5NTA3NzUxYjYKLS0tLSAvZGV2 L251bGwKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1hbGlh cy5qcwotQEAgLTAsMCArMSwxMDcgQEAKLSsvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIFBQQzY0IGk2 NHgyLmV4dG11bF97bG93LGhpZ2h9X2kzMng0X3tzLHV9IHdoZW4gdGhlCi0rLy8gSW9uIHJlZ2lz dGVyIGFsbG9jYXRvciBwaWNrcyBkZXN0ID09IHJocy4KLSsvLwotKy8vIE9uIFBQQzY0IExFLCB0 aGUgb2xkIGltcGxlbWVudGF0aW9uIGV4dHJhY3RlZCBsYW5lcyB2aWEgbXR2c3JkL21mdnNyZCBh bmQKLSsvLyB3cm90ZSB0aGUgbG93LWxhbmUgcHJvZHVjdCB0byBkZXN0IGJlZm9yZSByZWFkaW5n IHJocyBmb3IgdGhlIGhpZ2ggbGFuZS4KLSsvLyBgbXR2c3JkIFhULCBSQWAgbGVhdmVzIERXMSBv ZiBYVCB1bmRlZmluZWQgKFBPV0VSOSB6ZXJvcyBpdCksIHNvIHdoZW4KLSsvLyBkZXN0IGFsaWFz ZWQgcmhzIHRoZSBoaWdoLWxhbmUgZXh0cmFjdCBmcm9tIHJocyByZWFkIGdhcmJhZ2UsIHByb2R1 Y2luZwotKy8vIHplcm8gaW4gdGhlIGhpZ2ggaTY0IGxhbmUuIE9uIFBPV0VSOCB0aGUgRXh0cmFj dExhbmVUb0dQUiBmYWxsYmFjawotKy8vIGFkZGl0aW9uYWxseSBjbG9iYmVyZWQgU2NyYXRjaFNp bWQxMjhSZWcgYmV0d2VlbiB0aGUgdHdvIGV4dHJhY3RzLgotKy8vCi0rLy8gVGhlIGxvb3AgYmVs b3csIGRpc2NvdmVyZWQgdmlhIHdhc20tcmVkdWNlIGZyb20gYXJnb24yLndhc20sIHJlbGlhYmx5 Ci0rLy8gcmVwcm9kdWNlZCB0aGUgbWlzY29tcGlsZTogdGhlIHJlc3VsdCdzIGhpZ2ggaTY0IGxh bmUgd2VudCB0byAwIG9uCi0rLy8gUE9XRVI5IElvbiAvIGdhcmJhZ2Ugb24gUE9XRVI4IElvbiwg d2hpbGUgYmFzZWxpbmUga2VwdCB0aGUgY29ycmVjdAotKy8vIHZhbHVlIChsYW5lMSA9IDQ4KjQ4 ID0gMjMwNCBpbiB0aGUgZmluYWwgaXRlcmF0aW9uKS4KLSsKLSt2YXIgbW9kID0gbmV3IFdlYkFz c2VtYmx5Lk1vZHVsZSh3YXNtVGV4dFRvQmluYXJ5KGAKLSsgIChtb2R1bGUKLSsgICAgKG1lbW9y eSAoZXhwb3J0ICJtZW0iKSAxKQotKyAgICAoZnVuYyAoZXhwb3J0ICJydW5fdSIpIChwYXJhbSAk b3V0IGkzMikKLSsgICAgICAobG9jYWwgJGkgaTMyKSAobG9jYWwgJHY0IHYxMjgpIChsb2NhbCAk djUgdjEyOCkgKGxvY2FsICR2OSB2MTI4KQotKyAgICAgIChsb29wCi0rICAgICAgICAobG9jYWwu c2V0ICR2OQotKyAgICAgICAgICAoaTY0eDIuYWRkCi0rICAgICAgICAgICAgKHYxMjguY29uc3Qg aTMyeDQgMSAwIDAgMCkKLSsgICAgICAgICAgICAoaTY0eDIuZXh0bXVsX2xvd19pMzJ4NF91IChs b2NhbC5nZXQgJHY1KSAobG9jYWwuZ2V0ICR2OSkpKSkKLSsgICAgICAgIChsb2NhbC5zZXQgJHY0 IChsb2NhbC5nZXQgJHY5KSkKLSsgICAgICAgIChsb2NhbC5zZXQgJHY1IChsb2NhbC5nZXQgJHY0 KSkKLSsgICAgICAgICh2MTI4LnN0b3JlIChpMzIuY29uc3QgMCkgKGxvY2FsLmdldCAkdjUpKQot KyAgICAgICAgKGxvY2FsLnNldCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0 IDEpKSkKLSsgICAgICAgIChicl9pZiAwIChpMzIubmUgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25z dCA4KSkpKQotKyAgICAgICh2MTI4LnN0b3JlIChsb2NhbC5nZXQgJG91dCkgKGxvY2FsLmdldCAk djkpKSkKLSsKLSsgICAgKGZ1bmMgKGV4cG9ydCAicnVuX3MiKSAocGFyYW0gJG91dCBpMzIpCi0r ICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICR2IHYxMjgpCi0rICAgICAgKGxvY2FsLnNldCAk diAodjEyOC5jb25zdCBpMzJ4NCAyIDMgNSA3KSkKLSsgICAgICAobG9vcAotKyAgICAgICAgOzsg Rm9yY2UgZGVzdD09cmhzIGFsaWFzaW5nOiB2ID0gZXh0bXVsX2xvd19pMzJ4NF9zKGNvbnN0LCB2 KS4KLSsgICAgICAgIChsb2NhbC5zZXQgJHYKLSsgICAgICAgICAgKGk2NHgyLmV4dG11bF9sb3df aTMyeDRfcwotKyAgICAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDIgMyA1IDcpCi0rICAgICAg ICAgICAgKGxvY2FsLmdldCAkdikpKQotKyAgICAgICAgKGxvY2FsLnNldCAkaSAoaTMyLmFkZCAo bG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDEpKSkKLSsgICAgICAgIChicl9pZiAwIChpMzIubmUg KGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAyKSkpKQotKyAgICAgICh2MTI4LnN0b3JlIChsb2Nh bC5nZXQgJG91dCkgKGxvY2FsLmdldCAkdikpKQotKwotKyAgICAoZnVuYyAoZXhwb3J0ICJydW5f aGlnaF91IikgKHBhcmFtICRvdXQgaTMyKQotKyAgICAgIChsb2NhbCAkaSBpMzIpIChsb2NhbCAk diB2MTI4KQotKyAgICAgIChsb2NhbC5zZXQgJHYgKHYxMjguY29uc3QgaTMyeDQgMCAwIDIgMykp Ci0rICAgICAgKGxvb3AKLSsgICAgICAgIChsb2NhbC5zZXQgJHYKLSsgICAgICAgICAgKGk2NHgy LmV4dG11bF9oaWdoX2kzMng0X3UKLSsgICAgICAgICAgICAodjEyOC5jb25zdCBpMzJ4NCAwIDAg MiAzKQotKyAgICAgICAgICAgIChsb2NhbC5nZXQgJHYpKSkKLSsgICAgICAgIChsb2NhbC5zZXQg JGkgKGkzMi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAxKSkpCi0rICAgICAgICAoYnJf aWYgMCAoaTMyLm5lIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgMikpKSkKLSsgICAgICAodjEy OC5zdG9yZSAobG9jYWwuZ2V0ICRvdXQpIChsb2NhbC5nZXQgJHYpKSkKLSsKLSsgICAgKGZ1bmMg KGV4cG9ydCAicnVuX2hpZ2hfcyIpIChwYXJhbSAkb3V0IGkzMikKLSsgICAgICAobG9jYWwgJGkg aTMyKSAobG9jYWwgJHYgdjEyOCkKLSsgICAgICAobG9jYWwuc2V0ICR2ICh2MTI4LmNvbnN0IGkz Mng0IDAgMCAyIDMpKQotKyAgICAgIChsb29wCi0rICAgICAgICAobG9jYWwuc2V0ICR2Ci0rICAg ICAgICAgIChpNjR4Mi5leHRtdWxfaGlnaF9pMzJ4NF9zCi0rICAgICAgICAgICAgKHYxMjguY29u c3QgaTMyeDQgMCAwIDIgMykKLSsgICAgICAgICAgICAobG9jYWwuZ2V0ICR2KSkpCi0rICAgICAg ICAobG9jYWwuc2V0ICRpIChpMzIuYWRkIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgMSkpKQot KyAgICAgICAgKGJyX2lmIDAgKGkzMi5uZSAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDIpKSkp Ci0rICAgICAgKHYxMjguc3RvcmUgKGxvY2FsLmdldCAkb3V0KSAobG9jYWwuZ2V0ICR2KSkpKQot K2ApKTsKLSsKLStmdW5jdGlvbiBydW5BbmRDaGVjayhpbnN0KSB7Ci0rICBpbnN0LmV4cG9ydHMu cnVuX3UoMCk7Ci0rICAvLyBBZnRlciA4IGl0ZXJhdGlvbnMsIHRoZSB2YWx1ZSBpbiBtZW1vcnkg c2hvdWxkIGhhdmUgbGFuZTEgPT0gMjMwNCA9IDB4OTAwLgotKyAgLy8gQnl0ZXMgOC0xNSAoaTY0 IGxhbmUgMSwgbGl0dGxlLWVuZGlhbikgPSAweDAwMDAwMDAwMDAwMDA5MDAuCi0rICB2YXIgYnVm ID0gbmV3IFVpbnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIsIDAsIDE2KTsKLSsgIHZh ciBoZXggPSBBcnJheS5mcm9tKGJ1ZikubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQo MiwnMCcpKS5qb2luKCcnKTsKLSsgIC8vIEV4cGVjdCBieXRlcyA4LTkgPSAiMDAgMDkiIGFuZCBi eXRlcyAxMC0xNSA9ICIwMCAwMCAwMCAwMCAwMCAwMCIuCi0rICBhc3NlcnRFcShoZXguc2xpY2Uo MTYsIDMyKSwgIjAwMDkwMDAwMDAwMDAwMDAiKTsKLSsKLSsgIGluc3QuZXhwb3J0cy5ydW5fcygx Nik7Ci0rICAvLyBBZnRlciAyIGl0ZXJhdGlvbnMgb2YgdiA9IGV4dG11bF9sb3dfcyhjb25zdCgy LDMsNSw3KSwgdikgc3RhcnRpbmcgdj0oMiwzLDUsNyk6Ci0rICAvLyAgIGl0ZXIgMTogaTY0eDIg bGFuZTAgPSAyKjIgPSA0LCBsYW5lMSA9IDMqMyA9IDkuCi0rICAvLyAgICAgICAgICAgdiBiZWNv bWVzIGkzMng0IFs0LCAwLCA5LCAwXSAoZWFjaCBpNjQgbGFuZSBvY2N1cGllcyB0d28gaTMyIGxh bmVzKS4KLSsgIC8vICAgaXRlciAyOiBleHRtdWxfbG93X3MgcmVhZHMgaTMyIGxhbmVzIDAsIDEg b2YgdiA9ICg0LCAwKS4KLSsgIC8vICAgICAgICAgICBpNjQgbGFuZTAgPSAyKjQgPSA4OyBpNjQg bGFuZTEgPSAzKjAgPSAwLgotKyAgdmFyIGJ1ZjIgPSBuZXcgVWludDhBcnJheShpbnN0LmV4cG9y dHMubWVtLmJ1ZmZlciwgMTYsIDE2KTsKLSsgIHZhciBoZXgyID0gQXJyYXkuZnJvbShidWYyKS5t YXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCcwJykpLmpvaW4oJycpOwotKyAgYXNz ZXJ0RXEoaGV4MiwgIjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7Ci0rCi0rICBp bnN0LmV4cG9ydHMucnVuX2hpZ2hfdSgzMik7Ci0rICAvLyB2ID0gKDAsIDAsIDIsIDMpLiBleHRt dWxfaGlnaCBwaWNrcyBsYW5lcyAyIGFuZCAzLgotKyAgLy8gICBpdGVyIDE6IGxhbmUyX3Byb2Qg PSAyKjIgPSA0OyBsYW5lM19wcm9kID0gMyozID0gOS4gUmVzdWx0IHN0b3JlZCBhdCBieXRlcyAw LTcgKGxhbmUyX3Byb2QpIGFuZCA4LTE1IChsYW5lM19wcm9kKS4KLSsgIC8vICAgaXRlciAyOiB2 IG5vdyBoYXMgaTY0eDIgbGFuZTAgPSA0LCBsYW5lMSA9IDksIGkuZS4gaTMyeDQgbGFuZXMgWzQs IDAsIDksIDBdLgotKyAgLy8gICAgICAgICAgIGV4dG11bF9oaWdoX3UoY29uc3QoMCwwLDIsMyks IHYpIHJlYWRzIGxhbmVzIDIsIDMgb2YgYm90aDoKLSsgIC8vICAgICAgICAgICBjb25zdCBsYW5l MiA9IDIsIGxhbmUzID0gMzsgdiBsYW5lMiA9IDksIGxhbmUzID0gMC4KLSsgIC8vICAgICAgICAg ICByZXN1bHQ6IGxhbmUyX3Byb2QgPSAyKjkgPSAxOCBhdCBieXRlcyAwLTc7IGxhbmUzX3Byb2Qg PSAzKjAgPSAwIGF0IGJ5dGVzIDgtMTUuCi0rICB2YXIgYnVmMyA9IG5ldyBVaW50OEFycmF5KGlu c3QuZXhwb3J0cy5tZW0uYnVmZmVyLCAzMiwgMTYpOwotKyAgdmFyIGhleDMgPSBBcnJheS5mcm9t KGJ1ZjMpLm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsJzAnKSkuam9pbignJyk7 Ci0rICBhc3NlcnRFcShoZXgzLCAiMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsK LSsKLSsgIGluc3QuZXhwb3J0cy5ydW5faGlnaF9zKDQ4KTsKLSsgIHZhciBidWY0ID0gbmV3IFVp bnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIsIDQ4LCAxNik7Ci0rICB2YXIgaGV4NCA9 IEFycmF5LmZyb20oYnVmNCkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwnMCcp KS5qb2luKCcnKTsKLSsgIGFzc2VydEVxKGhleDQsICIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMCIpOwotK30KLSsKLStydW5BbmRDaGVjayhuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo bW9kKSk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtc2lt ZC12ci1jbG9iYmVyLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtc2ltZC12 ci1jbG9iYmVyLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5k NWY3OWExODQwYTYKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93 YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJlci5qcwotQEAgLTAsMCArMSwxNzkgQEAKLSsvLyB8aml0 LXRlc3R8IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJsZWQoKQotKy8vCi0rLy8gUmVncmVzc2lvbiB0 ZXN0cyBmb3IgUFBDNjQgU0lNRCBoZWxwZXJzIHRoYXQgdXNlIFZSMS4uVlI1IGFzIHVuZGVjbGFy ZWQKLSsvLyBzY3JhdGNoIGFuZCBzaWxlbnRseSBjb3JydXB0IGxpdmUgd2FzbSB2MTI4IHZhbHVl cyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yCi0rLy8gaGFzIHBsYWNlZCBpbiB0aG9zZSBWUnMuCi0r Ly8KLSsvLyBCYWNrZ3JvdW5kOiBQUEM2NCBTaW1kMTI4IGxpdmVzIGluIFZSMC4uVlIzMS4gVlIw IGlzIG5vbi1hbGxvY2F0YWJsZQotKy8vICg9IFNjcmF0Y2hTaW1kMTI4UmVnKTsgVlIxLi5WUjMx IGFyZSBhbGxvY2F0YWJsZS4gVGhlIGhlbHBlcnMgYmVsb3cKLSsvLyBoaXN0b3JpY2FsbHkgdXNl ZCBWUjEuLlZSNSBhcyB1bmRlY2xhcmVkIHNjcmF0Y2g6Ci0rLy8KLSsvLyAgIG5lZ0ludDh4MTYs IG5lZ0ludDE2eDggICAgICAgICAgICAgICAgICAgIDogY2xvYmJlciBWUjEgKGFsbCBDUFVzKQot Ky8vICAgbmVnSW50MzJ4NCwgbmVnSW50NjR4MiAoUE9XRVI4IGZhbGxiYWNrKSAgOiBjbG9iYmVy IFZSMSAoUE9XRVI4IG9ubHkpCi0rLy8gICBleHRBZGRQYWlyd2lzZUludDh4MTYgIChzaWduZWQv dW5zaWduZWQpICA6IGNsb2JiZXIgVlIxLCBWUjIsIFZSMwotKy8vICAgZXh0QWRkUGFpcndpc2VJ bnQxNng4ICAoc2lnbmVkL3Vuc2lnbmVkKSAgOiBjbG9iYmVyIFZSMSwgVlIyLCBWUjMKLSsvLyAg IHVuc2lnbmVkV2lkZW5IaWdoSW50MzJ4NCAgICAgICAgICAgICAgICAgIDogY2xvYmJlciBWUjEK LSsvLwotKy8vIEVhY2ggdGVzdDoKLSsvLyAgIC0gbG9hZHMgYG5MaXZlYCAicHJlc2VydmUiIHYx MjggdmFsdWVzIGZyb20gbWVtb3J5IGF0IG9mZnNldHMgMTYuLjE2KzE2Km5MaXZlCi0rLy8gICAt IGxvYWRzIE9ORSBhZGRpdGlvbmFsICJpbnB1dCIgdjEyOCA9IHJlcGVhdCgweDE4KSBhdCBvZmZz ZXQgMTI4Ci0rLy8gICAtIGFwcGxpZXMgdGhlIHN1c3BlY3QgaGVscGVyIHRvIHRoZSBpbnB1dAot Ky8vICAgLSBzdG9yZXMgdGhlIG5MaXZlIHByZXNlcnZlZCB2YWx1ZXMgYmFjayB0byBtZW1vcnkg YXQgb2Zmc2V0cyAwLi4xNipuTGl2ZQotKy8vICAgLSBzdG9yZXMgdGhlIGhlbHBlciByZXN1bHQg YXQgb2Zmc2V0IDE2Km5MaXZlCi0rLy8KLSsvLyBXaXRob3V0IHRoZSBmaXgsIG9uZSBvZiB0aGUg cHJlc2VydmVkIGxvY2FscyAod2hpY2hldmVyIHRoZSBhbGxvY2F0b3IKLSsvLyBwbGFjZWQgaW4g dGhlIGNsb2JiZXJlZCBWUikgcmVhZHMgYmFjayBhcyB0aGUgc3RhZ2VkIGlucHV0IHZhbHVlICgw eDE4KQotKy8vIGluc3RlYWQgb2YgaXRzIG9yaWdpbmFsLiBXaXRoIHRoZSBmaXggKHRoZSBoZWxw ZXIgdXNpbmcgU2NyYXRjaFNpbWQxMjhTY29wZQotKy8vIG9yIHByb3BlciBWUi1uYW1lc3BhY2Ug ZW1pdCksIGFsbCBwcmVzZXJ2ZWQgbG9jYWxzIHJldGFpbiB0aGVpciB2YWx1ZXMuCi0rCi0rY29u c3QgUFJFU0VSVkVfUEFUVEVSTlMgPSBbMHhBMSwgMHhCMiwgMHhDMywgMHhENCwgMHhFNSwgMHhG NiwgMHgwNywgMHgyOV07Ci0rY29uc3QgSU5QVVRfQllURSA9IDB4MTg7Ci0rCi0rZnVuY3Rpb24g aW5pdChtZW0pIHsKLSsgIC8vIFNsb3RzIGF0IG9mZnNldCAxNiwgMzIsIC4uLiwgMTYrMTYqNyBo b2xkIHRoZSBwcmVzZXJ2ZSBwYXR0ZXJucy4KLSsgIGZvciAobGV0IHNsb3QgPSAwOyBzbG90IDwg UFJFU0VSVkVfUEFUVEVSTlMubGVuZ3RoOyBzbG90KyspIHsKLSsgICAgZm9yIChsZXQgaSA9IDA7 IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgbWVtWzE2ICsgc2xvdCAqIDE2ICsgaV0gPSBQUkVTRVJW RV9QQVRURVJOU1tzbG90XTsKLSsgICAgfQotKyAgfQotKyAgLy8gVGhlIGhlbHBlciBpbnB1dCBp cyBhdCBvZmZzZXQgMTI4ICg9IDE2ICsgMTYqNyArIDE2ID0gMTQ0PyBubywgMTYgKyAxNio4ID0g MTQ0KS4KLSsgIC8vIFVzZSBhIGZpeGVkIG9mZnNldCBQQVNUIHRoZSBwcmVzZXJ2ZSBhcmVhLiBX aXRoIG5MaXZlIG1heCA3LCBwcmVzZXJ2ZSB1c2VzCi0rICAvLyAxNi4uKDE2KzE2KjctMSkgPSAx Ni4uMTI3LiBJbnB1dCBnb2VzIGF0IDE0NCB0byBsZWF2ZSBhIDE2LWJ5dGUgZ2FwLgotKyAgY29u c3QgSU5QVVRfT0ZGU0VUID0gMTQ0OwotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBt ZW1bSU5QVVRfT0ZGU0VUICsgaV0gPSBJTlBVVF9CWVRFOwotK30KLSsKLStmdW5jdGlvbiByZXBl YXQoYnl0ZSkgewotKyAgY29uc3QgYSA9IG5ldyBBcnJheSgxNik7Ci0rICBmb3IgKGxldCBpID0g MDsgaSA8IDE2OyBpKyspIGFbaV0gPSBieXRlOwotKyAgcmV0dXJuIGE7Ci0rfQotKwotKy8vIFZl cmlmeSBuTGl2ZSBwcmVzZXJ2ZWQgc2xvdHMgbWF0Y2ggUFJFU0VSVkVfUEFUVEVSTlMgYXQgb3V0 cHV0IG9mZnNldHMKLSsvLyAwLi4xNipuTGl2ZSwgYW5kIHRoYXQgdGhlIHJlc3VsdCBzbG90IGF0 IDE2Km5MaXZlIG1hdGNoZXMgYGV4cGVjdGVkUmVzdWx0YC4KLStmdW5jdGlvbiBjaGVjayhvcE5h bWUsIG1lbSwgbkxpdmUsIGV4cGVjdGVkUmVzdWx0KSB7Ci0rICBmb3IgKGxldCBzbG90ID0gMDsg c2xvdCA8IG5MaXZlOyBzbG90KyspIHsKLSsgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsr KSB7Ci0rICAgICAgY29uc3QgZ290ID0gbWVtW3Nsb3QgKiAxNiArIGldOwotKyAgICAgIGNvbnN0 IHdhbnQgPSBQUkVTRVJWRV9QQVRURVJOU1tzbG90XTsKLSsgICAgICBhc3NlcnRFcShnb3QsIHdh bnQsCi0rICAgICAgICAgICAgICAgYCR7b3BOYW1lfTogbGl2ZSBzbG90ICR7c2xvdH0gYnl0ZSAk e2l9OiBnb3QgMHgke2dvdC50b1N0cmluZygxNil9LCBleHBlY3RlZCAweCR7d2FudC50b1N0cmlu ZygxNil9IChhbGxvY2F0b3ItY2xvYmJlcmVkIFZSPylgKTsKLSsgICAgfQotKyAgfQotKyAgZm9y IChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgIGNvbnN0IGdvdCA9IG1lbVtuTGl2ZSAq IDE2ICsgaV07Ci0rICAgIGNvbnN0IHdhbnQgPSBleHBlY3RlZFJlc3VsdFtpXTsKLSsgICAgYXNz ZXJ0RXEoZ290LCB3YW50LAotKyAgICAgICAgICAgICBgJHtvcE5hbWV9OiByZXN1bHQgYnl0ZSAk e2l9OiBnb3QgMHgke2dvdC50b1N0cmluZygxNil9LCBleHBlY3RlZCAweCR7d2FudC50b1N0cmlu ZygxNil9YCk7Ci0rICB9Ci0rfQotKwotKy8vIEJ1aWxkIGEgd2FzbSBtb2R1bGUgdGhhdDoKLSsv LyAgLSBsb2FkcyBgbkxpdmVgIHByZXNlcnZlIHYxMjggbG9jYWxzIGZyb20gbWVtb3J5IGF0IG9m ZnNldHMgMTYuLjE2Km5MaXZlCi0rLy8gIC0gbG9hZHMgT05FIGlucHV0IHYxMjggZnJvbSBvZmZz ZXQgMTQ0Ci0rLy8gIC0gYXBwbGllcyBgb3BgIHRvIHRoZSBpbnB1dAotKy8vICAtIHN0b3JlcyBh bGwgYG5MaXZlICsgMWAgdjEyOCB2YWx1ZXMgYmFjayB0byBtZW1vcnkgYXQgb2Zmc2V0cyAwLi4x NipuTGl2ZQotK2Z1bmN0aW9uIGJ1aWxkTW9kdWxlKG9wLCBuTGl2ZSkgewotKyAgY29uc3QgbG9j YWxEZWNscyA9IFtdOwotKyAgY29uc3QgaW5pdExvYWRzID0gW107Ci0rICBjb25zdCBmaW5hbFN0 b3JlcyA9IFtdOwotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTGl2ZTsgaSsrKSB7Ci0rICAgIGxv Y2FsRGVjbHMucHVzaChgKGxvY2FsICR2JHtpfSB2MTI4KWApOwotKyAgICBpbml0TG9hZHMucHVz aChgKGxvY2FsLnNldCAkdiR7aX0gKHYxMjgubG9hZCAoaTMyLmNvbnN0ICR7MTYgKyBpICogMTZ9 KSkpYCk7Ci0rICAgIGZpbmFsU3RvcmVzLnB1c2goYCh2MTI4LnN0b3JlIChpMzIuY29uc3QgJHtp ICogMTZ9KSAobG9jYWwuZ2V0ICR2JHtpfSkpYCk7Ci0rICB9Ci0rICAvLyBUaGUgaGVscGVyIGlu cHV0ICsgcmVzdWx0LgotKyAgbG9jYWxEZWNscy5wdXNoKGAobG9jYWwgJGlucHV0IHYxMjgpYCk7 Ci0rICBpbml0TG9hZHMucHVzaChgKGxvY2FsLnNldCAkaW5wdXQgKHYxMjgubG9hZCAoaTMyLmNv bnN0IDE0NCkpKWApOwotKyAgZmluYWxTdG9yZXMucHVzaChgKHYxMjguc3RvcmUgKGkzMi5jb25z dCAke25MaXZlICogMTZ9KSAobG9jYWwuZ2V0ICRpbnB1dCkpYCk7Ci0rCi0rICBjb25zdCB0ZXh0 ID0gYAotKyAgICAobW9kdWxlCi0rICAgICAgKG1lbW9yeSAoZXhwb3J0ICJtZW0iKSAxKQotKyAg ICAgIChmdW5jIChleHBvcnQgInJ1biIpCi0rICAgICAgICAke2xvY2FsRGVjbHMuam9pbignXG4g ICAgICAgICcpfQotKyAgICAgICAgJHtpbml0TG9hZHMuam9pbignXG4gICAgICAgICcpfQotKyAg ICAgICAgKGxvY2FsLnNldCAkaW5wdXQgKCR7b3B9IChsb2NhbC5nZXQgJGlucHV0KSkpCi0rICAg ICAgICAke2ZpbmFsU3RvcmVzLmpvaW4oJ1xuICAgICAgICAnKX0KLSsgICAgICApCi0rICAgIClg OwotKyAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUod2FzbVRleHRUb0JpbmFyeSh0ZXh0 KSk7Ci0rfQotKwotK2Z1bmN0aW9uIHJ1bk9uZShvcE5hbWUsIG9wLCBuTGl2ZSwgZXhwZWN0ZWRS ZXN1bHQpIHsKLSsgIGNvbnN0IG1vZCA9IGJ1aWxkTW9kdWxlKG9wLCBuTGl2ZSk7Ci0rICBjb25z dCBpbnN0ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZCk7Ci0rICBjb25zdCBtZW0gPSBu ZXcgVWludDhBcnJheShpbnN0LmV4cG9ydHMubWVtLmJ1ZmZlcik7Ci0rICAvLyBSdW4gbWFueSB0 aW1lcyBzbyBCYXNlbGluZSArIElvbiBib3RoIHNlZSBpdC4KLSsgIGZvciAobGV0IHdhcm0gPSAw OyB3YXJtIDwgNTA7IHdhcm0rKykgewotKyAgICBpbml0KG1lbSk7Ci0rICAgIGluc3QuZXhwb3J0 cy5ydW4oKTsKLSsgICAgY2hlY2sob3BOYW1lLCBtZW0sIG5MaXZlLCBleHBlY3RlZFJlc3VsdCk7 Ci0rICB9Ci0rfQotKwotKy8vIC0tLS0gTmVnYXRlIGhlbHBlcnMgLS0tLQotKy8vCi0rLy8gSW5w dXQgbGFuZSA9IDB4MTggPSAyNC4gbmVnKDI0KSA9IC0yNC4KLSsvLyBpOHgxNi5uZWcgOiAtMjQg bW9kIDI1NiA9IDIzMiA9IDB4RTggcGVyIGJ5dGUuCi0rLy8gaTE2eDgubmVnIDogbGFuZSA9IDB4 MTgxOCA9IDYxNjgsIG5lZyA9IC02MTY4IG1vZCA2NTUzNiA9IDB4RTdFOC4KLSsvLyAgICAgICAg ICAgICBNZW1vcnkgTEU6IHBlciBpMTYgbGFuZSBieXRlcyAweEU4IDB4RTcuCi0rLy8gaTMyeDQu bmVnIDogbGFuZSA9IDB4MTgxODE4MTggPSA0MDQyMzIyMTYsIG5lZyA9IDB4RTdFN0U3RTguCi0r Ly8gICAgICAgICAgICAgTWVtb3J5IExFOiBwZXIgaTMyIGxhbmUgYnl0ZXMgMHhFOCAweEU3IDB4 RTcgMHhFNy4KLSsvLyBpNjR4Mi5uZWcgOiBsYW5lID0gMHgxODE4MTgxODE4MTgxODE4LCBuZWcg PSAweEU3RTdFN0U3RTdFN0U3RTguCi0rLy8gICAgICAgICAgICAgTWVtb3J5IExFOiBwZXIgaTY0 IGxhbmUgYnl0ZXMgMHhFOCAweEU3IDB4RTcgMHhFNyAweEU3IDB4RTcgMHhFNyAweEU3LgotKwot K3J1bk9uZSgiaTh4MTYubmVnIiwgImk4eDE2Lm5lZyIsIDQsIHJlcGVhdCgweEU4KSk7Ci0rcnVu T25lKCJpMTZ4OC5uZWciLCAiaTE2eDgubmVnIiwgNCwKLSsgICAgICAgWzB4RTgsMHhFNywgMHhF OCwweEU3LCAweEU4LDB4RTcsIDB4RTgsMHhFNywKLSsgICAgICAgIDB4RTgsMHhFNywgMHhFOCww eEU3LCAweEU4LDB4RTcsIDB4RTgsMHhFN10pOwotK3J1bk9uZSgiaTMyeDQubmVnIiwgImkzMng0 Lm5lZyIsIDQsCi0rICAgICAgIFsweEU4LDB4RTcsMHhFNywweEU3LCAweEU4LDB4RTcsMHhFNyww eEU3LAotKyAgICAgICAgMHhFOCwweEU3LDB4RTcsMHhFNywgMHhFOCwweEU3LDB4RTcsMHhFN10p OwotK3J1bk9uZSgiaTY0eDIubmVnIiwgImk2NHgyLm5lZyIsIDQsCi0rICAgICAgIFsweEU4LDB4 RTcsMHhFNywweEU3LDB4RTcsMHhFNywweEU3LDB4RTcsCi0rICAgICAgICAweEU4LDB4RTcsMHhF NywweEU3LDB4RTcsMHhFNywweEU3LDB4RTddKTsKLSsKLSsvLyAtLS0tIGV4dEFkZFBhaXJ3aXNl IGhlbHBlcnMgLS0tLQotKy8vCi0rLy8gZXh0YWRkX3BhaXJ3aXNlIHJlYWRzIGFkamFjZW50IHBh aXJzIGFuZCB3aWRlbnMtdGhlbi1zdW1zIHRoZW0uCi0rLy8gSW5wdXQgPSByZXBlYXQoMHgxOCkg PSAyNC4KLSsvLyBpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfcyA6IDI0ICsgMjQgPSA0OCA9 IDB4MDAzMCBwZXIgaTE2IGxhbmUuCi0rLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVtb3J5IExFOiAweDMwIDB4MDAgcGVyIGxhbmUgw5cgOCBsYW5lcy4KLSsvLyBpMTZ4OC5l eHRhZGRfcGFpcndpc2VfaTh4MTZfdSA6IHNhbWUgc2luY2UgaW5wdXQgaXMgcG9zaXRpdmUuCi0r Ly8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3MgOiBpMTYgbGFuZSA9IDB4MTgxOCA9IDYx NjgsIHN1bSA9IDEyMzM2ID0gMHgwMDAwMzAzMC4KLSsvLyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNZW1vcnkgTEU6IDB4MzAgMHgzMCAweDAwIDB4MDAgcGVyIGxhbmUgw5cgNCBs YW5lcy4KLSsvLyBpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfdSA6IHNhbWUgc2luY2UgaW5w dXQgaXMgcG9zaXRpdmUuCi0rCi0rcnVuT25lKCJpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZf cyIsCi0rICAgICAgICJpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfcyIsIDQsCi0rICAgICAg IFsweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDAsCi0rICAgICAgICAw eDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDBdKTsKLSsKLStydW5PbmUo ImkxNng4LmV4dGFkZF9wYWlyd2lzZV9pOHgxNl91IiwKLSsgICAgICAgImkxNng4LmV4dGFkZF9w YWlyd2lzZV9pOHgxNl91IiwgNCwKLSsgICAgICAgWzB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMw LDB4MDAsIDB4MzAsMHgwMCwKLSsgICAgICAgIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4 MDAsIDB4MzAsMHgwMF0pOwotKwotK3J1bk9uZSgiaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4 X3MiLAotKyAgICAgICAiaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3MiLCA0LAotKyAgICAg ICBbMHgzMCwweDMwLDB4MDAsMHgwMCwgMHgzMCwweDMwLDB4MDAsMHgwMCwKLSsgICAgICAgIDB4 MzAsMHgzMCwweDAwLDB4MDAsIDB4MzAsMHgzMCwweDAwLDB4MDBdKTsKLSsKLStydW5PbmUoImkz Mng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF91IiwKLSsgICAgICAgImkzMng0LmV4dGFkZF9wYWly d2lzZV9pMTZ4OF91IiwgNCwKLSsgICAgICAgWzB4MzAsMHgzMCwweDAwLDB4MDAsIDB4MzAsMHgz MCwweDAwLDB4MDAsCi0rICAgICAgICAweDMwLDB4MzAsMHgwMCwweDAwLCAweDMwLDB4MzAsMHgw MCwweDAwXSk7Ci0rCi0rLy8gLS0tLSB1bnNpZ25lZFdpZGVuSGlnaEludDMyeDQgLS0tLQotKy8v Ci0rLy8gaTY0eDIuZXh0ZW5kX2hpZ2hfaTMyeDRfdTogdGFrZSB0aGUgaGlnaCB0d28gaTMyIGxh bmVzIChsYW5lcyAyIGFuZCAzKSBvZgotKy8vIHRoZSBpbnB1dCwgemVyby1leHRlbmQgZWFjaCB0 byBpNjQsIGxheSB0aGVtIG91dCBhcyBpNjR4Mi4KLSsvLyBJbnB1dCBsYW5lID0gMHgxODE4MTgx OCAocG9zaXRpdmUsID00MDQyMzIyMTYpLgotKy8vIFJlc3VsdDogdHdvIGk2NCBsYW5lcywgZWFj aCA9IDB4MDAwMDAwMDAxODE4MTgxOC4KLSsvLyBNZW1vcnkgTEU6IHBlciBpNjQgbGFuZSBieXRl cyAweDE4IDB4MTggMHgxOCAweDE4IDB4MDAgMHgwMCAweDAwIDB4MDAuCi0rCi0rcnVuT25lKCJp NjR4Mi5leHRlbmRfaGlnaF9pMzJ4NF91IiwKLSsgICAgICAgImk2NHgyLmV4dGVuZF9oaWdoX2kz Mng0X3UiLCA0LAotKyAgICAgICBbMHgxOCwweDE4LDB4MTgsMHgxOCwweDAwLDB4MDAsMHgwMCww eDAwLAotKyAgICAgICAgMHgxOCwweDE4LDB4MTgsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwXSk7 Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHJvZmlsaW5nLmpzIGIv anMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHJvZmlsaW5nLmpzCi1pbmRleCBmNDg3MmIwN2Nk ZTguLmNjZDk2OTBhMjYyZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3Byb2ZpbGluZy5qcwotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHJvZmlsaW5n LmpzCi1AQCAtMTE3LDYgKzExNywxMyBAQCBmb3IgKGxldCB0eXBlIG9mIFsnZjMyJywgJ2Y2NCdd KSB7Ci0gICAgICAgICBpZiAoZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJhcm02NCIpKSB7Ci0gICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICB9Ci0rICAgICAgICAvLyBQUEM2NCBpbmxpbmVz IGNlaWwvZmxvb3IvdHJ1bmMgYXMgZnJpcC9mcmltL2ZyaXogKHNlZQotKyAgICAgICAgLy8gQXNz ZW1ibGVyLXBwYzY0LmggSGFzUm91bmRJbnN0cnVjdGlvbiksIHNvIG5vIGJ1aWx0aW4gdGh1bmsK LSsgICAgICAgIC8vIGZyYW1lcyBleGlzdCB0byBwcm9maWxlLiBgbmVhcmVzdGAgc3RpbGwgZ29l cyB0aHJvdWdoIHRoZQotKyAgICAgICAgLy8gdGh1bmsgYmVjYXVzZSBQUEM2NCdzIGZyaW4gaXMg bm90IElFRUUgcm91bmQtdG8tZXZlbi4KLSsgICAgICAgIGlmIChnZXRCdWlsZENvbmZpZ3VyYXRp b24oInBwYzY0IikgJiYgZnVuYyAhPT0gJ25lYXJlc3QnKSB7Ci0rICAgICAgICAgICAgY29udGlu dWU7Ci0rICAgICAgICB9Ci0gICAgICAgICB0ZXN0KGAobW9kdWxlCi0gICAgICAgICAgICAgKGZ1 bmMgKGV4cG9ydCAiIikgKHBhcmFtICR7dHlwZX0pIChyZXN1bHQgJHt0eXBlfSkKLSAgICAgICAg ICAgICAgICAgbG9jYWwuZ2V0IDAKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMv d2FzbS9yZWdyZXNzLXBwYzY0LWV4dHJhY3QtbGFuZS1jdHouanMgYi9qcy9zcmMvaml0LXRlc3Qv dGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LWV4dHJhY3QtbGFuZS1jdHouanMKLW5ldyBmaWxlIG1v ZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmUyY2Y1ZGVmNTQxZQotLS0tIC9kZXYvbnVs bAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1leHRyYWN0 LWxhbmUtY3R6LmpzCi1AQCAtMCwwICsxLDQ5IEBACi0rLy8gfGppdC10ZXN0fCAtLXdhc20tY29t cGlsZXI9b3B0aW1pemluZzsgc2tpcC1pZjogIXdhc21TaW1kRW5hYmxlZCgpCi0rLy8KLSsvLyBS ZWdyZXNzaW9uIHRlc3QgZm9yIGEgUFBDNjQgaTMyeDQuZXh0cmFjdF9sYW5lIGNhbm9uaWNhbGl6 YXRpb24gYnVnLgotKy8vCi0rLy8gRXh0cmFjdExhbmVUb0dQUiBsZWF2ZXMgdGhlIGFkamFjZW50 IGxhbmUgaW4gdGhlIGhpZ2ggMzIgYml0cyBvZiB0aGUgR1BSIGZvcgotKy8vIHRoZSB1bnNoaWZ0 ZWQgbGFuZXMgKDAgYW5kIDIpLCBzbyBleHRyYWN0TGFuZUludDMyeDQgbXVzdCBzaWduLWV4dGVu ZCBpdHMgaTMyCi0rLy8gcmVzdWx0IChhcyB0aGUgaTh4MTYvaTE2eDggZXh0cmFjdHMgZG8pLiBX aXRob3V0IHRoYXQsIGEgY29uc3VtZXIgdGhhdCByZWFkcwotKy8vIHRoZSBmdWxsIDY0LWJpdCBy ZWdpc3RlciBzZWVzIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggaGFsZi4gVGhlIFBPV0VSOCBpMzIuY3R6 Ci0rLy8gZW11bGF0aW9uIGlzIHN1Y2ggYSBjb25zdW1lcjogaXRzIDY0LWJpdCBuZWcvYW5kLiB6 ZXJvLWNoZWNrIGRpc2FncmVlcyB3aXRoCi0rLy8gaXRzIDMyLWJpdCBjbnRsencsIHNvIGN0eiBv ZiBhIHplcm8gbGFuZSBzaXR0aW5nIG5leHQgdG8gYSBub256ZXJvIG5laWdoYm91cgotKy8vIHJl dHVybmVkIC0xIGluc3RlYWQgb2YgMzIuCi0rLy8KLSsvLyBUaGUgdmVjdG9yIGNvbWVzIGZyb20g bWVtb3J5IChydW50aW1lLCBub3QgY29uc3RhbnQtZm9sZGFibGUpIGFuZCBpcyBwYXNzZWQKLSsv LyB0aHJvdWdoIGEgU0lNRCBvcCBzbyB0aGUgZXh0cmFjdCBpcyBhIGdlbnVpbmUgdmVjdG9yLXJl Z2lzdGVyIGV4dHJhY3QuIFJ1bgotKy8vIHVuZGVyIE1PWl9QUEM2NF9GT1JDRV9QT1dFUjg9MSB0 byBleGVyY2lzZSB0aGUgZW11bGF0ZWQgY3R6IHBhdGg7IGluIGV2ZXJ5Ci0rLy8gb3RoZXIgbW9k ZSB0aGlzIGlzIHNpbXBseSBhIGNvcnJlY3RuZXNzIGNoZWNrLgotKwotK2NvbnN0IGlucyA9IHdh c21FdmFsVGV4dChgKG1vZHVsZQotKyAgKG1lbW9yeSAoZXhwb3J0ICJtZW0iKSAxKQotKyAgKGZ1 bmMgJHYgKHJlc3VsdCB2MTI4KQotKyAgICA7OyBpZGVudGl0eSBBTkQga2VlcHMgdGhlIHZhbHVl IGluIGEgdmVjdG9yIHJlZ2lzdGVyIGFuZCBmb3JjZXMgYSByZWFsCi0rICAgIDs7IGV4dHJhY3RM YW5lSW50MzJ4NCByYXRoZXIgdGhhbiBhbiBleHRyYWN0LW9mLWxvYWQgZm9sZC4KLSsgICAgKHYx MjguYW5kICh2MTI4LmxvYWQgKGkzMi5jb25zdCAwKSkgKHYxMjguY29uc3QgaTMyeDQgLTEgLTEg LTEgLTEpKSkKLSsgIChmdW5jIChleHBvcnQgImN0ejAiKSAocmVzdWx0IGkzMikgKGkzMi5jdHog KGkzMng0LmV4dHJhY3RfbGFuZSAwIChjYWxsICR2KSkpKQotKyAgKGZ1bmMgKGV4cG9ydCAiY3R6 MSIpIChyZXN1bHQgaTMyKSAoaTMyLmN0eiAoaTMyeDQuZXh0cmFjdF9sYW5lIDEgKGNhbGwgJHYp KSkpCi0rICAoZnVuYyAoZXhwb3J0ICJjdHoyIikgKHJlc3VsdCBpMzIpIChpMzIuY3R6IChpMzJ4 NC5leHRyYWN0X2xhbmUgMiAoY2FsbCAkdikpKSkKLSsgIChmdW5jIChleHBvcnQgImN0ejMiKSAo cmVzdWx0IGkzMikgKGkzMi5jdHogKGkzMng0LmV4dHJhY3RfbGFuZSAzIChjYWxsICR2KSkpKQot KyAgKGZ1bmMgKGV4cG9ydCAic2V4dDAiKSAocmVzdWx0IGk2NCkgKGk2NC5leHRlbmRfaTMyX3Mg KGkzMng0LmV4dHJhY3RfbGFuZSAwIChjYWxsICR2KSkpKQotKyAgKGZ1bmMgKGV4cG9ydCAic2V4 dDIiKSAocmVzdWx0IGk2NCkgKGk2NC5leHRlbmRfaTMyX3MgKGkzMng0LmV4dHJhY3RfbGFuZSAy IChjYWxsICR2KSkpKQotKylgKS5leHBvcnRzOwotKwotK2NvbnN0IG1lbSA9IG5ldyBJbnQzMkFy cmF5KGlucy5tZW0uYnVmZmVyKTsKLStmdW5jdGlvbiBzZXRMYW5lcyhhLCBiLCBjLCBkKSB7IG1l bVswXSA9IGE7IG1lbVsxXSA9IGI7IG1lbVsyXSA9IGM7IG1lbVszXSA9IGQ7IH0KLSsKLSsvLyBF YWNoIGxhbmUgPSAwIHN1cnJvdW5kZWQgYnkgbm9uemVybyBuZWlnaGJvdXJzOiBjdHogbXVzdCBi ZSAzMiwgbmV2ZXIgLTEuCi0rc2V0TGFuZXMoMCwgLTEsIC0xLCAtMSk7IGFzc2VydEVxKGlucy5j dHowKCksIDMyKTsKLStzZXRMYW5lcygtMSwgMCwgLTEsIC0xKTsgYXNzZXJ0RXEoaW5zLmN0ejEo KSwgMzIpOwotK3NldExhbmVzKC0xLCAtMSwgMCwgLTEpOyBhc3NlcnRFcShpbnMuY3R6MigpLCAz Mik7Ci0rc2V0TGFuZXMoLTEsIC0xLCAtMSwgMCk7IGFzc2VydEVxKGlucy5jdHozKCksIDMyKTsK LSsKLSsvLyBOb256ZXJvIGxhbmVzOiBjdHogb2YgdGhlIGxhbmUgdmFsdWUsIHJlZ2FyZGxlc3Mg b2YgbmVpZ2hib3Vycy4KLStzZXRMYW5lcygweDEwLCAtMSwgMHgxMDAwMDAsIC0xKTsKLSthc3Nl cnRFcShpbnMuY3R6MCgpLCA0KTsKLSthc3NlcnRFcShpbnMuY3R6MigpLCAyMCk7Ci0rCi0rLy8g QSBuZWdhdGl2ZSBsYW5lIG11c3Qgc2lnbi1leHRlbmQgY29ycmVjdGx5ICh0aGUgY2Fub25pY2Fs aXphdGlvbiBpcyBleHRzdykuCi0rc2V0TGFuZXMoLTIsIDcsIC0zLCA3KTsKLSthc3NlcnRFcShp bnMuc2V4dDAoKSwgLTJuKTsKLSthc3NlcnRFcShpbnMuc2V4dDIoKSwgLTNuKTsKLWRpZmYgLS1n aXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LXNlbGVjdC1jb25k aXRpb24uanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LXNlbGVj dC1jb25kaXRpb24uanMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAu LmMzODk3NWRjZTg1OQotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vcmVncmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0aW9uLmpzCi1AQCAtMCwwICsxLDMwIEBA Ci0rLy8gfGppdC10ZXN0fCAtLXdhc20tY29tcGlsZXI9b3B0aW1pemluZzsgc2tpcC1pZjogIXdh c21TaW1kRW5hYmxlZCgpCi0rLy8KLSsvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgUFBDNjQgd2Fz bSBJb24gbWlzY29tcGlsZSBvZiBgc2VsZWN0YCB3aXRoIGEgMzItYml0Ci0rLy8gY29uZGl0aW9u LiB2aXNpdFdhc21TZWxlY3QgdGVzdGVkIHRoZSBpMzIgY29uZGl0aW9uIHdpdGggYSA2NC1iaXQg Y29tcGFyZQotKy8vIChjbXBkaSAvIGJyYW5jaFRlc3RQdHIpLiBXaGVuIHRoZSBjb25kaXRpb24g d2FzIHplcm8gaW4gaXRzIGxvdyAzMiBiaXRzIGJ1dAotKy8vIGhhZCBnYXJiYWdlIGluIHRoZSBo aWdoIDMyIGJpdHMgKGFzIGNhbiBoYXBwZW4gdW5kZXIgcmVnaXN0ZXIgcHJlc3N1cmUpLCB0aGUK LSsvLyA2NC1iaXQgdGVzdCByZWFkIGl0IGFzIG5vbi16ZXJvIGFuZCBzZWxlY3QgcmV0dXJuZWQg dGhlIHdyb25nIG9wZXJhbmQuCi0rLy8KLSsvLyBIZXJlIHRoZSBjb25kaXRpb24gYCR4M2AgaXMg MDsgYHNlbGVjdCgkeDgsIC05NTI4MDk4MjgsICR4MylgIG11c3QgdGhlcmVmb3JlCi0rLy8gcmV0 dXJuIC05NTI4MDk4MjguIFRoZSBzdXJyb3VuZGluZyBTSU1EIHNodWZmbGUvYml0c2VsZWN0L3N3 aXp6bGUgY2hhaW4KLSsvLyBzdXBwbGllcyB0aGUgdjEyOCByZWdpc3RlciBwcmVzc3VyZSB0aGF0 IGV4cG9zZWQgdGhlIGJ1Zy4KLSsKLStjb25zdCB3YXQgPSBgKG1vZHVsZSAoZnVuYyAoZXhwb3J0 ICJmIikgKHJlc3VsdCBpNjQpCi0rICAobG9jYWwgJHgzIGkzMikobG9jYWwgJHg3IGkzMikobG9j YWwgJHg4IGkzMikKLSsgIChsb2NhbCAkdzAgdjEyOCkobG9jYWwgJHcxIHYxMjgpKGxvY2FsICR3 MiB2MTI4KShsb2NhbCAkdzMgdjEyOCkKLSsgIChsb2NhbCAkdzQgdjEyOCkobG9jYWwgJHc1IHYx MjgpKGxvY2FsICR3NiB2MTI4KShsb2NhbCAkdzcgdjEyOCkKLSsgIChsb2NhbC5zZXQgJHcwICh2 MTI4LmNvbnN0IGkzMng0IDE3MDg0NDM0NTQgMTUzMjIxODY5NSAyMTA3NDIzNjEwIC0xMjY1Nzc1 MDA1KSkKLSsgIChsb2NhbC5zZXQgJHcyICh2MTI4LmNvbnN0IGkzMng0IC03NTIzMTIzNTUgLTYy NTUzMDU3MiAtODQ0NjY2NTAwIDgzMjAzNjQwOCkpCi0rICAobG9jYWwuc2V0ICR3NyAodjEyOC5j b25zdCBpMzJ4NCAxMTUwMDM0OTYgLTk3MDQ0MTExNyAtNDMyMjU5MzUgMTg3NDEyODIwNCkpCi0r ICAobG9jYWwuc2V0ICR3NCAoaTh4MTYuc2h1ZmZsZSAxNSAxOCAxMyAyIDYgMjIgMjAgOCAxOSAx MCAxMiA4IDExIDUgNiAyOCAobG9jYWwuZ2V0ICR3NykgKGxvY2FsLmdldCAkdzMpKSkKLSsgIChs b2NhbC5zZXQgJHc2ICh2MTI4LmJpdHNlbGVjdCAobG9jYWwuZ2V0ICR3NCkgKGxvY2FsLmdldCAk dzApIChsb2NhbC5nZXQgJHc3KSkpCi0rICAobG9jYWwuc2V0ICR3MSAodjEyOC5jb25zdCBpMzJ4 NCAtMTYzNTAyNTI2NCAtNjI5Nzg0MTMyIDE1MTc4Njk4NTIgMTY1MTc3MTgyNSkpCi0rICAobG9j YWwuc2V0ICR3NyAodjEyOC5iaXRzZWxlY3QgKGxvY2FsLmdldCAkdzYpIChsb2NhbC5nZXQgJHcy KSAobG9jYWwuZ2V0ICR3MikpKQotKyAgKGxvY2FsLnNldCAkdzYgKGk4eDE2LnN3aXp6bGUgKGxv Y2FsLmdldCAkdzEpIChsb2NhbC5nZXQgJHc3KSkpCi0rICAobG9jYWwuc2V0ICR4MyAoaTMyeDQu ZXh0cmFjdF9sYW5lIDIgKGxvY2FsLmdldCAkdzYpKSkKLSsgIChsb2NhbC5zZXQgJHg3IChzZWxl Y3QgKGxvY2FsLmdldCAkeDgpIChpMzIuY29uc3QgLTk1MjgwOTgyOCkgKGxvY2FsLmdldCAkeDMp KSkKLSsgIChpNjQuZXh0ZW5kX2kzMl9zIChsb2NhbC5nZXQgJHg3KSkpKWA7Ci0rCi0rY29uc3Qg aW5zID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUod2Fz bVRleHRUb0JpbmFyeSh3YXQpKSk7Ci0rYXNzZXJ0RXEoaW5zLmV4cG9ydHMuZigpLCAtOTUyODA5 ODI4bik7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1w cGM2NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20v cmVncmVzcy1wcGM2NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwMDAwLi40ODg3ZjhkZjExOWMKLS0tLSAvZGV2L251bGwKLSsrKyBi L2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJhcC1leGl0LXNpbWQt c2F2ZS5qcwotQEAgLTAsMCArMSw2NCBAQAotKy8vIHxqaXQtdGVzdHwgZXhpdHN0YXR1czogMDsg c2tpcC1pZjogIXdhc21TaW1kRW5hYmxlZCgpCi0rLy8KLSsvLyBSZWdyZXNzaW9uIHRlc3QgZm9y IHRoZSBQUEM2NCB3YXNtIHRyYXAgZXhpdCBsb3NpbmcgbGl2ZSB2MTI4IHN0YXRlLgotKy8vCi0r Ly8gT24gUFBDNjQsIGRvdWJsZXMgbGl2ZSBpbiB0aGUgRlBScyAoVlNSMC0zMSkgd2hpbGUgd2Fz bSB2MTI4IHZhbHVlcyBsaXZlIGluCi0rLy8gdGhlIFZScyAoVlNSMzItNjMpIC0tIGRpc2pvaW50 IHBoeXNpY2FsIHBvb2xzLiBUaGUgdHJhcCBleGl0J3MKLSsvLyBSZWdzVG9QcmVzZXJ2ZSB1c2Vk IEFsbERvdWJsZU1hc2sgb25seSwgc28gYSB0cmFwIGZpcmluZyB3aGlsZSBhIHYxMjggd2FzCi0r Ly8gbGl2ZSByZXN1bWVkIHdpdGggd2hhdGV2ZXIgdGhlIEMrKyBpbnRlcnJ1cHQgcGF0aCdzIGxp YmMgbGVmdCBpbiB0aGUgVlJzCi0rLy8gKGdsaWJjJ3MgbWlzYWxpZ25lZCB2ZWN0b3IgbWVtY3B5 IGxlYXZlcyBsdnNsIGFsaWdubWVudC1jb250cm9sIGJ5dGUKLSsvLyBwYXR0ZXJucyB0aGVyZSku IEludGVycnVwdCBjaGVja3MgZmlyZSB2aWEgdHJhcHMgYXQgbG9vcCBiYWNrLWVkZ2VzLCB3aGVy ZQotKy8vIGEgbG9vcC1jYXJyaWVkIHYxMjggYWNjdW11bGF0b3IgaXMgZXhhY3RseSB3aGF0IGlz IGxpdmUuCi0rLy8KLSsvLyBUaGUgbG9vcCBiZWxvdyBrZWVwcyBhbiBpMzJ4NCBhY2N1bXVsYXRv ciBsaXZlIGFjcm9zcyBldmVyeSBiYWNrLWVkZ2Ugd2hpbGUKLSsvLyBpbnRlcnJ1cHRzIGZpcmUg cmVwZWF0ZWRseTsgdGhlIGNhbGxiYWNrIGRvZXMgbGFyZ2UgbWlzYWxpZ25lZCBjb3BpZXMgdG8K LSsvLyBwdWxsIGxpYmMncyB2ZWN0b3IgbWVtY3B5IHRocm91Z2ggdGhlIFZScy4gT24gYW4gdW5m aXhlZCBidWlsZCAocmVhbAotKy8vIHNpbGljb247IHRoZSBzaW11bGF0b3IncyBWUnMgYXJlIGlu c3VsYXRlZCBmcm9tIG5hdGl2ZSBsaWJjKSB0aGUKLSsvLyBhY2N1bXVsYXRvciBjb21lcyBiYWNr IGhvbGRpbmcgZ2FyYmFnZSBhbmQgdGhlIGZpbmFsIGxhbmUgdmFsdWVzIGFyZSB3cm9uZy4KLSsK LStjb25zdCBpbnMgPSB3YXNtRXZhbFRleHQoYChtb2R1bGUKLSsgIChmdW5jIChleHBvcnQgInJ1 biIpIChwYXJhbSAkbiBpMzIpIChyZXN1bHQgaTMyKQotKyAgICAobG9jYWwgJGFjYyB2MTI4KQot KyAgICAoYmxvY2sgJGRvbmUKLSsgICAgICAobG9vcCAkdG9wCi0rICAgICAgICAoYnJfaWYgJGRv bmUgKGkzMi5lcXogKGxvY2FsLmdldCAkbikpKQotKyAgICAgICAgKGxvY2FsLnNldCAkYWNjIChp MzJ4NC5hZGQgKGxvY2FsLmdldCAkYWNjKSAodjEyOC5jb25zdCBpMzJ4NCAxIDIgMyA0KSkpCi0r ICAgICAgICAobG9jYWwuc2V0ICRuIChpMzIuc3ViIChsb2NhbC5nZXQgJG4pIChpMzIuY29uc3Qg MSkpKQotKyAgICAgICAgKGJyICR0b3ApKSkKLSsgICAgOzsgRm9sZCB0aGUgZm91ciBsYW5lcyBz byBhbnkgbGFuZSBjb3JydXB0aW9uIHNob3dzIHVwLgotKyAgICAoaTMyLnhvcgotKyAgICAgIChp MzIueG9yIChpMzJ4NC5leHRyYWN0X2xhbmUgMCAobG9jYWwuZ2V0ICRhY2MpKQotKyAgICAgICAg ICAgICAgIChpMzIucm90bCAoaTMyeDQuZXh0cmFjdF9sYW5lIDEgKGxvY2FsLmdldCAkYWNjKSkg KGkzMi5jb25zdCA4KSkpCi0rICAgICAgKGkzMi54b3IgKGkzMi5yb3RsIChpMzJ4NC5leHRyYWN0 X2xhbmUgMiAobG9jYWwuZ2V0ICRhY2MpKSAoaTMyLmNvbnN0IDE2KSkKLSsgICAgICAgICAgICAg ICAoaTMyLnJvdGwgKGkzMng0LmV4dHJhY3RfbGFuZSAzIChsb2NhbC5nZXQgJGFjYykpIChpMzIu Y29uc3QgMjQpKSkpKQotKylgKS5leHBvcnRzOwotKwotKy8vIE1pc2FsaWduZWQgYmlnIGNvcGll cyBkcml2ZSBnbGliYydzIGx2c2wvdnBlcm0gbWVtY3B5IHBhdGggb24gUFBDLgotK2NvbnN0IGJp ZyA9IG5ldyBVaW50OEFycmF5KDEgPDwgMjApOwotK2NvbnN0IHNyYyA9IGJpZy5zdWJhcnJheSgx LCAoMSA8PCAxOSkgKyAxKTsKLStjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheSgxIDw8IDE5KTsK LSsKLStsZXQgZmlyZXMgPSAwOwotK2Z1bmN0aW9uIG9uSW50ZXJydXB0KCkgewotKyAgZmlyZXMr KzsKLSsgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgIGRzdC5zZXQoc3JjKTsK LSsgIH0KLSsgIGlmIChmaXJlcyA8IDI1KSB7Ci0rICAgIHRpbWVvdXQoMC4wMiwgb25JbnRlcnJ1 cHQpOwotKyAgfQotKyAgcmV0dXJuIHRydWU7Ci0rfQotKwotK2Z1bmN0aW9uIGV4cGVjdGVkKG4p IHsKLSsgIGNvbnN0IHIgPSAoeCwgaykgPT4gKCh4IDw8IGspIHwgKHggPj4+ICgzMiAtIGspKSkg fCAwOwotKyAgY29uc3QgbCA9IFtuIHwgMCwgKDIgKiBuKSB8IDAsICgzICogbikgfCAwLCAoNCAq IG4pIHwgMF07Ci0rICByZXR1cm4gKChsWzBdIF4gcihsWzFdLCA4KSkgXiAocihsWzJdLCAxNikg XiByKGxbM10sIDI0KSkpIHwgMDsKLSt9Ci0rCi0rY29uc3QgTiA9IDEgPDwgMjY7Ci0rdGltZW91 dCgwLjAyLCBvbkludGVycnVwdCk7Ci0rY29uc3QgZ290ID0gaW5zLnJ1bihOKTsKLSsvLyBDYW5j ZWwgYW55IHBlbmRpbmcgd2F0Y2hkb2cgYmVmb3JlIGZpbmlzaGluZy4KLSt0aW1lb3V0KC0xKTsK LSthc3NlcnRFcShnb3QsIGV4cGVjdGVkKE4pKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9yZWdyZXNzL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLmpz IGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1 Y2UtYW5kLWJyYW5jaC5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAw MC4uYjdlYzBkOTU0OGJiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVz dHMvd2FzbS9yZWdyZXNzL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQtYnJhbmNoLmpzCi1AQCAt MCwwICsxLDcgQEAKLSsvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgUFBDNjQtc3BlY2lmaWMgd2Fz bSBJb24gY3Jhc2ggaW4KLSsvLyBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21SZWR1Y2VBbmRCcmFu Y2hTaW1kMTI4IOKAlCBpdCBjYWxsZWQKLSsvLyBMQmxvY2s6OmxhYmVsKCkgZGlyZWN0bHkgb24g dGhlIGJyYW5jaCB0YXJnZXRzIHdpdGhvdXQgZ29pbmcgdGhyb3VnaAotKy8vIHNraXBUcml2aWFs QmxvY2tzKCksIHNvIGEgdHJpdmlhbCBnb3RvLW9ubHkgc3VjY2Vzc29yIHRyaXBwZWQKLSsvLyBM QmxvY2s6OmxhYmVsKCkncyAhaXNUcml2aWFsKCkgYXNzZXJ0aW9uLiBSZWR1Y2VkIGZyb20gZ3Jh bnRrb3QuY29tL3BvbHkKLSsvLyB3aXRoIHdhc20tcmVkdWNlLiBUcmlnZ2VycyB0aGUgYnVnIHVu ZGVyIC0td2FzbS1jb21waWxlcj1vcHRpbWl6aW5nLgotK25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo b3MuZmlsZS5yZWFkRmlsZShzY3JpcHRkaXIgKyAiL2J1Zy1wcGM2NC1zaW1kLXJlZHVjZS1hbmQt YnJhbmNoLndhc20iLCAiYmluYXJ5IikpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy93YXNtL3NpbWQvYnVnMTk0NjYxOC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3NpbWQvYnVnMTk0NjYxOC5qcwotaW5kZXggY2MwMmQwZDhkZmQ3Li5mY2YzYTJhMzVlODIgMTAw NjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1ZzE5NDY2MTguanMK LSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvYnVnMTk0NjYxOC5qcwotQEAg LTQ4LDcgKzQ4LDEyIEBAIGZvciAobGV0IG9wIG9mIFsiZjMyeDQucmVsYXhlZF9taW4iLCAiZjMy eDQucmVsYXhlZF9tYXgiLAotICAgICAvLyBiYXNlbGluZS4KLSAgICAgbGV0IHJlc3VsdDEgPSBp LmV4cG9ydHMudmFyaWFudDEoKTsKLSAgICAgbGV0IHJlc3VsdDIgPSBpLmV4cG9ydHMudmFyaWFu dDIoKTsKLS0gICAgaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtNjQiKSkgewotKyAgICBp ZiAoZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2NCIpKSB7Ci0rICAgICAgLy8gUFBDNjQ6IHh2 bWluc3AveHZtYXhzcCBhbHdheXMgcmV0dXJucyB0aGUgbm9uLU5hTiBvcGVyYW5kLAotKyAgICAg IC8vIHJlZ2FyZGxlc3Mgb2Ygb3BlcmFuZCBvcmRlci4gQm90aCB2YXJpYW50cyBnaXZlIHplcm8g KG5vbi1OYU4pLgotKyAgICAgIGFzc2VydEVxKHJlc3VsdDEsIDApOwotKyAgICAgIGFzc2VydEVx KHJlc3VsdDIsIDApOwotKyAgICB9IGVsc2UgaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJt NjQiKSkgewotICAgICAgIC8vIFRoZSByZWxheGVkX21pbi9tYXggb3BlcmF0aW9uIGFwcGVhcnMg dG8gcHJvcGFnYXRlIE5hTnMgc3ltbWV0cmljYWxseQotICAgICAgIC8vIGZyb20gZWl0aGVyIGFy ZwotICAgICAgIGFzc2VydEVxKHJlc3VsdDEsIDY1NTM1KTsKLWRpZmYgLS1naXQgYS9qcy9zcmMv aml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFseXNpcy5qcyBiL2pzL3NyYy9qaXQtdGVz dC90ZXN0cy93YXNtL3NpbWQvaW9uLWFuYWx5c2lzLmpzCi1pbmRleCBkMTJhZjZlNmZiYzkuLjMz NWY4MzFmZjZhOSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQv aW9uLWFuYWx5c2lzLmpzCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lv bi1hbmFseXNpcy5qcwotQEAgLTEyLDYgKzEyLDcgQEAKLSAvLyBnZW5lcmF0ZXMgdGhlIGV4cGVj dGVkIHJlc3VsdC4KLSAKLSB2YXIgaXNBcm02NCA9IGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJt NjQiKTsKLSt2YXIgaXNQUEM2NCA9IGdldEJ1aWxkQ29uZmlndXJhdGlvbigicHBjNjQiKTsKLSAK LSAvLyAzMi1iaXQgcGVybXV0YXRpb24gdGhhdCBpcyBub3QgYSByb3RhdGlvbi4KLSBsZXQgcGVy bTMyeDRfcGF0dGVybiA9IFs0LCA1LCA2LCA3LCAxMiwgMTMsIDE0LCAxNSwgOCwgOSwgMTAsIDEx LCAwLCAxLCAyLCAzXTsKLUBAIC04NDYsNyArODQ3LDcgQEAgZm9yICggbGV0IFt0eTEyOCxzaXpl XSBvZiBbWydpOHgxNicsMV0sIFsnaTE2eDgnLDJdLCBbJ2kzMng0Jyw0XV0gKSB7Ci0gICAgIGxl dCBvcHMgPSB7IGFsbF90cnVlOiBhbGxUcnVlLCBhbnlfdHJ1ZTogYW55VHJ1ZSwgYml0bWFzayB9 OwotIAotICAgICBmb3IgKCBsZXQgb3Agb2YgWydhbnlfdHJ1ZScsICdhbGxfdHJ1ZScsICdiaXRt YXNrJ10gKSB7Ci0tICAgICAgICBsZXQgZm9sZGVkID0gb3AgIT0gJ2JpdG1hc2snIHx8IChzaXpl ID09IDIgJiYgIWlzQXJtNjQpOwotKyAgICAgICAgbGV0IGZvbGRlZCA9IG9wICE9ICdiaXRtYXNr JyB8fCAoc2l6ZSA9PSAyICYmICFpc0FybTY0ICYmICFpc1BQQzY0KTsKLSAgICAgICAgIGxldCBv cGVyYXRpb24gPSBvcCA9PSAnYW55X3RydWUnID8gJ3YxMjguYW55X3RydWUnIDogYCR7dHkxMjh9 LiR7b3B9YDsKLSAgICAgICAgIGxldCBwb3NpdGl2ZSA9Ci0gICAgICAgICAgICAgd2FzbUNvbXBp bGUoCi1AQCAtODk4LDEyICs4OTksMTIgQEAgZm9yICggbGV0IFt0eTEyOCxzaXplXSBvZiBbWydp OHgxNicsMV0sIFsnaTE2eDgnLDJdLCBbJ2kzMng0Jyw0XV0gKSB7Ci0gCi0gLy8gQml0c2VsZWN0 IHdpdGggY29uc3RhbnQgbWFzayBmb2xkZWQgaW50byBzaHVmZmxlIG9wZXJhdGlvbgotIAotLWlm ICghaXNBcm02NCkgewotK2lmICghaXNBcm02NCAmJiAhaXNQUEM2NCkgewotICAgd2FzbUNvbXBp bGUoYAotICAgKG1vZHVsZSAoZnVuYyAocGFyYW0gdjEyOCkgKHBhcmFtIHYxMjgpIChyZXN1bHQg djEyOCkKLSAgICAgKHYxMjguYml0c2VsZWN0IChsb2NhbC5nZXQgMCkgKGxvY2FsLmdldCAxKSAo djEyOC5jb25zdCBpOHgxNiAwIC0xIC0xIDAgMCAwIDAgMCAtMSAtMSAtMSAtMSAtMSAtMSAwIDAp KSkpCi0gICBgKTsKLS0gICAgICBhc3NlcnRFcSh3YXNtU2ltZEFuYWx5c2lzKCksICJzaHVmZmxl IC0+IGJsZW5kIDh4MTYiKTsgIAotKyAgICAgIGFzc2VydEVxKHdhc21TaW1kQW5hbHlzaXMoKSwg InNodWZmbGUgLT4gYmxlbmQgOHgxNiIpOwotIH0KLSAKLSAvLyBMaWJyYXJ5Ci1kaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9Bc3NlbWJsZXIuaCBiL2pzL3NyYy9qaXQvQXNzZW1ibGVyLmgKLWluZGV4 IDk3YzJlMzM3NjI1Yi4uY2I3MjQ0Nzc2NjA1IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9Bc3Nl bWJsZXIuaAotKysrIGIvanMvc3JjL2ppdC9Bc3NlbWJsZXIuaAotQEAgLTE5LDYgKzE5LDggQEAK LSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9Bc3NlbWJsZXItbG9vbmc2NC5oIgotICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0Fzc2Vt Ymxlci1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGlu Y2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fV0FTTTMyKQotICMgIGluY2x1ZGUgImppdC93YXNtMzIvQXNzZW1ibGVyLXdhc20zMi5o IgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9q aXQvQmFzZWxpbmVJQy5jcHAgYi9qcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwCi1pbmRleCBjMzU2 NTM4YTAyNGUuLjVhYjYzMTgzOGYwZSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvQmFzZWxpbmVJ Qy5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvQmFzZWxpbmVJQy5jcHAKLUBAIC0xMjAsNiArMTIwLDgg QEAgQWxsb2NhdGFibGVHZW5lcmFsUmVnaXN0ZXJTZXQgQmFzZWxpbmVJQ0F2YWlsYWJsZUdlbmVy YWxSZWdzKHNpemVfdCBudW1JbnB1dHMpIHsKLSAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFzKFBzZXVk b1N0YWNrUG9pbnRlcikpOwotICAgTU9aX0FTU0VSVCghcmVncy5oYXMoUmVhbFN0YWNrUG9pbnRl cikpOwotICAgTU9aX0FTU0VSVCghcmVncy5oYXMoSUNUYWlsQ2FsbFJlZykpOwotKyNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgIHJlZ3MudGFrZShJQ1RhaWxDYWxsUmVnKTsKLSAj ZW5kaWYKLSAgIHJlZ3MudGFrZShJQ1N0dWJSZWcpOwotIAotZGlmZiAtLWdpdCBhL2pzL3NyYy9q aXQvQ2FjaGVJUkNvbXBpbGVyLmNwcCBiL2pzL3NyYy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNwcAot aW5kZXggNGViOTUyZTQ5N2UzLi5lZTQ4ODg0OTUxMDMgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0 L0NhY2hlSVJDb21waWxlci5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvQ2FjaGVJUkNvbXBpbGVyLmNw cAotQEAgLTEwMzAyLDYgKzEwMzAyLDE0IEBAIGJvb2wgQ2FjaGVJUkNvbXBpbGVyOjplbWl0Q29u Y2F0U3RyaW5nc1Jlc3VsdChTdHJpbmdPcGVyYW5kSWQgbGhzSWQsCi0gICAgIGxpdmVSZWdzLmFk ZChJQ1RhaWxDYWxsUmVnKTsKLSAjZW5kaWYKLSAgICAgbGl2ZVJlZ3MudGFrZVVuY2hlY2tlZChv dXRwdXQudmFsdWVSZWcoKSk7Ci0rCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgICAgLy8g T24gUFBDNjQsIExSIGlzIGFuIFNQUiwgbm90IGEgR1BSLCBzbyBJQ1RhaWxDYWxsUmVnIGlzIGEg cmVndWxhcgotKyAgICAvLyBHUFIgdGhhdCBkb2VzIG5vdCBzaGFkb3cgTFIuIFRoZSBpbm5lciBi Y3RybCB3aWxsIGNsb2JiZXIgTFIsIHNvCi0rICAgIC8vIHNhdmUvcmVzdG9yZSBpdCBleHBsaWNp dGx5LgotKyAgICBtYXNtLnhzX21mbHIocjApOwotKyAgICBtYXNtLnB1c2gocjApOwotKyNlbmRp ZgotICAgICBtYXNtLlB1c2hSZWdzSW5NYXNrKGxpdmVSZWdzKTsKLSAKLSAgICAgLy8gVGhlIHN0 dWIgZXhwZWN0cyBsaHMgaW4gQ2FsbFRlbXBSZWcwIGFuZCByaHMgaW4gQ2FsbFRlbXBSZWcxLgot QEAgLTEwMzIyLDExICsxMDMzMCwxOSBAQCBib29sIENhY2hlSVJDb21waWxlcjo6ZW1pdENvbmNh dFN0cmluZ3NSZXN1bHQoU3RyaW5nT3BlcmFuZElkIGxoc0lkLAotICAgICBtYXNtLmJyYW5jaFRl c3RQdHIoQXNzZW1ibGVyOjpaZXJvLCBDYWxsVGVtcFJlZzUsIENhbGxUZW1wUmVnNSwgJnZtQ2Fs bCk7Ci0gICAgIG1hc20udGFnVmFsdWUoSlNWQUxfVFlQRV9TVFJJTkcsIENhbGxUZW1wUmVnNSwg b3V0cHV0LnZhbHVlUmVnKCkpOwotICAgICBtYXNtLlBvcFJlZ3NJbk1hc2sobGl2ZVJlZ3MpOwot KyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAgIG1hc20ucG9wKHIwKTsKLSsgICAgbWFzbS54 c19tdGxyKHIwKTsKLSsjZW5kaWYKLSAgICAgbWFzbS5qdW1wKCZkb25lKTsKLSAKLSAgICAgbWFz bS5iaW5kKCZ2bUNhbGwpOwotICAgICBtYXNtLnNldEZyYW1lUHVzaGVkKGZyYW1lUHVzaGVkKTsK LSAgICAgbWFzbS5Qb3BSZWdzSW5NYXNrKGxpdmVSZWdzKTsKLSsjaWZkZWYgSlNfQ09ERUdFTl9Q UEM2NAotKyAgICBtYXNtLnBvcChyMCk7Ci0rICAgIG1hc20ueHNfbXRscihyMCk7Ci0rI2VuZGlm Ci0gICB9Ci0gCi0gICB7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmNw cCBiL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAKLWluZGV4IGExYzAxNDA5ZTlmNy4uMmEy YzYwMDdhZWMwIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmNwcAotKysr IGIvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmNwcAotQEAgLTI1MTksNiArMjUxOSwxMiBAQCBz dGF0aWMgYm9vbCBQcmVwYXJlQW5kRXhlY3V0ZVJlZ0V4cChNYWNyb0Fzc2VtYmxlciYgbWFzbSwg UmVnaXN0ZXIgcmVnZXhwLAotICAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhBZGRyZXNz KEZyYW1lUG9pbnRlciwgaW9PZmZzZXQpLCB0ZW1wMik7Ci0gICBtYXNtLlB1c2hSZWdzSW5NYXNr KHZvbGF0aWxlUmVncyk7Ci0gICBtYXNtLnNldHVwVW5hbGlnbmVkQUJJQ2FsbCh0ZW1wMyk7Ci0r I2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgIC8vIHRlbXAxIGFsaWFzZXMgYXJncmVn cyBvbiB0aGlzIHBsYXRmb3JtLCBzbyB3ZSBuZWVkIHRvIHJldXNlIHRlbXAzCi0rICAvLyBvciB3 ZSdsbCBzdG9tcCBvbiB0aGUgY29kZSBwb2ludGVyIHdoZW4gd2UgcGFzcyB0aGUgZmlyc3QgQUJJ IGFyZ3VtZW50LgotKyAgbWFzbS5tb3ZlUHRyKGNvZGVQb2ludGVyLCB0ZW1wMyk7Ci0rICBjb2Rl UG9pbnRlciA9IHRlbXAzOwotKyNlbmRpZgotICAgbWFzbS5wYXNzQUJJQXJnKHRlbXAyKTsKLSAg IG1hc20uY2FsbFdpdGhBQkkoY29kZVBvaW50ZXIpOwotICAgbWFzbS5zdG9yZUNhbGxJbnQzMlJl c3VsdCh0ZW1wMSk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmggYi9q cy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuaAotaW5kZXggNThjMDQ3ZGVhNDFiLi4zNzgxYjk1OTVk ZmQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuaAotKysrIGIvanMvc3Jj L2ppdC9Db2RlR2VuZXJhdG9yLmgKLUBAIC0yMyw2ICsyMyw4IEBACi0gIyAgaW5jbHVkZSAiaml0 L2xvb25nNjQvQ29kZUdlbmVyYXRvci1sb29uZzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpCi0gIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQvQ29kZUdlbmVyYXRvci1yaXNj djY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGluY2x1ZGUgImpp dC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1dBU00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMyL0NvZGVHZW5lcmF0b3Itd2FzbTMyLmgi Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2pp dC9FZmZlY3RpdmVBZGRyZXNzQW5hbHlzaXMuY3BwIGIvanMvc3JjL2ppdC9FZmZlY3RpdmVBZGRy ZXNzQW5hbHlzaXMuY3BwCi1pbmRleCBlMWJkMWJkMDQ1ZWYuLjg4Njk3YzA2OTA3YyAxMDA2NDQK LS0tLSBhL2pzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcAotKysrIGIvanMv c3JjL2ppdC9FZmZlY3RpdmVBZGRyZXNzQW5hbHlzaXMuY3BwCi1AQCAtNjAsNyArNjAsNyBAQCBz dGF0aWMgYm9vbCBPZmZzZXRJc1NtYWxsRW5vdWdoKGludDMyX3QgaW1tKSB7Ci0gICAvLyBgbW92 biAjaW1tYC4gIGFybTMyIGlzIHNpbWlsYXIuCi0gICByZXR1cm4gaW1tID49IC0weEZGRkYgJiYg aW1tIDw9IDB4RkZGRjsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX01J UFM2NCkKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQotICAgcmV0dXJuIGltbSA+PSAtMHhGRkYgJiYgaW1tIDw9IDB4RkZGOwotICNl bGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9OT05F KQotICAgcmV0dXJuIHRydWU7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9FeGVjdXRhYmxlQWxs b2NhdG9yLmNwcCBiL2pzL3NyYy9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKLWluZGV4IDM0 MGE2Mzk2NGI1Mi4uYzkzMzZmZThlYzRlIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9FeGVjdXRh YmxlQWxsb2NhdG9yLmNwcAotKysrIGIvanMvc3JjL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw cAotQEAgLTMwNiwxMyArMzA2LDE5IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cG9pc29u Q29kZShKU1J1bnRpbWUqIHJ0LAotICAgICB9Ci0gICB9Ci0gCi0tICAvLyBNYWtlIHRoZSBwb29s cyBleGVjdXRhYmxlIGFnYWluIGFuZCBkcm9wIHJlZmVyZW5jZXMuIFdlIGRvbid0IGZsdXNoIHRo ZQotLSAgLy8gSUNhY2hlIGhlcmUgdG8gbm90IGFkZCBleHRyYSBvdmVyaGVhZC4KLSsgIC8vIE1h a2UgdGhlIHBvb2xzIGV4ZWN1dGFibGUgYWdhaW4gYW5kIGRyb3AgcmVmZXJlbmNlcy4gT24gYXJj aGl0ZWN0dXJlcyB3aXRoCi0rICAvLyBpbmNvaGVyZW50IElDYWNoZSAoUFBDNjQpLCB3ZSBtdXN0 IGZsdXNoIHRvIHByZXZlbnQgc3RhbGUgaW5zdHJ1Y3Rpb24KLSsgIC8vIGV4ZWN1dGlvbiB3aGVu IGNvZGUgcmVnaW9ucyBhcmUgcmV1c2VkIGFmdGVyIHN3ZWVwaW5nLgotICAgZm9yIChzaXplX3Qg aSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoKCk7IGkrKykgewotICAgICBFeGVjdXRhYmxlUG9vbCog cG9vbCA9IHJhbmdlc1tpXS5wb29sOwotICAgICBpZiAocG9vbC0+aXNNYXJrZWQoKSkgewotKyNp ZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAgICAgcmVwcm90ZWN0UG9vbChydCwgcG9vbCwgUHJv dGVjdGlvblNldHRpbmc6OkV4ZWN1dGFibGUsCi0rICAgICAgICAgICAgICAgICAgICBNdXN0Rmx1 c2hJQ2FjaGU6Olllcyk7Ci0rI2Vsc2UKLSAgICAgICByZXByb3RlY3RQb29sKHJ0LCBwb29sLCBQ cm90ZWN0aW9uU2V0dGluZzo6RXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgIE11c3RG bHVzaElDYWNoZTo6Tm8pOwotKyNlbmRpZgotICAgICAgIHBvb2wtPnVubWFyaygpOwotICAgICB9 Ci0gICAgIHBvb2wtPnJlbGVhc2UoKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0ZsdXNoSUNh Y2hlLmNwcCBiL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuY3BwCi1pbmRleCBkM2IxNjU3YTZiZTIu Ljk1OTA2ODdjOTgwMyAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuY3BwCi0r KysgYi9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcAotQEAgLTEzLDcgKzEzLDggQEAKLSAjICBp bmNsdWRlICJqaXQvYXJtNjQvdml4bC9TaW11bGF0b3Itdml4bC5oIgotICNlbmRpZgotIAotLSNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0r I2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkg fHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gCi0gIyAgaWZkZWYgX19saW51 eF9fCi0gIyAgICBpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci1kaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9GbHVzaElDYWNoZS5oIGIvanMvc3JjL2ppdC9GbHVzaElDYWNoZS5oCi1pbmRleCBhZjc5 ZGEzNTZlZTUuLjU4Mzk2ZjYyYWUwZCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvRmx1c2hJQ2Fj aGUuaAotKysrIGIvanMvc3JjL2ppdC9GbHVzaElDYWNoZS5oCi1AQCAtMjEsNyArMjEsNyBAQCBp bmxpbmUgdm9pZCBGbHVzaElDYWNoZSh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkgewotIH0KLSAj ZWxpZiAoZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0 KSkgfHwgIFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0r ICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCi0gCi0gLy8gSW52YWxpZGF0ZSB0aGUgZ2l2ZW4gY29kZSByYW5nZSBmcm9tIHRoZSBpY2Fj aGUuIFRoaXMgd2lsbCBhbHNvIGZsdXNoIHRoZQotIC8vIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0 aGlzIGNvcmUuIElmIHRoaXMgY29kZSBpcyB0byBiZSBleGVjdXRlZCBvbiBhbm90aGVyCi1AQCAt MzcsNyArMzcsNyBAQCBpbmxpbmUgdm9pZCBGbHVzaElDYWNoZSh2b2lkKiBjb2RlLCBzaXplX3Qg c2l6ZSkgeyBNT1pfQ1JBU0goKTsgfQotICMgIGVycm9yICJVbmtub3duIGFyY2hpdGVjdHVyZSEi Ci0gI2VuZGlmCi0gCi0tI2lmIChkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fWDY0KSkgfHwgICAgICBcCi0rI2lmIChkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSkgfHwgICAgXAotICAgICBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotICAgICBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAKLUBAIC01NSwxMCArNTUsMTEgQEAgaW5saW5lIHZv aWQgRmx1c2hFeGVjdXRpb25Db250ZXh0KCkgeyBNT1pfQ1JBU0goKTsgfQotIGlubGluZSBib29s IENhbkZsdXNoRXhlY3V0aW9uQ29udGV4dEZvckFsbFRocmVhZHMoKSB7IE1PWl9DUkFTSCgpOyB9 Ci0gaW5saW5lIHZvaWQgRmx1c2hFeGVjdXRpb25Db250ZXh0Rm9yQWxsVGhyZWFkcygpIHsgTU9a X0NSQVNIKCk7IH0KLSAKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fQVJNNjQpCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSAKLS0vLyBBUk0gYW5kIEFSTTY0IG11c3QgZmx1c2ggdGhlIGluc3RydWN0aW9uIHBpcGVs aW5lIG9mIHRoZSBjdXJyZW50IGNvcmUKLS0vLyBiZWZvcmUgZXhlY3V0aW5nIG5ld2x5IEpJVCdl ZCBjb2RlLiBUaGlzIHdpbGwgcmVtb3ZlIGFueSBzdGFsZSBkYXRhIGZyb20KLSsvLyBBUk0sIEFS TTY0LCBhbmQgUFBDNjQgbXVzdCBmbHVzaCB0aGUgaW5zdHJ1Y3Rpb24gcGlwZWxpbmUgb2YgdGhl IGN1cnJlbnQKLSsvLyBjb3JlIGJlZm9yZSBleGVjdXRpbmcgbmV3bHkgSklUJ2VkIGNvZGUuIFRo aXMgd2lsbCByZW1vdmUgYW55IHN0YWxlIGRhdGEgZnJvbQotIC8vIHRoZSBwaXBlbGluZSB0aGF0 IG1heSBoYXZlIHJlZmVyZW5jZWQgaW52YWxpZGF0ZWQgaW5zdHJ1Y3Rpb25zLgotIC8vCi0gLy8g YEZsdXNoSUNhY2hlYCB3aWxsIHBlcmZvcm0gdGhpcyBmb3IgdGhlIHRocmVhZCB0aGF0IGNvbXBp bGVzIHRoZSBjb2RlLCBidXQKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0dlbmVyYXRlQUJJRnVu Y3Rpb25UeXBlLnB5IGIvanMvc3JjL2ppdC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlwZS5weQotaW5k ZXggMDRiZTEwZDFkZTJhLi44MTU0MjdlYzY3NzEgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0dl bmVyYXRlQUJJRnVuY3Rpb25UeXBlLnB5Ci0rKysgYi9qcy9zcmMvaml0L0dlbmVyYXRlQUJJRnVu Y3Rpb25UeXBlLnB5Ci1AQCAtNTM4LDYgKzUzOCwxMDIgQEAgZGVmIHJpc2N2NjRfc2ltdWxhdG9y X2Rpc3BhdGNoKGZ1bmNfdHlwZXMpOgotICAgICByZXR1cm4gY29udGVudHMKLSAKLSAKLSsjIFBQ QzY0IEVMRnYyIEFCSTogOCBpbnQgYXJnIHJlZ3MgKHIzLXIxMCksIDEzIEZQIGFyZyByZWdzIChm MS1mMTMpLgotKyMgRWFjaCBmbG9hdGluZy1wb2ludCBhcmd1bWVudCBjb25zdW1lcyBCT1RIIGEg ZmxvYXQtYXJnIHNsb3QgQU5EIGEKLSsjIGdlbmVyYWwtcHVycG9zZS1yZWdpc3RlciBzaGFkb3cg c2xvdCAoY2FwcGVkIGF0IDggR1BSIHNsb3RzKSwgbWF0Y2hpbmcKLSsjIHdoYXQgR0NDIGFuZCB0 aGUgSklUJ3MgQUJJQXJnR2VuZXJhdG9yIGRvIGZvciBFTEZ2MiBQUEM2NExFLiBXaXRob3V0Ci0r IyB0aGUgc2hhZG93LCBpbnRlZ2VyIGFyZ3MgZm9sbG93aW5nIGEgZmxvYXQgZ28gdG8gdGhlIHdy b25nIHJlZ2lzdGVyCi0rIyBhdCB0aGUgY2FsbCBib3VuZGFyeSwgcHJvZHVjaW5nIGEgdXNlLWFm dGVyLWZyZWUgLyB3cm9uZy1wb2ludGVyIGNyYXNoCi0rIyBpbiB0aGUgQyBjYWxsZWUuIChWZXJp ZmllZCBlbXBpcmljYWxseSBieSBkaXNhc3NlbWJsaW5nCi0rIyBOdW1iZXJCaWdJbnRDb21wYXJl KGRvdWJsZSwgQmlnSW50Kikgb24gcmVhbCBQUEM2NDogQmlnSW50KiBpcyByZWFkCi0rIyBmcm9t IHI0LCBub3QgcjMuKQotK2RlZiBwcGM2NF9hcmdzKGZ1bmNfdHlwZSk6Ci0rICAgIGNvbnRlbnRz ID0gIiIKLSsgICAgbnVtSW50QXJnUmVncyA9IDgKLSsgICAgbnVtRmxvYXRBcmdSZWdzID0gMTMK LSsgICAgaW50UmVnSW5kZXggPSAwCi0rICAgIGZsb2F0UmVnSW5kZXggPSAwCi0rICAgIHN0YWNr T2Zmc2V0ID0gMAotKyAgICBmb3IgaSwgYXJnIGluIGVudW1lcmF0ZShmdW5jX3R5cGVbImFyZ3Mi XSk6Ci0rICAgICAgICBpZiBpICE9IDA6Ci0rICAgICAgICAgICAgY29udGVudHMgKz0gIiwgIgot KwotKyAgICAgICAgaWYgYXJnID09ICJHZW5lcmFsIjoKLSsgICAgICAgICAgICBpZiBpbnRSZWdJ bmRleCA9PSBudW1JbnRBcmdSZWdzOgotKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmInNw X1t7c3RhY2tPZmZzZXR9XSIKLSsgICAgICAgICAgICAgICAgc3RhY2tPZmZzZXQgKz0gMQotKyAg ICAgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiYXtpbnRSZWdJ bmRleH1fIgotKyAgICAgICAgICAgICAgICBpbnRSZWdJbmRleCArPSAxCi0rICAgICAgICBlbGlm IGFyZyA9PSAiSW50MzIiOgotKyAgICAgICAgICAgIGlmIGludFJlZ0luZGV4ID09IG51bUludEFy Z1JlZ3M6Ci0rICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiSTMyKHNwX1t7c3RhY2tPZmZz ZXR9XSkiCi0rICAgICAgICAgICAgICAgIHN0YWNrT2Zmc2V0ICs9IDEKLSsgICAgICAgICAgICBl bHNlOgotKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmIkkzMihhe2ludFJlZ0luZGV4fV8p IgotKyAgICAgICAgICAgICAgICBpbnRSZWdJbmRleCArPSAxCi0rICAgICAgICBlbGlmIGFyZyA9 PSAiSW50NjQiOgotKyAgICAgICAgICAgIGlmIGludFJlZ0luZGV4ID09IG51bUludEFyZ1JlZ3M6 Ci0rICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYic3BfW3tzdGFja09mZnNldH1dIgotKyAg ICAgICAgICAgICAgICBzdGFja09mZnNldCArPSAxCi0rICAgICAgICAgICAgZWxzZToKLSsgICAg ICAgICAgICAgICAgY29udGVudHMgKz0gZiJhe2ludFJlZ0luZGV4fV8iCi0rICAgICAgICAgICAg ICAgIGludFJlZ0luZGV4ICs9IDEKLSsgICAgICAgIGVsaWYgYXJnID09ICJGbG9hdDMyIjoKLSsg ICAgICAgICAgICBpZiBmbG9hdFJlZ0luZGV4ID09IG51bUZsb2F0QXJnUmVnczoKLSsgICAgICAg ICAgICAgICAgY29udGVudHMgKz0gZiIqbW96aWxsYTo6Qml0d2lzZUNhc3Q8ZmxvYXQqPihzcF9b e3N0YWNrT2Zmc2V0fV0pIgotKyAgICAgICAgICAgICAgICBzdGFja09mZnNldCArPSAxCi0rICAg ICAgICAgICAgZWxzZToKLSsgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJme2Zsb2F0UmVn SW5kZXh9X3MiCi0rICAgICAgICAgICAgICAgIGZsb2F0UmVnSW5kZXggKz0gMQotKyAgICAgICAg ICAgICMgRUxGdjI6IEZQIGFyZyBhbHNvIGNvbnN1bWVzIGEgR1BSIHNoYWRvdyBzbG90LgotKyAg ICAgICAgICAgIGlmIGludFJlZ0luZGV4IDwgbnVtSW50QXJnUmVnczoKLSsgICAgICAgICAgICAg ICAgaW50UmVnSW5kZXggKz0gMQotKyAgICAgICAgZWxpZiBhcmcgPT0gIkZsb2F0NjQiOgotKyAg ICAgICAgICAgIGlmIGZsb2F0UmVnSW5kZXggPT0gbnVtRmxvYXRBcmdSZWdzOgotKyAgICAgICAg ICAgICAgICBjb250ZW50cyArPSBmIm1vemlsbGE6OkJpdHdpc2VDYXN0PGRvdWJsZT4oc3BfW3tz dGFja09mZnNldH1dKSIKLSsgICAgICAgICAgICAgICAgc3RhY2tPZmZzZXQgKz0gMQotKyAgICAg ICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiZntmbG9hdFJlZ0lu ZGV4fV9kIgotKyAgICAgICAgICAgICAgICBmbG9hdFJlZ0luZGV4ICs9IDEKLSsgICAgICAgICAg ICAjIEVMRnYyOiBGUCBhcmcgYWxzbyBjb25zdW1lcyBhIEdQUiBzaGFkb3cgc2xvdC4KLSsgICAg ICAgICAgICBpZiBpbnRSZWdJbmRleCA8IG51bUludEFyZ1JlZ3M6Ci0rICAgICAgICAgICAgICAg IGludFJlZ0luZGV4ICs9IDEKLSsgICAgYXNzZXJ0IGludFJlZ0luZGV4IDw9IG51bUludEFyZ1Jl Z3MKLSsgICAgYXNzZXJ0IGZsb2F0UmVnSW5kZXggPD0gbnVtRmxvYXRBcmdSZWdzCi0rICAgIHJl dHVybiBjb250ZW50cwotKwotKwotK2RlZiBwcGM2NF9zaW11bGF0b3JfZGlzcGF0Y2goZnVuY190 eXBlcyk6Ci0rICAgIGNvbnRlbnRzID0gIiIKLSsgICAgZm9yIGZ1bmNfdHlwZSBpbiBmdW5jX3R5 cGVzOgotKyAgICAgICAgYXJncyA9IHBwYzY0X2FyZ3MoZnVuY190eXBlKQotKyAgICAgICAgY29u dGVudHMgKz0gZiJjYXNlIGpzOjpqaXQ6OkFyZ3Nfe2Z1bmNfdHlwZV9uYW1lKGZ1bmNfdHlwZSl9 OiB7e1xcXG4iCi0rICAgICAgICBjb250ZW50cyArPSBmIiAgYXV0byB0YXJnZXQgPSByZWludGVy cHJldF9jYXN0PFByb3RvdHlwZV97ZnVuY190eXBlX25hbWUoZnVuY190eXBlKX0+KG5hdGl2ZUZu KTtcXFxuIgotKyAgICAgICAgcmV0ID0gZnVuY190eXBlWyJyZXQiXQotKyAgICAgICAgaWYgcmV0 ID09ICJWb2lkIjoKLSsgICAgICAgICAgICBjb250ZW50cyArPSBmIiAgdGFyZ2V0KHthcmdzfSk7 XFxcbiIKLSsgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgY29udGVudHMgKz0gZiIgIGF1dG8g cmV0ID0gdGFyZ2V0KHthcmdzfSk7XFxcbiIKLSsgICAgICAgIGlmIHJldCA9PSAiVm9pZCI6Ci0r ICAgICAgICAgICAgcGFzcwotKyAgICAgICAgZWxpZiByZXQgPT0gIkdlbmVyYWwiOgotKyAgICAg ICAgICAgIGNvbnRlbnRzICs9ICIgIHNldENhbGxSZXN1bHQocmV0KTtcXFxuIgotKyAgICAgICAg ZWxpZiByZXQgPT0gIkludDMyIjoKLSsgICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxs UmVzdWx0KEk2NChyZXQpKTtcXFxuIgotKyAgICAgICAgZWxpZiByZXQgPT0gIkludDY0IjoKLSsg ICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0KHJldCk7XFxcbiIKLSsgICAg ICAgIGVsaWYgcmV0ID09ICJGbG9hdDMyIjoKLSsgICAgICAgICAgICBjb250ZW50cyArPSAiICBz ZXRDYWxsUmVzdWx0RmxvYXQocmV0KTtcXFxuIgotKyAgICAgICAgZWxpZiByZXQgPT0gIkZsb2F0 NjQiOgotKyAgICAgICAgICAgIGNvbnRlbnRzICs9ICIgIHNldENhbGxSZXN1bHREb3VibGUocmV0 KTtcXFxuIgotKyAgICAgICAgZWxzZToKLSsgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYi VW5rbm93biByZXQgdHlwZToge3JldH0iKQotKyAgICAgICAgY29udGVudHMgKz0gIiAgYnJlYWs7 XFxcbiIKLSsgICAgICAgIGNvbnRlbnRzICs9ICJ9XFxcbiIKLSsgICAgcmV0dXJuIGNvbnRlbnRz Ci0rCi0rCi0gZGVmIG1haW4oY19vdXQsIHlhbWxfcGF0aCk6Ci0gICAgIGZ1bmNfdHlwZXMgPSBs b2FkX3lhbWwoeWFtbF9wYXRoKQotIAotQEAgLTU4MSw0ICs2NzcsOCBAQCBkZWYgbWFpbihjX291 dCwgeWFtbF9wYXRoKToKLSAgICAgY29udGVudHMgKz0gcmlzY3Y2NF9zaW11bGF0b3JfZGlzcGF0 Y2goZnVuY190eXBlcykKLSAgICAgY29udGVudHMgKz0gIlxuIgotIAotKyAgICBjb250ZW50cyAr PSAiI2RlZmluZSBBQklfRlVOQ1RJT05fVFlQRV9QUEM2NF9TSU1fRElTUEFUQ0ggXFxcbiIKLSsg ICAgY29udGVudHMgKz0gcHBjNjRfc2ltdWxhdG9yX2Rpc3BhdGNoKGZ1bmNfdHlwZXMpCi0rICAg IGNvbnRlbnRzICs9ICJcbiIKLSsKLSAgICAgZ2VuZXJhdGVfaGVhZGVyKGNfb3V0LCAiaml0X0FC SUZ1bmN0aW9uVHlwZUdlbmVyYXRlZF9oIiwgY29udGVudHMpCi1kaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9KaXRDb250ZXh0LmNwcCBiL2pzL3NyYy9qaXQvSml0Q29udGV4dC5jcHAKLWluZGV4IDc5 YjIyZDlmMjQ5Zi4uZDM5OWRkZDM2ZmQ0IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9KaXRDb250 ZXh0LmNwcAotKysrIGIvanMvc3JjL2ppdC9KaXRDb250ZXh0LmNwcAotQEAgLTEyMSw2ICsxMjEs MTAgQEAgYm9vbCBqaXQ6OkluaXRpYWxpemVKaXQoKSB7Ci0gICBSVkZsYWdzOjpJbml0KCk7Ci0g I2VuZGlmCi0gCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIFBQQzY0RmxhZ3M6OkluaXQo KTsKLSsjZW5kaWYKLSsKLSAjaWZuZGVmIEpTX0NPREVHRU5fTk9ORQotICAgTU9aX0FTU0VSVChq czo6aml0OjpDUFVGbGFnc0hhdmVCZWVuQ29tcHV0ZWQoKSk7Ci0gI2VuZGlmCi1kaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9KaXRGcmFtZXMuY3BwIGIvanMvc3JjL2ppdC9KaXRGcmFtZXMuY3BwCi1p bmRleCAzNjUzYWYzYTIxZjQuLmJiZDEzNzZkZWM2OSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQv Sml0RnJhbWVzLmNwcAotKysrIGIvanMvc3JjL2ppdC9KaXRGcmFtZXMuY3BwCi1AQCAtMTgyNCw3 ICsxODI0LDEyIEBAIFZhbHVlIFNuYXBzaG90SXRlcmF0b3I6OmFsbG9jYXRpb25WYWx1ZShjb25z dCBSVmFsdWVBbGxvY2F0aW9uJiBhbGxvYywKLSAgICAgICByZXR1cm4gRG91YmxlVmFsdWUoZnJv bVJlZ2lzdGVyPGRvdWJsZT4oYWxsb2MuZnB1UmVnKCkpKTsKLSAKLSAgICAgY2FzZSBSVmFsdWVB bGxvY2F0aW9uOjpGTE9BVDMyX1JFRzoKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgICByZXR1cm4gRmxvYXQzMlZhbHVl KAotKyAgICAgICAgICBmbG9hdChmcm9tUmVnaXN0ZXI8ZG91YmxlPihhbGxvYy5mcHVSZWcoKS5h c0RvdWJsZSgpKSkpOwotKyNlbHNlCi0gICAgICAgcmV0dXJuIEZsb2F0MzJWYWx1ZShmcm9tUmVn aXN0ZXI8ZmxvYXQ+KGFsbG9jLmZwdVJlZygpKSk7Ci0rI2VuZGlmCi0gCi0gICAgIGNhc2UgUlZh bHVlQWxsb2NhdGlvbjo6RkxPQVQzMl9TVEFDSzoKLSAgICAgICByZXR1cm4gRmxvYXQzMlZhbHVl KFJlYWRGcmFtZUZsb2F0MzJTbG90KGZwXywgYWxsb2Muc3RhY2tPZmZzZXQoKSkpOwotQEAgLTI2 MjUsNyArMjYzMCwxMiBAQCB1aW50cHRyX3QgTWFjaGluZVN0YXRlOjpyZWFkKFJlZ2lzdGVyIHJl ZykgY29uc3QgewotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotIFQgTWFjaGluZVN0YXRlOjpy ZWFkKEZsb2F0UmVnaXN0ZXIgcmVnKSBjb25zdCB7Ci0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAvLyBQUEM2NC9SSVNDVjY0 IGFsd2F5cyBzdG9yZSBGbG9hdFJlZ2lzdGVycyBhcyA2NC1iaXQgZG91Ymxlcy4KLSsgIE1PWl9B U1NFUlQocmVnLnNpemUoKSA+PSBzaXplb2YoVCkpOwotKyNlbHNlCi0gICBNT1pfQVNTRVJUKHJl Zy5zaXplKCkgPT0gc2l6ZW9mKFQpKTsKLSsjZW5kaWYKLSAKLSAjaWYgIWRlZmluZWQoSlNfQ09E RUdFTl9OT05FKSAmJiAhZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAgIGlmIChzdGF0ZV8u aXM8QmFpbG91dFN0YXRlPigpKSB7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9KaXRGcmFtZXMu aCBiL2pzL3NyYy9qaXQvSml0RnJhbWVzLmgKLWluZGV4IGFjNzAwNWE1ZmNmYy4uNDkwODM0ZTYy ZmVjIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9KaXRGcmFtZXMuaAotKysrIGIvanMvc3JjL2pp dC9KaXRGcmFtZXMuaAotQEAgLTMyMiw2ICszMjIsMTYgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25S ZXN1bWVLaW5kIDogaW50MzJfdCB7Ci0gCi0gLy8gRGF0YSBuZWVkZWQgdG8gcmVjb3ZlciBmcm9t IGFuIGV4Y2VwdGlvbi4KLSBzdHJ1Y3QgUmVzdW1lRnJvbUV4Y2VwdGlvbiB7Ci0rI2lmIGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgIC8vIFRoaXMgc3RydWN0IGlzIGJ1aWx0IG9uIHRoZSBz dGFjayBhcyBwYXJ0IG9mIGV4Y2VwdGlvbiByZXR1cm5zLiBCZWNhdXNlCi0rICAvLyBpdCBnb2Vz IHJpZ2h0IG9uIHRvcCBvZiB0aGUgc3RhY2ssIGFuIEFCSS1jb21wbGlhbnQgcm91dGluZSBjYW4g d3JlY2sKLSsgIC8vIGl0LCBzbyB3ZSBpbXBsZW1lbnQgYSBtaW5pbXVtIFBvd2VyIElTQSBsaW5r YWdlIGFyZWEgKGZvdXIgZG91Ymxld29yZHMpLgotKyAgdm9pZCogX3BwY19zcF87Ci0rICB2b2lk KiBfcHBjX2NyXzsKLSsgIHZvaWQqIF9wcGNfbHJfOwotKyAgdm9pZCogX3BwY190b2NfOwotKyNl bmRpZgotKwotICAgdWludDhfdCogZnJhbWVQb2ludGVyOwotICAgdWludDhfdCogc3RhY2tQb2lu dGVyOwotICAgdWludDhfdCogdGFyZ2V0OwotQEAgLTM3Myw3ICszODMsNyBAQCBzdHJ1Y3QgUmVz dW1lRnJvbUV4Y2VwdGlvbiB7Ci0gICB9Ci0gfTsKLSAKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTTY0KQotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKLSBzdGF0aWNfYXNzZXJ0KHNpemVvZihSZXN1bWVGcm9tRXhjZXB0aW9uKSAl IDE2ID09IDAsCi0gICAgICAgICAgICAgICAiUmVzdW1lRnJvbUV4Y2VwdGlvbiBzaG91bGQgYmUg YWxpZ25lZCIpOwotICNlbmRpZgotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTElSLmNwcCBiL2pz L3NyYy9qaXQvTElSLmNwcAotaW5kZXggMmY4OWZiNDA3MzQ5Li5hOWY2MzRiN2ZjYzEgMTAwNjQ0 Ci0tLS0gYS9qcy9zcmMvaml0L0xJUi5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvTElSLmNwcAotQEAg LTc3OSw4ICs3NzksOCBAQCBib29sIExNb3ZlR3JvdXA6OmFkZChMQWxsb2NhdGlvbiBmcm9tLCBM QWxsb2NhdGlvbiB0bywgTERlZmluaXRpb246OlR5cGUgdHlwZSkgewotICAgICAvLyBDb2RlR2Vu ZXJhdG9yU2hhcmVkOjpDb2RlR2VuZXJhdG9yU2hhcmVkIGFuZCBpbiBnZW5lcmFsIGV2ZXJ5d2hl cmUKLSAgICAgLy8gU2ltZE1lbW9yeUFpZ25tZW50IGlzIHVzZWQuICBMaWtlbHksIGFsaWdubWVu dCByZXF1aXJlbWVudHMgd2lsbCByZXR1cm4uCi0gIyAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9Y ODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IFwKLS0gICAgICAgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KQotLSAgICAgIC8vIE5vIG5lZWQgZm9yIGFueSBjaGVjayBvbiB4ODYveDY0 L2FybTY0LgotKyAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKLSsgICAgICAvLyBObyBuZWVkIGZvciBhbnkgY2hlY2sgb24geDg2L3g2 NC9hcm02NC9wcGM2NC4KLSAjICAgZWxzZQotICMgICAgIGVycm9yICJOZWVkIHRvIGNvbnNpZGVy IFNJTUQgYWxpZ25tZW50IG9uIHRoaXMgdGFyZ2V0LiIKLSAgICAgICAvLyBUaGUgZm9sbG93aW5n IGNvZGUgbWF5IGJlIG9mIHVzZSBpZiB3ZSBuZWVkIGFsaWdubWVudCBjaGVja3Mgb24KLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L0xJUi5oIGIvanMvc3JjL2ppdC9MSVIuaAotaW5kZXggM2Y0ZWZl ZGE3OTU1Li4zMzU0Y2I5NmIwY2IgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0xJUi5oCi0rKysg Yi9qcy9zcmMvaml0L0xJUi5oCi1AQCAtMjAwLDcgKzIwMCw3IEBAIGNsYXNzIExVc2UgOiBwdWJs aWMgTEFsbG9jYXRpb24gewotICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IFBPTElDWV9CSVRTID0g MzsKLSAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBQT0xJQ1lfU0hJRlQgPSAwOwotICAgc3RhdGlj IGNvbnN0IHVpbnQzMl90IFBPTElDWV9NQVNLID0gKDEgPDwgUE9MSUNZX0JJVFMpIC0gMTsKLS0j aWZkZWYgSlNfQ09ERUdFTl9BUk02NAotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBSRUdf QklUUyA9IDc7Ci0gI2Vsc2UKLSAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBSRUdfQklUUyA9IDY7 Ci1AQCAtNjE5LDEyICs2MTksMTggQEAgY2xhc3MgTERlZmluaXRpb24gewotICAgVHlwZSB0eXBl KCkgY29uc3QgeyByZXR1cm4gKFR5cGUpKChiaXRzXyA+PiBUWVBFX1NISUZUKSAmIFRZUEVfTUFT Syk7IH0KLSAKLSAgIHN0YXRpYyBib29sIGlzRmxvYXRSZWdDb21wYXRpYmxlKFR5cGUgdHlwZSwg RmxvYXRSZWdpc3RlciByZWcpIHsKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgaWYgKHR5cGUgPT0gRkxPQVQzMiB8fCB0 eXBlID09IERPVUJMRSkgewotKyAgICAgIHJldHVybiByZWcuaXNTaW5nbGUoKSB8fCByZWcuaXNE b3VibGUoKTsKLSsgICAgfQotKyNlbHNlCi0gICAgIGlmICh0eXBlID09IEZMT0FUMzIpIHsKLSAg ICAgICByZXR1cm4gcmVnLmlzU2luZ2xlKCk7Ci0gICAgIH0KLSAgICAgaWYgKHR5cGUgPT0gRE9V QkxFKSB7Ci0gICAgICAgcmV0dXJuIHJlZy5pc0RvdWJsZSgpOwotICAgICB9Ci0rI2VuZGlmCi0g ICAgIE1PWl9BU1NFUlQodHlwZSA9PSBTSU1EMTI4KTsKLSAgICAgcmV0dXJuIHJlZy5pc1NpbWQx MjgoKTsKLSAgIH0KLUBAIC0yMjkyLDYgKzIyOTgsOCBAQCBBbnlSZWdpc3RlciBMQWxsb2NhdGlv bjo6dG9BbnlSZWdpc3RlcigpIGNvbnN0IHsKLSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9MSVIt bG9vbmc2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1 ZGUgImppdC9yaXNjdjY0L0xJUi1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9MSVItcHBjNjQuaCIKLSAjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KQotICMgIGluY2x1ZGUgImppdC9taXBzLXNoYXJlZC9MSVIt bWlwcy1zaGFyZWQuaCIKLSAjICBpbmNsdWRlICJqaXQvbWlwczY0L0xJUi1taXBzNjQuaCIKLWRp ZmYgLS1naXQgYS9qcy9zcmMvaml0L0xJUk9wcy55YW1sIGIvanMvc3JjL2ppdC9MSVJPcHMueWFt bAotaW5kZXggMzE1ZmY1ZmQ1MzQ4Li43ZmJlYTllMmViZWMgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMv aml0L0xJUk9wcy55YW1sCi0rKysgYi9qcy9zcmMvaml0L0xJUk9wcy55YW1sCi1AQCAtMjIxMCw3 ICsyMjEwLDcgQEAKLSAgICAgb2xkdmFsOiBXb3JkU2l6ZWQKLSAgICAgbmV3dmFsOiBXb3JkU2l6 ZWQKLSAgICMgTmVlZHMgYWRkaXRpb25hbCB0ZW1wcyBvbiBMTC9TQyBwbGF0Zm9ybXMgdG8gZXh0 cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgotLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQotICAgbnVtX3RlbXBzOiA0Ci0gI2Vsc2UKLSAgIG51bV90ZW1wczog MQotQEAgLTIyMjQsNyArMjIyNCw3IEBACi0gICAgIGluZGV4OiBXb3JkU2l6ZWQKLSAgICAgdmFs dWU6IFdvcmRTaXplZAotICAgIyBOZWVkcyBhZGRpdGlvbmFsIHRlbXBzIG9uIExML1NDIHBsYXRm b3JtcyB0byBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCi0tI2lmIGRlZmluZWQoSlNfQ09E RUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBudW1fdGVtcHM6IDQKLSAjZWxzZQotICAg bnVtX3RlbXBzOiAxCi1AQCAtMjIzOCw3ICsyMjM4LDcgQEAKLSAgICAgaW5kZXg6IFdvcmRTaXpl ZAotICAgICB2YWx1ZTogV29yZFNpemVkCi0gICAjIE5lZWRzIGFkZGl0aW9uYWwgdGVtcHMgb24g TEwvU0MgcGxhdGZvcm1zIHRvIGV4dHJhY3QvaW5zZXJ0IGJpdHMgb2Ygd29yZC4KLS0jaWYgZGVm aW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIG51bV90ZW1wczogNAot ICNlbHNlCi0gICBudW1fdGVtcHM6IDIKLUBAIC0yMjU1LDcgKzIyNTUsNyBAQAotICAgIyBOZWVk cyBhZGRpdGlvbmFsIHRlbXBzIG9uIExML1NDIHBsYXRmb3JtcyB0byBleHRyYWN0L2luc2VydCBi aXRzIG9mIHdvcmQuCi0gI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkKLSAgIG51bV90ZW1wczogMQotLSNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIG51bV90ZW1wczogMwotICNlbmRpZgotICAg bWlyX29wOiBBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wCi1AQCAtMzA2Niw3ICszMDY2LDcg QEAKLSAgIG9wZXJhbmRzOgotICAgICBwdHI6IFdvcmRTaXplZAotICAgICBtZW1vcnlCYXNlOiBX b3JkU2l6ZWQKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAg IG51bV90ZW1wczogMQotICNlbmRpZgotICAgbWlyX29wOiB0cnVlCi1AQCAtMzA3OCw3ICszMDc4 LDcgQEAKLSAgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCi0gI2lmZGVmIEpTX0NPREVHRU5fQVJN Ci0gICBudW1fdGVtcHM6IDIKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0gICBudW1fdGVtcHM6IDEKLSAjZW5kaWYKLSAgIG1pcl9vcDogV2FzbUxv YWQKLUBAIC0zMDg4LDcgKzMwODgsNyBAQAotICAgICBwdHI6IFdvcmRTaXplZAotICAgICB2YWx1 ZTogV29yZFNpemVkCi0gICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotLSNpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2lmIGRl ZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgbnVtX3RlbXBzOiAxCi0gI2VuZGlmCi0g ICBtaXJfb3A6IHRydWUKLUBAIC0zMDk4LDcgKzMwOTgsNyBAQAotICAgICBwdHI6IFdvcmRTaXpl ZAotICAgICB2YWx1ZTogSW50NjQKLSAgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCi0tI2lmIGRl ZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK LSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBudW1fdGVtcHM6IDEKLSAj ZW5kaWYKLSAgIG1pcl9vcDogV2FzbVN0b3JlCi1AQCAtMzEyOCw3ICszMTI4LDcgQEAKLSAgICAg bWVtb3J5QmFzZTogV29yZFNpemVkCi0gI2lmZGVmIEpTX0NPREVHRU5fWDg2Ci0gICBudW1fdGVt cHM6IDEKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp Ci0gICAjIFRlbXAgdGhhdCBtYXkgYmUgdXNlZCBvbiBMTC9TQyBwbGF0Zm9ybXMgZm9yIGV4dHJh Y3QvaW5zZXJ0IGJpdHMgb2Ygd29yZC4KLSAgIG51bV90ZW1wczogMwotICNlbmRpZgotQEAgLTMx NDIsNyArMzE0Miw3IEBACi0gICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotICNpZmRlZiBKU19D T0RFR0VOX1g4NgotICAgbnVtX3RlbXBzOiAxCi0tI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01J UFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9SSVNDVjY0KQotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgIyBUZW1wIHRoYXQgbWF5IGJlIHVzZWQgb24gTEwv U0MgcGxhdGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCi0gICBudW1fdGVt cHM6IDMKLSAjZW5kaWYKLUBAIC0zMTU0LDcgKzMxNTQsNyBAQAotICAgICBwdHI6IFdvcmRTaXpl ZAotICAgICB2YWx1ZTogV29yZFNpemVkCi0gICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotLSNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgIyBUZW1wIHRo YXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxhdGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBiaXRz IG9mIHdvcmQuCi0gICBudW1fdGVtcHM6IDMKLSAjZWxpZmRlZiBKU19DT0RFR0VOX1g4NgotQEAg LTMxNzEsNyArMzE3MSw3IEBACi0gICAgIHB0cjogV29yZFNpemVkCi0gICAgIHZhbHVlOiBXb3Jk U2l6ZWQKLSAgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCi0tI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICAjIFRlbXAgdGhhdCBtYXkgYmUgdXNlZCBvbiBM TC9TQyBwbGF0Zm9ybXMgZm9yIGV4dHJhY3QvaW5zZXJ0IGJpdHMgb2Ygd29yZC4KLSAgIG51bV90 ZW1wczogMwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKLUBAIC00NDI0LDYgKzQ0MjQs NjQgQEAKLSAgIG1pcl9vcDogV2FzbUF0b21pY0V4Y2hhbmdlSGVhcAotICNlbmRpZgotIAotKyNp ZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rLSBuYW1lOiBEaXZPck1vZEk2NAotKyAgZ2VuX2JvaWxl cnBsYXRlOiBmYWxzZQotKwotKy0gbmFtZTogVURpdk9yTW9kCi0rICBnZW5fYm9pbGVycGxhdGU6 IGZhbHNlCi0rCi0rLSBuYW1lOiBVRGl2T3JNb2RJNjQKLSsgIGdlbl9ib2lsZXJwbGF0ZTogZmFs c2UKLSsKLSstIG5hbWU6IE1vZE1hc2tJCi0rICByZXN1bHRfdHlwZTogV29yZFNpemVkCi0rICBv cGVyYW5kczoKLSsgICAgaW5wdXQ6IFdvcmRTaXplZAotKyAgYXJndW1lbnRzOgotKyAgICBzaGlm dDogaW50MzJfdAotKyAgbnVtX3RlbXBzOiAyCi0rICBtaXJfb3A6IE1vZAotKwotKy0gbmFtZTog V2FzbVRydW5jYXRlVG9JbnQ2NAotKyAgcmVzdWx0X3R5cGU6IEludDY0Ci0rICBvcGVyYW5kczoK LSsgICAgaW5wdXQ6IFdvcmRTaXplZAotKyAgbWlyX29wOiB0cnVlCi0rCi0rLSBuYW1lOiBJbnQ2 NFRvRmxvYXRpbmdQb2ludAotKyAgcmVzdWx0X3R5cGU6IFdvcmRTaXplZAotKyAgb3BlcmFuZHM6 Ci0rICAgIGlucHV0OiBJbnQ2NAotKyAgbWlyX29wOiB0cnVlCi0rCi0rLSBuYW1lOiBXYXNtQ29t cGFyZUV4Y2hhbmdlSTY0Ci0rICByZXN1bHRfdHlwZTogSW50NjQKLSsgIG9wZXJhbmRzOgotKyAg ICBwdHI6IFdvcmRTaXplZAotKyAgICBvbGRWYWx1ZTogSW50NjQKLSsgICAgbmV3VmFsdWU6IElu dDY0Ci0rICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotKyAgbWlyX29wOiBXYXNtQ29tcGFyZUV4 Y2hhbmdlSGVhcAotKwotKy0gbmFtZTogV2FzbUF0b21pY0Jpbm9wSTY0Ci0rICByZXN1bHRfdHlw ZTogSW50NjQKLSsgIG9wZXJhbmRzOgotKyAgICBwdHI6IFdvcmRTaXplZAotKyAgICB2YWx1ZTog SW50NjQKLSsgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCi0rICBudW1fdGVtcHM2NDogMQotKyAg bWlyX29wOiBXYXNtQXRvbWljQmlub3BIZWFwCi0rCi0rLSBuYW1lOiBXYXNtQXRvbWljRXhjaGFu Z2VJNjQKLSsgIHJlc3VsdF90eXBlOiBJbnQ2NAotKyAgb3BlcmFuZHM6Ci0rICAgIHB0cjogV29y ZFNpemVkCi0rICAgIHZhbHVlOiBJbnQ2NAotKyAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKLSsg IG1pcl9vcDogV2FzbUF0b21pY0V4Y2hhbmdlSGVhcAotKyNlbmRpZgotKwotICNpZmRlZiBKU19D T0RFR0VOX1JJU0NWNjQKLSAtIG5hbWU6IFVEaXYKLSAgIHJlc3VsdF90eXBlOiBXb3JkU2l6ZWQK LWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xhYmVsLmggYi9qcy9zcmMvaml0L0xhYmVsLmgKLWlu ZGV4IDA2MWJmOTc4ZDI2Zi4uMmE0OWRlZDljOTY3IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9M YWJlbC5oCi0rKysgYi9qcy9zcmMvaml0L0xhYmVsLmgKLUBAIC0yMyw3ICsyMyw3IEBAIHN0cnVj dCBMYWJlbEJhc2UgewotICAgdWludDMyX3Qgb2Zmc2V0XyA6IDMxOwotIAotICNpZiBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAot LSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgcHVibGljOgotICNlbmRp ZgotICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IElOVkFMSURfT0ZGU0VUID0gMHg3ZmZmZmZmZjsg IC8vIFVJTlQzMV9NQVguCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9Mb3dlcmluZy5jcHAgYi9q cy9zcmMvaml0L0xvd2VyaW5nLmNwcAotaW5kZXggOWMxYzRiMGRmNDkxLi5lM2ZlNzFlYTljODMg MTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0xvd2VyaW5nLmNwcAotKysrIGIvanMvc3JjL2ppdC9M b3dlcmluZy5jcHAKLUBAIC0xMTc0LDcgKzExNzQsNyBAQCB2b2lkIExJUkdlbmVyYXRvcjo6dmlz aXRUZXN0KE1UZXN0KiB0ZXN0KSB7Ci0gCi0gI2lmIGRlZmluZWQoRU5BQkxFX1dBU01fU0lNRCkg JiYgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChkZWZpbmVkKEpTX0NPREVHRU5f WDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBcCi0tICAgICBkZWZpbmVkKEpTX0NP REVHRU5fQVJNNjQpKQotKyAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpKQotICAgLy8gQ2hlY2sgaWYgdGhlIG9wZXJhbmQgZm9yIHRoaXMg dGVzdCBpcyBhbiBhbnlfdHJ1ZS9hbGxfdHJ1ZSBTSU1EIG9wZXJhdGlvbi4KLSAgIC8vIElmIGl0 IGlzLCB3ZSB3YW50IHRvIGVtaXQgYW4gTFdhc21SZWR1Y2VBbmRCcmFuY2hTaW1kMTI4IG5vZGUg dG8gYXZvaWQKLSAgIC8vIGdlbmVyYXRpbmcgYW4gaW50ZXJtZWRpYXRlIGJvb2xlYW4gcmVzdWx0 LgotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTG93ZXJpbmcuaCBiL2pzL3NyYy9qaXQvTG93ZXJp bmcuaAotaW5kZXggYjRmMTMzNzU4ZWI2Li5kOTczYTY4OTg5YjUgMTAwNjQ0Ci0tLS0gYS9qcy9z cmMvaml0L0xvd2VyaW5nLmgKLSsrKyBiL2pzL3NyYy9qaXQvTG93ZXJpbmcuaAotQEAgLTIzLDYg KzIzLDggQEAKLSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9Mb3dlcmluZy1sb29uZzY0LmgiCi0g I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gIyAgaW5jbHVkZSAiaml0L3Jpc2N2 NjQvTG93ZXJpbmctcmlzY3Y2NC5oIgotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSsjICBpbmNsdWRlICJqaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCIKLSAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fV0FTTTMyKQotICMgIGluY2x1ZGUgImppdC93YXNtMzIvTG93ZXJpbmctd2Fz bTMyLmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCi1kaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCBiL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIt aW5sLmgKLWluZGV4IDQ3NDdhMjJlMTcxYi4uZDczODVkZjg5NWQ1IDEwMDY0NAotLS0tIGEvanMv c3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaAotKysrIGIvanMvc3JjL2ppdC9NYWNyb0Fzc2Vt Ymxlci1pbmwuaAotQEAgLTM5LDYgKzM5LDggQEAKLSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9N YWNyb0Fzc2VtYmxlci1sb29uZzY0LWlubC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L01hY3JvQXNzZW1ibGVyLXJpc2N2NjQt aW5sLmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGluY2x1ZGUgImpp dC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fV0FTTTMyKQotICMgIGluY2x1ZGUgImppdC93YXNtMzIvTWFjcm9Bc3NlbWJsZXItd2Fz bTMyLWlubC5oIgotICNlbGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKLWRpZmYgLS1naXQg YS9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcCBiL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJs ZXIuY3BwCi1pbmRleCBlYjk1ZDZjOWUyYzQuLjViMjhlODExYzg4ZCAxMDA2NDQKLS0tLSBhL2pz L3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIuY3BwCi0rKysgYi9qcy9zcmMvaml0L01hY3JvQXNzZW1i bGVyLmNwcAotQEAgLTYxMjgsNyArNjEyOCw3IEBAIHN0YXRpYyB2b2lkIE1vdmVEYXRhQmxvY2so TWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ2lzdGVyIGJhc2UsIGludDMyX3QgZnJvbSwKLSAgIHN0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgc2NyYXRjaCA9IEFCSU5vbkFyZ1JlZzA7Ci0gICBtYXNt LnB1c2goc2NyYXRjaCk7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0gICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0gI2VsaWYgIWRlZmluZWQoSlNf Q09ERUdFTl9OT05FKQotQEAgLTYzMTUsNiArNjMxNSwxMiBAQCBzdGF0aWMgdm9pZCBDb2xsYXBz ZVdhc21GcmFtZUZhc3QoTWFjcm9Bc3NlbWJsZXImIG1hc20sCi0gCi0gI2lmZGVmIEpTX1VTRV9M SU5LX1JFR0lTVEVSCi0gICAvLyBSQSBpcyBhbHJlYWR5IGluIGl0cyBwbGFjZSwganVzdCBtb3Zl IHN0YWNrLgotKyMgIGlmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIC8vIFBQQzY0J3MgTFIgaXMg bm90IGEgR1BSLCBzbyBXYXNtVGFpbENhbGxSQVNjcmF0Y2hSZWcgaXMgYSBub3JtYWwgR1BSCi0r ICAvLyAocjE0KS4gV2UgbXVzdCBleHBsaWNpdGx5IG1vdmUgaXQgdG8gTFIgc28gdGhlIGNhbGxl ZSdzIHByb2xvZ3VlCi0rICAvLyAocHVzaFJldHVybkFkZHJlc3MpIHNhdmVzIHRoZSBjb3JyZWN0 IHJldHVybiBhZGRyZXNzLgotKyAgbWFzbS54c19tdGxyKHRlbXBGb3JSQSk7Ci0rIyAgZW5kaWYK LSAgIG1hc20uYWRkVG9TdGFja1B0cihJbW0zMihmcmFtZVB1c2hlZEF0U3RhcnQgKyBuZXdBcmdE ZXN0KSk7Ci0gI2Vsc2UKLSAgIC8vIFB1c2ggUkEgdG8gbmV3IGZyYW1lOiBzdG9yZSBSQSwgcmVz dG9yZSB0ZW1wLCBhbmQgbW92ZSBzdGFjay4KLUBAIC02NDYzLDYgKzY0NjksMTIgQEAgc3RhdGlj IHZvaWQgQ29sbGFwc2VXYXNtRnJhbWVTbG93KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotICNpZmRl ZiBKU19VU0VfTElOS19SRUdJU1RFUgotICAgbWFzbS5mcmVlU3RhY2socmVzZXJ2ZWQpOwotICAg Ly8gUkEgaXMgYWxyZWFkeSBpbiBpdHMgcGxhY2UsIGp1c3QgbW92ZSBzdGFjay4KLSsjICBpZmRl ZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAvLyBQUEM2NCdzIExSIGlzIG5vdCBhIEdQUiwgc28gV2Fz bVRhaWxDYWxsUkFTY3JhdGNoUmVnIGlzIGEgbm9ybWFsIEdQUgotKyAgLy8gKHIxNCkuIFdlIG11 c3QgZXhwbGljaXRseSBtb3ZlIHRoZSB0cmFtcG9saW5lIGFkZHJlc3MgdG8gTFIgc28gdGhlCi0r ICAvLyBjYWxsZWUgcmV0dXJucyB0byB0aGUgdHJhbXBvbGluZS4KLSsgIG1hc20ueHNfbXRscih0 ZW1wRm9yUkEpOwotKyMgIGVuZGlmCi0gICBtYXNtLmFkZFRvU3RhY2tQdHIoSW1tMzIoZnJhbWVQ dXNoZWRBdFN0YXJ0ICsgbmV3QXJnRGVzdCkpOwotICNlbHNlCi0gICAvLyBQdXNoIFJBIHRvIG5l dyBmcmFtZTogc3RvcmUgUkEsIHJlc3RvcmUgdGVtcCwgYW5kIG1vdmUgc3RhY2suCi1AQCAtODUy Nyw3ICs4NTM5LDcgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZGVidWdBc3NlcnRDYW5vbmljYWxJ bnQzMihSZWdpc3RlciByKSB7Ci0gICAgIGJyZWFrcG9pbnQoKTsKLSAgICAgYmluZCgmb2spOwot ICMgICAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTE9PTkc2NCkgfHwgXAotLSAgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0r ICAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQotICAgICBMYWJlbCBvazsKLSAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOwotICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotQEAg LTEwNTY3LDYgKzEwNTc5LDE1IEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yZGVyZWRIYXNoVGFi bGVMb29rdXAoUmVnaXN0ZXIgc2V0T3JNYXBPYmosCi0gICB1bmJveEludDMyKEFkZHJlc3Moc2V0 T3JNYXBPYmosIFRhYmxlT2JqZWN0OjpvZmZzZXRPZkxpdmVDb3VudCgpKSwgdGVtcDEpOwotICAg YnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgdGVtcDEsIHRlbXAxLCAmbm90Rm91bmQpOwot IAotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyBJZiB0aGlzIHdhcyBwcmVj ZWRlZCBieSBhIE1vdmVHcm91cCBpbnN0cnVjdGlvbiwgdGhlIGhhc2ggbWF5IGhhdmUgYmVlbgot KyAgLy8gbG9hZGVkIGFsZ2VicmFpY2FsbHkgc2luY2UgaXQncyBhbiBJbnQzMiAoYW5kIHRodXMg c2lnbi1leHRlbmRlZCk7IHRoZQotKyAgLy8gb3BlcmF0aW9uIGRvZXNuJ3Qga25vdyB0byBrZWVw IHRoZSB1cHBlciBiaXRzIGNsZWFyLCBmYWlsaW5nIHRoZSBhc3NlcnQuCi0rICBpZiAoaXNCaWdJ bnQgPT0gSXNCaWdJbnQ6Ok5vKSB7Ci0rICAgIGFzX3JsZGljbChoYXNoLCBoYXNoLCAwLCAzMik7 Ci0rICB9Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIERFQlVHCi0gICBQdXNoUmVnc0luTWFzayhMaXZl UmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OlZvbGF0aWxlKCkpKTsKLSAKLWRpZmYgLS1naXQgYS9q cy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmggYi9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmgK LWluZGV4IDZjMDhiYjU1NGNhOC4uNzU0ZTg2NDJiYjU3IDEwMDY0NAotLS0tIGEvanMvc3JjL2pp dC9NYWNyb0Fzc2VtYmxlci5oCi0rKysgYi9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmgKLUBA IC0yMyw2ICsyMyw4IEBACi0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTWFjcm9Bc3NlbWJsZXIt bG9vbmc2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1 ZGUgImppdC9yaXNjdjY0L01hY3JvQXNzZW1ibGVyLXJpc2N2NjQuaCIKLSsjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L01hY3JvQXNzZW1ibGVy LXBwYzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAjICBpbmNsdWRl ICJqaXQvd2FzbTMyL01hY3JvQXNzZW1ibGVyLXdhc20zMi5oIgotICNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9OT05FKQotQEAgLTkzLDggKzk1LDkgQEAKLSAvLyAgIH0KLSAvLyAgIC8vLy99fX0g Y2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUKLSAKLS0jZGVmaW5lIEFMTF9BUkNIIG1pcHM2NCwg YXJtLCBhcm02NCwgeDg2LCB4NjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMgotLSNkZWZpbmUg QUxMX1NIQVJFRF9BUkNIIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwgeDg2 X3NoYXJlZCwgd2FzbTMyCi0rI2RlZmluZSBBTExfQVJDSCBtaXBzNjQsIGFybSwgYXJtNjQsIHg4 NiwgeDY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgd2FzbTMyCi0rI2RlZmluZSBBTExfU0hB UkVEX0FSQ0ggXAotKyAgYXJtLCBhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2 NCwgeDg2X3NoYXJlZCwgd2FzbTMyCi0gCi0gLy8gKiBIb3cgdGhpcyBtYWNybyB3b3JrczoKLSAv LwotQEAgLTE0MCw2ICsxNDMsNyBAQAotICNkZWZpbmUgREVGSU5FRF9PTl9taXBzNjQKLSAjZGVm aW5lIERFRklORURfT05fbG9vbmc2NAotICNkZWZpbmUgREVGSU5FRF9PTl9yaXNjdjY0Ci0rI2Rl ZmluZSBERUZJTkVEX09OX3BwYzY0Ci0gI2RlZmluZSBERUZJTkVEX09OX3dhc20zMgotICNkZWZp bmUgREVGSU5FRF9PTl9ub25lCi0gCi1AQCAtMTY5LDYgKzE3Myw5IEBACi0gI2VsaWYgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gIyAgdW5kZWYgREVGSU5FRF9PTl9yaXNjdjY0Ci0gIyAg ZGVmaW5lIERFRklORURfT05fcmlzY3Y2NCBkZWZpbmUKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fUFBDNjQpCi0rIyAgdW5kZWYgREVGSU5FRF9PTl9wcGM2NAotKyMgIGRlZmluZSBERUZJTkVE X09OX3BwYzY0IGRlZmluZQotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAg dW5kZWYgREVGSU5FRF9PTl93YXNtMzIKLSAjICBkZWZpbmUgREVGSU5FRF9PTl93YXNtMzIgZGVm aW5lCi1AQCAtNTYyLDcgKzU2OSw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1h Y3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgdm9pZCBQb3AoY29uc3QgUmVnaXN0ZXI2NCByZWcp OwotICAgdm9pZCBQb3BGbGFncygpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gICB2b2lkIFBv cFN0YWNrUHRyKCkKLS0gICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCB4ODZfc2hhcmVkLCBs b29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOwotKyAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQs IHg4Nl9zaGFyZWQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0LCB3YXNtMzIpOwotIAotICAgLy8g TW92ZSB0aGUgc3RhY2sgcG9pbnRlciBiYXNlZCBvbiB0aGUgcmVxdWVzdGVkIGFtb3VudC4KLSAg IHZvaWQgYWRqdXN0U3RhY2soaW50IGFtb3VudCk7Ci1AQCAtNjIwLDkgKzYyNyw5IEBAIGNsYXNz IE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAg Ly8gVGhlc2UgZG8gbm90IGFkanVzdCBmcmFtZVB1c2hlZCgpLgotICAgdm9pZCBwdXNoUmV0dXJu QWRkcmVzcygpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQs IHJpc2N2NjQsIHdhc20zMik7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQs IGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0LCB3YXNtMzIpOwotICAgdm9pZCBwb3BSZXR1cm5BZGRy ZXNzKCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgcmlz Y3Y2NCwgd2FzbTMyKTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgYXJtLCBhcm02NCwgbG9v bmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHdhc20zMik7Ci0gCi0gICAvLyBVc2VmdWwgZm9yIGRlYWxp bmcgd2l0aCB0d28tdmFsdWVkIHJldHVybnMuCi0gICB2b2lkIG1vdmVSZWdQYWlyKFJlZ2lzdGVy IHNyYzAsIFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVyIGRzdDAsIFJlZ2lzdGVyIGRzdDEsCi1AQCAt NjQxLDcgKzY0OCw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1i bGVyU3BlY2lmaWMgewotICAgQ29kZU9mZnNldCBmYXJKdW1wV2l0aFBhdGNoKCkgUEVSX1NIQVJF RF9BUkNIOwotICAgdm9pZCBwYXRjaEZhckp1bXAoQ29kZU9mZnNldCBmYXJKdW1wLCB1aW50MzJf dCB0YXJnZXRPZmZzZXQpIFBFUl9TSEFSRURfQVJDSDsKLSAgIHN0YXRpYyB2b2lkIHBhdGNoRmFy SnVtcCh1aW50OF90KiBmYXJKdW1wLCB1aW50OF90KiB0YXJnZXQpCi0tICAgICAgREVGSU5FRF9P Tihhcm0sIGFybTY0LCB4ODZfc2hhcmVkLCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQpOwotKyAg ICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDg2X3NoYXJlZCwgbG9vbmc2NCwgbWlwczY0LCBy aXNjdjY0LCBwcGM2NCk7Ci0gCi0gICAvLyBFbWl0IGEgbm9wIHRoYXQgY2FuIGJlIHBhdGNoZWQg dG8gYW5kIGZyb20gYSBub3AgYW5kIGEgY2FsbCB3aXRoIGludDMyCi0gICAvLyByZWxhdGl2ZSBk aXNwbGFjZW1lbnQuCi1AQCAtNjY3LDkgKzY3NCw5IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gdGFyZ2V0IGJlaGF2aW91ciBp cyBvbmx5IHByb3ZpZGVkIGZvciBgbmAgaW4gdGhlIHJhbmdlIDAgLi4gMl4zMS0xCi0gICAvLyBp bmNsdXNpdmUuCi0gICBDb2RlT2Zmc2V0IG1vdmUzMldpdGhQYXRjaChSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgbWlwczY0 LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybSwgYXJtNjQsIGxv b25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwgcHBjNjQpOwotICAgdm9pZCBwYXRjaE1vdmUzMihDb2Rl T2Zmc2V0IG9mZnNldCwgSW1tMzIgbikKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm0sIGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsK LSAKLSAgcHVibGljOgotICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1AQCAtMTE3NCwxMyArMTE4MSwxMyBAQCBjbGFz cyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIGlu bGluZSB2b2lkIG11bFB0cihJbW1Xb3JkIHJocywgUmVnaXN0ZXIgc3JjRGVzdCkgUEVSX0FSQ0g7 Ci0gCi0gICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBSZWdpc3RlcjY0JiByaHMsIGNvbnN0IFJl Z2lzdGVyNjQmIHNyY0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4NjQsIGFybTY0LCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04oeDY0LCBhcm02NCwgbWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBP cGVyYW5kJiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QpIERFRklORURfT04oeDY0KTsKLSAg IGlubGluZSB2b2lkIG11bDY0KGNvbnN0IE9wZXJhbmQmIHNyYywgY29uc3QgUmVnaXN0ZXI2NCYg ZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyIHRlbXApIERFRklORURf T04oeDY0KTsKLSAgIGlubGluZSB2b2lkIG11bDY0KEltbTY0IGltbSwgY29uc3QgUmVnaXN0ZXI2 NCYgZGVzdCkgUEVSX0FSQ0g7Ci0gICBpbmxpbmUgdm9pZCBtdWw2NChJbW02NCBpbW0sIGNvbnN0 IFJlZ2lzdGVyNjQmIGRlc3QsIGNvbnN0IFJlZ2lzdGVyIHRlbXApCi0tICAgICAgREVGSU5FRF9P Tih4ODYsIHg2NCwgYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklO RURfT04oeDg2LCB4NjQsIGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0g ICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBSZWdpc3RlcjY0JiBzcmMsIGNvbnN0IFJlZ2lzdGVy NjQmIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlciB0ZW1wKSBQRVJf QVJDSDsKLSAgIGlubGluZSB2b2lkIG11bDY0KGNvbnN0IFJlZ2lzdGVyNjQmIHNyYzEsIGNvbnN0 IFJlZ2lzdGVyNjQmIHNyYzIsCi1AQCAtMTIwMiwxMSArMTIwOSwxMSBAQCBjbGFzcyBNYWNyb0Fz c2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIE9uIEFSTSwg dGhlIGNoaXAgbXVzdCBoYXZlIGhhcmR3YXJlIGRpdmlzaW9uIGluc3RydWN0aW9ucy4KLSAgIGlu bGluZSB2b2lkIHF1b3RpZW50MzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVy IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNVbnNpZ25lZCkKLS0gICAg ICBERUZJTkVEX09OKG1pcHM2NCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMy KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgcmlzY3Y2 NCwgd2FzbTMyLCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBxdW90aWVudDY0KFJlZ2lzdGVy IGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGlzVW5zaWduZWQpCi0tICAgICAgREVGSU5FRF9PTihhcm02NCwgbG9vbmc2NCwg bWlwczY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCBsb29uZzY0LCBtaXBz NjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8vIEFzIGFib3ZlLCBidXQgbGhzIGFuZCBkZXN0 IG11c3QgYmUgZWF4IGFuZCB0ZW1wRWR4IG11c3QgYmUgZWR4LgotICAgaW5saW5lIHZvaWQgcXVv dGllbnQzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwKLUBAIC0x MjE5LDExICsxMjI2LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgewotICAgLy8gT24gQVJNLCB0aGUgY2hpcCBtdXN0IGhhdmUgaGFyZHdh cmUgZGl2aXNpb24gaW5zdHJ1Y3Rpb25zLgotICAgaW5saW5lIHZvaWQgcmVtYWluZGVyMzIoUmVn aXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIGlzVW5zaWduZWQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFy bSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7Ci0rICAgICAgREVGSU5FRF9PTiht aXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgcmVtYWluZGVyNjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJl Z2lzdGVyIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQp Ci0tICAgICAgREVGSU5FRF9PTihhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0KTsKLSsg ICAgICBERUZJTkVEX09OKGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsK LSAKLSAgIC8vIEFzIGFib3ZlLCBidXQgbGhzIGFuZCBkZXN0IG11c3QgYmUgZWF4IGFuZCB0ZW1w RWR4IG11c3QgYmUgZWR4LgotICAgaW5saW5lIHZvaWQgcmVtYWluZGVyMzIoUmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCi1AQCAtMjA4MCw3ICsyMDg3LDcgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgIHZvaWQgYnJhbmNoVmFsdWVJc051cnNlcnlDZWxsSW1w bChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgTGFiZWwqIGxhYmVsKQotLSAgICAgIERFRklO RURfT04oYXJtNjQsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJ TkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAot ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICBpbmxpbmUgdm9pZCBicmFuY2hUZXN0VW5kZWZp bmVkSW1wbChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgdCwgTGFiZWwqIGxhYmVsKQotQEAgLTIy NDUsNyArMjI1Miw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1i bGVyU3BlY2lmaWMgewotICAgLy8gZnJvbSBhbGwgdGhlIG90aGVyIHJlZ2lzdGVycywgb24gYWxs IHN1cHBvcnRlZCB0YXJnZXRzLgotICAgaW5saW5lIHZvaWQgd2FzbUFkZFN1YkkxMjhISTY0KFJl Z2lzdGVyIGxoc0xvLCBSZWdpc3RlciBsaHNIaSwgUmVnaXN0ZXIgcmhzTG8sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzSGksIFJlZ2lzdGVyIG91dHB1dCwg Ym9vbCBpc0FkZCkKLS0gICAgICBERUZJTkVEX09OKHg2NCwgYXJtNjQsIHJpc2N2NjQsIGxvb25n NjQsIG1pcHM2NCk7Ci0rICAgICAgREVGSU5FRF9PTih4NjQsIGFybTY0LCByaXNjdjY0LCBsb29u ZzY0LCBtaXBzNjQsIHBwYzY0KTsKLSAKLSAgIC8vIFByb2R1Y2VzIHRoZSB0b3AgNjQgYml0cyBv ZiB0aGUgMTI4LWJpdCB2YWx1ZSBgUkFYICp3aWRlbiByaHNgLiAgVGhlIHJlc3VsdAotICAgLy8g d2lsbCBiZSBpbiBSQVguICBSRFggaXMgdHJhc2hlZC4gIGByaHNgIG1heSBub3QgYmUgUkFYIG9y IFJEWC4gIENhbGxlcnMKLUBAIC0yMjU2LDcgKzIyNjMsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxl ciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIHdoYXQgdGhlIHJlZ2lz dGVycyBtYXkgYmUuCi0gICBpbmxpbmUgdm9pZCB3YXNtTXVsSTY0V2lkZUhJNjQoUmVnaXN0ZXIg bGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIGlzU2lnbmVkKQotLSAgICAgIERFRklORURfT04oYXJtNjQsIHJp c2N2NjQsIGxvb25nNjQsIG1pcHM2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgcmlzY3Y2 NCwgbG9vbmc2NCwgbWlwczY0LCBwcGM2NCk7Ci0gCi0gICAvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg IC8vIENhbm9uaWNhbGl6YXRpb24gcHJpbWl0aXZlcy4KLUBAIC0yMzU1LDY4ICsyMzYyLDY4IEBA IGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewot ICAgLy8gTW92ZXMKLSAKLSAgIGlubGluZSB2b2lkIG1vdmVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgLy8gQ29uc3RhbnRzCi0gCi0gICBpbmxpbmUgdm9pZCBsb2FkQ29uc3RhbnRTaW1kMTI4KGNv bnN0IFNpbWRDb25zdGFudCYgdiwgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIC8vIFNwbGF0Ci0gCi0gICBpbmxpbmUgdm9pZCBzcGxhdFgxNihS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzcGxhdFgxNih1aW50MzJfdCBzcmNMYW5lLCBGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotICAgICAgIERFRklORURfT04oYXJtNjQp OwotIAotICAgaW5saW5lIHZvaWQgc3BsYXRYOChSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzcGxh dFg4KHVpbnQzMl90IHNyY0xhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0gICAgICAgREVGSU5FRF9PTihhcm02NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzcGxhdFg0 KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHNwbGF0WDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCBzcGxhdFgyKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAg REVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2LCB4NjQs IGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzcGxhdFgyKEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgLy8gRXh0cmFjdCBsYW5lIGFzIHNjYWxhci4gIEZsb2F0IGV4dHJhY3Rpb24gZG9lcyBub3Qg Y2Fub25pY2FsaXplIHRoZSB2YWx1ZS4KLSAKLSAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lSW50 OHgxNih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1 bnNpZ25lZEV4dHJhY3RMYW5lSW50OHgxNih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNy YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgZXh0cmFj dExhbmVJbnQxNng4KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHVuc2lnbmVkRXh0cmFjdExhbmVJbnQxNng4KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVn aXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCBleHRyYWN0TGFuZUludDMyeDQodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgZXh0cmFjdExhbmVJbnQ2NHgyKHVpbnQzMl90IGxhbmUsIEZsb2F0UmVn aXN0ZXIgc3JjLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQg ZGVzdCkgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCkgREVGSU5FRF9PTih4ODYsIHg2NCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lRmxvYXQzMng0KHVpbnQzMl90 IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lRmxvYXQ2NHgyKHVpbnQzMl90IGxhbmUsIEZsb2F0 UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIFJlcGxh Y2UgbGFuZSB2YWx1ZQotIAotQEAgLTI0MjUsMjEgKzI0MzIsMjEgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0gICBpbmxpbmUgdm9p ZCByZXBsYWNlTGFuZUludDh4MTYodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDE2 eDgodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDE2eDgodW5z aWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDMyeDQodW5zaWduZWQgbGFuZSwgRmxvYXRS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDMyeDQodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNl TGFuZUludDY0eDIodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByaHMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkKLUBAIC0yNDQ3LDcgKzI0NTQsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBN YWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIGlubGluZSB2b2lkIHJlcGxhY2VMYW5lSW50 NjR4Mih1bnNpZ25lZCBsYW5lLCBSZWdpc3RlcjY0IHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4 ODYsIHg2NCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5l LCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi1AQCAtMjQ1NSw3ICsyNDYy LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZp YyB7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5l LCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0NjR4Mih1bnNpZ25lZCBsYW5lLCBGbG9hdFJl Z2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi1AQCAtMjQ2Myw3ICsyNDcwLDcgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0g ICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUZsb2F0NjR4Mih1bnNpZ25lZCBsYW5lLCBGbG9hdFJl Z2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBTaHVm ZmxlIC0gYmxlbmQgYW5kIHBlcm11dGUgd2l0aCBpbW1lZGlhdGUgaW5kaWNlcywgYW5kIGl0cyBt YW55Ci0gICAvLyBzcGVjaWFsaXphdGlvbnMuICBMYW5lIHZhbHVlcyBvdGhlciB0aGFuIHRob3Nl IG1lbnRpb25lZCBhcmUgaWxsZWdhbC4KLUBAIC0yNDcxLDExICsyNDc4LDExIEBAIGNsYXNzIE1h Y3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gbGFu ZSB2YWx1ZXMgMC4uMzEKLSAgIGlubGluZSB2b2lkIHNodWZmbGVJbnQ4eDE2KGNvbnN0IHVpbnQ4 X3QgbGFuZXNbMTZdLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBzaHVmZmxlSW50OHgxNihjb25zdCB1aW50OF90IGxhbmVzWzE2 XSwgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIC8vIExhbmUgdmFsdWVzIG11c3QgYmUgMCAoc2VsZWN0IGZyb20gbGhzKSBv ciBGRiAoc2VsZWN0IGZyb20gcmhzKS4KLSAgIC8vIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQg Zm9yIGxhbmUgdmFsdWVzIHRoYXQgYXJlIG5laXRoZXIgMCBub3IgRkYuCi1AQCAtMjUwMiwzOSAr MjUwOSwzOSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKLSAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiB3b3JrcyBlZmZlY3RpdmVseSBmb3Ig STh4MTYsIEkxNng4LCBJMzJ4NCwgYW5kIEk2NHgyLgotICAgaW5saW5lIHZvaWQgbGFuZVNlbGVj dFNpbWQxMjgoRmxvYXRSZWdpc3RlciBtYXNrLCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgaW50 ZXJsZWF2ZUhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2 ZUhpZ2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUhpZ2hJ bnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUhpZ2hJbnQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUxvd0ludDh4MTYoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVMb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBpbnRlcmxlYXZlTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgaW50ZXJsZWF2ZUxvd0ludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIFBlcm11dGUgLSBw ZXJtdXRlIHdpdGggaW1tZWRpYXRlIGluZGljZXMuCi0gCi1AQCAtMjU0NCw3ICsyNTUxLDcgQEAg Y2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0g Ci0gICAvLyBsYW5lIHZhbHVlcyAwLi43Ci0gICBpbmxpbmUgdm9pZCBwZXJtdXRlSW50MTZ4OChj b25zdCB1aW50MTZfdCBsYW5lc1s4XSwgRmxvYXRSZWdpc3RlciBzcmMsCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBsYW5lIHZhbHVlcyAwLi4zIFtzaWNdLgotICAg aW5saW5lIHZvaWQgcGVybXV0ZUhpZ2hJbnQxNng4KGNvbnN0IHVpbnQxNl90IGxhbmVzWzRdLCBG bG9hdFJlZ2lzdGVyIHNyYywKLUBAIC0yNTYyLDgwICsyNTY5LDgwIEBAIGNsYXNzIE1hY3JvQXNz ZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gICBsb3dfMTZf Ynl0ZXNfb2YoKGxocyArKyByaHMpID4+IHNoaWZ0KjgpLCBzaGlmdCBtdXN0IGJlIDwgMTYKLSAg IGlubGluZSB2b2lkIGNvbmNhdEFuZFJpZ2h0U2hpZnRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgdWludDMyX3Qgc2hpZnQpCi0tICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOwotIAotICAgLy8gUm90YXRlIHJpZ2h0IGJ5IGltbWVkaWF0ZSBjb3VudDoK LSAgIC8vICAgbG93XzE2X2J5dGVzX29mKChzcmMgKysgc3JjKSA+PiBzaGlmdCo4KSwgc2hpZnQg bXVzdCBiZSA8IDE2Ci0gICBpbmxpbmUgdm9pZCByb3RhdGVSaWdodFNpbWQxMjgoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCBzaGlmdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hpZnQpIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKLSAKLSAgIC8vIFNoaWZ0IGJ5dGVzIHdpdGggaW1tZWRpYXRlIGNvdW50LCBzaGlmdGlu ZyBpbiB6ZXJvZXMuICBTaGlmdCBjb3VudCAwLi4xNS4KLSAKLSAgIGlubGluZSB2b2lkIGxlZnRT aGlmdFNpbWQxMjgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdFNpbWQxMjgoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8v IFplcm8gZXh0ZW5kIGludCB2YWx1ZXMuCi0gCi0gICBpbmxpbmUgdm9pZCB6ZXJvRXh0ZW5kOHgx NlRvMTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKLSAgIGlubGluZSB2b2lkIHplcm9FeHRlbmQ4eDE2VG8zMng0KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOwotICAgaW5saW5lIHZvaWQgemVyb0V4dGVuZDh4MTZUbzY0eDIoRmxvYXRSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g ICBpbmxpbmUgdm9pZCB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAgIGlubGluZSB2 b2lkIHplcm9FeHRlbmQxNng4VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotICAgaW5saW5lIHZvaWQgemVyb0V4 dGVuZDMyeDRUbzY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBSZXZlcnNlIGJ5dGVzIGluIGxhbmVz LgotIAotICAgaW5saW5lIHZvaWQgcmV2ZXJzZUludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK LSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxp bmUgdm9pZCByZXZlcnNlSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHJldmVy c2VJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gU3dpenpsZSAtIHBlcm11dGUgd2l0aCB2YXJp YWJsZSBpbmRpY2VzLiAgYHJoc2AgaG9sZHMgdGhlIGxhbmVzIHBhcmFtZXRlci4KLSAKLSAgIGlu bGluZSB2b2lkIHN3aXp6bGVJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHN3aXp6bGVJbnQ4eDE2UmVsYXhlZChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIC8vIEludGVnZXIgQWRkCi0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwot IAotICAgaW5saW5lIHZvaWQgYWRkSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgYWRkSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3Qg U2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIGFkZElu dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFk ZEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIg bGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotQEAgLTI2NDMsMTMg KzI2NTAsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJT cGVjaWZpYyB7Ci0gICAvLyBJbnRlZ2VyIFN1YnRyYWN0Ci0gCi0gICBpbmxpbmUgdm9pZCBzdWJJ bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBz dWJJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50MTZ4OChGbG9hdFJlZ2lzdGVy IGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBAIC0yNjU4LDI0 ICsyNjY1LDI0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgewotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzdWJJbnQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK LSsgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzdWJJbnQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgLy8gSW50ZWdlciBNdWx0aXBseQotIAotICAgaW5saW5lIHZvaWQgbXVsSW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbXVs SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIG11bEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG11bEludDMyeDQoRmxvYXRSZWdpc3RlciBs aHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMjY5MSwxMDAg KzI2OTgsMTAwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgewotIAotICAgaW5saW5lIHZvaWQgbXVsSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIC8vIE5vdGUgZm9yIHRoZSBleHRNdWwgb3Bjb2RlcywgdGhlIE54TSBkZXNpZ25h dGlvbiBpcyBmb3IgdGhlIGlucHV0IGxhbmVzOwotICAgLy8gdGhlIG91dHB1dCBsYW5lcyBhcmUg dHdpY2UgYXMgd2lkZS4KLSAgIGlubGluZSB2b2lkIGV4dE11bExvd0ludDh4MTYoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgZXh0TXVsSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lk IHVuc2lnbmVkRXh0TXVsTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lk IHVuc2lnbmVkRXh0TXVsSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgZXh0TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBleHRNdWxIaWdoSW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRFeHRNdWxMb3dJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRFeHRNdWxIaWdoSW50MTZ4OChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBleHRNdWxMb3dJbnQzMng0KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIGV4dE11bEhpZ2hJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCB1bnNpZ25lZEV4dE11bExvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCB1bnNpZ25lZEV4dE11bEhpZ2hJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIHExNU11bHJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBJbnRlZ2VyIE5lZ2F0ZQotIAot ICAgaW5saW5lIHZvaWQgbmVnSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG5l Z0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBuZWdJbnQzMng0KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgbmVnSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIFNhdHVy YXRpbmcgaW50ZWdlciBhZGQKLSAKLSAgIGlubGluZSB2b2lkIGFkZFNhdEludDh4MTYoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFkZFNhdElu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZEFkZFNhdEludDh4MTYoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZEFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsK LSAKLSAgIGlubGluZSB2b2lkIGFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCB1bnNpZ25lZEFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCB1bnNpZ25lZEFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRD b25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBAIC0yNzkyLDI3ICsyNzk5 LDI3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lm aWMgewotICAgLy8gU2F0dXJhdGluZyBpbnRlZ2VyIHN1YnRyYWN0Ci0gCi0gICBpbmxpbmUgdm9p ZCBzdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBzdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1k Q29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWdu ZWRTdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0t ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRTdWJT YXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzdWJTYXRJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBzdWJT YXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRTdWJTYXRJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRTdWJTYXRJbnQxNng4KEZsb2F0UmVn aXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCk7Ci1AQCAtMjgyMCw0MCArMjgyNyw0MCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIExhbmUtd2lzZSBpbnRlZ2VyIG1pbmlt dW0KLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNv bnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1 bnNpZ25lZE1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbklu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDE2eDgoRmxvYXRSZWdp c3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1 bnNpZ25lZE1pbkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYg cmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDMyeDQo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkludDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCB1bnNpZ25lZE1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNp bWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBAIC0yODYxLDQwICsyODY4 LDQwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lm aWMgewotICAgLy8gTGFuZS13aXNlIGludGVnZXIgbWF4aW11bQotIAotICAgaW5saW5lIHZvaWQg bWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgbWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxo cywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAg aW5saW5lIHZvaWQgbWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgbWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4 SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4SW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQpOwotIAotICAgaW5saW5lIHZvaWQgbWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywg Y29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lk IHVuc2lnbmVkTWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTWF4 SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOwotQEAgLTI5MDMsMjUgKzI5MTAsMjUgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0gICBpbmxpbmUgdm9p ZCB1bnNpZ25lZEF2ZXJhZ2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVu c2lnbmVkQXZlcmFnZUludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gTGFuZS13aXNlIGludGVn ZXIgYWJzb2x1dGUgdmFsdWUKLSAKLSAgIGlubGluZSB2b2lkIGFic0ludDh4MTYoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBhYnNJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgYWJzSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFic0ludDY0eDIoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICAvLyBMZWZ0IHNoaWZ0IGJ5IHNjYWxhci4gSW1tZWRpYXRlcyBhbmQgdmFy aWFibGUgc2hpZnRzIG11c3QgaGF2ZSBiZWVuCi0gICAvLyBtYXNrZWQ7IHNoaWZ0cyBvZiB6ZXJv IHdpbGwgd29yayBidXQgbWF5IG9yIG1heSBub3QgZ2VuZXJhdGUgY29kZS4KLUBAIC0yOTMwLDQx ICsyOTM3LDQxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hp ZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50OHgx NihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQxNng4KFJlZ2lzdGVyIHJocywgRmxvYXRS ZWdpc3RlciBsaHNEZXN0KQotICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciBy aHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgbGVmdFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQzMng0KFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotICAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRS ZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBs ZWZ0U2hpZnRJbnQ2NHgyKFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotICAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRJ bnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50NjR4MihJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICAvLyBSaWdodCBzaGlmdCBieSBzY2FsYXIuIEltbWVkaWF0ZXMgYW5kIHZhcmlhYmxlIHNo aWZ0cyBtdXN0IGhhdmUgYmVlbgotICAgLy8gbWFza2VkOyBzaGlmdHMgb2YgemVybyB3aWxsIHdv cmsgYnV0IG1heSBvciBtYXkgbm90IGdlbmVyYXRlIGNvZGUuCi1AQCAtMjk3Myw4MiArMjk4MCw4 MiBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkg REVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50OHgxNihJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihSZWdpc3RlciByaHMs IEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKQotICAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNo aWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50MTZ4OChS ZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDE2eDgoRmxvYXRSZWdp c3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQxNng4KEltbTMyIGNvdW50LCBG bG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQxNng4KFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3Rl ciBsaHNEZXN0KQotICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUg dm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChJbW0zMiBj b3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50MzJ4NChSZWdpc3RlciByaHMsIEZsb2F0 UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAg aW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVy IHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHJpZ2h0U2hpZnRJbnQzMng0KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0 U2hpZnRJbnQzMng0KFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotICAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0 U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3Rl ciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCByaWdodFNoaWZ0SW50NjR4MihSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVG SU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQ2NHgy KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywg UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50NjR4MihSZWdpc3RlciByaHMsIEZs b2F0UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxo cywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDY0 eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgLy8gU2lnbiByZXBsaWNhdGlvbiBvcGVyYXRpb24KLSAKLUBAIC0z MDY3LDQ3ICszMDc0LDQ3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgewotICAgLy8gQml0d2lzZSBhbmQsIG9yLCB4b3IsIG5vdAotIAotICAg aW5saW5lIHZvaWQgYml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVn aXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCBiaXR3aXNlQW5kU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgYml0d2lzZUFu ZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgYml0d2lzZU9yU2ltZDEyOChGbG9h dFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VPclNpbWQxMjgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgYml0d2lzZU9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2lt ZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIGJp dHdpc2VYb3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgYml0d2lzZVhv clNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VYb3JTaW1kMTI4KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VOb3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg Ly8gQml0d2lzZSBBTkQgd2l0aCBjb21wbGltZW50OiBkZXN0ID0gbGhzICYgfnJocywgbm90ZSBv bmx5IGFybTY0IGNhbiBkbyBpdC4KLSAgIGlubGluZSB2b2lkIGJpdHdpc2VBbmROb3RTaW1kMTI4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgREVGSU5FRF9PTihhcm02 NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxo c0Rlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEJpdHdpc2UgQU5EIHdp dGggY29tcGxlbWVudDogZGVzdCA9IH5saHMgJiByaHMsIG5vdGUgdGhpcyBpcyBub3Qgd2hhdCBX YXNtCi0gICAvLyB3YW50cyBidXQgd2hhdCB0aGUgeDg2IGhhcmR3YXJlIG9mZmVycy4gIEhlbmNl IHRoZSBuYW1lLgotIAotICAgaW5saW5lIHZvaWQgYml0d2lzZU5vdEFuZFNpbWQxMjgoRmxvYXRS ZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlTm90QW5kU2ltZDEyOChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi1AQCAtMzEyMCwzNCArMzEyNywzNCBAQCBj bGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVG SU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VTZWxlY3RTaW1k MTI4KEZsb2F0UmVnaXN0ZXIgb25UcnVlLCBGbG9hdFJlZ2lzdGVyIG9uRmFsc2UsCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIG1hc2tEZXN0KSBERUZJ TkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgbWFza0Rlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIFBv cHVsYXRpb24gY291bnQKLSAKLSAgIGlubGluZSB2b2lkIHBvcGNudEludDh4MTYoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oeDg2X3No YXJlZCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcG9wY250SW50OHgxNihGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oYXJtNjQpOwot KyAgICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEFueSBsYW5lIHRydWUs IGllLCBhbnkgYml0IHNldAotIAotICAgaW5saW5lIHZvaWQgYW55VHJ1ZVNpbWQxMjgoRmxvYXRS ZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgLy8gQWxsIGxhbmVzIHRydWUKLSAKLSAgIGlubGluZSB2b2lkIGFsbFRydWVJbnQ4eDE2 KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFsbFRydWVJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIGFsbFRydWVJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFsbFRydWVJbnQ2 NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIC8vIEJpdG1hc2ssIGllIGV4dHJhY3QgYW5kIGNvbXByZXNzIGhpZ2gg Yml0cyBvZiBhbGwgbGFuZXMKLSAKLUBAIC0zMTU1LDMxICszMTYyLDMxIEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50OHgxNihGbG9h dFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdG1hc2tJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KQotICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBiaXRtYXNrSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVG SU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHRlbXApIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJp dG1hc2tJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQotICAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50MzJ4NChG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdG1hc2tJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0KQotICAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIg ZGVzdCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkg REVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIENvbXBhcmlz b25zIChpbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCkKLSAKLSAgIGlubGluZSB2b2lkIGNvbXBh cmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIE9uIHg4Nl9zaGFyZWQsIGxpbWl0ZWQg dG8gIT0sID09LCA8PSwgPgotICAgaW5saW5lIHZvaWQgY29tcGFyZUludDh4MTYoQXNzZW1ibGVy OjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi1AQCAtMzE4OSwxNSArMzE5Niwx NSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKLSAgIC8vIE9uIGFybTY0LCB1c2UgYW55IGludGVnZXIgY29tcGFyaXNvbiBjb25kaXRpb24u Ci0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25k LCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpDb25kaXRp b24gY29uZCwgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwg RmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIC8vIE9uIHg4Nl9zaGFyZWQsIGxpbWl0ZWQgdG8gIT0sID09LCA8PSwgPgotICAg aW5saW5lIHZvaWQgY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxv YXRSZWdpc3RlciBsaHMsCi1AQCAtMzIwNyw3ICszMjE0LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs ZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBPbiB4ODZfc2hhcmVk LCBsaW1pdGVkIHRvICE9LCA9PSwgPD0sID4KLSAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQzMng0 KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQzMng0KEFzc2VtYmxl cjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgU2ltZENvbnN0YW50JiByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LUBAIC0zMjE2LDcgKzMyMjMsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNy b0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIE9uIGFybTY0LCB1c2UgYW55IGludGVnZXIgY29t cGFyaXNvbiBjb25kaXRpb24uCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50MzJ4NChBc3NlbWJs ZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgY29tcGFyZUZvckVxdWFs aXR5SW50NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi1AQCAtMzIzMCwxNSArMzIzNywxNSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotIAotICAgaW5saW5lIHZvaWQgY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24g Y29uZCwgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSBERUZJTkVEX09OKGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50NjR4MihBc3NlbWJsZXI6OkNvbmRp dGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5F RF9PTihhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5s aW5lIHZvaWQgY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9h dFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBsaHNEZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIE9uIHg4 Nl9zaGFyZWQsIGxpbWl0ZWQgdG8gPT0sICE9LCA8LCA8PQotICAgaW5saW5lIHZvaWQgY29tcGFy ZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywK LUBAIC0zMjQ5LDExICszMjU2LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1h Y3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gT24gYXJtNjQsIHVzZSBhbnkgZmxvYXQtcG9p bnQgY29tcGFyaXNvbiBjb25kaXRpb24uCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlRmxvYXQzMng0 KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGNvbXBh cmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1p dGVkIHRvID09LCAhPSwgPCwgPD0KLSAgIGlubGluZSB2b2lkIGNvbXBhcmVGbG9hdDY0eDIoQXNz ZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi1AQCAtMzI2NCw3ICsz MjcxLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7Ci0gICAvLyBPbiBhcm02NCwgdXNlIGFueSBmbG9hdC1wb2ludCBjb21wYXJpc29uIGNv bmRpdGlvbi4KLSAgIGlubGluZSB2b2lkIGNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25k aXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gTG9hZAotIAotQEAgLTMyNzMsOTIgKzMyODAsOTIg QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7 Ci0gCi0gICBpbmxpbmUgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRVbmFsaWduZWRTaW1kMTI4KGNv bnN0IEFkZHJlc3MmIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZFVuYWxpZ25lZFNpbWQxMjgo Y29uc3QgQmFzZUluZGV4JiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICAvLyBTdG9yZQotIAotICAgaW5saW5lIEZhdWx0aW5nQ29kZU9mZnNldCBz dG9yZVVuYWxpZ25lZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSBGYXVsdGluZ0NvZGVPZmZz ZXQgc3RvcmVVbmFsaWduZWRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEZsb2F0aW5nIHBvaW50 IG5lZ2F0aW9uCi0gCi0gICBpbmxpbmUgdm9pZCBuZWdGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBuZWdGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGluZyBw b2ludCBhYnNvbHV0ZSB2YWx1ZQotIAotICAgaW5saW5lIHZvaWQgYWJzRmxvYXQzMng0KEZsb2F0 UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgYWJzRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8g TmFOLXByb3BhZ2F0aW5nIG1pbmltdW0KLSAKLSAgIGlubGluZSB2b2lkIG1pbkZsb2F0MzJ4NChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAotLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2 X3NoYXJlZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1w MikgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5G bG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAg ICBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCBtaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3Rl ciB0ZW1wMSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAy KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgbWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTihh cm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwot IAotICAgLy8gTmFOLXByb3BhZ2F0aW5nIG1heGltdW0KLSAKLSAgIGlubGluZSB2b2lkIG1heEZs b2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAx LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciB0ZW1wMikgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCBtYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKLS0gICAgICBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBtYXhGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxv YXRSZWdpc3RlciB0ZW1wMSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9h dFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2NHgyKEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwg cHBjNjQpOwotIAotICAgLy8gRmxvYXRpbmcgYWRkCi0gCi0gICBpbmxpbmUgdm9pZCBhZGRGbG9h dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCBhZGRGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIGFkZEZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFkZEZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQpOwotQEAgLTMzNjYsMTMgKzMzNzMsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJs aWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBGbG9hdGluZyBzdWJ0cmFjdAotIAot ICAgaW5saW5lIHZvaWQgc3ViRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBj b25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCBzdWJGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBzdWJGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25z dGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBAIC0zMzgwLDEzICszMzg3LDEzIEBAIGNsYXNz IE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8g RmxvYXRpbmcgZGl2aXNpb24KLSAKLSAgIGlubGluZSB2b2lkIGRpdkZsb2F0MzJ4NChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGRpdkZsb2F0MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQpOwotIAotICAgaW5saW5lIHZvaWQgZGl2RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgZGl2RmxvYXQ2NHgyKEZsb2F0UmVnaXN0 ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMzM5 NCwxMyArMzQwMSwxMyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKLSAgIC8vIEZsb2F0aW5nIE11bHRpcGx5Ci0gCi0gICBpbmxpbmUgdm9p ZCBtdWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBtdWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25z dGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIG11bEZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG11 bEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOwotQEAgLTM0MDgsOTEgKzM0MTUsOTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs ZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBQYWlyd2lzZSBhZGQK LSAKLSAgIGlubGluZSB2b2lkIGV4dEFkZFBhaXJ3aXNlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIHVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg c3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIGV4dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVu c2lnbmVkRXh0QWRkUGFpcndpc2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEZsb2F0aW5nIHNxdWFyZSByb290 Ci0gCi0gICBpbmxpbmUgdm9pZCBzcXJ0RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgc3FydEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEludGVnZXIgdG8gZmxvYXRp bmcgcG9pbnQgd2l0aCByb3VuZGluZwotIAotICAgaW5saW5lIHZvaWQgY29udmVydEludDMyeDRU b0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkQ29udmVydElu dDMyeDRUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgY29udmVydEludDMyeDRUb0Zs b2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkQ29udmVydEludDMy eDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gRmxvYXRpbmcgcG9pbnQgdG8gaW50ZWdlciB3aXRo IHNhdHVyYXRpb24KLSAKLSAgIGlubGluZSB2b2lkIHRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRv SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApCi0t ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNTYXRGbG9hdDMyeDRU b0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxp bmUgdm9pZCB0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB0ZW1wKQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHRydW5jRmxvYXQzMng0VG9JbnQzMng0UmVsYXhl ZChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRUcnVuY0Zsb2F0MzJ4NFRvSW50MzJ4NFJlbGF4 ZWQoRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdHJ1bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxh eGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFRydW5jRmxvYXQ2NHgyVG9JbnQzMng0UmVs YXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGluZyBwb2ludCBuYXJyb3dpbmcKLSAKLSAgIGlu bGluZSB2b2lkIGNvbnZlcnRGbG9hdDY0eDJUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8v IEZsb2F0aW5nIHBvaW50IHdpZGVuaW5nCi0gCi0gICBpbmxpbmUgdm9pZCBjb252ZXJ0RmxvYXQz Mng0VG9GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBJbnRlZ2VyIHRvIGludGVnZXIgbmFy cm93aW5nCi0gCi1AQCAtMzUwMCw2NSArMzUwNyw2NSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAg aW5saW5lIHZvaWQgbmFycm93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWROYXJyb3dJbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE5hcnJvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBuYXJyb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1k Q29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgbmFycm93 SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgdW5zaWduZWROYXJyb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1k Q29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9p ZCB1bnNpZ25lZE5hcnJvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBJbnRlZ2VyIHRvIGlu dGVnZXIgd2lkZW5pbmcKLSAKLSAgIGlubGluZSB2b2lkIHdpZGVuTG93SW50OHgxNihGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHdpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHVuc2lnbmVkV2lkZW5IaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIHdpZGVuTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHdpZGVuSGln aEludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuTG93SW50 MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkV2lkZW5IaWdoSW50MTZ4 OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHdpZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkV2lkZW5Mb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgd2lkZW5IaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIHVuc2lnbmVkV2lkZW5IaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIENvbXBhcmUt YmFzZWQgbWluaW11bS9tYXhpbXVtCi0gICAvLwotQEAgLTM1NzAsNDcgKzM1NzcsNDcgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0g ICBpbmxpbmUgdm9pZCBwc2V1ZG9NaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHNPclJoc0Rl c3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNP ckxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQg cHNldWRvTWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0t ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcHNldWRvTWluRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JMaHNEZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHBzZXVkb01pbkZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIGlubGluZSB2b2lkIHBzZXVkb01heEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHJoc09y UmhzRGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGxoc09yTGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCBwc2V1ZG9NYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBwc2V1ZG9N YXhGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciByaHNPclJoc0Rlc3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcHNldWRvTWF4RmxvYXQ2NHgyKEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgLy8gV2lkZW5pbmcvcGFpcndpc2UgaW50ZWdlciBkb3QgcHJvZHVjdAotIAot ICAgaW5saW5lIHZvaWQgd2lkZW5Eb3RJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgd2lkZW5Eb3RJbnQxNng4KEZsb2F0UmVn aXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBkb3RJbnQ4eDE2SW50N3gxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgZG90SW50OHgxNkludDd4MTZUaGVuQWRkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCi1AQCAtMzYxOCw4MSArMzYyNSw4MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxl ciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIGlubGluZSB2b2lkIGRv dEludDh4MTZJbnQ3eDE2VGhlbkFkZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXApCi0tICAgICAgREVGSU5FRF9PTihhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgLy8gRmxvYXRpbmcgcG9pbnQg cm91bmRpbmcKLSAKLSAgIGlubGluZSB2b2lkIGNlaWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBjZWlsRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lz dGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQg Zmxvb3JGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBmbG9vckZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHRydW5jRmxvYXQzMng0KEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgaW5saW5lIHZvaWQgdHJ1bmNGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCBuZWFyZXN0RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbmVhcmVz dEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEZsb2F0aW5nIG11bHRpcGx5LWFjY3VtdWxh dGU6IHNyY0Rlc3QgWystXT0gc3JjMSAqIHNyYzIKLSAKLSAgIGlubGluZSB2b2lkIGZtYUZsb2F0 MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjRGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5s aW5lIHZvaWQgZm5tYUZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIg c3JjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGZtYUZsb2F0 NjR4MihGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjRGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5s aW5lIHZvaWQgZm5tYUZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIg c3JjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkZsb2F0 MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDRS ZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1heEZsb2F0MzJ4NFJlbGF4ZWQoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKLS0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtYXhGbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIGlubGluZSB2b2lkIG1pbkZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBtaW5GbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIG1heEZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg c3JjRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBt YXhGbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHExNU11bHJJbnQx Nng4UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgcHVibGljOgotICAgLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci1AQCAtMzcxNywxMCArMzcyNCwxMCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBN YWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIC8vIHRlbXAgcmVxdWlyZWQgb24geDg2IGFu ZCB4NjQ7IG11c3QgYmUgdW5kZWZpbmVkIG9uIG1pcHM2NCBhbmQgbG9vbmc2NC4KLSAgIHZvaWQg Y29udmVydFVJbnQ2NFRvRmxvYXQzMihSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 LCBSZWdpc3RlciB0ZW1wKQotLSAgICAgIERFRklORURfT04oYXJtNjQsIG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgd2FzbTMyLCB4NjQsIHg4Nik7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwg bWlwczY0LCBsb29uZzY0LCBwcGM2NCwgcmlzY3Y2NCwgd2FzbTMyLCB4NjQsIHg4Nik7Ci0gCi0g ICB2b2lkIGNvbnZlcnRJbnQ2NFRvRmxvYXQzMihSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2 NCwgd2FzbTMyLCB4NjQsIHg4Nik7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgbWlwczY0LCBs b29uZzY0LCBwcGM2NCwgcmlzY3Y2NCwgd2FzbTMyLCB4NjQsIHg4Nik7Ci0gCi0gICBib29sIGNv bnZlcnRVSW50NjRUb0RvdWJsZU5lZWRzVGVtcCgpIFBFUl9BUkNIOwotIAotQEAgLTM4MDEsMTYg KzM4MDgsMTYgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJT cGVjaWZpYyB7Ci0gICAvLyBTY2FsYXI6OkludDY0LgotICAgdm9pZCB3YXNtTG9hZChjb25zdCB3 YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsCi0gICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0 ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04oYXJtLCBsb29uZzY0LCByaXNjdjY0LCBtaXBz NjQpOwotKyAgICAgIERFRklORURfT04oYXJtLCBsb29uZzY0LCByaXNjdjY0LCBtaXBzNjQsIHBw YzY0KTsKLSAgIHZvaWQgd2FzbUxvYWRJNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYg YWNjZXNzLCBSZWdpc3RlciBtZW1vcnlCYXNlLAotICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIFJlZ2lzdGVyNjQgb3V0cHV0KQotLSAgICAgIERF RklORURfT04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURf T04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAgIHZvaWQgd2FzbVN0 b3JlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQW55UmVnaXN0ZXIgdmFs dWUsCi0gICAgICAgICAgICAgICAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIs IFJlZ2lzdGVyIHB0clNjcmF0Y2gpCi0tICAgICAgREVGSU5FRF9PTihhcm0sIGxvb25nNjQsIHJp c2N2NjQsIG1pcHM2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm0sIGxvb25nNjQsIHJpc2N2NjQs IG1pcHM2NCwgcHBjNjQpOwotICAgdm9pZCB3YXNtU3RvcmVJNjQoY29uc3Qgd2FzbTo6TWVtb3J5 QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlcjY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNo KQotLSAgICAgIERFRklORURfT04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAg ICAgIERFRklORURfT04oYXJtLCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAK LSAgIC8vIFRoZXNlIGFjY2VwdCBnZW5lcmFsIG1lbW9yeUJhc2UgKyBwdHIgKyBvZmZzZXQgKGlu IGBhY2Nlc3NgKTsgdGhlIG9mZnNldCBpcwotICAgLy8gYWx3YXlzIHNtYWxsZXIgdGhhbiB0aGUg Z3VhcmQgcmVnaW9uLiAgVGhleSB3aWxsIGluc2VydCBhbiBhZGRpdGlvbmFsIGFkZAotQEAgLTM4 ODksMTEgKzM4OTYsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIHdhc21UcnVuY2F0ZURvdWJsZVRvSW50NjQoRmxvYXRS ZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsIExhYmVsKiBvb2xFbnRyeSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVy IHRlbXBEb3VibGUpCi0tICAgICAgREVGSU5FRF9PTihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYs IHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIsIHBwYzY0KTsKLSAgIHZvaWQg d2FzbVRydW5jYXRlRG91YmxlVG9VSW50NjQoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2 NCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1 cmF0aW5nLCBMYWJlbCogb29sRW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkKLS0gICAgICBE RUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNt MzIpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOwotICAgdm9pZCBvb2xXYXNtVHJ1bmNhdGVDaGVja0Y2 NFRvSTY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydW5jRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFw U2l0ZURlc2MsCi1AQCAtMzkwMiwxMSArMzkwOSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIHZvaWQgd2FzbVRydW5jYXRlRmxv YXQzMlRvSW50NjQoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCog b29sRW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xS ZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkKLS0gICAgICBERUZJTkVEX09OKGFybTY0 LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOwotKyAgICAgIERF RklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20z MiwgcHBjNjQpOwotICAgdm9pZCB3YXNtVHJ1bmNhdGVGbG9hdDMyVG9VSW50NjQoRmxvYXRSZWdp c3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbFJlam9pbiwgRmxvYXRSZWdpc3Rl ciB0ZW1wRG91YmxlKQotLSAgICAgIERFRklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgeDg2 LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCBwcGM2NCk7Ci0gICB2b2lk IG9vbFdhc21UcnVuY2F0ZUNoZWNrRjMyVG9JNjQoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0 ZXI2NCBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1bmNG bGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3 YXNtOjpUcmFwU2l0ZURlc2MmIHRyYXBTaXRlRGVzYywKLUBAIC00MjIwLDcgKzQyMjcsOCBAQCBj bGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAg IC8vIGNvbnZlbnRpb24sIHdoaWNoIHJlcXVpcmVzIHByZWRpY3RhYmxlIGhpZ2ggYml0cy4gIElu IHByYWN0aWNlLCB0aGlzIG1lYW5zCi0gICAvLyB0aGF0IHRoZSAzMi1iaXQgdmFsdWUgd2lsbCBi ZSB6ZXJvLWV4dGVuZGVkIG9yIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cyBhcwotICAgLy8gYXBw cm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybS4KLS0gIHZvaWQgd2lkZW5JbnQzMihSZWdpc3RlciBy KSBERUZJTkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICB2 b2lkIHdpZGVuSW50MzIoUmVnaXN0ZXIgcikKLSsgICAgICBERUZJTkVEX09OKGFybTY0LCB4NjQs IG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgLy8gQXMgZW50ZXJGYWtl RXhpdEZyYW1lKCksIGJ1dCB1c2luZyByZWdpc3RlciBjb252ZW50aW9ucyBhcHByb3ByaWF0ZSBm b3IKLSAgIC8vIHdhc20gc3R1YnMuCi1AQCAtNDI4NywxMyArNDI5NSwxMyBAQCBjbGFzcyBNYWNy b0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgZXhwZWN0ZWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByZXBsYWNlbWVudCwgUmVnaXN0ZXIgdmFsdWVU ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgY29tcGFyZUV4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0 eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwgUmVn aXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0 KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwot IAotICAgLy8geDg2OiBgZXhwZWN0ZWRgIGFuZCBgb3V0cHV0YCBtdXN0IGJlIGVkeDplYXg7IGBy ZXBsYWNlbWVudGAgaXMgZWN4OmVieC4KLSAgIC8vIHg2NDogYG91dHB1dGAgbXVzdCBiZSByYXgu Ci1AQCAtNDMwMywxMiArNDMxMSwxMiBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBN YWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIHZvaWQgY29tcGFyZUV4Y2hhbmdlNjQoU3luY2hy b25pemF0aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXI2NCBleHBlY3RlZCwgUmVnaXN0ZXI2NCByZXBsYWNlbWVudCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9P Tihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAg ICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgY29tcGFyZUV4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9u IHN5bmMsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlcjY0IGV4cGVjdGVkLCBSZWdpc3RlcjY0IHJlcGxhY2VtZW50LAotICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKGFybSwg YXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklO RURfT04oYXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBj NjQpOwotIAotICAgLy8gRXhjaGFuZ2Ugd2l0aCBtZW1vcnkuICBSZXR1cm4gdGhlIHZhbHVlIGlu aXRpYWxseSBpbiBtZW1vcnkuCi0gICAvLyBNSVBTOiBgdmFsdWVUZW1wYCwgYG9mZnNldFRlbXBg IGFuZCBgbWFza1RlbXBgIG11c3QgYmUgZGVmaW5lZCBmb3IgOC1iaXQKLUBAIC00MzI1LDEyICs0 MzMzLDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgewotICAgdm9pZCBhdG9taWNFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hy b25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1l bSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91 dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZv aWQgYXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5j LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIg dmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAg ICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9P TihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8vIHg4NjogYHZhbHVl YCBtdXN0IGJlIGVjeDplYng7IGBvdXRwdXRgIG11c3QgYmUgZWR4OmVheC4KLSAgIC8vIEFSTTog YHZhbHVlYCBhbmQgYG91dHB1dGAgbXVzdCBiZSBkaXN0aW5jdCBhbmQgKGV2ZW4sb2RkKSBwYWly cy4KLUBAIC00MzM4LDExICs0MzQ2LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGlj IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgdm9pZCBhdG9taWNFeGNoYW5nZTY0KFN5 bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAgREVG SU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsK LSsgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRXhjaGFuZ2U2NChTeW5jaHJvbml6 YXRpb24gc3luYywgY29uc3QgQmFzZUluZGV4JiBtZW0sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9P Tihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAg ICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKLSAKLSAgIC8vIFJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggbWVtb3J5LiAgUmV0 dXJuIHRoZSB2YWx1ZSBpbiBtZW1vcnkgYmVmb3JlIHRoZQotICAgLy8gb3BlcmF0aW9uLgotQEAg LTQzNzYsMTIgKzQzODQsMTIgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIGF0b21pY0ZldGNoT3AoU2NhbGFyOjpUeXBlIHR5 cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRl bXAsCi0gICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIg bWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRmV0Y2hPcChTY2FsYXI6OlR5cGUgdHlwZSwg U3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAotICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1w LAotICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1h c2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25n NjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0 LCBwcGM2NCk7Ci0gCi0gICAvLyB4ODY6Ci0gICAvLyAgIGB0ZW1wYCBtdXN0IGJlIGVjeDplYng7 IGBvdXRwdXRgIG11c3QgYmUgZWR4OmVheC4KLUBAIC00Mzk1LDcgKzQ0MDMsNyBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIHZv aWQgYXRvbWljRmV0Y2hPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgUmVn aXN0ZXI2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1l bSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkKLS0gICAgICBERUZJTkVEX09O KGFybSwgYXJtNjQsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJ TkVEX09OKGFybSwgYXJtNjQsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7 Ci0gCi0gICB2b2lkIGF0b21pY0ZldGNoT3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWlj T3Agb3AsIGNvbnN0IEFkZHJlc3MmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KQotQEAg LTQ0MDMsNyArNDQxMSw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgewotIAotICAgdm9pZCBhdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0 aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3RlcjY0IHZhbHVlLAotICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2 NCBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCBhdG9taWNGZXRjaE9wNjQo U3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBjb25zdCBBZGRyZXNzJiB2YWx1ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0 IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KQotQEAgLTQ0MjEsMTQgKzQ0MjksMTQgQEAgY2xhc3Mg TWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0gICB2 b2lkIGF0b21pY0VmZmVjdE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBS ZWdpc3RlcjY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3Mm IG1lbSwgUmVnaXN0ZXI2NCB0ZW1wKQotLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgbWlw czY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1p cHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCBhdG9taWNFZmZlY3RP cDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSkgREVGSU5FRF9P Tih4NjQpOwotIAotICAgdm9pZCBhdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5j LCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wKQotLSAgICAgIERFRklORURf T04oYXJtLCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVE X09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAg Ly8gNjQtYml0IGF0b21pYyBsb2FkLiBPbiA2NC1iaXQgc3lzdGVtcywgdXNlIHJlZ3VsYXIgbG9h ZCB3aXRoCi0gICAvLyBTeW5jaHJvbml6YXRpb246OkxvYWQsIG5vdCB0aGlzIG1ldGhvZC4KLUBA IC00NDgxLDE0ICs0NDg5LDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3Jv QXNzZW1ibGVyU3BlY2lmaWMgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlw czY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCB3YXNtQ29tcGFyZUV4Y2hhbmdlKGNvbnN0 IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgZXhwZWN0ZWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVt cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdp c3RlciBtYXNrVGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRw dXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAg IERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lk IHdhc21BdG9taWNFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3Ms Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVy IHZhbHVlLCBSZWdpc3RlciBvdXRwdXQpCi1AQCAtNDUwMiwxMyArNDUxMCwxMyBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9m ZnNldFRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwg UmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQp OwotIAotICAgdm9pZCB3YXNtQXRvbWljRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNz RGVzYyYgYWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4 JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVE X09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgd2FzbUF0b21pY0ZldGNoT3Ao Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwg UmVnaXN0ZXIgdGVtcCwKLUBAIC00NTI5LDEzICs0NTM3LDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1i bGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgdm9pZCB3YXNtQXRvbWlj RmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEF0b21pY09wIG9w LAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVz cyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBvdXRwdXQpIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KQotKyAgICAg IERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lk IHdhc21BdG9taWNGZXRjaE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vzcywg QXRvbWljT3Agb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBj b25zdCBCYXNlSW5kZXgmIG1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04o bWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgLy8gUmVhZC1tb2RpZnktd3JpdGUgd2l0aCBt ZW1vcnkuICBSZXR1cm4gbm8gdmFsdWUuCi0gICAvLwotQEAgLTQ1NjIsMTMgKzQ1NzEsMTMgQEAg Y2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYg bWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdp c3RlciBvZmZzZXRUZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFz a1RlbXApCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAg ICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2 b2lkIHdhc21BdG9taWNFZmZlY3RPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsIEF0b21pY09wIG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFs dWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxv b25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0LCBwcGM2NCk7Ci0gCi0gICAvLyA2NC1iaXQgd2lkZSBvcGVyYXRpb25zLgotIAotQEAgLTQ2 MjYsMTIgKzQ2MzUsMTIgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIHdhc21BdG9taWNGZXRjaE9wNjQoY29uc3Qgd2FzbTo6 TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkK LS0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwg eDY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlz Y3Y2NCwgcHBjNjQsIHg2NCk7Ci0gCi0gICB2b2lkIHdhc21BdG9taWNGZXRjaE9wNjQoY29uc3Qg d2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQg b3V0cHV0KQotLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCBy aXNjdjY0LCB4NjQpOwotKyAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgbWlwczY0LCBsb29u ZzY0LCByaXNjdjY0LCBwcGM2NCwgeDY0KTsKLSAKLSAgIHZvaWQgd2FzbUF0b21pY0ZldGNoT3A2 NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEF0b21pY09wIG9wLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIHZhbHVlLCBjb25zdCBBZGRy ZXNzJiBtZW0sCi1AQCAtNDY4NCwxNCArNDY5MywxNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJl Z2lzdGVyIHRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1 dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAg REVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQg Y29tcGFyZUV4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9u IHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBS ZWdpc3RlciBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVw bGFjZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJ TkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBz NjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRXhjaGFuZ2VK UyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdp c3RlciB0ZW1wLAotQEAgLTQ3MDUsMTMgKzQ3MTQsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIg OiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwgUmVnaXN0ZXIgdmFsdWVUZW1w LAotICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVy IG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJl Z2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2 NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsK LSAKLSAgIHZvaWQgYXRvbWljRXhjaGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5j aHJvbml6YXRpb24gc3luYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5k ZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQp Ci0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERF RklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0 b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3lu YywKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwg Y29uc3QgQWRkcmVzcyYgbWVtLAotQEAgLTQ3MzcsMTMgKzQ3NDYsMTMgQEAgY2xhc3MgTWFjcm9B c3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1l bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIg b2Zmc2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBS ZWdpc3RlciB0ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBz NjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0 LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5 cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAgICAgICAgICAgICAgICAg ICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCi0g ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNl dFRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0 ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBs b29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlz Y3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCBhdG9taWNFZmZlY3RPcEpTKFNjYWxhcjo6VHlwZSBh cnJheVR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg IEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAotQEAgLTQ3 NjQsMTIgKzQ3NzMsMTQgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIGF0b21pY0VmZmVjdE9wSlMoU2NhbGFyOjpUeXBlIGFy cmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg QXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1w LAotLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKSBERUZJTkVEX09O KG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWFza1RlbXApCi0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRWZmZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJy YXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBB dG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwKLS0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkgREVGSU5FRF9P TihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG1hc2tUZW1wKQotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0b21pY0lzTG9ja0ZyZWVKUyhSZWdpc3RlciB2YWx1 ZSwgUmVnaXN0ZXIgb3V0cHV0KTsKLSAKLUBAIC01OTI4LDcgKzU5MzksNyBAQCBjbGFzcyBNYWNy b0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIGlubGluZSB2 b2lkIGFkZFN0YWNrUHRyVG8oVCB0KTsKLSAKLSAgIHZvaWQgc3ViRnJvbVN0YWNrUHRyKEltbTMy IGltbTMyKQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNt MzIsIGFybSwgeDg2LCB4NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCBy aXNjdjY0LCBwcGM2NCwgd2FzbTMyLCBhcm0sIHg4NiwgeDY0KTsKLSAgIHZvaWQgc3ViRnJvbVN0 YWNrUHRyKFJlZ2lzdGVyIHJlZyk7Ci0gCi0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L01vdmVFbWl0dGVyLmggYi9qcy9zcmMvaml0L01vdmVFbWl0dGVy LmgKLWluZGV4IDY0MjgyOWMwNzBkNi4uM2E4ODNjNTk2Y2EwIDEwMDY0NAotLS0tIGEvanMvc3Jj L2ppdC9Nb3ZlRW1pdHRlci5oCi0rKysgYi9qcy9zcmMvaml0L01vdmVFbWl0dGVyLmgKLUBAIC0x Nyw2ICsxNyw4IEBACi0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTW92ZUVtaXR0ZXItbG9vbmc2 NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImpp dC9yaXNjdjY0L01vdmVFbWl0dGVyLXJpc2N2NjQuaCIKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fUFBDNjQpCi0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmgiCi0g I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMy L01vdmVFbWl0dGVyLXdhc20zMi5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTW92ZVJlc29sdmVyLmNwcCBiL2pzL3NyYy9qaXQvTW92 ZVJlc29sdmVyLmNwcAotaW5kZXggZDJlMWYxMjcwMGJkLi44ZTYyMjQwN2EwYTggMTAwNjQ0Ci0t LS0gYS9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvTW92ZVJl c29sdmVyLmNwcAotQEAgLTU3LDYgKzU3LDIyIEBAIGJvb2wgTW92ZVJlc29sdmVyOjphZGRNb3Zl KGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgTW92ZU9wOjpUeXBlIHR5cGUpIHsKLSAgIC8vIEFzc2VydCB0 aGF0IHdlJ3JlIG5vdCBkb2luZyBuby1vcCBtb3Zlcy4KLSAgIE1PWl9BU1NFUlQoIShmcm9tID09 IHRvKSk7Ci0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIC8vIFBQQzY0IEZsb2F0UmVnaXN0 ZXJzIGV4cG9zZSBTaW5nbGUvRG91YmxlIGtpbmRzIHRoYXQgaGF2ZSBkaXN0aW5jdCBjb2RlKCkK LSsgIC8vIHZhbHVlcyBidXQgc2hhcmUgb25lIHBoeXNpY2FsIHJlZ2lzdGVyLiBUaGUgcmVnaXN0 ZXIgYWxsb2NhdG9yIGNhbiBlbWl0IGEKLSsgIC8vIG1vdmUgYmV0d2VlbiB0d28gc3VjaCBraW5k LXZpZXdzIG9mIHRoZSBzYW1lIEZQUiAoZS5nLiBmMi1Eb3VibGUgdG8KLSsgIC8vIGYyLVNpbmds ZSk7IHRoZXNlIGFyZSBuby1vcHMgb24gdGhlIGhhcmR3YXJlLCBhcmUgbm90IGNhdWdodCBieSB0 aGUKLSsgIC8vIChmcm9tID09IHRvKSBhc3NlcnQgYWJvdmUsIGFuZCB3b3VsZCBvdGhlcndpc2Ug dHJpcCB0aGUKLSsgIC8vICFmcm9tKCkuYWxpYXNlcyh0bygpKSBpbnZhcmlhbnQgdGhlIHJlc29s dmVyIHJlbGllcyBvbiBsYXRlci4gRHJvcCB0aGVtLgotKyAgLy8KLSsgIC8vIFRoaXMgd291bGQg YmUgY29ycmVjdCBmb3IgYW55IGJhY2tlbmQgd2hvc2UgRmxvYXRSZWdpc3RlciBoYXMgbXVsdGlw bGUKLSsgIC8vIGtpbmRzIGFsaWFzaW5nIG9uZSBwaHlzaWNhbCByZWdpc3RlciwgYW5kIGNvdWxk IGJlIHVuLWdhdGVkIGlmIGFub3RoZXIKLSsgIC8vIHN1Y2ggYmFja2VuZCBuZWVkcyBpdCwgYnV0 IGl0IGlzIHNjb3BlZCB0byBQUEM2NCBzbyBtb3ZlIHJlc29sdXRpb24gb24KLSsgIC8vIHRpZXIt MSBwbGF0Zm9ybXMgaXMgbGVmdCB1bmNoYW5nZWQuCi0rICBpZiAoZnJvbS5hbGlhc2VzKHRvKSkg ewotKyAgICByZXR1cm4gdHJ1ZTsKLSsgIH0KLSsjZW5kaWYKLSAgIFBlbmRpbmdNb3ZlKiBwbSA9 IG1vdmVQb29sXy5hbGxvY2F0ZShmcm9tLCB0bywgdHlwZSk7Ci0gICBpZiAoIXBtKSB7Ci0gICAg IHJldHVybiBmYWxzZTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9y LmggYi9qcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmgKLWluZGV4IGVkYTk5MzNmNjMyMi4u NDJlNDgxMTEwNDZhIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5o Ci0rKysgYi9qcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmgKLUBAIC0yNjIsOSArMjYyLDEw IEBAIGNsYXNzIFJlZ2lzdGVyQWxsb2NhdG9yIHsKLSAgcHVibGljOgotICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFRha2VhYmxlU2V0PgotICAgc3RhdGljIHZvaWQgdGFrZVdhc21SZWdpc3RlcnMoVGFr ZWFibGVTZXQmIHJlZ3MpIHsKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0FSTSkgfHwgICAgICBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2lmIGRlZmlu ZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgICAgICAg XAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8ICAgIFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSAgICAgcmVncy50YWtlKEhlYXBSZWcpOwotICNlbmRpZgotICAgICBNT1pfQVNTRVJUKCFy ZWdzLmhhcyhGcmFtZVBvaW50ZXIpKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L1JlZ2lzdGVy cy5oIGIvanMvc3JjL2ppdC9SZWdpc3RlcnMuaAotaW5kZXggZTBkMDJlMmZiNjBkLi40MjM3Nzdj ZTM4Y2QgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L1JlZ2lzdGVycy5oCi0rKysgYi9qcy9zcmMv aml0L1JlZ2lzdGVycy5oCi1AQCAtMjAsNiArMjAsOCBAQAotICMgIGluY2x1ZGUgImppdC9sb29u ZzY0L0FyY2hpdGVjdHVyZS1sb29uZzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpCi0gIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQvQXJjaGl0ZWN0dXJlLXJpc2N2NjQuaCIK LSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rIyAgaW5jbHVkZSAiaml0L3BwYzY0 L0FyY2hpdGVjdHVyZS1wcGM2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIp Ci0gIyAgaW5jbHVkZSAiaml0L3dhc20zMi9BcmNoaXRlY3R1cmUtd2FzbTMyLmgiCi0gI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9TYWZlcG9p bnRzLmNwcCBiL2pzL3NyYy9qaXQvU2FmZXBvaW50cy5jcHAKLWluZGV4IDQyZTMwNWYwNTNhZi4u OGUzYTI1YzNjNWZmIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9TYWZlcG9pbnRzLmNwcAotKysr IGIvanMvc3JjL2ppdC9TYWZlcG9pbnRzLmNwcAotQEAgLTYzLDYgKzYzLDExIEBAIHN0YXRpYyB2 b2lkIFdyaXRlRmxvYXRSZWdpc3Rlck1hc2soQ29tcGFjdEJ1ZmZlcldyaXRlciYgc3RyZWFtLAot ICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkNjQoYml0cy5sb3coKSk7Ci0gICAgICAgc3RyZWFt LndyaXRlVW5zaWduZWQ2NChiaXRzLmhpZ2goKSk7Ci0gICAgICAgYnJlYWs7Ci0rI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgICBjYXNlIDE2OgotKyAgICAgIHN0cmVhbS53cml0 ZVVuc2lnbmVkNjQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHMpKTsKLSsgICAgICBzdHJlYW0u d3JpdGVVbnNpZ25lZDY0KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXRzID4+IDY0KSk7Ci0rICAg ICAgYnJlYWs7Ci0gI2Vsc2UKLSAgICAgY2FzZSAxOgotICAgICAgIHN0cmVhbS53cml0ZUJ5dGUo Yml0cyk7Ci1AQCAtODgsNiArOTMsMTIgQEAgc3RhdGljIEZsb2F0UmVnaXN0ZXJzOjpTZXRUeXBl IFJlYWRGbG9hdFJlZ2lzdGVyTWFzaygKLSAgICAgICB1aW50NjRfdCBoaWdoID0gc3RyZWFtLnJl YWRVbnNpZ25lZDY0KCk7Ci0gICAgICAgcmV0dXJuIEJpdHNldDEyOChoaWdoLCBsb3cpOwotICAg ICB9Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgICBjYXNlIDE2OiB7Ci0r ICAgICAgdWludDY0X3QgbG93ID0gc3RyZWFtLnJlYWRVbnNpZ25lZDY0KCk7Ci0rICAgICAgdWlu dDY0X3QgaGlnaCA9IHN0cmVhbS5yZWFkVW5zaWduZWQ2NCgpOwotKyAgICAgIHJldHVybiBGbG9h dFJlZ2lzdGVyczo6U2V0VHlwZShoaWdoKSA8PCA2NCB8IEZsb2F0UmVnaXN0ZXJzOjpTZXRUeXBl KGxvdyk7Ci0rICAgIH0KLSAjZWxzZQotICAgICBjYXNlIDE6Ci0gICAgICAgcmV0dXJuIHN0cmVh bS5yZWFkQnl0ZSgpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlu bC5oIGIvanMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMtaW5sLmgKLWluZGV4IGVlZGNjYzgzMTcz Mi4uMTAwNWIxNDBmMWRmIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMt aW5sLmgKLSsrKyBiL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlubC5oCi1AQCAtMTksNiAr MTksOCBAQAotICMgIGluY2x1ZGUgImppdC9sb29uZzY0L1NoYXJlZElDSGVscGVycy1sb29uZzY0 LWlubC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUg ImppdC9yaXNjdjY0L1NoYXJlZElDSGVscGVycy1yaXNjdjY0LWlubC5oIgotKyNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsjICBpbmNsdWRlICJqaXQvcHBjNjQvU2hhcmVkSUNIZWxw ZXJzLXBwYzY0LWlubC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAg aW5jbHVkZSAiaml0L3dhc20zMi9TaGFyZWRJQ0hlbHBlcnMtd2FzbTMyLWlubC5oIgotICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvU2hhcmVk SUNIZWxwZXJzLmggYi9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5oCi1pbmRleCAxZWJkNjFl NDQ1MDkuLmYyNzAzYzZmOTg2YyAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxw ZXJzLmgKLSsrKyBiL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLmgKLUBAIC0xOSw2ICsxOSw4 IEBACi0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvU2hhcmVkSUNIZWxwZXJzLWxvb25nNjQuaCIK LSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlz Y3Y2NC9TaGFyZWRJQ0hlbHBlcnMtcmlzY3Y2NC5oIgotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9QUEM2NCkKLSsjICBpbmNsdWRlICJqaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0Lmgi Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAjICBpbmNsdWRlICJqaXQvd2Fz bTMyL1NoYXJlZElDSGVscGVycy13YXNtMzIuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f Tk9ORSkKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmggYi9qcy9z cmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgKLWluZGV4IGMzYWI4NmJmMGE4Mi4uNWIyNzBkMGMx NjZhIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lzdGVycy5oCi0rKysgYi9q cy9zcmMvaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgKLUBAIC0xOSw2ICsxOSw4IEBACi0gIyAgaW5j bHVkZSAiaml0L2xvb25nNjQvU2hhcmVkSUNSZWdpc3RlcnMtbG9vbmc2NC5oIgotICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L1NoYXJl ZElDUmVnaXN0ZXJzLXJpc2N2NjQuaCIKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp Ci0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmgiCi0gI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMyL1No YXJlZElDUmVnaXN0ZXJzLXdhc20zMi5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05F KQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvU2ltdWxhdG9yLmggYi9qcy9zcmMvaml0L1NpbXVs YXRvci5oCi1pbmRleCAzOTUwMzcxNmYxMGQuLjlmNjBiYWY1MzE5OCAxMDA2NDQKLS0tLSBhL2pz L3NyYy9qaXQvU2ltdWxhdG9yLmgKLSsrKyBiL2pzL3NyYy9qaXQvU2ltdWxhdG9yLmgKLUBAIC0x NSw2ICsxNSw4IEBACi0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvU2ltdWxhdG9yLWxvb25nNjQu aCIKLSAjZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImpp dC9yaXNjdjY0L1NpbXVsYXRvci1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19TSU1VTEFU T1JfUFBDNjQpCi0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5oIgotICNl bGlmIGRlZmluZWQoSlNfU0lNVUxBVE9SKQotICMgIGVycm9yICJVbmV4cGVjdGVkIHNpbXVsYXRv ciBwbGF0Zm9ybSIKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L21vei5idWlsZCBi L2pzL3NyYy9qaXQvbW96LmJ1aWxkCi1pbmRleCA1YjVkZjNlNWI3YjIuLjM2ZWY2NWQ2MjIxYSAx MDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvbW96LmJ1aWxkCi0rKysgYi9qcy9zcmMvaml0L21vei5i dWlsZAotQEAgLTIyOCw2ICsyMjgsMTggQEAgZWxpZiBDT05GSUdbIkpTX0NPREVHRU5fTE9PTkc2 NCJdOgotICAgICBdCi0gICAgIGlmIENPTkZJR1siSlNfU0lNVUxBVE9SX0xPT05HNjQiXToKLSAg ICAgICAgIFVOSUZJRURfU09VUkNFUyArPSBbImxvb25nNjQvU2ltdWxhdG9yLWxvb25nNjQuY3Bw Il0KLStlbGlmIENPTkZJR1siSlNfQ09ERUdFTl9QUEM2NCJdOgotKyAgICBVTklGSUVEX1NPVVJD RVMgKz0gWwotKyAgICAgICAgInBwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5jcHAiLAotKyAgICAg ICAgInBwYzY0L0Fzc2VtYmxlci1wcGM2NC5jcHAiLAotKyAgICAgICAgInBwYzY0L0NvZGVHZW5l cmF0b3ItcHBjNjQuY3BwIiwKLSsgICAgICAgICJwcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAiLAot KyAgICAgICAgInBwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCIsCi0rICAgICAgICAicHBj NjQvTW92ZUVtaXR0ZXItcHBjNjQuY3BwIiwKLSsgICAgICAgICJwcGM2NC9UcmFtcG9saW5lLXBw YzY0LmNwcCIsCi0rICAgIF0KLSsgICAgaWYgQ09ORklHWyJKU19TSU1VTEFUT1JfUFBDNjQiXToK LSsgICAgICAgIFVOSUZJRURfU09VUkNFUyArPSBbInBwYzY0L1NpbXVsYXRvci1wcGM2NC5jcHAi XQotIGVsaWYgQ09ORklHWyJKU19DT0RFR0VOX1JJU0NWNjQiXToKLSAgICAgVU5JRklFRF9TT1VS Q0VTICs9IFsKLSAgICAgICAgICJyaXNjdjY0L0FyY2hpdGVjdHVyZS1yaXNjdjY0LmNwcCIsCi1k aWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuY3BwIGIvanMv c3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuY3BwCi1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwMDAwLi41NjMyODY1NTU2YWMKLS0tLSAvZGV2L251bGwKLSsrKyBi L2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmNwcAotQEAgLTAsMCArMSwyMjEg QEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5p bDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0y IHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBv ZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNh biBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaW5j bHVkZSAiaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oIgotKwotKyNpZm5kZWYgSlNfU0lN VUxBVE9SCi0rIyAgaW5jbHVkZSA8c3lzL2F1eHYuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSAi aml0L0ZsdXNoSUNhY2hlLmgiICAvLyBqczo6aml0OjpGbHVzaElDYWNoZQotKyNpbmNsdWRlICJq aXQvUmVnaXN0ZXJTZXRzLmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsK LSsKLStSZWdpc3RlcnM6OkNvZGUgUmVnaXN0ZXJzOjpGcm9tTmFtZShjb25zdCBjaGFyKiBuYW1l KSB7Ci0rICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFRvdGFsOyBpKyspIHsKLSsgICAgaWYgKHN0 cmNtcChHZXROYW1lKGkpLCBuYW1lKSA9PSAwKSB7Ci0rICAgICAgcmV0dXJuIENvZGUoaSk7Ci0r ICAgIH0KLSsgIH0KLSsKLSsgIHJldHVybiBJbnZhbGlkOwotK30KLSsKLStGbG9hdFJlZ2lzdGVy czo6Q29kZSBGbG9hdFJlZ2lzdGVyczo6RnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSkgewotKyAg Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBUb3RhbDsgaSsrKSB7Ci0rICAgIGlmIChzdHJjbXAoR2V0 TmFtZShpKSwgbmFtZSkgPT0gMCkgewotKyAgICAgIHJldHVybiBDb2RlKGkpOwotKyAgICB9Ci0r ICB9Ci0rCi0rICByZXR1cm4gSW52YWxpZDsKLSt9Ci0rCi0rRmxvYXRSZWdpc3RlclNldCBGbG9h dFJlZ2lzdGVyOjpSZWR1Y2VTZXRGb3JQdXNoKGNvbnN0IEZsb2F0UmVnaXN0ZXJTZXQmIHMpIHsK LSsgIFNldFR5cGUgYWxsID0gcy5iaXRzKCk7Ci0rICBTZXRUeXBlIHNpbWQxMjhTZXQgPQotKyAg ICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSAqIEZsb2F0UmVn aXN0ZXJzOjpUb3RhbFBoeXMpKSAmCi0rICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNr OwotKyAgU2V0VHlwZSBkb3VibGVTZXQgPQotKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0 UmVnaXN0ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpICYKLSsgICAg ICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Ci0rICBTZXRUeXBlIHNpbmdsZVNldCA9Ci0r ICAgICAgKGFsbCA+PiAodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSkgKiBGbG9hdFJl Z2lzdGVyczo6VG90YWxQaHlzKSkgJgotKyAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFz azsKLSsKLSsgIC8vIFNpbmdsZStEb3VibGUgc2hhcmUgcGh5c2ljYWwgRlBScyAocHVzaCBhcyBE b3VibGUsIDgtYnl0ZSBzbG90KTsKLSsgIC8vIFNpbWQxMjggbGl2ZXMgaW4gaXRzIG93biBwaHlz aWNhbCBWUnMgKHB1c2ggYXMgU2ltZDEyOCwgMTYtYnl0ZQotKyAgLy8gc2xvdCkuIERpZmZlcmVu dCBwaHlzaWNhbCBwb29scyDigJQgbm8gZGVkdXAuIE5vdGUgdGhhdAotKyAgLy8gc2l6ZW9mKEZs b2F0UmVnaXN0ZXJzOjpSZWdpc3RlckNvbnRlbnQpIGlzIDggYnl0ZXMgKG5vIHYxMjggaW4gdGhl Ci0rICAvLyB1bmlvbiksIHNvIFJlZ2lzdGVyRHVtcDo6RlBVQXJyYXkgaXMgMzIgw5cgOCA9IDI1 NiBieXRlcywgbWF0Y2hpbmcKLSsgIC8vIHRoZSBGbG9hdC1vbmx5IGxheW91dCBQdXNoUmVnc0lu TWFzayBwcm9kdWNlcy4KLSsgIFNldFR5cGUgc2V0NjQgPSBzaW5nbGVTZXQgfCBkb3VibGVTZXQ7 Ci0rCi0rICBTZXRUeXBlIHJlZHVjZWQgPQotKyAgICAgIChzaW1kMTI4U2V0IDw8ICh1aW50MzJf dChGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgKgotKyAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgfAotKyAgICAgIChzZXQ2NCA8PCAodWludDMyX3QoRmxv YXRSZWdpc3RlcnM6OkRvdWJsZSkgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSk7Ci0rICBy ZXR1cm4gRmxvYXRSZWdpc3RlclNldChyZWR1Y2VkKTsKLSt9Ci0rCi0rdWludDMyX3QgRmxvYXRS ZWdpc3Rlcjo6R2V0UHVzaFNpemVJbkJ5dGVzKGNvbnN0IEZsb2F0UmVnaXN0ZXJTZXQmIHMpIHsK LSsgIFNldFR5cGUgYWxsID0gcy5iaXRzKCk7Ci0rICBTZXRUeXBlIHNpbWQxMjhTZXQgPQotKyAg ICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSAqIEZsb2F0UmVn aXN0ZXJzOjpUb3RhbFBoeXMpKSAmCi0rICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNr OwotKyAgU2V0VHlwZSBkb3VibGVTZXQgPQotKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0 UmVnaXN0ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpICYKLSsgICAg ICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Ci0rICBTZXRUeXBlIHNpbmdsZVNldCA9Ci0r ICAgICAgKGFsbCA+PiAodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSkgKiBGbG9hdFJl Z2lzdGVyczo6VG90YWxQaHlzKSkgJgotKyAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFz azsKLSsKLSsgIC8vIE5hdHVyYWwgcGVyLWtpbmQgc2xvdCBzaXplcy4gU2VlIFJlZHVjZVNldEZv clB1c2ggY29tbWVudC4KLSsgIFNldFR5cGUgc2V0NjQgPSBzaW5nbGVTZXQgfCBkb3VibGVTZXQ7 Ci0rCi0rICB1aW50MzJfdCBjb3VudDY0ID0gc3RkOjpwb3Bjb3VudChzdGF0aWNfY2FzdDx1aW50 NjRfdD4oc2V0NjQpKTsKLSsgIHVpbnQzMl90IGNvdW50MTI4ID0gc3RkOjpwb3Bjb3VudChzdGF0 aWNfY2FzdDx1aW50NjRfdD4oc2ltZDEyOFNldCkpOwotKwotKyAgcmV0dXJuIGNvdW50NjQgKiBz aXplb2YoZG91YmxlKSArIGNvdW50MTI4ICogMTY7Ci0rfQotKwotK3VpbnQzMl90IEZsb2F0UmVn aXN0ZXI6OmdldFJlZ2lzdGVyRHVtcE9mZnNldEluQnl0ZXMoKSB7Ci0rICAvLyBTaW1kMTI4IGVu Y29kaW5nIGlzIDMyLTYzIOKAlCBtYXNrIGJhY2sgdG8gMC0zMSBmb3IgdGhlIEZQVUFycmF5LQot KyAgLy8gcmVsYXRpdmUgb2Zmc2V0LiAoRlBVQXJyYXkgaGFzIDMyIHNsb3RzOyBTaW1kMTI4IHNo b3VsZCBuZXZlciBiZSBpbgotKyAgLy8gYSBTYWZlcG9pbnRTdGF0ZS9CYWlsb3V0U3RhdGUgYW55 d2F5LikKLSsgIHJldHVybiAoZW5jb2RpbmcoKSAmIDMxKSAqIHNpemVvZihGbG9hdFJlZ2lzdGVy czo6UmVnaXN0ZXJDb250ZW50KTsKLSt9Ci0rCi0rc3RhdGljIGJvb2wgc1BPV0VSOURldGVjdGVk ID0gZmFsc2U7Ci0rc3RhdGljIGJvb2wgc1BPV0VSMTBEZXRlY3RlZCA9IGZhbHNlOwotK3N0YXRp YyBib29sIHNDUFVGbGFnc0NvbXB1dGVkID0gZmFsc2U7Ci0rCi0rI2lmbmRlZiBKU19TSU1VTEFU T1IKLSsvLyBDYWNoZSBsaW5lIHNpemVzLCBkZXRlY3RlZCBhdCBzdGFydHVwIGZyb20gRUxGIGF1 eGlsaWFyeSB2ZWN0b3IuCi0rLy8gRmFsbGJhY2sgdG8gMzIgYnl0ZXMgKHNhZmUgbWluaW11bSBw ZXIgTHVhSklUL0xMVk0gY29tcGlsZXItcnQpLgotK3N0YXRpYyBzaXplX3Qgc0RDYWNoZUxpbmVT aXplID0gMDsKLStzdGF0aWMgc2l6ZV90IHNJQ2FjaGVMaW5lU2l6ZSA9IDA7Ci0rI2VuZGlmCi0r Ci0rdm9pZCBQUEM2NEZsYWdzOjpJbml0KCkgewotKyAgaWYgKHNDUFVGbGFnc0NvbXB1dGVkKSB7 Ci0rICAgIHJldHVybjsKLSsgIH0KLSsjaWZuZGVmIEpTX1NJTVVMQVRPUgotKyAgdW5zaWduZWQg bG9uZyBod2NhcDIgPSBnZXRhdXh2YWwoQVRfSFdDQVAyKTsKLSsgIC8vIFBQQ19GRUFUVVJFMl9B UkNIXzNfMDAgPSAweDAwODAwMDAwIChJU0EgMy4wIC8gUE9XRVI5KQotKyAgc1BPV0VSOURldGVj dGVkID0gKGh3Y2FwMiAmIDB4MDA4MDAwMDApICE9IDA7Ci0rICAvLyBQUENfRkVBVFVSRTJfQVJD SF8zXzEgPSAweDAwMDQwMDAwIChJU0EgMy4xIC8gUE9XRVIxMCkKLSsgIHNQT1dFUjEwRGV0ZWN0 ZWQgPSAoaHdjYXAyICYgMHgwMDA0MDAwMCkgIT0gMDsKLSsgIC8vIEFsbG93IGZvcmNpbmcgUE9X RVI4IG1vZGUgZm9yIHRlc3Rpbmc6IE1PWl9QUEM2NF9GT1JDRV9QT1dFUjg9MS4KLSsgIC8vIFAx MCBpbXBsaWVzIFA5OyBkb3duZ3JhZGUgY2xlYXJzIGJvdGguCi0rICBjb25zdCBjaGFyKiBmb3Jj ZVA4ID0gZ2V0ZW52KCJNT1pfUFBDNjRfRk9SQ0VfUE9XRVI4Iik7Ci0rICBpZiAoZm9yY2VQOCAm JiBmb3JjZVA4WzBdID09ICcxJykgewotKyAgICBzUE9XRVI5RGV0ZWN0ZWQgPSBmYWxzZTsKLSsg ICAgc1BPV0VSMTBEZXRlY3RlZCA9IGZhbHNlOwotKyAgfQotKwotKyAgc2l6ZV90IGRjYWNoZSA9 IGdldGF1eHZhbChBVF9EQ0FDSEVCU0laRSk7Ci0rICBzaXplX3QgaWNhY2hlID0gZ2V0YXV4dmFs KEFUX0lDQUNIRUJTSVpFKTsKLSsgIHNEQ2FjaGVMaW5lU2l6ZSA9IGRjYWNoZSA/IGRjYWNoZSA6 IDMyOwotKyAgc0lDYWNoZUxpbmVTaXplID0gaWNhY2hlID8gaWNhY2hlIDogMzI7Ci0rI2VuZGlm Ci0rICAvLyBGT1JDRV9QT1dFUjkvMTAgb3B0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgSVNBIGZh c3QgcGF0aHMuIFVzZWZ1bCB1bmRlcgotKyAgLy8gdGhlIHNpbXVsYXRvcjsgb24gcmVhbCBzaWxp Y29uIGJlbG93IHRoZSBnYXRlZCBsZXZlbCB0aGV5IGFyZSBmb290LWd1bnMKLSsgIC8vIGJlY2F1 c2UgdGhlIENQVSB3aWxsIHRyYXAgb24gdW5kZWZpbmVkIG9wcy4gT3V0c2lkZSB0aGUgSlNfU0lN VUxBVE9SCi0rICAvLyBndWFyZCBzbyB0aGUgc2ltIGNhbiBvcHQgaW4gdmlhIGVudi4KLSsgIC8v Ci0rICAvLyBGT1JDRV9QT1dFUjEwIGFsc28gaW1wbGllcyBGT1JDRV9QT1dFUjkg4oCUIHRoaXMg bWF0Y2hlcyB3aGF0IHJlYWwtUDEwCi0rICAvLyBzaWxpY29uIGFkdmVydGlzZXMgaW4gaHdjYXAy IChib3RoIEFSQ0hfM18wMCBhbmQgQVJDSF8zXzEgYml0cyBzZXQpLCBzbwotKyAgLy8gd2UgZG9u J3QgYXNrIHNpbSB1c2VycyB0byBwYXNzIGJvdGggdmFycyBzZXBhcmF0ZWx5LgotKyAgY29uc3Qg Y2hhciogZm9yY2VQOSA9IGdldGVudigiTU9aX1BQQzY0X0ZPUkNFX1BPV0VSOSIpOwotKyAgaWYg KGZvcmNlUDkgJiYgZm9yY2VQOVswXSA9PSAnMScpIHsKLSsgICAgc1BPV0VSOURldGVjdGVkID0g dHJ1ZTsKLSsgIH0KLSsgIGNvbnN0IGNoYXIqIGZvcmNlUDEwID0gZ2V0ZW52KCJNT1pfUFBDNjRf Rk9SQ0VfUE9XRVIxMCIpOwotKyAgaWYgKGZvcmNlUDEwICYmIGZvcmNlUDEwWzBdID09ICcxJykg ewotKyAgICBzUE9XRVIxMERldGVjdGVkID0gdHJ1ZTsKLSsgICAgc1BPV0VSOURldGVjdGVkID0g dHJ1ZTsKLSsgIH0KLSsgIHNDUFVGbGFnc0NvbXB1dGVkID0gdHJ1ZTsKLSt9Ci0rCi0rYm9vbCBI YXNQT1dFUjkoKSB7Ci0rICBNT1pfQVNTRVJUKHNDUFVGbGFnc0NvbXB1dGVkKTsKLSsgIHJldHVy biBzUE9XRVI5RGV0ZWN0ZWQ7Ci0rfQotKwotK2Jvb2wgSGFzUE9XRVIxMCgpIHsKLSsgIE1PWl9B U1NFUlQoc0NQVUZsYWdzQ29tcHV0ZWQpOwotKyAgcmV0dXJuIHNQT1dFUjEwRGV0ZWN0ZWQ7Ci0r fQotKwotK2Jvb2wgQ1BVRmxhZ3NIYXZlQmVlbkNvbXB1dGVkKCkgeyByZXR1cm4gc0NQVUZsYWdz Q29tcHV0ZWQ7IH0KLSsKLSsvLyBQZXItYml0IGZlYXR1cmUgZmxhZ3MgcGFja2VkIGludG8gdGhl IHdhc20gY29kZSBzaWduYXR1cmUuIEFkZGluZyBhCi0rLy8gbmV3IGJpdCAoZS5nLiwgUE9XRVIx MCwgVlNYNCkgc2hvdWxkIGJlIGEgMS1saW5lIGNoYW5nZSBoZXJlIHBsdXMgYQotKy8vIGNvcnJl c3BvbmRpbmcgSGFzUE9XRVIxMCgpL0lzVlNYNEF2YWlsYWJsZSgpIHByb2JlIGFib3ZlLiBUaGUg dmFsdWUKLSsvLyBpcyBhbHNvIGFzc2VydC1jaGVja2VkIGludG8gYSBmaXhlZC13aWR0aCBmaWVs ZCBpbgotKy8vIGpzL3NyYy93YXNtL1dhc21Db21waWxlLmNwcCDigJQgaWYgdGhhdCBmaWVsZCBl dmVyIG92ZXJmbG93cywgd2lkZW4KLSsvLyBpdCB0aGVyZSBiZWZvcmUgbGFuZGluZyBtb3JlIGJp dHMgaGVyZS4KLSt1aW50MzJfdCBHZXRQUEM2NEZsYWdzKCkgewotKyAgdWludDMyX3QgZmxhZ3Mg PSAwOwotKyAgaWYgKHNQT1dFUjlEZXRlY3RlZCkgewotKyAgICBmbGFncyB8PSBQUEM2NEZsYWdf UE9XRVI5OwotKyAgfQotKyAgcmV0dXJuIGZsYWdzOwotK30KLSsKLSt2b2lkIEZsdXNoSUNhY2hl KHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKSB7Ci0rI2lmIGRlZmluZWQoSlNfU0lNVUxBVE9SKQot KyAganM6OmppdDo6U2ltdWxhdG9yUHJvY2Vzczo6Rmx1c2hJQ2FjaGUoY29kZSwgc2l6ZSk7Ci0r I2Vsc2UKLSsgIC8vIFBQQzY0IGhhcyBpbmNvaGVyZW50IEkvRCBjYWNoZXMuIEdDQydzIF9fYnVp bHRpbl9fX2NsZWFyX2NhY2hlIGlzIGEKLSsgIC8vIG5vLW9wIG9uIFBQQzY0IExpbnV4LCBzbyB3 ZSBpbXBsZW1lbnQgdGhlIGZsdXNoIGV4cGxpY2l0bHkuCi0rICAvLyBUaGlzIGZvbGxvd3MgdGhl IHNhbWUgYXBwcm9hY2ggYXMgUUVNVSAodXRpbC9jYWNoZWZsdXNoLmMpIGFuZCB0aGUKLSsgIC8v IExpbnV4IGtlcm5lbCAoYXJjaC9wb3dlcnBjL21tL2NhY2hlZmx1c2guYyk6Ci0rICAvLyAgIGRj YnN0IGxvb3AgLT4gc3luYyAtPiBpY2JpIGxvb3AgLT4gc3luYyAtPiBpc3luYwotKyAgaWYgKCFz aXplKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIE1PWl9BU1NFUlQoc0NQVUZsYWdzQ29tcHV0 ZWQsCi0rICAgICAgICAgICAgICJQUEM2NEZsYWdzOjpJbml0IG11c3QgcnVuIGJlZm9yZSBhbnkg Rmx1c2hJQ2FjaGUgY2FsbCIpOwotKwotKyAgdWludHB0cl90IHN0YXJ0ID0gcmVpbnRlcnByZXRf Y2FzdDx1aW50cHRyX3Q+KGNvZGUpOwotKyAgdWludHB0cl90IGVuZCA9IHN0YXJ0ICsgc2l6ZTsK LSsKLSsgIC8vIFN0ZXAgMTogV3JpdGUgYmFjayBkYXRhIGNhY2hlIHRvIG1lbW9yeS4KLSsgIGZv ciAodWludHB0cl90IGFkZHIgPSBzdGFydCAmIH4oc0RDYWNoZUxpbmVTaXplIC0gMSk7IGFkZHIg PCBlbmQ7Ci0rICAgICAgIGFkZHIgKz0gc0RDYWNoZUxpbmVTaXplKSB7Ci0rICAgIGFzbSB2b2xh dGlsZSgiZGNic3QgMCwgJTAiIDogOiAiciIoYWRkcikgOiAibWVtb3J5Iik7Ci0rICB9Ci0rICBh c20gdm9sYXRpbGUoInN5bmMiIDo6OiAibWVtb3J5Iik7Ci0rCi0rICAvLyBTdGVwIDI6IEludmFs aWRhdGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCi0rICBmb3IgKHVpbnRwdHJfdCBhZGRyID0gc3RhcnQg JiB+KHNJQ2FjaGVMaW5lU2l6ZSAtIDEpOyBhZGRyIDwgZW5kOwotKyAgICAgICBhZGRyICs9IHNJ Q2FjaGVMaW5lU2l6ZSkgewotKyAgICBhc20gdm9sYXRpbGUoImljYmkgMCwgJTAiIDogOiAiciIo YWRkcikgOiAibWVtb3J5Iik7Ci0rICB9Ci0rICAvLyBUaGUgZXh0cmEgc3luYyBiZWZvcmUgaXN5 bmMgbWF0Y2hlcyB0aGUgTGludXgga2VybmVsIGFuZCBRRU1VLgotKyAgLy8gSXQgZW5zdXJlcyBh bGwgaWNiaSBvcGVyYXRpb25zIGNvbXBsZXRlIGJlZm9yZSB0aGUgcGlwZWxpbmUgZmx1c2guCi0r ICBhc20gdm9sYXRpbGUoInN5bmMiIDo6OiAibWVtb3J5Iik7Ci0rICBhc20gdm9sYXRpbGUoImlz eW5jIiA6OjogIm1lbW9yeSIpOwotKyNlbmRpZgotK30KLSsKLSt2b2lkIEZsdXNoRXhlY3V0aW9u Q29udGV4dCgpIHsKLSsjaWYgIWRlZmluZWQoSlNfU0lNVUxBVE9SKQotKyAgLy8gUFBDNjQncyBp c3luYyBmbHVzaGVzIHRoZSBpbnN0cnVjdGlvbiBwaXBlbGluZSBvbiB0aGUgY3VycmVudCBjb3Jl LAotKyAgLy8gZW5zdXJpbmcgYW55IHByZXZpb3VzbHkgaW52YWxpZGF0ZWQgaWNhY2hlIGVudHJp ZXMgYXJlIGRpc2NhcmRlZCBhbmQKLSsgIC8vIGluc3RydWN0aW9ucyBhcmUgcmUtZmV0Y2hlZCBm cm9tIGNvaGVyZW50IG1lbW9yeS4KLSsgIGFzbSB2b2xhdGlsZSgiaXN5bmMiIDo6OiAibWVtb3J5 Iik7Ci0rI2VuZGlmCi0rfQotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3Bh Y2UganMKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5o IGIvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uZWZhYWIwYjBjODU0Ci0tLS0gL2Rldi9udWxsCi0r KysgYi9qcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oCi1AQCAtMCwwICsxLDU4 MSBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTog bmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3 PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRl cm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5 IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3Ug Y2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNp Zm5kZWYgaml0X3BwYzY0X0FyY2hpdGVjdHVyZV9wcGM2NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRf QXJjaGl0ZWN0dXJlX3BwYzY0X2gKLSsKLSsjaW5jbHVkZSA8YWxnb3JpdGhtPgotKyNpbmNsdWRl IDxiaXQ+Ci0rCi0rI2luY2x1ZGUgImppdC9zaGFyZWQvQXJjaGl0ZWN0dXJlLXNoYXJlZC5oIgot KwotKyNpbmNsdWRlICJqcy9VdGlsaXR5LmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3Bh Y2Ugaml0IHsKLSsKLSsvLyBQUEM2NCBoYXMgMzIgNjQtYml0IGdlbmVyYWwgcHVycG9zZSByZWdp c3RlcnMsIHIwIHRocm91Z2ggcjMxLgotKy8vIFRoZSBwcm9ncmFtIGNvdW50ZXIgaXMgbm90IGRp cmVjdGx5IGFjY2Vzc2libGUgYXMgYSByZWdpc3Rlci4KLSsvLyBUaGUgbGluayByZWdpc3RlciAo TFIpIGFuZCBjb3VudCByZWdpc3RlciAoQ1RSKSBhcmUgU1BScy4KLSsKLSsvLyBQUEM2NCBFTEZ2 MiBHUFIgQ29udmVudGlvbjoKLSsvLyAgTmFtZSAgICBVc2FnZQotKy8vICByMCAgICAgIFZvbGF0 aWxlLCBjYW5ub3QgYmUgYmFzZSByZWdpc3RlciBpbiBsb2FkL3N0b3JlCi0rLy8gIHIxICAgICAg U3RhY2sgcG9pbnRlciAoY2FsbGVlLXNhdmVkKQotKy8vICByMiAgICAgIFRPQyBwb2ludGVyIChy ZXNlcnZlZCkKLSsvLyAgcjMgICAgICBSZXR1cm4gdmFsdWUgLyBmaXJzdCBhcmd1bWVudAotKy8v ICByNC1yMTAgIEFyZ3VtZW50cyAyLTgKLSsvLyAgcjExICAgICBFbnZpcm9ubWVudCBwb2ludGVy IC8gc2NyYXRjaAotKy8vICByMTIgICAgIEJyYW5jaCB0YXJnZXQgLyBzY3JhdGNoCi0rLy8gIHIx MyAgICAgVGhyZWFkIHBvaW50ZXIgKHJlc2VydmVkLCBUTFMpCi0rLy8gIHIxNC1yMzEgQ2FsbGVl LXNhdmVkCi0rCi0rLy8gUFBDNjQgRUxGdjIgRlBSIENvbnZlbnRpb246Ci0rLy8gIGYwICAgICAg U2NyYXRjaAotKy8vICBmMS1mMTMgIEFyZ3VtZW50cyAvIHZvbGF0aWxlCi0rLy8gIGYxNC1mMzEg Q2FsbGVlLXNhdmVkCi0rCi0rY2xhc3MgUmVnaXN0ZXJzIHsKLSsgcHVibGljOgotKyAgZW51bSBS ZWdpc3RlcklEIHsKLSsgICAgcjAgPSAwLAotKyAgICByMSwKLSsgICAgcjIsCi0rICAgIHIzLAot KyAgICByNCwKLSsgICAgcjUsCi0rICAgIHI2LAotKyAgICByNywKLSsgICAgcjgsCi0rICAgIHI5 LAotKyAgICByMTAsCi0rICAgIHIxMSwKLSsgICAgcjEyLAotKyAgICByMTMsCi0rICAgIHIxNCwK LSsgICAgcjE1LAotKyAgICByMTYsCi0rICAgIHIxNywKLSsgICAgcjE4LAotKyAgICByMTksCi0r ICAgIHIyMCwKLSsgICAgcjIxLAotKyAgICByMjIsCi0rICAgIHIyMywKLSsgICAgcjI0LAotKyAg ICByMjUsCi0rICAgIHIyNiwKLSsgICAgcjI3LAotKyAgICByMjgsCi0rICAgIHIyOSwKLSsgICAg cjMwLAotKyAgICByMzEsCi0rICAgIHNwID0gcjEsCi0rICAgIGludmFsaWRfcmVnLAotKyAgfTsK LSsgIHR5cGVkZWYgdWludDhfdCBDb2RlOwotKyAgdHlwZWRlZiBSZWdpc3RlcklEIEVuY29kaW5n OwotKyAgdHlwZWRlZiB1aW50MzJfdCBTZXRUeXBlOwotKwotKyAgc3RhdGljIGNvbnN0IEVuY29k aW5nIFN0YWNrUG9pbnRlciA9IHNwOwotKyAgc3RhdGljIGNvbnN0IEVuY29kaW5nIEludmFsaWQg PSBpbnZhbGlkX3JlZzsKLSsKLSsgIHVuaW9uIFJlZ2lzdGVyQ29udGVudCB7Ci0rICAgIHVpbnRw dHJfdCByOwotKyAgfTsKLSsKLSsgIHN0YXRpYyB1aW50MzJfdCBTZXRTaXplKFNldFR5cGUgeCkg eyByZXR1cm4gc3RkOjpwb3Bjb3VudCh4KTsgfQotKyAgc3RhdGljIHVpbnQzMl90IEZpcnN0Qml0 KFNldFR5cGUgeCkgewotKyAgICBNT1pfQVNTRVJUKHgpOwotKyAgICByZXR1cm4gc3RkOjpjb3Vu dHJfemVybyh4KTsKLSsgIH0KLSsgIHN0YXRpYyB1aW50MzJfdCBMYXN0Qml0KFNldFR5cGUgeCkg ewotKyAgICBNT1pfQVNTRVJUKHgpOwotKyAgICByZXR1cm4gc3RkOjpiaXRfd2lkdGgoeCkgLSAx OwotKyAgfQotKwotKyAgc3RhdGljIGNvbnN0IGNoYXIqIEdldE5hbWUodWludDMyX3QgY29kZSkg ewotKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgTmFtZXNbXSA9IHsKLSsgICAgICAgICJy MCIsICAic3AiLCAgInIyIiwgICJyMyIsICAicjQiLCAgInI1IiwgICJyNiIsICAicjciLAotKyAg ICAgICAgInI4IiwgICJyOSIsICAicjEwIiwgInIxMSIsICJyMTIiLCAicjEzIiwgInIxNCIsICJy MTUiLAotKyAgICAgICAgInIxNiIsICJyMTciLCAicjE4IiwgInIxOSIsICJyMjAiLCAicjIxIiwg InIyMiIsICJyMjMiLAotKyAgICAgICAgInIyNCIsICJyMjUiLCAicjI2IiwgInIyNyIsICJyMjgi LCAicjI5IiwgInIzMCIsICJyMzEifTsKLSsgICAgc3RhdGljX2Fzc2VydChUb3RhbCA9PSBzdGQ6 OnNpemUoTmFtZXMpLCAiVGFibGUgaXMgdGhlIGNvcnJlY3Qgc2l6ZSIpOwotKyAgICBpZiAoY29k ZSA+PSBUb3RhbCkgewotKyAgICAgIHJldHVybiAiaW52YWxpZCI7Ci0rICAgIH0KLSsgICAgcmV0 dXJuIE5hbWVzW2NvZGVdOwotKyAgfQotKwotKyAgc3RhdGljIENvZGUgRnJvbU5hbWUoY29uc3Qg Y2hhciogbmFtZSk7Ci0rCi0rICBzdGF0aWMgY29uc3QgdWludDMyX3QgVG90YWwgPSAzMjsKLSsg IHN0YXRpYyBjb25zdCB1aW50MzJfdCBUb3RhbFBoeXMgPSAzMjsKLSsgIHN0YXRpYyBjb25zdCB1 aW50MzJfdCBBbGxvY2F0YWJsZSA9IDI0OwotKwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxs TWFzayA9IDB4RkZGRkZGRkY7Ci0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBOb25lTWFzayA9IDB4 MDsKLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFyZ1JlZ01hc2sgPQotKyAgICAgICgxVSA8 PCBSZWdpc3RlcnM6OnIzKSB8ICgxVSA8PCBSZWdpc3RlcnM6OnI0KSB8ICgxVSA8PCBSZWdpc3Rl cnM6OnI1KSB8Ci0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjYpIHwgKDFVIDw8IFJlZ2lzdGVy czo6cjcpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjgpIHwKLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJz OjpyOSkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMTApOwotKwotKyAgLy8gcjAsIHIxMSwgcjEyIGFy ZSBhbHNvIHZvbGF0aWxlIGJ1dCBoYW5kbGVkIHNlcGFyYXRlbHkuCi0rICBzdGF0aWMgY29uc3Qg U2V0VHlwZSBWb2xhdGlsZU1hc2sgPSBBcmdSZWdNYXNrOwotKwotKyAgLy8gRUxGdjIgY2FsbGVl LXNhdmVkIEdQUnMgYXJlIHIxNC4ucjMxLiByMiAoVE9DKSBhbmQgcjEzIChUTFMpIGFyZQotKyAg Ly8gZGVkaWNhdGVkIHJlZ2lzdGVycywgTk9UIGdlbmVyYWwgY2FsbGVlLXNhdmVkOiByMiBpcyBy ZXN0b3JlZCBieSB0aGUKLSsgIC8vIFBMVC1jYWxsIGxpbmthZ2UgY29udmVudGlvbiAoYGxkIHIy LCAyNChyMSlgIGFmdGVyIGV2ZXJ5IGNyb3NzLW1vZHVsZQotKyAgLy8gY2FsbCk7IHIxMyBpcyB0 aGUgdGhyZWFkIHBvaW50ZXIgYW5kIG11c3QgTkVWRVIgYmUgd3JpdHRlbi4gSW5jbHVkaW5nCi0r ICAvLyB0aGVtIGhlcmUgcHJldmlvdXNseSBtYWRlIGBQdXNoUmVnc0luTWFzayhOb25Wb2xhdGls ZU1hc2spYCBzYXZlIGFuZAotKyAgLy8gcmVzdG9yZSB0aGVtIOKAlCB3YXN0ZWQgMTYgYnl0ZXMg cGVyIHdhc20tc3R1YiBmcmFtZSBhdCBiZXN0LCBsYXRlbnQKLSsgIC8vIFRMUyBjb3JydXB0aW9u IGlmIHNhdmUvcmVzdG9yZSB3ZXJlIGV2ZXIgbWlzb3JkZXJlZC4gVmVyaWZpZWQgdGhhdAotKyAg Ly8gbm8gSklULWVtaXR0ZWQgY29kZSB3cml0ZXMgcjIgb3IgcjEzIChib3RoIGFyZSBOb25BbGxv Y2F0YWJsZSwgYW5kCi0rICAvLyBncmVwIGFjcm9zcyBqcy9zcmMvaml0L3BwYzY0LyBmaW5kcyBu byBgYXNfKmAgc2l0ZSBhc3NpZ25pbmcgdG8KLSsgIC8vIHRoZW0pLCBzbyB0aGV5J3JlIHByZXNl cnZlZCBhY3Jvc3MgdGhlIEpJVCBib2R5IGZvciBmcmVlLgotKyAgc3RhdGljIGNvbnN0IFNldFR5 cGUgTm9uVm9sYXRpbGVNYXNrID0KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTQpIHwKLSsg ICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTUpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjE2KSB8ICgx VSA8PCBSZWdpc3RlcnM6OnIxNykgfAotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIxOCkgfCAo MVUgPDwgUmVnaXN0ZXJzOjpyMTkpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjIwKSB8Ci0rICAgICAg KDFVIDw8IFJlZ2lzdGVyczo6cjIxKSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIyMikgfCAoMVUgPDwg UmVnaXN0ZXJzOjpyMjMpIHwKLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMjQpIHwgKDFVIDw8 IFJlZ2lzdGVyczo6cjI1KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIyNikgfAotKyAgICAgICgxVSA8 PCBSZWdpc3RlcnM6OnIyNykgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMjgpIHwgKDFVIDw8IFJlZ2lz dGVyczo6cjI5KSB8Ci0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjMwKSB8ICgxVSA8PCBSZWdp c3RlcnM6OnIzMSk7Ci0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBOb25BbGxvY2F0YWJsZU1h c2sgPQotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIwKSB8ICAgLy8gQ2Fubm90IGJlIGJhc2Ug aW4gbG9hZC9zdG9yZS4KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpzcCkgfCAgIC8vIFN0YWNr IHBvaW50ZXIuCi0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjIpIHwgICAvLyBUT0MgcG9pbnRl ciAoRUxGdjIpLgotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIxMSkgfCAgLy8gVGhpcmQgc2Ny YXRjaC4KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTIpIHwgIC8vIFNlY29uZCBzY3JhdGNo IC8gYWRkcmVzc1RlbXBSZWdpc3Rlci4KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTMpIHwg IC8vIFRocmVhZC1sb2NhbCBzdG9yYWdlIChFTEZ2MikuCi0rICAgICAgKDFVIDw8IFJlZ2lzdGVy czo6cjE2KSB8ICAvLyBTYXZlZCBzY3JhdGNoIHJlZ2lzdGVyLgotKyAgICAgICgxVSA8PCBSZWdp c3RlcnM6OnIzMSk7ICAgLy8gRnJhbWUgcG9pbnRlci4KLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRU eXBlIFdyYXBwZXJNYXNrID0gVm9sYXRpbGVNYXNrOwotKwotKyAgLy8gUmVnaXN0ZXJzIHJldHVy bmVkIGZyb20gYSBKUyAtPiBKUyBjYWxsLgotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgSlNDYWxs TWFzayA9ICgxVSA8PCBSZWdpc3RlcnM6OnI1KTsKLSsKLSsgIC8vIFJlZ2lzdGVycyByZXR1cm5l ZCBmcm9tIGEgSlMgLT4gQyBjYWxsLgotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQ2FsbE1hc2sg PSAoMVUgPDwgUmVnaXN0ZXJzOjpyMyk7Ci0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBBbGxv Y2F0YWJsZU1hc2sgPSBBbGxNYXNrICYgfk5vbkFsbG9jYXRhYmxlTWFzazsKLSt9OwotKwotK3R5 cGVkZWYgdWludDMyX3QgUGFja2VkUmVnaXN0ZXJNYXNrOwotKwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgotK2NsYXNzIFR5cGVkUmVnaXN0ZXJTZXQ7Ci0rCi0rY2xhc3MgRmxvYXRSZWdpc3RlcnMg ewotKyBwdWJsaWM6Ci0rICBlbnVtIEZQUmVnaXN0ZXJJRCB7Ci0rICAgIGYwID0gMCwKLSsgICAg ZjEsCi0rICAgIGYyLAotKyAgICBmMywKLSsgICAgZjQsCi0rICAgIGY1LAotKyAgICBmNiwKLSsg ICAgZjcsCi0rICAgIGY4LAotKyAgICBmOSwKLSsgICAgZjEwLAotKyAgICBmMTEsCi0rICAgIGYx MiwKLSsgICAgZjEzLAotKyAgICBmMTQsCi0rICAgIGYxNSwKLSsgICAgZjE2LAotKyAgICBmMTcs Ci0rICAgIGYxOCwKLSsgICAgZjE5LAotKyAgICBmMjAsCi0rICAgIGYyMSwKLSsgICAgZjIyLAot KyAgICBmMjMsCi0rICAgIGYyNCwKLSsgICAgZjI1LAotKyAgICBmMjYsCi0rICAgIGYyNywKLSsg ICAgZjI4LAotKyAgICBmMjksCi0rICAgIGYzMCwKLSsgICAgZjMxLAotKyAgfTsKLSsKLSsgIC8v IEVpZ2h0IGJpdHM6IChpbnZhbGlkIDw8IDcpIHwgKGtpbmQgPDwgNSkgfCBlbmNvZGluZwotKyAg dHlwZWRlZiB1aW50OF90IENvZGU7Ci0rICB0eXBlZGVmIEZQUmVnaXN0ZXJJRCBFbmNvZGluZzsK LSsgIC8vIDMga2luZHMgw5cgMzIgcmVncyA9IDk2IGJpdHMgbmVlZGVkLiBVc2UgX191aW50MTI4 X3QuCi0rICB0eXBlZGVmIF9fdWludDEyOF90IFNldFR5cGU7Ci0rCi0rICBlbnVtIEtpbmQgOiB1 aW50OF90IHsgRG91YmxlLCBTaW5nbGUsIFNpbWQxMjgsIE51bVR5cGVzIH07Ci0rCi0rICBzdGF0 aWMgY29uc3RleHByIENvZGUgSW52YWxpZCA9IDB4ODA7Ci0rCi0rICBzdGF0aWMgY29uc3QgY2hh ciogR2V0TmFtZSh1aW50MzJfdCBjb2RlKSB7Ci0rICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z dCBOYW1lc1tdID0gewotKyAgICAgICAgImYwIiwgICJmMSIsICAiZjIiLCAgImYzIiwgICJmNCIs ICAiZjUiLCAgImY2IiwgICJmNyIsCi0rICAgICAgICAiZjgiLCAgImY5IiwgICJmMTAiLCAiZjEx IiwgImYxMiIsICJmMTMiLCAiZjE0IiwgImYxNSIsCi0rICAgICAgICAiZjE2IiwgImYxNyIsICJm MTgiLCAiZjE5IiwgImYyMCIsICJmMjEiLCAiZjIyIiwgImYyMyIsCi0rICAgICAgICAiZjI0Iiwg ImYyNSIsICJmMjYiLCAiZjI3IiwgImYyOCIsICJmMjkiLCAiZjMwIiwgImYzMSJ9OwotKyAgICBz dGF0aWNfYXNzZXJ0KFRvdGFsUGh5cyA9PSBzdGQ6OnNpemUoTmFtZXMpLCAiVGFibGUgaXMgdGhl IGNvcnJlY3Qgc2l6ZSIpOwotKyAgICBpZiAoY29kZSA+PSBUb3RhbCkgewotKyAgICAgIHJldHVy biAiaW52YWxpZCI7Ci0rICAgIH0KLSsgICAgcmV0dXJuIE5hbWVzW2NvZGUgJSBUb3RhbFBoeXNd OwotKyAgfQotKwotKyAgc3RhdGljIENvZGUgRnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSk7Ci0r Ci0rICBzdGF0aWMgY29uc3QgdWludDMyX3QgVG90YWxQaHlzID0gMzI7Ci0rICBzdGF0aWMgY29u c3QgdWludDMyX3QgVG90YWwgPSBUb3RhbFBoeXMgKiBOdW1UeXBlczsKLSsgIHN0YXRpYyBjb25z dCB1aW50MzJfdCBBbGxvY2F0YWJsZSA9IDMxOyAgLy8gV2l0aG91dCBmMCwgdGhlIHNjcmF0Y2gg cmVnaXN0ZXIuCi0rCi0rICBzdGF0aWNfYXNzZXJ0KHNpemVvZihTZXRUeXBlKSAqIDggPj0gVG90 YWwsCi0rICAgICAgICAgICAgICAgICJTZXRUeXBlIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8g ZW51bWVyYXRlIGFsbCByZWdpc3RlcnMuIik7Ci0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBT cHJlYWRTaW5nbGUgPSBTZXRUeXBlKDEpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8PCAodWludDMyX3QoU2luZ2xlKSAqIFRvdGFsUGh5cyk7Ci0rICBzdGF0aWMgY29u c3QgU2V0VHlwZSBTcHJlYWREb3VibGUgPSBTZXRUeXBlKDEpCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8PCAodWludDMyX3QoRG91YmxlKSAqIFRvdGFsUGh5cyk7Ci0r ICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTcHJlYWRTaW1kMTI4ID0gU2V0VHlwZSgxKQotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICh1aW50MzJfdChTaW1kMTI4KSAq IFRvdGFsUGh5cyk7Ci0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTcHJlYWQgPSBTcHJlYWRTaW5n bGUgfCBTcHJlYWREb3VibGUgfCBTcHJlYWRTaW1kMTI4OwotKwotKyAgc3RhdGljIGNvbnN0IFNl dFR5cGUgQWxsUGh5c01hc2sgPSAoKFNldFR5cGUoMSkgPDwgVG90YWxQaHlzKSAtIDEpOwotKyAg c3RhdGljIGNvbnN0IFNldFR5cGUgQWxsTWFzayA9IEFsbFBoeXNNYXNrICogU3ByZWFkOwotKyAg c3RhdGljIGNvbnN0IFNldFR5cGUgQWxsU2luZ2xlTWFzayA9IEFsbFBoeXNNYXNrICogU3ByZWFk U2luZ2xlOwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsRG91YmxlTWFzayA9IEFsbFBoeXNN YXNrICogU3ByZWFkRG91YmxlOwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsU2ltZDEyOE1h c2sgPSBBbGxQaHlzTWFzayAqIFNwcmVhZFNpbWQxMjg7Ci0rICBzdGF0aWMgY29uc3QgU2V0VHlw ZSBOb25lTWFzayA9IFNldFR5cGUoMCk7Ci0rCi0rICAvLyBFTEZ2MjogZjE0LWYzMSBhcmUgbm9u LXZvbGF0aWxlIChjYWxsZWUtc2F2ZWQpIGZvciBzY2FsYXIgRlAuCi0rICAvLyBUaGUgdXBwZXIg NjQgYml0cyBvZiBWU1IgMC0zMSBhcmUgdm9sYXRpbGUsIHNvIFNpbWQxMjggdmlldyBpcyBhbGwt dm9sYXRpbGUuCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBOb25Wb2xhdGlsZVBoeXNNYXNrID0K LSsgICAgICBTZXRUeXBlKCgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjE0KSB8ICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjE1KSB8Ci0rICAgICAgICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6 OmYxNikgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYxNykgfAotKyAgICAgICAgICAgICAgKDFV IDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTgpIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTkpIHwK LSsgICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjIwKSB8ICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjIxKSB8Ci0rICAgICAgICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6 OmYyMikgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyMykgfAotKyAgICAgICAgICAgICAgKDFV IDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjQpIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjUpIHwK LSsgICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjI2KSB8ICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjI3KSB8Ci0rICAgICAgICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6 OmYyOCkgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyOSkgfAotKyAgICAgICAgICAgICAgKDFV IDw8IEZsb2F0UmVnaXN0ZXJzOjpmMzApIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMzEpKTsK LSsgIC8vIFNpbWQxMjggbGl2ZXMgaW4gVlItbmFtZXNwYWNlIChWU1IzMi02MyA9IFZSMC1WUjMx KS4gUGVyIEVMRnYyIEFCSSwKLSsgIC8vIFZSMjAtVlIzMSBhcmUgbm9uLXZvbGF0aWxlIChjYWxs ZWUtc2F2ZWQpLiBFbmNvZGluZyBzdG9yYWdlIGlzIDIwLTMxCi0rICAvLyB3aXRoIGtpbmQ9U2lt ZDEyOC4KLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIFNpbWROb25Wb2xhdGlsZVBoeXNNYXNrID0K LSsgICAgICBTZXRUeXBlKCgxVSA8PCAyMCkgfCAoMVUgPDwgMjEpIHwgKDFVIDw8IDIyKSB8ICgx VSA8PCAyMykgfAotKyAgICAgICAgICAgICAgKDFVIDw8IDI0KSB8ICgxVSA8PCAyNSkgfCAoMVUg PDwgMjYpIHwgKDFVIDw8IDI3KSB8Ci0rICAgICAgICAgICAgICAoMVUgPDwgMjgpIHwgKDFVIDw8 IDI5KSB8ICgxVSA8PCAzMCkgfCAoMVUgPDwgMzEpKTsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBl IE5vblZvbGF0aWxlTWFzayA9Ci0rICAgICAgTm9uVm9sYXRpbGVQaHlzTWFzayAqIChTcHJlYWRT aW5nbGUgfCBTcHJlYWREb3VibGUpIHwKLSsgICAgICBTaW1kTm9uVm9sYXRpbGVQaHlzTWFzayAq IFNwcmVhZFNpbWQxMjg7Ci0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBWb2xhdGlsZU1hc2sg PSBBbGxNYXNrICYgfk5vblZvbGF0aWxlTWFzazsKLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBl IFdyYXBwZXJNYXNrID0gVm9sYXRpbGVNYXNrOwotKwotKyAgLy8gZjAgaXMgdGhlIHNjcmF0Y2gg cmVnaXN0ZXIgKGFsbCB0aHJlZSB2aWV3czogc2luZ2xlLCBkb3VibGUsIHNpbWQxMjgpLgotKyAg c3RhdGljIGNvbnN0IFNldFR5cGUgTm9uQWxsb2NhdGFibGVNYXNrID0KLSsgICAgICAoU2V0VHlw ZSgxKSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjApICogU3ByZWFkOwotKwotKyAgc3RhdGljIGNvbnN0 IFNldFR5cGUgQWxsb2NhdGFibGVNYXNrID0gQWxsTWFzayAmIH5Ob25BbGxvY2F0YWJsZU1hc2s7 Ci0rCi0rICB1bmlvbiBSZWdpc3RlckNvbnRlbnQgewotKyAgICBmbG9hdCBzOwotKyAgICBkb3Vi bGUgZDsKLSsgICAgLy8gTm8gdjEyOCBoZXJlLiBTaW1kMTI4IGxpdmVzIGluIHBoeXNpY2FsbHkt ZGlzdGluY3QgVlJzIChWU1IzMi02MykKLSsgICAgLy8gYW5kIG5ldmVyIHJlYWNoZXMgUmVnaXN0 ZXJEdW1wIChhc3NlcnRlZCBieSBTYWZlcG9pbnRTdGF0ZTsgYmFpbG91dAotKyAgICAvLyBBbGxS ZWdzIGV4Y2x1ZGVzIFNpbWQxMjgpLiBXaXRoIHYxMjggaW4gdGhlIHVuaW9uLCBzaXplb2Ygd2Fz IDE2LAotKyAgICAvLyBmb3JjaW5nIFB1c2hSZWdzSW5NYXNrIHRvIGEgMTYtYnl0ZSBzdHJpZGUg dGhhdCBtaXNtYXRjaGVkCi0rICAgIC8vIGFkZHJlc3NPZlJlZ2lzdGVyJ3MgOC1ieXRlIHdhbGsg dmlhICgqaXRlcikuc2l6ZSgpLgotKyAgfTsKLSsKLSsgIHN0YXRpYyBjb25zdGV4cHIgRW5jb2Rp bmcgZW5jb2RpbmcoQ29kZSBjKSB7IHJldHVybiBFbmNvZGluZyhjICYgMzEpOyB9Ci0rCi0rICBz dGF0aWMgY29uc3RleHByIEtpbmQga2luZChDb2RlIGMpIHsgcmV0dXJuIEtpbmQoKGMgPj4gNSkg JiAzKTsgfQotKwotKyAgc3RhdGljIGNvbnN0ZXhwciBDb2RlIGZyb21QYXJ0cyh1aW50MzJfdCBl bmNvZGluZywgdWludDMyX3Qga2luZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgaW52YWxpZCkgewotKyAgICByZXR1cm4gQ29kZSgoaW52YWxpZCA8PCA3KSB8 IChraW5kIDw8IDUpIHwgZW5jb2RpbmcpOwotKyAgfQotK307Ci0rCi0rLy8gU3BpbGxTbG90U2l6 ZSBtdXN0IGZpdCB0aGUgd2lkZXN0IHJlZ2lzdGVyIGNsYXNzIChTaW1kMTI4ID0gMTYgYnl0ZXMp LgotKy8vIFdlIGNhbid0IGRlcml2ZSBmcm9tIHNpemVvZihGbG9hdFJlZ2lzdGVyczo6UmVnaXN0 ZXJDb250ZW50KSDigJQgdGhhdAotKy8vIHVuaW9uIGlzIHNpemVkIGZvciBGUFJzIG9ubHkgKDgg Ynl0ZXMgc2luY2UgdjEyOCBsaXZlcyBpbiBkaXN0aW5jdAotKy8vIFZScywgbm90IGluIHRoZSBG UFIgdW5pb24pLCBzbyBkZXJpdmluZyB3b3VsZCB1bmRlci1yZXNlcnZlIGZvcgotKy8vIFNpbWQx MjggY3ljbGUgYnJlYWtzLiBTcGlsbFNsb3RTaXplIGlzIGNvbnN1bWVkIG9ubHkgYnkgTW92ZUVt aXR0ZXIKLSsvLyBhbmQgaXMgbm90IHBhcnQgb2YgdGhlIEpJVCBmcmFtZSBsYXlvdXQuCi0rc3Rh dGljIGNvbnN0IHVpbnQzMl90IFNwaWxsU2xvdFNpemUgPSAxNjsKLSsKLSsvLyBQUEM2NCBFTEZ2 MiBBQkk6IHRoZSBjYWxsZWUgc2F2ZXMgTFIgYXQgW2NhbGxlcl9TUCsxNl0sIENSIGF0Ci0rLy8g W2NhbGxlcl9TUCs4XSwgYW5kIG1heSBzYXZlIFRPQyBhdCBbY2FsbGVyX1NQKzI0XS4gUmVzZXJ2 ZSAzMiBieXRlcwotKy8vICh0aGUgbWluaW11bSBFTEZ2MiBzdGFjayBmcmFtZSkgYXMgYSBzaGFk b3cgYXJlYSBmb3IgZXZlcnkgQUJJIGNhbGwuCi0rc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBT aGFkb3dTdGFja1NwYWNlID0gMzI7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFNpemVPZlJldHVy bkFkZHJlc3NBZnRlckNhbGwgPSAwOwotKwotKy8vIFBQQzY0IGJyYW5jaCBpbnN0cnVjdGlvbnMg aGF2ZSBhIDI2LWJpdCBzaWduZWQgb2Zmc2V0IGZpZWxkLCBnaXZpbmcgYQotKy8vIHJhbmdlIG9m ICsvLSAzMk1CLiBXZSByZWR1Y2UgdGhpcyB0byBsZWF2ZSByb29tIGZvciBqdW1wIGlzbGFuZCBp bnNlcnRpb24uCi0rc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBKdW1wSW1tZWRpYXRlUmFuZ2Ug PSAoMzIgKiAxMDI0ICogMTAyNCkgLSAzMjsKLSsKLSsvLyBTaXplIG9mIGVhY2ggYmFpbG91dCB0 YWJsZSBlbnRyeSAoYSBzaW5nbGUgYmwgaW5zdHJ1Y3Rpb24pLgotK3N0YXRpYyBjb25zdCB1aW50 MzJfdCBCQUlMT1VUX1RBQkxFX0VOVFJZX1NJWkUgPSA0OwotKwotKy8vIFBQQzY0IHNwZWNpYWwg cHVycG9zZSByZWdpc3RlcnMgKG5vdCBleHBvc2VkIHRvIHRoZSBhbGxvY2F0b3IpLgotK2VudW0g U1BSZWdpc3RlcklEIHsKLSsgIHNwcl94ZXIgPSAxLAotKyAgc3ByX2xyID0gOCwKLSsgIHNwcl9j dHIgPSA5LAotKyAgc3ByX3Zyc2F2ZSA9IDI1NiwKLSsgIGludmFsaWRfc3ByZWcKLSt9OwotKwot Ky8vIFBQQzY0IGNvbmRpdGlvbiByZWdpc3RlcnMuCi0rZW51bSBDUmVnaXN0ZXJJRCB7IGNyMCA9 IDAsIGNyMSwgY3I1ID0gNSwgY3I2LCBjcjcsIGludmFsaWRfY3JlZyB9OwotKwotK3N0cnVjdCBG bG9hdFJlZ2lzdGVyIHsKLSsgIHR5cGVkZWYgRmxvYXRSZWdpc3RlcnMgQ29kZXM7Ci0rICB0eXBl ZGVmIHNpemVfdCBDb2RlOwotKyAgdHlwZWRlZiBDb2Rlczo6RW5jb2RpbmcgRW5jb2Rpbmc7Ci0r ICB0eXBlZGVmIENvZGVzOjpTZXRUeXBlIFNldFR5cGU7Ci0rCi0rICBzdGF0aWMgdWludDMyX3Qg U2V0U2l6ZShTZXRUeXBlIHgpIHsKLSsgICAgLy8gRm9sZCBhbGwgMyBraW5kcyAoU2luZ2xlLCBE b3VibGUsIFNpbWQxMjgpIGRvd24gdG8gcGh5c2ljYWwgbWFzay4KLSsgICAgU2V0VHlwZSBwaHlz ID0gKHggJiBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2spIHwKLSsgICAgICAgICAgICAgICAg ICAgKCh4ID4+IEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpICYgRmxvYXRSZWdpc3RlcnM6OkFs bFBoeXNNYXNrKSB8Ci0rICAgICAgICAgICAgICAgICAgICgoeCA+PiAoMiAqIEZsb2F0UmVnaXN0 ZXJzOjpUb3RhbFBoeXMpKSAmIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzayk7Ci0rICAgIHJl dHVybiBzdGQ6OnBvcGNvdW50KHN0YXRpY19jYXN0PHVpbnQ2NF90PihwaHlzKSk7Ci0rICB9Ci0r Ci0rICAvLyBfX3VpbnQxMjhfdCBoZWxwZXJzIGZvciBGaXJzdEJpdC9MYXN0Qml0LgotKyAgc3Rh dGljIHVpbnQzMl90IEZpcnN0Qml0KFNldFR5cGUgeCkgewotKyAgICBNT1pfQVNTRVJUKHgpOwot KyAgICB1aW50NjRfdCBsbyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih4KTsKLSsgICAgaWYgKGxv KSB7Ci0rICAgICAgcmV0dXJuIHN0ZDo6Y291bnRyX3plcm8obG8pOwotKyAgICB9Ci0rICAgIHJl dHVybiA2NCArIHN0ZDo6Y291bnRyX3plcm8oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHggPj4gNjQp KTsKLSsgIH0KLSsgIHN0YXRpYyB1aW50MzJfdCBMYXN0Qml0KFNldFR5cGUgeCkgewotKyAgICBN T1pfQVNTRVJUKHgpOwotKyAgICB1aW50NjRfdCBoaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih4 ID4+IDY0KTsKLSsgICAgaWYgKGhpKSB7Ci0rICAgICAgcmV0dXJuIDY0ICsgKHN0ZDo6Yml0X3dp ZHRoKGhpKSAtIDEpOwotKyAgICB9Ci0rICAgIHJldHVybiBzdGQ6OmJpdF93aWR0aChzdGF0aWNf Y2FzdDx1aW50NjRfdD4oeCkpIC0gMTsKLSsgIH0KLSsKLSsgcHJpdmF0ZToKLSsgIHVpbnQ4X3Qg ZW5jb2RpbmdfOwotKyAgdWludDhfdCBraW5kXzsKLSsgIGJvb2wgaW52YWxpZF87Ci0rCi0rICB0 eXBlZGVmIENvZGVzOjpLaW5kIEtpbmQ7Ci0rCi0rIHB1YmxpYzoKLSsgIGNvbnN0ZXhwciBGbG9h dFJlZ2lzdGVyKEVuY29kaW5nIGVuY29kaW5nLCBLaW5kIGtpbmQpCi0rICAgICAgOiBlbmNvZGlu Z18oZW5jb2RpbmcpLCBraW5kXyhraW5kKSwgaW52YWxpZF8oZmFsc2UpIHt9Ci0rCi0rICBjb25z dGV4cHIgRmxvYXRSZWdpc3RlcigpCi0rICAgICAgOiBlbmNvZGluZ18oMCksIGtpbmRfKEZsb2F0 UmVnaXN0ZXJzOjpEb3VibGUpLCBpbnZhbGlkXyh0cnVlKSB7fQotKwotKyAgc3RhdGljIEZsb2F0 UmVnaXN0ZXIgRnJvbUNvZGUodWludDMyX3QgaSkgewotKyAgICBNT1pfQVNTRVJUKGkgPCBDb2Rl czo6VG90YWwpOwotKyAgICByZXR1cm4gRmxvYXRSZWdpc3RlcihGbG9hdFJlZ2lzdGVyczo6ZW5j b2RpbmcoaSksIEZsb2F0UmVnaXN0ZXJzOjpraW5kKGkpKTsKLSsgIH0KLSsKLSsgIGJvb2wgaXNT aW5nbGUoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKLSsgICAgcmV0dXJu IGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGU7Ci0rICB9Ci0rICBib29sIGlzRG91Ymxl KCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Ci0rICAgIHJldHVybiBraW5k XyA9PSBGbG9hdFJlZ2lzdGVyczo6RG91YmxlOwotKyAgfQotKyAgYm9vbCBpc1NpbWQxMjgoKSBj b25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKLSsgICAgcmV0dXJuIGtpbmRfID09 IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4OwotKyAgfQotKyAgYm9vbCBpc0ludmFsaWQoKSBjb25z dCB7IHJldHVybiBpbnZhbGlkXzsgfQotKwotKyAgRmxvYXRSZWdpc3RlciBhc1NpbmdsZSgpIGNv bnN0IHsKLSsgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOwotKyAgICByZXR1cm4gRmxvYXRSZWdp c3RlcihFbmNvZGluZyhlbmNvZGluZ18pLCBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlKTsKLSsgIH0K LSsgIEZsb2F0UmVnaXN0ZXIgYXNEb3VibGUoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWlu dmFsaWRfKTsKLSsgICAgcmV0dXJuIEZsb2F0UmVnaXN0ZXIoRW5jb2RpbmcoZW5jb2RpbmdfKSwg RmxvYXRSZWdpc3RlcnM6OkRvdWJsZSk7Ci0rICB9Ci0rICBGbG9hdFJlZ2lzdGVyIGFzU2ltZDEy OCgpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOwotKyAgICByZXR1cm4gRmxv YXRSZWdpc3RlcihFbmNvZGluZyhlbmNvZGluZ18pLCBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCk7 Ci0rICB9Ci0rCi0rICBjb25zdGV4cHIgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsKLSsgICAgTU9a X0FTU0VSVCghaW52YWxpZF8pOwotKyAgICBpZiAoa2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OkRv dWJsZSkgewotKyAgICAgIHJldHVybiBzaXplb2YoZG91YmxlKTsKLSsgICAgfQotKyAgICBpZiAo a2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSkgewotKyAgICAgIHJldHVybiBzaXplb2Yo ZmxvYXQpOwotKyAgICB9Ci0rICAgIE1PWl9BU1NFUlQoa2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6 OlNpbWQxMjgpOwotKyAgICByZXR1cm4gMTY7Ci0rICB9Ci0rCi0rICBjb25zdGV4cHIgQ29kZSBj b2RlKCkgY29uc3QgewotKyAgICByZXR1cm4gQ29kZXM6OmZyb21QYXJ0cyhlbmNvZGluZ18sIGtp bmRfLCBpbnZhbGlkXyk7Ci0rICB9Ci0rCi0rICBjb25zdGV4cHIgRW5jb2RpbmcgZW5jb2Rpbmco KSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKLSsgICAgLy8gU2ltZDEyOCBs aXZlcyBpbiBWUi1uYW1lc3BhY2UgYXQgVlNSMzItNjMgKD0gVlIwLTMxKS4gU2luZ2xlL0RvdWJs ZQotKyAgICAvLyBzaGFyZSBGUFIgbmFtZXNwYWNlIGF0IFZTUjAtMzEuIFRoZSB1bmlmaWVkIFhY LWZvcm0gZW5jb2RlcnMgc3BsaXQKLSsgICAgLy8gdGhlIHJlc3VsdCBpbnRvIGxvdy01LWJpdCBW UlQvVlJBL1ZSQiArIFRYL0FYL0JYIGJpdHM7IFZNWAotKyAgICAvLyBGbG9hdFJlZ2lzdGVyLXRh a2luZyBlbmNvZGVycyBtYXNrIHdpdGggYCYgMzFgIGZvciB0aGUgcmF3IFZSCi0rICAgIC8vIGZp ZWxkLiBTbyAzMitFIGZsb3dzIGNvcnJlY3RseSB0aHJvdWdoIGJvdGggcGF0aHMuCi0rICAgIHJl dHVybiBFbmNvZGluZyhlbmNvZGluZ18gKwotKyAgICAgICAgICAgICAgICAgICAgKGtpbmRfID09 IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4ID8gMzIgOiAwKSk7Ci0rICB9Ci0rCi0rICBjb25zdCBj aGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWdpc3RlcnM6OkdldE5hbWUoY29kZSgp KTsgfQotKyAgYm9vbCB2b2xhdGlsZV8oKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFs aWRfKTsKLSsgICAgcmV0dXJuICEhKChTZXRUeXBlKDEpIDw8IGNvZGUoKSkgJiBGbG9hdFJlZ2lz dGVyczo6Vm9sYXRpbGVNYXNrKTsKLSsgIH0KLSsgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o RmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3QgewotKyAgICByZXR1cm4gY29kZSgpICE9IG90aGVy LmNvZGUoKTsKLSsgIH0KLSsgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oRmxvYXRSZWdpc3Rl ciBvdGhlcikgY29uc3QgewotKyAgICByZXR1cm4gY29kZSgpID09IG90aGVyLmNvZGUoKTsKLSsg IH0KLSsKLSsgIGJvb2wgYWxpYXNlcyhGbG9hdFJlZ2lzdGVyIG90aGVyKSBjb25zdCB7Ci0rICAg IC8vIFJlZ2lzdGVyLWNsYXNzIHBhcnRpdGlvbjoge1NpbmdsZSwgRG91YmxlfSBzaGFyZSBGUFJz IChWU1IwLTMxKTsKLSsgICAgLy8gU2ltZDEyOCBsaXZlcyBpbiBWUi1uYW1lc3BhY2UgKFZTUjMy LTYzKS4gRlBSIGY1IChTaW5nbGUvRG91YmxlCi0rICAgIC8vIGVuY29kaW5nIDUpIGFuZCBWUiB2 NSAoU2ltZDEyOCBlbmNvZGluZyA1KSBhcmUgZGlzdGluY3QgcGh5c2ljYWwKLSsgICAgLy8gcmVn aXN0ZXJzLgotKyAgICBpZiAoZW5jb2RpbmdfICE9IG90aGVyLmVuY29kaW5nXykgcmV0dXJuIGZh bHNlOwotKyAgICBib29sIHNlbGZTaW1kID0gKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1k MTI4KTsKLSsgICAgYm9vbCBvdGhlclNpbWQgPSAob3RoZXIua2luZF8gPT0gRmxvYXRSZWdpc3Rl cnM6OlNpbWQxMjgpOwotKyAgICByZXR1cm4gc2VsZlNpbWQgPT0gb3RoZXJTaW1kOwotKyAgfQot KyAgYm9vbCBlcXVpdihGbG9hdFJlZ2lzdGVyIG90aGVyKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NF UlQoIWludmFsaWRfKTsKLSsgICAgcmV0dXJuIGtpbmRfID09IG90aGVyLmtpbmRfOwotKyAgfQot KwotKyAgdWludDMyX3QgbnVtQWxpYXNlZCgpIGNvbnN0IHsKLSsgICAgcmV0dXJuIChraW5kXyA9 PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgPyAxIDogMjsKLSsgIH0KLSsgIHVpbnQzMl90IG51 bUFsaWduZWRBbGlhc2VkKCkgeyByZXR1cm4gbnVtQWxpYXNlZCgpOyB9Ci0rCi0rICBGbG9hdFJl Z2lzdGVyIGFsaWFzZWQodWludDMyX3QgYWxpYXNJZHgpIHsKLSsgICAgTU9aX0FTU0VSVCghaW52 YWxpZF8pOwotKyAgICBNT1pfQVNTRVJUKGFsaWFzSWR4IDwgbnVtQWxpYXNlZCgpKTsKLSsgICAg aWYgKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSB7Ci0rICAgICAgcmV0dXJuICp0 aGlzOwotKyAgICB9Ci0rICAgIEtpbmQgb3RoZXJLaW5kID0gKGtpbmRfID09IEZsb2F0UmVnaXN0 ZXJzOjpTaW5nbGUpCi0rICAgICAgICAgICAgICAgICAgICAgICAgID8gRmxvYXRSZWdpc3RlcnM6 OkRvdWJsZQotKyAgICAgICAgICAgICAgICAgICAgICAgICA6IEZsb2F0UmVnaXN0ZXJzOjpTaW5n bGU7Ci0rICAgIEtpbmQgc2VsZWN0ZWRLaW5kID0gKGFsaWFzSWR4ID09IDApID8gS2luZChraW5k XykgOiBvdGhlcktpbmQ7Ci0rICAgIHJldHVybiBGbG9hdFJlZ2lzdGVyKEVuY29kaW5nKGVuY29k aW5nXyksIHNlbGVjdGVkS2luZCk7Ci0rICB9Ci0rICBGbG9hdFJlZ2lzdGVyIGFsaWduZWRBbGlh c2VkKHVpbnQzMl90IGFsaWFzSWR4KSB7Ci0rICAgIE1PWl9BU1NFUlQoYWxpYXNJZHggPCBudW1B bGlhc2VkKCkpOwotKyAgICByZXR1cm4gYWxpYXNlZChhbGlhc0lkeCk7Ci0rICB9Ci0rICBTZXRU eXBlIGFsaWduZWRPckRvbWluYXRlZEFsaWFzZWRTZXQoKSBjb25zdCB7Ci0rICAgIGlmIChraW5k XyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgewotKyAgICAgIHJldHVybiBTZXRUeXBlKDEp IDw8ICgodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpICoKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpICsKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW5jb2RpbmdfKTsKLSsgICAgfQotKyAgICByZXR1cm4gKENvZGVz OjpTcHJlYWRTaW5nbGUgfCBDb2Rlczo6U3ByZWFkRG91YmxlKSA8PCBlbmNvZGluZ187Ci0rICB9 Ci0rCi0rICBzdGF0aWMgY29uc3RleHByIFJlZ1R5cGVOYW1lIERlZmF1bHRUeXBlID0gUmVnVHlw ZU5hbWU6OkZsb2F0NjQ7Ci0rCi0rICB0ZW1wbGF0ZSA8UmVnVHlwZU5hbWUgTmFtZSA9IERlZmF1 bHRUeXBlPgotKyAgc3RhdGljIFNldFR5cGUgTGl2ZUFzSW5kZXhhYmxlU2V0KFNldFR5cGUgcykg ewotKyAgICByZXR1cm4gU2V0VHlwZSgwKTsKLSsgIH0KLSsKLSsgIHRlbXBsYXRlIDxSZWdUeXBl TmFtZSBOYW1lID0gRGVmYXVsdFR5cGU+Ci0rICBzdGF0aWMgU2V0VHlwZSBBbGxvY2F0YWJsZUFz SW5kZXhhYmxlU2V0KFNldFR5cGUgcykgewotKyAgICBzdGF0aWNfYXNzZXJ0KE5hbWUgIT0gUmVn VHlwZU5hbWU6OkFueSwgIkFsbG9jYXRhYmxlIHNldCBhcmUgbm90IGl0ZXJhYmxlIik7Ci0rICAg IHJldHVybiBMaXZlQXNJbmRleGFibGVTZXQ8TmFtZT4ocyk7Ci0rICB9Ci0rCi0rICBzdGF0aWMg VHlwZWRSZWdpc3RlclNldDxGbG9hdFJlZ2lzdGVyPiBSZWR1Y2VTZXRGb3JQdXNoKAotKyAgICAg IGNvbnN0IFR5cGVkUmVnaXN0ZXJTZXQ8RmxvYXRSZWdpc3Rlcj4mIHMpOwotKyAgc3RhdGljIHVp bnQzMl90IEdldFB1c2hTaXplSW5CeXRlcyhjb25zdCBUeXBlZFJlZ2lzdGVyU2V0PEZsb2F0UmVn aXN0ZXI+JiBzKTsKLSsgIHVpbnQzMl90IGdldFJlZ2lzdGVyRHVtcE9mZnNldEluQnl0ZXMoKTsK LSt9OwotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIEZsb2F0UmVnaXN0ZXI6OlNldFR5cGUKLStG bG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVTZXQ8UmVnVHlwZU5hbWU6OkZsb2F0MzI+KFNl dFR5cGUgc2V0KSB7Ci0rICByZXR1cm4gc2V0ICYgRmxvYXRSZWdpc3RlcnM6OkFsbFNpbmdsZU1h c2s7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIEZsb2F0UmVnaXN0ZXI6OlNldFR5cGUK LStGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVTZXQ8UmVnVHlwZU5hbWU6OkZsb2F0NjQ+ KFNldFR5cGUgc2V0KSB7Ci0rICByZXR1cm4gc2V0ICYgRmxvYXRSZWdpc3RlcnM6OkFsbERvdWJs ZU1hc2s7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIEZsb2F0UmVnaXN0ZXI6OlNldFR5 cGUKLStGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVTZXQ8UmVnVHlwZU5hbWU6OlZlY3Rv cjEyOD4oU2V0VHlwZSBzZXQpIHsKLSsgIHJldHVybiBzZXQgJiBGbG9hdFJlZ2lzdGVyczo6QWxs U2ltZDEyOE1hc2s7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIEZsb2F0UmVnaXN0ZXI6 OlNldFR5cGUKLStGbG9hdFJlZ2lzdGVyOjpMaXZlQXNJbmRleGFibGVTZXQ8UmVnVHlwZU5hbWU6 OkFueT4oU2V0VHlwZSBzZXQpIHsKLSsgIHJldHVybiBzZXQ7Ci0rfQotKwotK2lubGluZSBib29s IGhhc1VuYWxpYXNlZERvdWJsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0raW5saW5lIGJvb2wgaGFz TXVsdGlBbGlhcygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0rCi0rLy8gUFBDNjQgZmVhdHVyZSBiaXRz IHBhY2tlZCBpbnRvIHRoZSB2YWx1ZSBHZXRQUEM2NEZsYWdzKCkgcmV0dXJucywKLSsvLyB3aGlj aCBmZWVkcyB3YXNtL1dhc21Db21waWxlLmNwcCdzIHBlci1hcmNoaXRlY3R1cmUgY29kZSBzaWdu YXR1cmUuCi0rLy8gRGVmaW5lZCBhcyBlbnVtIGNvbnN0YW50cyAobm90IGVudW0gY2xhc3MpIHNv IGNhbGxlcnMgY2FuIE9SL0FORAotKy8vIGZyZWVseS4gTmV3IGJpdHMgc2hvdWxkIHJlbWFpbiBi YWNrd2FyZC1jb21wYXRpYmxlIOKAlCBvbGRlciBzaWduYXR1cmVzCi0rLy8gbXVzdCBrZWVwIG1l YW5pbmcgdGhlIHNhbWUgc2V0IG9mIGZlYXR1cmVzLgotK2VudW0gUFBDNjRGZWF0dXJlRmxhZ3Mg OiB1aW50MzJfdCB7Ci0rICBQUEM2NEZsYWdfUE9XRVI5ID0gMXUgPDwgMCwKLSsgIC8vIEZ1dHVy ZTogUFBDNjRGbGFnX1BPV0VSMTAgPSAxdSA8PCAxLCBQUEM2NEZsYWdfVlNYNCA9IDF1IDw8IDIs IC4uLgotK307Ci0rCi0rdWludDMyX3QgR2V0UFBDNjRGbGFncygpOwotKwotK2NsYXNzIFBQQzY0 RmxhZ3MgZmluYWwgewotKyBwdWJsaWM6Ci0rICBQUEM2NEZsYWdzKCkgPSBkZWxldGU7Ci0rCi0r ICAvLyBQUEM2NEZsYWdzOjpJbml0IGlzIGNhbGxlZCBmcm9tIHRoZSBKaXRDb250ZXh0IGNvbnN0 cnVjdG9yIHRvIHJlYWQgdGhlCi0rICAvLyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKHZpYSBnZXRh dXh2YWwoQVRfSFdDQVAyKSkuIEl0IG11c3QgYmUgY2FsbGVkCi0rICAvLyBleGFjdGx5IG9uY2Us IGJlZm9yZSBIYXNQT1dFUjkoKS9IYXNQT1dFUjEwKCkgYXJlIHVzZWQuCi0rICBzdGF0aWMgdm9p ZCBJbml0KCk7Ci0rfTsKLSsKLStib29sIEhhc1BPV0VSOSgpOwotK2Jvb2wgSGFzUE9XRVIxMCgp OwotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5k aWYgLyogaml0X3BwYzY0X0FyY2hpdGVjdHVyZV9wcGM2NF9oICovCi1kaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9Bc3Nl bWJsZXItcHBjNjQuY3BwCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAw Li40ODEwNzBjNGM2ZDUKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQXNz ZW1ibGVyLXBwYzY0LmNwcAotQEAgLTAsMCArMSwzMDI4IEBACi0rLyogLSotIE1vZGU6IEMrKzsg dGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q LQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJj ZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGlj Ci0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3Ry aWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8v bW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2luY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJs ZXItcHBjNjQuaCIKLSsKLSsjaW5jbHVkZSAibW96aWxsYS9EZWJ1Z09ubHkuaCIKLSsjaW5jbHVk ZSAibW96aWxsYS9NYXliZS5oIgotKwotKyNpbmNsdWRlICJnYy9NYXJraW5nLmgiCi0rI2luY2x1 ZGUgImppdC9BdXRvV3JpdGFibGVKaXRDb2RlLmgiCi0rI2luY2x1ZGUgImppdC9FeGVjdXRhYmxl QWxsb2NhdG9yLmgiCi0rI2luY2x1ZGUgImppdC9GbHVzaElDYWNoZS5oIgotKwotK3VzaW5nIG1v emlsbGE6OkRlYnVnT25seTsKLSsKLSt1c2luZyBuYW1lc3BhY2UganM7Ci0rdXNpbmcgbmFtZXNw YWNlIGpzOjpqaXQ7Ci0rCi0rLy8gRUxGdjIgQUJJOiA4IEdQUnMgKHIzLXIxMCksIDEzIEZQUnMg KGYxLWYxMykuCi0rLy8gRlAgYXJndW1lbnRzIGFsc28gY29uc3VtZSBhIEdQUiBzbG90IHBlciBF TEZ2MiBjb252ZW50aW9uLgotK0FCSUFyZyBBQklBcmdHZW5lcmF0b3I6Om5leHQoTUlSVHlwZSB0 eXBlKSB7Ci0rICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBNSVJUeXBlOjpJbnQzMjoKLSsg ICAgY2FzZSBNSVJUeXBlOjpJbnQ2NDoKLSsgICAgY2FzZSBNSVJUeXBlOjpQb2ludGVyOgotKyAg ICBjYXNlIE1JUlR5cGU6Oldhc21BbnlSZWY6Ci0rICAgIGNhc2UgTUlSVHlwZTo6V2FzbUFycmF5 RGF0YToKLSsgICAgY2FzZSBNSVJUeXBlOjpTdGFja1Jlc3VsdHM6IHsKLSsgICAgICBpZiAoaW50 UmVnSW5kZXhfID49IE51bUludEFyZ1JlZ3MpIHsKLSsgICAgICAgIGN1cnJlbnRfID0gQUJJQXJn KHN0YWNrT2Zmc2V0Xyk7Ci0rICAgICAgICBzdGFja09mZnNldF8gKz0gc2l6ZW9mKHVpbnRwdHJf dCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY3VycmVudF8gPSBBQklBcmco UmVnaXN0ZXI6OkZyb21Db2RlKFJlZ2lzdGVyczo6cjMgKyBpbnRSZWdJbmRleF8pKTsKLSsgICAg ICBpbnRSZWdJbmRleF8rKzsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIE1JUlR5 cGU6OkZsb2F0MzI6Ci0rICAgIGNhc2UgTUlSVHlwZTo6RG91YmxlOiB7Ci0rICAgICAgaWYgKGZs b2F0UmVnSW5kZXhfID09IE51bUZsb2F0QXJnUmVncykgewotKyAgICAgICAgY3VycmVudF8gPSBB QklBcmcoc3RhY2tPZmZzZXRfKTsKLSsgICAgICAgIHN0YWNrT2Zmc2V0XyArPSBzaXplb2YoZG91 YmxlKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjdXJyZW50XyA9IEFCSUFy ZyhGbG9hdFJlZ2lzdGVyKAotKyAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6RW5jb2RpbmcoRmxv YXRSZWdpc3RlcnM6OmYxICsgZmxvYXRSZWdJbmRleF8pLAotKyAgICAgICAgICB0eXBlID09IE1J UlR5cGU6OkRvdWJsZSA/IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlKSk7Ci0rICAgICAgZmxv YXRSZWdJbmRleF8rKzsKLSsgICAgICAvLyBFTEZ2MiBBQkk6IGVhY2ggRlAgYXJnIGFsc28gY29u c3VtZXMgYSBHUFIgc2xvdCAoc2hhZG93KS4KLSsgICAgICAvLyBDYXAgYXQgTnVtSW50QXJnUmVn cyBzbyBzdWJzZXF1ZW50IGludCBhcmdzIGdvIHRvIHRoZSBzdGFjay4KLSsgICAgICBpZiAoaW50 UmVnSW5kZXhfIDwgTnVtSW50QXJnUmVncykgewotKyAgICAgICAgaW50UmVnSW5kZXhfKys7Ci0r ICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgTUlSVHlwZTo6U2ltZDEy ODogewotKyAgICAgIC8vIFBhc3MgdjEyOCBpbiBGUCByZWdpc3RlcnMgKFNpbWQxMjgga2luZCku IE9uIFBQQzY0IEVMRnYyLCBTSU1ECi0rICAgICAgLy8gdmFsdWVzIHVzZSB0aGUgc2FtZSBWU1Ig cmVnaXN0ZXIgZmlsZSBhcyBGUCBhcmdzLgotKyAgICAgIGlmIChmbG9hdFJlZ0luZGV4XyA9PSBO dW1GbG9hdEFyZ1JlZ3MpIHsKLSsgICAgICAgIGN1cnJlbnRfID0gQUJJQXJnKHN0YWNrT2Zmc2V0 Xyk7Ci0rICAgICAgICBzdGFja09mZnNldF8gKz0gMTY7Ci0rICAgICAgICBicmVhazsKLSsgICAg ICB9Ci0rICAgICAgY3VycmVudF8gPSBBQklBcmcoRmxvYXRSZWdpc3RlcigKLSsgICAgICAgICAg RmxvYXRSZWdpc3RlcnM6OkVuY29kaW5nKEZsb2F0UmVnaXN0ZXJzOjpmMSArIGZsb2F0UmVnSW5k ZXhfKSwKLSsgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpKTsKLSsgICAgICBmbG9h dFJlZ0luZGV4XysrOwotKyAgICAgIGlmIChpbnRSZWdJbmRleF8gPCBOdW1JbnRBcmdSZWdzKSB7 Ci0rICAgICAgICBpbnRSZWdJbmRleF8rKzsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgYXJndW1lbnQg dHlwZSIpOwotKyAgfQotKyAgcmV0dXJuIGN1cnJlbnRfOwotK30KLSsKLSsvLyBDb25kaXRpb24g aW52ZXJzaW9uIHRhYmxlcy4KLStBc3NlbWJsZXI6OkNvbmRpdGlvbiBBc3NlbWJsZXI6OkludmVy dENvbmRpdGlvbihDb25kaXRpb24gY29uZCkgewotKyAgc3dpdGNoIChjb25kKSB7Ci0rICAgIGNh c2UgRXF1YWw6Ci0rICAgICAgcmV0dXJuIE5vdEVxdWFsOwotKyAgICBjYXNlIE5vdEVxdWFsOgot KyAgICAgIHJldHVybiBFcXVhbDsKLSsgICAgY2FzZSBMZXNzVGhhbjoKLSsgICAgICByZXR1cm4g R3JlYXRlclRoYW5PckVxdWFsOwotKyAgICBjYXNlIExlc3NUaGFuT3JFcXVhbDoKLSsgICAgICBy ZXR1cm4gR3JlYXRlclRoYW47Ci0rICAgIGNhc2UgR3JlYXRlclRoYW46Ci0rICAgICAgcmV0dXJu IExlc3NUaGFuT3JFcXVhbDsKLSsgICAgY2FzZSBHcmVhdGVyVGhhbk9yRXF1YWw6Ci0rICAgICAg cmV0dXJuIExlc3NUaGFuOwotKyAgICBjYXNlIEFib3ZlOgotKyAgICAgIHJldHVybiBCZWxvd09y RXF1YWw7Ci0rICAgIGNhc2UgQWJvdmVPckVxdWFsOgotKyAgICAgIHJldHVybiBCZWxvdzsKLSsg ICAgY2FzZSBCZWxvdzoKLSsgICAgICByZXR1cm4gQWJvdmVPckVxdWFsOwotKyAgICBjYXNlIEJl bG93T3JFcXVhbDoKLSsgICAgICByZXR1cm4gQWJvdmU7Ci0rICAgIGNhc2UgWmVybzoKLSsgICAg ICByZXR1cm4gTm9uWmVybzsKLSsgICAgY2FzZSBOb25aZXJvOgotKyAgICAgIHJldHVybiBaZXJv OwotKyAgICBjYXNlIFNpZ25lZDoKLSsgICAgICByZXR1cm4gTm90U2lnbmVkOwotKyAgICBjYXNl IE5vdFNpZ25lZDoKLSsgICAgICByZXR1cm4gU2lnbmVkOwotKyAgICBjYXNlIFNPQml0OgotKyAg ICAgIHJldHVybiBOU09CaXQ7Ci0rICAgIGNhc2UgTlNPQml0OgotKyAgICAgIHJldHVybiBTT0Jp dDsKLSsgICAgY2FzZSBPdmVyZmxvdzoKLSsgICAgICByZXR1cm4gTm90T3ZlcmZsb3c7Ci0rICAg IGNhc2UgTm90T3ZlcmZsb3c6Ci0rICAgICAgcmV0dXJuIE92ZXJmbG93OwotKyAgICBjYXNlIENh cnJ5U2V0OgotKyAgICAgIHJldHVybiBDYXJyeUNsZWFyOwotKyAgICBjYXNlIENhcnJ5Q2xlYXI6 Ci0rICAgICAgcmV0dXJuIENhcnJ5U2V0OwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFT SCgidW5leHBlY3RlZCBjb25kaXRpb24iKTsKLSsgIH0KLSt9Ci0rCi0rQXNzZW1ibGVyOjpEb3Vi bGVDb25kaXRpb24gQXNzZW1ibGVyOjpJbnZlcnRDb25kaXRpb24oRG91YmxlQ29uZGl0aW9uIGNv bmQpIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIERvdWJsZU9yZGVyZWQ6Ci0rICAg ICAgcmV0dXJuIERvdWJsZVVub3JkZXJlZDsKLSsgICAgY2FzZSBEb3VibGVFcXVhbDoKLSsgICAg ICByZXR1cm4gRG91YmxlTm90RXF1YWxPclVub3JkZXJlZDsKLSsgICAgY2FzZSBEb3VibGVOb3RF cXVhbDoKLSsgICAgICByZXR1cm4gRG91YmxlRXF1YWxPclVub3JkZXJlZDsKLSsgICAgY2FzZSBE b3VibGVHcmVhdGVyVGhhbjoKLSsgICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV bm9yZGVyZWQ7Ci0rICAgIGNhc2UgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOgotKyAgICAgIHJl dHVybiBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkOwotKyAgICBjYXNlIERvdWJsZUxlc3NUaGFu OgotKyAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZDsKLSsg ICAgY2FzZSBEb3VibGVMZXNzVGhhbk9yRXF1YWw6Ci0rICAgICAgcmV0dXJuIERvdWJsZUdyZWF0 ZXJUaGFuT3JVbm9yZGVyZWQ7Ci0rICAgIGNhc2UgRG91YmxlVW5vcmRlcmVkOgotKyAgICAgIHJl dHVybiBEb3VibGVPcmRlcmVkOwotKyAgICBjYXNlIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQ6Ci0r ICAgICAgcmV0dXJuIERvdWJsZU5vdEVxdWFsOwotKyAgICBjYXNlIERvdWJsZU5vdEVxdWFsT3JV bm9yZGVyZWQ6Ci0rICAgICAgcmV0dXJuIERvdWJsZUVxdWFsOwotKyAgICBjYXNlIERvdWJsZUdy ZWF0ZXJUaGFuT3JVbm9yZGVyZWQ6Ci0rICAgICAgcmV0dXJuIERvdWJsZUxlc3NUaGFuT3JFcXVh bDsKLSsgICAgY2FzZSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKLSsgICAg ICByZXR1cm4gRG91YmxlTGVzc1RoYW47Ci0rICAgIGNhc2UgRG91YmxlTGVzc1RoYW5PclVub3Jk ZXJlZDoKLSsgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOwotKyAgICBjYXNl IERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgotKyAgICAgIHJldHVybiBEb3VibGVH cmVhdGVyVGhhbjsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQg Y29uZGl0aW9uIik7Ci0rICB9Ci0rfQotKwotKy8vIEluc3RJbW0gaGVscGVyLgotK3VpbnQ4X3Qg SW5zdEltbTo6dHJhcHRhZygpIHsKLSsgIHVpbnQ4X3QgciA9ICgoZGF0YSAmIDB4MDAxZjAwMDAp ID4+IDE2KTsKLSsgIE1PWl9BU1NFUlQoaXNPcGNvZGUoUFBDX3R3KSk7Ci0rICBNT1pfQVNTRVJU KHIgPT0gKChkYXRhICYgMHgwMDAwZjgwMCkgPj4gMTEpKTsKLSsgIHJldHVybiByICYgMHhmZTsK LSt9Ci0rCi0rQk9mZkltbTE2OjpCT2ZmSW1tMTYoSW5zdEltbSBpbnN0KSA6IGRhdGEoaW5zdC5l eHRyYWN0SW1tMTZWYWx1ZSgpICYgMHhGRkZDKSB7Ci0rICAvLyBTaWduLWV4dGVuZCB0aGUgMTYt Yml0IGZpZWxkLgotKyAgaWYgKGRhdGEgJiAweDgwMDApIHsKLSsgICAgZGF0YSB8PSB+MHhGRkZG OwotKyAgfQotK30KLSsKLStJbnN0cnVjdGlvbiogQk9mZkltbTE2OjpnZXREZXN0KEluc3RydWN0 aW9uKiBzcmMpIGNvbnN0IHsKLSsgIHJldHVybiAoSW5zdHJ1Y3Rpb24qKSgodWludDhfdCopc3Jj ICsgZGF0YSk7Ci0rfQotKwotK0luc3RydWN0aW9uKiBKT2ZmSW1tMjY6OmdldERlc3QoSW5zdHJ1 Y3Rpb24qIHNyYykgY29uc3QgewotKyAgcmV0dXJuIChJbnN0cnVjdGlvbiopKCh1aW50OF90Kilz cmMgKyBkYXRhKTsKLSt9Ci0rCi0rSW1tMTY6OkltbTE2KCkgOiB2YWx1ZSgwKSB7fQotKwotK0lt bTg6OkltbTgoKSA6IHZhbHVlKDApIHt9Ci0rCi0rLy8gQnVmZmVyIG1hbmFnZW1lbnQuCi0rYm9v bCBBc3NlbWJsZXI6Om9vbSgpIGNvbnN0IHsKLSsgIHJldHVybiBBc3NlbWJsZXJTaGFyZWQ6Om9v bSgpIHx8IG1fYnVmZmVyLm9vbSgpIHx8IGp1bXBSZWxvY2F0aW9uc18ub29tKCkgfHwKLSsgICAg ICAgICBkYXRhUmVsb2NhdGlvbnNfLm9vbSgpOwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6Zmlu aXNoKCkgewotKyAgTU9aX0FTU0VSVCghaXNGaW5pc2hlZCk7Ci0rICBpc0ZpbmlzaGVkID0gdHJ1 ZTsKLSsgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOwotK30KLSsKLStib29sIEFzc2VtYmxlcjo6YXBw ZW5kUmF3Q29kZShjb25zdCB1aW50OF90KiBjb2RlLCBzaXplX3QgbnVtQnl0ZXMpIHsKLSsgIHJl dHVybiBtX2J1ZmZlci5hcHBlbmRSYXdDb2RlKGNvZGUsIG51bUJ5dGVzKTsKLSt9Ci0rCi0rYm9v bCBBc3NlbWJsZXI6OnJlc2VydmUoc2l6ZV90IHNpemUpIHsKLSsgIC8vIEZpeGVkLXNpemUgY2h1 bmsgYnVmZmVyOyBubyBwb2ludCBpbiByZXNlcnZpbmcgbm93IHZzLiBvbi1kZW1hbmQuCi0rICBy ZXR1cm4gIW9vbSgpOwotK30KLSsKLStib29sIEFzc2VtYmxlcjo6c3dhcEJ1ZmZlcih3YXNtOjpC eXRlcyYgYnl0ZXMpIHsKLSsgIE1PWl9BU1NFUlQoYnl0ZXMuZW1wdHkoKSk7Ci0rICBpZiAoIWJ5 dGVzLnJlc2l6ZShieXRlc05lZWRlZCgpKSkgewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0r ICBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShieXRlcy5iZWdpbigpKTsKLSsgIHJldHVybiB0cnVl OwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6Y29weUp1bXBSZWxvY2F0aW9uVGFibGUodWludDhf dCogZGVzdCkgewotKyAgaWYgKGp1bXBSZWxvY2F0aW9uc18ubGVuZ3RoKCkpIHsKLSsgICAgbWVt Y3B5KGRlc3QsIGp1bXBSZWxvY2F0aW9uc18uYnVmZmVyKCksIGp1bXBSZWxvY2F0aW9uc18ubGVu Z3RoKCkpOwotKyAgfQotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6Y29weURhdGFSZWxvY2F0aW9u VGFibGUodWludDhfdCogZGVzdCkgewotKyAgaWYgKGRhdGFSZWxvY2F0aW9uc18ubGVuZ3RoKCkp IHsKLSsgICAgbWVtY3B5KGRlc3QsIGRhdGFSZWxvY2F0aW9uc18uYnVmZmVyKCksIGRhdGFSZWxv Y2F0aW9uc18ubGVuZ3RoKCkpOwotKyAgfQotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6ZXhlY3V0 YWJsZUNvcHkodm9pZCogYnVmZmVyKSB7Ci0rICBNT1pfQVNTRVJUKGlzRmluaXNoZWQpOwotKyAg bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcikpOwot K30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkodWludDhfdCogYnVmZmVyKSB7 Ci0rICBNT1pfQVNTRVJUKGlzRmluaXNoZWQpOwotKyAgbV9idWZmZXIuZXhlY3V0YWJsZUNvcHko YnVmZmVyKTsKLSt9Ci0rCi0rc2l6ZV90IEFzc2VtYmxlcjo6c2l6ZSgpIGNvbnN0IHsKLSsgIC8v IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzOjpzaXplKCkgYXNzZXJ0cyBwb29sIGlz IGVtcHR5LgotKyAgLy8gRmx1c2ggcGVuZGluZyBwb29sIGVudHJpZXMgZmlyc3QuCi0rICBjb25z dF9jYXN0PFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29weSY+KG1fYnVmZmVyKS5mbHVzaFBvb2wo KTsKLSsgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7Ci0rfQotKwotK3NpemVfdCBBc3NlbWJsZXI6 Omp1bXBSZWxvY2F0aW9uVGFibGVCeXRlcygpIGNvbnN0IHsKLSsgIHJldHVybiBqdW1wUmVsb2Nh dGlvbnNfLmxlbmd0aCgpOwotK30KLSsKLStzaXplX3QgQXNzZW1ibGVyOjpkYXRhUmVsb2NhdGlv blRhYmxlQnl0ZXMoKSBjb25zdCB7Ci0rICByZXR1cm4gZGF0YVJlbG9jYXRpb25zXy5sZW5ndGgo KTsKLSt9Ci0rCi0rc2l6ZV90IEFzc2VtYmxlcjo6Ynl0ZXNOZWVkZWQoKSBjb25zdCB7Ci0rICBy ZXR1cm4gc2l6ZSgpICsganVtcFJlbG9jYXRpb25UYWJsZUJ5dGVzKCkgKyBkYXRhUmVsb2NhdGlv blRhYmxlQnl0ZXMoKTsKLSt9Ci0rCi0rLy8gV3JpdGUgYW4gaW5zdHJ1Y3Rpb24gaW50byB0aGUg YnVmZmVyIG9yIHRvIGFuIGV4dGVybmFsIGRlc3RpbmF0aW9uLgotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OndyaXRlSW5zdCh1aW50MzJfdCB4LCB1aW50MzJfdCogZGVzdCkgewotKyAgTU9aX0FT U0VSVChoYXNDcmVhdG9yKCkpOwotKyAgaWYgKGRlc3QgPT0gbnVsbHB0cikgewotKyAgICByZXR1 cm4gbV9idWZmZXIucHV0SW50KHgpOwotKyAgfQotKwotKyAgV3JpdGVJbnN0U3RhdGljKHgsIGRl c3QpOwotKyAgcmV0dXJuIEJ1ZmZlck9mZnNldCgpOwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6 V3JpdGVJbnN0U3RhdGljKHVpbnQzMl90IHgsIHVpbnQzMl90KiBkZXN0KSB7Ci0rICBNT1pfQVNT RVJUKGRlc3QgIT0gbnVsbHB0cik7Ci0rICAqZGVzdCA9IHg7Ci0rfQotKwotKy8vIEFsaWdubWVu dC4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjpoYWx0aW5nQWxpZ24oaW50IGFsaWdubWVudCkg ewotKyAgQnVmZmVyT2Zmc2V0IHJldDsKLSsgIE1PWl9BU1NFUlQobV9idWZmZXIuaXNBbGlnbmVk KDQpKTsKLSsgIGlmIChhbGlnbm1lbnQgPT0gOCkgewotKyAgICBpZiAoIW1fYnVmZmVyLmlzQWxp Z25lZChhbGlnbm1lbnQpKSB7Ci0rICAgICAgQnVmZmVyT2Zmc2V0IHRtcCA9IHhzX3RyYXAoKTsK LSsgICAgICBpZiAoIXJldC5hc3NpZ25lZCgpKSB7Ci0rICAgICAgICByZXQgPSB0bXA7Ci0rICAg ICAgfQotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQVNTRVJUKChhbGlnbm1lbnQgJiAo YWxpZ25tZW50IC0gMSkpID09IDApOwotKyAgICB3aGlsZSAoc2l6ZSgpICYgKGFsaWdubWVudCAt IDEpKSB7Ci0rICAgICAgQnVmZmVyT2Zmc2V0IHRtcCA9IHhzX3RyYXAoKTsKLSsgICAgICBpZiAo IXJldC5hc3NpZ25lZCgpKSB7Ci0rICAgICAgICByZXQgPSB0bXA7Ci0rICAgICAgfQotKyAgICB9 Ci0rICB9Ci0rICByZXR1cm4gcmV0OwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjpu b3BBbGlnbihpbnQgYWxpZ25tZW50KSB7Ci0rICBCdWZmZXJPZmZzZXQgcmV0OwotKyAgTU9aX0FT U0VSVChtX2J1ZmZlci5pc0FsaWduZWQoNCkpOwotKyAgaWYgKGFsaWdubWVudCA9PSA4KSB7Ci0r ICAgIGlmICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpIHsKLSsgICAgICBCdWZmZXJP ZmZzZXQgdG1wID0gYXNfbm9wKCk7Ci0rICAgICAgaWYgKCFyZXQuYXNzaWduZWQoKSkgewotKyAg ICAgICAgcmV0ID0gdG1wOwotKyAgICAgIH0KLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9a X0FTU0VSVCgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSA9PSAwKTsKLSsgICAgd2hpbGUg KHNpemUoKSAmIChhbGlnbm1lbnQgLSAxKSkgewotKyAgICAgIEJ1ZmZlck9mZnNldCB0bXAgPSBh c19ub3AoKTsKLSsgICAgICBpZiAoIXJldC5hc3NpZ25lZCgpKSB7Ci0rICAgICAgICByZXQgPSB0 bXA7Ci0rICAgICAgfQotKyAgICB9Ci0rICB9Ci0rICByZXR1cm4gcmV0OwotK30KLSsKLSsvLyBQ cmltaXRpdmUgaW5zdHJ1Y3Rpb25zLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX25vcCgp IHsKLSsgIHNwZXcoIm5vcCIpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbm9wKTsKLSt9Ci0r Ci0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHdzeW5jKCkgewotKyAgc3BldygibHdzeW5j Iik7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19sd3N5bmMpOwotK30KLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19zeW5jKCkgewotKyAgc3Bldygic3luYyIpOwotKyAgcmV0dXJuIHdy aXRlSW5zdChQUENfc3luYyk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2lz eW5jKCkgewotKyAgc3BldygiaXN5bmMiKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2lzeW5j KTsKLSt9Ci0rCi0rLy8gQnJhbmNoIGFuZCBqdW1wIGluc3RydWN0aW9ucy4KLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19iKEpPZmZJbW0yNiBvZmYsIEJyYW5jaEFkZHJlc3NUeXBlIGJhdCwg TGlua0JpdCBsYikgewotKyAgcmV0dXJuIGFzX2Iob2ZmLmVuY29kZSgpLCBiYXQsIGxiKTsKLSt9 Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYihpbnQzMl90IG9mZiwgQnJhbmNoQWRk cmVzc1R5cGUgYmF0LCBMaW5rQml0IGxiKSB7Ci0rICBzcGV3KCJiJXMlc1x0JXgiLCBiYXQgPT0g QWJzb2x1dGVCcmFuY2ggPyAiYSIgOiAiIiwgbGIgPyAibCIgOiAiIiwgb2ZmKTsKLSsgIE1PWl9B U1NFUlQoIShvZmYgJiAweDAzKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19iIHwgKCh1aW50 MzJfdClvZmYgJiAweDNmZmZmZmMpIHwgYmF0IHwgbGIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19ibHIoTGlua0JpdCBsYikgewotKyAgc3BldygiYmxyJXMiLCBsYiA/ICJs IiA6ICIiKTsKLSsgIHJldHVybiB3cml0ZUluc3QodWludDMyX3QoUFBDX2JscikgfCB1aW50MzJf dChsYikpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iY3RyKExpbmtCaXQg bGIpIHsKLSsgIHNwZXcoImJjdHIlcyIsIGxiID8gImwiIDogIiIpOwotKyAgcmV0dXJuIHdyaXRl SW5zdCh1aW50MzJfdChQUENfYmN0cikgfCB1aW50MzJfdChsYikpOwotK30KLSsKLSsvLyBDb25k aXRpb25hbCBicmFuY2hlcy4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhCT2ZmSW1t MTYgb2ZmLCBDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiwgTGlua0JpdCBsYikgewotKyAgcmV0dXJuIGFz X2JjKG9mZi5lbmNvZGUoKSwgY29uZCwgY3IsIGxrYiwgbGIpOwotK30KLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19iYyhpbnQxNl90IG9mZiwgQ29uZGl0aW9uIGNvbmQsIENSZWdpc3Rl cklEIGNyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IsIExp bmtCaXQgbGIpIHsKLSsgIHJldHVybiBhc19iYyhvZmYsIGNvbXB1dGVDb25kaXRpb25Db2RlKGNv bmQsIGNyKSwgbGtiLCBsYik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2Jj KEJPZmZJbW0xNiBvZmYsIERvdWJsZUNvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENSZWdpc3RlcklEIGNyLCBMaWtlbHlCaXQgbGtiLCBMaW5rQml0IGxiKSB7 Ci0rICByZXR1cm4gYXNfYmMob2ZmLmVuY29kZSgpLCBjb25kLCBjciwgbGtiLCBsYik7Ci0rfQot KwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2JjKGludDE2X3Qgb2ZmLCBEb3VibGVDb25k aXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlrZWx5Qml0IGxrYiwgTGlua0JpdCBsYikgewotKyAgcmV0dXJuIGFzX2JjKG9mZiwgY29t cHV0ZUNvbmRpdGlvbkNvZGUoY29uZCwgY3IpLCBsa2IsIGxiKTsKLSt9Ci0rCi0rQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfYmNjdHIoQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLCBM aWtlbHlCaXQgbGtiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtCaXQg bGIpIHsKLSsgIHJldHVybiBhc19iY2N0cihjb21wdXRlQ29uZGl0aW9uQ29kZShjb25kLCBjciks IGxrYiwgbGIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iY2N0cihEb3Vi bGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiwgTGlua0JpdCBsYikgewotKyAgcmV0dXJuIGFzX2Jj Y3RyKGNvbXB1dGVDb25kaXRpb25Db2RlKGNvbmQsIGNyKSwgbGtiLCBsYik7Ci0rfQotKwotKy8v IENvbmRpdGlvbiBjb2RlIGNvbXB1dGF0aW9uOiB0dXJuIERvdWJsZUNvbmRpdGlvbiArIENSIGlu dG8gQk98QkkuCi0rLy8gTWF5IGVtaXQgQ1IgbG9naWMgaW5zdHJ1Y3Rpb25zIGZvciBzeW50aGV0 aWMgY29uZGl0aW9ucyBpbnZvbHZpbmcgRlUgYml0LgotK3VpbnQxNl90IEFzc2VtYmxlcjo6Y29t cHV0ZUNvbmRpdGlvbkNvZGUoRG91YmxlQ29uZGl0aW9uIG9wLCBDUmVnaXN0ZXJJRCBjcikgewot KyAgY29uc3QgdWludDhfdCBjb25kQml0ID0gY3JCaXQoY3IsIG9wKTsKLSsgIGNvbnN0IHVpbnQ4 X3QgZnVCaXQgPSBjckJpdChjciwgRG91YmxlVW5vcmRlcmVkKTsKLSsgIHVpbnQzMl90IG5ld29w ID0gKHVpbnQzMl90KW9wICYgMjU1OwotKwotKyAgaWYgKG9wICYgRG91YmxlQ29uZGl0aW9uVW5v cmRlcmVkKSB7Ci0rICAgIGlmICgodWludDMyX3Qob3ApICYgQnJhbmNoT3B0aW9uTWFzaykgPT0g QnJhbmNoT25DbGVhcikgewotKyAgICAgIGFzX2Nyb3JjKGNvbmRCaXQsIGZ1Qml0LCBjb25kQml0 KTsKLSsgICAgICBuZXdvcCB8PSBCcmFuY2hPblNldDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBp ZiAoY29uZEJpdCAhPSBmdUJpdCkgewotKyAgICAgICAgYXNfY3Jvcihjb25kQml0LCBmdUJpdCwg Y29uZEJpdCk7Ci0rICAgICAgfQotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBpZiAoKHVpbnQz Ml90KG9wKSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJyYW5jaE9uQ2xlYXIpIHsKLSsgICAgICBp ZiAoY29uZEJpdCAhPSBmdUJpdCkgewotKyAgICAgICAgYXNfY3Jvcihjb25kQml0LCBmdUJpdCwg Y29uZEJpdCk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIGlmIChjb25kQml0ICE9 IGZ1Qml0KSB7Ci0rICAgICAgICBhc19jcmFuZGMoY29uZEJpdCwgY29uZEJpdCwgZnVCaXQpOwot KyAgICAgIH0KLSsgICAgfQotKyAgfQotKwotKyAgcmV0dXJuIChuZXdvcCArICgodWludDhfdClj ciA8PCA2KSk7Ci0rfQotKwotKy8vIENvbmRpdGlvbiBjb2RlIGNvbXB1dGF0aW9uOiB0dXJuIENv bmRpdGlvbiArIENSIGludG8gQk98QkkuCi0rLy8gTWF5IGVtaXQgbWNyeHJ4IGZvciBYRVItbWVk aWF0ZWQgY29uZGl0aW9ucy4KLSt1aW50MTZfdCBBc3NlbWJsZXI6OmNvbXB1dGVDb25kaXRpb25D b2RlKENvbmRpdGlvbiBvcCwgQ1JlZ2lzdGVySUQgY3IpIHsKLSsgIHVpbnQzMl90IG5ld29wID0g KHVpbnQzMl90KW9wICYgMjU1OwotKwotKyAgaWYgKG9wICYgQ29uZGl0aW9uT25seVhFUikgewot KyAgICBNT1pfQVNTRVJUKG9wID09IE92ZXJmbG93IHx8IG9wID09IE5vdE92ZXJmbG93KTsKLSsg ICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgYXNfbWNyeHJ4KGNyKTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICAvLyBQT1dFUjg6IHJlYWQgWEVSLCBwbGFjZSBPViBpbnRvIHRoZSBHVCBwb3Np dGlvbiBvZiB0aGUgdGFyZ2V0Ci0rICAgICAgLy8gQ1IgZmllbGQuIE92ZXJmbG93IGNvbmRpdGlv biAoMHgxYyA9IEdyZWF0ZXJUaGFuKSB0ZXN0cyBHVCBiaXQsCi0rICAgICAgLy8gd2hpY2ggbWNy eHJ4IHBvcHVsYXRlcyB3aXRoIE9WMzIuIEZvciA2NC1iaXQgb3BzIE9WID09IE9WMzIuCi0rICAg ICAgLy8gWEVSIGxheW91dCBpbiBHUFIgbG93IDMyIGJpdHMgKElCTSk6IGJpdCAwPVNPLCAxPU9W LCAyPUNBLgotKyAgICAgIC8vIFRhcmdldDogR1QgcG9zaXRpb24gPSBJQk0gYml0IDQqY3IrMS4K LSsgICAgICB4c19tZnhlcihyMCk7Ci0rICAgICAgaW50IGd0Qml0ID0gNCAqIChpbnQpY3IgKyAx OyAgICAgICAgICAvLyBHVCBwb3NpdGlvbiBpbiBDUiBmaWVsZAotKyAgICAgIGludCBzaCA9ICgx IC0gZ3RCaXQpICYgMzE7ICAgICAgICAgICAgLy8gcm90YXRlIE9WIGZyb20gYml0IDEgdG8gZ3RC aXQKLSsgICAgICBhc19ybHdpbm0ocjAsIHIwLCBzaCwgZ3RCaXQsIGd0Qml0KTsgIC8vIGlzb2xh dGUgT1YgYXQgR1Qgb25seQotKyAgICAgIGFzX210Y3JmKDEgPDwgKDcgLSAoaW50KWNyKSwgcjAp OwotKyAgICB9Ci0rICAgIG5ld29wID0gKHVpbnQzMl90KW9wICYgMjU1OwotKyAgfQotKwotKyAg cmV0dXJuIChuZXdvcCArICgodWludDhfdCljciA8PCA2KSk7Ci0rfQotKwotKy8vIEdpdmVuIEJP fEJJIGluIGEgMTYtYml0IHF1YW50aXR5LCBzcGxpdCBpbnRvIGJpdCBmaWVsZHMgZm9yIGluc3Ry dWN0aW9uLgotK3N0YXRpYyB1aW50MzJfdCBtYWtlT3BNYXNrKHVpbnQxNl90IG9wKSB7Ci0rICBN T1pfQVNTRVJUKCEob3AgJiAweGZjMDApKTsKLSsgIHJldHVybiAoKG9wICYgMHgwZikgPDwgMjEp IHwgKChvcCAmIDB4ZmZmMCkgPDwgMTIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19iYyhpbnQxNl90IG9mZiwgdWludDE2X3Qgb3AsIExpa2VseUJpdCBsa2IsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlua0JpdCBsYikgewotKyAgc3BldygiYmMlcyVzXHRC T19CST0weCUwNHgsJWQiLCBsYiA/ICJsIiA6ICIiLCBsa2IgPyAiKyIgOiAiIiwgb3AsIG9mZik7 Ci0rICBNT1pfQVNTRVJUKCEob2ZmICYgMHgwMykpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0 cnVjdGlvbihQUENfYmMgfCBtYWtlT3BNYXNrKG9wKSB8IGxrYiA8PCAyMSB8Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3Qpb2ZmICYgMHhmZmZjKSB8IGxiKQotKyAg ICAgICAgICAgICAgICAgICAgICAgLmVuY29kZSgpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfYmNjdHIodWludDE2X3Qgb3AsIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIp IHsKLSsgIHNwZXcoImJjY3RyJXMlcyIsIGxiID8gImwiIDogIiIsIGxrYiA/ICIrIiA6ICIiKTsK LSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2JjY3RyIHwgbWFrZU9wTWFzayhvcCkgfCBsa2IgPDwg MjEgfCBsYik7Ci0rfQotKwotKy8vIFNQUiBvcGVyYXRpb25zLgotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX210c3ByKFNQUmVnaXN0ZXJJRCBzcHIsIFJlZ2lzdGVyIHJhKSB7Ci0rICBzcGV3 KCJtdHNwclx0JWQsJTNzIiwgc3ByLCByYS5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQ UENfbXRzcHIgfCByYS5jb2RlKCkgPDwgMjEgfCBQUENfU1BSKHNwcikpOwotK30KLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tZnNwcihSZWdpc3RlciByZCwgU1BSZWdpc3RlcklEIHNw cikgewotKyAgc3BldygibWZzcHJcdCUzcywlZCIsIHJkLm5hbWUoKSwgc3ByKTsKLSsgIHJldHVy biB3cml0ZUluc3QoUFBDX21mc3ByIHwgcmQuY29kZSgpIDw8IDIxIHwgUFBDX1NQUihzcHIpKTsK LSt9Ci0rCi0rLy8gQ1Igb3BlcmF0aW9ucy4KLSsjZGVmaW5lIERFRl9DUkNSKG9wKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3QgdCwgdWludDhfdCBhLCB1aW50OF90IGIpIHsg XAotKyAgICBzcGV3KCNvcCAiXHQlZCwlZCwlZCIsIHQsIGEsIGIpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHQgPDwg MjEgfCBhIDw8IDE2IHwgYiA8PCAxMSk7ICAgICAgICBcCi0rICB9Ci0rREVGX0NSQ1IoY3JhbmRj KQotK0RFRl9DUkNSKGNyb3IpCi0rREVGX0NSQ1IoY3JvcmMpCi0rI3VuZGVmIERFRl9DUkNSCi0r Ci0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXRjcmYodWludDMyX3QgbWFzaywgUmVnaXN0 ZXIgcnMpIHsKLSsgIHNwZXcoIm10Y3JmXHQlZCwlM3MiLCBtYXNrLCBycy5uYW1lKCkpOwotKyAg cmV0dXJuIHdyaXRlSW5zdChQUENfbXRjcmYgfCBycy5jb2RlKCkgPDwgMjEgfCBtYXNrIDw8IDEy KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbWZvY3JmKFJlZ2lzdGVyIHJk LCBDUmVnaXN0ZXJJRCBjcmZzKSB7Ci0rICBzcGV3KCJtZm9jcmZcdCUzcyxjciVkIiwgcmQubmFt ZSgpLCBjcmZzKTsKLSsgIC8vIEZYTSBpcyBhIG9uZS1ob3QgOC1iaXQgbWFzayBhdCBiaXRzIDEy LTE5LiBCaXQgKDctY3Jmcykgc2VsZWN0cyB0aGUgQ1IuCi0rICByZXR1cm4gd3JpdGVJbnN0KFBQ Q19tZm9jcmYgfCByZC5jb2RlKCkgPDwgMjEgfCAoMSA8PCAoNyAtIGNyZnMpKSA8PCAxMik7Ci0r fQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX21jcnhyeChDUmVnaXN0ZXJJRCBjcikg ewotKyAgc3BldygibWNyeHJ4XHRjciVkIiwgY3IpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENf bWNyeHJ4IHwgY3IgPDwgMjMpOwotK30KLSsKLSsvLyBHUFIgbmVnLgotK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX25lZyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpIHsKLSsgIHNwZXcoIm5l Z1x0JTNzLCUzcyIsIHJkLm5hbWUoKSwgcnMubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3Qo SW5zdFJlZyhQUENfbmVnLCByZCwgcnMsIHIwKS5lbmNvZGUoKSk7Ci0rfQotKwotKy8vIENvbXBh cmUgaW5zdHJ1Y3Rpb25zLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGQoQ1JlZ2lz dGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3BldygiY21wZFx0Y3Il ZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoUFBDX2NtcGQgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAx MSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGRpKENSZWdpc3RlcklE IGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgewotKyAgc3BldygiY21wZGlcdGNyJWQsJTNz LCVkIiwgY3IsIHJhLm5hbWUoKSwgaW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wZGkg fCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAgICAgICgodWlu dDE2X3QpaW0gJiAweGZmZmYpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf Y21wbGQoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3Bl dygiY21wbGRcdGNyJWQsJTNzLCUzcyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICBy ZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsZCB8IGNyIDw8IDIzIHwgcmEuY29kZSgpIDw8IDE2IHwg cmIuY29kZSgpIDw8IDExKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21w bGRpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgewotKyAgc3Bldygi Y21wbGRpXHRjciVkLCUzcywlZCIsIGNyLCByYS5uYW1lKCksIGltKTsKLSsgIHJldHVybiB3cml0 ZUluc3QoUFBDX2NtcGxkaSB8IGNyIDw8IDIzIHwgcmEuY29kZSgpIDw8IDE2IHwKLSsgICAgICAg ICAgICAgICAgICAgKCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOwotK30KLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19jbXB3KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpIHsKLSsgIHNwZXcoImNtcHdcdGNyJWQsJTNzLCUzcyIsIGNyLCByYS5uYW1lKCksIHJi Lm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXB3IHwgY3IgPDwgMjMgfCByYS5j b2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc19jbXB3aShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0p IHsKLSsgIHNwZXcoImNtcHdpXHRjciVkLCUzcywlZCIsIGNyLCByYS5uYW1lKCksIGltKTsKLSsg IHJldHVybiB3cml0ZUluc3QoUFBDX2NtcHdpIHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYg fAotKyAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7Ci0rfQotKwot K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3KENSZWdpc3RlcklEIGNyLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImNtcGx3XHRjciVkLCUzcywlM3MiLCBjciwg cmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbHcgfCBj ciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7Ci0rfQotKwotK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3aShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIg cmEsIGludDE2X3QgaW0pIHsKLSsgIHNwZXcoImNtcGx3aVx0Y3IlZCwlM3MsJWQiLCBjciwgcmEu bmFtZSgpLCBpbSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsd2kgfCBjciA8PCAyMyB8 IHJhLmNvZGUoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpaW0gJiAw eGZmZmYpKTsKLSt9Ci0rCi0rLy8gQ29tcGFyZSBpbnN0cnVjdGlvbnMgKGNyMCBpbXBsaWNpdCku Ci0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wZChSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpIHsKLSsgIHNwZXcoImNtcGRcdCUzcywlM3MiLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0r ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBkIHwgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgp IDw8IDExKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wZGkoUmVnaXN0 ZXIgcmEsIGludDE2X3QgaW0pIHsKLSsgIHNwZXcoImNtcGRpXHQlM3MsJWQiLCByYS5uYW1lKCks IGltKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGRpIHwgcmEuY29kZSgpIDw8IDE2IHwg KCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19jbXBsZChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImNtcGxkXHQl M3MsJTNzIiwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENf Y21wbGQgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOwotK30KLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsZGkoUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsK LSsgIHNwZXcoImNtcGxkaVx0JTNzLCVkIiwgcmEubmFtZSgpLCBpbSk7Ci0rICByZXR1cm4gd3Jp dGVJbnN0KFBQQ19jbXBsZGkgfCByYS5jb2RlKCkgPDwgMTYgfCAoKHVpbnQxNl90KWltICYgMHhm ZmZmKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcHcoUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJjbXB3XHQlM3MsJTNzIiwgcmEubmFtZSgpLCBy Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wdyB8IHJhLmNvZGUoKSA8PCAx NiB8IHJiLmNvZGUoKSA8PCAxMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X2NtcHdpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Ci0rICBzcGV3KCJjbXB3aVx0JTNzLCVk IiwgcmEubmFtZSgpLCBpbSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXB3aSB8IHJhLmNv ZGUoKSA8PCAxNiB8ICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfY21wbHcoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBz cGV3KCJjbXBsd1x0JTNzLCUzcyIsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3 cml0ZUluc3QoUFBDX2NtcGx3IHwgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExKTsK LSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbHdpKFJlZ2lzdGVyIHJhLCBp bnQxNl90IGltKSB7Ci0rICBzcGV3KCJjbXBsd2lcdCUzcywlZCIsIHJhLm5hbWUoKSwgaW0pOwot KyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbHdpIHwgcmEuY29kZSgpIDw8IDE2IHwgKCh1aW50 MTZfdClpbSAmIDB4ZmZmZikpOwotK30KLSsKLSsvLyBGUCBlbmNvZGluZyBoZWxwZXJzLgotK3N0 YXRpYyB1aW50MzJfdCBBRm9ybSh1aW50MzJfdCBvcCwgRmxvYXRSZWdpc3RlciBmcnQsIEZsb2F0 UmVnaXN0ZXIgZnJhLAotKyAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGZyYiwg RmxvYXRSZWdpc3RlciBmcmMsIGJvb2wgcmMpIHsKLSsgIHJldHVybiAob3AgfCAoZnJ0LmVuY29k aW5nKCkgPDwgMjEpIHwgKGZyYS5lbmNvZGluZygpIDw8IDE2KSB8Ci0rICAgICAgICAgIChmcmIu ZW5jb2RpbmcoKSA8PCAxMSkgfCAoZnJjLmVuY29kaW5nKCkgPDwgNikgfCByYyk7Ci0rfQotKwot K3N0YXRpYyB1aW50MzJfdCBYRm9ybSh1aW50MzJfdCBvcCwgRmxvYXRSZWdpc3RlciBmcnQsIEZs b2F0UmVnaXN0ZXIgZnJhLAotKyAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGZy YiwgYm9vbCByYykgewotKyAgcmV0dXJuIChvcCB8IChmcnQuZW5jb2RpbmcoKSA8PCAyMSkgfCAo ZnJhLmVuY29kaW5nKCkgPDwgMTYpIHwKLSsgICAgICAgICAgKGZyYi5lbmNvZGluZygpIDw8IDEx KSB8IHJjKTsKLSt9Ci0rCi0rc3RhdGljIHVpbnQzMl90IFhGb3JtKHVpbnQzMl90IG9wLCBGbG9h dFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiLAotKyAgICAgICAgICAgICAg ICAgICAgICBib29sIHJjKSB7Ci0rICByZXR1cm4gKG9wIHwgKGZydC5lbmNvZGluZygpIDw8IDIx KSB8IChyYS5jb2RlKCkgPDwgMTYpIHwgKHJiLmNvZGUoKSA8PCAxMSkgfAotKyAgICAgICAgICBy Yyk7Ci0rfQotKwotK3N0YXRpYyB1aW50MzJfdCBERm9ybSh1aW50MzJfdCBvcCwgRmxvYXRSZWdp c3RlciBmcnQsIFJlZ2lzdGVyIHJhLAotKyAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IGlt bSkgewotKyAgcmV0dXJuIChvcCB8IChmcnQuZW5jb2RpbmcoKSA8PCAyMSkgfCAocmEuY29kZSgp IDw8IDE2KSB8Ci0rICAgICAgICAgICgodWludDE2X3QpaW1tICYgMHhmZmZmKSk7Ci0rfQotKwot Ky8vIFhYLWZvcm0gZW5jb2RlcnMuIEVhY2ggZm9ybSBoYXMgaXRzIG93biBYLWJpdCBwb3NpdGlv bnMuCi0rLy8gQWxsIHRha2UgdWludDMyX3QgZW5jb2RpbmdzICgwLTYzKSBzbyB0aGV5IGNvcnJl Y3RseQotKy8vIGVtaXQgdGhlIGhpZ2ggYml0IGZvciBWU1IzMi02My4gRmxvYXRSZWdpc3Rlci5l bmNvZGluZygpIHJldHVybnMgMC0zMQotKy8vIGZvciBTaW5nbGUvRG91YmxlICg9IFZTUjAtMzEg PSBGUFIgbmFtZXNwYWNlKSBhbmQgMzItNjMgZm9yIFNpbWQxMjgKLSsvLyAoPSBWU1IzMi02MyA9 IFZSIG5hbWVzcGFjZSkg4oCUIHNvIGEgc2luZ2xlIFhYLWZvcm0gZW5jb2RlciBhZGRyZXNzZXMK LSsvLyB0aGUgZnVsbCBWU1Igc3BhY2UuCi0rCi0rLy8gWFgxLWZvcm06IFQgKyBHUFIgKFJBKSAr IEdQUiAoUkIpLiBUWCBiaXQgYXQgaW5zdHJ1Y3Rpb24gYml0IDAuCi0rLy8gVXNlZCBieSBseHZ4 LCBzdHh2eCwgbHh2ZDJ4LCBzdHh2ZDJ4LCBtdHZzcmRkLCBtdHZzcmQsIG10dnNyd3MsIG10dnNy d3ouCi0rc3RhdGljIHVpbnQzMl90IFhYMUZvcm0odWludDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1 aW50MzJfdCByYSwgdWludDMyX3QgcmIpIHsKLSsgIHJldHVybiBvcCB8ICh4dCAmIDMxKSA8PCAy MSB8IChyYSAmIDMxKSA8PCAxNiB8IChyYiAmIDMxKSA8PCAxMSB8Ci0rICAgICAgICAgKCh4dCA+ PiA1KSAmIDEpOwotK30KLSsKLSsvLyBYWDEtZm9ybSBmb3IgbWZ2c3JYOiBHUFIgKFJUKSArIFZT UiAoWFMpLiBUWCBiaXQgKCJTWCIpIGF0IGluc3RydWN0aW9uCi0rLy8gYml0IDA7IHRoZSBYIHNw ZWMgY2FsbHMgdGhpcyBTWCBzaW5jZSB0aGUgc291cmNlIHJlZ2lzdGVyIGlzIHRoZSBWU1IuCi0r Ly8gVXNlZCBieSBtZnZzcmQsIG1mdnNybGQuCi0rc3RhdGljIHVpbnQzMl90IFhYMUZvcm1NZnZz cih1aW50MzJfdCBvcCwgdWludDMyX3QgcnQsIHVpbnQzMl90IHhzKSB7Ci0rICByZXR1cm4gb3Ag fCAoeHMgJiAzMSkgPDwgMjEgfCAocnQgJiAzMSkgPDwgMTYgfCAoKHhzID4+IDUpICYgMSk7Ci0r fQotKwotKy8vIFhYMi1mb3JtOiBUICsgQiAobm8gQSBmaWVsZDsgYml0cyAxNi0yMCB1bnVzZWQg b3IgaG9sZCBhIFVJTSkuIEJYIGJpdAotKy8vIGF0IGluc3RydWN0aW9uIGJpdCAxLCBUWCBiaXQg YXQgaW5zdHJ1Y3Rpb24gYml0IDAuIFRoZSBiaXRzMTYtMjAgc2xvdAotKy8vIGlzIHNldCBieSBj YWxsZXJzIOKAlCBmb3IgcGxhaW4gWFgyIGl0IG11c3QgYmUgMCwgZm9yIFhYMiB3aXRoIFVJTSBp dAotKy8vIGhvbGRzIHRoZSBpbW1lZGlhdGUuCi0rLy8gVXNlZCBieSB4eGJyZCwgeHhicmgsIHh4 YnJ3LCB4eGJycSwgeHNjdmRwc3AsIHhzY3ZzcGRwLCB4c2N2ZHBzcG4sCi0rLy8geHNjdnNwZHBu LCB4eHNwbHR3IChVSU09MiBiaXRzKSwgeHhpbnNlcnR3IChVSU09NCBiaXRzKSwKLSsvLyB4eGV4 dHJhY3R1dyAoVUlNPTQgYml0cyksIHh2YWJzKi94dm5lZyoveHZzcXJ0Ki94dnIqIGV0Yy4gdmlh Ci0rLy8gREVGX1ZTWF9VTi4KLStzdGF0aWMgdWludDMyX3QgWFgyRm9ybSh1aW50MzJfdCBvcCwg dWludDMyX3QgeHQsIHVpbnQzMl90IHhiLAotKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGJpdHMxNnRvMjAgPSAwKSB7Ci0rICByZXR1cm4gb3AgfCAoeHQgJiAzMSkgPDwgMjEgfCAo Yml0czE2dG8yMCAmIDMxKSA8PCAxNiB8ICh4YiAmIDMxKSA8PCAxMSB8Ci0rICAgICAgICAgKCh4 YiA+PiA1KSAmIDEpIDw8IDEgfCAoKHh0ID4+IDUpICYgMSk7Ci0rfQotKwotKy8vIFhYMy1mb3Jt OiBUICsgQSArIEIuIEFYL0JYL1RYIGJpdHMgYXQgaW5zdHJ1Y3Rpb24gYml0cyAyLzEvMC4KLSsv LyBVc2VkIGJ5IHh4bG9yLCB4eGxhbmQsIHh4bHhvciwgeHhsbm9yLCB4eGxhbmRjLCB4eHBlcm1k aSwgeHNtYXhqZHAsCi0rLy8geHNtaW5qZHAsIHh2YWRkKiwgeHZjbXAqLCBldGMuCi0rc3RhdGlj IHVpbnQzMl90IFhYM0Zvcm0odWludDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1aW50MzJfdCB4YSwg dWludDMyX3QgeGIpIHsKLSsgIHJldHVybiBvcCB8ICh4dCAmIDMxKSA8PCAyMSB8ICh4YSAmIDMx KSA8PCAxNiB8ICh4YiAmIDMxKSA8PCAxMSB8Ci0rICAgICAgICAgKCh4YSA+PiA1KSAmIDEpIDw8 IDIgfCAoKHhiID4+IDUpICYgMSkgPDwgMSB8ICgoeHQgPj4gNSkgJiAxKTsKLSt9Ci0rCi0rLy8g WFg0LWZvcm06IFQgKyBBICsgQiArIEMuIENYL0FYL0JYL1RYIGJpdHMgYXQgaW5zdHJ1Y3Rpb24g Yml0cyAzLzIvMS8wLgotKy8vIFVzZWQgYnkgeHhzZWwuCi0rc3RhdGljIHVpbnQzMl90IFhYNEZv cm0odWludDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1aW50MzJfdCB4YSwgdWludDMyX3QgeGIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgeGMpIHsKLSsgIHJldHVybiBvcCB8ICh4 dCAmIDMxKSA8PCAyMSB8ICh4YSAmIDMxKSA8PCAxNiB8ICh4YiAmIDMxKSA8PCAxMSB8Ci0rICAg ICAgICAgKHhjICYgMzEpIDw8IDYgfCAoKHhjID4+IDUpICYgMSkgPDwgMyB8ICgoeGEgPj4gNSkg JiAxKSA8PCAyIHwKLSsgICAgICAgICAoKHhiID4+IDUpICYgMSkgPDwgMSB8ICgoeHQgPj4gNSkg JiAxKTsKLSt9Ci0rCi0rLy8gRmxvYXRSZWdpc3RlciBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3Ig WFgzRm9ybSAodGhlIG1vc3QgY29tbW9uIGZvcm0pLgotK3N0YXRpYyB1aW50MzJfdCBYWDNGb3Jt KHVpbnQzMl90IG9wLCBGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAotKyAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsgIHJldHVybiBYWDNGb3Jt KG9wLCB1aW50MzJfdCh4dC5lbmNvZGluZygpKSwgdWludDMyX3QoeGEuZW5jb2RpbmcoKSksCi0r ICAgICAgICAgICAgICAgICB1aW50MzJfdCh4Yi5lbmNvZGluZygpKSk7Ci0rfQotKwotKy8vIC0t LSBNYWNyby1kZWZpbmVkIGluc3RydWN0aW9uIGVtaXR0ZXJzIC0tLQotKwotKy8vIFgtZm9ybTog cmQgaW4gYml0cyAyMS0yNSwgcmEgaW4gMTYtMjAsIHJiIGluIDExLTE1LgotKyNkZWZpbmUgREVG X1hGT1JNKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeyBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3Ms JTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7ICAgICAgICAgICAgXAotKyAg ICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMjb3AsIHJkLCByYSwgcmIpLmVuY29kZSgp KTsgICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9YRk9STV9SQyhvcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsICAgIFwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByYikgeyAg ICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIi5cdCUzcywlM3MsJTNzIiwgcmQubmFtZSgp LCByYS5uYW1lKCksIHJiLm5hbWUoKSk7ICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0 UmVnKFBQQ18jI29wLCByZCwgcmEsIHJiKS5lbmNvZGUoKSB8IDB4MSk7IFwKLSsgIH0KLSsKLSsv LyBYLWZvcm0gd2l0aCBzd2FwcGVkIFJTL1JBIGVuY29kaW5nOiBycyBpbiBiaXRzIDIxLTI1LCBy YSBpbiAxNi0yMC4KLSsjZGVmaW5lIERFRl9YRk9STVMob3ApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsgXAot KyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYi5u YW1lKCkpOyAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18j I29wLCByYSwgcmQsIHJiKS5lbmNvZGUoKSk7ICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rI2Rl ZmluZSBERUZfWEZPUk1TX1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJhLCAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgcmIpIHsgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICIu XHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAgICBcCi0r ICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfIyNvcCwgcmEsIHJkLCByYikuZW5jb2Rl KCkgfCAweDEpOyBcCi0rICB9Ci0rCi0rLy8gWC1mb3JtIHNoaWZ0IGltbWVkaWF0ZSB3aXRoIHN3 YXBwZWQgZW5jb2RpbmcuCi0rI2RlZmluZSBERUZfWEZPUk1TX0kob3ApICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50OF90IHNo KSB7ICAgICAgXAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5u YW1lKCksIHNoKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQoc2gg PCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJhLmNvZGUoKSA8PCAyMSB8 IHJkLmNvZGUoKSA8PCAxNiB8IHNoIDw8IDExKTsgXAotKyAgfQotKwotKy8vIDItcmVnIFgtZm9y bTogcmQgaW4gYml0cyAyMS0yNSwgcmEgaW4gMTYtMjAsIHJiPXIwLgotKyNkZWZpbmUgREVGX1hG T1JNMihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpIHsg XAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCkpOyAgICAg ICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMjb3AsIHJkLCBy YSwgcjApLmVuY29kZSgpKTsgXAotKyAgfQotKwotKyNkZWZpbmUgREVGX1hGT1JNMl9SQyhvcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSkgeyAg XAotKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpKTsgICAg ICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMjb3As IHJkLCByYSwgcjApLmVuY29kZSgpIHwgMHgxKTsgXAotKyAgfQotKwotKy8vIDItcmVnIFgtZm9y bSBzd2FwcGVkOiByYSBpbiBiaXRzIDIxLTI1LCByZCBpbiAxNi0yMC4KLSsjZGVmaW5lIERFRl9Y Rk9STTJTKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7 IFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpKTsgICAg ICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByYSwg cmQsIHIwKS5lbmNvZGUoKSk7IFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9YRk9STTJTX1JDKG9w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpIHsg IFwKLSsgICAgc3Bldygjb3AgIi5cdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29w LCByYSwgcmQsIHIwKS5lbmNvZGUoKSB8IDB4MSk7IFwKLSsgIH0KLSsKLSsvLyBELWZvcm0gbG9h ZC9zdG9yZTogcmQ9UlQsIHJiPVJBIChiYXNlIHJlZ2lzdGVyKSwgb2ZmPWRpc3BsYWNlbWVudC4K LSsvLyByMCBjYW5ub3QgYmUgdXNlZCBhcyBiYXNlIHJlZ2lzdGVyIGZvciBELWZvcm0gbG9hZHMv c3RvcmVzLgotKyNkZWZpbmUgREVGX0RGT1JNKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZikgeyBcCi0rICAg IHNwZXcoI29wICJcdCUzcywlZCglM3MpIiwgcmQubmFtZSgpLCBvZmYsIHJiLm5hbWUoKSk7ICAg ICAgICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKHJiICE9IHIwKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRl SW5zdChJbnN0SW1tKFBQQ18jI29wLCByZCwgcmIsIG9mZikuZW5jb2RlKCkpOyAgICAgICAgICAg ICBcCi0rICB9Ci0rCi0rLy8gRC1mb3JtIHdpdGggc3dhcHBlZCBSUy9SQSBlbmNvZGluZyBmb3Ig bG9naWNhbCBpbW1lZGlhdGVzLgotKyNkZWZpbmUgREVGX0RGT1JNUyhvcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBp bSkgeyBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJhLm5hbWUo KSwgaW0pOyAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RJ bW0oUFBDXyMjb3AsIHJhLCByZCwgaW0pLmVuY29kZSgpKTsgICAgICAgICAgICAgIFwKLSsgIH0K LSsKLSsvLyBNLWZvcm06IHJvdGF0ZSB3aXRoIDMgcmVnaXN0ZXJzICsgbWIgKyBtZS4KLSsjZGVm aW5lIERFRl9NRk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJl Z2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIsICAgICAgXAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1iLCB1aW50OF90IG1lKSB7ICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MsJWQsJWQiLCByZC5uYW1l KCksIHJzLm5hbWUoKSwgcmIubmFtZSgpLCBtYiwgbWUpOyBcCi0rICAgIE1PWl9BU1NFUlQobWIg PCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICBNT1pfQVNTRVJUKG1lIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENf IyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUoKSA8PCAxNiB8ICAgICAgICAgICBcCi0r ICAgICAgICAgICAgICAgICAgICAgcmIuY29kZSgpIDw8IDExIHwgbWIgPDwgNiB8IG1lIDw8IDEp OyAgICAgICAgICAgICAgICAgICAgXAotKyAgfQotKwotKy8vIE0tZm9ybSB3aXRoIGltbWVkaWF0 ZSBzaGlmdC4KLSsjZGVmaW5lIERFRl9NRk9STV9JKG9wKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIHVpbnQ4X3Qgc2gsICAgICAg ICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIsIHVpbnQ4 X3QgbWUpIHsgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywl ZCwlZCwlZCIsIHJkLm5hbWUoKSwgcnMubmFtZSgpLCBzaCwgbWIsIG1lKTsgICAgICAgICAgXAot KyAgICBNT1pfQVNTRVJUKHNoIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQobWIgPCAzMik7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg TU9aX0FTU0VSVChtZSA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgcnMu Y29kZSgpIDw8IDIxIHwgcmQuY29kZSgpIDw8IDE2IHwgc2ggPDwgMTEgfCBcCi0rICAgICAgICAg ICAgICAgICAgICAgbWIgPDwgNiB8IG1lIDw8IDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9NRk9STV9JX1JDKG9wKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy cywgdWludDhfdCBzaCwgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCBtYiwgdWludDhfdCBtZSkgeyAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygj b3AgIi5cdCUzcywlM3MsJWQsJWQsJWQiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgc2gsIG1iLCBt ZSk7ICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKHNoIDwgMzIpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQo bWIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVChtZSA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0 KFBQQ18jI29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmQuY29kZSgpIDw8IDE2IHwgc2ggPDwgMTEg fCBcCi0rICAgICAgICAgICAgICAgICAgICAgbWIgPDwgNiB8IG1lIDw8IDEgfCAxKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsvLyBNRFMtZm9ybTogcm90 YXRlIHdpdGggcmVnaXN0ZXIgKyBtYiAoNjQtYml0KS4KLSsjZGVmaW5lIERFRl9NRFNGT1JNKG9w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJz LCBSZWdpc3RlciByYiwgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCBtYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0 JTNzLCUzcywlM3MsJWQiLCByYS5uYW1lKCksIHJzLm5hbWUoKSwgcmIubmFtZSgpLCBtYik7ICAg IFwKLSsgICAgTU9aX0FTU0VSVChtYiA8IDY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8 IHJzLmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8ICAgICAgIFwKLSsgICAgICAgICAg ICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEgfCAoKG1iICYgMHgxZikgPDwgNikgfCAobWIgJiAw eDIwKSk7IFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9NRFNGT1JNX1JDKG9wKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCBSZWdp c3RlciByYiwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgbWIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIi5cdCUz cywlM3MsJTNzLCVkIiwgcmEubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSwgbWIpOyAgICAg ICBcCi0rICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18j I29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgpIDw8IDE2IHwgICAgICAgICAgIFwKLSsg ICAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEgfCAoKG1iICYgMHgxZikgPDwgNikg fCAobWIgJiAweDIwKSB8IDEpOyBcCi0rICB9Ci0rCi0rLy8gTUQtZm9ybTogcm90YXRlL3NoaWZ0 IHdpdGggaW1tZWRpYXRlIHNoICsgbWIgKDY0LWJpdCkuCi0rLy8gc2ggYW5kIG1iIGFyZSA2LWJp dCBmaWVsZHMgc3BsaXQgYWNyb3NzIHRoZSBpbnN0cnVjdGlvbiB3b3JkLgotKyNkZWZpbmUgREVG X01ERk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCAgICAgICBcCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVkLCVkIiwgcmEubmFtZSgpLCBycy5uYW1l KCksIHNoLCBtYik7ICAgICAgICAgICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVChzaCA8IDY0KTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwg cnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgpIDw8IDE2IHwgICAgICAgICAgIFwKLSsgICAgICAg ICAgICAgICAgICAgICAoKHNoICYgMHgxZikgPDwgMTEpIHwgKChtYiAmIDB4MWYpIDw8IDYpIHwg KG1iICYgMHgyMCkgfCBcCi0rICAgICAgICAgICAgICAgICAgICAgKChzaCAmIDB4MjApID4+IDQp KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfQotKwotKyNkZWZp bmUgREVGX01ERk9STV9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19y YyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMsIHVpbnQ4X3Qgc2gsICBcCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtYikgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlZCwlZCIsIHJhLm5hbWUoKSwg cnMubmFtZSgpLCBzaCwgbWIpOyAgICAgICAgICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVChzaCA8 IDY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18j I29wIHwgcnMuY29kZSgpIDw8IDIxIHwgcmEuY29kZSgpIDw8IDE2IHwgICAgICAgICAgIFwKLSsg ICAgICAgICAgICAgICAgICAgICAoKHNoICYgMHgxZikgPDwgMTEpIHwgKChtYiAmIDB4MWYpIDw8 IDYpIHwgKG1iICYgMHgyMCkgfCBcCi0rICAgICAgICAgICAgICAgICAgICAgKChzaCAmIDB4MjAp ID4+IDQpIHwgMHgwMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfQotKwot Ky8vIEZQIDItcmVnIFgtZm9ybTogZnJ0IGluIGJpdHMgMjEtMjUsIGZyYT1mMCwgZnJiIGluIDEx LTE1LgotKyNkZWZpbmUgREVGX1hGT1JNMl9GKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMj b3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSkgeyBcCi0rICAgIHNwZXcoI29w ICJcdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFhGb3JtKFBQQ18jI29wLCByZCwgZjAsIHJhLCBm YWxzZSkpOyAgICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9YRk9STTJfRl9S QyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhGbG9hdFJlZ2lzdGVyIHJk LCBGbG9hdFJlZ2lzdGVyIHJhKSB7IFwKLSsgICAgc3Bldygjb3AgIi5cdCUzcywlM3MiLCByZC5u YW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0 dXJuIHdyaXRlSW5zdChYRm9ybShQUENfIyNvcCwgcmQsIGYwLCByYSwgdHJ1ZSkpOyAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsvLyBGUCBBLWZvcm0gd2l0aCBmcmMgKGZtdWwtdHlw ZSk6IGZydCwgZnJhLCBmcmM7IGZyYj1mMC4KLSsjZGVmaW5lIERFRl9BRk9STV9DKG9wKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJh LCBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmMp IHsgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCByZC5u YW1lKCksIHJhLm5hbWUoKSwgcmMubmFtZSgpKTsgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJ bnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIGYwLCByYywgZmFsc2UpKTsgICAgICAgICBcCi0r ICB9Ci0rCi0rI2RlZmluZSBERUZfQUZPUk1fQ19SQyhvcCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfIyNvcCMjX3JjKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIFwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJjKSB7ICAg ICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUo KSwgcmEubmFtZSgpLCByYy5uYW1lKCkpOyAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJ bnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIGYwLCByYywgdHJ1ZSkpOyAgICAgICAgICAgICAg IFwKLSsgIH0KLSsKLSsvLyBGUCBBLWZvcm0gd2l0aCBmcmIgKGZhZGQtdHlwZSk6IGZydCwgZnJh LCBmcmI7IGZyYz1mMC4KLSsjZGVmaW5lIERFRl9BRk9STV9CKG9wKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBcCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmIpIHsgICAgICAgICAg ICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5h bWUoKSwgcmIubmFtZSgpKTsgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQ Q18jI29wLCByZCwgcmEsIHJiLCBmMCwgZmFsc2UpKTsgICAgICAgICBcCi0rICB9Ci0rCi0rI2Rl ZmluZSBERUZfQUZPUk1fQl9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3Jj KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIFwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJiKSB7ICAgICAgICAgICAgICAg ICBcCi0rICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgp LCByYi5uYW1lKCkpOyAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQ Q18jI29wLCByZCwgcmEsIHJiLCBmMCwgdHJ1ZSkpOyAgICAgICAgICAgICAgIFwKLSsgIH0KLSsK LSsvLyBGdWxsIEZQIEEtZm9ybTogZnJ0LCBmcmEsIGZyYywgZnJiIChmbWFkZC10eXBlKS4KLSsj ZGVmaW5lIERFRl9BRk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNv cChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCAgICAgICAgICBcCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmMsIEZsb2F0UmVnaXN0 ZXIgcmIpIHsgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MsJTNzIiwgcmQu bmFtZSgpLCByYS5uYW1lKCksIHJjLm5hbWUoKSwgcmIubmFtZSgpKTsgXAotKyAgICByZXR1cm4g d3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIHJiLCByYywgZmFsc2UpKTsgICAgICAg ICAgICAgICAgICBcCi0rICB9Ci0rCi0rI2RlZmluZSBERUZfQUZPUk1fUkMob3ApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdp c3RlciByYSwgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciByYywgRmxvYXRSZWdpc3RlciByYikgeyBcCi0rICAgIHNwZXcoI29wICIuXHQl M3MsJTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmMubmFtZSgpLCAgICAgICAg ICBcCi0rICAgICAgICAgcmIubmFtZSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoQUZvcm0o UFBDXyMjb3AsIHJkLCByYSwgcmIsIHJjLCB0cnVlKSk7ICAgICAgICAgICAgICAgICBcCi0rICB9 Ci0rCi0rLy8gRlAgRC1mb3JtIGxvYWQvc3RvcmUuCi0rI2RlZmluZSBERUZfREZPUk1fRihvcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBcCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3Qgb2ZmKSB7ICAgICAgICAg ICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlZCglM3MpIiwgcmQubmFtZSgpLCBvZmYs IHJiLm5hbWUoKSk7ICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQocmIgIT0gcjApOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3Qo REZvcm0oUFBDXyMjb3AsIHJkLCByYiwgb2ZmKSk7ICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0r Ly8gRlAgWC1mb3JtIGluZGV4ZWQgbG9hZC9zdG9yZS4KLSsjZGVmaW5lIERFRl9GTUVNeChvcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmIpIHsgICAgICAg ICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJh Lm5hbWUoKSwgcmIubmFtZSgpKTsgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChYRm9ybShQUENf IyNvcCwgcmQsIHJhLCByYiwgZmFsc2UpKTsgICAgICAgIFwKLSsgIH0KLSsKLSsvLyAtLS0gUm90 YXRlL3NoaWZ0IGluc3RydWN0aW9ucyAtLS0KLSsKLStERUZfTUZPUk0ocmx3bm0pCi0rREVGX01G T1JNX0kocmx3aW5tKQotK0RFRl9NRk9STV9JX1JDKHJsd2lubSkKLStERUZfTUZPUk1fSShybHdp bWkpCi0rREVGX1hGT1JNU19JKHNyYXdpKQotKwotK0RFRl9NRFNGT1JNKHJsZGNsKQotK0RFRl9N REZPUk0ocmxkaWNsKQotK0RFRl9NREZPUk1fUkMocmxkaWNsKQotK0RFRl9NREZPUk0ocmxkaWNy KQotK0RFRl9NREZPUk1fUkMocmxkaWNyKQotK0RFRl9NREZPUk0ocmxkaW1pKQotKwotK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX3NyYWRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50 IHNoKSB7Ci0rICBzcGV3KCJzcmFkaVx0JTNzLCUzcywlZCIsIHJkLm5hbWUoKSwgcnMubmFtZSgp LCBzaCk7Ci0rICBNT1pfQVNTRVJUKHNoID49IDAgJiYgc2ggPCA2NCk7Ci0rICByZXR1cm4gd3Jp dGVJbnN0KFBQQ19zcmFkaSB8IHJkLmNvZGUoKSA8PCAxNiB8IHJzLmNvZGUoKSA8PCAyMSB8Ci0r ICAgICAgICAgICAgICAgICAgIChzaCAmIDB4MWYpIDw8IDExIHwgKHNoICYgMHgyMCkgPj4gNCk7 Ci0rfQotKwotKy8vIC0tLSBBTFUgdGhyZWUtcmVnaXN0ZXIgLS0tCi0rCi0rI2RlZmluZSBERUZf QUxVMihvcCkgREVGX1hGT1JNKG9wKQotKwotK0RFRl9BTFUyKGFkZCkKLStERUZfQUxVMihhZGRj KQotK0RFRl9BTFUyKGFkZGUpCi0rREVGX0FMVTIoc3ViZikKLStERUZfQUxVMihzdWJmYykKLStE RUZfQUxVMihzdWJmZSkKLStERUZfQUxVMihkaXZkKQotK0RFRl9BTFUyKGRpdmR1KQotK0RFRl9B TFUyKGRpdncpCi0rREVGX0FMVTIoZGl2d3UpCi0rLy8gUE9XRVI5IG1vZHVsbyAoWE8tZm9ybSwg c2FtZSBlbmNvZGluZyBwYXR0ZXJuIGFzIGRpdikuCi0rREVGX1hGT1JNKG1vZHNkKQotK0RFRl9Y Rk9STShtb2RzdykKLStERUZfWEZPUk0obW9kdWQpCi0rREVGX1hGT1JNKG1vZHV3KQotK0RFRl9B TFUyKG11bGxkKQotK0RFRl9BTFUyKG11bGhkKQotK0RFRl9BTFUyKG11bGhkdSkKLStERUZfQUxV MihtdWxsZG8pCi0rREVGX0FMVTIobXVsbHcpCi0rREVGX0FMVTIobXVsaHd1KQotKyN1bmRlZiBE RUZfQUxVMgotKwotKy8vIC0tLSBBTFUgaW1tZWRpYXRlIC0tLQotKwotKy8vIEQtZm9ybSBBTFUt aW1tZWRpYXRlIG9wcyBoYXZlIG5vIFJjIGJpdCBhdCBpbnN0cnVjdGlvbiBMU0IgKHRoYXQgYml0 Ci0rLy8gaXMgcGFydCBvZiB0aGUgMTYtYml0IGltbWVkaWF0ZSkuIFRoZSBvbmx5IHZhbGlkIHJl Y29yZC1mb3JtIHZhcmlhbnQKLSsvLyBpbiB0aGlzIGdyb3VwIGlzIGBhZGRpYy5gLCB3aGljaCBp cyBhIHNlcGFyYXRlIHByaW1hcnkgb3Bjb2RlICgxMykKLSsvLyBoYW5kLXdyaXR0ZW4gYmVsb3c7 IHN1YmZpYyBhbmQgbXVsbGkgaGF2ZSBubyByZWNvcmQgZm9ybSBhdCBhbGwuCi0rI2RlZmluZSBE RUZfQUxVSShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgeyBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3Ms JWQiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgaW0pOyAgICAgICAgICAgICAgICAgICBcCi0rICAg IHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfIyNvcCwgcmQsIHJhLCBpbSkuZW5jb2RlKCkp OyAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYWRk aShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGFjdHVhbGx5X2xpKSB7Ci0rI2lmZGVmIERFQlVHCi0rICBp ZiAoYWN0dWFsbHlfbGkpIHsKLSsgICAgc3BldygibGlcdCUzcywlZCIsIHJkLm5hbWUoKSwgaW0p OwotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0FTU0VSVChyYSAhPSByMCk7Ci0rICAgIHNwZXcoImFk ZGlcdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgaW0pOwotKyAgfQotKyNlbmRp ZgotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ19hZGRpLCByZCwgcmEsIGltKS5lbmNv ZGUoKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2FkZGlzKFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGFjdHVhbGx5X2xpcykgewotKyNpZmRlZiBERUJVRwotKyAgaWYgKGFjdHVh bGx5X2xpcykgewotKyAgICBzcGV3KCJsaXNcdCUzcywlZCIsIHJkLm5hbWUoKSwgaW0pOwotKyAg fSBlbHNlIHsKLSsgICAgTU9aX0FTU0VSVChyYSAhPSByMCk7Ci0rICAgIHNwZXcoImFkZGlzXHQl M3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIGltKTsKLSsgIH0KLSsjZW5kaWYKLSsg IHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfYWRkaXMsIHJkLCByYSwgaW0pLmVuY29kZSgp KTsKLSt9Ci0rCi0rREVGX0FMVUkobXVsbGkpCi0rREVGX0FMVUkoc3ViZmljKQotKyN1bmRlZiBE RUZfQUxVSQotKwotKy8vIC0tLSBBTFUgdW5hcnkvZXh0ZW5kZWQgLS0tCi0rCi0rCi0rI2RlZmlu ZSBERUZfQUxVRV9TKG9wKSBERUZfWEZPUk0yUyhvcCkKLStERUZfQUxVRV9TKGNudGx6dykKLStE RUZfQUxVRV9TKGNudGx6ZCkKLStERUZfQUxVRV9TKGNudHR6ZCkKLStERUZfQUxVRV9TKGNudHR6 dykKLSsjdW5kZWYgREVGX0FMVUVfUwotKwotK0RFRl9YRk9STTJTKHBvcGNudGQpCi0rREVGX1hG T1JNMlMocG9wY250dykKLStERUZfWEZPUk0yUyhicmQpICAvLyBQT1dFUjEwCi0rREVGX1hGT1JN MlMoYnJoKSAgLy8gUE9XRVIxMAotK0RFRl9YRk9STTJTKGJydykgIC8vIFBPV0VSMTAKLSsKLSsv LyAtLS0gQml0d2lzZSBsb2dpY2FsICh0aHJlZS1yZWdpc3RlcikgLS0tCi0rCi0rI2RlZmluZSBE RUZfQklUQUxVMihvcCkgREVGX1hGT1JNUyhvcCkKLStERUZfQklUQUxVMihub3IpCi0rREVGX0JJ VEFMVTIoc2x3KQotK0RFRl9CSVRBTFUyKHNydykKLStERUZfQklUQUxVMihzcmF3KQotK0RFRl9C SVRBTFUyKHNsZCkKLStERUZfQklUQUxVMihzcmQpCi0rREVGX0JJVEFMVTIoc3JhZCkKLSsjdW5k ZWYgREVGX0JJVEFMVTIKLSsKLSsvLyBhbmRfLCBvcl8sIHhvcl8gYXJlIG1hbnVhbGx5IGRlZmlu ZWQgKHRyYWlsaW5nIHVuZGVyc2NvcmUgdG8gYXZvaWQgQysrCi0rLy8ga2V5d29yZCBjb25mbGlj dHMpLiB4c19tciBkZWxlZ2F0ZXMgdG8gYXNfb3JfIHNvIHdlIG11c3Qgbm90IGFzc2VydAotKy8v IHJkPT1ycz09cmIgaW4gYXNfb3JfICh3aGljaCB3b3VsZCBiZSBhIHZhbGlkIG1yKS4KLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19vcl8oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdp c3RlciByYikgewotKyAgc3Bldygib3JcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCBycy5uYW1l KCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDX29yXywgcnMs IHJkLCByYikuZW5jb2RlKCkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194 b3JfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoInhv clx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJl dHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfeG9yXywgcnMsIHJkLCByYikuZW5jb2RlKCkpOwot K30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19hbmRfKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycywgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImFuZFx0JTNzLCUzcywlM3MiLCByZC5u YW1lKCksIHJzLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoSW5zdFJl ZyhQUENfYW5kXywgcnMsIHJkLCByYikuZW5jb2RlKCkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19hbmRfX3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIg cmIpIHsKLSsgIHNwZXcoImFuZC5cdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCBycy5uYW1lKCks IHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDX2FuZF8sIHJzLCBy ZCwgcmIpLmVuY29kZSgpIHwgMHgxKTsKLSt9Ci0rCi0rLy8gLS0tIEJpdHdpc2UgbG9naWNhbCAo aW1tZWRpYXRlKSAtLS0KLSsKLStERUZfREZPUk1TKG9yaSkKLStERUZfREZPUk1TKG9yaXMpCi0r REVGX0RGT1JNUyh4b3JpKQotK0RFRl9ERk9STVMoeG9yaXMpCi0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfYW5kaV9yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIHVpbnQxNl90IGlt KSB7Ci0rICBzcGV3KCJhbmRpLlx0JTNzLCUzcywlZCIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCBp bSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDX2FuZGlfZG90LCByYSwgcmQsIGlt KS5lbmNvZGUoKSk7Ci0rfQotKwotKy8vIC0tLSBTaWduIGV4dGVuc2lvbiAtLS0KLSsKLSsjZGVm aW5lIERFRl9BTFVFWFQob3ApIERFRl9YRk9STTJTKG9wKSBERUZfWEZPUk0yU19SQyhvcCkKLStE RUZfWEZPUk0yUyhleHRzYikKLStERUZfWEZPUk0yUyhleHRzaCkKLStERUZfQUxVRVhUKGV4dHN3 KQotKyN1bmRlZiBERUZfQUxVRVhUCi0rCi0rLy8gLS0tIEludGVnZXIgbG9hZHMgKEQtZm9ybSkg LS0tCi0rCi0rREVGX0RGT1JNKGxieikKLStERUZfREZPUk0obGhhKQotK0RFRl9ERk9STShsaHop Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHdhKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYiwgaW50MTZfdCBvZmYpIHsKLSsgIHNwZXcoImx3YVx0JTNzLCVkKCUzcykiLCByZC5uYW1l KCksIG9mZiwgcmIubmFtZSgpKTsKLSsgIE1PWl9BU1NFUlQocmIgIT0gcjApOwotKyAgTU9aX0FT U0VSVCghKG9mZiAmIDB4MDMpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfbHdh LCByZCwgcmIsIG9mZikuZW5jb2RlKCkpOwotK30KLSsKLStERUZfREZPUk0obHd6KQotKwotK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2xkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50 MTZfdCBvZmYpIHsKLSsgIHNwZXcoImxkXHQlM3MsJWQoJTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCBy Yi5uYW1lKCkpOwotKyAgTU9aX0FTU0VSVChyYiAhPSByMCk7Ci0rICBNT1pfQVNTRVJUKCEob2Zm ICYgMHgwMykpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ19sZCwgcmQsIHJiLCBv ZmYpLmVuY29kZSgpKTsKLSt9Ci0rCi0rLy8gLS0tIEludGVnZXIgc3RvcmVzIChELWZvcm0pIC0t LQotKwotK0RFRl9ERk9STShzdGIpCi0rREVGX0RGT1JNKHN0aCkKLStERUZfREZPUk0oc3R3KQot KwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3N0ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmIsIGludDE2X3Qgb2ZmKSB7Ci0rICBzcGV3KCJzdGRcdCUzcywlZCglM3MpIiwgcmQubmFtZSgp LCBvZmYsIHJiLm5hbWUoKSk7Ci0rICBNT1pfQVNTRVJUKHJiICE9IHIwKTsKLSsgIE1PWl9BU1NF UlQoIShvZmYgJiAweDAzKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDX3N0ZCwg cmQsIHJiLCBvZmYpLmVuY29kZSgpKTsKLSt9Ci0rCi0rREVGX0RGT1JNKHN0ZHUpCi0rCi0rI3Vu ZGVmIERFRl9ERk9STQotKyN1bmRlZiBERUZfREZPUk1TCi0rCi0rLy8gLS0tIEludGVnZXIgbG9h ZHMvc3RvcmVzIChYLWZvcm0sIGluZGV4ZWQpIC0tLQotKwotKyNkZWZpbmUgREVGX01FTXgob3Ap IERFRl9YRk9STShvcCkKLStERUZfTUVNeChsYnp4KSBERUZfTUVNeChsaGF4KSBERUZfTUVNeChs aHp4KSBERUZfTUVNeChsd2F4KQotKyAgICBERUZfTUVNeChsd3p4KSBERUZfTUVNeChsd2FyeCkg REVGX01FTXgobGJhcngpCi0rICAgICAgICBERUZfTUVNeChsaGFyeCkgREVGX01FTXgobGR4KSBE RUZfTUVNeChsZGFyeCkgREVGX01FTXgoc3RieCkKLSsgICAgICAgICAgICBERUZfTUVNeChzdGJj eCkgREVGX01FTXgoc3R3eCkgREVGX01FTXgoc3R3YnJ4KSBERUZfTUVNeChzdGh4KQotKyAgICAg ICAgICAgICAgICBERUZfTUVNeChzdGhjeCkgREVGX01FTXgoc3RkeCkgREVGX01FTXgoc3RkY3gp Ci0rICAgICAgICAgICAgICAgICAgICBERUZfTUVNeChzdHdjeCkKLSsjdW5kZWYgREVGX01FTXgK LSsKLSsvLyAtLS0gSW50ZWdlciBzZWxlY3QgLS0tCi0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfaXNlbChSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYmMsIENSZWdpc3RlcklEIGNyKSB7 Ci0rICBNT1pfQVNTRVJUKHJhICE9IHIwKTsKLSsgIHJldHVybiBhc19pc2VsMChydCwgcmEsIHJi LCBiYywgY3IpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19pc2VsMChSZWdp c3RlciBydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBjcikgewotKyAgc3BldygiaXNl bFx0JTNzLCUzcywlM3MsY3IlZDoweCUwMngiLCBydC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFt ZSgpLCBjciwKLSsgICAgICAgYmMpOwotKyAgTU9aX0FTU0VSVCgoYmMgPCAweDQwKSAmJiAoKGJj ICYgMHgwZikgPT0gMHgwYykpOwotKyAgdWludDE2X3QgbmJjID0gKGJjID4+IDQpICsgKGNyIDw8 IDIpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfaXNlbCB8IHJ0LmNvZGUoKSA8PCAyMSB8IHJh LmNvZGUoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAgICAgIHJiLmNvZGUoKSA8PCAxMSB8IG5i YyA8PCA2KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc2V0YmMoUmVnaXN0 ZXIgcnQsIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBjcikgewotKyAgc3Bldygic2V0YmNcdCUz cyxjciVkOjB4JTAyeCIsIHJ0Lm5hbWUoKSwgY3IsIGJjKTsKLSsgIE1PWl9BU1NFUlQoKGJjIDwg MHg0MCkgJiYgKChiYyAmIDB4MGYpID09IDB4MGMpKTsKLSsgIHVpbnQxNl90IG5iYyA9IChiYyA+ PiA0KSArIChjciA8PCAyKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3NldGJjIHwgKHJ0LmNv ZGUoKSA8PCAyMSkgfCAobmJjIDw8IDE2KSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX3NldGJjcihSZWdpc3RlciBydCwgdWludDE2X3QgYmMsIENSZWdpc3RlcklEIGNyKSB7 Ci0rICBzcGV3KCJzZXRiY3JcdCUzcyxjciVkOjB4JTAyeCIsIHJ0Lm5hbWUoKSwgY3IsIGJjKTsK LSsgIE1PWl9BU1NFUlQoKGJjIDwgMHg0MCkgJiYgKChiYyAmIDB4MGYpID09IDB4MGMpKTsKLSsg IHVpbnQxNl90IG5iYyA9IChiYyA+PiA0KSArIChjciA8PCAyKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoUFBDX3NldGJjciB8IChydC5jb2RlKCkgPDwgMjEpIHwgKG5iYyA8PCAxNikpOwotK30KLSsK LSsvLyAtLS0gRlAgY29tcGFyZSAtLS0KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19m Y21wdShDUmVnaXN0ZXJJRCBjciwgRmxvYXRSZWdpc3RlciByYSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJmY21wdVx0Y3Il ZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoUFBDX2ZjbXB1IHwgY3IgPDwgMjMgfCByYS5lbmNvZGluZygpIDw8IDE2IHwKLSsgICAgICAg ICAgICAgICAgICAgcmIuZW5jb2RpbmcoKSA8PCAxMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX2ZjbXB1KEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmIpIHsK LSsgIHJldHVybiBhc19mY21wdShjcjAsIHJhLCByYik7Ci0rfQotKwotKy8vIC0tLSBGUCBhcml0 aG1ldGljIC0tLQotKwotKyNkZWZpbmUgREVGX0ZQVUFDKG9wKSBERUZfQUZPUk1fQyhvcCkKLStE RUZfRlBVQUMoZm11bCkKLStERUZfRlBVQUMoZm11bHMpCi0rI3VuZGVmIERFRl9GUFVBQwotKwot KyNkZWZpbmUgREVGX0ZQVUFCKG9wKSBERUZfQUZPUk1fQihvcCkKLStERUZfRlBVQUIoZmFkZCkK LStERUZfRlBVQUIoZmRpdikKLStERUZfRlBVQUIoZnN1YikKLStERUZfRlBVQUIoZmFkZHMpCi0r REVGX0ZQVUFCKGZkaXZzKQotK0RFRl9GUFVBQihmc3VicykKLStERUZfRlBVQUIoZmNwc2duKQot KyN1bmRlZiBERUZfRlBVQUIKLSsKLSsvLyAtLS0gRlAgdW5hcnkvY29udmVyc2lvbi9yb3VuZGlu ZyAtLS0KLSsKLSsjZGVmaW5lIERFRl9GUFVEUyhvcCkgREVGX1hGT1JNMl9GKG9wKQotK0RFRl9G UFVEUyhmYWJzKQotK0RFRl9GUFVEUyhmbmVnKQotK0RFRl9GUFVEUyhmbXIpCi0rREVGX0ZQVURT KGZjZmlkKQotK0RFRl9GUFVEUyhmY2ZpZHMpCi0rREVGX0ZQVURTKGZjZmlkdSkKLStERUZfRlBV RFMoZmNmaWR1cykKLStERUZfRlBVRFMoZmN0aWQpCi0rREVGX0ZQVURTKGZjdGlkeikKLStERUZf RlBVRFMoZmN0aWR1eikKLStERUZfRlBVRFMoZmN0aXd6KQotK0RFRl9GUFVEUyhmcmltKQotK0RF Rl9GUFVEUyhmcmlwKQotK0RFRl9GUFVEUyhmcml6KQotK0RFRl9GUFVEUyhmcnNwKQotK0RFRl9G UFVEUyhmc3FydCkKLStERUZfRlBVRFMoZnNxcnRzKQotKyN1bmRlZiBERUZfRlBVRFMKLSsKLSsv LyAtLS0gRlAgbG9hZHMvc3RvcmVzIChELWZvcm0pIC0tLQotKwotK0RFRl9ERk9STV9GKGxmZCkK LStERUZfREZPUk1fRihsZnMpCi0rREVGX0RGT1JNX0Yoc3RmZCkKLStERUZfREZPUk1fRihzdGZz KQotK0RFRl9ERk9STV9GKHN0ZmR1KQotK0RFRl9ERk9STV9GKHN0ZnN1KQotKwotKy8vIC0tLSBG UCBsb2Fkcy9zdG9yZXMgKFgtZm9ybSwgaW5kZXhlZCkgLS0tCi0rCi0rREVGX0ZNRU14KGxmZHgp IERFRl9GTUVNeChsZnN4KSBERUZfRk1FTXgobGZpd2F4KQotKyAgICBERUZfRk1FTXgoc3RmZHgp IERFRl9GTUVNeChzdGZzeCkKLSsvLyBDbGVhbiB1cCBtYWNyb3MuCi0rI3VuZGVmIERFRl9YRk9S TQotKyN1bmRlZiBERUZfWEZPUk1fUkMKLSsjdW5kZWYgREVGX1hGT1JNUwotKyN1bmRlZiBERUZf WEZPUk1TX1JDCi0rI3VuZGVmIERFRl9YRk9STVNfSQotKyN1bmRlZiBERUZfWEZPUk0yCi0rI3Vu ZGVmIERFRl9YRk9STTJfUkMKLSsjdW5kZWYgREVGX1hGT1JNMlMKLSsjdW5kZWYgREVGX1hGT1JN MlNfUkMKLSsjdW5kZWYgREVGX1hGT1JNMl9GCi0rI3VuZGVmIERFRl9YRk9STTJfRl9SQwotKyN1 bmRlZiBERUZfTUZPUk0KLSsjdW5kZWYgREVGX01GT1JNX0kKLSsjdW5kZWYgREVGX01GT1JNX0lf UkMKLSsjdW5kZWYgREVGX01EU0ZPUk0KLSsjdW5kZWYgREVGX01EU0ZPUk1fUkMKLSsjdW5kZWYg REVGX01ERk9STQotKyN1bmRlZiBERUZfTURGT1JNX1JDCi0rI3VuZGVmIERFRl9ERk9STV9GCi0r I3VuZGVmIERFRl9GTUVNeAotKyN1bmRlZiBERUZfQUZPUk1fQwotKyN1bmRlZiBERUZfQUZPUk1f Q19SQwotKyN1bmRlZiBERUZfQUZPUk1fQgotKyN1bmRlZiBERUZfQUZPUk1fQl9SQwotKyN1bmRl ZiBERUZfQUZPUk0KLSsjdW5kZWYgREVGX0FGT1JNX1JDCi0rCi0rICAgIC8vIC0tLSBGUFNDUiBv cGVyYXRpb25zIC0tLQotKwotKyAgICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tdGZzYjAo dWludDhfdCBidCkgewotKyAgc3BldygibXRmc2IwXHQlZCIsIGJ0KTsKLSsgIHJldHVybiB3cml0 ZUluc3QoUFBDX210ZnNiMCB8ICh1aW50MzJfdClidCA8PCAyMSk7Ci0rfQotKwotK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX21jcmZzKENSZWdpc3RlcklEIGJmLCB1aW50OF90IGJmYSkgewot KyAgc3BldygibWNyZnNcdGNyJWQsJWQiLCBiZiwgYmZhKTsKLSsgIHJldHVybiB3cml0ZUluc3Qo UFBDX21jcmZzIHwgKHVpbnQzMl90KWJmIDw8IDIzIHwgKHVpbnQzMl90KWJmYSA8PCAxOCk7Ci0r fQotKwotKy8vIC0tLSBWU1ggKEZQUi1vbmx5IHN1YnNldCkgLS0tCi0rCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfbWZ2c3JkKFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHhzKSB7Ci0r ICBzcGV3KCJtZnZzcmRcdCUzcywlM3MiLCByYS5uYW1lKCksIHhzLm5hbWUoKSk7Ci0rICByZXR1 cm4gd3JpdGVJbnN0KFhYMUZvcm1NZnZzcihQUENfbWZ2c3JkLCByYS5jb2RlKCksIHhzLmVuY29k aW5nKCkpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3JkKEZsb2F0 UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhKSB7Ci0rICBzcGV3KCJtdHZzcmRcdCUzcywlM3MiLCB4 dC5uYW1lKCksIHJhLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210 dnNyZCwgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCAwKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzX210dnNyd2EoRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEpIHsK LSsgIHNwZXcoIm10dnNyd2FcdCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSk7Ci0rICBy ZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNyd2EsIHh0LmVuY29kaW5nKCksIHJhLmNv ZGUoKSwgMCkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tdHZzcndzKEZs b2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhKSB7Ci0rICBzcGV3KCJtdHZzcndzXHQlM3MsJTNz IiwgeHQubmFtZSgpLCByYS5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQ Q19tdHZzcndzLCB4dC5lbmNvZGluZygpLCByYS5jb2RlKCksIDApKTsKLSt9Ci0rCi0rQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3J3eihGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciBy YSkgewotKyAgc3BldygibXR2c3J3elx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgcmEubmFtZSgpKTsK LSsgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfbXR2c3J3eiwgeHQuZW5jb2RpbmcoKSwg cmEuY29kZSgpLCAwKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4YnJk KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsgIHNwZXcoInh4YnJkXHQl M3MsJTNzIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJG b3JtKFBQQ194eGJyZCwgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOwotK30KLSsKLStC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c2N2ZHBzcG4oRmxvYXRSZWdpc3RlciB4dCwgRmxv YXRSZWdpc3RlciB4YikgewotKyAgc3BldygieHNjdmRwc3BuXHQlM3MsJTNzIiwgeHQubmFtZSgp LCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194c2N2ZHBzcG4s IHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfeHNjdnNwZHBuKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIp IHsKLSsgIHNwZXcoInhzY3ZzcGRwblx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsK LSsgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHNjdnNwZHBuLCB4dC5lbmNvZGluZygp LCB4Yi5lbmNvZGluZygpKSk7Ci0rfQotKwotKy8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQ MTYgY29udmVyc2lvbnMuIFRoZSBVSU0gZGlzYW1iaWd1YXRvciBpcwotKy8vIGFscmVhZHkgaW4g UFBDX3hzY3ZkcGhwIC8gUFBDX3hzY3ZocGRwOyBYWDJGb3JtJ3MgYml0czE2dG8yMCBkZWZhdWx0 Ci0rLy8gb2YgMCBsZWF2ZXMgaXQgaW50YWN0LgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X3hzY3ZkcGhwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsgIHNwZXco InhzY3ZkcGhwXHQlM3MsJTNzIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdy aXRlSW5zdChYWDJGb3JtKFBQQ194c2N2ZHBocCwgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2Rpbmco KSkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c2N2aHBkcChGbG9hdFJl Z2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4c2N2aHBkcFx0JTNzLCUz cyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQ UENfeHNjdmhwZHAsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsKLSt9Ci0rCi0rQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHN4ZXhwZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRS ZWdpc3RlciB4YikgewotKyAgc3BldygieHN4ZXhwZHBcdCUzcywlM3MiLCB4dC5uYW1lKCksIHhi Lm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDX3hzeGV4cGRwLCB4dC5l bmNvZGluZygpLCB4Yi5lbmNvZGluZygpKSk7Ci0rfQotKwotKy8vIFBPV0VSOSAoSVNBIDMuMCkg RlAxNiBsb2FkL3N0b3JlLCBYLWZvcm0gaW5kZXhlZC4gbHhzaWh6eCBsb2FkcwotKy8vIDE2IGJp dHMgaW50byBWU1IgZHdvcmQgMCB3b3JkIDEncyBsb3cgaGFsZndvcmQgKHplcm9pbmcgdGhlIHJl c3QpOwotKy8vIHN0eHNpaHggc3RvcmVzIGZyb20gdGhlcmUuIFRoZSBYVFs1XS9YU1s1XSBiaXQg dHJhdmVscyB2aWEgdGhlCi0rLy8gWC1mb3JtJ3MgVFgvU1ggYml0IGF0IGluc3RydWN0aW9uIGJp dCAwLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x4c2loengoRmxvYXRSZWdpc3RlciB4 dCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJseHNpaHp4XHQlM3MsJTNz LCUzcyIsIHh0Lm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRl SW5zdChQUENfbHhzaWh6eCB8ICh4dC5lbmNvZGluZygpICYgMzEpIDw8IDIxIHwKLSsgICAgICAg ICAgICAgICAgICAgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExIHwKLSsgICAgICAg ICAgICAgICAgICAgKCh4dC5lbmNvZGluZygpID4+IDUpICYgMSkpOwotK30KLSsKLStCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc19zdHhzaWh4KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJh LCBSZWdpc3RlciByYikgewotKyAgc3Bldygic3R4c2loeFx0JTNzLCUzcywlM3MiLCB4cy5uYW1l KCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3N0eHNp aHggfCAoeHMuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgIHJh LmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSB8Ci0rICAgICAgICAgICAgICAgICAgICgo eHMuZW5jb2RpbmcoKSA+PiA1KSAmIDEpKTsKLSt9Ci0rCi0rLy8gWFgzLWZvcm0sIEZQUi1zcGFj ZSBvbmx5IChlbmNvZGluZyAwLi4zMSDihpIgVlNSMC4uMzEsIGFsbCBBWC9CWC9UWCA9IDApLgot Ky8vIEphdmEvSmF2YVNjcmlwdC1zdHlsZSBzY2FsYXIgbWF4L21pbiDigJQgc2VtYW50aWNzIHZl cmlmaWVkIHRvIG1hdGNoCi0rLy8gRUNNQS0yNjIgTWF0aC5tYXgvTWF0aC5taW4gaW5jbHVkaW5n IMKxMCBhbmQgTmFOIHByb3BhZ2F0aW9uLiBQT1dFUjktb25seS4KLStCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc194c21heGpkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsK LSsgIHNwZXcoInhzbWF4amRwXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4 Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ194c21heGpkcCwgeHQs IHhhLCB4YikpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c21pbmpkcChG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsgIHNwZXcoInhzbWluamRwXHQl M3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJu IHdyaXRlSW5zdChYWDNGb3JtKFBQQ194c21pbmpkcCwgeHQsIHhhLCB4YikpOwotK30KLSsKLSsv LyAtLS0gVlNYIFNJTUQgbG9hZC9zdG9yZSAtLS0KLSsKLSsvLyBGb3IgVlNYMC0zMSAoRlBSKSwg dGhlIDZ0aCByZWdpc3RlciBiaXQgKFRYL1NYL0JYKSBpcyAwLgotKy8vIFgtZm9ybTogb3Bjb2Rl IHwgVCA8PCAyMSB8IEEgPDwgMTYgfCBCIDw8IDExIHwgeG8gfCBUWAotKy8vIGx4dngvc3R4dngg YXJlIFBPV0VSOSAoSVNBIDMuMCkuIGx4dmQyeC9zdHh2ZDJ4IGFyZSBQT1dFUjggKElTQSAyLjA3 KS4KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19seHZ4KEZsb2F0UmVnaXN0ZXIgeHQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3BldygibHh2eFx0JTNzLCUzcywlM3Mi LCB4dC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3Qo WFgxRm9ybShQUENfbHh2eCwgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCByYi5jb2RlKCkpKTsK LSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3R4dngoRmxvYXRSZWdpc3RlciB4 cywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJzdHh2eFx0JTNzLCUzcywl M3MiLCB4cy5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoWFgxRm9ybShQUENfc3R4dngsIHhzLmVuY29kaW5nKCksIHJhLmNvZGUoKSwgcmIuY29kZSgp KSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x4dmQyeChGbG9hdFJlZ2lz dGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImx4dmQyeFx0JTNz LCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3 cml0ZUluc3QoWFgxRm9ybShQUENfbHh2ZDJ4LCB4dC5lbmNvZGluZygpLCByYS5jb2RlKCksIHJi LmNvZGUoKSkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zdHh2ZDJ4KEZs b2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3Bldygic3R4 dmQyeFx0JTNzLCUzcywlM3MiLCB4cy5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsg IHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfc3R4dmQyeCwgeHMuZW5jb2RpbmcoKSwgcmEu Y29kZSgpLCByYi5jb2RlKCkpKTsKLSt9Ci0rCi0rLy8gVk1YIHJlZ2lzdGVyIGxvYWQvc3RvcmUu IFNlZSBQUENfbHZ4L1BQQ19zdHZ4IGluIEFzc2VtYmxlci1wcGM2NC5oIGZvcgotKy8vIHRoZSBl bmNvZGluZyByYXRpb25hbGUuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHZ4KHVpbnQ4 X3QgdnJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIE1PWl9BU1NFUlQodnJ0IDwg MzIpOwotKyAgc3BldygibHZ4XHR2ciVkLCUzcywlM3MiLCB2cnQsIHJhLm5hbWUoKSwgcmIubmFt ZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2x2eCB8IHVpbnQzMl90KHZydCkgPDwgMjEg fCByYS5jb2RlKCkgPDwgMTYgfAotKyAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEp OwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zdHZ4KHVpbnQ4X3QgdnJzLCBS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIE1PWl9BU1NFUlQodnJzIDwgMzIpOwotKyAg c3Bldygic3R2eFx0dnIlZCwlM3MsJTNzIiwgdnJzLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0r ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zdHZ4IHwgdWludDMyX3QodnJzKSA8PCAyMSB8IHJhLmNv ZGUoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAgICAgIHJiLmNvZGUoKSA8PCAxMSk7Ci0rfQot KwotKy8vIC0tLSBWU1ggU0lNRCByZWdpc3RlciBvcGVyYXRpb25zIC0tLQotKwotKy8vIFhYMy1m b3JtOiBvcGNvZGUgfCBUWzA6NF08PDIxIHwgQVswOjRdPDwxNiB8IEJbMDo0XTw8MTEgfCB4byB8 IEFYIHwgQlggfCBUWAotKy8vIHdoZXJlIEFYL0JYL1RYIChiaXRzIDIvMS8wKSBjYXJyeSBiaXQg NSBvZiBlYWNoIDYtYml0IFZTUiBpbmRleC4KLSsvLyBFbmNvZGVkIGJ5IHRoZSBYWDNGb3JtIGhl bHBlciBhYm92ZSBmb3IgYm90aCBWU1IwLTMxIChTaW5nbGUvRG91YmxlKSBhbmQKLSsvLyBWU1Iz Mi02MyAoU2ltZDEyOCkgb3BlcmFuZHMuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhs b3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4eGxvclx0JTNz LCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3 cml0ZUluc3QoWFgzRm9ybShQUENfeHhsb3IsIHh0LCB4YSwgeGIpKTsKLSt9Ci0rCi0rQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhsYW5kKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg eGIpIHsKLSsgIHNwZXcoInh4bGFuZFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUo KSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHhsYW5kLCB4 dCwgeGEsIHhiKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4bHhvcihG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4eGx4b3JcdCUzcywl M3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3Jp dGVJbnN0KFhYM0Zvcm0oUFBDX3h4bHhvciwgeHQsIHhhLCB4YikpOwotK30KLSsKLStCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc194eGxub3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4 YikgewotKyAgc3BldygieHhsbm9yXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgp LCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ194eGxub3IsIHh0 LCB4YSwgeGIpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhsYW5kYyhG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgewotKyAgc3BldygieHhsYW5kY1x0JTNz LCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3 cml0ZUluc3QoWFgzRm9ybShQUENfeHhsYW5kYywgeHQsIHhhLCB4YikpOwotK30KLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eHNlbChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lz dGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg eGIsIEZsb2F0UmVnaXN0ZXIgeGMpIHsKLSsgIHNwZXcoInh4c2VsXHQlM3MsJTNzLCUzcywlM3Mi LCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpLCB4Yy5uYW1lKCkpOwotKyAgcmV0dXJu IHdyaXRlSW5zdChYWDRGb3JtKFBQQ194eHNlbCwgeHQuZW5jb2RpbmcoKSwgeGEuZW5jb2Rpbmco KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB4Yi5lbmNvZGluZygpLCB4Yy5lbmNvZGlu ZygpKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4cGVybWRpKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YiwgdWludDhfdCBkbSkgewotKyAgTU9aX0FTU0VS VChkbSA8IDQpOwotKyAgc3BldygieHhwZXJtZGlcdCUzcywlM3MsJTNzLCVkIiwgeHQubmFtZSgp LCB4YS5uYW1lKCksIHhiLm5hbWUoKSwgZG0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3Jt KFBQQ194eHBlcm1kaSB8ICh1aW50MzJfdChkbSkgPDwgOCksIHh0LCB4YSwgeGIpKTsKLSt9Ci0r Ci0rLy8gUE9XRVI5IChJU0EgMy4wKS4gWFgxLWZvcm0gd2l0aCB0d28gR1BSIHNvdXJjZXMuCi0r QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3JkZChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdp c3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoIm10dnNyZGRcdCUzcywlM3MsJTNzIiwg eHQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhY MUZvcm0oUFBDX210dnNyZGQsIHh0LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgcmIuY29kZSgpKSk7 Ci0rfQotKwotKy8vIFBPV0VSOSAoSVNBIDMuMCkuIFhYMS1mb3JtOiBtb3ZlIGxvd2VyIGRvdWJs ZXdvcmQgb2YgVlNSIHRvIEdQUi4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tZnZzcmxk KFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHhzKSB7Ci0rICBzcGV3KCJtZnZzcmxkXHQlM3Ms JTNzIiwgcnQubmFtZSgpLCB4cy5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3Jt TWZ2c3IoUFBDX21mdnNybGQsIHJ0LmNvZGUoKSwgeHMuZW5jb2RpbmcoKSkpOwotK30KLSsKLSsv LyAtLS0gWFgyLWZvcm0gVlNYIGluc3RydWN0aW9ucyAtLS0KLSsKLSsvLyBYWDItZm9ybTogb3Bj b2RlIHwgVDw8MjEgfCBVSU08PDE2X2FyZWEgfCBCPDwxMV9hcmVhIHwgWE88PDIgfCBCWCB8IFRY Ci0rLy8gRm9yIFZTUjAtMzEsIEJYPVRYPTAuCi0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfeHhzcGx0dyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1aW0pIHsKLSsgIE1PWl9BU1NFUlQo dWltIDwgNCk7Ci0rICBzcGV3KCJ4eHNwbHR3XHQlM3MsJTNzLCVkIiwgeHQubmFtZSgpLCB4Yi5u YW1lKCksIHVpbSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDX3h4c3BsdHcsIHh0 LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCksIHVpbSkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc194eGluc2VydHcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 YiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1aW0pIHsK LSsgIE1PWl9BU1NFUlQodWltIDw9IDEyICYmICh1aW0gJiAzKSA9PSAwKTsKLSsgIHNwZXcoInh4 aW5zZXJ0d1x0JTNzLCUzcywlZCIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpLCB1aW0pOwotKyAgcmV0 dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194eGluc2VydHcsIHh0LmVuY29kaW5nKCksIHhiLmVu Y29kaW5nKCksIHVpbSkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eGV4 dHJhY3R1dyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7Ci0rICBNT1pfQVNTRVJU KHVpbSA8PSAxMiAmJiAodWltICYgMykgPT0gMCk7Ci0rICBzcGV3KCJ4eGV4dHJhY3R1d1x0JTNz LCUzcywlZCIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpLCB1aW0pOwotKyAgcmV0dXJuIHdyaXRlSW5z dChYWDJGb3JtKFBQQ194eGV4dHJhY3R1dywgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSwg dWltKSk7Ci0rfQotKwotKy8vIFBPV0VSOSAoSVNBIDMuMCkuIFhYMS1mb3JtLWlzaDogVCg1KSAr IFVJTTgoOCkgKyBYTyArIFRYLiBVSU04IG9jY3VwaWVzCi0rLy8gYml0cyAxOC4uMTEgKGEgbm9u LXN0YW5kYXJkIHNsb3QgdGhhdCBYWDFGb3JtIGRvZXNuJ3QgZml0KSwgc28gZW5jb2RlCi0rLy8g aW5saW5lLiBUWCBiaXQgYXQgaW5zdHJ1Y3Rpb24gYml0IDAgc2VsZWN0cyB0aGUgdXBwZXIgaGFs ZiBvZiBWU1IKLSsvLyBzcGFjZSB3aGVuIHh0LmVuY29kaW5nKCkgaXMgaW4gMzItNjMgKFNpbWQx MjgpLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4c3BsdGliKEZsb2F0UmVnaXN0ZXIg eHQsIHVpbnQ4X3QgaW1tOCkgewotKyAgc3BldygieHhzcGx0aWJcdCUzcywldSIsIHh0Lm5hbWUo KSwgaW1tOCk7Ci0rICB1aW50MzJfdCBlbmMgPSB1aW50MzJfdCh4dC5lbmNvZGluZygpKTsKLSsg IHJldHVybiB3cml0ZUluc3QoUFBDX3h4c3BsdGliIHwgKGVuYyAmIDMxKSA8PCAyMSB8ICh1aW50 MzJfdClpbW04IDw8IDExIHwKLSsgICAgICAgICAgICAgICAgICAgKChlbmMgPj4gNSkgJiAxKSk7 Ci0rfQotKwotKy8vIC0tLSBWTVggaW5zdHJ1Y3Rpb25zIC0tLQotKwotKy8vIFZYLWZvcm06ICg0 PDwyNikgfCBWUlQ8PDIxIHwgVUlNTTw8MTYgfCBWUkI8PDExIHwgWE8KLSsvLyBWUlQvVlJCIGFy ZSA1LWJpdCByYXcgVlIgbnVtYmVycyAoMC0zMSkuIFNpbWQxMjggRmxvYXRSZWdpc3Rlci5lbmNv ZGluZygpCi0rLy8gcmV0dXJucyAzMi02MzsgbWFza2luZyB3aXRoICYgMzEgbWFwcyBpdCBiYWNr IHRvIHRoZSBWUiBvZmZzZXQgMC0zMS4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc192c3Bs dGIoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkgewotKyAgTU9aX0FTU0VSVCh1aW0gPCAx Nik7Ci0rICBzcGV3KCJ2c3BsdGJcdCUzcywlM3MsJWQiLCB2cnQubmFtZSgpLCB2cmIubmFtZSgp LCB1aW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNwbHRiIHwgKHZydC5lbmNvZGluZygp ICYgMzEpIDw8IDIxIHwKLSsgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KXVpbSA8PCAxNiB8 ICh2cmIuZW5jb2RpbmcoKSAmIDMxKSA8PCAxMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX3ZzcGx0aChGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7Ci0rICBNT1pf QVNTRVJUKHVpbSA8IDgpOwotKyAgc3BldygidnNwbHRoXHQlM3MsJTNzLCVkIiwgdnJ0Lm5hbWUo KSwgdnJiLm5hbWUoKSwgdWltKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0aCB8ICh2 cnQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgICh1aW50MzJf dCl1aW0gPDwgMTYgfCAodnJiLmVuY29kaW5nKCkgJiAzMSkgPDwgMTEpOwotK30KLSsKLSsvLyBW QS1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZSQTw8MTYgfCBWUkI8PDExIHwgU0hCPDw2IHwg WE8oNi1iaXQpCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnNsZG9pKEZsb2F0UmVnaXN0 ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qgc2hiKSB7Ci0rICBNT1pfQVNTRVJUKHNo YiA8IDE2KTsKLSsgIHNwZXcoInZzbGRvaVx0JTNzLCUzcywlM3MsJWQiLCB2cnQubmFtZSgpLCB2 cmEubmFtZSgpLCB2cmIubmFtZSgpLCBzaGIpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNs ZG9pIHwgKHZydC5lbmNvZGluZygpICYgMzEpIDw8IDIxIHwKLSsgICAgICAgICAgICAgICAgICAg KHZyYS5lbmNvZGluZygpICYgMzEpIDw8IDE2IHwgKHZyYi5lbmNvZGluZygpICYgMzEpIDw8IDEx IHwKLSsgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KXNoYiA8PCA2KTsKLSt9Ci0rCi0rLy8g LS0tIFZNWCBpbnRlZ2VyIGFyaXRobWV0aWMgKFZSIHJlZ2lzdGVycyBvbmx5KSAtLS0KLSsKLSsv LyBWWC1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZSQTw8MTYgfCBWUkI8PDExIHwgWE8KLSsv LyBUaGUgbWFjcm8gdGFrZXMgcmF3IFZSIG51bWJlcnMgKDAtMzEpLgotKyNkZWZpbmUgREVGX1ZN WF9WVlYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYikgeyBcCi0rICAgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYg dnJhIDwgMzIgJiYgdnJiIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBz cGV3KCNvcCAiXHR2ciVkLHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHZydCA8PCAy MSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSk7ICAgICAgICBcCi0rICB9Ci0rCi0rREVGX1ZNWF9W VlYodmFkZHVibSkKLStERUZfVk1YX1ZWVih2YWRkdWhtKQotK0RFRl9WTVhfVlZWKHZhZGR1d20p Ci0rREVGX1ZNWF9WVlYodmFkZHVkbSkKLStERUZfVk1YX1ZWVih2c3VidWJtKQotK0RFRl9WTVhf VlZWKHZzdWJ1aG0pCi0rREVGX1ZNWF9WVlYodnN1YnV3bSkKLStERUZfVk1YX1ZWVih2c3VidWRt KQotK0RFRl9WTVhfVlZWKHZhZGRzYnMpCi0rREVGX1ZNWF9WVlYodmFkZHNocykKLStERUZfVk1Y X1ZWVih2YWRkdWJzKQotK0RFRl9WTVhfVlZWKHZhZGR1aHMpCi0rREVGX1ZNWF9WVlYodnN1YnNi cykKLStERUZfVk1YX1ZWVih2c3Vic2hzKQotK0RFRl9WTVhfVlZWKHZzdWJ1YnMpCi0rREVGX1ZN WF9WVlYodnN1YnVocykKLStERUZfVk1YX1ZWVih2bWluc2IpCi0rREVGX1ZNWF9WVlYodm1pbnNo KQotK0RFRl9WTVhfVlZWKHZtaW5zdykKLStERUZfVk1YX1ZWVih2bWF4c2IpCi0rREVGX1ZNWF9W VlYodm1heHNoKQotK0RFRl9WTVhfVlZWKHZtYXhzdykKLStERUZfVk1YX1ZWVih2bWF4c2QpCi0r REVGX1ZNWF9WVlYodm1pbnViKQotK0RFRl9WTVhfVlZWKHZtaW51aCkKLStERUZfVk1YX1ZWVih2 bWludXcpCi0rREVGX1ZNWF9WVlYodm1heHViKQotK0RFRl9WTVhfVlZWKHZtYXh1aCkKLStERUZf Vk1YX1ZWVih2bWF4dXcpCi0rREVGX1ZNWF9WVlYodmF2Z3ViKQotK0RFRl9WTVhfVlZWKHZhdmd1 aCkKLStERUZfVk1YX1ZWVih2bXVsdXdtKQotK0RFRl9WTVhfVlZWKHZtdWxsZCkKLSsKLStERUZf Vk1YX1ZWVih2c2xiKQotK0RFRl9WTVhfVlZWKHZzbGgpCi0rREVGX1ZNWF9WVlYodnNsdykKLStE RUZfVk1YX1ZWVih2c2xkKQotK0RFRl9WTVhfVlZWKHZzcmIpCi0rREVGX1ZNWF9WVlYodnNyaCkK LStERUZfVk1YX1ZWVih2c3J3KQotK0RFRl9WTVhfVlZWKHZzcmQpCi0rREVGX1ZNWF9WVlYodnNy YWIpCi0rREVGX1ZNWF9WVlYodnNyYWgpCi0rREVGX1ZNWF9WVlYodnNyYXcpCi0rREVGX1ZNWF9W VlYodnNyYWQpCi0rREVGX1ZNWF9WVlYodnNsbykKLStERUZfVk1YX1ZWVih2c3JvKQotK0RFRl9W TVhfVlZWKHZjbXBlcXViKQotK0RFRl9WTVhfVlZWKHZjbXBlcXVoKQotK0RFRl9WTVhfVlZWKHZj bXBlcXV3KQotK0RFRl9WTVhfVlZWKHZjbXBlcXVkKQotK0RFRl9WTVhfVlZWKHZjbXBndHNiKQot K0RFRl9WTVhfVlZWKHZjbXBndHNoKQotK0RFRl9WTVhfVlZWKHZjbXBndHN3KQotK0RFRl9WTVhf VlZWKHZjbXBndHNkKQotK0RFRl9WTVhfVlZWKHZjbXBndHViKQotK0RFRl9WTVhfVlZWKHZjbXBn dHVoKQotK0RFRl9WTVhfVlZWKHZjbXBndHV3KQotK0RFRl9WTVhfVlZWKHZjbXBndHVkKQotKy8v IFBPV0VSOSAoSVNBIDMuMCkuIE5vdEVxdWFsIGNvbXBhcmU7IHNhdmVzIHRoZSB4eGxub3IgdGhh dCB2Y21wZXF1WCBuZWVkcy4KLStERUZfVk1YX1ZWVih2Y21wbmViKQotK0RFRl9WTVhfVlZWKHZj bXBuZWgpCi0rREVGX1ZNWF9WVlYodmNtcG5ldykKLSsKLSsvLyBQT1dFUjgrIChJU0EgMi4wNyku IHZicGVybXEgUlQsUkEsUkI6IGJpdC1wZXJtdXRlIHF1YWR3b3JkLgotK0RFRl9WTVhfVlZWKHZi cGVybXEpCi0rCi0rI3VuZGVmIERFRl9WTVhfVlZWCi0rCi0rLy8gVkMtZm9ybSByZWNvcmQgZm9y bXM6IHNhbWUgYXMgVlgtZm9ybSBhYm92ZSB3aXRoIFJjIGJpdCAoYml0IDEwIExTQikgc2V0Lgot Ky8vIHZjbXBYWFguIHNldHMgQ1I2OiBMVCA9IGFsbC10cnVlLCBFUSA9IG5vbmUtdHJ1ZS4KLSsj ZGVmaW5lIERFRl9WTVhfVlZWX1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMj X3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgICAgICAgICAgICBcCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB2cmIpIHsgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAz Mik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBzcGV3KCNvcCAiLlx0dnIlZCx2 ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2 cmIgPDwgMTEgfCAweDQwMCk7IFwKLSsgIH0KLSsKLStERUZfVk1YX1ZWVl9SQyh2Y21wZXF1YikK LStERUZfVk1YX1ZWVl9SQyh2Y21wZXF1aCkKLStERUZfVk1YX1ZWVl9SQyh2Y21wZXF1dykKLStE RUZfVk1YX1ZWVl9SQyh2Y21wZXF1ZCkKLSsKLSsjdW5kZWYgREVGX1ZNWF9WVlZfUkMKLSsKLSsv LyBWU1ggZmxvYXQgY29tcGFyZSAoWFgzLWZvcm0pLgotKyNkZWZpbmUgREVGX1ZTWF9DTVAob3Ap ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGEsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciB4YikgeyAgICAgICAgICAgICAgICAgXAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCUzcyIs IHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkpOyAgICAgICBcCi0rICAgIHJldHVybiB3 cml0ZUluc3QoWFgzRm9ybShQUENfIyNvcCwgeHQsIHhhLCB4YikpOyAgICAgICAgICAgICAgICAg IFwKLSsgIH0KLSsKLStERUZfVlNYX0NNUCh4dmNtcGVxc3ApCi0rREVGX1ZTWF9DTVAoeHZjbXBn dHNwKQotK0RFRl9WU1hfQ01QKHh2Y21wZ2VzcCkKLStERUZfVlNYX0NNUCh4dmNtcGVxZHApCi0r REVGX1ZTWF9DTVAoeHZjbXBndGRwKQotK0RFRl9WU1hfQ01QKHh2Y21wZ2VkcCkKLSsKLSsjdW5k ZWYgREVGX1ZTWF9DTVAKLSsKLSsvLyBWU1ggZmxvYXQgYXJpdGhtZXRpYyAoWFgzLWZvcm0gYmlu YXJ5KS4KLSsjZGVmaW5lIERFRl9WU1hfQklOKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNv cChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsgICAgICAgICAgICAgICAgIFwK LSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIu bmFtZSgpKTsgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDXyMjb3As IHh0LCB4YSwgeGIpKTsgICAgICAgICAgICAgICAgICBcCi0rICB9Ci0rREVGX1ZTWF9CSU4oeHZh ZGRzcCkKLStERUZfVlNYX0JJTih4dmFkZGRwKSBERUZfVlNYX0JJTih4dnN1YnNwKSBERUZfVlNY X0JJTih4dnN1YmRwKSBERUZfVlNYX0JJTigKLSsgICAgeHZtdWxzcCkgREVGX1ZTWF9CSU4oeHZt dWxkcCkgREVGX1ZTWF9CSU4oeHZkaXZzcCkgREVGX1ZTWF9CSU4oeHZkaXZkcCkKLSsgICAgREVG X1ZTWF9CSU4oeHZtaW5zcCkgREVGX1ZTWF9CSU4oeHZtaW5kcCkgREVGX1ZTWF9CSU4oeHZtYXhz cCkgREVGX1ZTWF9CSU4oCi0rICAgICAgICB4dm1heGRwKSBERUZfVlNYX0JJTih4dm1hZGRhc3Ap IERFRl9WU1hfQklOKHh2bWFkZGFkcCkKLSsgICAgICAgIERFRl9WU1hfQklOKHh2bm1zdWJhc3Ap IERFRl9WU1hfQklOKHh2bm1zdWJhZHApCi0rI3VuZGVmIERFRl9WU1hfQklOCi0rCi0rLy8gVlNY IHVuYXJ5IChYWDItZm9ybSk6IG9wIHwgeHQ8PDIxIHwgeGI8PDExIHwgWE88PDIKLSsvLyBYWDIt Zm9ybSB1bmFyeSBWU1ggb3A6IFQgKyBCLCBubyBVSU0uIFVzZXMgWFgyRm9ybSBoZWxwZXIgZm9y IFRYL0JYIGJpdHMuCi0rI2RlZmluZSBERUZfVlNYX1VOKG9wKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7IFwKLSsgICAg c3Bldygjb3AgIlx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfIyNvcCwgeHQu ZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOyAgXAotKyAgfQotKyAgICAgICAgICAgIERFRl9W U1hfVU4oeHZhYnNzcCkgREVGX1ZTWF9VTih4dmFic2RwKSBERUZfVlNYX1VOKAotKyAgICAgICAg ICAgICAgICB4dm5lZ3NwKSBERUZfVlNYX1VOKHh2bmVnZHApIERFRl9WU1hfVU4oeHZzcXJ0c3Ap Ci0rICAgICAgICAgICAgICAgIERFRl9WU1hfVU4oeHZzcXJ0ZHApIERFRl9WU1hfVU4oeHZyc3Bp cCkgREVGX1ZTWF9VTigKLSsgICAgICAgICAgICAgICAgICAgIHh2cmRwaXApIERFRl9WU1hfVU4o eHZyc3BpbSkgREVGX1ZTWF9VTih4dnJkcGltKQotKyAgICAgICAgICAgICAgICAgICAgREVGX1ZT WF9VTih4dnJzcGl6KSBERUZfVlNYX1VOKHh2cmRwaXopIERFRl9WU1hfVU4oCi0rICAgICAgICAg ICAgICAgICAgICAgICAgeHZyc3BpYykgREVGX1ZTWF9VTih4dnJkcGljKSBERUZfVlNYX1VOKHh2 Y3ZzeHdzcCkKLSsgICAgICAgICAgICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2Y3Z1eHdzcCkg REVGX1ZTWF9VTih4dmN2c3h3ZHApIERFRl9WU1hfVU4oCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHh2Y3Z1eHdkcCkgREVGX1ZTWF9VTih4dmN2c3BzeHdzKQotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2Y3ZzcHV4d3MpIERFRl9WU1hfVU4oeHZjdmRwc3h3 cykKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WU1hfVU4oeHZjdmRwdXh3 cykgREVGX1ZTWF9VTih4dmN2ZHBzcCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERUZfVlNYX1VOKHh2Y3ZzcGRwKQotKyN1bmRlZiBERUZfVlNYX1VOCi0rCi0rLy8gVk1Y IHVuYXJ5IFZYLWZvcm06ICg0PDwyNikgfCBWUlQ8PDIxIHwgMDw8MTYgfCBWUkI8PDExIHwgWE8K LSsjZGVmaW5lIERFRl9WTVhfVU5BUlkob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AodWludDhfdCB2cnQs IHVpbnQ4X3QgdnJiKSB7IFwKLSsgICAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmIgPCAzMik7 ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0dnIlZCx2ciVkIiwg dnJ0LCB2cmIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5z dChQUENfIyNvcCB8IHZydCA8PCAyMSB8IHZyYiA8PCAxMSk7ICAgICAgIFwKLSsgIH0KLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZNWF9VTkFSWSh2dXBraHNi KSBERUZfVk1YX1VOQVJZKAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnVwa2xzYikgREVGX1ZNWF9VTkFSWSh2dXBraHNoKQotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZNWF9VTkFSWSh2dXBrbHNoKQotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVU5BUlko dnVwa2hzdykKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgREVGX1ZNWF9VTkFSWSh2dXBrbHN3KQotKyAgICAvLyBQT1dFUjkgcGVyLWxhbmUgaW50 ZWdlciBuZWdhdGUuIFRoZSBWUkEgZmllbGQgaG9sZHMgdGhlIHN1Ym9wIGNvZGUKLSsgICAgLy8g KDYgZm9yIHZuZWd3LCA3IGZvciB2bmVnZCkgd2hpY2ggaXMgYWxyZWFkeSBiYWtlZCBpbnRvIFBQ Q192bmVne3csZH0uCi0rICAgIERFRl9WTVhfVU5BUlkodm5lZ3cpIERFRl9WTVhfVU5BUlkodm5l Z2QpIERFRl9WTVhfVU5BUlkodnBvcGNudGIpCi0rI3VuZGVmIERFRl9WTVhfVU5BUlkKLSsKLSsg ICAgLy8gUE9XRVI5IGFkZHBjaXMgKERYLWZvcm0pLiBDb21wdXRlcyByVCA9IChDSUEgKyA0KSAr IChEIDw8IDE2KS4KLSsgICAgLy8gRCBpcyBhIDE2LWJpdCBzaWduZWQgaW1tZWRpYXRlLCBzcGxp dCBhY3Jvc3MgdGhyZWUgaW5zdHJ1Y3Rpb24gZmllbGRzOgotKyAgICAvLyAgIGQwID0gYml0cyAx Ni4uMjUgKDEwIGJpdHMsIERbMTU6Nl0pCi0rICAgIC8vICAgZDEgPSBiaXRzIDExLi4xNSAoNSBi aXRzLCAgRFs1OjFdKQotKyAgICAvLyAgIGQyID0gYml0IDMxICAgICAgKDEgYml0LCAgIERbMF0p Ci0rICAgIC8vIFByaW1hcnkgb3Bjb2RlIDE5LCBEWCBzdWJvcCAyLgotKyAgICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19hZGRwY2lzKFJlZ2lzdGVyIHJ0LCBpbnQxNl90IGQpIHsKLSsgIHNw ZXcoImFkZHBjaXNcdCVzLCVkIiwgcnQubmFtZSgpLCAoaW50KWQpOwotKyAgdWludDMyX3QgRCA9 IHVpbnQxNl90KGQpOwotKyAgdWludDMyX3QgaW5zdCA9ICgxOXUgPDwgMjYpIHwgKHVpbnQzMl90 KHJ0LmNvZGUoKSkgPDwgMjEpIHwKLSsgICAgICAgICAgICAgICAgICAoKEQgPj4gMSkgJiAweDFG KSA8PCAxNiB8ICgoRCA+PiA2KSAmIDB4M0ZGKSA8PCA2IHwKLSsgICAgICAgICAgICAgICAgICAo MnUgPDwgMSkgfCAoRCAmIDF1KTsKLSsgIHJldHVybiB3cml0ZUluc3QoaW5zdCk7Ci0rfQotKwot Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gUG93ZXIgSVNBIHYzLjEgKFBPV0VSMTApIHBy ZWZpeGVkIGluc3RydWN0aW9ucy4KLSsvLwotKy8vIExheW91dDoKLSsvLwotKy8vICAgUHJlZml4 IHdvcmQgKEJFIGJpdCBudW1iZXJpbmcgZnJvbSB0aGUgbWFudWFsOyBMRSBiaXRzIGluIHBhcmVu dGhlc2VzKToKLSsvLyAgICAgWzAuLjVdICAgcHJpbWFyeSBvcGNvZGUgPSAxICAgKExFIDMxLi4y NikKLSsvLyAgICAgWzYuLjddICAgVHlwZTogMDAgPSA4TFMsIDEwID0gTUxTICAgKExFIDI1Li4y NCkKLSsvLyAgICAgWzguLjEwXSAgcmVzZXJ2ZWQgPSAwICAgKExFIDIzLi4yMSkKLSsvLyAgICAg WzExXSAgICAgUjogMSA9IFBDLXJlbGF0aXZlIChSQSBtdXN0IGJlIHIwKSAgIChMRSAyMCkKLSsv LyAgICAgWzEyLi4xM10gcmVzZXJ2ZWQgPSAwICAgKExFIDE5Li4xOCkKLSsvLyAgICAgWzE0Li4z MV0gZDA6IGhpZ2ggMTggYml0cyBvZiAzNC1iaXQgc2lnbmVkIGltbWVkaWF0ZSAgIChMRSAxNy4u MCkKLSsvLwotKy8vICAgU3VmZml4IChwYWRkaS9wbGQsIEdQUiB0YXJnZXQpOgotKy8vICAgICBb MC4uNV0gICBzdWZmaXggb3Bjb2RlIChwYWRkaT0xNCwgcGxkPTU3KSAgIChMRSAzMS4uMjYpCi0r Ly8gICAgIFs2Li4xMF0gIFJUICAgKExFIDI1Li4yMSkKLSsvLyAgICAgWzExLi4xNV0gUkEgICAo TEUgMjAuLjE2KQotKy8vICAgICBbMTYuLjMxXSBkMTogbG93IDE2IGJpdHMgb2YgaW1tZWRpYXRl ICAgKExFIDE1Li4wKQotKy8vCi0rLy8gICBTdWZmaXggKHBseHYsIFZTUiB0YXJnZXQg4oCUIGhh cyB0aGUgVFggYml0IGF0IHN1ZmZpeCBiaXQgNS9MRSBiaXQgMjYpOgotKy8vICAgICBbMC4uNF0g ICBwbHh2IDUtYml0IG9wY29kZSA9IDExMDAxICg9MjUpICAgKExFIDMxLi4yNykKLSsvLyAgICAg WzVdICAgICAgVFggKGhpZ2ggYml0IG9mIDYtYml0IFhUKSAgIChMRSAyNikKLSsvLyAgICAgWzYu LjEwXSAgVCAgKGxvdyA1IGJpdHMgb2YgWFQpICAgKExFIDI1Li4yMSkKLSsvLyAgICAgWzExLi4x NV0gUkEgICAoTEUgMjAuLjE2KQotKy8vICAgICBbMTYuLjMxXSBkMSAgIChMRSAxNS4uMCkKLSsv LwotKy8vIFRoZSBwcmVmaXggYW5kIHN1ZmZpeCBvZiBhIHByZWZpeGVkIGluc3RydWN0aW9uIG11 c3QgbGllIGluIHRoZSBzYW1lCi0rLy8gNjQtYnl0ZSBhbGlnbmVkIGJsb2NrIGF0ICoqcnVudGlt ZSoqLiBUaGUgSml0Q29kZSBhbGxvY2F0b3Igb25seQotKy8vIGd1YXJhbnRlZXMgMTYtYnl0ZSBh bGlnbm1lbnQsIHNvIHRoZSBidWZmZXItcmVsYXRpdmUgb2Zmc2V0IGFuZCB0aGUKLSsvLyBydW50 aW1lIGFkZHJlc3MgY2FuIGRpZmZlciBieSAwLzE2LzMyLzQ4IG1vZCA2NC4gQSBidWZmZXItb25s eSBjaGVjawotKy8vIGAoY3VycmVudE9mZnNldCgpICYgNjMpID09IDYwYCBpcyBjb3JyZWN0IHdo ZW4gdGhlIGFsbG9jYXRvciBiYXNlIGlzCi0rLy8gNjQtYWxpZ25lZCBidXQgbWlzc2VzIHRocmVl IG9mIHRoZSBmb3VyIDE2LWFsaWduZWQgYmFzZSBjbGFzc2VzIOKAlCBwYWQKLSsvLyB3aGVuZXZl ciBgKGN1cnJlbnRPZmZzZXQoKSAmIDE1KSA9PSAxMmAsIHdoaWNoIGNhdGNoZXMgYWxsIGZvdXIu IFRoZQotKy8vIGVudGVyTm9Qb29sIGd1YXJkIHByZXZlbnRzIHRoZSBjb25zdGFudC1wb29sIGZs dXNoZXIgZnJvbSBpbnNlcnRpbmcKLSsvLyBib2RpZXMgYmV0d2VlbiB0aGUgKG9wdGlvbmFsKSBu b3AsIHByZWZpeCwgYW5kIHN1ZmZpeC4KLSsKLStzdGF0aWMgdWludDMyX3QgRW5jb2RlUG93ZXIx MFByZWZpeCh1aW50MzJfdCB0eXBlLCBib29sIFIsIHVpbnQzMl90IGQwKSB7Ci0rICBNT1pfQVNT RVJUKHR5cGUgPT0gMCB8fCB0eXBlID09IDIpOyAgLy8gOExTPTAsIE1MUz0yCi0rICBNT1pfQVNT RVJUKGQwIDwgKDF1IDw8IDE4KSk7Ci0rICByZXR1cm4gKDF1IDw8IDI2KSB8ICh0eXBlIDw8IDI0 KSB8ICh1aW50MzJfdChSID8gMSA6IDApIDw8IDIwKSB8Ci0rICAgICAgICAgKGQwICYgMHgzRkZG RnUpOwotK30KLSsKLStzdGF0aWMgdm9pZCBTcGxpdEltbTM0KGludDY0X3QgaW1tMzQsIHVpbnQz Ml90KiBkMCwgdWludDMyX3QqIGQxKSB7Ci0rICBNT1pfQVNTRVJUKGltbTM0ID49IC0oaW50NjRf dCgxKSA8PCAzMykpOwotKyAgTU9aX0FTU0VSVChpbW0zNCA8IChpbnQ2NF90KDEpIDw8IDMzKSk7 Ci0rICB1aW50NjRfdCB1ID0gdWludDY0X3QoaW1tMzQpICYgMHgzRkZGRkZGRkZ1bGw7ICAvLyBs b3cgMzQgYml0cwotKyAgKmQwID0gdWludDMyX3QodSA+PiAxNikgJiAweDNGRkZGdTsgICAgICAg ICAgICAgLy8gMTggYml0cwotKyAgKmQxID0gdWludDMyX3QodSkgJiAweEZGRkZ1OyAgICAgICAg ICAgICAgICAgICAgLy8gMTYgYml0cwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6ZW5zdXJlUHJl Zml4ZWRBbGlnbm1lbnQoKSB7Ci0rICBpZiAoKGN1cnJlbnRPZmZzZXQoKSAmIDE1KSA9PSAxMikg ewotKyAgICBhc19ub3AoKTsKLSsgIH0KLSt9Ci0rCi0rLy8gcGFkZGkgUlQsIFJBLCBTSSwgUiAg IChNTFMsIHN1ZmZpeCBvcGNvZGUgMTQgPSBhZGRpKQotKy8vICAgUj0wOiBSVCA9IChSQT09MCA/ IDAgOiBSQSkgKyBzaWduX2V4dGVuZChTSSwgMzQpCi0rLy8gICBSPTE6IFJUID0gQ0lBKHByZWZp eCkgKyBzaWduX2V4dGVuZChTSSwgMzQpICAgKFJBIG11c3QgYmUgcjApCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfcGFkZGkoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGlt bTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKLSsgIE1P Wl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicGFkZGlcdCVzLCVzLCVsbGQsJWQi LCBydC5uYW1lKCksIHJhLm5hbWUoKSwgKGxvbmcgbG9uZylpbW0zNCwKLSsgICAgICAgUiA/IDEg OiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQx KTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPU1MUyov IDIsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICgxNHUgPDwgMjYpIHwgKHVpbnQzMl90 KHJ0LmNvZGUoKSkgPDwgMjEpIHwKLSsgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5j b2RlKCkpIDw8IDE2KSB8IGQxOwotKyAgLy8gUmVzZXJ2YXRpb24gPSBub3AgKHdvcnN0IGNhc2Up ICsgcHJlZml4ICsgc3VmZml4LgotKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMyk7Ci0rICBlbnN1 cmVQcmVmaXhlZEFsaWdubWVudCgpOwotKyAgQnVmZmVyT2Zmc2V0IGJvID0gd3JpdGVJbnN0KHBy ZWZpeCk7Ci0rICB3cml0ZUluc3Qoc3VmZml4KTsKLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7 Ci0rICByZXR1cm4gYm87Ci0rfQotKwotKy8vIHBsZCBSVCwgRChSQSksIFIgICAoOExTLCBzdWZm aXggb3Bjb2RlIDU3KQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BsZChSZWdpc3RlciBy dCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpIHsKLSsgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3Bl dygicGxkXHQlcywlbGxkKCVzKSwlZCIsIHJ0Lm5hbWUoKSwgKGxvbmcgbG9uZylpbW0zNCwgcmEu bmFtZSgpLAotKyAgICAgICBSID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQxOwotKyAgU3Bs aXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93 ZXIxMFByZWZpeCgvKnR5cGU9OExTKi8gMCwgUiwgZDApOwotKyAgdWludDMyX3Qgc3VmZml4ID0g KDU3dSA8PCAyNikgfCAodWludDMyX3QocnQuY29kZSgpKSA8PCAyMSkgfAotKyAgICAgICAgICAg ICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7Ci0rICBtX2J1ZmZlci5l bnRlck5vUG9vbCgzKTsKLSsgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7Ci0rICBCdWZmZXJP ZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKLSsgIHdyaXRlSW5zdChzdWZmaXgpOwotKyAg bV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVybiBibzsKLSt9Ci0rCi0rLy8gcGx4diBY VCwgRChSQSksIFIgICAoOExTLCA1LWJpdCBzdWZmaXggb3Bjb2RlIDI1LCBUWCBpbiBzdWZmaXgg Yml0IDI2KQotKy8vICAgWFQgaXMgNi1iaXQ6IFRYIChoaWdoKSB8fCBUIChsb3cgNSkg4oCUIG1h dGNoZXMgbHh2eCBjb252ZW50aW9uLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BseHYo dWludDhfdCB4dCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pfQVNTRVJUKHh0IDwgNjQpOwotKyAg TU9aX0FTU0VSVF9JRihSLCByYSA9PSByMCk7Ci0rICBzcGV3KCJwbHh2XHR2cyV1LCVsbGQoJXMp LCVkIiwgeHQsIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwKLSsgICAgICAgUiA/IDEgOiAw KTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsK LSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPThMUyovIDAs IFIsIGQwKTsKLSsgIHVpbnQzMl90IFQgPSB4dCAmIDB4MUZ1OwotKyAgdWludDMyX3QgVFggPSAo eHQgPj4gNSkgJiAxdTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICgyNXUgPDwgMjcpIHwgKFRYIDw8 IDI2KSB8IChUIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29k ZSgpKSA8PCAxNikgfCBkMTsKLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOwotKyAgZW5zdXJl UHJlZml4ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVm aXgpOwotKyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwot KyAgcmV0dXJuIGJvOwotK30KLSsKLSsvLyBwbGZkIEZSVCwgRChSQSksIFIgICAoTUxTLCBzdWZm aXggb3Bjb2RlIDUwOyBELWZvcm0tbGlrZSBGUFIgbG9hZCkKLStCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc19wbGZkKEZsb2F0UmVnaXN0ZXIgZnJ0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0z NCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKLSsgIE1PWl9B U1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicGxmZFx0ZiV1LCVsbGQoJXMpLCVkIiwg dWludDMyX3QoZnJ0LmVuY29kaW5nKCkpLAotKyAgICAgICAobG9uZyBsb25nKWltbTM0LCByYS5u YW1lKCksIFIgPyAxIDogMCk7Ci0rICB1aW50MzJfdCBkMCwgZDE7Ci0rICBTcGxpdEltbTM0KGlt bTM0LCAmZDAsICZkMSk7Ci0rICB1aW50MzJfdCBwcmVmaXggPSBFbmNvZGVQb3dlcjEwUHJlZml4 KC8qdHlwZT1NTFMqLyAyLCBSLCBkMCk7Ci0rICB1aW50MzJfdCBzdWZmaXggPSAoNTB1IDw8IDI2 KSB8ICh1aW50MzJfdChmcnQuZW5jb2RpbmcoKSkgPDwgMjEpIHwKLSsgICAgICAgICAgICAgICAg ICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8IGQxOwotKyAgbV9idWZmZXIuZW50ZXJO b1Bvb2woMyk7Ci0rICBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOwotKyAgQnVmZmVyT2Zmc2V0 IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7Ci0rICB3cml0ZUluc3Qoc3VmZml4KTsKLSsgIG1fYnVm ZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICByZXR1cm4gYm87Ci0rfQotKwotKy8vIHBsZnMgRlJULCBE KFJBKSwgUiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgNDg7IHdpZGVucyBzaW5nbGUg4oaSIGRvdWJs ZSBpbiBGUFIpCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcGxmcyhGbG9hdFJlZ2lzdGVy IGZydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKLSsg IHNwZXcoInBsZnNcdGYldSwlbGxkKCVzKSwlZCIsIHVpbnQzMl90KGZydC5lbmNvZGluZygpKSwK LSsgICAgICAgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLCBSID8gMSA6IDApOwotKyAgdWlu dDMyX3QgZDAsIGQxOwotKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOwotKyAgdWludDMy X3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9TUxTKi8gMiwgUiwgZDApOwot KyAgdWludDMyX3Qgc3VmZml4ID0gKDQ4dSA8PCAyNikgfCAodWludDMyX3QoZnJ0LmVuY29kaW5n KCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8 PCAxNikgfCBkMTsKLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOwotKyAgZW5zdXJlUHJlZml4 ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOwot KyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgcmV0 dXJuIGJvOwotK30KLSsKLSsvLyBwc3RkIFJTLCBEKFJBKSwgUiAgICg4TFMsIHN1ZmZpeCBvcGNv ZGUgNjEgPSBzdGQgRC1mb3JtKQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BzdGQoUmVn aXN0ZXIgcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgUikgewotKyAgTU9aX0FTU0VSVF9JRihSLCByYSA9PSByMCk7 Ci0rICBzcGV3KCJwc3RkXHQlcywlbGxkKCVzKSwlZCIsIHJzLm5hbWUoKSwgKGxvbmcgbG9uZylp bW0zNCwgcmEubmFtZSgpLAotKyAgICAgICBSID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQx OwotKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0g RW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9OExTKi8gMCwgUiwgZDApOwotKyAgdWludDMyX3Qg c3VmZml4ID0gKDYxdSA8PCAyNikgfCAodWludDMyX3QocnMuY29kZSgpKSA8PCAyMSkgfAotKyAg ICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7Ci0rICBt X2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKLSsgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7Ci0r ICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKLSsgIHdyaXRlSW5zdChzdWZm aXgpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVybiBibzsKLSt9Ci0rCi0r Ly8gcHN0eHYgWFMsIEQoUkEpLCBSICAgKDhMUywgNS1iaXQgc3VmZml4IG9wY29kZSAyNywgU1gg aW4gc3VmZml4IGJpdCAyNikKLSsvLyAgIFhTIGlzIDYtYml0OiBTWCAoaGlnaCkgfHwgUyAobG93 IDUpIOKAlCBtYXRjaGVzIHN0eHZ4IGNvbnZlbnRpb24uCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfcHN0eHYodWludDhfdCB4cywgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgUikgewotKyAgTU9aX0FTU0VSVCh4 cyA8IDY0KTsKLSsgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicHN0eHZc dHZzJXUsJWxsZCglcyksJWQiLCB4cywgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLAotKyAg ICAgICBSID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQxOwotKyAgU3BsaXRJbW0zNChpbW0z NCwgJmQwLCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgv KnR5cGU9OExTKi8gMCwgUiwgZDApOwotKyAgdWludDMyX3Qgc3ggPSAoeHMgPj4gNSkgJiAxOwot KyAgdWludDMyX3QgcyA9IHhzICYgMHgxRjsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICgyN3UgPDwg MjcpIHwgKHN4IDw8IDI2KSB8IChzIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAodWlu dDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMp OwotKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IHdy aXRlSW5zdChwcmVmaXgpOwotKyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1ZmZlci5sZWF2 ZU5vUG9vbCgpOwotKyAgcmV0dXJuIGJvOwotK30KLSsKLSsvLyBwc3RmZCBGUlMsIEQoUkEpLCBS ICAgKE1MUywgc3VmZml4IG9wY29kZSA1NCA9IHN0ZmQpCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfcHN0ZmQoRmxvYXRSZWdpc3RlciBmcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKLSsgIE1PWl9B U1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicHN0ZmRcdGYldSwlbGxkKCVzKSwlZCIs IHVpbnQzMl90KGZycy5lbmNvZGluZygpKSwKLSsgICAgICAgKGxvbmcgbG9uZylpbW0zNCwgcmEu bmFtZSgpLCBSID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQxOwotKyAgU3BsaXRJbW0zNChp bW0zNCwgJmQwLCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZp eCgvKnR5cGU9TUxTKi8gMiwgUiwgZDApOwotKyAgdWludDMyX3Qgc3VmZml4ID0gKDU0dSA8PCAy NikgfCAodWludDMyX3QoZnJzLmVuY29kaW5nKCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAg ICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKLSsgIG1fYnVmZmVyLmVudGVy Tm9Qb29sKDMpOwotKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNl dCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOwotKyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1 ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgcmV0dXJuIGJvOwotK30KLSsKLSsvLyBwc3RmcyBGUlMs IEQoUkEpLCBSICAgKE1MUywgc3VmZml4IG9wY29kZSA1MiA9IHN0ZnMpCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfcHN0ZnMoRmxvYXRSZWdpc3RlciBmcnMsIFJlZ2lzdGVyIHJhLCBpbnQ2 NF90IGltbTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsK LSsgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicHN0ZnNcdGYldSwlbGxk KCVzKSwlZCIsIHVpbnQzMl90KGZycy5lbmNvZGluZygpKSwKLSsgICAgICAgKGxvbmcgbG9uZylp bW0zNCwgcmEubmFtZSgpLCBSID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQxOwotKyAgU3Bs aXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93 ZXIxMFByZWZpeCgvKnR5cGU9TUxTKi8gMiwgUiwgZDApOwotKyAgdWludDMyX3Qgc3VmZml4ID0g KDUydSA8PCAyNikgfCAodWludDMyX3QoZnJzLmVuY29kaW5nKCkpIDw8IDIxKSB8Ci0rICAgICAg ICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKLSsgIG1fYnVm ZmVyLmVudGVyTm9Qb29sKDMpOwotKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1 ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOwotKyAgd3JpdGVJbnN0KHN1ZmZpeCk7 Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgcmV0dXJuIGJvOwotK30KLSsKLSsvLyBQ T1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgRXh0cmFjdCBNYXNrLiBSVCAoR1BSKSBnZXRzIHRoZSB3 YXNtLXNwZWMKLSsvLyBiaXRtYXNrIChvbmUgYml0IHBlciBsYW5lIE1TQikgZGlyZWN0bHkgaW4g bG93IDE2LzgvNC8yIGJpdHMuIFVJTQotKy8vIGlzIGJha2VkIGludG8gUFBDX3ZleHRyYWN0e2Is aCx3LGR9bSAoOC85LzEwLzExKS4gQ2FsbGVyIG11c3QgaGF2ZQotKy8vIHZlcmlmaWVkIEhhc1BP V0VSMTAoKS4KLSsjZGVmaW5lIERFRl9WRVhUUkFDVF9NKG9wKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc18jI29wKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHZyYikgeyAgICAgICAgXAotKyAg ICBzcGV3KCNvcCAiXHQlcyx2ciV1IiwgcnQubmFtZSgpLCB1aW50MzJfdCh2cmIuZW5jb2Rpbmco KSAmIDMxKSk7ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8ICh1aW50 MzJfdChydC5jb2RlKCkpIDw8IDIxKSB8ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAg ICAgICAgKCh1aW50MzJfdCh2cmIuZW5jb2RpbmcoKSkgJiAzMSkgPDwgMTEpKTsgICAgICAgICAg ICAgXAotKyAgfQotK0RFRl9WRVhUUkFDVF9NKHZleHRyYWN0Ym0pCi0rREVGX1ZFWFRSQUNUX00o dmV4dHJhY3RobSkKLStERUZfVkVYVFJBQ1RfTSh2ZXh0cmFjdHdtKQotK0RFRl9WRVhUUkFDVF9N KHZleHRyYWN0ZG0pCi0rI3VuZGVmIERFRl9WRVhUUkFDVF9NCi0rCi0rLy8gUE9XRVIxMCAoSVNB IDMuMSkgVmVjdG9yIEluc2VydCBXb3JkL0RvdWJsZXdvcmQgZnJvbSBHUFIuIFZYLWZvcm06Ci0r Ly8gVlJUIGF0IGJpdHMgMjEuLjI1LCBVSU0gYXQgYml0cyAxNi4uMjAsIFJCIGF0IGJpdHMgMTEu LjE1LgotKyNkZWZpbmUgREVGX1ZJTlMob3AsIG1heF91aW0pICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz XyMjb3AoRmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lzdGVyIHJiLCAgICAgICAgICBcCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKHVpbSA8PSAobWF4X3VpbSkpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0dnIl dSwlcywldSIsIHVpbnQzMl90KHZydC5lbmNvZGluZygpICYgMzEpLCByYi5uYW1lKCksICAgICBc Ci0rICAgICAgICAgdWludDMyX3QodWltKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICAgICAgICAgICAoKHVpbnQzMl90KHZydC5lbmNvZGluZygpKSAmIDMxKSA8PCAyMSkgfCAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHVpbSkgPDwgMTYpIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICh1 aW50MzJfdChyYi5jb2RlKCkpIDw8IDExKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IH0KLStERUZfVklOUyh2aW5zdywgMTIpCi0rREVGX1ZJTlModmluc2QsIDgpCi0rI3VuZGVmIERF Rl9WSU5TCi0rCi0rLy8gUE9XRVIxMCAoSVNBIDMuMSkgVmVjdG9yIEluc2VydCBieXRlL2hhbGZ3 b3JkIGZyb20gR1BSIHdpdGgKLSsvLyByZWdpc3Rlci1zdXBwbGllZCBieXRlIHBvc2l0aW9uLiBW WC1mb3JtOiBWUlQgYXQgYml0cyAyMS4uMjUsCi0rLy8gUkEgYXQgYml0cyAxNi4uMjAsIFJCIGF0 IGJpdHMgMTEuLjE1LiAicngiIGlzIHJpZ2h0LWluZGV4ZWQKLSsvLyAoTEUtbmF0dXJhbCDigJQg aW5kZXggMCA9IExTQiBieXRlKS4KLSsjZGVmaW5lIERFRl9WSU5TX1JYKG9wKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYSwgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByYikg eyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0dnIldSwlcywl cyIsIHVpbnQzMl90KHZydC5lbmNvZGluZygpICYgMzEpLCByYS5uYW1lKCksICAgICBcCi0rICAg ICAgICAgcmIubmFtZSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KHZydC5lbmNvZGluZygpKSAmIDMxKSA8PCAyMSkgfCAgICAgICAgICAg ICBcCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJf dChyYi5jb2RlKCkpIDw8IDExKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0KLStE RUZfVklOU19SWCh2aW5zYnJ4KQotK0RFRl9WSU5TX1JYKHZpbnNocngpCi0rI3VuZGVmIERFRl9W SU5TX1JYCi0rCi0rLy8gUE9XRVI5IChJU0EgMy4wKSBWLWZvcm0gMy1vcGVyYW5kIGluc3RydWN0 aW9ucyB3aXRoIFZSVCwgVUlNLCBWUkIgYXQKLSsvLyBiaXRzIDIxLi4yNSwgMTYuLjIwLCAxMS4u MTUgcmVzcGVjdGl2ZWx5ICh2aW5zZXJ0e2IsaH0sIHZleHRyYWN0e3ViLHVofSkuCi0rLy8gU2lt ZDEyOCBsaXZlcyBpbiBWU1IzMi02MyAoPSBWUjAtMzEpLCBzbyB3ZSBtYXNrIFZSVCBhbmQgVlJC IHRvIHRoZQotKy8vIDUtYml0IFZSIGZpZWxkIHZpYSBgZW5jb2RpbmcoKSAmIDMxYC4KLSsjZGVm aW5lIERFRl9WUlRfVUlNX1ZSQihvcCwgbWF4X3VpbSwgdWltX3N0ZXApICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9h dFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsICAgIFwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCB1aW0pIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIE1PWl9BU1NFUlQodWltIDw9IChtYXhfdWltKSk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKCh1aW0pICUgKHVpbV9z dGVwKSA9PSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bl dygjb3AgIlx0dnIldSx2ciV1LCV1IiwgdWludDMyX3QodnJ0LmVuY29kaW5nKCkgJiAzMSksICAg ICAgICAgICAgICBcCi0rICAgICAgICAgdWludDMyX3QodnJiLmVuY29kaW5nKCkgJiAzMSksIHVp bnQzMl90KHVpbSkpOyAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0 KFBQQ18jI29wIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KHZydC5lbmNvZGluZygpKSAmIDMxKSA8 PCAyMSkgfCAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHVp bSkgPDwgMTYpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAg ICAgICAgICAgICgodWludDMyX3QodnJiLmVuY29kaW5nKCkpICYgMzEpIDw8IDExKSk7ICAgICAg ICAgICAgIFwKLSsgIH0KLStERUZfVlJUX1VJTV9WUkIodmluc2VydGIsIDE1LCAxKQotK0RFRl9W UlRfVUlNX1ZSQih2aW5zZXJ0aCwgMTQsIDIpCi0rREVGX1ZSVF9VSU1fVlJCKHZleHRyYWN0dWIs IDE1LCAxKQotK0RFRl9WUlRfVUlNX1ZSQih2ZXh0cmFjdHVoLCAxNCwgMikKLSsjdW5kZWYgREVG X1ZSVF9VSU1fVlJCCi0rCi0rLy8gVk1YIGJpbmFyeSBWWC1mb3JtIHBhY2svbWVyZ2UgKHJlLXVz ZSBERUZfVk1YX1ZWViBwYXR0ZXJuKS4KLSsjZGVmaW5lIERFRl9WTVhfVlZWKG9wKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhf dCB2cmIpIHsgXAotKyAgICBNT1pfQVNTRVJUKHZydCA8IDMyICYmIHZyYSA8IDMyICYmIHZyYiA8 IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0dnIlZCx2 ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2 cmIgPDwgMTEpOyAgICAgICAgXAotKyAgfQotK0RFRl9WTVhfVlZWKHZwa3Noc3MpCi0rREVGX1ZN WF9WVlYodnBrc3dzcykgREVGX1ZNWF9WVlYodnBrc2h1cykgREVGX1ZNWF9WVlYodnBrc3d1cykK LSsgICAgREVGX1ZNWF9WVlYodm1yZ2hiKQotKyAgICAgICAgREVGX1ZNWF9WVlYodm1yZ2hoKSBE RUZfVk1YX1ZWVih2bXJnaHcpIERFRl9WTVhfVlZWKHZtcmdsYikKLSsgICAgICAgICAgICBERUZf Vk1YX1ZWVih2bXJnbGgpIERFRl9WTVhfVlZWKHZtcmdsdykgREVGX1ZNWF9WVlYodm11bGVzYikK LSsgICAgICAgICAgICAgICAgREVGX1ZNWF9WVlYodm11bG9zYikgREVGX1ZNWF9WVlYodm11bGV1 YikgREVGX1ZNWF9WVlYodm11bG91YikKLSsgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVlZW KHZtdWxlc2gpIERFRl9WTVhfVlZWKHZtdWxvc2gpCi0rICAgICAgICAgICAgICAgICAgICAgICAg REVGX1ZNWF9WVlYodm11bGV1aCkgREVGX1ZNWF9WVlYodm11bG91aCkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgREVGX1ZNWF9WVlYodm11bGVzdykgREVGX1ZNWF9WVlYodm11bG9zdykK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxldXcpIERF Rl9WTVhfVlZWKHZtdWxvdXcpCi0rI3VuZGVmIERFRl9WTVhfVlZWCi0rCi0rICAgIC8vIHZwZXJt IFZBLWZvcm06ICg0PDwyNikgfCBWUlQ8PDIxIHwgVlJBPDwxNiB8IFZSQjw8MTEgfCBWUkM8PDYg fCBYTwotKyAgICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc192cGVybSh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IHZyYykgewotKyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAz MiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7Ci0rICBzcGV3KCJ2cGVybVx0dnIlZCx2ciVkLHZy JWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ192 cGVybSB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8IHZyYyA8PCA2KTsKLSt9 Ci0rCi0rLy8gVkEtZm9ybSB0ZXJuYXJ5IFZNWDogKDQ8PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2 IHwgVlJCPDwxMSB8IFZSQzw8NiB8Ci0rLy8gWE8oNi1iaXQpCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfdm1sYWRkdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdnJjKSB7Ci0r ICBNT1pfQVNTRVJUKHZydCA8IDMyICYmIHZyYSA8IDMyICYmIHZyYiA8IDMyICYmIHZyYyA8IDMy KTsKLSsgIHNwZXcoInZtbGFkZHVobVx0dnIlZCx2ciVkLHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2 cmIsIHZyYyk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ192bWxhZGR1aG0gfCB2cnQgPDwgMjEg fCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfAotKyAgICAgICAgICAgICAgICAgICB2cmMgPDwgNik7 Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZtaHJhZGRzaHModWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQ4X3QgdnJjKSB7Ci0rICBNT1pfQVNTRVJUKHZydCA8IDMyICYmIHZy YSA8IDMyICYmIHZyYiA8IDMyICYmIHZyYyA8IDMyKTsKLSsgIHNwZXcoInZtaHJhZGRzaHNcdHZy JWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOwotKyAgcmV0dXJuIHdyaXRl SW5zdChQUENfdm1ocmFkZHNocyB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8 Ci0rICAgICAgICAgICAgICAgICAgIHZyYyA8PCA2KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfdm1zdW1zaG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy YiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYykgewot KyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAz Mik7Ci0rICBzcGV3KCJ2bXN1bXNobVx0dnIlZCx2ciVkLHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2 cmIsIHZyYyk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ192bXN1bXNobSB8IHZydCA8PCAyMSB8 IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8Ci0rICAgICAgICAgICAgICAgICAgIHZyYyA8PCA2KTsK LSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdm1zdW11aG0odWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IHZyYykgewotKyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAz MiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7Ci0rICBzcGV3KCJ2bXN1bXVobVx0dnIlZCx2ciVk LHZyJWQsdnIlZCIsIHZydCwgdnJhLCB2cmIsIHZyYyk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQ Q192bXN1bXVobSB8IHZydCA8PCAyMSB8IHZyYSA8PCAxNiB8IHZyYiA8PCAxMSB8Ci0rICAgICAg ICAgICAgICAgICAgIHZyYyA8PCA2KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfdnNwbHRpc2IodWludDhfdCB2cnQsIGludDhfdCBzaW1tNSkgewotKyAgTU9aX0FTU0VSVCh2 cnQgPCAzMik7Ci0rICBNT1pfQVNTRVJUKHNpbW01ID49IC0xNiAmJiBzaW1tNSA8PSAxNSk7Ci0r ICBzcGV3KCJ2c3BsdGlzYlx0dnIlZCwlZCIsIHZydCwgc2ltbTUpOwotKyAgcmV0dXJuIHdyaXRl SW5zdChQUENfdnNwbHRpc2IgfCB1aW50MzJfdCh2cnQpIDw8IDIxIHwKLSsgICAgICAgICAgICAg ICAgICAgKHVpbnQzMl90KHNpbW01KSAmIDB4MUYpIDw8IDE2KTsKLSt9Ci0rCi0rQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfdnNwbHRpc2godWludDhfdCB2cnQsIGludDhfdCBzaW1tNSkgewot KyAgTU9aX0FTU0VSVCh2cnQgPCAzMik7Ci0rICBNT1pfQVNTRVJUKHNpbW01ID49IC0xNiAmJiBz aW1tNSA8PSAxNSk7Ci0rICBzcGV3KCJ2c3BsdGlzaFx0dnIlZCwlZCIsIHZydCwgc2ltbTUpOwot KyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNwbHRpc2ggfCB1aW50MzJfdCh2cnQpIDw8IDIxIHwK LSsgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHNpbW01KSAmIDB4MUYpIDw8IDE2KTsKLSt9 Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnNwbHRpc3codWludDhfdCB2cnQsIGlu dDhfdCBzaW1tNSkgewotKyAgTU9aX0FTU0VSVCh2cnQgPCAzMik7Ci0rICBNT1pfQVNTRVJUKHNp bW01ID49IC0xNiAmJiBzaW1tNSA8PSAxNSk7Ci0rICBzcGV3KCJ2c3BsdGlzd1x0dnIlZCwlZCIs IHZydCwgc2ltbTUpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnNwbHRpc3cgfCB1aW50MzJf dCh2cnQpIDw8IDIxIHwKLSsgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHNpbW01KSAmIDB4 MUYpIDw8IDE2KTsKLSt9Ci0rCi0rLy8gLS0tIENvbnZlbmllbmNlIHBzZXVkby1pbnN0cnVjdGlv bnMgLS0tCi0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfdHJhcCgpIHsKLSsgIHNwZXco InRyYXAgQCAlMDh4IiwgY3VycmVudE9mZnNldCgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBD X3RyYXApOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c190cmFwX3RhZ2dlZChU cmFwVGFnIHRhZykgewotKyAgdWludDMyX3QgdHYgPSBQUENfdHJhcCB8ICgodWludDhfdCl0YWcg PDwgMTYpIHwgKCh1aW50OF90KXRhZyA8PCAxMSk7Ci0rICBzcGV3KCJ0cmFwIEAgJTA4eCA7IE1B UksgJWQgJTA4eCIsIGN1cnJlbnRPZmZzZXQoKSwgKHVpbnQ4X3QpdGFnLCB0dik7Ci0rICByZXR1 cm4gd3JpdGVJbnN0KHR2KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXIo UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7Ci0rICByZXR1cm4gYXNfb3JfKHJkLCByYSwgcmEp OwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tdGN0cihSZWdpc3RlciByYSkg ewotKyAgcmV0dXJuIGFzX210c3ByKChTUFJlZ2lzdGVySUQpc3ByX2N0ciwgcmEpOwotK30KLSsK LStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tdGxyKFJlZ2lzdGVyIHJhKSB7Ci0rICByZXR1 cm4gYXNfbXRzcHIoKFNQUmVnaXN0ZXJJRClzcHJfbHIsIHJhKTsKLSt9Ci0rCi0rQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6eHNfbWZscihSZWdpc3RlciByZCkgewotKyAgcmV0dXJuIGFzX21mc3By KHJkLCAoU1BSZWdpc3RlcklEKXNwcl9scik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OnhzX210Y3IoUmVnaXN0ZXIgcnMpIHsgcmV0dXJuIGFzX210Y3JmKDB4ZmYsIHJzKTsgfQot KwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX21meGVyKFJlZ2lzdGVyIHJhKSB7Ci0rICBy ZXR1cm4gYXNfbWZzcHIocmEsIChTUFJlZ2lzdGVySUQpc3ByX3hlcik7Ci0rfQotKwotK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OnhzX210eGVyKFJlZ2lzdGVyIHJhKSB7Ci0rICByZXR1cm4gYXNf bXRzcHIoKFNQUmVnaXN0ZXJJRClzcHJfeGVyLCByYSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OnhzX2xpKFJlZ2lzdGVyIHJkLCBpbnQxNl90IGltKSB7Ci0rICByZXR1cm4gYXNf YWRkaShyZCwgcjAsIGltLCB0cnVlKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 eHNfbGlzKFJlZ2lzdGVyIHJkLCBpbnQxNl90IGltKSB7Ci0rICByZXR1cm4gYXNfYWRkaXMocmQs IHIwLCBpbSwgdHJ1ZSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6Onhfc3ViaShS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKLSsgIHJldHVybiBhc19hZGRp KHJkLCByYSwgLWltKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9ub3QoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7Ci0rICByZXR1cm4gYXNfbm9yKHJkLCByYSwgcmEpOwot K30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X3Nsd2koUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCBpbnQgbikgewotKyAgTU9aX0FTU0VSVChuID49IDAgJiYgbiA8IDMyKTsKLSsgIHJl dHVybiBhc19ybHdpbm0ocmQsIHJzLCBuLCAwLCAzMSAtIG4pOwotK30KLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjp4X3NsZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbikgewot KyAgcmV0dXJuIGFzX3JsZGljcihyZCwgcnMsIG4sIDYzIC0gbik7Ci0rfQotKwotK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6Onhfc3J3aShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBuKSB7 Ci0rICBNT1pfQVNTRVJUKG4gPj0gMCAmJiBuIDwgMzIpOwotKyAgaWYgKG4gPT0gMCkgewotKyAg ICByZXR1cm4gYXNfcmx3aW5tKHJkLCBycywgMCwgMCwgMzEpOwotKyAgfQotKyAgcmV0dXJuIGFz X3Jsd2lubShyZCwgcnMsIDMyIC0gbiwgbiwgMzEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjp4X3NyZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbikgewotKyAgTU9a X0FTU0VSVChuID49IDAgJiYgbiA8IDY0KTsKLSsgIGlmIChuID09IDApIHsKLSsgICAgcmV0dXJu IGFzX29yXyhyZCwgcnMsIHJzKTsKLSsgIH0KLSsgIHJldHVybiBhc19ybGRpY2wocmQsIHJzLCA2 NCAtIG4sIG4pOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X2JpdF92YWx1ZShS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIHVuc2lnbmVkIGJpdCkgewotKyAgcmV0dXJuIGFzX3Js d2lubShyZCwgcnMsIGJpdCArIDEsIDMxLCAzMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OnhfaW5zZXJ0Yml0czBfMTUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzKSB7Ci0rICBy ZXR1cm4gYXNfcmx3aW1pKHJkLCBycywgMCwgMTYsIDMxKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6eF9zcl9tdWxsaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3Qg aW0pIHsKLSsgIGFzX3NyYWRpKHJkLCByYSwgNjMpOwotKyAgcmV0dXJuIGFzX211bGxpKHJkLCBy ZCwgaW0pOwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6YXNfYnJlYWsodWludDMyX3QgY29kZSkg ewotKyAgc3BldygiYnJlYWtcdCVkIiwgY29kZSk7Ci0rICB3cml0ZUluc3QoUFBDX3RyYXApOwot K30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBMYWJlbCBiaW5kaW5nLCByZXRhcmdldCwg YW5kIGNvZGUgbGFiZWwgcHJvY2Vzc2luZy4KLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSsvLyBG b3J3YXJkLWRlY2xhcmVkIHNoYXBlIGhlbHBlcnM7IGZ1bGwgZGVmaW5pdGlvbnMgYW5kIHRoZSBs YXlvdXQKLSsvLyBjb21tZW50YXJ5IGxpdmUgd2l0aCB0aGUgV3JpdGVMb2FkNjRJbnN0cnVjdGlv bnMgc2VjdGlvbiBiZWxvdy4KLStzdGF0aWMgYm9vbCBJc0FkZHBjaXNMb2FkNjRTdGFuemEodWlu dDMyX3QgZW5jMCk7Ci0rc3RhdGljIHVpbnQ4X3QgTG9hZDY0U3RhbnphRGVzdFJlZyhJbnN0cnVj dGlvbiogaW5zdDApOwotKwotK0luc3RJbW0gQXNzZW1ibGVyOjppbnZlcnRCcmFuY2goSW5zdElt bSBicmFuY2gsIEJPZmZJbW0xNiBza2lwT2Zmc2V0KSB7Ci0rICAvLyBGbGlwIHRoZSBCTyBjb25k aXRpb24tdHJ1ZS9jb25kaXRpb24tZmFsc2UgYml0IChiaXQgMjQpLgotKyAgdWludDMyX3QgZGF0 YSA9IGJyYW5jaC5lbmNvZGUoKTsKLSsgIGRhdGEgPSAoZGF0YSBeIDB4MDEwMDAwMDApICYgMHhG RkZGMDAwMzsKLSsgIGRhdGEgfD0gc2tpcE9mZnNldC5lbmNvZGUoKTsKLSsgIGJyYW5jaC5zZXRE YXRhKGRhdGEpOwotKyAgcmV0dXJuIGJyYW5jaDsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmJp bmQoSW5zdEltbSogaW5zdCwgdWludHB0cl90IGJyYW5jaCwgdWludHB0cl90IHRhcmdldCkgewot KyAgaW50cHRyX3Qgb2Zmc2V0ID0gdGFyZ2V0IC0gYnJhbmNoOwotKyAgSW5zdHJ1Y3Rpb24qIGkw ID0gKEluc3RydWN0aW9uKilpbnN0OwotKwotKyAgaWYgKGkwLT5uZXh0KCktPmVuY29kZSgpID09 IFBQQ19iY2xfYWx3YXlzX3BsdXM0IHx8Ci0rICAgICAgSXNBZGRwY2lzTG9hZDY0U3RhbnphKGkw LT5lbmNvZGUoKSkpIHsKLSsgICAgLy8gUHJlLWV4aXN0aW5nIGxvbmcgc3RhbnphLCBlaXRoZXIg UDggKG1mbHIgKyBiY2wgbWFya2VyIGF0IFsxXSkgb3IKLSsgICAgLy8gUDkrIChhZGRwY2lzIGF0 IFswXTsgbWFqb3Igb3Bjb2RlIDE5KS4gRWl0aGVyIHdheSwganVzdCByZWdpc3RlcgotKyAgICAv LyB0aGUgbG9uZyBqdW1wIOKAlCB0aGUgc3RhbnphJ3MgLnF1YWQgYXQgWzYuLjddIGdldHMgcGF0 Y2hlZCBsYXRlcgotKyAgICAvLyB2aWEgVXBkYXRlTG9hZDY0VmFsdWUuCi0rICAgIGFkZExvbmdK dW1wKEJ1ZmZlck9mZnNldChicmFuY2gpLCBCdWZmZXJPZmZzZXQodGFyZ2V0KSk7Ci0rICAgIHJl dHVybjsKLSsgIH0KLSsKLSsgIGlmIChpMC0+aXNPcGNvZGUoKHVpbnQzMl90KVBQQ190dykpIHsK LSsgICAgLy8gVGFnZ2VkIHRyYXAgc3RhbnphLiBUaGUgdGFnIHRlbGxzIHVzIHdoaWNoIGJyYW5j aCB0eXBlIHdhcyByZXNlcnZlZC4KLSsgICAgVHJhcFRhZyB0YWcgPSAoVHJhcFRhZylpbnN0LT50 cmFwdGFnKCk7Ci0rICAgIEluc3RydWN0aW9uKiBpMSA9IGkwLT5uZXh0KCk7Ci0rICAgIEluc3Ry dWN0aW9uKiBpMiA9IGkxLT5uZXh0KCk7Ci0rICAgIEluc3RydWN0aW9uKiBpMyA9IGkyLT5uZXh0 KCk7Ci0rICAgIEluc3RydWN0aW9uKiBpNCA9IGkzLT5uZXh0KCk7Ci0rICAgIEluc3RydWN0aW9u KiBpNSA9IGk0LT5uZXh0KCk7Ci0rICAgIEluc3RydWN0aW9uKiBpNiA9IGk1LT5uZXh0KCk7Ci0r ICAgIEluc3RydWN0aW9uKiBpNyA9IGk2LT5uZXh0KCk7Ci0rICAgIEluc3RydWN0aW9uKiBpOCA9 IGk3LT5uZXh0KCk7Ci0rICAgIEluc3RydWN0aW9uKiBpOSA9IGk4LT5uZXh0KCk7Ci0rCi0rICAg IHN3aXRjaCAodGFnKSB7Ci0rICAgICAgY2FzZSBCQ1RhZzogewotKyAgICAgICAgLy8gaW5zdFst MV0gaXMgdGhlIG9yaWdpbmFsIGJjIGluc3RydWN0aW9uLgotKyAgICAgICAgSW5zdHJ1Y3Rpb24q IGJjID0gaTAgLSAxOwotKyAgICAgICAgLy8gVHJ5IHNob3J0IGJjIChvZmZzZXQgKyA0IGJlY2F1 c2UgYmMgaXMgb25lIGluc3RydWN0aW9uIGJlZm9yZSB0dykuCi0rICAgICAgICBpZiAoQk9mZklt bTE2OjpJc0luUmFuZ2Uob2Zmc2V0ICsgKGludHB0cl90KXNpemVvZih1aW50MzJfdCkpKSB7Ci0r ICAgICAgICAgIGJjLT5zZXREYXRhKCgoYmMtPmVuY29kZSgpIF4gMHgwMTAwMDAwMCkgJiAweEZG RkYwMDAzKSB8Ci0rICAgICAgICAgICAgICAgICAgICAgIEJPZmZJbW0xNihvZmZzZXQgKyBzaXpl b2YodWludDMyX3QpKS5lbmNvZGUoKSk7Ci0rICAgICAgICAgIGkwLT5tYWtlTm9wKCk7Ci0rICAg ICAgICAgIGkxLT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGkyLT5tYWtlTm9wKCk7Ci0rICAgICAg ICAgIGkzLT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk0LT5tYWtlTm9wKCk7Ci0rICAgICAgICAg IGk1LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk2LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk3 LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk4LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk5LT5t YWtlTm9wKCk7Ci0rICAgICAgICAgIHJldHVybjsKLSsgICAgICAgIH0KLSsgICAgICAgIC8vIFRy eSBzaG9ydCBiICh1bmNvbmRpdGlvbmFsKS4KLSsgICAgICAgIGlmIChKT2ZmSW1tMjY6OklzSW5S YW5nZShvZmZzZXQpKSB7Ci0rICAgICAgICAgIGkwLT5zZXREYXRhKFBQQ19iIHwgSk9mZkltbTI2 KG9mZnNldCkuZW5jb2RlKCkpOwotKyAgICAgICAgICBpMS0+bWFrZU5vcCgpOwotKyAgICAgICAg ICBpMi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMy0+bWFrZU5vcCgpOwotKyAgICAgICAgICBp NC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNS0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNi0+ bWFrZU5vcCgpOwotKyAgICAgICAgICBpNy0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpOC0+bWFr ZU5vcCgpOwotKyAgICAgICAgICBpOS0+bWFrZU5vcCgpOwotKyAgICAgICAgICByZXR1cm47Ci0r ICAgICAgICB9Ci0rICAgICAgICAvLyBMb25nOiBXcml0ZUxvYWQ2NCB0byBTZWNvbmRTY3JhdGNo UmVnICsgbXRjdHIgKyBiY3RyLgotKyAgICAgICAgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGJy YW5jaCksIEJ1ZmZlck9mZnNldCh0YXJnZXQpKTsKLSsgICAgICAgIFdyaXRlTG9hZDY0SW5zdHJ1 Y3Rpb25zKGkwLCBTZWNvbmRTY3JhdGNoUmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgICAgICBpOC0+bWFrZU9wX210 Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOwotKyAgICAgICAgaTktPm1ha2VPcF9iY3RyKCk7Ci0rICAg ICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBDYWxsVGFnOiB7Ci0rICAgICAgICAv LyBGb3IgY2FsbHMsIHRoZSBhY3R1YWwgY2FsbCBpbnN0cnVjdGlvbiBnb2VzIGF0IGluc3RbOV0g YW5kCi0rICAgICAgICAvLyB0aGUgcmV0dXJuIGFkZHJlc3MgbXVzdCBiZSBhZnRlciB0aGUgc3Rh bnphLgotKyAgICAgICAgaW50cHRyX3QgY2FsbE9mZnNldCA9IG9mZnNldCAtIDkgKiAoaW50cHRy X3Qpc2l6ZW9mKHVpbnQzMl90KTsKLSsgICAgICAgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShj YWxsT2Zmc2V0KSkgewotKyAgICAgICAgICBpMC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMS0+ bWFrZU5vcCgpOwotKyAgICAgICAgICBpMi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMy0+bWFr ZU5vcCgpOwotKyAgICAgICAgICBpNC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNS0+bWFrZU5v cCgpOwotKyAgICAgICAgICBpNi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNy0+bWFrZU5vcCgp OwotKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpOS0+c2V0RGF0YShQUENf YiB8IEpPZmZJbW0yNihjYWxsT2Zmc2V0KS5lbmNvZGUoKSB8IExpbmtCKTsKLSsgICAgICAgICAg cmV0dXJuOwotKyAgICAgICAgfQotKyAgICAgICAgLy8gTG9uZzogV3JpdGVMb2FkNjQgdG8gU2Vj b25kU2NyYXRjaFJlZyArIG10Y3RyICsgYmN0cmwuCi0rICAgICAgICBhZGRMb25nSnVtcChCdWZm ZXJPZmZzZXQoYnJhbmNoKSwgQnVmZmVyT2Zmc2V0KHRhcmdldCkpOwotKyAgICAgICAgV3JpdGVM b2FkNjRJbnN0cnVjdGlvbnMoaTAsIFNlY29uZFNjcmF0Y2hSZWcsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKLSsgICAgICAgIGk4 LT5tYWtlT3BfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7Ci0rICAgICAgICBpOS0+bWFrZU9wX2Jj dHIoTGlua0IpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgQlRhZzog ewotKyAgICAgICAgaWYgKEpPZmZJbW0yNjo6SXNJblJhbmdlKG9mZnNldCkpIHsKLSsgICAgICAg ICAgaTAtPnNldERhdGEoUFBDX2IgfCBKT2ZmSW1tMjYob2Zmc2V0KS5lbmNvZGUoKSk7Ci0rICAg ICAgICAgIGkxLT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGkyLT5tYWtlTm9wKCk7Ci0rICAgICAg ICAgIGkzLT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk0LT5tYWtlTm9wKCk7Ci0rICAgICAgICAg IGk1LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk2LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk3 LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk4LT5tYWtlTm9wKCk7Ci0rICAgICAgICAgIGk5LT5t YWtlTm9wKCk7Ci0rICAgICAgICAgIHJldHVybjsKLSsgICAgICAgIH0KLSsgICAgICAgIC8vIExv bmc6IFdyaXRlTG9hZDY0IHRvIFNlY29uZFNjcmF0Y2hSZWcgKyBtdGN0ciArIGJjdHIuCi0rICAg ICAgICBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQoYnJhbmNoKSwgQnVmZmVyT2Zmc2V0KHRhcmdl dCkpOwotKyAgICAgICAgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaTAsIFNlY29uZFNjcmF0Y2hS ZWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbEJhc2U6OklOVkFMSURf T0ZGU0VUKTsKLSsgICAgICAgIGk4LT5tYWtlT3BfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7Ci0r ICAgICAgICBpOS0+bWFrZU9wX2JjdHIoKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsg ICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIFRyYXBUYWciKTsK LSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBpZiAoaTAtPmlzT3Bjb2RlKFBQQ19i KSkgewotKyAgICAvLyBTaG9ydCB1bmNvbmRpdGlvbmFsIGJyYW5jaCDigJQgc2V0IG9mZnNldCwg bm9wIG5leHQtaW4tY2hhaW4gc2xvdC4KLSsgICAgTU9aX0FTU0VSVChKT2ZmSW1tMjY6OklzSW5S YW5nZShvZmZzZXQpKTsKLSsgICAgaTAtPnNldERhdGEoKGkwLT5lbmNvZGUoKSAmIH4weDAzRkZG RkZDKSB8IEpPZmZJbW0yNihvZmZzZXQpLmVuY29kZSgpKTsKLSsgICAgaTAtPm5leHQoKS0+bWFr ZU5vcCgpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBpZiAoaTAtPmlzT3Bjb2RlKFBQQ19i YykpIHsKLSsgICAgLy8gU2hvcnQgY29uZGl0aW9uYWwgYnJhbmNoIOKAlCBwcmVzZXJ2ZSB1cHBl ciAxNiBiaXRzLCBzZXQgb2Zmc2V0LgotKyAgICBNT1pfQVNTRVJUKEJPZmZJbW0xNjo6SXNJblJh bmdlKG9mZnNldCkpOwotKyAgICBpMC0+c2V0RGF0YSgoaTAtPmVuY29kZSgpICYgMHhGRkZGMDAw MykgfCBCT2ZmSW1tMTYob2Zmc2V0KS5lbmNvZGUoKSk7Ci0rICAgIGkwLT5uZXh0KCktPm1ha2VO b3AoKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIGlu c3RydWN0aW9uIGluIGJpbmQiKTsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmJpbmQoTGFiZWwq IGxhYmVsLCBCdWZmZXJPZmZzZXQgYm9mZikgewotKyAgaWYgKGxhYmVsLT51c2VkKCkpIHsKLSsg ICAgYm9vbCBtb3JlOwotKyAgICBCdWZmZXJPZmZzZXQgYihsYWJlbCk7Ci0rICAgIGRvIHsKLSsg ICAgICBCdWZmZXJPZmZzZXQgbmV4dDsKLSsgICAgICBJbnN0SW1tKiBpbnN0ID0gKEluc3RJbW0q KWVkaXRTcmMoYik7Ci0rICAgICAgSW5zdHJ1Y3Rpb24qIGkxID0gKChJbnN0cnVjdGlvbiopaW5z dCktPm5leHQoKTsKLSsgICAgICBtb3JlID0gKGkxLT5lbmNvZGUoKSAhPSBMYWJlbEJhc2U6OklO VkFMSURfT0ZGU0VUKTsKLSsgICAgICBpZiAobW9yZSkgewotKyAgICAgICAgbmV4dCA9IEJ1ZmZl ck9mZnNldChpMS0+ZW5jb2RlKCkpOwotKyAgICAgIH0KLSsgICAgICBiaW5kKGluc3QsIGIuZ2V0 T2Zmc2V0KCksIGJvZmYuZ2V0T2Zmc2V0KCkpOwotKyAgICAgIGIgPSBuZXh0OwotKyAgICB9IHdo aWxlIChtb3JlKTsKLSsgIH0KLSsgIGxhYmVsLT5iaW5kKGJvZmYuZ2V0T2Zmc2V0KCkpOwotK30K LSsKLSt2b2lkIEFzc2VtYmxlcjo6cmV0YXJnZXQoTGFiZWwqIGxhYmVsLCBMYWJlbCogdGFyZ2V0 KSB7Ci0rICBzcGV3KCJyZXRhcmdldCIpOwotKyAgaWYgKGxhYmVsLT51c2VkKCkgJiYgIW9vbSgp KSB7Ci0rICAgIGlmICh0YXJnZXQtPmJvdW5kKCkpIHsKLSsgICAgICBiaW5kKGxhYmVsLCBCdWZm ZXJPZmZzZXQodGFyZ2V0KSk7Ci0rICAgIH0gZWxzZSBpZiAodGFyZ2V0LT51c2VkKCkpIHsKLSsg ICAgICAvLyBQcmVwZW5kIGxhYmVsJ3MgdXNlIGNoYWluIHRvIHRhcmdldCdzIHVzZSBjaGFpbi4K LSsgICAgICBCdWZmZXJPZmZzZXQgYihsYWJlbCk7Ci0rICAgICAgQnVmZmVyT2Zmc2V0IG5leHQ7 Ci0rICAgICAgZG8gewotKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24q KWVkaXRTcmMoYik7Ci0rICAgICAgICBJbnN0cnVjdGlvbiogaTEgPSBpbnN0LT5uZXh0KCk7Ci0r ICAgICAgICBpZiAoaTEtPmVuY29kZSgpICE9IExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpIHsK LSsgICAgICAgICAgbmV4dCA9IEJ1ZmZlck9mZnNldChpMS0+ZW5jb2RlKCkpOwotKyAgICAgICAg fSBlbHNlIHsKLSsgICAgICAgICAgLy8gRW5kIG9mIGxhYmVsJ3MgY2hhaW4g4oCUIGxpbmsgdG8g dGFyZ2V0J3MgaGVhZC4KLSsgICAgICAgICAgaTEtPnNldERhdGEodGFyZ2V0LT5vZmZzZXQoKSk7 Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgfQotKyAgICAgICAgYiA9IG5leHQ7Ci0rICAg ICAgfSB3aGlsZSAodHJ1ZSk7Ci0rICAgIH0KLSsgICAgLy8gVHJhbnNmZXIgbGFiZWwncyB1c2Ug bGlzdCB0byB0YXJnZXQuCi0rICAgIGlmICghdGFyZ2V0LT5ib3VuZCgpKSB7Ci0rICAgICAgdGFy Z2V0LT51c2UobGFiZWwtPm9mZnNldCgpKTsKLSsgICAgfQotKyAgfQotKyAgbGFiZWwtPnJlc2V0 KCk7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpwcm9jZXNzQ29kZUxhYmVscyh1aW50OF90KiBy YXdDb2RlKSB7Ci0rICBmb3IgKGNvbnN0IENvZGVMYWJlbCYgbGFiZWwgOiBjb2RlTGFiZWxzXykg ewotKyAgICBCaW5kKHJhd0NvZGUsIGxhYmVsKTsKLSsgIH0KLSt9Ci0rCi0rLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rLy8gTG9hZDY0IGluc3RydWN0aW9uIHNlcXVlbmNlICg4IHNsb3RzLCBsaXRlcmFs IHBvb2wgZm9ybWF0KToKLSsvLyAgIFswXSBtZmxyIHIwICAgICAgICAgICAg4oCUIHNhdmUgTFIK LSsvLyAgIFsxXSBiY2wgMjAsMCwuKzQgICAgICDigJQgTFIgPSBhZGRyZXNzIG9mIFsyXQotKy8v ICAgWzJdIG1mbHIgckQgICAgICAgICAgICDigJQgckQgPSBhZGRyZXNzIG9mIFsyXQotKy8vICAg WzNdIG10bHIgcjAgICAgICAgICAgICDigJQgcmVzdG9yZSBMUgotKy8vICAgWzRdIGxkIHJELCAx NihyRCkgICAgICDigJQgbG9hZCBmcm9tIFs2Li43XSAob2Zmc2V0ID0gMjQgLSA4ID0gMTYpCi0r Ly8gICBbNV0gYiAuKzEyICAgICAgICAgICAgIOKAlCBza2lwIGRhdGEKLSsvLyAgIFs2Li43XSAu cXVhZCBWQUxVRSAgICAg4oCUIDgtYnl0ZSBkYXRhCi0rLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gQ29uc3RhbnQgcG9vbCBjYWxsYmFja3MgKHJlcXVpcmVk IGJ5IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzKS4KLSsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsKLSsvKiBzdGF0aWMgKi8KLSt2b2lkIEFzc2VtYmxlcjo6SW5zZXJ0SW5kZXhJbnRvVGFn KHVpbnQ4X3QqIGxvYWQsIHVpbnQzMl90IGluZGV4KSB7Ci0rICAvLyBTdGFzaCB0aGUgcG9vbCBl bnRyeSBpbmRleCBpbiB0aGUgaGludCB3b3JkJ3MgbG93IDE2IGJpdHM7IHRoZSBoaWdoCi0rICAv LyBiaXRzIGNhcnJ5IHRoZSBkZXN0IHJlZyBhbmQgbG9hZCB0eXBlLCBjb25zdW1lZCBieQotKyAg Ly8gUGF0Y2hDb25zdGFudFBvb2xMb2FkIHdoZW4gdGhlIHBvb2wgaXMgcmVzb2x2ZWQuCi0rICB1 aW50MzJfdCogaW5zdCA9ICh1aW50MzJfdCopbG9hZDsKLSsgICppbnN0ID0gKCppbnN0ICYgMHhG RkZGMDAwMCkgfCAoaW5kZXggJiAweEZGRkYpOwotK30KLSsKLSsvKiBzdGF0aWMgKi8KLStib29s IEFzc2VtYmxlcjo6UGF0Y2hDb25zdGFudFBvb2xMb2FkKHZvaWQqIGxvYWRBZGRyLCB2b2lkKiBj b25zdFBvb2xBZGRyKSB7Ci0rICAvLyBSZXdyaXRlIHBsYWNlaG9sZGVyIGluc3RydWN0aW9ucyB3 aXRoIGEgcG9vbCBsb2FkIHNlcXVlbmNlLgotKyAgLy8gSGludCB3b3JkIGxheW91dCAoc2V0IGJ5 IGxvYWRGcm9tUG9vbEZsb2F0NjQgLyBsb2FkRnJvbVBvb2xGbG9hdDMyIC8KLSsgIC8vIGxvYWRG cm9tUG9vbFNpbWQxMjgpOgotKyAgLy8gICBiaXRzIDAtMTU6ICBwb29sIGVudHJ5IGluZGV4Ci0r ICAvLyAgIGJpdHMgMTYtMjA6IGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChGUFIgZW5jb2RpbmcpCi0r ICAvLyAgIGJpdHMgMjEtMjI6IGxvYWQgdHlwZSAoUG9vbExvYWRGUFI2NCwgUG9vbExvYWRTaW1k MTI4LCBQb29sTG9hZEZQUjMyKQotKyAgLy8gICBiaXRzIDI4LTMxOiBzZW50aW5lbCAweEYKLSsK LSsgIHVpbnQzMl90KiBpbnN0ID0gKHVpbnQzMl90Kilsb2FkQWRkcjsKLSsKLSsgIHVpbnQzMl90 IGhpbnQgPSBpbnN0WzBdOwotKyAgdWludDMyX3QgaW5kZXggPSBoaW50ICYgMHhGRkZGOwotKyAg dWludDMyX3QgZGVzdFJlZyA9IChoaW50ID4+IDE2KSAmIDB4MUY7Ci0rICB1aW50MzJfdCBsb2Fk VHlwZSA9IChoaW50ID4+IDIxKSAmIDB4MzsKLSsKLSsgIC8vIERpc3BsYWNlbWVudDogcG9vbCBl bnRyeSBhZGRyZXNzIHJlbGF0aXZlIHRvIGluc3RbMV0gKG1mbHIgdGFyZ2V0KSBmb3IgdGhlCi0r ICAvLyBiY2wgcGF0aCwgb3IgcmVsYXRpdmUgdG8gaW5zdFswXSs0IChhZGRwY2lzIHRhcmdldCA9 IENJQSs0LCB3aGljaCBpcyB0aGUKLSsgIC8vIGFkZHJlc3Mgb2YgaW5zdFsxXSkgZm9yIHRoZSBh ZGRwY2lzIHBhdGguIEJvdGggY29udmVudGlvbnMgcmVzb2x2ZSB0byB0aGUKLSsgIC8vIHNhbWUg dmFsdWU6IChwb29sIGVudHJ5KSDiiJIgKGxvYWRBZGRyICsgNCkuCi0rICBpbnQzMl90IGRpc3Bs YWNlbWVudCA9Ci0rICAgICAgKGludDMyX3QpKCh1aW50OF90Kiljb25zdFBvb2xBZGRyICsgaW5k ZXggKiA0IC0gKCh1aW50OF90Kilsb2FkQWRkciArIDQpKTsKLSsKLSsgIGlmIChsb2FkVHlwZSA9 PSBQb29sTG9hZEZQUjY0IHx8IGxvYWRUeXBlID09IFBvb2xMb2FkRlBSMzIpIHsKLSsgICAgLy8g VGhyZWUgZW1pc3Npb24gcGF0aHM6Ci0rICAgIC8vCi0rICAgIC8vIFBPV0VSMTAgKHByZWZlcnJl ZCk6IHBsZmQvcGxmcyBGUlQsIFNJKDApLCBSPTEg4oCUIHNpbmdsZSBQQy1yZWxhdGl2ZQotKyAg ICAvLyAgIHByZWZpeGVkIEZQIGxvYWQuIDggYnl0ZXMgPSAyIHNsb3RzOyBzbG90IDIgYmVjb21l cyBhIG5vcC4gSWYKLSsgICAgLy8gICBsb2FkQWRkciAlIDY0ID09IDYwLCBwbGZkIHdvdWxkIHN0 cmFkZGxlIGEgNjQtYnl0ZSBibG9jaywgc28gZW1pdAotKyAgICAvLyAgIGEgbGVhZGluZyBub3Ag YXQgc2xvdCAwIGFuZCBwbGFjZSBwbGZkIGF0IHNsb3RzIDEtMiBpbnN0ZWFkLgotKyAgICAvLyAg IFJlYWNoOiDCsTggR0IgKDM0LWJpdCBzaWduZWQpLiBObyBMUiBjbG9iYmVyLCBubyByMTYgYmFz ZS4KLSsgICAgLy8KLSsgICAgLy8gUE9XRVI5OiBhZGRwY2lzICsgbGZkL2xmcyArIG5vcC4gMiBy ZWFsIGluc25zLCBubyBMUiBjbG9iYmVyLCBubwotKyAgICAvLyAgIFJldHVybiBBZGRyZXNzIFN0 YWNrIGNvcnJ1cHRpb24uIEJhc2UgcmVnaXN0ZXIgaXMgcjE2LgotKyAgICAvLyAgIERpc3BsYWNl bWVudCBzcGxpdHMgaW50byAoaGkgPDwgMTYpICsgbG8gd2hlcmUgbG8gaXMgdGhlIDE2LWJpdAot KyAgICAvLyAgIHNpZ25lZCBELWZpZWxkIG9mIGxmZC9sZnMuIFJlYWNoOiDCsTIgR0IuCi0rICAg IC8vCi0rICAgIC8vIFBPV0VSODogYmNsICsgbWZsciByMTYgKyBsZmQvbGZzLiBTYW1lIGNsb2Ji ZXIgKyBSQVMgY2F2ZWF0IGFzIGJlZm9yZS4KLSsgICAgLy8gICBLZXB0IGFzIGEgY29ycmVjdG5l c3MgZmFsbGJhY2s7IG5vdCBleGVyY2lzZWQgdG9kYXkgYmVjYXVzZSB0aGUKLSsgICAgLy8gICBs b2FkQ29uc3RhbnREb3VibGUvRmxvYXQzMiB3cmFwcGVycyBza2lwIHRoZSBwb29sIG9uIFBPV0VS OC4KLSsgICAgLy8KLSsgICAgLy8gbGZzL3BsZnMgKDMyLWJpdCkgYXV0by1leHBhbmQgdGhlaXIg cmVzdWx0IHRvIGRvdWJsZS1wcmVjaXNpb24gaW4gdGhlCi0rICAgIC8vIEZQUiwgcmVwbGFjaW5n IHRoZSBub24tcG9vbCBwYXRoJ3Mgc2VwYXJhdGUgeHNjdnNwZHBuIHN0ZXAuCi0rICAgIHVpbnQz Ml90IGJhc2VSZWcgPSBTYXZlZFNjcmF0Y2hSZWdpc3Rlci5jb2RlKCk7Ci0rICAgIHVpbnQzMl90 IGxvYWRPcCA9IChsb2FkVHlwZSA9PSBQb29sTG9hZEZQUjY0KSA/IFBQQ19sZmQgOiBQUENfbGZz OwotKwotKyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgICAgLy8gTUxTIHByZWZpeGVkIEZQ IGxvYWQuIHBsZmQgc3VmZml4IG9wY29kZSA9IDUwLCBwbGZzID0gNDguIFNhbWUKLSsgICAgICAv LyBhbGlnbm1lbnQtZHJpdmVuIHNsb3QgcGxhY2VtZW50IGFzIFBvb2xMb2FkU2ltZDEyOCBhYm92 ZS4KLSsgICAgICB1aW50NjRfdCBsb2FkQWRkckJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ2 NF90Pihsb2FkQWRkcik7Ci0rICAgICAgLy8gbG9hZEFkZHIgaXMgdGhlIGJ1ZmZlci10aW1lIHBv aW50ZXI7IHRoZSBmaW5hbCBleGVjdXRhYmxlIGJhc2UgaXMKLSsgICAgICAvLyBvbmx5IDE2LWJ5 dGUgYWxpZ25lZCwgc28gdGhlIHVuc2FmZSBzdHJhZGRsZSBpcyB3aGVuCi0rICAgICAgLy8gKGxv YWRBZGRyQml0cyAmIDE1KSA9PSAxMiAobWF0Y2hlcyBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCBh Ym92ZSkuCi0rICAgICAgYm9vbCBuZWVkTGVhZGluZ05vcCA9IChsb2FkQWRkckJpdHMgJiAxNSkg PT0gMTI7Ci0rICAgICAgaW50IHByZWZpeFNsb3QgPSBuZWVkTGVhZGluZ05vcCA/IDEgOiAwOwot KyAgICAgIGludCBwcmVmaXhCeXRlT2Zmc2V0ID0gcHJlZml4U2xvdCAqIDQ7Ci0rICAgICAgaW50 NjRfdCBTSSA9IGludDY0X3QoZGlzcGxhY2VtZW50KSArIDQgLSBwcmVmaXhCeXRlT2Zmc2V0Owot KyAgICAgIE1PWl9BU1NFUlQoU0kgPj0gLShpbnQ2NF90KDEpIDw8IDMzKSAmJiBTSSA8IChpbnQ2 NF90KDEpIDw8IDMzKSk7Ci0rICAgICAgdWludDMyX3QgZDAgPSB1aW50MzJfdCgodWludDY0X3Qo U0kpID4+IDE2KSAmIDB4M0ZGRkZ1KTsKLSsgICAgICB1aW50MzJfdCBkMSA9IHVpbnQzMl90KHVp bnQ2NF90KFNJKSAmIDB4RkZGRnUpOwotKyAgICAgIC8vIFR5cGUgMiAoTUxTKSwgUj0xLCBSQT0w LgotKyAgICAgIHVpbnQzMl90IHByZWZpeCA9Ci0rICAgICAgICAgICgxdSA8PCAyNikgfCAoMnUg PDwgMjQpIHwgKDF1IDw8IDIwKSB8IChkMCAmIDB4M0ZGRkZ1KTsKLSsgICAgICB1aW50MzJfdCBz dWZmaXhPcCA9IChsb2FkVHlwZSA9PSBQb29sTG9hZEZQUjY0KSA/IDUwdSA6IDQ4dTsKLSsgICAg ICB1aW50MzJfdCBzdWZmaXggPSAoc3VmZml4T3AgPDwgMjYpIHwgKGRlc3RSZWcgPDwgMjEpIHwg ZDE7Ci0rCi0rICAgICAgaWYgKG5lZWRMZWFkaW5nTm9wKSB7Ci0rICAgICAgICBpbnN0WzBdID0g Tm9wSW5zdDsKLSsgICAgICAgIGluc3RbMV0gPSBwcmVmaXg7Ci0rICAgICAgICBpbnN0WzJdID0g c3VmZml4OwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBpbnN0WzBdID0gcHJlZml4OwotKyAg ICAgICAgaW5zdFsxXSA9IHN1ZmZpeDsKLSsgICAgICAgIGluc3RbMl0gPSBOb3BJbnN0OwotKyAg ICAgIH0KLSsgICAgfSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAgIC8vIFNwbGl0IGRp c3BsYWNlbWVudCBpbnRvIGFkZHBjaXMgaGkgZmllbGQgYW5kIGxmZC9sZnMgbG8gZmllbGQgc28g dGhhdAotKyAgICAgIC8vICAgdGFyZ2V0ID0gKENJQSArIDQpICsgKGhpIDw8IDE2KSArIFNFWFQx NihsbykuCi0rICAgICAgLy8gT25seSAyIHNsb3RzIGFyZSByZXNlcnZlZCBvbiBQOSAobG9hZEZy b21Qb29sRmxvYXR7MzIsNjR9IGFib3ZlKTsKLSsgICAgICAvLyBkbyBOT1QgdG91Y2ggaW5zdFsy XSwgaXQgYmVsb25ncyB0byB0aGUgbmV4dCBlbnRyeS4KLSsgICAgICBpbnQxNl90IGxvID0gKGlu dDE2X3QpKGRpc3BsYWNlbWVudCAmIDB4RkZGRik7Ci0rICAgICAgaW50MzJfdCBoaUFkaiA9IGRp c3BsYWNlbWVudCAtIGxvOwotKyAgICAgIE1PWl9BU1NFUlQoKGhpQWRqICYgMHhGRkZGKSA9PSAw KTsKLSsgICAgICBpbnQzMl90IGhpID0gaGlBZGogPj4gMTY7Ci0rICAgICAgTU9aX0FTU0VSVCho aSA+PSAtMzI3NjggJiYgaGkgPD0gMzI3NjcpOwotKyAgICAgIC8vIFswXSBhZGRwY2lzIHIxNiwg aGkKLSsgICAgICB1aW50MzJfdCBEaGkgPSB1aW50MTZfdChoaSk7Ci0rICAgICAgaW5zdFswXSA9 ICgxOXUgPDwgMjYpIHwgKGJhc2VSZWcgPDwgMjEpIHwgKChEaGkgPj4gMSkgJiAweDFGKSA8PCAx NiB8Ci0rICAgICAgICAgICAgICAgICgoRGhpID4+IDYpICYgMHgzRkYpIDw8IDYgfCAoMnUgPDwg MSkgfCAoRGhpICYgMXUpOwotKyAgICAgIC8vIFsxXSBsZmQvbGZzIGZELCBsbyhyMTYpCi0rICAg ICAgaW5zdFsxXSA9IGxvYWRPcCB8IChkZXN0UmVnIDw8IDIxKSB8IChiYXNlUmVnIDw8IDE2KSB8 ICh1aW50MTZfdChsbykpOwotKyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9BU1NFUlQoZGlzcGxh Y2VtZW50ID49IC0zMjc2OCAmJiBkaXNwbGFjZW1lbnQgPCAzMjc2OCk7Ci0rICAgICAgLy8gWzBd IGJjbCAyMCwwLCQrNAotKyAgICAgIGluc3RbMF0gPSBQUENfYmNsX2Fsd2F5c19wbHVzNDsKLSsg ICAgICAvLyBbMV0gbWZsciByMTYKLSsgICAgICBpbnN0WzFdID0gUFBDX21mc3ByIHwgKGJhc2VS ZWcgPDwgMjEpIHwgUFBDX1NQUihzcHJfbHIpOwotKyAgICAgIC8vIFsyXSBsZmQvbGZzIGZELCBk aXNwbGFjZW1lbnQocjE2KQotKyAgICAgIGluc3RbMl0gPQotKyAgICAgICAgICBsb2FkT3AgfCAo ZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikgfCAoZGlzcGxhY2VtZW50ICYgMHhGRkZG KTsKLSsgICAgfQotKyAgfSBlbHNlIGlmIChsb2FkVHlwZSA9PSBQb29sTG9hZFNpbWQxMjgpIHsK LSsgICAgLy8gVGhyZWUgZW1pc3Npb24gcGF0aHMgKDUgc2xvdHMgcmVzZXJ2ZWQgYnkgbG9hZEZy b21Qb29sU2ltZDEyOCk6Ci0rICAgIC8vCi0rICAgIC8vIFBPV0VSMTAgKHByZWZlcnJlZCk6IHBs eHYgdnNELCBTSSgwKSwgUj0xIOKAlCBzaW5nbGUgUEMtcmVsYXRpdmUKLSsgICAgLy8gICBwcmVm aXhlZCBsb2FkLCBuYXR1cmFsLUxFIGJ5dGUgb3JkZXIgKG5vIHh4cGVybWRpIG5lZWRlZCkuIDgg Ynl0ZXMKLSsgICAgLy8gICA9IDIgc2xvdHM7IHNsb3RzIDItNCBiZWNvbWUgbm9wcy4gSWYgdGhl IHByZWZpeCB3b3VsZCBzdHJhZGRsZSBhCi0rICAgIC8vICAgNjQtYnl0ZSBibG9jayAobG9hZEFk ZHIgJSA2NCA9PSA2MCksIGVtaXQgYSBsZWFkaW5nIG5vcCBhdCBzbG90IDAKLSsgICAgLy8gICBh bmQgcGxhY2UgcGx4diBhdCBzbG90cyAxLTIgaW5zdGVhZC4gUmVhY2g6IMKxOCBHQiAoMzQtYml0 IHNpZ25lZCkuCi0rICAgIC8vCi0rICAgIC8vIFBPV0VSOTogYWRkcGNpcy1lcXVpdmFsZW50IHZp YSBiY2wgKyBtZmxyICsgYWRkaSArIGx4dnggKyBub3AuIDUKLSsgICAgLy8gICByZWFsIGluc25z LCBuYXR1cmFsIExFLgotKyAgICAvLwotKyAgICAvLyBQT1dFUjg6IHNhbWUgcHJlbHVkZSArIGx4 dmQyeCArIHh4cGVybWRpIChCRS1EVyBieXRlLXN3YXAgZml4dXApLgotKyAgICAvLwotKyAgICAv LyBTZWUgUG9vbExvYWRGUFI2NCBhYm92ZSBmb3Igd2h5IHIxNiBpbnN0ZWFkIG9mIHIxMi4KLSsg ICAgTU9aX0FTU0VSVChkaXNwbGFjZW1lbnQgPj0gLTMyNzY4ICYmIGRpc3BsYWNlbWVudCA8IDMy NzY4KTsKLSsgICAgLy8gU2ltZDEyOCBkZXN0IGlzIGluIFZSLW5hbWVzcGFjZSAoZW5jb2Rpbmcg MzItNjMpLiBIaW50IHN0b3JlcyBvbmx5Ci0rICAgIC8vIHRoZSBsb3cgNSBiaXRzIChsb2FkRnJv bVBvb2xTaW1kMTI4IG1hc2tzKTsgd2Ugc2V0IFRYIHVuY29uZGl0aW9uYWxseQotKyAgICAvLyBz aW5jZSBQb29sTG9hZFNpbWQxMjggYWx3YXlzIHRhcmdldHMgYSBTaW1kMTI4LgotKyAgICBjb25z dGV4cHIgdWludDMyX3Qga1RYID0gMXU7Ci0rICAgIGNvbnN0ZXhwciB1aW50MzJfdCBrQXhCeFR4 X3h4cGVybWRpID0gKDF1IDw8IDIpIHwgKDF1IDw8IDEpIHwgMXU7Ci0rCi0rICAgIGlmIChIYXNQ T1dFUjEwKCkpIHsKLSsgICAgICAvLyBQbGFjZSBwbHh2IHByZWZpeCBhdCB0aGUgaGlnaGVzdCA0 LWJ5dGUtYWxpZ25lZCBvZmZzZXQgd2l0aGluCi0rICAgICAgLy8gdGhlIDUgcmVzZXJ2ZWQgc2xv dHMgdGhhdCBkb2Vzbid0IHN0cmFkZGxlIGEgNjQtYnl0ZSBibG9jay4KLSsgICAgICB1aW50NjRf dCBsb2FkQWRkckJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pihsb2FkQWRkcik7Ci0r ICAgICAgLy8gbG9hZEFkZHIgaXMgdGhlIGJ1ZmZlci10aW1lIHBvaW50ZXI7IHRoZSBmaW5hbCBl eGVjdXRhYmxlIGJhc2UgaXMKLSsgICAgICAvLyBvbmx5IDE2LWJ5dGUgYWxpZ25lZCwgc28gdGhl IHVuc2FmZSBzdHJhZGRsZSBpcyB3aGVuCi0rICAgICAgLy8gKGxvYWRBZGRyQml0cyAmIDE1KSA9 PSAxMiAobWF0Y2hlcyBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCBhYm92ZSkuCi0rICAgICAgYm9v bCBuZWVkTGVhZGluZ05vcCA9IChsb2FkQWRkckJpdHMgJiAxNSkgPT0gMTI7Ci0rICAgICAgaW50 IHByZWZpeFNsb3QgPSBuZWVkTGVhZGluZ05vcCA/IDEgOiAwOwotKyAgICAgIGludCBwcmVmaXhC eXRlT2Zmc2V0ID0gcHJlZml4U2xvdCAqIDQ7Ci0rICAgICAgLy8gU0kgPSAocG9vbCBlbnRyeSBh ZGRyKSAtIChwcmVmaXggYWRkcikKLSsgICAgICAvLyAgICA9IChsb2FkQWRkciArIDQgKyBkaXNw bGFjZW1lbnQpIC0gKGxvYWRBZGRyICsgcHJlZml4Qnl0ZU9mZnNldCkKLSsgICAgICAvLyAgICA9 IGRpc3BsYWNlbWVudCArIDQgLSBwcmVmaXhCeXRlT2Zmc2V0Ci0rICAgICAgaW50NjRfdCBTSSA9 IGludDY0X3QoZGlzcGxhY2VtZW50KSArIDQgLSBwcmVmaXhCeXRlT2Zmc2V0OwotKyAgICAgIE1P Wl9BU1NFUlQoU0kgPj0gLShpbnQ2NF90KDEpIDw8IDMzKSAmJiBTSSA8IChpbnQ2NF90KDEpIDw8 IDMzKSk7Ci0rICAgICAgdWludDMyX3QgZDAgPSB1aW50MzJfdCgodWludDY0X3QoU0kpID4+IDE2 KSAmIDB4M0ZGRkZ1KTsKLSsgICAgICB1aW50MzJfdCBkMSA9IHVpbnQzMl90KHVpbnQ2NF90KFNJ KSAmIDB4RkZGRnUpOwotKyAgICAgIC8vIFByZWZpeDogcHJpbWFyeSBvcGNvZGUgMSwgVHlwZSAw ICg4TFMpLCBSPTEsIGQwIGF0IExFIGJpdHMgMTcuLjAuCi0rICAgICAgdWludDMyX3QgcHJlZml4 ID0KLSsgICAgICAgICAgKDF1IDw8IDI2KSB8ICgwdSA8PCAyNCkgfCAoMXUgPDwgMjApIHwgKGQw ICYgMHgzRkZGRnUpOwotKyAgICAgIC8vIFN1ZmZpeDogNS1iaXQgb3Bjb2RlIDI1IGF0IExFIDMx Li4yNywgVFggYXQgTEUgMjYsIFQgYXQgTEUgMjUuLjIxLAotKyAgICAgIC8vICAgICAgICAgUkE9 MCBhdCBMRSAyMC4uMTYsIGQxIGF0IExFIDE1Li4wLgotKyAgICAgIHVpbnQzMl90IHN1ZmZpeCA9 ICgyNXUgPDwgMjcpIHwgKGtUWCA8PCAyNikgfCAoZGVzdFJlZyA8PCAyMSkgfCBkMTsKLSsKLSsg ICAgICAvLyBQMTAgcmVzZXJ2ZXMgMyBzbG90czsgb25seSBpbnN0WzAuLjJdIGFyZSB3cml0dGVu LiBTbG90cyAzLi40Ci0rICAgICAgLy8gYmVsb25nIHRvIHRoZSBuZXh0IHBvb2wgZW50cnkgb24g UDEwLgotKyAgICAgIGlmIChuZWVkTGVhZGluZ05vcCkgewotKyAgICAgICAgaW5zdFswXSA9IE5v cEluc3Q7Ci0rICAgICAgICBpbnN0WzFdID0gcHJlZml4OwotKyAgICAgICAgaW5zdFsyXSA9IHN1 ZmZpeDsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgaW5zdFswXSA9IHByZWZpeDsKLSsgICAg ICAgIGluc3RbMV0gPSBzdWZmaXg7Ci0rICAgICAgICBpbnN0WzJdID0gTm9wSW5zdDsKLSsgICAg ICB9Ci0rICAgIH0gZWxzZSBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICAvLyBhZGRwY2lzICsg YWRkaSArIGx4dnggKDMgc2xvdHMpIOKAlCBubyBMUiBjbG9iYmVyLCBubyBSQVMgaGF6YXJkLgot KyAgICAgIC8vIFNhbWUgZGlzcGxhY2VtZW50IHNwbGl0IGFzIHRoZSBGUCBzY2FsYXIgUDkgcGF0 aDogdGFyZ2V0ID0KLSsgICAgICAvLyAoQ0lBKzQpICsgKGhpIDw8IDE2KSArIFNFWFQxNihsbyku IGx4dnggaXMgWC1mb3JtIGluZGV4ZWQgKG5vCi0rICAgICAgLy8gaW1tZWRpYXRlIG9mZnNldCks IHNvIGNvbWJpbmUgdGhlIGxvdyAxNiBiaXRzIGludG8gcjE2IHZpYSBhZGRpCi0rICAgICAgLy8g YmVmb3JlIHRoZSBsb2FkLgotKyAgICAgIGludDE2X3QgbG8gPSAoaW50MTZfdCkoZGlzcGxhY2Vt ZW50ICYgMHhGRkZGKTsKLSsgICAgICBpbnQzMl90IGhpQWRqID0gZGlzcGxhY2VtZW50IC0gbG87 Ci0rICAgICAgTU9aX0FTU0VSVCgoaGlBZGogJiAweEZGRkYpID09IDApOwotKyAgICAgIGludDMy X3QgaGkgPSBoaUFkaiA+PiAxNjsKLSsgICAgICBNT1pfQVNTRVJUKGhpID49IC0zMjc2OCAmJiBo aSA8PSAzMjc2Nyk7Ci0rICAgICAgdWludDMyX3QgRGhpID0gdWludDE2X3QoaGkpOwotKyAgICAg IHVpbnQzMl90IGJhc2VSZWcgPSBTYXZlZFNjcmF0Y2hSZWdpc3Rlci5jb2RlKCk7Ci0rICAgICAg Ly8gWzBdIGFkZHBjaXMgcjE2LCBoaQotKyAgICAgIGluc3RbMF0gPSAoMTl1IDw8IDI2KSB8IChi YXNlUmVnIDw8IDIxKSB8ICgoRGhpID4+IDEpICYgMHgxRikgPDwgMTYgfAotKyAgICAgICAgICAg ICAgICAoKERoaSA+PiA2KSAmIDB4M0ZGKSA8PCA2IHwgKDJ1IDw8IDEpIHwgKERoaSAmIDF1KTsK LSsgICAgICAvLyBbMV0gYWRkaSByMTYsIHIxNiwgbG8KLSsgICAgICBpbnN0WzFdID0gUFBDX2Fk ZGkgfCAoYmFzZVJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikgfCB1aW50MTZfdChsbyk7Ci0r ICAgICAgLy8gWzJdIGx4dnggdnNELCAwLCByMTYgIChYVFswOjRdIGluIGJpdHMgMjEtMjUsIFRY IGF0IGJpdCAwKQotKyAgICAgIGluc3RbMl0gPSBQUENfbHh2eCB8IChkZXN0UmVnIDw8IDIxKSB8 IChiYXNlUmVnIDw8IDExKSB8IGtUWDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAvLyBQOCBmYWxs YmFjazogYmNsICsgbWZsciArIGFkZGkgKyBseHZkMnggKyB4eHBlcm1kaSAoNSBzbG90cykuCi0r ICAgICAgLy8gQ2xvYmJlcnMgTFI7IGNvcnJlY3RuZXNzLW9ubHkgcGF0aC4KLSsgICAgICB1aW50 MzJfdCBiYXNlUmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIuY29kZSgpOwotKyAgICAgIGluc3Rb MF0gPSBQUENfYmNsX2Fsd2F5c19wbHVzNDsKLSsgICAgICBpbnN0WzFdID0gUFBDX21mc3ByIHwg KGJhc2VSZWcgPDwgMjEpIHwgUFBDX1NQUihzcHJfbHIpOwotKyAgICAgIGluc3RbMl0gPSBQUENf YWRkaSB8IChiYXNlUmVnIDw8IDIxKSB8IChiYXNlUmVnIDw8IDE2KSB8Ci0rICAgICAgICAgICAg ICAgIChkaXNwbGFjZW1lbnQgJiAweEZGRkYpOwotKyAgICAgIC8vIGx4dmQyeCBYVCwgUkE9MCwg UkI9cjE2IOKAlCBsb2FkcyBpbiBCRSBvcmRlciBvbiBMRS4KLSsgICAgICBpbnN0WzNdID0gUFBD X2x4dmQyeCB8IChkZXN0UmVnIDw8IDIxKSB8IChiYXNlUmVnIDw8IDExKSB8IGtUWDsKLSsgICAg ICAvLyB4eHBlcm1kaSBYVCwgWFQsIFhULCAyIOKAlCBzd2FwIGRvdWJsZXdvcmRzIGZvciBMRSBi eXRlIG9yZGVyLgotKyAgICAgIGluc3RbNF0gPSBQUENfeHhwZXJtZGkgfCAoZGVzdFJlZyA8PCAy MSkgfCAoZGVzdFJlZyA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAoZGVzdFJlZyA8PCAxMSkg fCAoMnUgPDwgOCkgfCBrQXhCeFR4X3h4cGVybWRpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAg ICBNT1pfQ1JBU0goIlBhdGNoQ29uc3RhbnRQb29sTG9hZDogdW5zdXBwb3J0ZWQgbG9hZCB0eXBl Iik7Ci0rICB9Ci0rCi0rICByZXR1cm4gZmFsc2U7Ci0rfQotKwotKy8qIHN0YXRpYyAqLwotK3Zv aWQgQXNzZW1ibGVyOjpXcml0ZVBvb2xHdWFyZChCdWZmZXJPZmZzZXQgYnJhbmNoLCBJbnN0cnVj dGlvbiogaW5zdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0 IGRlc3QpIHsKLSsgIC8vIEVtaXQgYW4gdW5jb25kaXRpb25hbCBicmFuY2ggb3ZlciB0aGUgcG9v bCBkYXRhLgotKyAgaW50MzJfdCBvZmZzZXQgPSBkZXN0LmdldE9mZnNldCgpIC0gYnJhbmNoLmdl dE9mZnNldCgpOwotKyAgTU9aX0FTU0VSVChKT2ZmSW1tMjY6OklzSW5SYW5nZShvZmZzZXQpKTsK LSsgIGluc3QtPnNldERhdGEoUFBDX2IgfCAob2Zmc2V0ICYgMHgwM0ZGRkZGQykpOwotK30KLSsK LSsvKiBzdGF0aWMgKi8KLSt2b2lkIEFzc2VtYmxlcjo6V3JpdGVQb29sSGVhZGVyKHVpbnQ4X3Qq IHN0YXJ0LCBQb29sKiBwLCBib29sIGlzTmF0dXJhbCkgewotKyAgLy8gV3JpdGUgcG9vbCBpZGVu dGlmaWNhdGlvbiBoZWFkZXIuCi0rICAvLyBFbmNvZGUgcG9vbCBzaXplIGFuZCBpc05hdHVyYWwg ZmxhZyBpbiBhIHNpbmdsZSAzMi1iaXQgd29yZC4KLSsgIHVpbnQzMl90IHBvb2xTaXplID0gcC0+ Z2V0UG9vbFNpemUoKTsKLSsgIHVpbnQzMl90IHNpemVJbldvcmRzID0gKHBvb2xTaXplICsgNCAr IDMpID4+IDI7ICAvLyBoZWFkZXIgKyBkYXRhLCBpbiB3b3JkcwotKyAgTU9aX0FTU0VSVChzaXpl SW5Xb3JkcyA8ICgxIDw8IDE1KSk7Ci0rICB1aW50MzJfdCBoZWFkZXIgPSAoc2l6ZUluV29yZHMg JiAweDdGRkYpIHwgKGlzTmF0dXJhbCA/ICgxIDw8IDE1KSA6IDApIHwKLSsgICAgICAgICAgICAg ICAgICAgIDB4RkZGRjAwMDA7ICAvLyBzZW50aW5lbAotKyAgKih1aW50MzJfdCopc3RhcnQgPSBo ZWFkZXI7Ci0rfQotKwotKy8qIHN0YXRpYyAqLwotK3ZvaWQgQXNzZW1ibGVyOjpQYXRjaFNob3J0 UmFuZ2VCcmFuY2hUb1ZlbmVlcihQUENCdWZmZXIqLCB1bnNpZ25lZCByYW5nZUlkeCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0IGRl YWRsaW5lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC dWZmZXJPZmZzZXQgdmVuZWVyKSB7Ci0rICAvLyBQUEM2NCBkb2VzIG5vdCB1c2Ugc2hvcnQtcmFu Z2UgYnJhbmNoIHRyYWNraW5nIChOdW1TaG9ydEJyYW5jaFJhbmdlcyA9IDApLgotKyAgTU9aX0NS QVNIKCJQYXRjaFNob3J0UmFuZ2VCcmFuY2hUb1ZlbmVlcjogc2hvdWxkIG5vdCBiZSBjYWxsZWQi KTsKLSt9Ci0rCi0rLy8gVHdvIHN0YW56YSBzaGFwZXMgc2hhcmUgdGhlIHNhbWUgOC1zbG90IGZv b3RwcmludCBhbmQgdGhlIHNhbWUgLnF1YWQKLSsvLyBsb2NhdGlvbiBhdCBzbG90cyBbNi4uN10g KHNvIEV4dHJhY3RMb2FkNjRWYWx1ZSAvIFVwZGF0ZUxvYWQ2NFZhbHVlIGFyZQotKy8vIHNoYXBl LWFnbm9zdGljKToKLSsvLwotKy8vICAgUE9XRVI4IChubyBhZGRwY2lzKToKLSsvLyAgICAgWzBd IG1mbHIgcjAKLSsvLyAgICAgWzFdIGJjbCAyMCwwLC4rNCAgICAgICAgIChMUiA6PSBwYyBvZiBb Ml0pCi0rLy8gICAgIFsyXSBtZmxyIHJECi0rLy8gICAgIFszXSBtdGxyIHIwCi0rLy8gICAgIFs0 XSBsZCByRCwgMTYockQpCi0rLy8gICAgIFs1XSBiIC4rMTIKLSsvLyAgICAgWzYuLjddIC5xdWFk IFZBTFVFCi0rLy8KLSsvLyAgIFBPV0VSOSsgKGFkZHBjaXMpOgotKy8vICAgICBbMF0gYWRkcGNp cyByRCwgMCAgICAgICAgKHJEIDo9IE5JQSA9IHBjIG9mIFsxXSkKLSsvLyAgICAgWzFdIGxkIHJE LCAyMChyRCkgICAgICAgIChyRCA6PSBtZW1bcGNfb2ZfWzFdICsgMjBdID0gbWVtW3Nsb3RbNl1d KQotKy8vICAgICBbMl0gYiAuKzI0Ci0rLy8gICAgIFszLi41XSBOT1AsIE5PUCwgTk9QCi0rLy8g ICAgIFs2Li43XSAucXVhZCBWQUxVRQotKy8vCi0rLy8gVGhlIFA5KyBmb3JtIGRyb3BzIHRoZSBi Y2wvbWZsci9tdGxyIExSLWJvdW5jZSAobm8gUkFTIHRocmFzaCkgYW5kIHJ1bnMKLSsvLyAyIGR5 bmFtaWMgaW5zbnMgaW5zdGVhZCBvZiA2LiBEaXN0aW5ndWlzaGVkIGF0IHBhdGNoIHRpbWUgYnkg aW5zdFswXSdzCi0rLy8gbWFqb3Igb3Bjb2RlOiAzMSA9IG1mc3ByIChQOCkgdnMgMTkgPSBhZGRw Y2lzIChQOSspLgotK3N0YXRpYyBib29sIElzQWRkcGNpc0xvYWQ2NFN0YW56YSh1aW50MzJfdCBl bmMwKSB7Ci0rICByZXR1cm4gKChlbmMwID4+IDI2KSAmIDB4M2YpID09IDE5OwotK30KLSsKLSsv LyBFeHRyYWN0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBmcm9tIGEgbG9hZDY0IHN0YW56YSBp biBlaXRoZXIgc2hhcGUuCi0rLy8gUDggc3RvcmVzIHJEIGluIGBtZmxyIHJEYCBhdCBzbG90IFsy XTsgUDkrIHN0b3JlcyByRCBpbiBgYWRkcGNpcyByRCwgMGAKLSsvLyBhdCBzbG90IFswXS4gQm90 aCBlbmNvZGUgUlQgYXQgTEUgYml0cyBbMjEuLjI1XS4KLStzdGF0aWMgdWludDhfdCBMb2FkNjRT dGFuemFEZXN0UmVnKEluc3RydWN0aW9uKiBpbnN0MCkgewotKyAgaWYgKElzQWRkcGNpc0xvYWQ2 NFN0YW56YShpbnN0MC0+ZW5jb2RlKCkpKSB7Ci0rICAgIHJldHVybiAoaW5zdDBbMF0uZW5jb2Rl KCkgPj4gMjEpICYgMHgxZjsKLSsgIH0KLSsgIHJldHVybiAoaW5zdDBbMl0uZW5jb2RlKCkgPj4g MjEpICYgMHgxZjsKLSt9Ci0rCi0rLyogc3RhdGljICovCi0rdm9pZCBBc3NlbWJsZXI6OldyaXRl TG9hZDY0SW5zdHJ1Y3Rpb25zKEluc3RydWN0aW9uKiBpbnN0MCwgUmVnaXN0ZXIgcmVnLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSkgewot KyAgSW5zdHJ1Y3Rpb24qIGkxID0gaW5zdDAtPm5leHQoKTsKLSsgIEluc3RydWN0aW9uKiBpMiA9 IGkxLT5uZXh0KCk7Ci0rICBJbnN0cnVjdGlvbiogaTMgPSBpMi0+bmV4dCgpOwotKyAgSW5zdHJ1 Y3Rpb24qIGk0ID0gaTMtPm5leHQoKTsKLSsgIEluc3RydWN0aW9uKiBpNSA9IGk0LT5uZXh0KCk7 Ci0rICBJbnN0cnVjdGlvbiogaTYgPSBpNS0+bmV4dCgpOwotKyAgSW5zdHJ1Y3Rpb24qIGk3ID0g aTYtPm5leHQoKTsKLSsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAvLyBbMF0gYWRkcGNp cyByRCwgMCAgIChEWC1mb3JtOiBvcGNvZGU9MTksIFhPPTIsIGFsbCBEIGZpZWxkcyA9IDApCi0r ICAgIGluc3QwLT5zZXREYXRhKDB4NEMwMDAwMDR1IHwgKHVpbnQzMl90KHJlZy5jb2RlKCkpIDw8 IDIxKSk7Ci0rICAgIC8vIFsxXSBsZCByRCwgMjAockQpICAgKHJEIDo9ICooc2xvdFsxXSArIDIw KSA9ICooc2xvdFs2XSkgPSAucXVhZCkKLSsgICAgaTEtPnNldERhdGEoUFBDX2xkIHwgKHVpbnQz Ml90KHJlZy5jb2RlKCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICh1aW50MzJfdChyZWcu Y29kZSgpKSA8PCAxNikgfCAyMCk7Ci0rICAgIC8vIFsyXSBiIC4rMjQgICAgICAgICAgKHNraXAg c2xvdHMgWzMuLjddIHRvIGxhbmQgYXQgc2xvdCBbOF0pCi0rICAgIGkyLT5zZXREYXRhKFBQQ19i IHwgKDI0ICYgMHgwM0ZGRkZGQykpOwotKyAgICAvLyBbMy4uNV0gTk9QIGZpbGxlciDigJQgdW5y ZWFjaGFibGUgYnV0IGtlcHQgYWxpZ25lZCBmb3IgdGhlIHBhdGNoZXIuCi0rICAgIGkzLT5zZXRE YXRhKE5vcEluc3QpOwotKyAgICBpNC0+c2V0RGF0YShOb3BJbnN0KTsKLSsgICAgaTUtPnNldERh dGEoTm9wSW5zdCk7Ci0rICB9IGVsc2UgewotKyAgICAvLyBbMF0gbWZsciByMAotKyAgICBpbnN0 MC0+c2V0RGF0YShQUENfbWZzcHIgfCAocjAuY29kZSgpIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xy KSk7Ci0rICAgIC8vIFsxXSBiY2wgMjAsMCwuKzQKLSsgICAgaTEtPnNldERhdGEoUFBDX2JjbF9h bHdheXNfcGx1czQpOwotKyAgICAvLyBbMl0gbWZsciByRAotKyAgICBpMi0+c2V0RGF0YShQUENf bWZzcHIgfCAocmVnLmNvZGUoKSA8PCAyMSkgfCBQUENfU1BSKHNwcl9scikpOwotKyAgICAvLyBb M10gbXRsciByMAotKyAgICBpMy0+c2V0RGF0YShQUENfbXRzcHIgfCAocjAuY29kZSgpIDw8IDIx KSB8IFBQQ19TUFIoc3ByX2xyKSk7Ci0rICAgIC8vIFs0XSBsZCByRCwgMTYockQpCi0rICAgIGk0 LT5zZXREYXRhKFBQQ19sZCB8IChyZWcuY29kZSgpIDw8IDIxKSB8IChyZWcuY29kZSgpIDw8IDE2 KSB8IDE2KTsKLSsgICAgLy8gWzVdIGIgLisxMgotKyAgICBpNS0+c2V0RGF0YShQUENfYiB8ICgx MiAmIDB4MDNGRkZGRkMpKTsKLSsgIH0KLSsKLSsgIC8vIFs2Li43XSAucXVhZCBWQUxVRSAobG93 IDMyIGF0IGxvd2VyIGFkZHIsIGhpZ2ggMzIgYXQgaGlnaGVyIGFkZHIpLgotKyAgaTYtPnNldERh dGEoKHVpbnQzMl90KSh2YWx1ZSAmIDB4RkZGRkZGRkYpKTsKLSsgIGk3LT5zZXREYXRhKCh1aW50 MzJfdCkodmFsdWUgPj4gMzIpKTsKLSt9Ci0rCi0rLyogc3RhdGljICovCi0rdWludDY0X3QgQXNz ZW1ibGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUoSW5zdHJ1Y3Rpb24qIGluc3QwKSB7Ci0rICAvLyBU aGUgOC1ieXRlIHZhbHVlIGlzIGF0IGluc3QwWzYuLjddIGluIGJvdGggc2hhcGVzLgotKyAgSW5z dHJ1Y3Rpb24qIGk2ID0gaW5zdDAgKyA2OwotKyAgSW5zdHJ1Y3Rpb24qIGk3ID0gaW5zdDAgKyA3 OwotKwotKyAgdWludDY0X3QgbG8gPSAodWludDY0X3QpaTYtPmVuY29kZSgpOyAgLy8gbG93IDMy IGF0IGxvd2VyIGFkZHIKLSsgIHVpbnQ2NF90IGhpID0gKHVpbnQ2NF90KWk3LT5lbmNvZGUoKTsg IC8vIGhpZ2ggMzIgYXQgaGlnaGVyIGFkZHIKLSsgIHJldHVybiAoaGkgPDwgMzIpIHwgbG87Ci0r fQotKwotKy8qIHN0YXRpYyAqLwotK3ZvaWQgQXNzZW1ibGVyOjpVcGRhdGVMb2FkNjRWYWx1ZShJ bnN0cnVjdGlvbiogaW5zdDAsIHVpbnQ2NF90IHZhbHVlKSB7Ci0rICAvLyBTYW5pdHktY2hlY2sg dGhhdCBpbnN0MCBpcyB0aGUgc3RhcnQgb2YgYSBsb2FkNjQgc3RhbnphIGluIGVpdGhlciBzaGFw ZS4KLSsgIC8vIFA4OiBpbnN0MFsxXSA9PSBiY2wgMjAsMCwuKzQuIFA5KzogaW5zdDBbMF0gaXMg YWRkcGNpcyAobWFqb3Igb3Bjb2RlIDE5KS4KLSsgIE1PWl9BU1NFUlQoaW5zdDBbMV0uZW5jb2Rl KCkgPT0gUFBDX2JjbF9hbHdheXNfcGx1czQgfHwKLSsgICAgICAgICAgICAgICAgIElzQWRkcGNp c0xvYWQ2NFN0YW56YShpbnN0MC0+ZW5jb2RlKCkpLAotKyAgICAgICAgICAgICAiVXBkYXRlTG9h ZDY0VmFsdWU6IGluc3QwIGlzIG5vdCBhIGxvYWQ2NCBzdGFuemEiKTsKLSsKLSsgIC8vIC5xdWFk IGxpdmVzIGF0IGluc3QwWzYuLjddIGluIGJvdGggc2hhcGVzLgotKyAgSW5zdHJ1Y3Rpb24qIGk2 ID0gaW5zdDAgKyA2OwotKyAgSW5zdHJ1Y3Rpb24qIGk3ID0gaW5zdDAgKyA3OwotKwotKyAgaTYt PnNldERhdGEoKHVpbnQzMl90KSh2YWx1ZSAmIDB4RkZGRkZGRkYpKTsgIC8vIGxvdyAzMiBhdCBs b3dlciBhZGRyCi0rICBpNy0+c2V0RGF0YSgodWludDMyX3QpKHZhbHVlID4+IDMyKSk7ICAgICAg ICAgLy8gaGlnaCAzMiBhdCBoaWdoZXIgYWRkcgotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsvLyBQYXRjaGluZyBhbmQgdG9nZ2xlIG9wZXJhdGlvbnMuCi0rLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rCi0rLyogc3RhdGljICovCi0rdWludDMyX3QgQXNzZW1ibGVyOjpQYXRjaFdyaXRlX05lYXJD YWxsU2l6ZSgpIHsKLSsgIC8vIDggaW5zdHJ1Y3Rpb25zIGZvciBMb2FkNjQgKyBtdGN0ciArIGJj dHJsID0gMTAgaW5zdHJ1Y3Rpb25zLgotKyAgcmV0dXJuIDEwICogc2l6ZW9mKHVpbnQzMl90KTsK LSt9Ci0rCi0rLyogc3RhdGljICovCi0rdm9pZCBBc3NlbWJsZXI6OlBhdGNoV3JpdGVfTmVhckNh bGwoQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9DYWxsKSB7Ci0rICBJbnN0cnVjdGlvbiogaW5z dCA9IChJbnN0cnVjdGlvbiopc3RhcnQucmF3KCk7Ci0rICB1aW50OF90KiBkZXN0ID0gdG9DYWxs LnJhdygpOwotKwotKyAgQXNzZW1ibGVyOjpXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhpbnN0LCBT YXZlZFNjcmF0Y2hSZWdpc3RlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHVpbnQ2NF90KWRlc3QpOwotKyAgaW5zdFs4XS5tYWtlT3BfbXRjdHIoU2F2ZWRTY3JhdGNo UmVnaXN0ZXIpOwotKyAgaW5zdFs5XS5tYWtlT3BfYmN0cihMaW5rQik7Ci0rICBGbHVzaElDYWNo ZShpbnN0LCAxMCAqIHNpemVvZihJbnN0cnVjdGlvbikpOwotK30KLSsKLSsvKiBzdGF0aWMgKi8K LSt2b2lkIEFzc2VtYmxlcjo6UGF0Y2hXcml0ZV9JbW0zMihDb2RlTG9jYXRpb25MYWJlbCBsYWJl bCwgSW1tMzIgaW1tKSB7Ci0rICB1aW50MzJfdCogbCA9ICh1aW50MzJfdCopbGFiZWwucmF3KCk7 Ci0rICAqKGwgLSAxKSA9IGltbS52YWx1ZTsKLSsgIEZsdXNoSUNhY2hlKGwgLSAxLCBzaXplb2Yo dWludDMyX3QpKTsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OlBhdGNoRGF0YVdpdGhWYWx1ZUNo ZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbW1QdHIgbmV3VmFsdWUsIEltbVB0ciBleHBlY3RlZFZhbHVlKSB7Ci0r ICBQYXRjaERhdGFXaXRoVmFsdWVDaGVjayhsYWJlbCwgUGF0Y2hlZEltbVB0cihuZXdWYWx1ZS52 YWx1ZSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkSW1tUHRyKGV4cGVjdGVk VmFsdWUudmFsdWUpKTsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OlBhdGNoRGF0YVdpdGhWYWx1 ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQYXRjaGVkSW1tUHRyIG5ld1ZhbHVlLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkSW1tUHRyIGV4cGVjdGVkVmFsdWUpIHsK LSsgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKilsYWJlbC5yYXcoKTsKLSsKLSsg IERlYnVnT25seTx1aW50NjRfdD4gdmFsdWUgPSBBc3NlbWJsZXI6OkV4dHJhY3RMb2FkNjRWYWx1 ZShpbnN0KTsKLSsgIE1PWl9BU1NFUlQodmFsdWUgPT0gdWludDY0X3QoZXhwZWN0ZWRWYWx1ZS52 YWx1ZSkpOwotKwotKyAgQXNzZW1ibGVyOjpVcGRhdGVMb2FkNjRWYWx1ZShpbnN0LCB1aW50NjRf dChuZXdWYWx1ZS52YWx1ZSkpOwotKyAgRmx1c2hJQ2FjaGUoaW5zdCwgOCAqIHNpemVvZihJbnN0 cnVjdGlvbikpOwotK30KLSsKLSsvLyBUb2dnbGVDYWxsIHRvZ2dsZXMgdGhlIGNhbGwgcG9ydGlv biBvZiBhIHRvZ2dsZWRDYWxsIHN0YW56YS4KLSsvLyBMYXlvdXQ6IDggbG9hZDY0IGluc3RydWN0 aW9ucyArIG10Y3RyICsgYmN0cmwgKDEwIHRvdGFsKS4KLSsvLyBXZSB0b2dnbGUgdGhlIGxhc3Qg dHdvIGluc3RydWN0aW9ucyAobXRjdHIvYmN0cmwgdnMgbm9wL25vcCkuCi0rLy8gVGhlIGRlc3Rp bmF0aW9uIHJlZ2lzdGVyIGlzIGV4dHJhY3RlZCB2aWEgTG9hZDY0U3RhbnphRGVzdFJlZywgd2hp Y2gKLSsvLyBoYW5kbGVzIGJvdGggdGhlIFA4IChtZmxyLXJEIGF0IHNsb3QgWzJdKSBhbmQgUDkr IChhZGRwY2lzLXJEIGF0IHNsb3QKLSsvLyBbMF0pIHNoYXBlcy4KLSsKLSsvKiBzdGF0aWMgKi8K LSt2b2lkIEFzc2VtYmxlcjo6VG9nZ2xlQ2FsbChDb2RlTG9jYXRpb25MYWJlbCBpbnN0XywgYm9v bCBlbmFibGVkKSB7Ci0rICBJbnN0cnVjdGlvbiogaTAgPSAoSW5zdHJ1Y3Rpb24qKWluc3RfLnJh dygpOwotKyAgSW5zdHJ1Y3Rpb24qIGk4ID0gKEluc3RydWN0aW9uKikoaW5zdF8ucmF3KCkgKyA4 ICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0rICBJbnN0cnVjdGlvbiogaTkgPSAoSW5zdHJ1Y3Rpb24q KShpbnN0Xy5yYXcoKSArIDkgKiBzaXplb2YodWludDMyX3QpKTsKLSsKLSsgIC8vIEFjY2VwdCBl aXRoZXIgUDggc3RhbnphIChtZmxyIHIwIGF0IHNsb3QgWzBdKSBvciBQOSsgc3RhbnphIChhZGRw Y2lzIGF0Ci0rICAvLyBzbG90IFswXTsgbWFqb3Igb3Bjb2RlIDE5KS4KLSsgIE1PWl9BU1NFUlQo aTAtPmVuY29kZSgpID09IChQUENfbWZzcHIgfCAocjAuY29kZSgpIDw8IDIxKSB8IFBQQ19TUFIo c3ByX2xyKSkgfHwKLSsgICAgICAgICAgICAgICAgIElzQWRkcGNpc0xvYWQ2NFN0YW56YShpMC0+ ZW5jb2RlKCkpKTsKLSsKLSsgIC8vIFRvZ2dsZUNhbGwgaXMgaWRlbXBvdGVudCBhY3Jvc3MgdGhl IHNhbWUgYGVuYWJsZWRgIHZhbHVlOiByZS1lbmFibGluZwotKyAgLy8gYW4gYWxyZWFkeS1lbmFi bGVkIHNpdGUgKG9yIHJlLWRpc2FibGluZyBhIGRpc2FibGVkIG9uZSkgaXMgYSBuby1vcC4KLSsg IC8vIE1vemlsbGEncyBkZWJ1Z2dlciBtYWNoaW5lcnkgbWF5IGxlZ2l0aW1hdGVseSB0b2dnbGUg dGhlIHNhbWUgY2FsbCBzaXRlCi0rICAvLyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSBkaXJl Y3Rpb24gKGUuZy4gc2V0dGluZyBib3RoIGEgYnJlYWtwb2ludAotKyAgLy8gYW5kIGEgZnJhbWUu b25TdGVwIG9uIHRoZSBzYW1lIHNjcmlwdCkuCi0rICBSZWdpc3RlciBzY3JhdGNoID0gUmVnaXN0 ZXI6OkZyb21Db2RlKExvYWQ2NFN0YW56YURlc3RSZWcoaTApKTsKLSsgIHVpbnQzMl90IG10Y3Ry ID0gUFBDX210c3ByIHwgKHNjcmF0Y2guY29kZSgpIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2N0cik7 Ci0rICB1aW50MzJfdCBiY3RybCA9ICh1aW50MzJfdClQUENfYmN0ciB8ICh1aW50MzJfdClMaW5r QjsKLSsgIGlmIChlbmFibGVkKSB7Ci0rICAgIE1PWl9BU1NFUlQoaTgtPmVuY29kZSgpID09IE5v cEluc3QgfHwgaTgtPmVuY29kZSgpID09IG10Y3RyKTsKLSsgICAgTU9aX0FTU0VSVChpOS0+ZW5j b2RlKCkgPT0gTm9wSW5zdCB8fCBpOS0+ZW5jb2RlKCkgPT0gYmN0cmwpOwotKyAgICBpOC0+c2V0 RGF0YShtdGN0cik7Ci0rICAgIGk5LT5zZXREYXRhKGJjdHJsKTsKLSsgIH0gZWxzZSB7Ci0rICAg IE1PWl9BU1NFUlQoaTgtPmVuY29kZSgpID09IE5vcEluc3QgfHwgaTgtPmVuY29kZSgpID09IG10 Y3RyKTsKLSsgICAgTU9aX0FTU0VSVChpOS0+ZW5jb2RlKCkgPT0gTm9wSW5zdCB8fCBpOS0+ZW5j b2RlKCkgPT0gYmN0cmwpOwotKyAgICBpOC0+c2V0RGF0YShOb3BJbnN0KTsKLSsgICAgaTktPnNl dERhdGEoTm9wSW5zdCk7Ci0rICB9Ci0rICBGbHVzaElDYWNoZShpOCwgMiAqIHNpemVvZihJbnN0 cnVjdGlvbikpOwotK30KLSsKLSsvLyB0b2dnbGVkSnVtcCBlbWl0cyBhIHRyYXAgc3RhbnphIHZp YSBqdW1wKGxhYmVsKS4gQWZ0ZXIgYmluZGluZywgdGhlIGZpcnN0Ci0rLy8gaW5zdHJ1Y3Rpb24g YmVjb21lcyAiYiBvZmZzZXQiIChzaG9ydCBicmFuY2gpLiBXZSB0b2dnbGUgYmV0d2VlbiBiIGFu ZCBvcmk6Ci0rLy8gICBiIG9mZnNldDogICAgICAgWzAxMDAxMF1bTEk6MjRdWzBdWzBdCi0rLy8g ICBvcmkgcjAscjAsaW1tOiAgWzAxMTAwMF1bMDAwMDBdWzAwMDAwXVtVSToxNl0KLSsvLyBGb3Ig c2hvcnQgZm9yd2FyZCBqdW1wcyAob2Zmc2V0IDwgNjRLQiksIGJpdHMgMjU6MTYgb2YgTEkgYXJl IDAsIHNvCi0rLy8gc3dhcHBpbmcgdGhlIG9wY29kZSBwcmVzZXJ2ZXMgdGhlIG9mZnNldCBpbiB0 aGUgbG93ZXIgMTYgYml0cy4KLSsvLyBvcmkgcjAscjAsWCBpcyBlZmZlY3RpdmVseSBhIG5vcCAo d3JpdGVzIHRvIHIwKS4KLSsKLSsvKiBzdGF0aWMgKi8KLSt2b2lkIEFzc2VtYmxlcjo6VG9nZ2xl VG9KbXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pIHsKLSsgIEluc3RydWN0aW9uKiBpbnN0ID0g KEluc3RydWN0aW9uKilpbnN0Xy5yYXcoKTsKLSsgIE1PWl9BU1NFUlQoaW5zdC0+aXNPcGNvZGUo UFBDX29yaSkpOwotKyAgLy8gVmVyaWZ5IFJTPTAgYW5kIFJBPTAgKHIwKS4KLSsgIE1PWl9BU1NF UlQoKGluc3QtPmVuY29kZSgpICYgMHgwM0UwMDAwMCkgPT0gMCk7Ci0rICBNT1pfQVNTRVJUKChp bnN0LT5lbmNvZGUoKSAmIDB4MDAxRjAwMDApID09IDApOwotKyAgLy8gU3dhcCBvcGNvZGUgZnJv bSBvcmkgKDAxMTAwMCkgdG8gYiAoMDEwMDEwKS4KLSsgIHVpbnQzMl90IGVuY29kaW5nID0gaW5z dC0+ZW5jb2RlKCk7Ci0rICBlbmNvZGluZyA9IChlbmNvZGluZyAmIDB4MDNGRkZGRkYpIHwgKHVp bnQzMl90KVBQQ19iOwotKyAgaW5zdC0+c2V0RGF0YShlbmNvZGluZyk7Ci0rICBGbHVzaElDYWNo ZShpbnN0LCBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKLSt9Ci0rCi0rLyogc3RhdGljICovCi0rdm9p ZCBBc3NlbWJsZXI6OlRvZ2dsZVRvQ21wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RfKSB7Ci0rICBJ bnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopaW5zdF8ucmF3KCk7Ci0rICBNT1pfQVNT RVJUKGluc3QtPmlzT3Bjb2RlKFBQQ19iKSk7Ci0rICAvLyBWZXJpZnkgc2hvcnQgZm9yd2FyZCBi cmFuY2g6IHVwcGVyIExJIGJpdHMgKDI1OjE2KSBhcmUgMCwgQUE9MCwgTEs9MC4KLSsgIE1PWl9B U1NFUlQoKGluc3QtPmVuY29kZSgpICYgMHgwM0ZGMDAwMykgPT0gMCk7Ci0rICAvLyBTd2FwIG9w Y29kZSBmcm9tIGIgKDAxMDAxMCkgdG8gb3JpICgwMTEwMDApLgotKyAgdWludDMyX3QgZW5jb2Rp bmcgPSBpbnN0LT5lbmNvZGUoKTsKLSsgIGVuY29kaW5nID0gKGVuY29kaW5nICYgMHgwM0ZGRkZG RikgfCAodWludDMyX3QpUFBDX29yaTsKLSsgIGluc3QtPnNldERhdGEoZW5jb2RpbmcpOwotKyAg Rmx1c2hJQ2FjaGUoaW5zdCwgc2l6ZW9mKEluc3RydWN0aW9uKSk7Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKy8vIEJpbmQsIHRyYWNpbmcsIGFuZCBwb2ludGVyIGV4dHJhY3Rpb24uCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OkJpbmQodWludDhfdCogcmF3 Q29kZSwgY29uc3QgQ29kZUxhYmVsJiBsYWJlbCkgewotKyAgaWYgKGxhYmVsLnBhdGNoQXQoKS5i b3VuZCgpKSB7Ci0rICAgIGF1dG8gbW9kZSA9IGxhYmVsLmxpbmtNb2RlKCk7Ci0rICAgIGludHB0 cl90IG9mZnNldCA9IGxhYmVsLnBhdGNoQXQoKS5vZmZzZXQoKTsKLSsgICAgaW50cHRyX3QgdGFy Z2V0ID0gbGFiZWwudGFyZ2V0KCkub2Zmc2V0KCk7Ci0rCi0rICAgIGlmIChtb2RlID09IENvZGVM YWJlbDo6UmF3UG9pbnRlcikgewotKyAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQq Kj4ocmF3Q29kZSArIG9mZnNldCkgPSByYXdDb2RlICsgdGFyZ2V0OwotKyAgICB9IGVsc2Ugewot KyAgICAgIE1PWl9BU1NFUlQobW9kZSA9PSBDb2RlTGFiZWw6Ok1vdmVJbW1lZGlhdGUgfHwKLSsg ICAgICAgICAgICAgICAgIG1vZGUgPT0gQ29kZUxhYmVsOjpKdW1wSW1tZWRpYXRlKTsKLSsgICAg ICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopKHJhd0NvZGUgKyBvZmZzZXQpOwot KyAgICAgIEFzc2VtYmxlcjo6VXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgKHVpbnQ2NF90KShyYXdD b2RlICsgdGFyZ2V0KSk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rdWludHB0cl90IEFzc2VtYmxl cjo6R2V0UG9pbnRlcih1aW50OF90KiBpbnN0UHRyKSB7Ci0rICBJbnN0cnVjdGlvbiogaW5zdCA9 IChJbnN0cnVjdGlvbiopaW5zdFB0cjsKLSsgIHJldHVybiBBc3NlbWJsZXI6OkV4dHJhY3RMb2Fk NjRWYWx1ZShpbnN0KTsKLSt9Ci0rCi0rc3RhdGljIEppdENvZGUqIENvZGVGcm9tSnVtcChJbnN0 cnVjdGlvbioganVtcCkgewotKyAgdWludDhfdCogdGFyZ2V0ID0gKHVpbnQ4X3QqKUFzc2VtYmxl cjo6RXh0cmFjdExvYWQ2NFZhbHVlKGp1bXApOwotKyAgcmV0dXJuIEppdENvZGU6OkZyb21FeGVj dXRhYmxlKHRhcmdldCk7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpUcmFjZUp1bXBSZWxvY2F0 aW9ucyhKU1RyYWNlciogdHJjLCBKaXRDb2RlKiBjb2RlLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDb21wYWN0QnVmZmVyUmVhZGVyJiByZWFkZXIpIHsKLSsgIHdoaWxl IChyZWFkZXIubW9yZSgpKSB7Ci0rICAgIEppdENvZGUqIGNoaWxkID0KLSsgICAgICAgIENvZGVG cm9tSnVtcCgoSW5zdHJ1Y3Rpb24qKShjb2RlLT5yYXcoKSArIHJlYWRlci5yZWFkVW5zaWduZWQo KSkpOwotKyAgICBUcmFjZU1hbnVhbGx5QmFycmllcmVkRWRnZSh0cmMsICZjaGlsZCwgInJlbDMy Iik7Ci0rICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIFRyYWNlT25lRGF0YVJlbG9jYXRpb24oSlNU cmFjZXIqIHRyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6 Ok1heWJlPEF1dG9Xcml0YWJsZUppdENvZGU+JiBhd2pjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSml0Q29kZSogY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3QpIHsKLSsgIHZv aWQqIHB0ciA9ICh2b2lkKilBc3NlbWJsZXI6OkV4dHJhY3RMb2FkNjRWYWx1ZShpbnN0KTsKLSsg IHZvaWQqIHByaW9yID0gcHRyOwotKwotKyAgdWludHB0cl90IHdvcmQgPSByZWludGVycHJldF9j YXN0PHVpbnRwdHJfdD4ocHRyKTsKLSsgIGlmICh3b3JkID4+IEpTVkFMX1RBR19TSElGVCkgewot KyAgICBWYWx1ZSB2ID0gVmFsdWU6OmZyb21SYXdCaXRzKHdvcmQpOwotKyAgICBUcmFjZU1hbnVh bGx5QmFycmllcmVkRWRnZSh0cmMsICZ2LCAiaml0LW1hc20tdmFsdWUiKTsKLSsgICAgcHRyID0g KHZvaWQqKXYuYml0c0FzUHVuYm94UG9pbnRlcigpOwotKyAgfSBlbHNlIHsKLSsgICAgVHJhY2VN YW51YWxseUJhcnJpZXJlZEdlbmVyaWNQb2ludGVyRWRnZSgKLSsgICAgICAgIHRyYywgcmVpbnRl cnByZXRfY2FzdDxnYzo6Q2VsbCoqPigmcHRyKSwgImppdC1tYXNtLXB0ciIpOwotKyAgfQotKwot KyAgaWYgKHB0ciAhPSBwcmlvcikgewotKyAgICBpZiAoYXdqYy5pc05vdGhpbmcoKSkgewotKyAg ICAgIGF3amMuZW1wbGFjZShjb2RlKTsKLSsgICAgfQotKyAgICBBc3NlbWJsZXI6OlVwZGF0ZUxv YWQ2NFZhbHVlKGluc3QsIHVpbnQ2NF90KHB0cikpOwotKyAgfQotK30KLSsKLSsvKiBzdGF0aWMg Ki8KLSt2b2lkIEFzc2VtYmxlcjo6VHJhY2VEYXRhUmVsb2NhdGlvbnMoSlNUcmFjZXIqIHRyYywg Sml0Q29kZSogY29kZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29t cGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKSB7Ci0rICBtb3ppbGxhOjpNYXliZTxBdXRvV3JpdGFi bGVKaXRDb2RlPiBhd2pjOwotKyAgd2hpbGUgKHJlYWRlci5tb3JlKCkpIHsKLSsgICAgc2l6ZV90 IG9mZnNldCA9IHJlYWRlci5yZWFkVW5zaWduZWQoKTsKLSsgICAgSW5zdHJ1Y3Rpb24qIGluc3Qg PSAoSW5zdHJ1Y3Rpb24qKShjb2RlLT5yYXcoKSArIG9mZnNldCk7Ci0rICAgIFRyYWNlT25lRGF0 YVJlbG9jYXRpb24odHJjLCBhd2pjLCBjb2RlLCBpbnN0KTsKLSsgIH0KLSt9Ci0rCi0rLyogc3Rh dGljICovCi0rdWludDhfdCogQXNzZW1ibGVyOjpOZXh0SW5zdHJ1Y3Rpb24odWludDhfdCogaW5z dHJ1Y3Rpb24sIHVpbnQzMl90KiBjb3VudCkgewotKyAgaWYgKGNvdW50ICE9IG51bGxwdHIpIHsK LSsgICAgKmNvdW50ICs9IHNpemVvZihJbnN0cnVjdGlvbik7Ci0rICB9Ci0rICByZXR1cm4gaW5z dHJ1Y3Rpb24gKyBzaXplb2YoSW5zdHJ1Y3Rpb24pOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsvLyBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSBpbXBsZW1lbnRhdGlvbi4KLSsvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsKLStVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6VXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUoQXNzZW1ibGVyJiBhc3NlbWJsZXIpCi0rICAgIDogYXZhaWxhYmxlXyhhc3NlbWJs ZXIuR2V0U2NyYXRjaFJlZ2lzdGVyTGlzdCgpKSwKLSsgICAgICBvbGRfYXZhaWxhYmxlXygqYXZh aWxhYmxlXykge30KLSsKLStVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6VXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUoQXNzZW1ibGVyKiBhc3NlbWJsZXIpCi0rICAgIDogYXZhaWxhYmxlXyhhc3NlbWJs ZXItPkdldFNjcmF0Y2hSZWdpc3Rlckxpc3QoKSksCi0rICAgICAgb2xkX2F2YWlsYWJsZV8oKmF2 YWlsYWJsZV8pIHt9Ci0rCi0rVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6On5Vc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSgpIHsKLSsgICphdmFpbGFibGVfID0gb2xkX2F2YWlsYWJsZV87Ci0rfQotKwot K1JlZ2lzdGVyIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlOjpBY3F1aXJlKCkgewotKyAgTU9aX0FT U0VSVChhdmFpbGFibGVfICE9IG51bGxwdHIpOwotKyAgTU9aX0FTU0VSVCghYXZhaWxhYmxlXy0+ ZW1wdHkoKSk7Ci0rICBSZWdpc3RlciBpbmRleCA9IEdlbmVyYWxSZWdpc3RlclNldDo6Rmlyc3RS ZWdpc3RlcihhdmFpbGFibGVfLT5iaXRzKCkpOwotKyAgYXZhaWxhYmxlXy0+dGFrZVJlZ2lzdGVy SW5kZXgoaW5kZXgpOwotKyAgcmV0dXJuIGluZGV4OwotK30KLSsKLSt2b2lkIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlOjpSZWxlYXNlKGNvbnN0IFJlZ2lzdGVyJiByZWcpIHsKLSsgIE1PWl9BU1NF UlQoYXZhaWxhYmxlXyAhPSBudWxscHRyKTsKLSsgIE1PWl9BU1NFUlQob2xkX2F2YWlsYWJsZV8u aGFzUmVnaXN0ZXJJbmRleChyZWcpKTsKLSsgIE1PWl9BU1NFUlQoIWF2YWlsYWJsZV8tPmhhc1Jl Z2lzdGVySW5kZXgocmVnKSk7Ci0rICBJbmNsdWRlKEdlbmVyYWxSZWdpc3RlclNldCgxIDw8IHJl Zy5jb2RlKCkpKTsKLSt9Ci0rCi0rYm9vbCBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6aGFzQXZh aWxhYmxlKCkgY29uc3QgewotKyAgcmV0dXJuIChhdmFpbGFibGVfLT5zaXplKCkpICE9IDA7Ci0r fQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmggYi9qcy9z cmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi42MGU4NGJmNzFjZjcKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3Ny Yy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgKLUBAIC0wLDAgKzEsMjExNCBAQAotKy8qIC0q LSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj LW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0r ICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBN b3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBv bmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3Bw YzY0X0Fzc2VtYmxlcl9wcGM2NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfQXNzZW1ibGVyX3BwYzY0 X2gKLSsKLSsjaW5jbHVkZSAiaml0L0NvbXBhY3RCdWZmZXIuaCIKLSsjaW5jbHVkZSAiaml0L0pp dENvZGUuaCIKLSsjaW5jbHVkZSAiaml0L0ppdFNwZXdlci5oIgotKyNpbmNsdWRlICJqaXQvcHBj NjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgiCi0rI2luY2x1ZGUgImppdC9zaGFyZWQvQXNzZW1ibGVy LXNoYXJlZC5oIgotKyNpbmNsdWRlICJqaXQvc2hhcmVkL0Rpc2Fzc2VtYmxlci1zaGFyZWQuaCIK LSsjaW5jbHVkZSAiaml0L3NoYXJlZC9Jb25Bc3NlbWJsZXJCdWZmZXIuaCIKLSsjaW5jbHVkZSAi aml0L3NoYXJlZC9Jb25Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29scy5oIgotKyNpbmNs dWRlICJ3YXNtL1dhc21UeXBlRGVjbHMuaCIKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFj ZSBqaXQgewotKwotKy8vIEdQUiByZWdpc3RlciBjb25zdGFudHMuCi0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciByMHtSZWdpc3RlcnM6OnIwfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IHIxe1JlZ2lzdGVyczo6cjF9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjJ7UmVnaXN0 ZXJzOjpyMn07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByM3tSZWdpc3RlcnM6OnIzfTsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHI0e1JlZ2lzdGVyczo6cjR9OwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgcjV7UmVnaXN0ZXJzOjpyNX07Ci0rc3RhdGljIGNvbnN0ZXhwciBS ZWdpc3RlciByNntSZWdpc3RlcnM6OnI2fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHI3 e1JlZ2lzdGVyczo6cjd9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjh7UmVnaXN0ZXJz OjpyOH07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByOXtSZWdpc3RlcnM6OnI5fTsKLStz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxMHtSZWdpc3RlcnM6OnIxMH07Ci0rc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciByMTF7UmVnaXN0ZXJzOjpyMTF9OwotK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgcjEye1JlZ2lzdGVyczo6cjEyfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IHIxM3tSZWdpc3RlcnM6OnIxM307Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTR7UmVn aXN0ZXJzOjpyMTR9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjE1e1JlZ2lzdGVyczo6 cjE1fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxNntSZWdpc3RlcnM6OnIxNn07Ci0r c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTd7UmVnaXN0ZXJzOjpyMTd9OwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgcjE4e1JlZ2lzdGVyczo6cjE4fTsKLStzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIHIxOXtSZWdpc3RlcnM6OnIxOX07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciByMjB7UmVnaXN0ZXJzOjpyMjB9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjIxe1Jl Z2lzdGVyczo6cjIxfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyMntSZWdpc3RlcnM6 OnIyMn07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjN7UmVnaXN0ZXJzOjpyMjN9Owot K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjI0e1JlZ2lzdGVyczo6cjI0fTsKLStzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIHIyNXtSZWdpc3RlcnM6OnIyNX07Ci0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciByMjZ7UmVnaXN0ZXJzOjpyMjZ9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgcjI3e1JlZ2lzdGVyczo6cjI3fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyOHtS ZWdpc3RlcnM6OnIyOH07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjl7UmVnaXN0ZXJz OjpyMjl9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjMwe1JlZ2lzdGVyczo6cjMwfTsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIzMXtSZWdpc3RlcnM6OnIzMX07Ci0rCi0rLy8g RlBSIHJlZ2lzdGVyIGNvbnN0YW50cy4KLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIg ZjB7RmxvYXRSZWdpc3RlcnM6OmYwLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMg Y29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjF7RmxvYXRSZWdpc3RlcnM6OmYxLCBGbG9hdFJlZ2lz dGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjJ7RmxvYXRS ZWdpc3RlcnM6OmYyLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHBy IEZsb2F0UmVnaXN0ZXIgZjN7RmxvYXRSZWdpc3RlcnM6OmYzLCBGbG9hdFJlZ2lzdGVyczo6RG91 YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjR7RmxvYXRSZWdpc3RlcnM6 OmY0LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVn aXN0ZXIgZjV7RmxvYXRSZWdpc3RlcnM6OmY1LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStz dGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjZ7RmxvYXRSZWdpc3RlcnM6OmY2LCBGbG9h dFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjd7 RmxvYXRSZWdpc3RlcnM6OmY3LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29u c3RleHByIEZsb2F0UmVnaXN0ZXIgZjh7RmxvYXRSZWdpc3RlcnM6OmY4LCBGbG9hdFJlZ2lzdGVy czo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjl7RmxvYXRSZWdp c3RlcnM6OmY5LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIgZjEwe0Zsb2F0UmVnaXN0ZXJzOjpmMTAsIEZsb2F0UmVnaXN0ZXJzOjpEb3Vi bGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTF7RmxvYXRSZWdpc3RlcnM6 OmYxMSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJl Z2lzdGVyIGYxMntGbG9hdFJlZ2lzdGVyczo6ZjEyLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsK LStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjEze0Zsb2F0UmVnaXN0ZXJzOjpmMTMs IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl ciBmMTR7RmxvYXRSZWdpc3RlcnM6OmYxNCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3Rh dGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxNXtGbG9hdFJlZ2lzdGVyczo6ZjE1LCBGbG9h dFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjE2 e0Zsb2F0UmVnaXN0ZXJzOjpmMTYsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBj b25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTd7RmxvYXRSZWdpc3RlcnM6OmYxNywgRmxvYXRSZWdp c3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxOHtGbG9h dFJlZ2lzdGVyczo6ZjE4LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3Rl eHByIEZsb2F0UmVnaXN0ZXIgZjE5e0Zsb2F0UmVnaXN0ZXJzOjpmMTksIEZsb2F0UmVnaXN0ZXJz OjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjB7RmxvYXRSZWdp c3RlcnM6OmYyMCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBG bG9hdFJlZ2lzdGVyIGYyMXtGbG9hdFJlZ2lzdGVyczo6ZjIxLCBGbG9hdFJlZ2lzdGVyczo6RG91 YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjIye0Zsb2F0UmVnaXN0ZXJz OjpmMjIsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRS ZWdpc3RlciBmMjN7RmxvYXRSZWdpc3RlcnM6OmYyMywgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07 Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyNHtGbG9hdFJlZ2lzdGVyczo6ZjI0 LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0 ZXIgZjI1e0Zsb2F0UmVnaXN0ZXJzOjpmMjUsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0 YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjZ7RmxvYXRSZWdpc3RlcnM6OmYyNiwgRmxv YXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYy N3tGbG9hdFJlZ2lzdGVyczo6ZjI3LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMg Y29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjI4e0Zsb2F0UmVnaXN0ZXJzOjpmMjgsIEZsb2F0UmVn aXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjl7Rmxv YXRSZWdpc3RlcnM6OmYyOSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0 ZXhwciBGbG9hdFJlZ2lzdGVyIGYzMHtGbG9hdFJlZ2lzdGVyczo6ZjMwLCBGbG9hdFJlZ2lzdGVy czo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjMxe0Zsb2F0UmVn aXN0ZXJzOjpmMzEsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotKwotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgSW52YWxpZFJlZ3tSZWdpc3RlcnM6OkludmFsaWR9OwotK3N0YXRpYyBjb25z dGV4cHIgRmxvYXRSZWdpc3RlciBJbnZhbGlkRmxvYXRSZWc7Ci0rCi0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciBTdGFja1BvaW50ZXIgPSByMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IEZyYW1lUG9pbnRlciA9IHIzMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJldHVyblJl ZyA9IHIzOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXI2NCBSZXR1cm5SZWc2NChSZXR1cm5S ZWcpOwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBSZXR1cm5GbG9hdDMyUmVne0Zs b2F0UmVnaXN0ZXJzOjpmMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlfTsKLStzdGF0aWMgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIgUmV0dXJuRG91YmxlUmVnID0gZjE7Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9h dFJlZ2lzdGVyIFJldHVyblNpbWQxMjhSZWd7RmxvYXRSZWdpc3RlcnM6OmYxLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpT aW1kMTI4fTsKLSsKLSsvLyByMTYgaXMgbm9uLXZvbGF0aWxlIGFuZCBub24tYWxsb2NhdGFibGUs IHVzZWQgYXMgYSBzYXZlZCBzY3JhdGNoLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgU2F2 ZWRTY3JhdGNoUmVnaXN0ZXIgPSByMTY7Ci0rCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBT ZWNvbmRTY3JhdGNoUmVnID0gcjEyOwotKwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl ciBTY3JhdGNoRmxvYXQzMlJlZ3tGbG9hdFJlZ2lzdGVyczo6ZjAsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGV9 OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBTY3JhdGNoRG91YmxlUmVnID0gZjA7 Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIFNjcmF0Y2hTaW1kMTI4UmVne0Zsb2F0 UmVnaXN0ZXJzOjpmMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjh9OwotKwotK3N0cnVjdCBTY3JhdGNoRmxv YXQzMlNjb3BlIDogcHVibGljIEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUgewotKyAgZXhwbGljaXQg U2NyYXRjaEZsb2F0MzJTY29wZShNYWNyb0Fzc2VtYmxlciYgbWFzbSkKLSsgICAgICA6IEF1dG9G bG9hdFJlZ2lzdGVyU2NvcGUobWFzbSwgU2NyYXRjaEZsb2F0MzJSZWcpIHt9Ci0rfTsKLSsKLStz dHJ1Y3QgU2NyYXRjaERvdWJsZVNjb3BlIDogcHVibGljIEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUg ewotKyAgZXhwbGljaXQgU2NyYXRjaERvdWJsZVNjb3BlKE1hY3JvQXNzZW1ibGVyJiBtYXNtKQot KyAgICAgIDogQXV0b0Zsb2F0UmVnaXN0ZXJTY29wZShtYXNtLCBTY3JhdGNoRG91YmxlUmVnKSB7 fQotK307Ci0rCi0rLy8gUFBDNjQ6IFNjcmF0Y2hTaW1kMTI4U2NvcGUgaXMgYSBzaW1wbGUgcmVn aXN0ZXIgd3JhcHBlciwgTk9UIGEgc2NvcGVkCi0rLy8gYWNxdWlyZS9yZWxlYXNlLiBPbiBQUEM2 NCwgU2NyYXRjaFNpbWQxMjhSZWcgaXMgdjAgKFZTUjMyOyBlbmNvZGVkIGFzCi0rLy8ge0Zsb2F0 UmVnaXN0ZXJzOjpmMCwgU2ltZDEyOH0gc28gZW5jb2RpbmcoKSA9IDAgKyAzMiA9IDMyKSDigJQg ZGlzdGluY3QKLSsvLyBmcm9tIFNjcmF0Y2hEb3VibGVSZWcgPSBmMCAoVlNSMCkuIEl0IGlzIG5v bi1hbGxvY2F0YWJsZSBhbmQgYWx3YXlzCi0rLy8gYXZhaWxhYmxlLiBNYW55IFNJTUQgZnVuY3Rp b25zIGNhbGwgb3RoZXIgU0lNRCBmdW5jdGlvbnMgdGhhdCBhbHNvIG5lZWQKLSsvLyB2MCwgY3Jl YXRpbmcgbmVzdGVkICJzY29wZXMiLiBVc2luZyBBdXRvRmxvYXRSZWdpc3RlclNjb3BlIHdvdWxk IGFzc2VydAotKy8vIG9uIGRvdWJsZS1hY3F1aXJlIGluIGRlYnVnIGJ1aWxkcy4gU2luY2UgdjAg aXMgbmV2ZXIgYWxsb2NhdGVkIGJ5IHRoZQotKy8vIHJlZ2lzdGVyIGFsbG9jYXRvciwgbmVzdGlu ZyBpcyBzYWZlLgotK3N0cnVjdCBTY3JhdGNoU2ltZDEyOFNjb3BlIDogcHVibGljIEZsb2F0UmVn aXN0ZXIgewotKyAgZXhwbGljaXQgU2NyYXRjaFNpbWQxMjhTY29wZShNYWNyb0Fzc2VtYmxlciYp Ci0rICAgICAgOiBGbG9hdFJlZ2lzdGVyKFNjcmF0Y2hTaW1kMTI4UmVnKSB7fQotK307Ci0rCi0r Y2xhc3MgQXNzZW1ibGVyOwotKwotK2NsYXNzIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHsKLSsg cHVibGljOgotKyAgZXhwbGljaXQgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUoQXNzZW1ibGVyJiBh c3NlbWJsZXIpOwotKyAgZXhwbGljaXQgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUoQXNzZW1ibGVy KiBhc3NlbWJsZXIpOwotKyAgflVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlKCk7Ci0rCi0rICBSZWdp c3RlciBBY3F1aXJlKCk7Ci0rICB2b2lkIFJlbGVhc2UoY29uc3QgUmVnaXN0ZXImIHJlZyk7Ci0r ICBib29sIGhhc0F2YWlsYWJsZSgpIGNvbnN0OwotKyAgdm9pZCBJbmNsdWRlKGNvbnN0IEdlbmVy YWxSZWdpc3RlclNldCYgbGlzdCkgewotKyAgICAqYXZhaWxhYmxlXyA9IEdlbmVyYWxSZWdpc3Rl clNldDo6VW5pb24oKmF2YWlsYWJsZV8sIGxpc3QpOwotKyAgfQotKyAgdm9pZCBFeGNsdWRlKGNv bnN0IEdlbmVyYWxSZWdpc3RlclNldCYgbGlzdCkgewotKyAgICAqYXZhaWxhYmxlXyA9IEdlbmVy YWxSZWdpc3RlclNldDo6U3VidHJhY3QoKmF2YWlsYWJsZV8sIGxpc3QpOwotKyAgfQotKwotKyBw cml2YXRlOgotKyAgR2VuZXJhbFJlZ2lzdGVyU2V0KiBhdmFpbGFibGVfOwotKyAgR2VuZXJhbFJl Z2lzdGVyU2V0IG9sZF9hdmFpbGFibGVfOwotK307Ci0rCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdp c3RlciBPc3JGcmFtZVJlZyA9IHI2OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUHJlQmFy cmllclJlZyA9IHI0OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50ZXJwcmV0ZXJQQ1Jl ZyA9IHIxNzsKLSsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIENhbGxUZW1wUmVnMCA9IHI0 OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWcxID0gcjk7Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcFJlZzIgPSByMTA7Ci0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciBDYWxsVGVtcFJlZzMgPSByNzsKLSsvLyBDYWxsVGVtcFJlZzQgbXVzdCBOT1Qg YmUgSlNSZXR1cm5SZWcgKHI1KTogTE1lZ2Ftb3JwaGljTG9hZFNsb3RQZXJtaXNzaXZlCi0rLy8g dXNlcyB0ZW1wRml4ZWQoQ2FsbFRlbXBSZWc0KSBmb3IgYSBzYXZlZCBvYmogcG9pbnRlciBBTkQg ZGVmaW5lUmV0dXJuCi0rLy8gKEpTUmV0dXJuT3BlcmFuZD1yNSkgZm9yIG91dHB1dC4gSWYgdGhl eSBhbGlhcywgdGhlIG1lZ2Ftb3JwaGljIGNhY2hlCi0rLy8gbG9va3VwIGNsb2JiZXJzIHRoZSBz YXZlZCBvYmosIGNvcnJ1cHRpbmcgdGhlICd0aGlzJyBwb2ludGVyLgotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWc0ID0gcjg7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBDYWxsVGVtcFJlZzUgPSByNjsKLSsKLSsvLyBQUEM2NCBFTEZ2MiBoYXMgbm8gdm9sYXRpbGUg bm9uLWFyZyBHUFJzIChyMy1yMTAgYXJlIGFsbCBhcmcgcmVncykuCi0rLy8gVXNlIGFsbG9jYXRh YmxlIG5vbi12b2xhdGlsZSByZWdpc3RlcnMgYXMgb3ZlcmZsb3cgdGVtcHMuCi0rc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcE5vbkFyZ1JlZ3NbXSA9IHtyMTQsIHIxNX07Ci0rc3Rh dGljIGNvbnN0IHVpbnQzMl90IE51bUNhbGxUZW1wTm9uQXJnUmVncyA9IHN0ZDo6c2l6ZShDYWxs VGVtcE5vbkFyZ1JlZ3MpOwotKwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVn MCA9IHIzOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnMSA9IHI0OwotK3N0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnMiA9IHI1OwotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgSW50QXJnUmVnMyA9IHI2OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg SW50QXJnUmVnNCA9IHI3OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnNSA9 IHI4OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnNiA9IHI5OwotK3N0YXRp YyBjb25zdGV4cHIgUmVnaXN0ZXIgSW50QXJnUmVnNyA9IHIxMDsKLSsKLSsvLyBSZWdpc3RlcnMg dXNlZCBieSBSZWdFeHBNYXRjaGVyIGFuZCBSZWdFeHBFeGVjTWF0Y2ggc3R1YnMuCi0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBNYXRjaGVyUmVnRXhwUmVnID0gQ2FsbFRlbXBSZWcw OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwTWF0Y2hlclN0cmluZ1JlZyA9IENh bGxUZW1wUmVnMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cE1hdGNoZXJMYXN0 SW5kZXhSZWcgPSBDYWxsVGVtcFJlZzI7Ci0rCi0rLy8gUmVnaXN0ZXJzIHVzZWQgYnkgUmVnRXhw RXhlY1Rlc3Qgc3R1YiAoZG8gbm90IHVzZSBSZXR1cm5SZWcpLgotK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgUmVnRXhwRXhlY1Rlc3RSZWdFeHBSZWcgPSBDYWxsVGVtcFJlZzA7Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBFeGVjVGVzdFN0cmluZ1JlZyA9IENhbGxUZW1wUmVn MTsKLSsKLSsvLyBSZWdpc3RlcnMgdXNlZCBieSBSZWdFeHBTZWFyY2hlciBzdHViIChkbyBub3Qg dXNlIFJldHVyblJlZykuCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBTZWFyY2hl clJlZ0V4cFJlZyA9IENhbGxUZW1wUmVnMDsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJl Z0V4cFNlYXJjaGVyU3RyaW5nUmVnID0gQ2FsbFRlbXBSZWcxOwotK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgUmVnRXhwU2VhcmNoZXJMYXN0SW5kZXhSZWcgPSBDYWxsVGVtcFJlZzI7Ci0rCi0r c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBKU1JldHVyblJlZ19UeXBlID0gcjY7Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBKU1JldHVyblJlZ19EYXRhID0gcjU7Ci0rc3RhdGljIGNvbnN0 ZXhwciBSZWdpc3RlciBKU1JldHVyblJlZyA9IHI1OwotK3N0YXRpYyBjb25zdGV4cHIgVmFsdWVP cGVyYW5kIEpTUmV0dXJuT3BlcmFuZCA9IFZhbHVlT3BlcmFuZChKU1JldHVyblJlZyk7Ci0rCi0r c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25BcmdSZWcwID0gcjE5OwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmVnMSA9IHIyMDsKLStzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIEFCSU5vbkFyZ1JlZzIgPSByMjE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBBQklOb25BcmdSZWczID0gcjIyOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9u QXJnUmV0dXJuUmVnMCA9IHIyOTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEFCSU5vbkFy Z1JldHVyblJlZzEgPSByMzA7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25Wb2xh dGlsZVJlZyA9IHIxNDsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEFCSU5vbkFyZ1JldHVy blZvbGF0aWxlUmVnID0gcjExOwotKwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBB QklOb25BcmdEb3VibGVSZWd7RmxvYXRSZWdpc3RlcnM6OmYxNCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9 OwotKwotKy8vIFdhc20gaW5zdGFuY2UgcG9pbnRlciByZWdpc3Rlci4gUHJlc2VydmVkIGFjcm9z cyB3YXNtIGZ1bmN0aW9uIGNhbGxzLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSW5zdGFu Y2VSZWcgPSByMTg7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBIZWFwUmVnID0gcjI0Owot K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgR2xvYmFsUmVnID0gcjIzOwotKwotKy8vIFdhc20g dGFibGUgY2FsbCByZWdpc3RlcnMuCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtVGFi bGVDYWxsU2NyYXRjaFJlZzAgPSBBQklOb25BcmdSZWcwOwotK3N0YXRpYyBjb25zdGV4cHIgUmVn aXN0ZXIgV2FzbVRhYmxlQ2FsbFNjcmF0Y2hSZWcxID0gQUJJTm9uQXJnUmVnMTsKLStzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWJsZUNhbGxTaWdSZWcgPSBBQklOb25BcmdSZWcyOwot K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhYmxlQ2FsbEluZGV4UmVnID0gQUJJTm9u QXJnUmVnMzsKLSsKLSsvLyBXYXNtIHJlZiBjYWxsIHJlZ2lzdGVycy4KLStzdGF0aWMgY29uc3Rl eHByIFJlZ2lzdGVyIFdhc21DYWxsUmVmQ2FsbFNjcmF0Y2hSZWcwID0gQUJJTm9uQXJnUmVnMDsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21DYWxsUmVmQ2FsbFNjcmF0Y2hSZWcxID0g QUJJTm9uQXJnUmVnMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21DYWxsUmVmQ2Fs bFNjcmF0Y2hSZWcyID0gQUJJTm9uQXJnUmVnMjsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IFdhc21DYWxsUmVmUmVnID0gQUJJTm9uQXJnUmVnMzsKLSsKLSsvLyBXYXNtIHRhaWwgY2FsbCBz Y3JhdGNoIHJlZ2lzdGVycy4KLSsvLyBXYXNtVGFpbENhbGxSQVNjcmF0Y2hSZWcgbXVzdCBOT1Qg YmUgQUJJTm9uQXJnUmVnMDogdGhlIHNoYXJlZCB0YWlsLWNhbGwKLSsvLyBjb2RlICh3YXNtUmV0 dXJuQ2FsbEltcG9ydCwgd2FzbVJldHVybkNhbGxJbmRpcmVjdCwgd2FzbVJldHVybkNhbGxSZWYp Ci0rLy8gc3RvcmVzIHRoZSBjYWxsZWUgYWRkcmVzcyBpbiBBQklOb25BcmdSZWcwLCBhbmQgQ29s bGFwc2VXYXNtRnJhbWUqCi0rLy8gb3ZlcndyaXRlcyB0ZW1wRm9yUkEuIE9uIGFyY2hpdGVjdHVy ZXMgd2l0aCBhIEdQUiBsaW5rIHJlZ2lzdGVyIChBUk0sCi0rLy8gTUlQUywgTEE2NCwgUklTQy1W KSB0aGlzIGlzIHJhL2xyLiBQUEM2NCdzIExSIGlzIGFuIFNQUiwgc28gd2UgdXNlIHIxNAotKy8v IChBQklOb25Wb2xhdGlsZVJlZykgd2hpY2ggaXMgY2FsbGVlLXNhdmVkIGFuZCBub3QgdXNlZCBp biBjYWxsIHNldHVwLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhaWxDYWxsSW5z dGFuY2VTY3JhdGNoUmVnID0gQUJJTm9uQXJnUmVnMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIFdhc21UYWlsQ2FsbFJBU2NyYXRjaFJlZyA9IEFCSU5vblZvbGF0aWxlUmVnOwotK3N0YXRp YyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhaWxDYWxsRlBTY3JhdGNoUmVnID0gQUJJTm9uQXJn UmVnMzsKLSsKLSsvLyBSZWdpc3RlciB1c2VkIGFzIGEgc2NyYXRjaCBhbG9uZyB0aGUgcmV0dXJu IHBhdGggaW4gdGhlIGZhc3QganMgLT4gd2FzbSBzdHViCi0rLy8gY29kZS4gTXVzdCBub3Qgb3Zl cmxhcCBSZXR1cm5SZWcsIEpTUmV0dXJuT3BlcmFuZCwgb3IgSW5zdGFuY2VSZWcuCi0rLy8gTXVz dCBiZSB2b2xhdGlsZS4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21KaXRFbnRyeVJl dHVyblNjcmF0Y2ggPSByMTA7Ci0rCi0rc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBBQklTdGFj a0FsaWdubWVudCA9IDE2OwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgQ29kZUFsaWdubWVu dCA9IDE2OwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgSml0U3RhY2tBbGlnbm1lbnQgPSAx NjsKLSsKLStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IEppdFN0YWNrVmFsdWVBbGlnbm1lbnQg PQotKyAgICBKaXRTdGFja0FsaWdubWVudCAvIHNpemVvZihWYWx1ZSk7Ci0rc3RhdGljX2Fzc2Vy dChKaXRTdGFja0FsaWdubWVudCAlIHNpemVvZihWYWx1ZSkgPT0gMCAmJgotKyAgICAgICAgICAg ICAgICAgIEppdFN0YWNrVmFsdWVBbGlnbm1lbnQgPj0gMSwKLSsgICAgICAgICAgICAgICJTdGFj ayBhbGlnbm1lbnQgc2hvdWxkIGJlIGEgbm9uLXplcm8gbXVsdGlwbGUgb2Ygc2l6ZW9mKFZhbHVl KSIpOwotKwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgU2ltZE1lbW9yeUFsaWdubWVudCA9 IDE2OwotK3N0YXRpY19hc3NlcnQoCi0rICAgIENvZGVBbGlnbm1lbnQgJSBTaW1kTWVtb3J5QWxp Z25tZW50ID09IDAsCi0rICAgICJDb2RlIGFsaWdubWVudCBzaG91bGQgYmUgbGFyZ2VyIHRoYW4g YW55IG9mIHRoZSBhbGlnbm1lbnRzICIKLSsgICAgIndoaWNoIGFyZSB1c2VkIGZvciB0aGUgY29u c3RhbnQgc2VjdGlvbnMgb2YgdGhlIGNvZGUgYnVmZmVyLiAiCi0rICAgICJUaHVzIGl0IHNob3Vs ZCBiZSBsYXJnZXIgdGhhbiB0aGUgYWxpZ25tZW50IGZvciBTSU1EIGNvbnN0YW50cy4iKTsKLSsK LStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFdhc21TdGFja0FsaWdubWVudCA9IFNpbWRNZW1v cnlBbGlnbm1lbnQ7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFdhc21UcmFwSW5zdHJ1Y3Rpb25M ZW5ndGggPSA0OwotKwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgV2FzbUNoZWNrZWRDYWxs RW50cnlPZmZzZXQgPSAwdTsKLStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFdhc21DaGVja2Vk VGFpbEVudHJ5T2Zmc2V0ID0gMzJ1OwotKwotK3N0YXRpYyBjb25zdGV4cHIgU2NhbGUgU2NhbGVQ b2ludGVyID0gVGltZXNFaWdodDsKLSsKLStjbGFzcyBBQklBcmdHZW5lcmF0b3IgOiBwdWJsaWMg QUJJQXJnR2VuZXJhdG9yU2hhcmVkIHsKLSsgcHVibGljOgotKyAgZXhwbGljaXQgQUJJQXJnR2Vu ZXJhdG9yKEFCSUtpbmQga2luZCkKLSsgICAgICA6IEFCSUFyZ0dlbmVyYXRvclNoYXJlZChraW5k KSwKLSsgICAgICAgIGludFJlZ0luZGV4XygwKSwKLSsgICAgICAgIGZsb2F0UmVnSW5kZXhfKDAp LAotKyAgICAgICAgY3VycmVudF8oKSB7Ci0rICAgIC8vIFBQQzY0IEVMRnYyIEFCSTogdGhlIGNh bGxlZSBzYXZlcyBMUiwgQ1IsIFRPQyBpbnRvIHRoZSBjYWxsZXIncwotKyAgICAvLyBmcmFtZSAo b2Zmc2V0cyA4LCAxNiwgMjQgZnJvbSBjYWxsZXIgU1ApLiBSZXNlcnZlIDMyIGJ5dGVzIHNvIHRo YXQKLSsgICAgLy8gY2FsbFdpdGhBQklQcmUgYWx3YXlzIGFsbG9jYXRlcyBlbm91Z2ggc3BhY2Ug Zm9yIHRoaXMgbGluayBhcmVhLgotKyAgICBzdGFja09mZnNldF8gKz0gU2hhZG93U3RhY2tTcGFj ZTsKLSsgIH0KLSsKLSsgIEFCSUFyZyBuZXh0KE1JUlR5cGUgYXJnVHlwZSk7Ci0rICBBQklBcmcm IGN1cnJlbnQoKSB7IHJldHVybiBjdXJyZW50XzsgfQotKwotKyBwcm90ZWN0ZWQ6Ci0rICB1bnNp Z25lZCBpbnRSZWdJbmRleF87Ci0rICB1bnNpZ25lZCBmbG9hdFJlZ0luZGV4XzsKLSsgIEFCSUFy ZyBjdXJyZW50XzsKLSt9OwotKwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgTnVtSW50QXJn UmVncyA9IDg7Ci0rc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBOdW1GbG9hdEFyZ1JlZ3MgPSAx MzsKLSsKLStzdGF0aWMgaW5saW5lIGJvb2wgR2V0SW50QXJnUmVnKHVpbnQzMl90IHVzZWRJbnRB cmdzLCBSZWdpc3Rlciogb3V0KSB7Ci0rICBpZiAodXNlZEludEFyZ3MgPCBOdW1JbnRBcmdSZWdz KSB7Ci0rICAgICpvdXQgPSBSZWdpc3Rlcjo6RnJvbUNvZGUocjMuY29kZSgpICsgdXNlZEludEFy Z3MpOwotKyAgICByZXR1cm4gdHJ1ZTsKLSsgIH0KLSsgIHJldHVybiBmYWxzZTsKLSt9Ci0rCi0r c3RhdGljIGlubGluZSBib29sIEdldEZsb2F0QXJnUmVnKHVpbnQzMl90IHVzZWRGbG9hdEFyZ3Ms IEZsb2F0UmVnaXN0ZXIqIG91dCkgewotKyAgaWYgKHVzZWRGbG9hdEFyZ3MgPCBOdW1GbG9hdEFy Z1JlZ3MpIHsKLSsgICAgKm91dCA9IEZsb2F0UmVnaXN0ZXI6OkZyb21Db2RlKGYxLmNvZGUoKSAr IHVzZWRGbG9hdEFyZ3MpOwotKyAgICByZXR1cm4gdHJ1ZTsKLSsgIH0KLSsgIHJldHVybiBmYWxz ZTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBib29sIEdldFRlbXBSZWdGb3JJbnRBcmcodWludDMy X3QgdXNlZEludEFyZ3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgdXNlZEZsb2F0QXJncywgUmVnaXN0ZXIqIG91dCkgewotKyAgTU9aX0FTU0VSVCh1 c2VkRmxvYXRBcmdzID09IDApOwotKwotKyAgaWYgKEdldEludEFyZ1JlZyh1c2VkSW50QXJncywg b3V0KSkgewotKyAgICByZXR1cm4gdHJ1ZTsKLSsgIH0KLSsKLSsgIHVzZWRJbnRBcmdzIC09IE51 bUludEFyZ1JlZ3M7Ci0rICBpZiAodXNlZEludEFyZ3MgPj0gTnVtQ2FsbFRlbXBOb25BcmdSZWdz KSB7Ci0rICAgIHJldHVybiBmYWxzZTsKLSsgIH0KLSsgICpvdXQgPSBDYWxsVGVtcE5vbkFyZ1Jl Z3NbdXNlZEludEFyZ3NdOwotKyAgcmV0dXJuIHRydWU7Ci0rfQotKwotKy8vIFBQQzY0IGluc3Ry dWN0aW9uIGZpZWxkIHBvc2l0aW9ucy4KLSsvLyBQUEMgdXNlcyBiaWctZW5kaWFuIGJpdCBudW1i ZXJpbmcgKGJpdCAwID0gTVNCKSwgYnV0IHdlIHN0b3JlIGluc3RydWN0aW9ucwotKy8vIGluIGEg dWludDMyX3Qgd2hlcmUgYml0IDAgPSBMU0IuIFRoZSBzaGlmdHMgYmVsb3cgYXJlIGluIExTQi0w IHRlcm1zLgotKy8vCi0rLy8gICBbMDo1XSAgcHJpbWFyeSBvcGNvZGUgICAoT3Bjb2RlU2hpZnQ9 MjYpCi0rLy8gICBbNjoxMF0gIFJUL1JTL0JGL1RPICAgICAoUlRTaGlmdD0yMSwgNSBiaXRzKQot Ky8vICAgWzExOjE1XSBSQS9CSSAgICAgICAgICAgKFJBU2hpZnQ9MTYsIDUgYml0cykKLSsvLyAg IFsxNjoyMF0gUkIvU0ggICAgICAgICAgIChSQlNoaWZ0PTExLCA1IGJpdHMpCi0rLy8gICBbMTY6 MzFdIFNJL1VJL0QgICAgICAgICAoSW1tMTZTaGlmdD0wLCAxNiBiaXRzKQotKy8vICAgWzIxOjI1 XSBzdWJvcCBiaXRzICAgICAgKHZhcmllcykKLSsvLyAgIFsyMTozMF0gWE8gICAgICAgICAgICAg IChYLWZvcm07IEEvTS9NRC9NRFMgbmFycm93ZXIpCi0rLy8gICBbMzFdICAgIFJjIGJpdCAgICAg ICAgICAoUmNTaGlmdD0wKQotKwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcGNvZGVTaGlmdCA9 IDI2OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcGNvZGVCaXRzID0gNjsKLSsKLStzdGF0aWMg Y29uc3QgdWludDMyX3QgUlRTaGlmdCA9IDIxOwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSVEJp dHMgPSA1OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSU1NoaWZ0ID0gMjE7Ci0rc3RhdGljIGNv bnN0IHVpbnQzMl90IFJTQml0cyA9IDU7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJBU2hpZnQg PSAxNjsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUkFCaXRzID0gNTsKLStzdGF0aWMgY29uc3Qg dWludDMyX3QgUkJTaGlmdCA9IDExOwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSQkJpdHMgPSA1 OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSQ1NoaWZ0ID0gNjsKLStzdGF0aWMgY29uc3QgdWlu dDMyX3QgUkNCaXRzID0gNTsKLSsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgQk9TaGlmdCA9IDIx OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBCT0JpdHMgPSA1OwotK3N0YXRpYyBjb25zdCB1aW50 MzJfdCBCSVNoaWZ0ID0gMTY7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IEJJQml0cyA9IDU7Ci0r Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IEltbTE2U2hpZnQgPSAwOwotK3N0YXRpYyBjb25zdCB1 aW50MzJfdCBJbW0xNkJpdHMgPSAxNjsKLSsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUmNTaGlm dCA9IDA7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJjQml0ID0gMTsKLSsKLStzdGF0aWMgY29u c3QgdWludDMyX3QgUlRNYXNrID0gKCgxIDw8IFJUQml0cykgLSAxKSA8PCBSVFNoaWZ0OwotK3N0 YXRpYyBjb25zdCB1aW50MzJfdCBSU01hc2sgPSAoKDEgPDwgUlNCaXRzKSAtIDEpIDw8IFJTU2hp ZnQ7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJBTWFzayA9ICgoMSA8PCBSQUJpdHMpIC0gMSkg PDwgUkFTaGlmdDsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUkJNYXNrID0gKCgxIDw8IFJCQml0 cykgLSAxKSA8PCBSQlNoaWZ0OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbW0xNk1hc2sgPSAo MSA8PCBJbW0xNkJpdHMpIC0gMTsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUmVnTWFzayA9ICgx IDw8IFJUQml0cykgLSAxOwotKwotK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUlQoUmVnaXN0ZXIg cikgeyByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8IFJUU2hpZnQ7IH0KLStzdGF0aWMgaW5s aW5lIHVpbnQzMl90IFJUKEZsb2F0UmVnaXN0ZXIgcikgewotKyAgcmV0dXJuICh1aW50MzJfdCly LmNvZGUoKSA8PCBSVFNoaWZ0OwotK30KLStzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJTKFJlZ2lz dGVyIHIpIHsgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSU1NoaWZ0OyB9Ci0rc3RhdGlj IGlubGluZSB1aW50MzJfdCBSUyhGbG9hdFJlZ2lzdGVyIHIpIHsKLSsgIHJldHVybiAodWludDMy X3Qpci5jb2RlKCkgPDwgUlNTaGlmdDsKLSt9Ci0rc3RhdGljIGlubGluZSB1aW50MzJfdCBSQShS ZWdpc3RlciByKSB7IHJldHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUkFTaGlmdDsgfQotK3N0 YXRpYyBpbmxpbmUgdWludDMyX3QgUkEoRmxvYXRSZWdpc3RlciByKSB7Ci0rICByZXR1cm4gKHVp bnQzMl90KXIuY29kZSgpIDw8IFJBU2hpZnQ7Ci0rfQotK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qg UkIoUmVnaXN0ZXIgcikgeyByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8IFJCU2hpZnQ7IH0K LStzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJCKEZsb2F0UmVnaXN0ZXIgcikgewotKyAgcmV0dXJu ICh1aW50MzJfdClyLmNvZGUoKSA8PCBSQlNoaWZ0OwotK30KLSsKLSsvLyBTUFIgZW5jb2Rpbmc6 IHRoZSBTUFIgbnVtYmVyIGlzIHNwbGl0IGFjcm9zcyBiaXRzIDExLTE1IGFuZCAxNi0yMCBpbiBh Ci0rLy8gc3dhcHBlZCBhcnJhbmdlbWVudC4gIFBQQ19TUFIoeCkgcHJvZHVjZXMgdGhlIHZhbHVl IHRvIE9SIGludG8gYW4KLSsvLyBtdHNwci9tZnNwciBpbnN0cnVjdGlvbiBhdCB0aGUgUkIrUkEg cG9zaXRpb24gKGJpdHMgMTEtMjApLgotKyNkZWZpbmUgUFBDX1NQUih4KSAoKCgoaW50KSh4KSA+ PiA1KSAmIDB4MWYpIDw8IDExIHwgKChpbnQpKHgpICYgMHgxZikgPDwgMTYpCi0rCi0rZW51bSBQ UENPcGNvZGVzIHsKLSsgIFBQQ19hZGQgPSAweDdDMDAwMjE0LAotKyAgUFBDX2FkZGMgPSAweDdD MDAwMDE0LAotKyAgUFBDX2FkZGUgPSAweDdDMDAwMTE0LAotKyAgUFBDX2FkZGkgPSAweDM4MDAw MDAwLAotKyAgUFBDX2FkZGlzID0gMHgzQzAwMDAwMCwKLSsgIFBQQ19hbmRfID0gMHg3QzAwMDAz OCwKLSsgIC8vIGFuZGkuIGlzIGFsd2F5cyByZWNvcmQgZm9ybSAobm8gbm9uLXJlY29yZCBhbmRp IGV4aXN0cykuCi0rICBQUENfYW5kaV9kb3QgPSAweDcwMDAwMDAwLAotKyAgUFBDX2IgPSAweDQ4 MDAwMDAwLAotKyAgUFBDX2JjID0gMHg0MDAwMDAwMCwKLSsgIC8vIEVuY29kZWQgImJjbCAyMCwg bHQsICQrNCI6IFBDLXJlbGF0aXZlIGJyYW5jaC1hbmQtbGluayBieSA0IGJ5dGVzCi0rICAvLyAo bGFuZCBhdCB0aGUgbmV4dCBpbnN0cnVjdGlvbikgd2l0aCBCTz0yMCAoYnJhbmNoIGFsd2F5cyk7 IEJJPTAKLSsgIC8vICg9bHQpIGlzIGRvbid0LWNhcmUgYmVjYXVzZSBCTz0yMCBmb3JjZXMgdGhl IGJyYW5jaC4gVXNlZCBieQotKyAgLy8gUG9vbExvYWRGUFJ7MzIsNjR9J3MgUE9XRVI4IHN0YW56 YSBhbmQgUG9vbExvYWRTaW1kMTI4J3Mgc3RhbnphIHRvCi0rICAvLyBzZWVkIExSIHdpdGggdGhl IGN1cnJlbnQgUEMgZm9yIHRoZSBzdWJzZXF1ZW50IG1mbHIrbGQgYmFzZQotKyAgLy8gY29tcHV0 YXRpb24uIFVzZWQgYnkgcGF0Y2ggc2l0ZXMgdGhhdCB3cml0ZSByYXcgaW5zdHJ1Y3Rpb24gbWVt b3J5Ci0rICAvLyAoUGF0Y2hDb25zdGFudFBvb2xMb2FkLCBXcml0ZUxvYWQ2NEluc3RydWN0aW9u cywgZXRjLikuIE5hbWVkIGZvcgotKyAgLy8gZ3JlcC1hYmlsaXR5IGFuZCB0byBhdm9pZCBtYWdp Yy1udW1iZXIgY29waWVzLgotKyAgUFBDX2JjbF9hbHdheXNfcGx1czQgPSAweDQyODAwMDA1LAot KyAgUFBDX2JjdHIgPSAweDRFODAwNDIwLAotKyAgUFBDX2JjY3RyID0gMHg0QzAwMDQyMCwKLSsg IFBQQ19ibHIgPSAweDRFODAwMDIwLAotKyAgUFBDX2NtcGQgPSAweDdDMjAwMDAwLAotKyAgUFBD X2NtcGRpID0gMHgyQzIwMDAwMCwKLSsgIFBQQ19jbXBsZCA9IDB4N0MyMDAwNDAsCi0rICBQUENf Y21wbGRpID0gMHgyODIwMDAwMCwKLSsgIFBQQ19jbXB3ID0gMHg3QzAwMDAwMCwKLSsgIFBQQ19j bXB3aSA9IDB4MkMwMDAwMDAsCi0rICBQUENfY21wbHcgPSAweDdDMDAwMDQwLAotKyAgUFBDX2Nt cGx3aSA9IDB4MjgwMDAwMDAsCi0rICBQUENfY250bHpkID0gMHg3QzAwMDA3NCwKLSsgIFBQQ19j bnRsencgPSAweDdDMDAwMDM0LAotKyAgUFBDX2NudHR6ZCA9IDB4N0MwMDA0NzQsCi0rICBQUENf Y250dHp3ID0gMHg3QzAwMDQzNCwKLSsgIFBQQ19jcmFuZGMgPSAweDRDMDAwMTAyLAotKyAgUFBD X2Nyb3IgPSAweDRDMDAwMzgyLAotKyAgUFBDX2Nyb3JjID0gMHg0QzAwMDM0MiwKLSsgIFBQQ19k aXZkID0gMHg3QzAwMDNEMiwKLSsgIFBQQ19kaXZkdSA9IDB4N0MwMDAzOTIsCi0rICBQUENfZGl2 dyA9IDB4N0MwMDAzRDYsCi0rICBQUENfZGl2d3UgPSAweDdDMDAwMzk2LAotKyAgLy8gUE9XRVI5 IChJU0EgMy4wKSBtb2R1bG8gaW5zdHJ1Y3Rpb25zLgotKyAgUFBDX21vZHNkID0gMHg3QzAwMDYx MiwKLSsgIFBQQ19tb2RzdyA9IDB4N0MwMDA2MTYsCi0rICBQUENfbW9kdWQgPSAweDdDMDAwMjEy LAotKyAgUFBDX21vZHV3ID0gMHg3QzAwMDIxNiwKLSsgIFBQQ19leHRzYiA9IDB4N0MwMDA3NzQs Ci0rICBQUENfZXh0c2ggPSAweDdDMDAwNzM0LAotKyAgUFBDX2V4dHN3ID0gMHg3QzAwMDdCNCwK LSsgIFBQQ19mYWJzID0gMHhGQzAwMDIxMCwKLSsgIFBQQ19mYWRkID0gMHhGQzAwMDAyQSwKLSsg IFBQQ19mYWRkcyA9IDB4RUMwMDAwMkEsCi0rICBQUENfZmNwc2duID0gMHhGQzAwMDAxMCwKLSsg IFBQQ19mY2ZpZCA9IDB4RkMwMDA2OUMsCi0rICBQUENfZmNmaWRzID0gMHhFQzAwMDY5QywKLSsg IFBQQ19mY2ZpZHUgPSAweEZDMDAwNzlDLAotKyAgUFBDX2ZjZmlkdXMgPSAweEVDMDAwNzlDLAot KyAgUFBDX2ZjbXB1ID0gMHhGQzAwMDAwMCwKLSsgIFBQQ19mY3RpZCA9IDB4RkMwMDA2NUMsCi0r ICBQUENfZmN0aWR6ID0gMHhGQzAwMDY1RSwKLSsgIFBQQ19mY3RpZHV6ID0gMHhGQzAwMDc1RSwK LSsgIFBQQ19mY3Rpd3ogPSAweEZDMDAwMDFFLAotKyAgUFBDX2ZkaXYgPSAweEZDMDAwMDI0LAot KyAgUFBDX2ZkaXZzID0gMHhFQzAwMDAyNCwKLSsgIFBQQ19mbXIgPSAweEZDMDAwMDkwLAotKyAg UFBDX2ZtdWwgPSAweEZDMDAwMDMyLAotKyAgUFBDX2ZtdWxzID0gMHhFQzAwMDAzMiwKLSsgIFBQ Q19mbmVnID0gMHhGQzAwMDA1MCwKLSsgIFBQQ19mcmltID0gMHhGQzAwMDNEMCwKLSsgIFBQQ19m cmlwID0gMHhGQzAwMDM5MCwKLSsgIFBQQ19mcml6ID0gMHhGQzAwMDM1MCwKLSsgIFBQQ19mcnNw ID0gMHhGQzAwMDAxOCwKLSsgIFBQQ19mc3ViID0gMHhGQzAwMDAyOCwKLSsgIFBQQ19mc3VicyA9 IDB4RUMwMDAwMjgsCi0rICBQUENfZnNxcnQgPSAweEZDMDAwMDJDLAotKyAgUFBDX2ZzcXJ0cyA9 IDB4RUMwMDAwMkMsCi0rICBQUENfaXNlbCA9IDB4N0MwMDAwMUUsCi0rICAvLyBQT1dFUjEwIChJ U0EgMy4xKS4gUlQgPSAoQ1JbQkldPT0xKSA/IDEgOiAwLiBYTz0zODQgYXQgYml0cyAyMS0zMC4K LSsgIFBQQ19zZXRiYyA9IDB4N0MwMDAzMDAsCi0rICAvLyBQT1dFUjEwIChJU0EgMy4xKS4gUlQg PSAoQ1JbQkldPT0wKSA/IDEgOiAwLiBYTz00MTYuCi0rICBQUENfc2V0YmNyID0gMHg3QzAwMDM0 MCwKLSsgIFBQQ19sYmFyeCA9IDB4N0MwMDAwNjgsCi0rICBQUENfbGJ6ID0gMHg4ODAwMDAwMCwK LSsgIFBQQ19sYnp4ID0gMHg3QzAwMDBBRSwKLSsgIFBQQ19sZCA9IDB4RTgwMDAwMDAsCi0rICBQ UENfbGRhcnggPSAweDdDMDAwMEE4LAotKyAgUFBDX2xkeCA9IDB4N0MwMDAwMkEsCi0rICBQUENf bGZkID0gMHhDODAwMDAwMCwKLSsgIFBQQ19sZmR4ID0gMHg3QzAwMDRBRSwKLSsgIFBQQ19sZml3 YXggPSAweDdDMDAwNkFFLAotKyAgUFBDX2xmaXd6eCA9IDB4N0MwMDA2RUUsCi0rICBQUENfbGZz ID0gMHhDMDAwMDAwMCwKLSsgIFBQQ19sZnN4ID0gMHg3QzAwMDQyRSwKLSsgIFBQQ19saGEgPSAw eEE4MDAwMDAwLAotKyAgUFBDX2xoYXJ4ID0gMHg3QzAwMDBFOCwKLSsgIFBQQ19saGF4ID0gMHg3 QzAwMDJBRSwKLSsgIFBQQ19saHogPSAweEEwMDAwMDAwLAotKyAgUFBDX2xoenggPSAweDdDMDAw MjJFLAotKyAgUFBDX2x3YSA9IDB4RTgwMDAwMDIsCi0rICBQUENfbHdhcnggPSAweDdDMDAwMDI4 LAotKyAgUFBDX2x3eiA9IDB4ODAwMDAwMDAsCi0rICAvLyBYLWZvcm0gc2lnbi1leHRlbmRpbmcg d29yZCBsb2FkIChvcGNvZGUgMzEsIFhPPTM0MSkuIFNpbmdsZS1pbnNuCi0rICAvLyBlcXVpdmFs ZW50IG9mIGx3enggKyBleHRzdy4KLSsgIFBQQ19sd2F4ID0gMHg3QzAwMDJBQSwKLSsgIFBQQ19s d3p4ID0gMHg3QzAwMDAyRSwKLSsgIFBQQ19tY3J4cnggPSAweDdDMDAwNDgwLAotKyAgUFBDX21j cmZzID0gMHhGQzAwMDA4MCwKLSsgIFBQQ19tZm9jcmYgPSAweDdDMTAwMDI2LAotKyAgUFBDX21m ZnMgPSAweEZDMDAwNDhFLAotKyAgUFBDX21mc3ByID0gMHg3QzAwMDJBNiwKLSsgIFBQQ19tZnZz cmQgPSAweDdDMDAwMDY2LAotKyAgUFBDX210Y3JmID0gMHg3QzAwMDEyMCwKLSsgIFBQQ19tdGZz YjAgPSAweEZDMDAwMDhDLAotKyAgUFBDX210dnNyZCA9IDB4N0MwMDAxNjYsCi0rICAvLyBQT1dF UjgrIChJU0EgMi4wNykuIFZTUltYVF0uZHdbMF0gPSBzaWduX2V4dF82NChSQVszMjo2M10pLgot KyAgLy8gWE89MjExIGF0IGJpdHMgMjEtMzAuIENvbWJpbmVzIGV4dHN3ICsgbXR2c3JkIGludG8g b25lIGluc24uCi0rICBQUENfbXR2c3J3YSA9IDB4N0MwMDAxQTYsCi0rICBQUENfbXR2c3J3cyA9 IDB4N0MwMDAzMjYsCi0rICBQUENfbXR2c3J3eiA9IDB4N0MwMDAxRTYsCi0rICBQUENfbXRzcHIg PSAweDdDMDAwM0E2LAotKyAgUFBDX211bGhkID0gMHg3QzAwMDA5MiwKLSsgIFBQQ19tdWxoZHUg PSAweDdDMDAwMDEyLAotKyAgUFBDX211bGh3dSA9IDB4N0MwMDAwMTYsCi0rICBQUENfbXVsbGkg PSAweDFDMDAwMDAwLAotKyAgUFBDX211bGxkID0gMHg3QzAwMDFEMiwKLSsgIFBQQ19tdWxsZG8g PSAweDdDMDAwNUQyLAotKyAgUFBDX211bGx3ID0gMHg3QzAwMDFENiwKLSsgIFBQQ19uZWcgPSAw eDdDMDAwMEQwLAotKyAgUFBDX25vciA9IDB4N0MwMDAwRjgsCi0rICBQUENfb3JfID0gMHg3QzAw MDM3OCwKLSsgIFBQQ19vcmkgPSAweDYwMDAwMDAwLAotKyAgUFBDX29yaXMgPSAweDY0MDAwMDAw LAotKyAgUFBDX3BvcGNudGIgPSAweDdDMDAwMEY0LAotKyAgUFBDX3BvcGNudGQgPSAweDdDMDAw M0Y0LAotKyAgUFBDX3BvcGNudHcgPSAweDdDMDAwMkY0LAotKyAgUFBDX2JyZCA9IDB4N0MwMDAx NzYsICAvLyBQT1dFUjEwOiBieXRlLXJldmVyc2UgZG91Ymxld29yZCAoWC1mb3JtLCBYTz0xODcp Ci0rICBQUENfYnJoID0gMHg3QzAwMDFCNiwgIC8vIFBPV0VSMTA6IGJ5dGUtcmV2ZXJzZSBlYWNo IGhhbGZ3b3JkIChYLWZvcm0sIFhPPTIxOSkKLSsgIFBQQ19icncgPSAweDdDMDAwMTM2LCAgLy8g UE9XRVIxMDogYnl0ZS1yZXZlcnNlIGVhY2ggd29yZCAgICAgKFgtZm9ybSwgWE89MTU1KQotKyAg UFBDX3JsZGNsID0gMHg3ODAwMDAxMCwKLSsgIFBQQ19ybGRpY2wgPSAweDc4MDAwMDAwLAotKyAg UFBDX3JsZGNyID0gMHg3ODAwMDAxMiwKLSsgIFBQQ19ybGRpY3IgPSAweDc4MDAwMDA0LAotKyAg UFBDX3JsZGltaSA9IDB4NzgwMDAwMEMsCi0rICBQUENfcmx3aW1pID0gMHg1MDAwMDAwMCwKLSsg IFBQQ19ybHdpbm0gPSAweDU0MDAwMDAwLAotKyAgUFBDX3Jsd25tID0gMHg1QzAwMDAwMCwKLSsg IFBQQ19zbGQgPSAweDdDMDAwMDM2LAotKyAgUFBDX3NsdyA9IDB4N0MwMDAwMzAsCi0rICBQUENf c3JhZCA9IDB4N0MwMDA2MzQsCi0rICBQUENfc3JhZGkgPSAweDdDMDAwNjc0LAotKyAgUFBDX3Ny YXcgPSAweDdDMDAwNjMwLAotKyAgUFBDX3NyYXdpID0gMHg3QzAwMDY3MCwKLSsgIFBQQ19zcmQg PSAweDdDMDAwNDM2LAotKyAgUFBDX3NydyA9IDB4N0MwMDA0MzAsCi0rICBQUENfc3RiID0gMHg5 ODAwMDAwMCwKLSsgIFBQQ19zdGJjeCA9IDB4N0MwMDA1NkQsCi0rICBQUENfc3RieCA9IDB4N0Mw MDAxQUUsCi0rICBQUENfc3RkID0gMHhGODAwMDAwMCwKLSsgIFBQQ19zdGRjeCA9IDB4N0MwMDAx QUQsCi0rICBQUENfc3RkdSA9IDB4RjgwMDAwMDEsCi0rICBQUENfc3RkeCA9IDB4N0MwMDAxMkEs Ci0rICBQUENfc3RmZCA9IDB4RDgwMDAwMDAsCi0rICBQUENfc3RmZHUgPSAweERDMDAwMDAwLAot KyAgUFBDX3N0ZmR4ID0gMHg3QzAwMDVBRSwKLSsgIFBQQ19zdGZzID0gMHhEMDAwMDAwMCwKLSsg IFBQQ19zdGZzdSA9IDB4RDQwMDAwMDAsCi0rICBQUENfc3Rmc3ggPSAweDdDMDAwNTJFLAotKyAg UFBDX3N0aCA9IDB4QjAwMDAwMDAsCi0rICBQUENfc3RoY3ggPSAweDdDMDAwNUFELAotKyAgUFBD X3N0aHggPSAweDdDMDAwMzJFLAotKyAgUFBDX3N0dyA9IDB4OTAwMDAwMDAsCi0rICBQUENfc3R3 eCA9IDB4N0MwMDAxMkUsCi0rICBQUENfc3R3YnJ4ID0gMHg3QzAwMDUyQywKLSsgIFBQQ19zdHdj eCA9IDB4N0MwMDAxMkQsCi0rICBQUENfc3ViZiA9IDB4N0MwMDAwNTAsCi0rICBQUENfc3ViZmMg PSAweDdDMDAwMDEwLAotKyAgUFBDX3N1YmZlID0gMHg3QzAwMDExMCwKLSsgIFBQQ19zdWJmaWMg PSAweDIwMDAwMDAwLAotKyAgUFBDX3N5bmMgPSAweDdDMDAwNEFDLAotKyAgLy8gaXN5bmMg4oCU IGV4ZWN1dGlvbiBzeW5jaHJvbml6YXRpb24uIERpc2NhcmRzIHByZWZldGNoZWQgaW5zdHJ1Y3Rp b25zIGFuZAotKyAgLy8gZm9yY2VzIGEgcmVmZXRjaCtyZWV4ZWN1dGUgb2YgZXZlcnl0aGluZyBw YXN0IHRoZSBiYXJyaWVyOyBwcmV2ZW50cwotKyAgLy8gc3BlY3VsYXRpdmUgYnlwYXNzLiBVc2Vk IGZvciBTcGVjdHJlIHYxIG1pdGlnYXRpb24gaW4gc3BlY3VsYXRpb25CYXJyaWVyLgotKyAgLy8g RW5jb2Rpbmc6IGJ5dGVzIGAyYyAwMSAwMCA0Y2AgKExFKSA9IDB4NEMwMDAxMkMuCi0rICBQUENf aXN5bmMgPSAweDRDMDAwMTJDLAotKyAgUFBDX3RyYXAgPSAweDdGRTAwMDA4LAotKyAgUFBDX3R3 ID0gMHg3QzAwMDAwOCwKLSsgIFBQQ194b3JfID0gMHg3QzAwMDI3OCwKLSsgIFBQQ194b3JpID0g MHg2ODAwMDAwMCwKLSsgIFBQQ194b3JpcyA9IDB4NkMwMDAwMDAsCi0rICAvLyBWTVggcmVnaXN0 ZXIgbG9hZC9zdG9yZSAoWC1mb3JtLCBvcGNvZGUgMzEsIFhPPTEwMy8yMzEpLgotKyAgLy8gT3Bl cmF0ZSBvbiByYXcgVlIwLTMxICh0aGUgbHZ4L3N0dnggbW5lbW9uaWNzIHByZWRhdGUgVlNYLCBz byB0aGUKLSsgIC8vIGFzc2VtYmxlciBleHBvc2VzIHRoZW0gd2l0aCBhIHVpbnQ4X3QgVlIgaW5k ZXggcmF0aGVyIHRoYW4gdmlhIHRoZQotKyAgLy8gVlNSLW5hbWVzcGFjZSBGbG9hdFJlZ2lzdGVy IG92ZXJsb2FkcyB1c2VkIGZvciBseHZ4L3N0eHZ4LikKLSsgIFBQQ19sdnggPSAweDdDMDAwMENF LAotKyAgUFBDX2x4dmQyeCA9IDB4N0MwMDA2OTgsCi0rICBQUENfbHh2eCA9IDB4N0MwMDAyMTgs Ci0rICBQUENfbWZ2c3JsZCA9IDB4N0MwMDAyNjYsCi0rICBQUENfbXR2c3JkZCA9IDB4N0MwMDAz NjYsCi0rICBQUENfc3R2eCA9IDB4N0MwMDAxQ0UsCi0rICBQUENfc3R4dmQyeCA9IDB4N0MwMDA3 OTgsCi0rICBQUENfc3R4dnggPSAweDdDMDAwMzE4LAotKyAgUFBDX3ZhZGR1Ym0gPSAweDEwMDAw MDAwLAotKyAgUFBDX3Zhdmd1YiA9IDB4MTAwMDA0MDIsCi0rICBQUENfdmF2Z3VoID0gMHgxMDAw MDQ0MiwKLSsgIFBQQ192Y21wZXF1YiA9IDB4MTAwMDAwMDYsCi0rICBQUENfdmNtcGVxdWggPSAw eDEwMDAwMDQ2LAotKyAgUFBDX3ZjbXBlcXV3ID0gMHgxMDAwMDA4NiwKLSsgIFBQQ192Y21wZXF1 ZCA9IDB4MTAwMDAwQzcsCi0rICBQUENfdmNtcGd0c2IgPSAweDEwMDAwMzA2LAotKyAgUFBDX3Zj bXBndHNoID0gMHgxMDAwMDM0NiwKLSsgIFBQQ192Y21wZ3RzdyA9IDB4MTAwMDAzODYsCi0rICBQ UENfdmNtcGd0c2QgPSAweDEwMDAwM0M3LAotKyAgUFBDX3ZjbXBndHViID0gMHgxMDAwMDIwNiwK LSsgIFBQQ192Y21wZ3R1aCA9IDB4MTAwMDAyNDYsCi0rICBQUENfdmNtcGd0dXcgPSAweDEwMDAw Mjg2LAotKyAgUFBDX3ZjbXBndHVkID0gMHgxMDAwMDJDNywKLSsgIFBQQ192Y21wbmViID0gMHgx MDAwMDAwNywgIC8vIFBPV0VSOSAoSVNBIDMuMCkKLSsgIFBQQ192Y21wbmVoID0gMHgxMDAwMDA0 NywgIC8vIFBPV0VSOQotKyAgUFBDX3ZjbXBuZXcgPSAweDEwMDAwMDg3LCAgLy8gUE9XRVI5Ci0r ICBQUENfdmFkZHVobSA9IDB4MTAwMDAwNDAsCi0rICBQUENfdmFkZHV3bSA9IDB4MTAwMDAwODAs Ci0rICBQUENfdmFkZHVkbSA9IDB4MTAwMDAwQzAsCi0rICBQUENfdmFkZHVicyA9IDB4MTAwMDAy MDAsCi0rICBQUENfdmFkZHVocyA9IDB4MTAwMDAyNDAsCi0rICBQUENfdmFkZHNicyA9IDB4MTAw MDAzMDAsCi0rICBQUENfdmFkZHNocyA9IDB4MTAwMDAzNDAsCi0rICBQUENfdm1heHNiID0gMHgx MDAwMDEwMiwKLSsgIFBQQ192bWF4c2ggPSAweDEwMDAwMTQyLAotKyAgUFBDX3ZtYXhzdyA9IDB4 MTAwMDAxODIsCi0rICBQUENfdm1heHNkID0gMHgxMDAwMDFDMiwKLSsgIFBQQ192bWF4dWIgPSAw eDEwMDAwMDAyLAotKyAgUFBDX3ZtYXh1aCA9IDB4MTAwMDAwNDIsCi0rICBQUENfdm1heHV3ID0g MHgxMDAwMDA4MiwKLSsgIFBQQ192bWhyYWRkc2hzID0gMHgxMDAwMDAyMSwKLSsgIFBQQ192bXJn aGIgPSAweDEwMDAwMDBDLAotKyAgUFBDX3ZtcmdoaCA9IDB4MTAwMDAwNEMsCi0rICBQUENfdm1y Z2h3ID0gMHgxMDAwMDA4QywKLSsgIFBQQ192bXJnbGIgPSAweDEwMDAwMTBDLAotKyAgUFBDX3Zt cmdsaCA9IDB4MTAwMDAxNEMsCi0rICBQUENfdm1yZ2x3ID0gMHgxMDAwMDE4QywKLSsgIFBQQ192 bWluc2IgPSAweDEwMDAwMzAyLAotKyAgUFBDX3ZtaW5zaCA9IDB4MTAwMDAzNDIsCi0rICBQUENf dm1pbnN3ID0gMHgxMDAwMDM4MiwKLSsgIFBQQ192bWludWIgPSAweDEwMDAwMjAyLAotKyAgUFBD X3ZtaW51aCA9IDB4MTAwMDAyNDIsCi0rICBQUENfdm1pbnV3ID0gMHgxMDAwMDI4MiwKLSsgIC8v IFBPV0VSOSAoSVNBIDMuMCkgcGVyLWxhbmUgaW50ZWdlciBuZWdhdGUuIFZSQSBmaWVsZCBjYXJy aWVzIHRoZSBzdWJvcAotKyAgLy8gY29kZTogNiBmb3Igdm5lZ3csIDcgZm9yIHZuZWdkLiBCYXNl IFhPIGlzIDB4NjAyLgotKyAgUFBDX3ZuZWd3ID0gMHgxMDA2MDYwMiwKLSsgIFBQQ192bmVnZCA9 IDB4MTAwNzA2MDIsCi0rICBQUENfdm1sYWRkdWhtID0gMHgxMDAwMDAyMiwKLSsgIFBQQ192bXVs dXdtID0gMHgxMDAwMDA4OSwKLSsgIFBQQ192bXVsbGQgPSAweDEwMDAwMUM5LCAgICAgIC8vIFBP V0VSMTAgKFhPPTQ1NywgdmVjdG9yIGk2NHgyIG11bHRpcGx5IGxvdykKLSsgIFBQQ192bXVsZXNi ID0gMHgxMDAwMDMwOCwKLSsgIFBQQ192bXVsZXViID0gMHgxMDAwMDIwOCwKLSsgIFBQQ192bXVs ZXNoID0gMHgxMDAwMDM0OCwKLSsgIFBQQ192bXVsZXVoID0gMHgxMDAwMDI0OCwKLSsgIFBQQ192 bXVsZXN3ID0gMHgxMDAwMDM4OCwKLSsgIFBQQ192bXVsZXV3ID0gMHgxMDAwMDI4OCwKLSsgIFBQ Q192bXVsb3NiID0gMHgxMDAwMDEwOCwKLSsgIFBQQ192bXVsb3ViID0gMHgxMDAwMDAwOCwKLSsg IFBQQ192bXVsb3NoID0gMHgxMDAwMDE0OCwKLSsgIFBQQ192bXVsb3VoID0gMHgxMDAwMDA0OCwK LSsgIFBQQ192bXVsb3N3ID0gMHgxMDAwMDE4OCwKLSsgIFBQQ192bXVsb3V3ID0gMHgxMDAwMDA4 OCwKLSsgIFBQQ192bXN1bXNobSA9IDB4MTAwMDAwMjgsCi0rICBQUENfdm1zdW11aG0gPSAweDEw MDAwMDI2LAotKyAgUFBDX3ZwZXJtID0gMHgxMDAwMDAyQiwKLSsgIC8vIFZYLWZvcm0sIG9wY29k ZSA0LCBYTz0weDU0Qy4gUGVyLWJ5dGUgYml0LXBlcm11dGUgb2YgYSAxMjgtYml0IHZhbHVlOwot KyAgLy8gcmVzdWx0IDE2LWJpdCBiaXRtYXAgbGFuZHMgaW4gZHcwIGxvdyAxNiBiaXRzLCByZWNv dmVyYWJsZSB2aWEgbWZ2c3JkLgotKyAgLy8gQXZhaWxhYmxlIG9uIFBPV0VSOCsgKElTQSAyLjA3 KS4KLSsgIFBQQ192YnBlcm1xID0gMHgxMDAwMDU0QywKLSsgIC8vIFBPV0VSMTAgKElTQSAzLjEp IFZlY3RvciBFeHRyYWN0IE1hc2suIFZYLWZvcm0sIG9wY29kZSA0LCBYTz0weDY0MiwKLSsgIC8v IHdpdGggVUlNIGF0IGJpdHMgMTEuLjE1IHNlbGVjdGluZyBsYW5lIHdpZHRoOiA4PWJ5dGUsIDk9 aGFsZndvcmQsCi0rICAvLyAxMD13b3JkLCAxMT1kb3VibGV3b3JkLiBSVCBpcyBhIEdQUiAobG93 IE4gYml0cyA9IHdhc20gYml0bWFzaykuCi0rICBQUENfdmV4dHJhY3RibSA9IDB4MTAwODA2NDIs Ci0rICBQUENfdmV4dHJhY3RobSA9IDB4MTAwOTA2NDIsCi0rICBQUENfdmV4dHJhY3R3bSA9IDB4 MTAwQTA2NDIsCi0rICBQUENfdmV4dHJhY3RkbSA9IDB4MTAwQjA2NDIsCi0rICAvLyBQT1dFUjEw IHZlY3RvciBpbnNlcnQgZnJvbSBHUFIgYXQgaW1tZWRpYXRlIGJ5dGUgb2Zmc2V0OgotKyAgLy8g ICB2aW5zdyBWUlQsIFJCLCBVSU0gICBWUlRbVUlNKjg6VUlNKjgrMzFdIOKGkCBSQlszMjo2M10K LSsgIC8vICAgdmluc2QgVlJULCBSQiwgVUlNICAgVlJUW1VJTSo4OlVJTSo4KzYzXSDihpAgUkJb MDo2M10KLSsgIC8vIFZYLWZvcm0sIG9wY29kZSA0LiBSQiBhdCBiaXRzIDE2Li4yMCwgVUlNIGF0 IGJpdHMgMTEuLjE1LgotKyAgUFBDX3ZpbnN3ID0gMHgxMDAwMDBDRiwgIC8vIFBPV0VSMTAgKFhP PTIwNykKLSsgIFBQQ192aW5zZCA9IDB4MTAwMDAxQ0YsICAvLyBQT1dFUjEwIChYTz00NjMpCi0r ICAvLyBQT1dFUjEwIHZlY3RvciBpbnNlcnQgYnl0ZS9oYWxmd29yZCBmcm9tIEdQUiB3aXRoIHJl Z2lzdGVyLXN1cHBsaWVkCi0rICAvLyAocmlnaHQtaW5kZXhlZCA9IExFLW5hdHVyYWwpIGJ5dGUg cG9zaXRpb246Ci0rICAvLyAgIHZpbnNicnggVlJULCBSQSwgUkIgICBWUlQuYnl0ZVtSQSAmIDB4 Rl0gIOKGkCBSQiAmIDB4RkYKLSsgIC8vICAgdmluc2hyeCBWUlQsIFJBLCBSQiAgIFZSVC5od29y ZFsoUkEgJiAweEUpLzJdIOKGkCBSQiAmIDB4RkZGRgotKyAgLy8gVlgtZm9ybSwgb3Bjb2RlIDQu IFJBIGF0IGJpdHMgMTYuLjIwLCBSQiBhdCBiaXRzIDExLi4xNS4KLSsgIFBQQ192aW5zYnJ4ID0g MHgxMDAwMDMwRiwgIC8vIFBPV0VSMTAgKFhPPTc4MykKLSsgIFBQQ192aW5zaHJ4ID0gMHgxMDAw MDM0RiwgIC8vIFBPV0VSMTAgKFhPPTg0NykKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCkgdmVjdG9y IGluc2VydCBieXRlL2hhbGZ3b3JkIGZyb20gVlIgYXQgaW1tZWRpYXRlCi0rICAvLyBieXRlIHBv c2l0aW9uOgotKyAgLy8gICB2aW5zZXJ0YiBWUlQsIFZSQiwgVUlNICBWUlQuYnl0ZVtVSU1dICAg ICAg4oaQIFZSQi5ieXRlWzddICAgIChCRSkKLSsgIC8vICAgdmluc2VydGggVlJULCBWUkIsIFVJ TSAgVlJULmh3b3JkW1VJTS4uKzFdIOKGkCBWUkIuYnl0ZVs2Li43XSAoQkUpCi0rICAvLyBWLWZv cm0sIG9wY29kZSA0LiBWUkIgYXQgYml0cyAxMS4uMTUsIFVJTSBhdCBiaXRzIDE2Li4yMC4gU2lt ZDEyOAotKyAgLy8gbGl2ZXMgaW4gVlNSMzItNjMgKD0gVlIwLTMxKSwgc28gdGhlIFYtZm9ybSBW UlQgZmllbGQgYWRkcmVzc2VzIG91cgotKyAgLy8gU2ltZDEyOCBzdG9yYWdlIHZpYSBgZW5jb2Rp bmcoKSAmIDMxYC4KLSsgIFBQQ192aW5zZXJ0YiA9IDB4MTAwMDAzMEQsICAvLyBQT1dFUjkgKFhP PTc4MSkKLSsgIFBQQ192aW5zZXJ0aCA9IDB4MTAwMDAzNEQsICAvLyBQT1dFUjkgKFhPPTg0NSkK LSsgIFBQQ192ZXh0cmFjdHViID0gMHgxMDAwMDIwRCwgIC8vIFBPV0VSOSAoWE89NTI1KQotKyAg UFBDX3ZleHRyYWN0dWggPSAweDEwMDAwMjRELCAgLy8gUE9XRVI5IChYTz01ODkpCi0rICBQUENf dnNwbHRpc2IgPSAweDEwMDAwMzBDLCAgICAvLyBQT1dFUjcrIChYTz03ODAsIHNwbGF0IDUtYml0 IFNJTU0gdG8gYWxsIDE2IGJ5dGUgbGFuZXMpCi0rICBQUENfdnNwbHRpc2ggPSAweDEwMDAwMzRD LCAgICAvLyBQT1dFUjcrIChYTz04NDQsIHNwbGF0IDUtYml0IFNJTU0gdG8gYWxsIDggaTE2IGxh bmVzKQotKyAgUFBDX3ZzcGx0aXN3ID0gMHgxMDAwMDM4QywgICAgLy8gUE9XRVI3KyAoWE89OTA4 LCBzcGxhdCA1LWJpdCBTSU1NIHRvIGFsbCA0IGkzMiBsYW5lcykKLSsgIFBQQ192cG9wY250YiA9 IDB4MTAwMDA3MDMsCi0rICBQUENfdnNsYiA9IDB4MTAwMDAxMDQsCi0rICBQUENfdnNsZCA9IDB4 MTAwMDA1QzQsCi0rICBQUENfdnNsZG9pID0gMHgxMDAwMDAyQywKLSsgIFBQQ192c2xoID0gMHgx MDAwMDE0NCwKLSsgIFBQQ192c2xvID0gMHgxMDAwMDQwQywKLSsgIFBQQ192c2x3ID0gMHgxMDAw MDE4NCwKLSsgIFBQQ192c3BsdGIgPSAweDEwMDAwMjBDLAotKyAgUFBDX3ZzcGx0aCA9IDB4MTAw MDAyNEMsCi0rICBQUENfdnNyYWIgPSAweDEwMDAwMzA0LAotKyAgUFBDX3ZzcmFkID0gMHgxMDAw MDNDNCwKLSsgIFBQQ192c3JhaCA9IDB4MTAwMDAzNDQsCi0rICBQUENfdnNyYXcgPSAweDEwMDAw Mzg0LAotKyAgUFBDX3ZzcmIgPSAweDEwMDAwMjA0LAotKyAgUFBDX3ZzcmQgPSAweDEwMDAwNkM0 LAotKyAgUFBDX3ZzcmggPSAweDEwMDAwMjQ0LAotKyAgUFBDX3Zzcm8gPSAweDEwMDAwNDRDLAot KyAgUFBDX3ZzcncgPSAweDEwMDAwMjg0LAotKyAgUFBDX3Zwa3Noc3MgPSAweDEwMDAwMThFLAot KyAgUFBDX3Zwa3NodXMgPSAweDEwMDAwMTBFLAotKyAgUFBDX3Zwa3N3c3MgPSAweDEwMDAwMUNF LAotKyAgUFBDX3Zwa3N3dXMgPSAweDEwMDAwMTRFLAotKyAgUFBDX3Z1cGtoc2IgPSAweDEwMDAw MjBFLAotKyAgUFBDX3Z1cGtoc2ggPSAweDEwMDAwMjRFLAotKyAgUFBDX3Z1cGtoc3cgPSAweDEw MDAwNjRFLAotKyAgUFBDX3Z1cGtsc2IgPSAweDEwMDAwMjhFLAotKyAgUFBDX3Z1cGtsc2ggPSAw eDEwMDAwMkNFLAotKyAgUFBDX3Z1cGtsc3cgPSAweDEwMDAwNkNFLAotKyAgUFBDX3ZzdWJ1Ym0g PSAweDEwMDAwNDAwLAotKyAgUFBDX3ZzdWJ1aG0gPSAweDEwMDAwNDQwLAotKyAgUFBDX3ZzdWJ1 d20gPSAweDEwMDAwNDgwLAotKyAgUFBDX3ZzdWJ1ZG0gPSAweDEwMDAwNEMwLAotKyAgUFBDX3Zz dWJ1YnMgPSAweDEwMDAwNjAwLAotKyAgUFBDX3ZzdWJ1aHMgPSAweDEwMDAwNjQwLAotKyAgUFBD X3ZzdWJzYnMgPSAweDEwMDAwNzAwLAotKyAgUFBDX3ZzdWJzaHMgPSAweDEwMDAwNzQwLAotKyAg UFBDX3hzY3ZkcHNwbiA9IDB4RjAwMDA0MkMsCi0rICBQUENfeHNjdnNwZHBuID0gMHhGMDAwMDUy QywKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgY29udmVyc2lvbnMsIFhYMi1m b3JtLiBUaGUgVUlNCi0rICAvLyBkaXNhbWJpZ3VhdG9yIGlzIGJha2VkIGludG8gdGhlIGNvbnN0 YW50ICh4c2N2ZHBocD0xNywgeHNjdmhwZHA9MTYpLgotKyAgLy8gRW5jb2RpbmdzIGNyb3NzLWNo ZWNrZWQgYWdhaW5zdCBiaW51dGlscyB3aXRoIGAubWFjaGluZSBwb3dlcjlgLgotKyAgUFBDX3hz Y3ZkcGhwID0gMHhGMDExMDU2QywKLSsgIFBQQ194c2N2aHBkcCA9IDB4RjAxMDA1NkMsCi0rICAv LyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBWU1ggZXh0cmFjdCBiaWFzZWQgZXhwb25lbnQsIFhY Mi1mb3JtLgotKyAgLy8gWFQuZHdvcmRbMF0gPSAoemVybyB8fCBiaWFzZWRfZXhwXzExYml0KSwg WFQuZHdvcmRbMV0gPSAwLiBYTz0zNDcKLSsgIC8vIChzaGFyZXMgWE8gd2l0aCB4c2N2e2RwLGhw fXtocCxkcH0g4oCUIGRpc2FtYmlndWF0ZWQgYnkgYml0cyAxNi0yMD0wKS4KLSsgIC8vIEVuY29k aW5nIGNyb3NzLWNoZWNrZWQgYWdhaW5zdCBiaW51dGlscyB3aXRoIGAubWFjaGluZSBwb3dlcjlg LgotKyAgUFBDX3hzeGV4cGRwID0gMHhGMDAwMDU2QywKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCkg c2NhbGFyIEZQMTYgbG9hZC9zdG9yZSwgWC1mb3JtIChvcGNvZGUgMzEpLgotKyAgLy8gbHhzaWh6 eCB6ZXJvLWV4dGVuZHM7IHN0eHNpaHggd3JpdGVzIDE2IGJpdHMgZnJvbSBWU1IgZHdvcmQgMAot KyAgLy8gd29yZCAxJ3MgbG93IGhhbGZ3b3JkLgotKyAgUFBDX2x4c2loenggPSAweDdDMDAwNjVB LAotKyAgUFBDX3N0eHNpaHggPSAweDdDMDAwNzVBLAotKyAgLy8gUE9XRVI5IHNjYWxhciBWU1gg bWF4L21pbiB3aXRoIEphdmEvSmF2YVNjcmlwdCBzZW1hbnRpY3Mg4oCUIGhhbmRsZXMKLSsgIC8v IMKxMCBhbmQgTmFOIGlkZW50aWNhbGx5IHRvIE1hdGgubWF4L01hdGgubWluIGluIEVDTUEtMjYy IChjb3ZlcnMKLSsgIC8vIDE5IGNvcm5lciBjYXNlcyBhZ2FpbnN0IHRoZSBKUyBzaGVsbCkuCi0r ICAvLyBYWDMtZm9ybSwgcHJpbWFyeSBvcGNvZGUgNjAsIFhPPTE0NCAobWF4KSAvIFhPPTE1MiAo bWluKS4KLSsgIFBQQ194c21heGpkcCA9IDB4RjAwMDA0ODAsCi0rICBQUENfeHNtaW5qZHAgPSAw eEYwMDAwNEMwLAotKyAgUFBDX3h4YnJkID0gMHhGMDE3MDc2QywKLSsgIFBQQ194dmFic2RwID0g MHhGMDAwMDc2NCwKLSsgIFBQQ194dmFic3NwID0gMHhGMDAwMDY2NCwKLSsgIFBQQ194dmFkZGRw ID0gMHhGMDAwMDMwMCwKLSsgIFBQQ194dmFkZHNwID0gMHhGMDAwMDIwMCwKLSsgIFBQQ194dmNt cGVxZHAgPSAweEYwMDAwMzE4LAotKyAgUFBDX3h2Y21wZXFzcCA9IDB4RjAwMDAyMTgsCi0rICBQ UENfeHZjbXBnZWRwID0gMHhGMDAwMDM5OCwKLSsgIFBQQ194dmNtcGdlc3AgPSAweEYwMDAwMjk4 LAotKyAgUFBDX3h2Y21wZ3RkcCA9IDB4RjAwMDAzNTgsCi0rICBQUENfeHZjbXBndHNwID0gMHhG MDAwMDI1OCwKLSsgIFBQQ194dmN2ZHBzcCA9IDB4RjAwMDA2MjQsCi0rICBQUENfeHZjdmRwc3h3 cyA9IDB4RjAwMDAzNjAsCi0rICBQUENfeHZjdmRwdXh3cyA9IDB4RjAwMDAzMjAsCi0rICBQUENf eHZjdnNwZHAgPSAweEYwMDAwNzI0LAotKyAgUFBDX3h2Y3ZzcHN4d3MgPSAweEYwMDAwMjYwLAot KyAgUFBDX3h2Y3ZzcHV4d3MgPSAweEYwMDAwMjIwLAotKyAgUFBDX3h2Y3ZzeHdkcCA9IDB4RjAw MDAzRTAsCi0rICBQUENfeHZjdnN4d3NwID0gMHhGMDAwMDJFMCwKLSsgIFBQQ194dmN2dXh3ZHAg PSAweEYwMDAwM0EwLAotKyAgUFBDX3h2Y3Z1eHdzcCA9IDB4RjAwMDAyQTAsCi0rICBQUENfeHZk aXZkcCA9IDB4RjAwMDAzQzAsCi0rICBQUENfeHZkaXZzcCA9IDB4RjAwMDAyQzAsCi0rICBQUENf eHZtYWRkYWRwID0gMHhGMDAwMDMwOCwKLSsgIFBQQ194dm1hZGRhc3AgPSAweEYwMDAwMjA4LAot KyAgUFBDX3h2bWF4ZHAgPSAweEYwMDAwNzAwLAotKyAgUFBDX3h2bWF4c3AgPSAweEYwMDAwNjAw LAotKyAgUFBDX3h2bWluZHAgPSAweEYwMDAwNzQwLAotKyAgUFBDX3h2bWluc3AgPSAweEYwMDAw NjQwLAotKyAgUFBDX3h2bXVsZHAgPSAweEYwMDAwMzgwLAotKyAgUFBDX3h2bXVsc3AgPSAweEYw MDAwMjgwLAotKyAgUFBDX3h2bmVnZHAgPSAweEYwMDAwN0U0LAotKyAgUFBDX3h2bm1zdWJhZHAg PSAweEYwMDAwNzg4LAotKyAgUFBDX3h2bm1zdWJhc3AgPSAweEYwMDAwNjg4LAotKyAgUFBDX3h2 bmVnc3AgPSAweEYwMDAwNkU0LAotKyAgUFBDX3h2cmRwaWMgPSAweEYwMDAwM0FDLAotKyAgUFBD X3h2cmRwaW0gPSAweEYwMDAwM0U0LAotKyAgUFBDX3h2cmRwaXAgPSAweEYwMDAwM0E0LAotKyAg UFBDX3h2cmRwaXogPSAweEYwMDAwMzY0LAotKyAgUFBDX3h2cnNwaWMgPSAweEYwMDAwMkFDLAot KyAgUFBDX3h2cnNwaW0gPSAweEYwMDAwMkU0LAotKyAgUFBDX3h2cnNwaXAgPSAweEYwMDAwMkE0 LAotKyAgUFBDX3h2cnNwaXogPSAweEYwMDAwMjY0LAotKyAgUFBDX3h2c3FydGRwID0gMHhGMDAw MDMyQywKLSsgIFBQQ194dnNxcnRzcCA9IDB4RjAwMDAyMkMsCi0rICBQUENfeHZzdWJkcCA9IDB4 RjAwMDAzNDAsCi0rICBQUENfeHZzdWJzcCA9IDB4RjAwMDAyNDAsCi0rICBQUENfeHhleHRyYWN0 dXcgPSAweEYwMDAwMjk0LAotKyAgUFBDX3h4aW5zZXJ0dyA9IDB4RjAwMDAyRDQsCi0rICBQUENf eHhsYW5kID0gMHhGMDAwMDQxMCwKLSsgIFBQQ194eGxhbmRjID0gMHhGMDAwMDQ1MCwKLSsgIFBQ Q194eGxub3IgPSAweEYwMDAwNTEwLAotKyAgUFBDX3h4bG9yID0gMHhGMDAwMDQ5MCwKLSsgIFBQ Q194eGx4b3IgPSAweEYwMDAwNEQwLAotKyAgUFBDX3h4cGVybWRpID0gMHhGMDAwMDA1MCwKLSsg IFBQQ194eHNlbCA9IDB4RjAwMDAwMzAsCi0rICBQUENfeHhzcGx0aWIgPSAweEYwMDAwMkQwLCAg Ly8gUE9XRVI5IChJU0EgMy4wKTogWFgxLWZvcm0sIG5vIFJjCi0rICBQUENfeHhzcGx0dyA9IDB4 RjAwMDAyOTAsCi0rCi0rICAvLyBTaW1wbGlmaWVkIG1uZW1vbmljcy4KLSsgIFBQQ19tciA9IFBQ Q19vcl8sCi0rICBQUENfbm90ID0gUFBDX25vciwKLSsgIFBQQ19ub3AgPSBQUENfb3JpLAotKyAg UFBDX2x3c3luYyA9IFBQQ19zeW5jIHwgKDEgPDwgMjEpLAotKwotKyAgUFBDX01BSk9SX09QQ09E RV9NQVNLID0gMHhGQzAwMDAwMAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVpbnQzMl90IE5vcElu c3QgPSAodWludDMyX3QpUFBDX25vcDsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUFBDX1NUQU5a QV9MRU5HVEggPSAxNjsKLSsKLStjbGFzcyBJbnN0cnVjdGlvbjsKLStjbGFzcyBJbnN0UmVnOwot K2NsYXNzIEluc3RJbW07Ci0rY2xhc3MgQk9mZkltbTE2OwotK2NsYXNzIEpPZmZJbW0yNjsKLSsK LSsvLyBQUEM2NCBiYXNlIGluc3RydWN0aW9uIHR5cGU6IGEgc2luZ2xlIDMyLWJpdCB3b3JkLgot K2NsYXNzIEluc3RydWN0aW9uIHsKLSsgcHJvdGVjdGVkOgotKyAgdWludDMyX3QgZGF0YTsKLSsK LSsgcHVibGljOgotKyAgZXhwbGljaXQgSW5zdHJ1Y3Rpb24odWludDMyX3QgZGF0YV8pIDogZGF0 YShkYXRhXykge30KLSsgIGV4cGxpY2l0IEluc3RydWN0aW9uKFBQQ09wY29kZXMgb3ApIDogZGF0 YSgodWludDMyX3Qpb3ApIHt9Ci0rCi0rICB1aW50MzJfdCBlbmNvZGUoKSBjb25zdCB7IHJldHVy biBkYXRhOyB9Ci0rCi0rICB2b2lkIG1ha2VOb3AoKSB7IGRhdGEgPSBOb3BJbnN0OyB9Ci0rICB2 b2lkIG1ha2VPcF9tdGN0cihSZWdpc3RlciByKSB7Ci0rICAgIGRhdGEgPSBQUENfbXRzcHIgfCAo KHVpbnQzMl90KXIuY29kZSgpKSA8PCAyMSB8IFBQQ19TUFIoOSk7Ci0rICB9Ci0rICB2b2lkIG1h a2VPcF9iY3RyKHVpbnQzMl90IGxpbmtCaXQgPSAwKSB7IGRhdGEgPSBQUENfYmN0ciB8IGxpbmtC aXQ7IH0KLSsKLSsgIHZvaWQgc2V0RGF0YSh1aW50MzJfdCBkYXRhKSB7IHRoaXMtPmRhdGEgPSBk YXRhOyB9Ci0rCi0rICBjb25zdCBJbnN0cnVjdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEluc3RydWN0 aW9uJiBzcmMpIHsKLSsgICAgZGF0YSA9IHNyYy5kYXRhOwotKyAgICByZXR1cm4gKnRoaXM7Ci0r ICB9Ci0rCi0rICB1aW50MzJfdCBleHRyYWN0Qml0KHVpbnQzMl90IGJpdCkgY29uc3QgeyByZXR1 cm4gKGVuY29kZSgpID4+IGJpdCkgJiAxOyB9Ci0rICB1aW50MzJfdCBleHRyYWN0Qml0RmllbGQo dWludDMyX3QgaGksIHVpbnQzMl90IGxvKSBjb25zdCB7Ci0rICAgIHJldHVybiAoZW5jb2RlKCkg Pj4gbG8pICYgKCgyIDw8IChoaSAtIGxvKSkgLSAxKTsKLSsgIH0KLSsKLSsgIHVpbnQzMl90IGV4 dHJhY3RPcGNvZGUoKSBjb25zdCB7IHJldHVybiBkYXRhICYgUFBDX01BSk9SX09QQ09ERV9NQVNL OyB9Ci0rICBib29sIGlzT3Bjb2RlKHVpbnQzMl90IG9wKSBjb25zdCB7Ci0rICAgIHJldHVybiBl eHRyYWN0T3Bjb2RlKCkgPT0gKG9wICYgUFBDX01BSk9SX09QQ09ERV9NQVNLKTsKLSsgIH0KLSsK LSsgIHVpbnQzMl90IGV4dHJhY3RSVCgpIGNvbnN0IHsKLSsgICAgcmV0dXJuIGV4dHJhY3RCaXRG aWVsZChSVFNoaWZ0ICsgUlRCaXRzIC0gMSwgUlRTaGlmdCk7Ci0rICB9Ci0rICB1aW50MzJfdCBl eHRyYWN0UkEoKSBjb25zdCB7Ci0rICAgIHJldHVybiBleHRyYWN0Qml0RmllbGQoUkFTaGlmdCAr IFJBQml0cyAtIDEsIFJBU2hpZnQpOwotKyAgfQotKyAgdWludDMyX3QgZXh0cmFjdFJCKCkgY29u c3QgewotKyAgICByZXR1cm4gZXh0cmFjdEJpdEZpZWxkKFJCU2hpZnQgKyBSQkJpdHMgLSAxLCBS QlNoaWZ0KTsKLSsgIH0KLSsgIHVpbnQzMl90IGV4dHJhY3RJbW0xNigpIGNvbnN0IHsgcmV0dXJu IGRhdGEgJiBJbW0xNk1hc2s7IH0KLSsKLSsgIEluc3RydWN0aW9uKiBuZXh0KCkgeyByZXR1cm4g dGhpcyArIDE7IH0KLSsKLSsgIGNvbnN0IHVpbnQzMl90KiByYXcoKSBjb25zdCB7IHJldHVybiAm ZGF0YTsgfQotKyAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDQ7IH0KLSt9OwotKwot K3N0YXRpY19hc3NlcnQoc2l6ZW9mKEluc3RydWN0aW9uKSA9PSA0KTsKLSsKLStjbGFzcyBJbnN0 Tk9QIDogcHVibGljIEluc3RydWN0aW9uIHsKLSsgcHVibGljOgotKyAgSW5zdE5PUCgpIDogSW5z dHJ1Y3Rpb24oTm9wSW5zdCkge30KLSt9OwotKwotKy8vIFJlZ2lzdGVyLXJlZ2lzdGVyLXJlZ2lz dGVyIGluc3RydWN0aW9uIChYLWZvcm0gYW5kIFhPLWZvcm0pLgotK2NsYXNzIEluc3RSZWcgOiBw dWJsaWMgSW5zdHJ1Y3Rpb24gewotKyBwdWJsaWM6Ci0rICBleHBsaWNpdCBJbnN0UmVnKFBQQ09w Y29kZXMgb3ApIDogSW5zdHJ1Y3Rpb24ob3ApIHt9Ci0rICBJbnN0UmVnKFBQQ09wY29kZXMgb3As IFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpCi0rICAgICAgOiBJbnN0cnVj dGlvbigodWludDMyX3Qpb3AgfCBSVChydCkgfCBSQShyYSkgfCBSQihyYikpIHt9Ci0rICBJbnN0 UmVnKFBQQ09wY29kZXMgb3AsIEZsb2F0UmVnaXN0ZXIgZnJ0LCBGbG9hdFJlZ2lzdGVyIGZyYSwK LSsgICAgICAgICAgRmxvYXRSZWdpc3RlciBmcmIpCi0rICAgICAgOiBJbnN0cnVjdGlvbigodWlu dDMyX3Qpb3AgfCBSVChmcnQpIHwgUkEoZnJhKSB8IFJCKGZyYikpIHt9Ci0rCi0rICB2b2lkIHNl dFJUKFJlZ2lzdGVyIHIpIHsgZGF0YSA9IChkYXRhICYgflJUTWFzaykgfCBSVChyKTsgfQotKyAg dm9pZCBzZXRSQShSZWdpc3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5SQU1hc2spIHwgUkEocik7 IH0KLSsgIHZvaWQgc2V0UkIoUmVnaXN0ZXIgcikgeyBkYXRhID0gKGRhdGEgJiB+UkJNYXNrKSB8 IFJCKHIpOyB9Ci0rCi0rICB2b2lkIHNldEltbTE2KHVpbnQzMl90IGltbSkgewotKyAgICBkYXRh ID0gKGRhdGEgJiAweEZGRkYwMDAwKSB8IChpbW0gJiBJbW0xNk1hc2spOwotKyAgfQotKyAgdWlu dDMyX3QgZXh0cmFjdEltbTE2VmFsdWUoKSBjb25zdCB7IHJldHVybiBkYXRhICYgSW1tMTZNYXNr OyB9Ci0rfTsKLSsKLSsvLyBSZWdpc3Rlci1pbW1lZGlhdGUgaW5zdHJ1Y3Rpb24gKEQtZm9ybSku Ci0rLy8gQml0cyAyMS0yNSBob2xkIFJUIChsb2FkcywgYWRkaSkgb3IgUlMgKHN0b3Jlcywgb3Jp KS4gQm90aCBlbmNvZGUgaWRlbnRpY2FsbHkKLSsvLyBzaW5jZSBSVCBhbmQgUlMgb2NjdXB5IHRo ZSBzYW1lIGZpZWxkOyB0aGUgY2FsbGVyIHNpbXBseSBwYXNzZXMgdGhlIHJpZ2h0Ci0rLy8gcmVn aXN0ZXIuCi0rY2xhc3MgSW5zdEltbSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7Ci0rIHB1YmxpYzoK LSsgIGV4cGxpY2l0IEluc3RJbW0oUFBDT3Bjb2RlcyBvcCkgOiBJbnN0cnVjdGlvbihvcCkge30K LSsgIEluc3RJbW0oUFBDT3Bjb2RlcyBvcCwgUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCB1aW50 MzJfdCBpbW0xNikKLSsgICAgICA6IEluc3RydWN0aW9uKCh1aW50MzJfdClvcCB8IFJUKHJ0KSB8 IFJBKHJhKSB8IChpbW0xNiAmIEltbTE2TWFzaykpIHt9Ci0rCi0rICB2b2lkIHNldFJUKFJlZ2lz dGVyIHIpIHsgZGF0YSA9IChkYXRhICYgflJUTWFzaykgfCBSVChyKTsgfQotKyAgdm9pZCBzZXRS QShSZWdpc3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5SQU1hc2spIHwgUkEocik7IH0KLSsKLSsg IHZvaWQgc2V0SW1tMTYodWludDMyX3QgaW1tKSB7Ci0rICAgIGRhdGEgPSAoZGF0YSAmIDB4RkZG RjAwMDApIHwgKGltbSAmIEltbTE2TWFzayk7Ci0rICB9Ci0rICB2b2lkIHNldExvd2VyUmVnKFJl Z2lzdGVyIHJsKSB7Ci0rICAgIGRhdGEgPSAoZGF0YSAmIDB4RkZFMEZGRkYpIHwgKCh1aW50MzJf dClybC5jb2RlKCkgPDwgMTYpOwotKyAgfQotKyAgdWludDMyX3QgZXh0cmFjdEltbTE2VmFsdWUo KSBjb25zdCB7IHJldHVybiBkYXRhICYgSW1tMTZNYXNrOyB9Ci0rCi0rICAvLyBFeHRyYWN0IHRo ZSBUcmFwVGFnIGZyb20gYSB0YWdnZWQgdHJhcCBpbnN0cnVjdGlvbiAodHcpLgotKyAgLy8gRGVm aW5lZCBpbiBBc3NlbWJsZXItcHBjNjQuY3BwLiBSZXR1cm5zIGEgVHJhcFRhZyB2YWx1ZSBhcyB1 aW50OF90Ci0rICAvLyBiZWNhdXNlIEFzc2VtYmxlcjo6VHJhcFRhZyBpcyBub3QgeWV0IGRlZmlu ZWQgYXQgdGhpcyBwb2ludCBpbiB0aGUgaGVhZGVyLgotKyAgdWludDhfdCB0cmFwdGFnKCk7Ci0r fTsKLSsKLSsvLyBBIEJPZmZJbW0xNiBpcyBhIDE2LWJpdCBzaWduZWQgYnJhbmNoIG9mZnNldCBm b3IgY29uZGl0aW9uYWwgYnJhbmNoZXMKLSsvLyAoYmMtZm9ybSBpbnN0cnVjdGlvbnMpLiAgVGhl IG9mZnNldCBpcyBzdG9yZWQgaW4gYml0cyAyLi4xNSBhbmQgaXMKLSsvLyA0LWJ5dGUgYWxpZ25l ZCwgZ2l2aW5nIGEgcmFuZ2Ugb2YgKy8tMzIgS0IuCi0rY2xhc3MgQk9mZkltbTE2IHsKLSsgIGlu dDMyX3QgZGF0YTsKLSsKLSsgcHVibGljOgotKyAgdWludDMyX3QgZW5jb2RlKCkgY29uc3Qgewot KyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQoKSk7Ci0rICAgIHJldHVybiBzdGF0aWNfY2FzdDx1 aW50MzJfdD4oZGF0YSkgJiAweEZGRkM7Ci0rICB9Ci0rICBpbnQzMl90IGRlY29kZSgpIGNvbnN0 IHsKLSsgICAgTU9aX0FTU0VSVCghaXNJbnZhbGlkKCkpOwotKyAgICByZXR1cm4gZGF0YTsKLSsg IH0KLSsKLSsgIGV4cGxpY2l0IEJPZmZJbW0xNihpbnQgb2Zmc2V0KSA6IGRhdGEob2Zmc2V0KSB7 Ci0rICAgIE1PWl9BU1NFUlQoKG9mZnNldCAmIDB4MykgPT0gMCk7Ci0rICAgIE1PWl9BU1NFUlQo SXNJblJhbmdlKG9mZnNldCkpOwotKyAgfQotKyAgc3RhdGljIGJvb2wgSXNJblJhbmdlKGludCBv ZmZzZXQpIHsKLSsgICAgcmV0dXJuIG9mZnNldCA+PSAtMzI3NjggJiYgb2Zmc2V0IDw9IDMyNzY0 OwotKyAgfQotKwotKyAgc3RhdGljIGNvbnN0IGludDMyX3QgSU5WQUxJRCA9IDB4MDAwMjAwMDA7 Ci0rICBCT2ZmSW1tMTYoKSA6IGRhdGEoSU5WQUxJRCkge30KLSsKLSsgIGJvb2wgaXNJbnZhbGlk KCkgY29uc3QgeyByZXR1cm4gZGF0YSA9PSBJTlZBTElEOyB9Ci0rCi0rICBJbnN0cnVjdGlvbiog Z2V0RGVzdChJbnN0cnVjdGlvbiogc3JjKSBjb25zdDsKLSsKLSsgIGV4cGxpY2l0IEJPZmZJbW0x NihJbnN0SW1tIGluc3QpOwotK307Ci0rCi0rLy8gQSBKT2ZmSW1tMjYgaXMgYSAyNi1iaXQgc2ln bmVkIGJyYW5jaCBvZmZzZXQgZm9yIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMKLSsvLyAoYi9ibCBp bnN0cnVjdGlvbnMpLiAgQml0cyAyLi4yNSBlbmNvZGUgdGhlIG9mZnNldCwgNC1ieXRlIGFsaWdu ZWQsCi0rLy8gZ2l2aW5nIGEgcmFuZ2Ugb2YgKy8tMzIgTUIuCi0rY2xhc3MgSk9mZkltbTI2IHsK LSsgIGludDMyX3QgZGF0YTsKLSsKLSsgcHVibGljOgotKyAgdWludDMyX3QgZW5jb2RlKCkgY29u c3QgewotKyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQoKSk7Ci0rICAgIHJldHVybiBzdGF0aWNf Y2FzdDx1aW50MzJfdD4oZGF0YSkgJiAweDAzRkZGRkZDOwotKyAgfQotKyAgaW50MzJfdCBkZWNv ZGUoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQoIWlzSW52YWxpZCgpKTsKLSsgICAgcmV0dXJu IGRhdGE7Ci0rICB9Ci0rCi0rICBleHBsaWNpdCBKT2ZmSW1tMjYoaW50IG9mZnNldCkgOiBkYXRh KG9mZnNldCkgewotKyAgICBNT1pfQVNTRVJUKChvZmZzZXQgJiAweDMpID09IDApOwotKyAgICBN T1pfQVNTRVJUKElzSW5SYW5nZShvZmZzZXQpKTsKLSsgIH0KLSsgIHN0YXRpYyBib29sIElzSW5S YW5nZShpbnQgb2Zmc2V0KSB7Ci0rICAgIHJldHVybiBvZmZzZXQgPj0gLTMzNTU0NDMyICYmIG9m ZnNldCA8PSAzMzU1NDQyODsKLSsgIH0KLSsKLSsgIHN0YXRpYyBjb25zdCBpbnQzMl90IElOVkFM SUQgPSAweDIwMDAwMDAwOwotKyAgSk9mZkltbTI2KCkgOiBkYXRhKElOVkFMSUQpIHt9Ci0rCi0r ICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gSU5WQUxJRDsgfQotKwot KyAgSW5zdHJ1Y3Rpb24qIGdldERlc3QoSW5zdHJ1Y3Rpb24qIHNyYykgY29uc3Q7Ci0rfTsKLSsK LSsvLyBBIDE2LWJpdCBpbW1lZGlhdGUgdmFsdWUgdXNlZCBpbiBELWZvcm0gaW5zdHJ1Y3Rpb25z LgotK2NsYXNzIEltbTE2IHsKLSsgIGludDMyX3QgdmFsdWU7Ci0rCi0rIHB1YmxpYzoKLSsgIElt bTE2KCk7Ci0rICBleHBsaWNpdCBJbW0xNih1aW50MzJfdCBpbW0pIDogdmFsdWUoaW1tKSB7fQot KyAgdWludDMyX3QgZW5jb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+ KHZhbHVlKSAmIDB4ZmZmZjsgfQotKyAgaW50MzJfdCBkZWNvZGVTaWduZWQoKSBjb25zdCB7IHJl dHVybiB2YWx1ZTsgfQotKyAgdWludDMyX3QgZGVjb2RlVW5zaWduZWQoKSBjb25zdCB7IHJldHVy biB2YWx1ZTsgfQotKyAgc3RhdGljIGJvb2wgSXNJblNpZ25lZFJhbmdlKGludDMyX3QgaW1tKSB7 Ci0rICAgIHJldHVybiBpbW0gPj0gSU5UMTZfTUlOICYmIGltbSA8PSBJTlQxNl9NQVg7Ci0rICB9 Ci0rICBzdGF0aWMgYm9vbCBJc0luVW5zaWduZWRSYW5nZSh1aW50MzJfdCBpbW0pIHsgcmV0dXJu IGltbSA8PSBVSU5UMTZfTUFYOyB9Ci0rICBzdGF0aWMgSW1tMTYgTG93ZXIoSW1tMzIgaW1tKSB7 IHJldHVybiBJbW0xNihpbW0udmFsdWUgJiAweGZmZmYpOyB9Ci0rICBzdGF0aWMgSW1tMTYgVXBw ZXIoSW1tMzIgaW1tKSB7IHJldHVybiBJbW0xNigoaW1tLnZhbHVlID4+IDE2KSAmIDB4ZmZmZik7 IH0KLSt9OwotKwotK2NsYXNzIEltbTggewotKyAgdWludDhfdCB2YWx1ZTsKLSsKLSsgcHVibGlj OgotKyAgSW1tOCgpOwotKyAgZXhwbGljaXQgSW1tOCh1aW50MzJfdCBpbW0pIDogdmFsdWUoaW1t KSB7fQotKyAgdWludDMyX3QgZW5jb2RlKHVpbnQzMl90IHNoaWZ0KSBjb25zdCB7IHJldHVybiB2 YWx1ZSA8PCBzaGlmdDsgfQotKyAgaW50MzJfdCBkZWNvZGVTaWduZWQoKSBjb25zdCB7IHJldHVy biB2YWx1ZTsgfQotKyAgdWludDMyX3QgZGVjb2RlVW5zaWduZWQoKSBjb25zdCB7IHJldHVybiB2 YWx1ZTsgfQotKyAgc3RhdGljIGJvb2wgSXNJblNpZ25lZFJhbmdlKGludDMyX3QgaW1tKSB7Ci0r ICAgIHJldHVybiBpbW0gPj0gSU5UOF9NSU4gJiYgaW1tIDw9IElOVDhfTUFYOwotKyAgfQotKyAg c3RhdGljIGJvb2wgSXNJblVuc2lnbmVkUmFuZ2UodWludDMyX3QgaW1tKSB7IHJldHVybiBpbW0g PD0gVUlOVDhfTUFYOyB9Ci0rICBzdGF0aWMgSW1tOCBMb3dlcihJbW0xNiBpbW0pIHsgcmV0dXJu IEltbTgoaW1tLmRlY29kZVNpZ25lZCgpICYgMHhmZik7IH0KLSsgIHN0YXRpYyBJbW04IFVwcGVy KEltbTE2IGltbSkgewotKyAgICByZXR1cm4gSW1tOCgoaW1tLmRlY29kZVNpZ25lZCgpID4+IDgp ICYgMHhmZik7Ci0rICB9Ci0rfTsKLSsKLStjbGFzcyBPcGVyYW5kIHsKLSsgcHVibGljOgotKyAg ZW51bSBUYWcgeyBSRUcsIEZSRUcsIE1FTSB9OwotKwotKyBwcml2YXRlOgotKyAgVGFnIHRhZyA6 IDM7Ci0rICB1aW50MzJfdCByZWcgOiA1OwotKyAgaW50MzJfdCBvZmZzZXQ7Ci0rCi0rIHB1Ymxp YzoKLSsgIE1PWl9JTVBMSUNJVCBPcGVyYW5kKFJlZ2lzdGVyIHJlZ18pIDogdGFnKFJFRyksIHJl ZyhyZWdfLmNvZGUoKSkge30KLSsKLSsgIGV4cGxpY2l0IE9wZXJhbmQoRmxvYXRSZWdpc3RlciBm cmVnKSA6IHRhZyhGUkVHKSwgcmVnKGZyZWcuY29kZSgpKSB7fQotKwotKyAgT3BlcmFuZChSZWdp c3RlciBiYXNlLCBJbW0zMiBvZmYpCi0rICAgICAgOiB0YWcoTUVNKSwgcmVnKGJhc2UuY29kZSgp KSwgb2Zmc2V0KG9mZi52YWx1ZSkge30KLSsKLSsgIE9wZXJhbmQoUmVnaXN0ZXIgYmFzZSwgaW50 MzJfdCBvZmYpCi0rICAgICAgOiB0YWcoTUVNKSwgcmVnKGJhc2UuY29kZSgpKSwgb2Zmc2V0KG9m Zikge30KLSsKLSsgIGV4cGxpY2l0IE9wZXJhbmQoY29uc3QgQWRkcmVzcyYgYWRkcikKLSsgICAg ICA6IHRhZyhNRU0pLCByZWcoYWRkci5iYXNlLmNvZGUoKSksIG9mZnNldChhZGRyLm9mZnNldCkg e30KLSsKLSsgIFRhZyBnZXRUYWcoKSBjb25zdCB7IHJldHVybiB0YWc7IH0KLSsKLSsgIFJlZ2lz dGVyIHRvUmVnKCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKHRhZyA9PSBSRUcpOwotKyAgICBy ZXR1cm4gUmVnaXN0ZXI6OkZyb21Db2RlKHJlZyk7Ci0rICB9Ci0rCi0rICBGbG9hdFJlZ2lzdGVy IHRvRlJlZygpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVCh0YWcgPT0gRlJFRyk7Ci0rICAgIHJl dHVybiBGbG9hdFJlZ2lzdGVyOjpGcm9tQ29kZShyZWcpOwotKyAgfQotKwotKyAgdm9pZCB0b0Fk ZHIoUmVnaXN0ZXIqIHIsIEltbTMyKiBkZXN0KSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQodGFn ID09IE1FTSk7Ci0rICAgICpyID0gUmVnaXN0ZXI6OkZyb21Db2RlKHJlZyk7Ci0rICAgICpkZXN0 ID0gSW1tMzIob2Zmc2V0KTsKLSsgIH0KLSsgIEFkZHJlc3MgdG9BZGRyZXNzKCkgY29uc3Qgewot KyAgICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0pOwotKyAgICByZXR1cm4gQWRkcmVzcyhSZWdpc3Rl cjo6RnJvbUNvZGUocmVnKSwgb2Zmc2V0KTsKLSsgIH0KLSsgIGludDMyX3QgZGlzcCgpIGNvbnN0 IHsKLSsgICAgTU9aX0FTU0VSVCh0YWcgPT0gTUVNKTsKLSsgICAgcmV0dXJuIG9mZnNldDsKLSsg IH0KLSsKLSsgIGludDMyX3QgYmFzZSgpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVCh0YWcgPT0g TUVNKTsKLSsgICAgcmV0dXJuIHJlZzsKLSsgIH0KLSsgIFJlZ2lzdGVyIGJhc2VSZWcoKSBjb25z dCB7Ci0rICAgIE1PWl9BU1NFUlQodGFnID09IE1FTSk7Ci0rICAgIHJldHVybiBSZWdpc3Rlcjo6 RnJvbUNvZGUocmVnKTsKLSsgIH0KLSt9OwotKwotKy8vIEJ1ZyAyMDM0MDY0IGNvbGxhcHNlZCB0 aGUgcGVyLWJ1ZmZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvZgotKy8vIEFzc2VtYmxl ckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzIGludG8gQXNzZW1ibGVyQnVmZmVyU2V0dGluZ3MsIGFu ZCByZWR1Y2VkCi0rLy8gdGhlIHJ1bnRpbWUgY3RvciB0byAocG9vbE1heE9mZnNldCwgbm9wRmls bCkuIGluc3RCdWZmZXJBbGlnbiBhbmQgdGhlCi0rLy8gTnVtU2hvcnRCcmFuY2hSYW5nZXMgdGVt cGxhdGUgYXJnIHdlcmUgZHJvcHBlZDogUFBDNjQgcHJldmlvdXNseSBwYXNzZWQKLSsvLyBpbnN0 QnVmZmVyQWxpZ249OCAodW51c2VkIG9uIHRoaXMgYmFja2VuZDsgcG9vbCBlbnRyaWVzIGFyZSA0 LWJ5dGUgYWxpZ25lZCkKLSsvLyBhbmQgTnVtU2hvcnRCcmFuY2hSYW5nZXM9MC4KLSt1c2luZyBQ UENCdWZmZXIgPSBqczo6aml0OjpBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sczwKLSsg ICAgSW5zdHJ1Y3Rpb24sIEFzc2VtYmxlciwKLSsgICAganM6OmppdDo6QXNzZW1ibGVyQnVmZmVy U2V0dGluZ3N7Ci0rICAgICAgICAuaW5zdFNpemUgPSA0LAotKyAgICAgICAgLmd1YXJkU2l6ZSA9 IDEsCi0rICAgICAgICAuaGVhZGVyU2l6ZSA9IDEsCi0rICAgICAgICAucGNCaWFzID0gMCwKLSsg ICAgICAgIC5hbGlnbkZpbGxJbnN0ID0gTm9wSW5zdCwKLSsgICAgICAgIC5ub3BGaWxsSW5zdCA9 IE5vcEluc3QsCi0rICAgIH0+OwotKwotKy8vIEluaGVyaXRzIGV4ZWN1dGFibGVDb3B5KCkgYW5k IGFwcGVuZFJhd0NvZGUoKSBmcm9tCi0rLy8gQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v bHMsIHdoaWNoIGFzc2VydCBwb29sIGlzIGZsdXNoZWQuCi0rY2xhc3MgUFBDQnVmZmVyV2l0aEV4 ZWN1dGFibGVDb3B5IDogcHVibGljIFBQQ0J1ZmZlciB7Ci0rIHB1YmxpYzoKLSsgIFBQQ0J1ZmZl cldpdGhFeGVjdXRhYmxlQ29weShzaXplX3QgcG9vbE1heE9mZnNldCwgdW5zaWduZWQgbm9wRmls bCkKLSsgICAgICA6IFBQQ0J1ZmZlcihwb29sTWF4T2Zmc2V0LCBub3BGaWxsKSB7fQotK307Ci0r Ci0rY2xhc3MgQXNzZW1ibGVyIDogcHVibGljIEFzc2VtYmxlclNoYXJlZCB7Ci0rIHB1YmxpYzoK LSsgIC8vIFRyYXAgdGFncyBlbmNvZGVkIGluIHRoZSBsb3cgYml0cyBvZiBhIHRyYXAgd29yZC4K LSsgIC8vIEZyZWVCU0QgYW5kIG90aGVycyBtYXkgdXNlIHIxIGluIHRoZWlyIHRyYXAgd29yZCwg c28gYml0IDAgaXMgYXZvaWRlZC4KLSsgIGVudW0gVHJhcFRhZyB7Ci0rICAgIEJUYWcgPSAyLAot KyAgICBCQ1RhZyA9IDQsCi0rICAgIENhbGxUYWcgPSA2LAotKyAgICBEZWJ1Z1RhZzAgPSAxMCwK LSsgICAgRGVidWdUYWcxID0gMTIsCi0rICAgIERlYnVnVGFnMiA9IDE0Ci0rICB9OwotKwotKyAg Ly8gUG9vbCBsb2FkIHR5cGVzIGVuY29kZWQgaW4gYml0cyAyMS0yMiBvZiBwb29sIGhpbnQgd29y ZHMuCi0rICAvLyBVc2VkIGJ5IEluc2VydEluZGV4SW50b1RhZyAvIFBhdGNoQ29uc3RhbnRQb29s TG9hZC4KLSsgIGVudW0gUG9vbExvYWRUeXBlIHsKLSsgICAgUG9vbExvYWRGUFI2NCA9IDEsICAg IC8vIGxmZCBmRCwgb2Zmc2V0KHJCYXNlKQotKyAgICBQb29sTG9hZFNpbWQxMjggPSAyLCAgLy8g YWRkaSByQmFzZSwgckJhc2UsIG9mZnNldDsgbHh2eCB2c0QsIDAsIHJCYXNlCi0rICAgIFBvb2xM b2FkRlBSMzIgPSAzICAgICAvLyBsZnMgZkQsIG9mZnNldChyQmFzZSkg4oCUIGF1dG8tZXhwYW5k cyB0byBkb3VibGUKLSsgIH07Ci0rCi0rICBlbnVtIEJyYW5jaEJpdHMgewotKyAgICBCcmFuY2hP bkNsZWFyID0gMHgwNCwKLSsgICAgQnJhbmNoT25TZXQgPSAweDBjLAotKyAgICBCcmFuY2hPcHRp b25NYXNrID0gMHgwZiwKLSsgICAgQnJhbmNoT3B0aW9uSW52ZXJ0ID0gMHgwOAotKyAgfTsKLSsK LSsgIC8vIFBQQyBjb25kaXRpb24gZW5jb2RpbmcuIFRoZSB0b3AgbnliYmxlIGlzIHRoZSBvZmZz ZXQgdG8gdGhlIENSIGZpZWxkCi0rICAvLyAodGhlIHggaW4gQklGKjQreCksIGFuZCB0aGUgYm90 dG9tIGlzIHRoZSBCTyBmaWVsZC4KLSsgIC8vIFN5bnRoZXRpYyBmbGFncyBzaXQgaW4gdGhlIE1T QiBhbmQgYXJlIG1hc2tlZCBvZmYgYmVmb3JlIHVzZS4KLSsgIGVudW0gQ29uZGl0aW9uIHsKLSsg ICAgQ29uZGl0aW9uVW5zaWduZWQgPSAweDEwMCwKLSsgICAgQ29uZGl0aW9uVW5zaWduZWRIYW5k bGVkID0gMHgyZmYsCi0rICAgIENvbmRpdGlvblplcm8gPSAweDQwMCwKLSsgICAgQ29uZGl0aW9u T25seVhFUiA9IDB4MjAwLAotKyAgICBDb25kaXRpb25YRVJDQSA9IDB4MjNjLAotKyAgICBDb25k aXRpb25YRVJOQ0EgPSAweDIzNCwKLSsgICAgQ29uZGl0aW9uWEVST1YgPSAweDIxYywKLSsKLSsg ICAgRXF1YWwgPSAweDJjLAotKyAgICBOb3RFcXVhbCA9IDB4MjQsCi0rICAgIEdyZWF0ZXJUaGFu ID0gMHgxYywKLSsgICAgR3JlYXRlclRoYW5PckVxdWFsID0gMHgwNCwKLSsgICAgTGVzc1RoYW4g PSAweDBjLAotKyAgICBMZXNzVGhhbk9yRXF1YWwgPSAweDE0LAotKwotKyAgICBBYm92ZSA9IEdy ZWF0ZXJUaGFuIHwgQ29uZGl0aW9uVW5zaWduZWQsCi0rICAgIEFib3ZlT3JFcXVhbCA9IEdyZWF0 ZXJUaGFuT3JFcXVhbCB8IENvbmRpdGlvblVuc2lnbmVkLAotKyAgICBCZWxvdyA9IExlc3NUaGFu IHwgQ29uZGl0aW9uVW5zaWduZWQsCi0rICAgIEJlbG93T3JFcXVhbCA9IExlc3NUaGFuT3JFcXVh bCB8IENvbmRpdGlvblVuc2lnbmVkLAotKwotKyAgICBTaWduZWQgPSBMZXNzVGhhbiB8IENvbmRp dGlvblplcm8sCi0rICAgIE5vdFNpZ25lZCA9IEdyZWF0ZXJUaGFuT3JFcXVhbCB8IENvbmRpdGlv blplcm8sCi0rICAgIFplcm8gPSBFcXVhbCB8IENvbmRpdGlvblplcm8sCi0rICAgIE5vblplcm8g PSBOb3RFcXVhbCB8IENvbmRpdGlvblplcm8sCi0rCi0rICAgIE92ZXJmbG93ID0gQ29uZGl0aW9u WEVST1YsCi0rICAgIE5vdE92ZXJmbG93ID0gQ29uZGl0aW9uT25seVhFUiB8IExlc3NUaGFuT3JF cXVhbCwKLSsgICAgQ2FycnlTZXQgPSBDb25kaXRpb25YRVJDQSwKLSsgICAgQ2FycnlDbGVhciA9 IENvbmRpdGlvblhFUk5DQSwKLSsKLSsgICAgQWx3YXlzID0gMHgxZiwKLSsgICAgU09CaXQgPSAw eDNjLAotKyAgICBOU09CaXQgPSAweDM0Ci0rICB9OwotKwotKyAgZW51bSBEb3VibGVDb25kaXRp b24gewotKyAgICBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQgPSAweDEwMCwKLSsgICAgRG91Ymxl T3JkZXJlZCA9IDB4MzQsCi0rICAgIERvdWJsZUVxdWFsID0gMHgyYywKLSsgICAgRG91YmxlTm90 RXF1YWwgPSAweDI0LAotKyAgICBEb3VibGVHcmVhdGVyVGhhbiA9IDB4MWMsCi0rICAgIERvdWJs ZUdyZWF0ZXJUaGFuT3JFcXVhbCA9IDB4MDQsCi0rICAgIERvdWJsZUxlc3NUaGFuID0gMHgwYywK LSsgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsID0gMHgxNCwKLSsgICAgRG91YmxlVW5vcmRlcmVk ID0gMHgzYywKLSsgICAgRG91YmxlRXF1YWxPclVub3JkZXJlZCA9IERvdWJsZUVxdWFsIHwgRG91 YmxlQ29uZGl0aW9uVW5vcmRlcmVkLAotKyAgICBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkID0g RG91YmxlTm90RXF1YWwgfCBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQsCi0rICAgIERvdWJsZUdy ZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBEb3VibGVHcmVhdGVyVGhhbiB8IERvdWJsZUNvbmRpdGlv blVub3JkZXJlZCwKLSsgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPQot KyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsIHwgRG91YmxlQ29uZGl0aW9uVW5vcmRl cmVkLAotKyAgICBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkID0gRG91YmxlTGVzc1RoYW4gfCBE b3VibGVDb25kaXRpb25Vbm9yZGVyZWQsCi0rICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5v cmRlcmVkID0KLSsgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCB8IERvdWJsZUNvbmRpdGlv blVub3JkZXJlZCwKLSsgIH07Ci0rCi0rICBlbnVtIEp1bXBPckNhbGwgeyBCcmFuY2hJc0p1bXAs IEJyYW5jaElzQ2FsbCB9OwotKwotKyAgZW51bSBMaW5rQml0IHsKLSsgICAgRG9udExpbmtCID0g MCwKLSsgICAgTGlua0IgPSAxLAotKyAgfTsKLSsKLSsgIGVudW0gTGlrZWx5Qml0IHsKLSsgICAg Tm90TGlrZWx5QiA9IDAsCi0rICAgIExpa2VseUIgPSAxLAotKyAgfTsKLSsKLSsgIGVudW0gQnJh bmNoQWRkcmVzc1R5cGUgewotKyAgICBSZWxhdGl2ZUJyYW5jaCA9IDAsCi0rICAgIEFic29sdXRl QnJhbmNoID0gMiwKLSsgIH07Ci0rCi0rICBlbnVtIEZsb2F0Rm9ybWF0IHsgU2luZ2xlRmxvYXQs IERvdWJsZUZsb2F0IH07Ci0rICBlbnVtIEZsb2F0VGVzdEtpbmQgeyBUZXN0Rm9yVHJ1ZSwgVGVz dEZvckZhbHNlIH07Ci0rCi0rICBCdWZmZXJPZmZzZXQgbmV4dE9mZnNldCgpIHsgcmV0dXJuIG1f YnVmZmVyLm5leHRPZmZzZXQoKTsgfQotKwotKyBwcm90ZWN0ZWQ6Ci0rICBJbnN0cnVjdGlvbiog ZWRpdFNyYyhCdWZmZXJPZmZzZXQgYm8pIHsKLSsgICAgaWYgKCFiby5hc3NpZ25lZCgpKSB7Ci0r ICAgICAgLy8gVW5kZXIgT09NLCB3cml0ZUluc3QgbWF5IHJldHVybiBhbiB1bmFzc2lnbmVkIEJ1 ZmZlck9mZnNldC4KLSsgICAgICAvLyBSZXR1cm4gYSBkdW1teSB3cml0YWJsZSBhcmVhIHNvIGNh bGxlcnMgKFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKQotKyAgICAgIC8vIGNhbiBwcm9jZWVkIGhh cm1sZXNzbHk7IHRoZSBjb21waWxhdGlvbiB3aWxsIGJlIGRpc2NhcmRlZC4KLSsgICAgICBzdGF0 aWMgdWludDMyX3Qgb29tRHVtbXlfWzhdOwotKyAgICAgIHJldHVybiAoSW5zdHJ1Y3Rpb24qKW9v bUR1bW15XzsKLSsgICAgfQotKyAgICByZXR1cm4gbV9idWZmZXIuZ2V0SW5zdChibyk7Ci0rICB9 Ci0rCi0rICBzdHJ1Y3QgUmVsYXRpdmVQYXRjaCB7Ci0rICAgIEJ1ZmZlck9mZnNldCBvZmZzZXQ7 Ci0rICAgIHZvaWQqIHRhcmdldDsKLSsgICAgUmVsb2NhdGlvbktpbmQga2luZDsKLSsKLSsgICAg UmVsYXRpdmVQYXRjaChCdWZmZXJPZmZzZXQgb2Zmc2V0LCB2b2lkKiB0YXJnZXQsIFJlbG9jYXRp b25LaW5kIGtpbmQpCi0rICAgICAgICA6IG9mZnNldChvZmZzZXQpLCB0YXJnZXQodGFyZ2V0KSwg a2luZChraW5kKSB7fQotKyAgfTsKLSsKLSsgIGpzOjpWZWN0b3I8UmVsYXRpdmVQYXRjaCwgOCwg U3lzdGVtQWxsb2NQb2xpY3k+IGp1bXBzXzsKLSsKLSsgIENvbXBhY3RCdWZmZXJXcml0ZXIganVt cFJlbG9jYXRpb25zXzsKLSsgIENvbXBhY3RCdWZmZXJXcml0ZXIgZGF0YVJlbG9jYXRpb25zXzsK LSsKLSsgIFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29weSBtX2J1ZmZlcjsKLSsKLSsjaWZkZWYg SlNfSklUU1BFVwotKyAgU3ByaW50ZXIqIHByaW50ZXI7Ci0rI2VuZGlmCi0rCi0rIHB1YmxpYzoK LSsgIC8vIFdoaWNoIGFic29sdXRlIGJpdCBudW1iZXIgZG9lcyBhIENSICsgQ29uZGl0aW9uIHBh aXIgcmVmZXIgdG8/Ci0rICBzdGF0aWMgdWludDhfdCBjckJpdChDUmVnaXN0ZXJJRCBjciwgQ29u ZGl0aW9uIGNvbmQpIHsKLSsgICAgcmV0dXJuIChjciA8PCAyKSArICgoY29uZCAmIDB4ZjApID4+ IDQpOwotKyAgfQotKyAgc3RhdGljIHVpbnQ4X3QgY3JCaXQoQ1JlZ2lzdGVySUQgY3IsIERvdWJs ZUNvbmRpdGlvbiBjb25kKSB7Ci0rICAgIHJldHVybiAoY3IgPDwgMikgKyAoKGNvbmQgJiAweGYw KSA+PiA0KTsKLSsgIH0KLSsKLSsgIEFzc2VtYmxlcigpCi0rICAgICAgOiBtX2J1ZmZlcigvKiBw b29sTWF4T2Zmc2V0ICovIDgxOTIsIC8qIG5vcEZpbGwgKi8gMCksCi0rI2lmZGVmIEpTX0pJVFNQ RVcKLSsgICAgICAgIHByaW50ZXIobnVsbHB0ciksCi0rI2VuZGlmCi0rICAgICAgICBpc0Zpbmlz aGVkKGZhbHNlKSwKLSsgICAgICAgIHNjcmF0Y2hfcmVnaXN0ZXJfbGlzdF8oKDEgPDwgUmVnaXN0 ZXJzOjpyMTEpIHwgKDEgPDwgUmVnaXN0ZXJzOjpyMTIpKSB7Ci0rICB9Ci0rCi0rICB2b2lkIHNl dFVubGltaXRlZEJ1ZmZlcigpIHsgbV9idWZmZXIuc2V0VW5saW1pdGVkKCk7IH0KLSsKLSsgIC8v IENvbnN0YW50IHBvb2wgY2FsbGJhY2tzIHJlcXVpcmVkIGJ5IEFzc2VtYmxlckJ1ZmZlcldpdGhD b25zdGFudFBvb2xzLgotKyAgc3RhdGljIHZvaWQgSW5zZXJ0SW5kZXhJbnRvVGFnKHVpbnQ4X3Qq IGxvYWQsIHVpbnQzMl90IGluZGV4KTsKLSsgIHN0YXRpYyBib29sIFBhdGNoQ29uc3RhbnRQb29s TG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcik7Ci0rICBzdGF0aWMgdm9p ZCBXcml0ZVBvb2xHdWFyZChCdWZmZXJPZmZzZXQgYnJhbmNoLCBJbnN0cnVjdGlvbiogaW5zdCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck9mZnNldCBkZXN0KTsKLSsgIHN0 YXRpYyB2b2lkIFdyaXRlUG9vbEhlYWRlcih1aW50OF90KiBzdGFydCwganM6OmppdDo6UG9vbCog cCwgYm9vbCBpc05hdHVyYWwpOwotKyAgc3RhdGljIHZvaWQgUGF0Y2hTaG9ydFJhbmdlQnJhbmNo VG9WZW5lZXIoUFBDQnVmZmVyKiwgdW5zaWduZWQgcmFuZ2VJZHgsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPZmZzZXQgZGVhZGxpbmUsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPZmZzZXQgdmVu ZWVyKTsKLSsKLSsgIHN0YXRpYyBDb25kaXRpb24gSW52ZXJ0Q29uZGl0aW9uKENvbmRpdGlvbiBj b25kKTsKLSsgIHN0YXRpYyBEb3VibGVDb25kaXRpb24gSW52ZXJ0Q29uZGl0aW9uKERvdWJsZUNv bmRpdGlvbiBjb25kKTsKLSsKLSsgIHZvaWQgd3JpdGVSZWxvY2F0aW9uKEJ1ZmZlck9mZnNldCBz cmMpIHsKLSsgICAganVtcFJlbG9jYXRpb25zXy53cml0ZVVuc2lnbmVkKHNyYy5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rCi0rICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRpb24oSW1tR0NQdHIgcHRyKSB7 Ci0rICAgIGlmIChwdHIudmFsdWUpIHsKLSsgICAgICBpZiAoZ2M6OklzSW5zaWRlTnVyc2VyeShw dHIudmFsdWUpKSB7Ci0rICAgICAgICBlbWJlZHNOdXJzZXJ5UG9pbnRlcnNfID0gdHJ1ZTsKLSsg ICAgICB9Ci0rICAgICAgZGF0YVJlbG9jYXRpb25zXy53cml0ZVVuc2lnbmVkKG5leHRPZmZzZXQo KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgIH0KLSsgIHZvaWQgd3JpdGVEYXRhUmVsb2NhdGlv bihCdWZmZXJPZmZzZXQgYm8sIEltbUdDUHRyIHB0cikgewotKyAgICBpZiAocHRyLnZhbHVlKSB7 Ci0rICAgICAgaWYgKGdjOjpJc0luc2lkZU51cnNlcnkocHRyLnZhbHVlKSkgewotKyAgICAgICAg ZW1iZWRzTnVyc2VyeVBvaW50ZXJzXyA9IHRydWU7Ci0rICAgICAgfQotKyAgICAgIGRhdGFSZWxv Y2F0aW9uc18ud3JpdGVVbnNpZ25lZChiby5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgIH0KLSsK LSsgIHZvaWQgYXNzZXJ0Tm9HQ1RoaW5ncygpIGNvbnN0IHsKLSsjaWZkZWYgREVCVUcKLSsgICAg TU9aX0FTU0VSVChkYXRhUmVsb2NhdGlvbnNfLmxlbmd0aCgpID09IDApOwotKyAgICBmb3IgKGF1 dG8mIGogOiBqdW1wc18pIHsKLSsgICAgICBNT1pfQVNTRVJUKGoua2luZCA9PSBSZWxvY2F0aW9u S2luZDo6SEFSRENPREVEKTsKLSsgICAgfQotKyNlbmRpZgotKyAgfQotKwotKyAgYm9vbCBvb20o KSBjb25zdDsKLSsKLSsgIHZvaWQgc2V0UHJpbnRlcihTcHJpbnRlciogc3ApIHsKLSsjaWZkZWYg SlNfSklUU1BFVwotKyAgICBwcmludGVyID0gc3A7Ci0rI2VuZGlmCi0rICB9Ci0rCi0rI2lmZGVm IEpTX0pJVFNQRVcKLSsgIGlubGluZSB2b2lkIHNwZXcoY29uc3QgY2hhciogZm10LCAuLi4pIE1P Wl9GT1JNQVRfUFJJTlRGKDIsIDMpIHsKLSsgICAgaWYgKE1PWl9VTkxJS0VMWShwcmludGVyIHx8 IEppdFNwZXdFbmFibGVkKEppdFNwZXdfQ29kZWdlbikpKSB7Ci0rICAgICAgdmFfbGlzdCB2YTsK LSsgICAgICB2YV9zdGFydCh2YSwgZm10KTsKLSsgICAgICBzcGV3VkEoZm10LCB2YSk7Ci0rICAg ICAgdmFfZW5kKHZhKTsKLSsgICAgfQotKyAgfQotKyAgTU9aX0NPTEQgdm9pZCBzcGV3VkEoY29u c3QgY2hhciogZm10LCB2YV9saXN0IHZhKSBNT1pfRk9STUFUX1BSSU5URigyLCAwKSB7Ci0rICAg IGNoYXIgYnVmWzIwMF07Ci0rICAgIGludCBpID0gVnNwcmludGZMaXRlcmFsKGJ1ZiwgZm10LCB2 YSk7Ci0rICAgIGlmIChpID4gLTEpIHsKLSsgICAgICBpZiAocHJpbnRlcikgewotKyAgICAgICAg cHJpbnRlci0+cHJpbnRmKCIlc1xuIiwgYnVmKTsKLSsgICAgICB9Ci0rICAgICAganM6OmppdDo6 Sml0U3Bldyhqczo6aml0OjpKaXRTcGV3X0NvZGVnZW4sICIlcyIsIGJ1Zik7Ci0rICAgIH0KLSsg IH0KLSsjZWxzZQotKyAgTU9aX0FMV0FZU19JTkxJTkUgdm9pZCBzcGV3KGNvbnN0IGNoYXIqIGZt dCwgLi4uKSBNT1pfRk9STUFUX1BSSU5URigyLCAzKSB7fQotKyNlbmRpZgotKwotKyAgUmVnaXN0 ZXIgZ2V0U3RhY2tQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gU3RhY2tQb2ludGVyOyB9Ci0rCi0r IHByb3RlY3RlZDoKLSsgIGJvb2wgaXNGaW5pc2hlZDsKLSsKLSsgcHVibGljOgotKyAgc3RhdGlj IHVpbnRwdHJfdCBHZXRQb2ludGVyKHVpbnQ4X3QqKTsKLSsgIHZvaWQgZmx1c2goKSB7Ci0rICAg IE1PWl9BU1NFUlQoIWlzRmluaXNoZWQpOwotKyAgICBtX2J1ZmZlci5mbHVzaFBvb2woKTsKLSsg IH0KLSsgIC8vIEluaGliaXQgcG9vbCBmbHVzaGVzIGZvciB0aGUgbmV4dCBtYXhJbnN0IGluc3Ry dWN0aW9ucy4gTWlycm9ycyB0aGUKLSsgIC8vIEFSTS9BUk02NCB3cmFwcGVyczsgbGV0cyBzaGFy ZWQgY29kZSAoZS5nLiBXYXNtRnJhbWVJdGVyIGVwaWxvZ3VlcwotKyAgLy8gdGhhdCBuZWVkIHN0 YXRpYyBieXRlIGRpc3RhbmNlcyBiZXR3ZWVuIGN1cnJlbnRPZmZzZXQoKSBjYXB0dXJlcykKLSsg IC8vIGZlbmNlIGEgc21hbGwgaW5zdHJ1Y3Rpb24gd2luZG93IHdpdGhvdXQgcmVhY2hpbmcgaW50 byBtX2J1ZmZlci4KLSsgIHZvaWQgZW50ZXJOb1Bvb2woc2l6ZV90IG1heEluc3QpIHsgbV9idWZm ZXIuZW50ZXJOb1Bvb2wobWF4SW5zdCk7IH0KLSsgIHZvaWQgbGVhdmVOb1Bvb2woKSB7IG1fYnVm ZmVyLmxlYXZlTm9Qb29sKCk7IH0KLSsgIHZvaWQgZmluaXNoKCk7Ci0rICBib29sIGFwcGVuZFJh d0NvZGUoY29uc3QgdWludDhfdCogY29kZSwgc2l6ZV90IG51bUJ5dGVzKTsKLSsgIGJvb2wgcmVz ZXJ2ZShzaXplX3Qgc2l6ZSk7Ci0rICBib29sIHN3YXBCdWZmZXIod2FzbTo6Qnl0ZXMmIGJ5dGVz KTsKLSsgIHZvaWQgZXhlY3V0YWJsZUNvcHkodm9pZCogYnVmZmVyKTsKLSsgIHZvaWQgY29weUp1 bXBSZWxvY2F0aW9uVGFibGUodWludDhfdCogZGVzdCk7Ci0rICB2b2lkIGNvcHlEYXRhUmVsb2Nh dGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpOwotKwotKyAgc2l6ZV90IHNpemUoKSBjb25zdDsKLSsg IHNpemVfdCBqdW1wUmVsb2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdDsKLSsgIHNpemVfdCBkYXRh UmVsb2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdDsKLSsgIHNpemVfdCBieXRlc05lZWRlZCgpIGNv bnN0OwotKwotKyAgQnVmZmVyT2Zmc2V0IHdyaXRlSW5zdCh1aW50MzJfdCB4LCB1aW50MzJfdCog ZGVzdCA9IG51bGxwdHIpOwotKyAgc3RhdGljIHZvaWQgV3JpdGVJbnN0U3RhdGljKHVpbnQzMl90 IHgsIHVpbnQzMl90KiBkZXN0KTsKLSsKLSsgcHVibGljOgotKyAgQnVmZmVyT2Zmc2V0IGhhbHRp bmdBbGlnbihpbnQgYWxpZ25tZW50KTsKLSsgIEJ1ZmZlck9mZnNldCBub3BBbGlnbihpbnQgYWxp Z25tZW50KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ub3AoKTsKLSsKLSsgIC8vIC0tLSBJbnN0cnVj dGlvbiBlbWlzc2lvbiAoZGVjbGFyYXRpb25zIG9ubHksIGltcGxlbWVudGVkIGluIGxhdGVyIGNv bW1pdHMpCi0rCi0rICAvLyBCcmFuY2ggaW5zdHJ1Y3Rpb25zLgotKyAgdWludDE2X3QgY29tcHV0 ZUNvbmRpdGlvbkNvZGUoQ29uZGl0aW9uIG9wLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCk7Ci0rICB1 aW50MTZfdCBjb21wdXRlQ29uZGl0aW9uQ29kZShEb3VibGVDb25kaXRpb24gY29uZCwgQ1JlZ2lz dGVySUQgY3IgPSBjcjApOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2IoSk9mZkltbTI2IG9mZiwgQnJh bmNoQWRkcmVzc1R5cGUgYmF0ID0gUmVsYXRpdmVCcmFuY2gsCi0rICAgICAgICAgICAgICAgICAg ICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iKGludDMyX3Qg b2ZmLCBCcmFuY2hBZGRyZXNzVHlwZSBiYXQgPSBSZWxhdGl2ZUJyYW5jaCwKLSsgICAgICAgICAg ICAgICAgICAgIExpbmtCaXQgbGIgPSBEb250TGlua0IpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2Js cihMaW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iY3RyKExpbmtC aXQgbGIgPSBEb250TGlua0IpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2JjKEJPZmZJbW0xNiBvZmYs IENvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCwKLSsgICAgICAgICAgICAgICAg ICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmMoaW50MTZfdCBvZmYsIENvbmRpdGlvbiBjb25kLCBDUmVn aXN0ZXJJRCBjciA9IGNyMCwKLSsgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiID0g Tm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf YmMoQk9mZkltbTE2IG9mZiwgRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyID0g Y3IwLAotKyAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IgPSBOb3RMaWtlbHlCLCBM aW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iYyhpbnQxNl90IG9m ZiwgRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyID0gY3IwLAotKyAgICAgICAg ICAgICAgICAgICAgIExpa2VseUJpdCBsa2IgPSBOb3RMaWtlbHlCLCBMaW5rQml0IGxiID0gRG9u dExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iY2N0cihDb25kaXRpb24gY29uZCwgQ1JlZ2lz dGVySUQgY3IgPSBjcjAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiA9 IE5vdExpa2VseUIsIExpbmtCaXQgbGIgPSBEb250TGlua0IpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X2JjY3RyKERvdWJsZUNvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwgTGlua0JpdCBs YiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmMoaW50MTZfdCBvZmYsIHVpbnQx Nl90IG9wLCBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwKLSsgICAgICAgICAgICAgICAgICAg ICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iY2N0cih1aW50 MTZfdCBvcCwgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7Ci0rCi0rICAvLyBTUFIgb3BlcmF0aW9ucy4K LSsgIEJ1ZmZlck9mZnNldCBhc19tdHNwcihTUFJlZ2lzdGVySUQgc3ByLCBSZWdpc3RlciByYSk7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfbWZzcHIoUmVnaXN0ZXIgcmQsIFNQUmVnaXN0ZXJJRCBzcHIp OwotKwotKyAgLy8gQ1Igb3BlcmF0aW9ucy4KLSsgIEJ1ZmZlck9mZnNldCBhc19jcmFuZCh1aW50 OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jcmFuZGMo dWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY3Jv cih1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19j cm9yYyh1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c19jcnhvcih1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc19tdGNyZih1aW50MzJfdCBtYXNrLCBSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQg YXNfbWZvY3JmKFJlZ2lzdGVyIHJkLCBDUmVnaXN0ZXJJRCBjcmZzKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc19tY3J4cngoQ1JlZ2lzdGVySUQgY3J0KTsKLSsKLSsgIC8vIENvbXBhcmUgaW5zdHJ1Y3Rp b25zLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGQoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJh LCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wZGkoQ1JlZ2lzdGVySUQgY3Is IFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXBsZChDUmVn aXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c19jbXBsZGkoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc19jbXB3KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcHdpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciBy YSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbHcoQ1JlZ2lzdGVySUQgY3Is IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbHdpKENS ZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQg YXNfY21wZChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2Nt cGRpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXBsZChS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGxkaShSZWdp c3RlciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wdyhSZWdpc3RlciBy YSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcHdpKFJlZ2lzdGVyIHJhLCBp bnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXBsdyhSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGx3aShSZWdpc3RlciByYSwgaW50MTZfdCBp bSk7Ci0rCi0rICAvLyBBTFUgKHRocmVlLXJlZ2lzdGVyKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19h ZGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfYWRkYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc19hZGRlKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmYoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3ViZmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3ViZmUoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbmVnKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciBycyk7Ci0rCi0rICBCdWZmZXJPZmZzZXQgYXNfbXVsbGQoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbXVs aGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfbXVsaGR1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX211bGxkbyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVy IHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tdWxsdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEs IFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tdWxod3UoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rCi0rICBCdWZmZXJPZmZzZXQgYXNfZGl2ZChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19k aXZkdShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19kaXZ3KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX2Rpdnd1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpOwotKyAgLy8gUE9XRVI5IG1vZHVsby4KLSsgIEJ1ZmZlck9mZnNldCBhc19tb2RzZChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19t b2RzdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19tb2R1ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19tb2R1dyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVy IHJiKTsKLSsKLSsgIC8vIEFMVSBpbW1lZGlhdGUuCi0rICBCdWZmZXJPZmZzZXQgYXNfYWRkaShS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0sCi0rICAgICAgICAgICAgICAgICAg ICAgICBib29sIGFjdHVhbGx5X2xpID0gZmFsc2UpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2FkZGlz KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGFjdHVhbGx5X2xpcyA9IGZhbHNlKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19t dWxsaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3N1YmZpYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOwotKwot KyAgLy8gQUxVIHVuYXJ5L2V4dGVuZGVkLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2NudGx6dyhSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NudGx6ZChSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NudHR6ZChSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NudHR6dyhSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3BvcGNudGQoUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19wb3BjbnR3KFJlZ2lzdGVyIHJhLCBSZWdp c3RlciBycyk7Ci0rICAvLyBQT1dFUjEwIGJ5dGUtcmV2ZXJzZSBkb3VibGV3b3JkOiByYSA9IGJz d2FwNjQocnMpLiAxIGluc24gcmVwbGFjaW5nIHRoZQotKyAgLy8gUE9XRVI5IG10dnNyZCAvIHh4 YnJkIC8gbWZ2c3JkIHJvdW5kLXRyaXAgaW4gYnl0ZVN3YXA2NC4KLSsgIEJ1ZmZlck9mZnNldCBh c19icmQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzKTsKLSsgIC8vIFBPV0VSMTAgYnl0ZS1yZXZl cnNlIGVhY2ggaGFsZndvcmQgKDQgaGFsZndvcmRzKSAvIGVhY2ggd29yZCAoMiB3b3JkcykKLSsg IC8vIGluIHRoZSA2NC1iaXQgZG91Ymxld29yZC4gVGhlIHdhc20vYXNtIGNhbGxlciB1c3VhbGx5 IG1hc2tzIG9yCi0rICAvLyBzaWduLWV4dGVuZHMgdGhlIGxvdyBoYWxmd29yZC93b3JkIGFmdGVy d2FyZHMuCi0rICBCdWZmZXJPZmZzZXQgYXNfYnJoKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycyk7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfYnJ3KFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycyk7Ci0rCi0r ICAvLyBCaXQgb3BlcmF0aW9ucyAobG9naWNhbCwgdGhyZWUtcmVnaXN0ZXIpLgotKyAgQnVmZmVy T2Zmc2V0IGFzX2FuZF8oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfYW5kX19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lz dGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ub3IoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJz LCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfb3JfKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycywgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3hvcl8oUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc2x3KFJl Z2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3NydyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19zcmF3KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3NsZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zcmQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdp c3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3JhZChSZWdpc3RlciByZCwgUmVnaXN0ZXIg cnMsIFJlZ2lzdGVyIHJiKTsKLSsKLSsgIC8vIEJpdCBvcGVyYXRpb25zIChsb2dpY2FsLCBpbW1l ZGlhdGUpLgotKyAgQnVmZmVyT2Zmc2V0IGFzX29yaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEs IHVpbnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19vcmlzKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciByYSwgdWludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3hvcmkoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeG9yaXMo UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQg YXNfYW5kaV9yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIHVpbnQxNl90IGltKTsKLSsKLSsg IC8vIFNpZ24gZXh0ZW5zaW9uLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2V4dHNiKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZXh0c2goUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19leHRzdyhSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2V4dHN3X3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciBycyk7Ci0rCi0rICAvLyBTaGlmdC9yb3RhdGUgd2l0aCBpbW1lZGlhdGVzLgotKyAgQnVmZmVy T2Zmc2V0IGFzX3NyYXdpKFJlZ2lzdGVyIGlkLCBSZWdpc3RlciBycywgdWludDhfdCBuKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19zcmFkaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBuKTsK LSsgIEJ1ZmZlck9mZnNldCBhc19ybGRjbChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMsIFJlZ2lz dGVyIHJiLCB1aW50OF90IG1iKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybGRpY2woUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc19ybGRpY2xfcmMoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50 OF90IG1iKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybGRpY3IoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVy IHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybGRpY3Jf cmMoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19ybHdpbm0oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90 IHNoLCB1aW50OF90IG1iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1lKTsK LSsgIEJ1ZmZlck9mZnNldCBhc19ybHdpbm1fcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1 aW50OF90IHNoLCB1aW50OF90IG1iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 OF90IG1lKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybHdpbWkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IG1lKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybGRpbWkoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCB1aW50OF90IHNoLCB1aW50OF90IG1iKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ybHdu bShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiLCB1aW50OF90IG1iLAotKyAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWUpOwotKwotKyAgLy8gSW50ZWdlciBsb2Fk cyAoRC1mb3JtKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19sYnooUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGhhKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xoeihSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sd2Eo UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQg YXNfbHd6KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX2xkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKwot KyAgLy8gSW50ZWdlciBzdG9yZXMgKEQtZm9ybSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfc3RiKFJl Z2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3N0aChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19zdHcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfc3RkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZHUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQx Nl90IG9mZik7Ci0rCi0rICAvLyBJbnRlZ2VyIGxvYWRzL3N0b3JlcyAoWC1mb3JtLCBpbmRleGVk KS4KLSsgIEJ1ZmZlck9mZnNldCBhc19sYnp4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xoYXgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGh6eChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sd3p4KFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgLy8gWC1mb3JtIHNpZ24tZXh0 ZW5kaW5nIHdvcmQgbG9hZC4gU2luZ2xlLWluc24gZXF1aXZhbGVudCBvZiBsd3p4ICsgZXh0c3cu Ci0rICBCdWZmZXJPZmZzZXQgYXNfbHdheChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lz dGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sd2FyeChSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sYmFyeChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19saGFyeChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19s ZHgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfbGRhcngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfc3RieChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdGJjeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdHd4KFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0d2JyeChSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdGh4KFJl Z2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3N0aGN4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3N0ZHgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfc3RkY3goUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3R3Y3goUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJh LCBSZWdpc3RlciByYik7Ci0rCi0rICAvLyBJbnRlZ2VyIHNlbGVjdC4KLSsgIC8vIFBPV0VSMTAg KElTQSAzLjEpLiBTZXQgUlQgPSAxLzAgYmFzZWQgb24gYSBDUiBiaXQuCi0rICBCdWZmZXJPZmZz ZXQgYXNfc2V0YmMoUmVnaXN0ZXIgcnQsIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBjcik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfc2V0YmNyKFJlZ2lzdGVyIHJ0LCB1aW50MTZfdCBiYywgQ1JlZ2lz dGVySUQgY3IpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2lzZWwoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYiwgdWludDE2X3QgcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICBD UmVnaXN0ZXJJRCBjciA9IGNyMCk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfaXNlbDAoUmVnaXN0ZXIg cnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwgdWludDE2X3QgcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgQ1JlZ2lzdGVySUQgY3IgPSBjcjApOwotKwotKyAgLy8gRlAgY29tcGFyZS4K LSsgIEJ1ZmZlck9mZnNldCBhc19mY21wdShDUmVnaXN0ZXJJRCBjciwgRmxvYXRSZWdpc3RlciBy YSwgRmxvYXRSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmNtcHUoRmxvYXRSZWdp c3RlciByYSwgRmxvYXRSZWdpc3RlciByYik7Ci0rCi0rICAvLyBGUCBhcml0aG1ldGljICh0d28t c291cmNlKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19mYWRkKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0 UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZhZGRz KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX2ZzdWIoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBy YSwgRmxvYXRSZWdpc3RlciByYyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZnN1YnMoRmxvYXRSZWdp c3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfZmRpdihGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJl Z2lzdGVyIHJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mZGl2cyhGbG9hdFJlZ2lzdGVyIHJkLCBG bG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19m bXVsKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZtdWxzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0 ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjcHNnbihGbG9h dFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKLSsgIC8v IEZQIHVuYXJ5LgotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZhYnMoRmxvYXRSZWdpc3RlciByZCwgRmxv YXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZm5lZyhGbG9hdFJlZ2lzdGVyIHJk LCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mbXIoRmxvYXRSZWdpc3Rl ciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZnNxcnQoRmxvYXRS ZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZnNxcnRz KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X2Zyc3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rCi0rICAvLyBGUCBj b252ZXJzaW9ucy4KLSsgIEJ1ZmZlck9mZnNldCBhc19mY2ZpZChGbG9hdFJlZ2lzdGVyIHJkLCBG bG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mY2ZpZHMoRmxvYXRSZWdpc3Rl ciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmNmaWR1KEZsb2F0 UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjZmlk dXMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQg YXNfZmN0aWQoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfZmN0aWR6KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX2ZjdGlkdXooRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBy cyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmN0aXd6KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVn aXN0ZXIgcnMpOwotKwotKyAgLy8gRlAgcm91bmRpbmcuCi0rICBCdWZmZXJPZmZzZXQgYXNfZnJp bShGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBh c19mcmlwKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX2ZyaXooRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rCi0rICAv LyBGUCBsb2FkcyAoRC1mb3JtKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19sZmQoRmxvYXRSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sZnMo RmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsKLSsgIC8vIEZQ IHN0b3JlcyAoRC1mb3JtKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19zdGZkKEZsb2F0UmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3RmcyhG bG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3N0ZmR1KEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3Rmc3UoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIs IGludDE2X3Qgb2ZmKTsKLSsKLSsgIC8vIEZQIGxvYWRzL3N0b3JlcyAoWC1mb3JtLCBpbmRleGVk KS4KLSsgIEJ1ZmZlck9mZnNldCBhc19sZmR4KEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJh LCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGZzeChGbG9hdFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xmaXdheChG bG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3N0ZmR4KEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3Rmc3goRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEs IFJlZ2lzdGVyIHJiKTsKLSsKLSsgIC8vIEZQU0NSIG9wZXJhdGlvbnMuCi0rICBCdWZmZXJPZmZz ZXQgYXNfbXRmc2IwKHVpbnQ4X3QgYnQpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX21jcmZzKENSZWdp c3RlcklEIGJmLCB1aW50OF90IGJmYSk7Ci0rCi0rICAvLyBWU1ggKEZQUi1vbmx5IHN1YnNldCku Ci0rICBCdWZmZXJPZmZzZXQgYXNfbWZ2c3JkKFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHhz KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tdHZzcmQoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIg cmEpOwotKyAgLy8gUE9XRVI4KyAoSVNBIDIuMDcpLiBTaWduLWV4dGVuZGluZyBtb3ZlIG9mIFJB J3MgbG93IDMyIGJpdHMgdG8gRlBSLgotKyAgQnVmZmVyT2Zmc2V0IGFzX210dnNyd2EoRmxvYXRS ZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX210dnNyd3ooRmxv YXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX210dnNyd3Mo RmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4YnJk KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAgLy8gUE9XRVI5IHNjYWxh ciBWU1ggbWF4L21pbiB3aXRoIEphdmEvSmF2YVNjcmlwdCBzZW1hbnRpY3MgKG1hdGNoZXMKLSsg IC8vIEVDTUEtMjYyIE1hdGgubWF4IC8gTWF0aC5taW4pLiBPcGVyYXRlIG9uIEZQUi1zcGFjZSAo ZW5jb2RpbmcgMC4uMzEpLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3hzbWF4amRwKEZsb2F0UmVnaXN0 ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHNtaW5qZHAoRmxvYXRSZWdpc3Rl ciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHhiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194c2N2ZHBzcG4oRmxvYXRSZWdpc3Rl ciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHNjdnNwZHBuKEZs b2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAgLy8gUE9XRVI5IChJU0EgMy4w KSBzY2FsYXIgRlAxNiBjb252ZXJzaW9ucy4KLSsgIEJ1ZmZlck9mZnNldCBhc194c2N2ZHBocChG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194 c2N2aHBkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIC8vIFBPV0VS OSAoSVNBIDMuMCkgc2NhbGFyIGV4dHJhY3QgYmlhc2VkIGV4cG9uZW50LgotKyAgQnVmZmVyT2Zm c2V0IGFzX3hzeGV4cGRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAg Ly8gUE9XRVI5IChJU0EgMy4wKSBzY2FsYXIgRlAxNiBsb2FkL3N0b3JlLCBYLWZvcm0gaW5kZXhl ZC4KLSsgIEJ1ZmZlck9mZnNldCBhc19seHNpaHp4KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3R4c2loeChGbG9hdFJlZ2lz dGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKwotKyAgLy8gVlNYIFNJTUQgbG9h ZC9zdG9yZSAoWC1mb3JtLCBpbmRleGVkKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19seHZ4KEZsb2F0 UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQg YXNfc3R4dngoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19seHZkMngoRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdHh2ZDJ4KEZsb2F0UmVnaXN0ZXIgeHMs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rCi0rICAvLyBWTVggU0lNRCBsb2FkL3N0b3Jl IChYLWZvcm0sIGluZGV4ZWQpLiBUYWtlIGEgcmF3IFZSIG51bWJlciAoMC0zMSkKLSsgIC8vIGJl Y2F1c2UgVlIyMC1WUjMxIGFyZSBvdXRzaWRlIHRoZSBGbG9hdFJlZ2lzdGVyIGVuY29kaW5nICh3 aGljaCBvbmx5Ci0rICAvLyBjb3ZlcnMgVlNSMC0zMSA9IGYwLWYzMSkuIFVzZWQgYnkgdGhlIEpJ VCB0cmFtcG9saW5lIHRvIHNhdmUvcmVzdG9yZQotKyAgLy8gdGhlIEVMRnYyIGNhbGxlZS1zYXZl ZCBWUjIwLVZSMzEuIEVBIGlzIGZvcmNlLWFsaWduZWQgdG8gMTYgYnl0ZXMKLSsgIC8vIChsb3cg NCBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSBpZ25vcmVkKSwgc28gdGhlIHNsb3QncyBhbGlnbm1l bnQKLSsgIC8vIG1hdHRlcnMgZm9yIGxheW91dCBidXQgbm90IGZvciB0cmFwIGF2b2lkYW5jZS4K LSsgIEJ1ZmZlck9mZnNldCBhc19sdngodWludDhfdCB2cnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3R2eCh1aW50OF90IHZycywgUmVnaXN0ZXIgcmEs IFJlZ2lzdGVyIHJiKTsKLSsKLSsgIC8vIFZTWCBTSU1EIHJlZ2lzdGVyIG9wZXJhdGlvbnMgKFhY My1mb3JtIC8gWFgxLWZvcm0gLyBYWDItZm9ybSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfeHhsb3Io RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7Ci0r Ci0rICAvLyBWU1ggYml0d2lzZSBvcGVyYXRpb25zIChYWDMtZm9ybSkuCi0rICBCdWZmZXJPZmZz ZXQgYXNfeHhsYW5kKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsIEZsb2F0UmVn aXN0ZXIgeGIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4bHhvcihGbG9hdFJlZ2lzdGVyIHh0LCBG bG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194 eGxub3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4 Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHhsYW5kYyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJl Z2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eHNlbChG bG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiLAotKyAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGMpOwotKwotKyAgLy8gVk1YIGlu dGVnZXIgYXJpdGhtZXRpYyAoVlIwLTMxID0gVlNSMzItNjMgb25seSkuCi0rICAvLyBDYWxsZXJz IG11c3QgZW5zdXJlIG9wZXJhbmRzIGFyZSBpbiBWUiBzcGFjZS4KLSsgIEJ1ZmZlck9mZnNldCBh c192YWRkdWJtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZhZGR1aG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmFkZHV3bSh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192YWRkdWRtKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1Ym0odWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf dnN1YnVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZl ck9mZnNldCBhc192c3VidXdtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1ZG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmFkZHNicyh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192YWRkc2hzKHVpbnQ4 X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Zh ZGR1YnModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfdmFkZHVocyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsK LSsgIEJ1ZmZlck9mZnNldCBhc192c3Vic2JzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWlu dDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJzaHModWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnN1YnVicyh1aW50OF90 IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3Vi dWhzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3ZtaW5zYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc192bWluc2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1pbnN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXhzYih1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bWF4c2godWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf dm1heHN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3ZtYXhzZCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsK LSsgIEJ1ZmZlck9mZnNldCBhc192bWludWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1pbnVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW51dyh1aW50OF90IHZy dCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bWF4dWIo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQg YXNfdm1heHVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZtYXh1dyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi KTsKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCk6IHBlci1sYW5lIGludGVnZXIgbmVnYXRlLgotKyAg QnVmZmVyT2Zmc2V0IGFzX3ZuZWd3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfdm5lZ2QodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKLSsgIC8vIFBPV0VS OSAoSVNBIDMuMCk6IGFkZHBjaXMgclQsIEQuICBDb21wdXRlcyByVCA9IChDSUEgKyA0KSArIChE IDw8IDE2KS4KLSsgIC8vIEQgaXMgYSAxNi1iaXQgc2lnbmVkIGltbWVkaWF0ZTsgRFgtZm9ybSBz cGxpdHMgRCBhY3Jvc3MgdGhyZWUgaW5zdHJ1Y3Rpb24KLSsgIC8vIGZpZWxkcyAoZDBbMTYuLjI1 XSDiiKUgZDFbMTEuLjE1XSDiiKUgZDJbMzFdKS4gIE5vIExSIGNsb2JiZXIsIG5vIFJBUyBoYXph cmQuCi0rICBCdWZmZXJPZmZzZXQgYXNfYWRkcGNpcyhSZWdpc3RlciBydCwgaW50MTZfdCBkKTsK LSsgIC8vIFBPV0VSMTAgKElTQSAzLjEpIHByZWZpeGVkIGluc3RydWN0aW9ucy4gRWFjaCBlbWl0 cyA4IGJ5dGVzIChwcmVmaXggKwotKyAgLy8gc3VmZml4KSB3aXRoIGEgc2luZ2xlIG5vcCBpbnNl cnRlZCBiZWZvcmUgaWZmIHRoZSBwcmVmaXggd291bGQKLSsgIC8vIHN0cmFkZGxlIGEgNjQtYnl0 ZSBibG9jay4gQ2FsbGVyIG11c3QgZ3VhcmFudGVlIEhhc1BPV0VSMTAoKS4KLSsgIC8vIGltbTM0 IGlzIHNpZ25lZCAzNC1iaXQ7IFI9dHJ1ZSBzZWxlY3RzIFBDLXJlbGF0aXZlIGZvcm0gKFJBIG11 c3QgYmUgcjApLgotKyAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBwcmVmaXggd29yZC4K LSsgIEJ1ZmZlck9mZnNldCBhc19wYWRkaShSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIGludDY0 X3QgaW1tMzQsIGJvb2wgUik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcGxkKFJlZ2lzdGVyIHJ0LCBS ZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBSKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19w bHh2KHVpbnQ4X3QgeHQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LCBib29sIFIpOwotKyAg Ly8gRlAtdGFyZ2V0IHByZWZpeGVkIGxvYWRzOiBwbGZkL3BsZnMgYXJlIE1MUyAoVHlwZT0yKSB3 aXRoIHN1ZmZpeAotKyAgLy8gb3Bjb2RlcyA1MCBhbmQgNDguIHBsZnMgd2lkZW5zIHNpbmdsZSDi hpIgZG91YmxlIGluIHRoZSBGUFIKLSsgIC8vIChtYXRjaGVzIG5vbi1wcmVmaXhlZCBsZnMgc2Vt YW50aWNzKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19wbGZkKEZsb2F0UmVnaXN0ZXIgZnJ0LCBSZWdp c3RlciByYSwgaW50NjRfdCBpbW0zNCwKLSsgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgUik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfcGxmcyhGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEs IGludDY0X3QgaW1tMzQsCi0rICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpOwotKyAgLy8g UHJlZml4ZWQtc3RvcmUgY291bnRlcnBhcnRzLiBTYW1lIHByZWZpeCBzaGFwZTsgc3VmZml4IG9w Y29kZXMgYXJlCi0rICAvLyB0aGUgRC1mb3JtIHZhcmlhbnRzIG9mIHN0ZC9zdHh2L3N0ZmQvc3Rm cyAoNjEsIDI3LCA1NCwgNTIpLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3BzdGQoUmVnaXN0ZXIgcnMs IFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LCBib29sIFIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3BzdHh2KHVpbnQ4X3QgeHMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LCBib29sIFIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3BzdGZkKEZsb2F0UmVnaXN0ZXIgZnJzLCBSZWdpc3RlciByYSwg aW50NjRfdCBpbW0zNCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3BzdGZzKEZsb2F0UmVnaXN0ZXIgZnJzLCBSZWdpc3RlciByYSwgaW50NjRf dCBpbW0zNCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpOwotKwotKyBwcml2YXRl OgotKyAgLy8gRW1pdCBhIG5vcCBiZWZvcmUgYSBwcmVmaXhlZCBpbnN0cnVjdGlvbiBpZmYgdGhl IHByZWZpeCB3b3VsZCBvdGhlcndpc2UKLSsgIC8vIHN0YXJ0IGF0IG9mZnNldCA2MCAobW9kIDY0 KSBhbmQgdGhlIHN1ZmZpeCB3b3VsZCBsYW5kIGluIHRoZSBuZXh0IGJsb2NrLgotKyAgdm9pZCBl bnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOwotKwotKyBwdWJsaWM6Ci0rICBCdWZmZXJPZmZzZXQg YXNfdmF2Z3ViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3Zhdmd1aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsdXdtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxsZCh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIC8vIFZNWCBzaGlmdCAoVlIwLTMxIG9ubHkpLgot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZzbGIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNsaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c2x3KHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzbGQodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNyYih1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c192c3JoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3ZzcncodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfdnNyZCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3Qg dnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3JhYih1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3JhaCh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3Jhdyh1aW50OF90 IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3Jh ZCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192c2xvKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3Zzcm8odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 Ci0rCi0rICAvLyBWTVggaW50ZWdlciBjb21wYXJlIChWUjAtMzEgb25seSkuCi0rICBCdWZmZXJP ZmZzZXQgYXNfdmNtcGVxdWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdXcodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWQodWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICAvLyBSZWNvcmQgZm9ybXMg c2V0IENSNjogTFQgPSBhbGwtdHJ1ZSwgRVEgPSBub25lLXRydWUuCi0rICBCdWZmZXJPZmZzZXQg YXNfdmNtcGVxdWJfcmModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWhfcmModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdXdfcmModWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGVxdWRf cmModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfdmNtcGd0c2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0c2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0c3codWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0c2QodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNt cGd0dWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfdmNtcGd0dWgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0dXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmNtcGd0dWQodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICAvLyBQT1dFUjkgKElTQSAzLjApLiBOb3RFcXVh bCBjb21wYXJlOyBubyBkb3VibGV3b3JkIHZhcmlhbnQuCi0rICBCdWZmZXJPZmZzZXQgYXNfdmNt cG5lYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc192Y21wbmVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBuZXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7Ci0rCi0rICAvLyBWU1ggZmxvYXQgY29tcGFyZSAoWFgzLWZvcm0sIFZTUjAtNjMp LgotKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZXFzcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJl Z2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc194dmNtcGd0c3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRS ZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4 Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBnZXNwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0 UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg eGIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZXFkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9h dFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHhiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194dmNtcGd0ZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxv YXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBnZWRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZs b2F0UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgeGIpOwotKwotKyAgLy8gVlNYIGZsb2F0IGFyaXRobWV0aWMgKFhYMy1mb3JtIGJpbmFyeSwg WFgyLWZvcm0gdW5hcnkpLgotKyNkZWZpbmUgREVDTF9WU1hfQklOKG9wKSBcCi0rICBCdWZmZXJP ZmZzZXQgYXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJl Z2lzdGVyIHhiKTsKLSsgIERFQ0xfVlNYX0JJTih4dmFkZHNwKQotKyAgREVDTF9WU1hfQklOKHh2 YWRkZHApIERFQ0xfVlNYX0JJTih4dnN1YnNwKSBERUNMX1ZTWF9CSU4oCi0rICAgICAgeHZzdWJk cCkgREVDTF9WU1hfQklOKHh2bXVsc3ApIERFQ0xfVlNYX0JJTih4dm11bGRwKSBERUNMX1ZTWF9C SU4oeHZkaXZzcCkKLSsgICAgICBERUNMX1ZTWF9CSU4oeHZkaXZkcCkgREVDTF9WU1hfQklOKHh2 bWluc3ApIERFQ0xfVlNYX0JJTigKLSsgICAgICAgICAgeHZtaW5kcCkgREVDTF9WU1hfQklOKHh2 bWF4c3ApIERFQ0xfVlNYX0JJTih4dm1heGRwKQotKyAgICAgICAgICBERUNMX1ZTWF9CSU4oeHZt YWRkYXNwKSBERUNMX1ZTWF9CSU4oeHZtYWRkYWRwKSBERUNMX1ZTWF9CSU4oCi0rICAgICAgICAg ICAgICB4dm5tc3ViYXNwKSBERUNMX1ZTWF9CSU4oeHZubXN1YmFkcCkKLSsjdW5kZWYgREVDTF9W U1hfQklOCi0rI2RlZmluZSBERUNMX1ZTWF9VTihvcCkgXAotKyAgQnVmZmVyT2Zmc2V0IGFzXyMj b3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICAgICAgICAgICAgICBE RUNMX1ZTWF9VTih4dmFic3NwKSBERUNMX1ZTWF9VTih4dmFic2RwKSBERUNMX1ZTWF9VTih4dm5l Z3NwKQotKyAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2bmVnZHApIERFQ0xfVlNYX1VO KHh2c3FydHNwKSBERUNMX1ZTWF9VTigKLSsgICAgICAgICAgICAgICAgICAgICAgeHZzcXJ0ZHAp IERFQ0xfVlNYX1VOKHh2cnNwaXApIERFQ0xfVlNYX1VOKHh2cmRwaXApCi0rICAgICAgICAgICAg ICAgICAgICAgIERFQ0xfVlNYX1VOKHh2cnNwaW0pIERFQ0xfVlNYX1VOKHh2cmRwaW0pIERFQ0xf VlNYX1VOKAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgeHZyc3BpeikgREVDTF9WU1hfVU4o eHZyZHBpeikgREVDTF9WU1hfVU4oeHZyc3BpYykKLSsgICAgICAgICAgICAgICAgICAgICAgICAg IERFQ0xfVlNYX1VOKHh2cmRwaWMpIERFQ0xfVlNYX1VOKHh2Y3ZzeHdzcCkKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dmN2dXh3c3ApIERFQ0xfVlNYX1VOKHh2 Y3ZzeHdkcCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4o eHZjdnV4d2RwKSBERUNMX1ZTWF9VTih4dmN2c3BzeHdzKQotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdnNwdXh3cykKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dmN2ZHBzeHdzKQotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4 dmN2ZHB1eHdzKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgREVDTF9WU1hfVU4oeHZjdmRwc3ApCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdnNwZHApCi0rI3VuZGVm IERFQ0xfVlNYX1VOCi0rCi0rICAgICAgLy8gVk1YIHdpZGVuL25hcnJvdy9tZXJnZS9wYWNrIChW UjAtMzEgb25seSkuCi0rICAgICAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtoc2IodWludDhfdCB2cnQs IHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192dXBrbHNiKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnVwa2hzaCh1aW50OF90IHZydCwgdWlu dDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtsc2godWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192dXBraHN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnVwa2xzdyh1aW50OF90IHZydCwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Zwa3Noc3ModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnBrc3dzcyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192cGtzaHVzKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3Zwa3N3dXModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfdm1yZ2hiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtcmdoaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVp bnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXJnaHcodWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1yZ2xiKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Ztcmds aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192bXJnbHcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rCi0r ICAvLyBWTVggZXh0ZW5kZWQgbXVsdGlwbHkgKFZSMC0zMSBvbmx5KS4KLSsgIEJ1ZmZlck9mZnNl dCBhc192bXVsZXNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3ZtdWxvc2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm11bGV1Yih1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsb3ViKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxlc2go dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQg YXNfdm11bG9zaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc192bXVsZXVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxvdWgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm11bGVzdyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsb3N3KHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3ZtdWxldXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfdm11bG91dyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc192cG9wY250Yih1aW50OF90IHZydCwgdWludDhfdCB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZwZXJtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWlu dDhfdCB2cmIsIHVpbnQ4X3QgdnJjKTsKLSsgIC8vIFBPV0VSOCsgKElTQSAyLjA3KS4gVlgtZm9y bSBiaXQtcGVybXV0ZS4gU2VlIFBQQ192YnBlcm1xIGNvbW1lbnQuCi0rICBCdWZmZXJPZmZzZXQg YXNfdmJwZXJtcSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIC8v IFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBFeHRyYWN0IE1hc2suIFJUIGlzIGEgR1BSLgotKyAg QnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0Ym0oUmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0ZXIgdnJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc192ZXh0cmFjdGhtKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lz dGVyIHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmV4dHJhY3R3bShSZWdpc3RlciBydCwgRmxv YXRSZWdpc3RlciB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0ZG0oUmVnaXN0ZXIg cnQsIEZsb2F0UmVnaXN0ZXIgdnJiKTsKLSsgIC8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBJ bnNlcnQgZnJvbSBHUFIgYXQgaW1tZWRpYXRlIGJ5dGUgb2Zmc2V0LgotKyAgLy8gVUlNIHJhbmdl OiB2aW5zdyAwLi4xMiwgdmluc2QgMC4uOCAoY2FsbGVyIG11c3QgZW5mb3JjZSkuCi0rICBCdWZm ZXJPZmZzZXQgYXNfdmluc3coRmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lzdGVyIHJiLCB1aW50OF90 IHVpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmluc2QoRmxvYXRSZWdpc3RlciB2cnQsIFJlZ2lz dGVyIHJiLCB1aW50OF90IHVpbSk7Ci0rICAvLyBQT1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgSW5z ZXJ0IGJ5dGUgLyBoYWxmd29yZCBmcm9tIEdQUiB3aXRoIHRoZQotKyAgLy8gYnl0ZSBwb3NpdGlv biBzdXBwbGllZCBieSBhbm90aGVyIEdQUiAoUkEgJiAweEYgZm9yIHZpbnNicngsCi0rICAvLyBS QSAmIDB4RSBmb3Igdmluc2hyeCkuICJyeCIgPSByaWdodC1pbmRleGVkID0gTEUtbmF0dXJhbC4K LSsgIEJ1ZmZlck9mZnNldCBhc192aW5zYnJ4KEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciBy YSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZpbnNocngoRmxvYXRSZWdpc3Rl ciB2cnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICAvLyBQT1dFUjkgKElTQSAzLjAp IFZlY3RvciBJbnNlcnQgYnl0ZSAvIGhhbGZ3b3JkIGZyb20gVlIgYXQgaW1tZWRpYXRlCi0rICAv LyBieXRlIHBvc2l0aW9uLiBVSU0gcmFuZ2U6IHZpbnNlcnRiIDAuLjE1LCB2aW5zZXJ0aCAwLi4x NAotKyAgLy8gKGNhbGxlciBtdXN0IGVuZm9yY2U7IHZpbnNlcnRoIFVJTSBpcyBpbiBieXRlcywg ZXZlbi1hbGlnbmVkKS4KLSsgIEJ1ZmZlck9mZnNldCBhc192aW5zZXJ0YihGbG9hdFJlZ2lzdGVy IHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKLSsgIEJ1ZmZlck9mZnNldCBh c192aW5zZXJ0aChGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qg dWltKTsKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCkgVmVjdG9yIEV4dHJhY3QgYnl0ZSAvIGhhbGZ3 b3JkIGZyb20gVlIgYXQgaW1tZWRpYXRlCi0rICAvLyBCRSBieXRlIHBvc2l0aW9uLiBVSU0gcmFu Z2U6IHZleHRyYWN0dWIgMC4uMTUsIHZleHRyYWN0dWggMC4uMTQKLSsgIC8vIChjYWxsZXIgbXVz dCBlbmZvcmNlOyB2ZXh0cmFjdHVoIFVJTSBpcyBpbiBieXRlcywgZXZlbi1hbGlnbmVkKS4gVGhl Ci0rICAvLyBleHRyYWN0ZWQgYnl0ZS9oYWxmd29yZCBsYW5kcyBhdCBCRSBieXRlIDcgb2YgVlJU LCB3aXRoIHRoZSByZXN0Ci0rICAvLyB6ZXJvZWQg4oCUIHNvIGEgc3Vic2VxdWVudCBtZnZzcmQg cmVhZHMgaXQgYXMgdGhlIGxvdyBieXRlL2hhbGZ3b3JkCi0rICAvLyBvZiB0aGUgR1BSIHdpdGgg aW1wbGljaXQgemVyby1leHRlbnNpb24uCi0rICBCdWZmZXJPZmZzZXQgYXNfdmV4dHJhY3R1YihG bG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc192ZXh0cmFjdHVoKEZsb2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVy IHZyYiwgdWludDhfdCB1aW0pOwotKyAgLy8gVlgtZm9ybSB3aXRoIDUtYml0IHNpZ25lZCBpbW1l ZGlhdGUgc3BsYXQ6IGVhY2ggbGFuZSBvZiBWUlQgaXMKLSsgIC8vIHNldCB0byBzaWduX2V4dGVu ZChTSU1NNSkgKHJhbmdlIFstMTYsIDE1XSkgYXQgYnl0ZS9oYWxmd29yZC93b3JkIGdyYW51bGFy aXR5LgotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXNiKHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2lt bTUpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXNoKHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2lt bTUpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aXN3KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2lt bTUpOwotKwotKyAgLy8gVkEtZm9ybSB0ZXJuYXJ5IFZNWCBpbnN0cnVjdGlvbnMuCi0rICBCdWZm ZXJPZmZzZXQgYXNfdm1sYWRkdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIsIHVpbnQ4X3QgdnJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bWhyYWRkc2hzKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90IHZyYyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1zdW1zaG0odWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwgdWludDhfdCB2cmMpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3Ztc3VtdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsIHVp bnQ4X3QgdnJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eHBlcm1kaShGbG9hdFJlZ2lzdGVyIHh0 LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgZG0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4c3BsdHcoRmxvYXRS ZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwgdWludDhfdCB1aW0pOwotKyAgLy8gUE9XRVI5 IChJU0EgMy4wKS4gU3BsYXQgOC1iaXQgaW1tZWRpYXRlIHRvIGFsbCAxNiBieXRlcyBvZiBhbiBG UFItZW5jb2RlZAotKyAgLy8gVlNSIChUWCBiaXQgZm9yY2VkIDApLiBYWDEtZm9ybSwgbm8gUmMu Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHhzcGx0aWIoRmxvYXRSZWdpc3RlciB4dCwgdWludDhfdCBp bW04KTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eGluc2VydHcoRmxvYXRSZWdpc3RlciB4dCwgRmxv YXRSZWdpc3RlciB4YiwgdWludDhfdCB1aW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4ZXh0cmFj dHV3KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgdWltKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19tdHZzcmRkKEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBS ZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbWZ2c3JsZChSZWdpc3RlciBydCwgRmxv YXRSZWdpc3RlciB4cyk7Ci0rCi0rICAvLyBWTVggdmVjdG9yIG9wZXJhdGlvbnMuCi0rICBCdWZm ZXJPZmZzZXQgYXNfdnNwbHRiKEZsb2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYiwg dWludDhfdCB1aW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0aChGbG9hdFJlZ2lzdGVyIHZy dCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192 c2xkb2koRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJhLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHZyYiwgdWludDhfdCBzaGIpOwotKwotKyAgLy8g QmFycmllciBhbmQgc3luYyBpbnN0cnVjdGlvbnMuCi0rICBCdWZmZXJPZmZzZXQgYXNfbHdzeW5j KCk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3luYygpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2lzeW5j KCk7Ci0rCi0rICAvLyBDb252ZW5pZW5jZSBwc2V1ZG8taW5zdHJ1Y3Rpb25zLgotKyAgQnVmZmVy T2Zmc2V0IHhzX3RyYXAoKTsKLSsgIEJ1ZmZlck9mZnNldCB4c190cmFwX3RhZ2dlZChUcmFwVGFn IHRhZyk7Ci0rICBCdWZmZXJPZmZzZXQgeHNfbXIoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsK LSsgIEJ1ZmZlck9mZnNldCB4c19tdGN0cihSZWdpc3RlciByYSk7Ci0rICBCdWZmZXJPZmZzZXQg eHNfbXRscihSZWdpc3RlciByYSk7Ci0rICBCdWZmZXJPZmZzZXQgeHNfbWZscihSZWdpc3RlciBy ZCk7Ci0rICBCdWZmZXJPZmZzZXQgeHNfbXRjcihSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZz ZXQgeHNfbWZ4ZXIoUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IHhzX210eGVyKFJlZ2lz dGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCB4c19saShSZWdpc3RlciByZCwgaW50MTZfdCBpbSk7 Ci0rICBCdWZmZXJPZmZzZXQgeHNfbGlzKFJlZ2lzdGVyIHJkLCBpbnQxNl90IGltKTsKLSsgIEJ1 ZmZlck9mZnNldCB4X3N1YmkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsK LSsgIEJ1ZmZlck9mZnNldCB4X25vdChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpOwotKyAgQnVm ZmVyT2Zmc2V0IHhfc2x3aShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBuKTsKLSsgIEJ1 ZmZlck9mZnNldCB4X3NsZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbik7Ci0rICBC dWZmZXJPZmZzZXQgeF9zcndpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50IG4pOwotKyAg QnVmZmVyT2Zmc2V0IHhfc3JkaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBuKTsKLSsg IEJ1ZmZlck9mZnNldCB4X2luc2VydGJpdHMwXzE1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycyk7 Ci0rICBCdWZmZXJPZmZzZXQgeF9iaXRfdmFsdWUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1 bnNpZ25lZCBiaXQpOwotKyAgQnVmZmVyT2Zmc2V0IHhfc3JfbXVsbGkoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsKLSsgIC8vIC0tLSBMYWJlbCBvcGVyYXRpb25zLgot KyAgdm9pZCBiaW5kKExhYmVsKiBsYWJlbCkgeyBiaW5kKGxhYmVsLCBuZXh0T2Zmc2V0KCkpOyB9 Ci0rICB2b2lkIGJpbmQoTGFiZWwqIGxhYmVsLCBCdWZmZXJPZmZzZXQgYm9mZik7Ci0rICB2b2lk IGJpbmQoSW5zdEltbSogaW5zdCwgdWludHB0cl90IGJyYW5jaCwgdWludHB0cl90IHRhcmdldCk7 Ci0rICB2b2lkIGJpbmQoQ29kZUxhYmVsKiBsYWJlbCkgeyBsYWJlbC0+dGFyZ2V0KCktPmJpbmQo Y3VycmVudE9mZnNldCgpKTsgfQotKyAgdWludDMyX3QgY3VycmVudE9mZnNldCgpIHsgcmV0dXJu IG5leHRPZmZzZXQoKS5nZXRPZmZzZXQoKTsgfQotKyAgdm9pZCByZXRhcmdldChMYWJlbCogbGFi ZWwsIExhYmVsKiB0YXJnZXQpOwotKyAgdm9pZCBjYWxsKExhYmVsKiBsYWJlbCk7Ci0rICB2b2lk IGNhbGwodm9pZCogdGFyZ2V0KTsKLSsKLSsgIHZvaWQgYXNfYnJlYWsodWludDMyX3QgY29kZSk7 Ci0rCi0rICAvLyAtLS0gU3RhdGljIGNhcGFiaWxpdHkgcXVlcmllcy4KLSsgIHN0YXRpYyBib29s IFN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIHsgcmV0dXJuIHRydWU7IH0KLSsgIHN0YXRpYyBib29s IFN1cHBvcnRzV2FzbVNpbWQoKSB7IHJldHVybiB0cnVlOyB9Ci0rICBzdGF0aWMgYm9vbCBTdXBw b3J0c1VuYWxpZ25lZEFjY2Vzc2VzKCkgeyByZXR1cm4gdHJ1ZTsgfQotKyAgc3RhdGljIGJvb2wg U3VwcG9ydHNGYXN0VW5hbGlnbmVkRlBBY2Nlc3NlcygpIHsgcmV0dXJuIHRydWU7IH0KLSsgIC8v IFBPV0VSOSBoYXMgc2NhbGFyIEZQMTYgaGFyZHdhcmUgKHhzY3ZkcGhwL3hzY3ZocGRwKTsgUE9X RVI4IGRvZXNuJ3QuCi0rICAvLyBSdW50aW1lLWdhdGUgbGlrZSB4ODYncyBTdXBwb3J0c0Zsb2F0 MzJUbzE2ICh3aGljaCBrZXlzIG9mZiBGMTZDKS4KLSsgIHN0YXRpYyBib29sIFN1cHBvcnRzRmxv YXQ2NFRvMTYoKSB7IHJldHVybiBIYXNQT1dFUjkoKTsgfQotKyAgc3RhdGljIGJvb2wgU3VwcG9y dHNGbG9hdDMyVG8xNigpIHsgcmV0dXJuIEhhc1BPV0VSOSgpOyB9Ci0rICBzdGF0aWMgYm9vbCBI YXNSb3VuZEluc3RydWN0aW9uKFJvdW5kaW5nTW9kZSBtb2RlKSB7Ci0rICAgIC8vIFBQQzY0IGhh cyBmcml6ICh0cnVuYyksIGZyaXAgKGNlaWwpLCBmcmltIChmbG9vciksIHdoaWNoIGFyZSBhbGwg Y29ycmVjdC4KLSsgICAgLy8gZnJpbiAocm91bmQtdG8tbmVhcmVzdCkgZG9lcyBOT1QgaW1wbGVt ZW50IHByb3BlciBJRUVFIGJhbmtlcidzIHJvdW5kaW5nCi0rICAgIC8vICh0aWVzIHRvIGV2ZW4p LCBzbyBOZWFyZXN0VGllc1RvRXZlbiBpcyBub3Qgc3VwcG9ydGVkLgotKyAgICByZXR1cm4gbW9k ZSA9PSBSb3VuZGluZ01vZGU6OlRvd2FyZHNaZXJvIHx8IG1vZGUgPT0gUm91bmRpbmdNb2RlOjpV cCB8fAotKyAgICAgICAgICAgbW9kZSA9PSBSb3VuZGluZ01vZGU6OkRvd247Ci0rICB9Ci0rCi0r IHByb3RlY3RlZDoKLSsgIEluc3RJbW0gaW52ZXJ0QnJhbmNoKEluc3RJbW0gYnJhbmNoLCBCT2Zm SW1tMTYgc2tpcE9mZnNldCk7Ci0rICB2b2lkIGFkZFBlbmRpbmdKdW1wKEJ1ZmZlck9mZnNldCBz cmMsIEltbVB0ciB0YXJnZXQsIFJlbG9jYXRpb25LaW5kIGtpbmQpIHsKLSsgICAgZW5vdWdoTWVt b3J5XyAmPSBqdW1wc18uYXBwZW5kKFJlbGF0aXZlUGF0Y2goc3JjLCB0YXJnZXQudmFsdWUsIGtp bmQpKTsKLSsgICAgaWYgKGtpbmQgPT0gUmVsb2NhdGlvbktpbmQ6OkpJVENPREUpIHsKLSsgICAg ICB3cml0ZVJlbG9jYXRpb24oc3JjKTsKLSsgICAgfQotKyAgfQotKyAgdm9pZCBhZGRMb25nSnVt cChCdWZmZXJPZmZzZXQgc3JjLCBCdWZmZXJPZmZzZXQgZHN0KSB7Ci0rICAgIENvZGVMYWJlbCBj bDsKLSsgICAgY2wucGF0Y2hBdCgpLT5iaW5kKHNyYy5nZXRPZmZzZXQoKSk7Ci0rICAgIGNsLnRh cmdldCgpLT5iaW5kKGRzdC5nZXRPZmZzZXQoKSk7Ci0rICAgIGNsLnNldExpbmtNb2RlKENvZGVM YWJlbDo6SnVtcEltbWVkaWF0ZSk7Ci0rICAgIGFkZENvZGVMYWJlbChzdGQ6Om1vdmUoY2wpKTsK LSsgIH0KLSsKLSsgcHVibGljOgotKyAgdm9pZCBmbHVzaEJ1ZmZlcigpIHsgbV9idWZmZXIuZmx1 c2hQb29sKCk7IH0KLSsgIHZvaWQgY29tbWVudChjb25zdCBjaGFyKiBtc2cpIHsgc3BldygiOyAl cyIsIG1zZyk7IH0KLSsgIHN0YXRpYyB1aW50MzJfdCBOb3BTaXplKCkgeyByZXR1cm4gNDsgfQot KwotKyAgLy8gLS0tIFN0YXRpYyBwYXRjaGluZyBBUEkuCi0rICBzdGF0aWMgdWludDY0X3QgRXh0 cmFjdExvYWQ2NFZhbHVlKEluc3RydWN0aW9uKiBpbnN0MCk7Ci0rICBzdGF0aWMgdm9pZCBVcGRh dGVMb2FkNjRWYWx1ZShJbnN0cnVjdGlvbiogaW5zdDAsIHVpbnQ2NF90IHZhbHVlKTsKLSsgIHN0 YXRpYyB2b2lkIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKEluc3RydWN0aW9uKiBpbnN0MCwgUmVn aXN0ZXIgcmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0 X3QgdmFsdWUpOwotKwotKyAgc3RhdGljIHZvaWQgUGF0Y2hXcml0ZV9JbW0zMihDb2RlTG9jYXRp b25MYWJlbCBsYWJlbCwgSW1tMzIgaW1tKTsKLSsgIHN0YXRpYyB1aW50OF90KiBOZXh0SW5zdHJ1 Y3Rpb24odWludDhfdCogaW5zdHJ1Y3Rpb24sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90KiBjb3VudCA9IG51bGxwdHIpOwotKyAgc3RhdGljIHZvaWQgVG9nZ2xl VG9KbXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pOwotKyAgc3RhdGljIHZvaWQgVG9nZ2xlVG9D bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8pOwotKwotKyAgdm9pZCB2ZXJpZnlIZWFwQWNjZXNz RGlzYXNzZW1ibHkodWludDMyX3QgYmVnaW4sIHVpbnQzMl90IGVuZCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERpc2Fzc2VtYmxlcjo6SGVhcEFjY2VzcyYgaGEp IHt9Ci0rCi0rICAvLyAtLS0gUHVibGljIHBhdGNoaW5nIEFQSSAocmVxdWlyZWQgYnkgc2hhcmVk IGNvZGUpLgotKyAgc3RhdGljIHZvaWQgQmluZCh1aW50OF90KiByYXdDb2RlLCBjb25zdCBDb2Rl TGFiZWwmIGxhYmVsKTsKLSsgIHZvaWQgcHJvY2Vzc0NvZGVMYWJlbHModWludDhfdCogcmF3Q29k ZSk7Ci0rCi0rICBzdGF0aWMgdm9pZCBUcmFjZUp1bXBSZWxvY2F0aW9ucyhKU1RyYWNlciogdHJj LCBKaXRDb2RlKiBjb2RlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29t cGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKTsKLSsgIHN0YXRpYyB2b2lkIFRyYWNlRGF0YVJlbG9j YXRpb25zKEpTVHJhY2VyKiB0cmMsIEppdENvZGUqIGNvZGUsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDb21wYWN0QnVmZmVyUmVhZGVyJiByZWFkZXIpOwotKwotKyAgdm9p ZCBleGVjdXRhYmxlQ29weSh1aW50OF90KiBidWZmZXIpOwotKwotKyAgc3RhdGljIHVpbnQzMl90 IFBhdGNoV3JpdGVfTmVhckNhbGxTaXplKCk7Ci0rICBzdGF0aWMgdm9pZCBQYXRjaFdyaXRlX05l YXJDYWxsKENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0b0NhbGwpOwotKyAgc3RhdGljIHZvaWQgUGF0 Y2hEYXRhV2l0aFZhbHVlQ2hlY2soQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwsIEltbVB0ciBuZXdW YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbVB0ciBleHBl Y3RlZFZhbHVlKTsKLSsgIHN0YXRpYyB2b2lkIFBhdGNoRGF0YVdpdGhWYWx1ZUNoZWNrKENvZGVM b2NhdGlvbkxhYmVsIGxhYmVsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUGF0Y2hlZEltbVB0ciBuZXdWYWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBhdGNoZWRJbW1QdHIgZXhwZWN0ZWRWYWx1ZSk7Ci0rICBzdGF0aWMgdm9pZCBU b2dnbGVDYWxsKENvZGVMb2NhdGlvbkxhYmVsIGluc3RfLCBib29sIGVuYWJsZWQpOwotKwotKyBw cml2YXRlOgotKyAgR2VuZXJhbFJlZ2lzdGVyU2V0IHNjcmF0Y2hfcmVnaXN0ZXJfbGlzdF87Ci0r Ci0rIHB1YmxpYzoKLSsgIEdlbmVyYWxSZWdpc3RlclNldCogR2V0U2NyYXRjaFJlZ2lzdGVyTGlz dCgpIHsKLSsgICAgcmV0dXJuICZzY3JhdGNoX3JlZ2lzdGVyX2xpc3RfOwotKyAgfQotK307ICAv LyBBc3NlbWJsZXIKLSsKLStpbmxpbmUgYm9vbCBJc1VuYWxpZ25lZChjb25zdCB3YXNtOjpNZW1v cnlBY2Nlc3NEZXNjJiBhY2Nlc3MpIHsKLSsgIGlmICghYWNjZXNzLmFsaWduKCkpIHsKLSsgICAg cmV0dXJuIGZhbHNlOwotKyAgfQotKyAgcmV0dXJuIGFjY2Vzcy5hbGlnbigpIDwgYWNjZXNzLmJ5 dGVTaXplKCk7Ci0rfQotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2Ug anMKLSsKLSsvLyBXaGV0aGVyIGFuIEltbTMyIGZpdHMgaW4gYW4gdW5zaWduZWQgMTYtYml0IGlt bWVkaWF0ZS4KLSsjZGVmaW5lIFBQQ19JTU1fT0tfVSh4KSAoTU9aX0xJS0VMWSgoKHgpLnZhbHVl ICYgMHhmZmZmMDAwMCkgPT0gMCkpCi0rCi0rLy8gV2hldGhlciBhbiBJbW0zMiBmaXRzIGluIGEg c2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuCi0rI2RlZmluZSBQUENfSU1NX09LX1MoeCkgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAoTU9aX0xJS0VMWSgoKHgpLnZhbHVlICYgMHhmZmZmODAw MCkgPT0gMCB8fCBcCi0rICAgICAgICAgICAgICAoKHgpLnZhbHVlICYgMHhmZmZmODAwMCkgPT0g MHhmZmZmODAwMCkpCi0rCi0rLy8gV2hldGhlciB0aGUgb2Zmc2V0IHBhcnQgb2YgYW4gQWRkcmVz cyBmaXRzIGluIGEgc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuCi0rI2RlZmluZSBQUENfT0ZGU19P Syh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKE1PWl9MSUtFTFkoKCh4KS5vZmZz ZXQgJiAweGZmZmY4MDAwKSA9PSAwIHx8IFwKLSsgICAgICAgICAgICAgICgoeCkub2Zmc2V0ICYg MHhmZmZmODAwMCkgPT0gMHhmZmZmODAwMCkpCi0rCi0rLy8gU2FtZSB0ZXN0IGJ1dCBjaGVja2lu ZyBhIGJpdCBhaGVhZCAoZm9yIHBhaXJlZCBsb2FkcykuCi0rI2RlZmluZSBQUENfT0ZGU19JTkNS X09LKHgsIGluY3IpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAoTU9aX0xJS0VMWSgo KCh4KS5vZmZzZXQgKyAoaW5jcikpICYgMHhmZmZmODAwMCkgPT0gMCB8fCBcCi0rICAgICAgICAg ICAgICAoKCh4KS5vZmZzZXQgKyAoaW5jcikpICYgMHhmZmZmODAwMCkgPT0gMHhmZmZmODAwMCkp Ci0rCi0rI2VuZGlmIC8qIGppdF9wcGM2NF9Bc3NlbWJsZXJfcHBjNjRfaCAqLwotZGlmZiAtLWdp dCBhL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0 L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi4wYTQzNmZiMTIwMWEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3Ny Yy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5jcHAKLUBAIC0wLDAgKzEsMzY0NyBAQAot Ky8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBj LWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9 ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9m IHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRo ZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9i dGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpbmNsdWRl ICJqaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5oIgotKwotKyNpbmNsdWRlICJtb3ppbGxh L01hdGhBbGdvcml0aG1zLmgiCi0rCi0rI2luY2x1ZGUgPGJpdD4KLSsKLSsjaW5jbHVkZSAiYnVp bHRpbi9OdW1iZXIuaCIKLSsjaW5jbHVkZSAiaml0L0NvZGVHZW5lcmF0b3IuaCIKLSsjaW5jbHVk ZSAiaml0L0lubGluZVNjcmlwdFRyZWUuaCIKLSsjaW5jbHVkZSAiaml0L0ppdFJ1bnRpbWUuaCIK LSsjaW5jbHVkZSAiaml0L01JUi13YXNtLmgiCi0rI2luY2x1ZGUgImppdC9NSVIuaCIKLSsjaW5j bHVkZSAiaml0L01JUkdyYXBoLmgiCi0rI2luY2x1ZGUgInZtL0pTQ29udGV4dC5oIgotKyNpbmNs dWRlICJ2bS9SZWFsbS5oIgotKyNpbmNsdWRlICJ2bS9TaGFwZS5oIgotKwotKyNpbmNsdWRlICJq aXQvc2hhcmVkL0NvZGVHZW5lcmF0b3Itc2hhcmVkLWlubC5oIgotKyNpbmNsdWRlICJ2bS9KU1Nj cmlwdC1pbmwuaCIKLSsKLSt1c2luZyBuYW1lc3BhY2UganM7Ci0rdXNpbmcgbmFtZXNwYWNlIGpz OjpqaXQ7Ci0rCi0rdXNpbmcgSlM6OkdlbmVyaWNOYU47Ci0rdXNpbmcgbW96aWxsYTo6TmVnYXRp dmVJbmZpbml0eTsKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQgewotKwotK0Nv ZGVHZW5lcmF0b3JQUEM2NDo6Q29kZUdlbmVyYXRvclBQQzY0KE1JUkdlbmVyYXRvciogZ2VuLCBM SVJHcmFwaCogZ3JhcGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TWFjcm9Bc3NlbWJsZXIqIG1hc20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgd2FzbTo6Q29kZU1ldGFkYXRhKiBjb2RlTWV0YSkKLSsgICAgOiBDb2RlR2Vu ZXJhdG9yU2hhcmVkKGdlbiwgZ3JhcGgsIG1hc20sIGNvZGVNZXRhKSB7fQotKwotK09wZXJhbmQg Q29kZUdlbmVyYXRvclBQQzY0OjpUb09wZXJhbmQoY29uc3QgTEFsbG9jYXRpb24mIGEpIHsKLSsg IGlmIChhLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgIHJldHVybiBPcGVyYW5kKGEudG9HZW5lcmFs UmVnKCktPnJlZygpKTsKLSsgIH0KLSsgIGlmIChhLmlzRmxvYXRSZWcoKSkgewotKyAgICByZXR1 cm4gT3BlcmFuZChhLnRvRmxvYXRSZWcoKS0+cmVnKCkpOwotKyAgfQotKyAgcmV0dXJuIE9wZXJh bmQoVG9BZGRyZXNzKGEpKTsKLSt9Ci0rCi0rT3BlcmFuZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OlRv T3BlcmFuZChjb25zdCBMQWxsb2NhdGlvbiogYSkgewotKyAgcmV0dXJuIFRvT3BlcmFuZCgqYSk7 Ci0rfQotKwotK01vdmVPcGVyYW5kIENvZGVHZW5lcmF0b3JQUEM2NDo6dG9Nb3ZlT3BlcmFuZChM QWxsb2NhdGlvbiBhKSBjb25zdCB7Ci0rICBpZiAoYS5pc0dlbmVyYWxSZWcoKSkgewotKyAgICBy ZXR1cm4gTW92ZU9wZXJhbmQoVG9SZWdpc3RlcihhKSk7Ci0rICB9Ci0rICBpZiAoYS5pc0Zsb2F0 UmVnKCkpIHsKLSsgICAgcmV0dXJuIE1vdmVPcGVyYW5kKFRvRmxvYXRSZWdpc3RlcihhKSk7Ci0r ICB9Ci0rICBNb3ZlT3BlcmFuZDo6S2luZCBraW5kID0gYS5pc1N0YWNrQXJlYSgpID8gTW92ZU9w ZXJhbmQ6OktpbmQ6OkVmZmVjdGl2ZUFkZHJlc3MKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBNb3ZlT3BlcmFuZDo6S2luZDo6TWVtb3J5OwotKyAgQWRkcmVz cyBhZGRyZXNzID0gVG9BZGRyZXNzKGEpOwotKyAgTU9aX0FTU0VSVCgoYWRkcmVzcy5vZmZzZXQg JiAzKSA9PSAwKTsKLSsgIHJldHVybiBNb3ZlT3BlcmFuZChhZGRyZXNzLCBraW5kKTsKLSt9Ci0r Ci0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmJhaWxvdXRGcm9tKExhYmVsKiBsYWJlbCwgTFNu YXBzaG90KiBzbmFwc2hvdCkgewotKyAgTU9aX0FTU0VSVF9JRighbWFzbS5vb20oKSwgbGFiZWwt PnVzZWQoKSk7Ci0rICBNT1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgpLCAhbGFiZWwtPmJvdW5kKCkp OwotKwotKyAgZW5jb2RlKHNuYXBzaG90KTsKLSsKLSsgIElubGluZVNjcmlwdFRyZWUqIHRyZWUg PSBzbmFwc2hvdC0+bWlyKCktPmJsb2NrKCktPnRyYWNrZWRUcmVlKCk7Ci0rICBhdXRvKiBvb2wg PSBuZXcgKGFsbG9jKCkpIExhbWJkYU91dE9mTGluZUNvZGUoWz0sIHRoaXNdKE91dE9mTGluZUNv ZGUmIG9vbCkgewotKyAgICAvLyBQdXNoIHNuYXBzaG90T2Zmc2V0IGFuZCBtYWtlIHN1cmUgc3Rh Y2sgaXMgYWxpZ25lZC4KLSsgICAgbWFzbS5zdWJQdHIoSW1tMzIoc2l6ZW9mKFZhbHVlKSksIFN0 YWNrUG9pbnRlcik7Ci0rICAgIG1hc20uc3RvcmVQdHIoSW1tV29yZChzbmFwc2hvdC0+c25hcHNo b3RPZmZzZXQoKSksCi0rICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDAp KTsKLSsgICAgbWFzbS5qdW1wKCZkZW9wdExhYmVsXyk7Ci0rICB9KTsKLSsgIGFkZE91dE9mTGlu ZUNvZGUob29sLAotKyAgICAgICAgICAgICAgICAgICBuZXcgKGFsbG9jKCkpIEJ5dGVjb2RlU2l0 ZSh0cmVlLCB0cmVlLT5zY3JpcHQoKS0+Y29kZSgpKSk7Ci0rCi0rICBtYXNtLnJldGFyZ2V0KGxh YmVsLCBvb2wtPmVudHJ5KCkpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6YmFp bG91dChMU25hcHNob3QqIHNuYXBzaG90KSB7Ci0rICBMYWJlbCBsYWJlbDsKLSsgIG1hc20uanVt cCgmbGFiZWwpOwotKyAgYmFpbG91dEZyb20oJmxhYmVsLCBzbmFwc2hvdCk7Ci0rfQotKwotK3Zv aWQgQ29kZUdlbmVyYXRvclBQQzY0OjpiYWlsb3V0SWZGYWxzZUJvb2woUmVnaXN0ZXIgbGhzLCBM U25hcHNob3QqIHNuYXBzaG90KSB7Ci0rICBMYWJlbCBiYWlsOwotKyAgbWFzbS5icmFuY2hUZXN0 MzIoQXNzZW1ibGVyOjpaZXJvLCBsaHMsIEltbTMyKDB4RkYpLCAmYmFpbCk7Ci0rICBiYWlsb3V0 RnJvbSgmYmFpbCwgc25hcHNob3QpOwotK30KLSsKLStib29sIENvZGVHZW5lcmF0b3JQUEM2NDo6 Z2VuZXJhdGVPdXRPZkxpbmVDb2RlKCkgewotKyAgaWYgKCFDb2RlR2VuZXJhdG9yU2hhcmVkOjpn ZW5lcmF0ZU91dE9mTGluZUNvZGUoKSkgewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rCi0r ICBpZiAoZGVvcHRMYWJlbF8udXNlZCgpKSB7Ci0rICAgIG1hc20uYmluZCgmZGVvcHRMYWJlbF8p OwotKwotKyAgICAvLyBGcmFtZSBzaXplIGlzIHN0b3JlZCBpbiBMUiBhbmQgcHVzaGVkIGJ5IEdl bmVyYXRlQmFpbG91dFRodW5rCi0rICAgIC8vICh2aWEgUHVzaEJhaWxvdXRGcmFtZSAtPiBwdXNo UmV0dXJuQWRkcmVzcyAtPiBtZmxyKS4KLSsgICAgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKG1hc20pOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICAgICAgbWFzbS5tb3ZlUHRyKEltbVdvcmQoZnJhbWVTaXplKCkpLCBzY3JhdGNo KTsKLSsgICAgICBtYXNtLnhzX210bHIoc2NyYXRjaCk7Ci0rICAgIH0KLSsKLSsgICAgVHJhbXBv bGluZVB0ciBoYW5kbGVyID0gZ2VuLT5qaXRSdW50aW1lKCktPmdldEdlbmVyaWNCYWlsb3V0SGFu ZGxlcigpOwotKyAgICBtYXNtLmp1bXAoaGFuZGxlcik7Ci0rICB9Ci0rCi0rICByZXR1cm4gIW1h c20ub29tKCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpicmFuY2hUb0Jsb2Nr KE1CYXNpY0Jsb2NrKiBibG9jaykgewotKyAgTGFiZWwqIGxhYmVsID0gc2tpcFRyaXZpYWxCbG9j a3MoYmxvY2spLT5saXIoKS0+bGFiZWwoKTsKLSsgIG1hc20uanVtcChsYWJlbCk7Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RG91Ymxl Q29uZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1CYXNpY0Jsb2NrKiBtaXIpIHsKLSsgIExhYmVsKiBsYWJl bCA9IHNraXBUcml2aWFsQmxvY2tzKG1pciktPmxpcigpLT5sYWJlbCgpOwotKyAgbWFzbS5icmFu Y2hEb3VibGUoY29uZCwgbGhzLCByaHMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJh dG9yUFBDNjQ6OmJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpGbG9hdEZvcm1hdCBmbXQsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZW1ibGVyOjpEb3VibGVDb25k aXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTUJhc2ljQmxvY2sqIG1pcikgewotKyAgTGFiZWwqIGxhYmVsID0g c2tpcFRyaXZpYWxCbG9ja3MobWlyKS0+bGlyKCktPmxhYmVsKCk7Ci0rICBpZiAoZm10ID09IEFz c2VtYmxlcjo6RG91YmxlRmxvYXQpIHsKLSsgICAgbWFzbS5icmFuY2hEb3VibGUoY29uZCwgbGhz LCByaHMsIGxhYmVsKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYnJhbmNoRmxvYXQoY29uZCwg bGhzLCByaHMsIGxhYmVsKTsKLSsgIH0KLSt9Ci0rCi0rY2xhc3MgT3V0T2ZMaW5lVGFibGVTd2l0 Y2ggOiBwdWJsaWMgT3V0T2ZMaW5lQ29kZUJhc2U8Q29kZUdlbmVyYXRvclBQQzY0PiB7Ci0rICBN VGFibGVTd2l0Y2gqIG1pcl87Ci0rICBDb2RlTGFiZWwganVtcExhYmVsXzsKLSsKLSsgIHZvaWQg YWNjZXB0KENvZGVHZW5lcmF0b3JQUEM2NCogY29kZWdlbikgewotKyAgICBjb2RlZ2VuLT52aXNp dE91dE9mTGluZVRhYmxlU3dpdGNoKHRoaXMpOwotKyAgfQotKwotKyBwdWJsaWM6Ci0rICBleHBs aWNpdCBPdXRPZkxpbmVUYWJsZVN3aXRjaChNVGFibGVTd2l0Y2gqIG1pcikgOiBtaXJfKG1pcikg e30KLSsKLSsgIE1UYWJsZVN3aXRjaCogbWlyKCkgY29uc3QgeyByZXR1cm4gbWlyXzsgfQotKyAg Q29kZUxhYmVsKiBqdW1wTGFiZWwoKSB7IHJldHVybiAmanVtcExhYmVsXzsgfQotK307Ci0rCi0r dm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRUYWJsZVN3aXRjaERpc3BhdGNoKE1UYWJsZVN3 aXRjaCogbWlyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgYmFzZSkgewotKyAgTGFiZWwqIGRlZmF1bHRjYXNlID0g c2tpcFRyaXZpYWxCbG9ja3MobWlyLT5nZXREZWZhdWx0KCkpLT5saXIoKS0+bGFiZWwoKTsKLSsK LSsgIGlmIChtaXItPmxvdygpICE9IDApIHsKLSsgICAgbWFzbS5zdWJQdHIoSW1tMzIobWlyLT5s b3coKSksIGluZGV4KTsKLSsgIH0KLSsKLSsgIGludDMyX3QgY2FzZXMgPSBtaXItPm51bUNhc2Vz KCk7Ci0rICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXgsIElt bVdvcmQoY2FzZXMpLCBkZWZhdWx0Y2FzZSk7Ci0rCi0rICBPdXRPZkxpbmVUYWJsZVN3aXRjaCog b29sID0gbmV3IChhbGxvYygpKSBPdXRPZkxpbmVUYWJsZVN3aXRjaChtaXIpOwotKyAgYWRkT3V0 T2ZMaW5lQ29kZShvb2wsIG1pcik7Ci0rCi0rICBtYXNtLm1vdihvb2wtPmp1bXBMYWJlbCgpLCBi YXNlKTsKLSsKLSsgIEJhc2VJbmRleCBwb2ludGVyKGJhc2UsIGluZGV4LCBTY2FsZVBvaW50ZXIp OwotKyAgbWFzbS5icmFuY2hUb0NvbXB1dGVkQWRkcmVzcyhwb2ludGVyKTsKLSt9Ci0rCi0rdm9p ZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRlSW52YWxpZGF0ZUVwaWxvZ3VlKCkgewotKyAg Ly8gUGFkIHdpdGggZW5vdWdoIG5vcHMgc28gdGhhdCBQYXRjaFdyaXRlX05lYXJDYWxsIG9uIHRo ZSBsYXN0IE9TSSBwb2ludAotKyAgLy8gY2Fubm90IG92ZXJsYXAgdGhlIGludmFsaWRhdGlvbiBl cGlsb2d1ZS4gVGhlIHBhdGNoIGFyZWEgaXMKLSsgIC8vIFBhdGNoV3JpdGVfTmVhckNhbGxTaXpl ICg0MCkgYnl0ZXM7IHRoZSBsYXN0IE9TSSBwb2ludCBjb3VsZCBiZSByaWdodAotKyAgLy8gYmVm b3JlIHRoaXMgZXBpbG9ndWUuCi0rICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFzc2VtYmxlcjo6 UGF0Y2hXcml0ZV9OZWFyQ2FsbFNpemUoKTsKLSsgICAgICAgaSArPSBBc3NlbWJsZXI6Ok5vcFNp emUoKSkgewotKyAgICBtYXNtLm5vcCgpOwotKyAgfQotKwotKyAgbWFzbS5iaW5kKCZpbnZhbGlk YXRlXyk7Ci0rCi0rICAvLyBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyAoTFIpIG9udG8gdGhlIHN0 YWNrLgotKyAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygpOwotKwotKyAgaW52YWxpZGF0ZUVwaWxv Z3VlRGF0YV8gPSBtYXNtLnB1c2hXaXRoUGF0Y2goSW1tV29yZCh1aW50cHRyX3QoLTEpKSk7Ci0r Ci0rICBUcmFtcG9saW5lUHRyIHRodW5rID0gZ2VuLT5qaXRSdW50aW1lKCktPmdldEludmFsaWRh dGlvblRodW5rKCk7Ci0rICBtYXNtLmp1bXAodGh1bmspOwotK30KLSsKLSt2b2lkIENvZGVHZW5l cmF0b3JQUEM2NDo6dmlzaXRPdXRPZkxpbmVUYWJsZVN3aXRjaChPdXRPZkxpbmVUYWJsZVN3aXRj aCogb29sKSB7Ci0rICBNVGFibGVTd2l0Y2gqIG1pciA9IG9vbC0+bWlyKCk7Ci0rCi0rICBtYXNt LmhhbHRpbmdBbGlnbihzaXplb2Yodm9pZCopKTsKLSsgIG1hc20uYmluZChvb2wtPmp1bXBMYWJl bCgpKTsKLSsgIG1hc20uYWRkQ29kZUxhYmVsKCpvb2wtPmp1bXBMYWJlbCgpKTsKLSsKLSsgIGZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWlyLT5udW1DYXNlcygpOyBpKyspIHsKLSsgICAgTEJsb2Nr KiBjYXNlYmxvY2sgPSBza2lwVHJpdmlhbEJsb2NrcyhtaXItPmdldENhc2UoaSkpLT5saXIoKTsK LSsgICAgTGFiZWwqIGNhc2VoZWFkZXIgPSBjYXNlYmxvY2stPmxhYmVsKCk7Ci0rICAgIHVpbnQz Ml90IGNhc2VvZmZzZXQgPSBjYXNlaGVhZGVyLT5vZmZzZXQoKTsKLSsKLSsgICAgQ29kZUxhYmVs IGNsOwotKyAgICBtYXNtLndyaXRlQ29kZVBvaW50ZXIoJmNsKTsKLSsgICAgY2wudGFyZ2V0KCkt PmJpbmQoY2FzZW9mZnNldCk7Ci0rICAgIG1hc20uYWRkQ29kZUxhYmVsKGNsKTsKLSsgIH0KLSt9 Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OnZpc2l0T3V0T2ZMaW5lV2FzbVRydW5jYXRl Q2hlY2soCi0rICAgIE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKiBvb2wpIHsKLSsgIGlmIChv b2wtPnRvVHlwZSgpID09IE1JUlR5cGU6OkludDMyKSB7Ci0rICAgIG1hc20ub3V0T2ZMaW5lV2Fz bVRydW5jYXRlVG9JbnQzMkNoZWNrKG9vbC0+aW5wdXQoKSwgb29sLT5vdXRwdXQoKSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sLT5mcm9tVHlwZSgpLCBv b2wtPmZsYWdzKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9vbC0+cmVqb2luKCksIG9vbC0+dHJhcFNpdGVEZXNjKCkpOwotKyAgfSBlbHNlIHsKLSsgICAg TU9aX0FTU0VSVChvb2wtPnRvVHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKLSsgICAgbWFzbS5v dXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2sob29sLT5pbnB1dCgpLCBvb2wtPm91dHB1 dDY0KCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbC0+ ZnJvbVR5cGUoKSwgb29sLT5mbGFncygpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvb2wtPnJlam9pbigpLCBvb2wtPnRyYXBTaXRlRGVzYygpKTsKLSsgIH0K LSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRCaWdJbnRQdHJEaXYoTEJpZ0lu dFB0ckRpdiogaW5zLCBSZWdpc3RlciBkaXZpZGVuZCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkaXZpc29yLCBSZWdpc3RlciBvdXRwdXQpIHsK LSsgIG1hc20uYXNfZGl2ZChvdXRwdXQsIGRpdmlkZW5kLCBkaXZpc29yKTsKLSt9Ci0rCi0rdm9p ZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRCaWdJbnRQdHJNb2QoTEJpZ0ludFB0ck1vZCogaW5z LCBSZWdpc3RlciBkaXZpZGVuZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkaXZpc29yLCBSZWdpc3RlciBvdXRwdXQpIHsKLSsgIGlmIChIYXNQ T1dFUjkoKSkgewotKyAgICBtYXNtLmFzX21vZHNkKG91dHB1dCwgZGl2aWRlbmQsIGRpdmlzb3Ip OwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19kaXZkKG91dHB1dCwgZGl2aWRlbmQsIGRpdmlz b3IpOwotKyAgICBtYXNtLmFzX211bGxkKG91dHB1dCwgb3V0cHV0LCBkaXZpc29yKTsKLSsgICAg bWFzbS5hc19zdWJmKG91dHB1dCwgb3V0cHV0LCBkaXZpZGVuZCk7Ci0rICB9Ci0rfQotKwotKy8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKy8vIFZpc2l0b3JzOiBCb3gvVW5ib3gKLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6 OnZpc2l0Qm94KExCb3gqIGJveCkgewotKyAgY29uc3QgTEFsbG9jYXRpb24qIGluID0gYm94LT5n ZXRPcGVyYW5kKDApOwotKyAgVmFsdWVPcGVyYW5kIHJlc3VsdCA9IFRvT3V0VmFsdWUoYm94KTsK LSsKLSsgIG1hc20ubW92ZVZhbHVlKFR5cGVkT3JWYWx1ZVJlZ2lzdGVyKGJveC0+dHlwZSgpLCBU b0FueVJlZ2lzdGVyKGluKSksIHJlc3VsdCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXRVbmJveChMVW5ib3gqIHVuYm94KSB7Ci0rICBNVW5ib3gqIG1pciA9IHVuYm94LT5taXIo KTsKLSsKLSsgIFJlZ2lzdGVyIHJlc3VsdCA9IFRvUmVnaXN0ZXIodW5ib3gtPm91dHB1dCgpKTsK LSsKLSsgIGlmIChtaXItPmZhbGxpYmxlKCkpIHsKLSsgICAgVmFsdWVPcGVyYW5kIHZhbHVlID0g VG9WYWx1ZSh1bmJveC0+aW5wdXQoKSk7Ci0rICAgIExhYmVsIGJhaWw7Ci0rICAgIHN3aXRjaCAo bWlyLT50eXBlKCkpIHsKLSsgICAgICBjYXNlIE1JUlR5cGU6OkludDMyOgotKyAgICAgICAgbWFz bS5mYWxsaWJsZVVuYm94SW50MzIodmFsdWUsIHJlc3VsdCwgJmJhaWwpOwotKyAgICAgICAgYnJl YWs7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpCb29sZWFuOgotKyAgICAgICAgbWFzbS5mYWxsaWJs ZVVuYm94Qm9vbGVhbih2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7Ci0rICAgICAgICBicmVhazsKLSsg ICAgICBjYXNlIE1JUlR5cGU6Ok9iamVjdDoKLSsgICAgICAgIG1hc20uZmFsbGlibGVVbmJveE9i amVjdCh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNl IE1JUlR5cGU6OlN0cmluZzoKLSsgICAgICAgIG1hc20uZmFsbGlibGVVbmJveFN0cmluZyh2YWx1 ZSwgcmVzdWx0LCAmYmFpbCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIE1JUlR5cGU6 OlN5bWJvbDoKLSsgICAgICAgIG1hc20uZmFsbGlibGVVbmJveFN5bWJvbCh2YWx1ZSwgcmVzdWx0 LCAmYmFpbCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIE1JUlR5cGU6OkJpZ0ludDoK LSsgICAgICAgIG1hc20uZmFsbGlibGVVbmJveEJpZ0ludCh2YWx1ZSwgcmVzdWx0LCAmYmFpbCk7 Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNIKCJH aXZlbiBNSVJUeXBlIGNhbm5vdCBiZSB1bmJveGVkLiIpOwotKyAgICB9Ci0rICAgIGJhaWxvdXRG cm9tKCZiYWlsLCB1bmJveC0+c25hcHNob3QoKSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsg IExBbGxvY2F0aW9uKiBpbnB1dCA9IHVuYm94LT5nZXRPcGVyYW5kKExVbmJveDo6SW5wdXQpOwot KyAgaWYgKGlucHV0LT5pc0dlbmVyYWxSZWcoKSkgewotKyAgICBSZWdpc3RlciBpbnB1dFJlZyA9 IFRvUmVnaXN0ZXIoaW5wdXQpOwotKyAgICBzd2l0Y2ggKG1pci0+dHlwZSgpKSB7Ci0rICAgICAg Y2FzZSBNSVJUeXBlOjpJbnQzMjoKLSsgICAgICAgIG1hc20udW5ib3hJbnQzMihWYWx1ZU9wZXJh bmQoaW5wdXRSZWcpLCByZXN1bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJU eXBlOjpCb29sZWFuOgotKyAgICAgICAgbWFzbS51bmJveEJvb2xlYW4oVmFsdWVPcGVyYW5kKGlu cHV0UmVnKSwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgTUlSVHlwZTo6 T2JqZWN0OgotKyAgICAgICAgbWFzbS51bmJveE9iamVjdChWYWx1ZU9wZXJhbmQoaW5wdXRSZWcp LCByZXN1bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpTdHJpbmc6 Ci0rICAgICAgICBtYXNtLnVuYm94U3RyaW5nKFZhbHVlT3BlcmFuZChpbnB1dFJlZyksIHJlc3Vs dCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIE1JUlR5cGU6OlN5bWJvbDoKLSsgICAg ICAgIG1hc20udW5ib3hTeW1ib2woVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0KTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgTUlSVHlwZTo6QmlnSW50OgotKyAgICAgICAgbWFz bS51bmJveEJpZ0ludChWYWx1ZU9wZXJhbmQoaW5wdXRSZWcpLCByZXN1bHQpOwotKyAgICAgICAg YnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgiR2l2ZW4gTUlSVHlw ZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0r ICBBZGRyZXNzIGlucHV0QWRkciA9IFRvQWRkcmVzcyhpbnB1dCk7Ci0rICBzd2l0Y2ggKG1pci0+ dHlwZSgpKSB7Ci0rICAgIGNhc2UgTUlSVHlwZTo6SW50MzI6Ci0rICAgICAgbWFzbS51bmJveElu dDMyKGlucHV0QWRkciwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNSVJUeXBl OjpCb29sZWFuOgotKyAgICAgIG1hc20udW5ib3hCb29sZWFuKGlucHV0QWRkciwgcmVzdWx0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNSVJUeXBlOjpPYmplY3Q6Ci0rICAgICAgbWFzbS51 bmJveE9iamVjdChpbnB1dEFkZHIsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug TUlSVHlwZTo6U3RyaW5nOgotKyAgICAgIG1hc20udW5ib3hTdHJpbmcoaW5wdXRBZGRyLCByZXN1 bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1JUlR5cGU6OlN5bWJvbDoKLSsgICAgICBt YXNtLnVuYm94U3ltYm9sKGlucHV0QWRkciwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBNSVJUeXBlOjpCaWdJbnQ6Ci0rICAgICAgbWFzbS51bmJveEJpZ0ludChpbnB1dEFkZHIs IHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNI KCJHaXZlbiBNSVJUeXBlIGNhbm5vdCBiZSB1bmJveGVkLiIpOwotKyAgfQotK30KLSsKLSsvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsvLyBWaXNpdG9yczogSW50ZWdlciBBcml0aG1ldGljCi0rCi0rdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdEFkZEkoTEFkZEkqIGlucykgewotKyAgTEFsbG9jYXRpb24qIGxocyA9IGlu cy0+Z2V0T3BlcmFuZCgwKTsKLSsgIExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQo MSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPmdldERlZigwKSk7Ci0rCi0r ICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgSW1tMzIgaW1tKFRvSW50MzIocmhzKSk7 Ci0rICAgIGlmIChpbnMtPnNuYXBzaG90KCkpIHsKLSsgICAgICBtYXNtLm1vdmUzMihUb1JlZ2lz dGVyKGxocyksIGRlc3QpOwotKyAgICAgIExhYmVsIG92ZXJmbG93OwotKyAgICAgIG1hc20uYnJh bmNoQWRkMzIoQXNzZW1ibGVyOjpPdmVyZmxvdywgaW1tLCBkZXN0LCAmb3ZlcmZsb3cpOwotKyAg ICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICBtYXNtLmFkZDMyKGltbSwgVG9SZWdpc3RlcihsaHMpLCBkZXN0KTsKLSsgICAg fQotKyAgfSBlbHNlIHsKLSsgICAgUmVnaXN0ZXIgcmhzUmVnID0gVG9SZWdpc3RlcihyaHMpOwot KyAgICBpZiAoaW5zLT5zbmFwc2hvdCgpKSB7Ci0rICAgICAgLy8gVXNlIDMtb3BlcmFuZCBhZGQg dG8gYXZvaWQgY2xvYmJlcmluZyByaHMgd2hlbiByaHMgPT0gZGVzdC4KLSsgICAgICBtYXNtLmFz X2FkZChkZXN0LCBUb1JlZ2lzdGVyKGxocyksIHJoc1JlZyk7Ci0rICAgICAgLy8gQ2hlY2sgMzIt Yml0IG92ZXJmbG93OiBzaWduLWV4dGVuZCBsb3dlciAzMiBhbmQgY29tcGFyZS4KLSsgICAgICBt YXNtLmFzX2V4dHN3KFNlY29uZFNjcmF0Y2hSZWcsIGRlc3QpOwotKyAgICAgIExhYmVsIG92ZXJm bG93OwotKyAgICAgIG1hc20uYXNfY21wZChkZXN0LCBTZWNvbmRTY3JhdGNoUmVnKTsKLSsgICAg ICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJm92ZXJmbG93KTsKLSsgICAgICBtYXNt LmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5z LT5zbmFwc2hvdCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLmFzX2FkZChkZXN0LCBU b1JlZ2lzdGVyKGxocyksIHJoc1JlZyk7Ci0rICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0 KTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QWRkSW50 UHRyKExBZGRJbnRQdHIqIGlucykgewotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5z LT5nZXREZWYoMCkpOwotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmdldE9wZXJh bmQoMCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+Z2V0T3BlcmFuZCgxKTsK LSsKLSsgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAgICBpZiAobGhzICE9IGRlc3QpIHsK LSsgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKLSsgICAgfQotKyAgICBtYXNtLmFkZFB0 cihJbW1Xb3JkKFRvSW50UHRyKHJocykpLCBkZXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20u YXNfYWRkKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdEFkZEk2NChMQWRkSTY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGRl c3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVn aXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBs aXItPmdldE9wZXJhbmQoMSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAg aWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAg IH0KLSsgICAgbWFzbS5hZGRQdHIoSW1tV29yZChUb0ludDY0KHJocykpLCBkZXN0KTsKLSsgIH0g ZWxzZSB7Ci0rICAgIG1hc20uYXNfYWRkKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsg IH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFN1YkkoTFN1YkkqIGlucykgewot KyAgTEFsbG9jYXRpb24qIGxocyA9IGlucy0+Z2V0T3BlcmFuZCgwKTsKLSsgIExBbGxvY2F0aW9u KiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rl cihpbnMtPmdldERlZigwKSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAg SW1tMzIgaW1tKFRvSW50MzIocmhzKSk7Ci0rICAgIGlmIChpbnMtPnNuYXBzaG90KCkpIHsKLSsg ICAgICBtYXNtLm1vdmUzMihUb1JlZ2lzdGVyKGxocyksIGRlc3QpOwotKyAgICAgIExhYmVsIG92 ZXJmbG93OwotKyAgICAgIG1hc20uYnJhbmNoU3ViMzIoQXNzZW1ibGVyOjpPdmVyZmxvdywgaW1t LCBkZXN0LCAmb3ZlcmZsb3cpOwotKyAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5z bmFwc2hvdCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLm1vdmUzMihUb1JlZ2lzdGVy KGxocyksIGRlc3QpOwotKyAgICAgIG1hc20uc3ViMzIoaW1tLCBkZXN0KTsKLSsgICAgfQotKyAg fSBlbHNlIHsKLSsgICAgUmVnaXN0ZXIgcmhzUmVnID0gVG9SZWdpc3RlcihyaHMpOwotKyAgICBp ZiAoaW5zLT5zbmFwc2hvdCgpKSB7Ci0rICAgICAgLy8gYXNfc3ViZihkLCBhLCBiKSBjb21wdXRl cyBkID0gYiAtIGEsIHNvIHN1YmYoZGVzdCwgcmhzLCBsaHMpID0gbGhzIC0KLSsgICAgICAvLyBy aHMKLSsgICAgICBtYXNtLmFzX3N1YmYoZGVzdCwgcmhzUmVnLCBUb1JlZ2lzdGVyKGxocykpOwot KyAgICAgIG1hc20uYXNfZXh0c3coU2Vjb25kU2NyYXRjaFJlZywgZGVzdCk7Ci0rICAgICAgTGFi ZWwgb3ZlcmZsb3c7Ci0rICAgICAgbWFzbS5hc19jbXBkKGRlc3QsIFNlY29uZFNjcmF0Y2hSZWcp OwotKyAgICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmb3ZlcmZsb3cpOwotKyAg ICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgYmFpbG91dEZyb20oJm92ZXJm bG93LCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20uYXNfc3Vi ZihkZXN0LCByaHNSZWcsIFRvUmVnaXN0ZXIobGhzKSk7Ci0rICAgICAgbWFzbS5hc19leHRzdyhk ZXN0LCBkZXN0KTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0U3ViSW50UHRyKExTdWJJbnRQdHIqIGlucykgewotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVn aXN0ZXIoaW5zLT5nZXREZWYoMCkpOwotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMt PmdldE9wZXJhbmQoMCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+Z2V0T3Bl cmFuZCgxKTsKLSsKLSsgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAgICBpZiAobGhzICE9 IGRlc3QpIHsKLSsgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKLSsgICAgfQotKyAgICBt YXNtLnN1YlB0cihJbW0zMihUb0ludFB0cihyaHMpKSwgZGVzdCk7Ci0rICB9IGVsc2UgewotKyAg ICAvLyBhc19zdWJmKGQsIGEsIGIpID0gYiAtIGEKLSsgICAgbWFzbS5hc19zdWJmKGRlc3QsIFRv UmVnaXN0ZXIocmhzKSwgbGhzKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFN1Ykk2NChMU3ViSTY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVy KGxpci0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRP cGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBsaXItPmdldE9wZXJhbmQo MSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgaWYgKGxocyAhPSBkZXN0 KSB7Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgIH0KLSsgICAgbWFzbS5z dWI2NChJbW02NChUb0ludDY0KHJocykpLCBSZWdpc3RlcjY0KGRlc3QpKTsKLSsgIH0gZWxzZSB7 Ci0rICAgIC8vIGFzX3N1YmYoZCwgYSwgYikgPSBiIC0gYQotKyAgICBtYXNtLmFzX3N1YmYoZGVz dCwgVG9SZWdpc3RlcihyaHMpLCBsaHMpOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0TXVsSShMTXVsSSogaW5zKSB7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rl cihpbnMtPmdldERlZigwKSk7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0 T3BlcmFuZCgwKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5nZXRPcGVyYW5k KDEpOwotKyAgTU11bCogbXVsID0gaW5zLT5taXIoKTsKLSsKLSsgIGlmIChyaHMtPmlzQ29uc3Rh bnQoKSkgewotKyAgICBpbnQzMl90IGNvbnN0YW50ID0gVG9JbnQzMihyaHMpOwotKyAgICBSZWdp c3RlciBzcmMgPSBsaHM7Ci0rCi0rICAgIC8vIEJhaWxvdXQgb24gLTAuMCBiZWZvcmUgdGhlIHNw ZWNpYWwtY2FzZSBoYW5kbGluZyBiZWxvdywgc2luY2UgY2FzZXMKLSsgICAgLy8gbGlrZSAtMSBh bmQgMCByZXR1cm4gZWFybHkgYW5kIHdvdWxkIHNraXAgdGhlIGNoZWNrLgotKyAgICBpZiAobXVs LT5jYW5CZU5lZ2F0aXZlWmVybygpICYmIGNvbnN0YW50IDw9IDApIHsKLSsgICAgICBBc3NlbWJs ZXI6OkNvbmRpdGlvbiBjb25kID0KLSsgICAgICAgICAgKGNvbnN0YW50ID09IDApID8gQXNzZW1i bGVyOjpTaWduZWQgOiBBc3NlbWJsZXI6OkVxdWFsOwotKyAgICAgIGJhaWxvdXRDbXAzMihjb25k LCBzcmMsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICB9Ci0rCi0rICAgIHN3aXRj aCAoY29uc3RhbnQpIHsKLSsgICAgICBjYXNlIC0xOgotKyAgICAgICAgaWYgKG11bC0+Y2FuT3Zl cmZsb3coKSkgewotKyAgICAgICAgICBMYWJlbCBvazsKLSsgICAgICAgICAgbWFzbS5icmFuY2hQ dHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZvayk7Ci0r ICAgICAgICAgIGJhaWxvdXQoaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgICAgICAgbWFzbS5iaW5k KCZvayk7Ci0rICAgICAgICB9Ci0rICAgICAgICBtYXNtLmFzX25lZyhkZXN0LCBzcmMpOwotKyAg ICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAg ICBjYXNlIDA6Ci0rICAgICAgICBtYXNtLm1vdmUzMihJbW0zMigwKSwgZGVzdCk7Ci0rICAgICAg ICByZXR1cm47Ci0rICAgICAgY2FzZSAxOgotKyAgICAgICAgbWFzbS5tb3ZlMzIoc3JjLCBkZXN0 KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgICBjYXNlIDI6Ci0rICAgICAgICBpZiAobXVsLT5j YW5PdmVyZmxvdygpKSB7Ci0rICAgICAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7Ci0rICAg ICAgICAgIExhYmVsIG92ZXJmbG93OwotKyAgICAgICAgICBtYXNtLmJyYW5jaEFkZDMyKEFzc2Vt Ymxlcjo6T3ZlcmZsb3csIGRlc3QsIGRlc3QsICZvdmVyZmxvdyk7Ci0rICAgICAgICAgIGJhaWxv dXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7Ci0rICAgICAgICAgIG1hc20uYWRkMzIo ZGVzdCwgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgZGVmYXVs dDoKLSsgICAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIENoZWNrIGZvciBwb3dlciBv ZiAyIChwb3NpdGl2ZSkuCi0rICAgIHVpbnQzMl90IGFic0NzdCA9IG1vemlsbGE6OkFicyhjb25z dGFudCk7Ci0rICAgIGlmIChhYnNDc3QgPiAwICYmIChhYnNDc3QgJiAoYWJzQ3N0IC0gMSkpID09 IDAgJiYgIW11bC0+Y2FuT3ZlcmZsb3coKSkgewotKyAgICAgIHVpbnQzMl90IHNoaWZ0ID0gbW96 aWxsYTo6Rmxvb3JMb2cyKGFic0NzdCk7Ci0rICAgICAgbWFzbS54X3Nsd2koZGVzdCwgc3JjLCBz aGlmdCk7Ci0rICAgICAgaWYgKGNvbnN0YW50IDwgMCkgewotKyAgICAgICAgbWFzbS5hc19uZWco ZGVzdCwgZGVzdCk7Ci0rICAgICAgfQotKyAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7 Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICAgIC8vIEdlbmVyYWwgY2FzZS4KLSsgICAg aWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgewotKyAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7 Ci0rICAgICAgTGFiZWwgb3ZlcmZsb3c7Ci0rICAgICAgbWFzbS5icmFuY2hNdWwzMihBc3NlbWJs ZXI6Ok92ZXJmbG93LCBJbW0zMihjb25zdGFudCksIGRlc3QsICZvdmVyZmxvdyk7Ci0rICAgICAg YmFpbG91dEZyb20oJm92ZXJmbG93LCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICB9IGVsc2Ugewot KyAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7Ci0rICAgICAgbWFzbS5tdWwzMihJbW0zMihj b25zdGFudCksIGRlc3QpOwotKyAgICB9Ci0rCi0rICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6 ZXJvIChmb3IgY29uc3RhbnRzIG5vdCBoYW5kbGVkIGFib3ZlKS4KLSsgICAgaWYgKG11bC0+Y2Fu QmVOZWdhdGl2ZVplcm8oKSAmJiBjb25zdGFudCA8IDApIHsKLSsgICAgICBMYWJlbCBvazsKLSsg ICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBkZXN0LCBJbW1Xb3JkKDAp LCAmb2spOwotKyAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OlNpZ25lZCwgc3JjLCBzcmMs IGlucy0+c25hcHNob3QoKSk7Ci0rICAgICAgbWFzbS5iaW5kKCZvayk7Ci0rICAgIH0KLSsgICAg cmV0dXJuOwotKyAgfQotKwotKyAgUmVnaXN0ZXIgcmhzUmVnID0gVG9SZWdpc3RlcihyaHMpOwot KwotKyAgaWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgewotKyAgICAvLyBVc2UgNjQtYml0IG11bHRp cGx5IHNvIHRoZSBmdWxsIHJlc3VsdCBpcyBkZXRlcm1pbmlzdGljLCB0aGVuIGNoZWNrCi0rICAg IC8vIHdoZXRoZXIgdHJ1bmNhdGluZyB0byAzMiBiaXRzIGNoYW5nZXMgdGhlIHZhbHVlLiBNYXRj aCB0aGUKLSsgICAgLy8gdmlzaXRBZGRJL3Zpc2l0U3ViSSBvcmRlcmluZzogYnJhbmNoIGZpcnN0 LCB0cnVuY2F0ZSBvbmx5IG9uIHRoZQotKyAgICAvLyBzdWNjZXNzIHBhdGggKHRoZSBiYWlsb3V0 IGRpc2NhcmRzIGRlc3QgYW55d2F5KS4gZXh0c3cgaXMKLSsgICAgLy8gbm9uLXJlY29yZGluZyAo SVNBIHYzLjBCKSBzbyBpdCBkb2Vzbid0IGRpc3R1cmIgQ1IwCi0rICAgIC8vIGVpdGhlciB3YXk7 IHRoZSBjaG9pY2UgaXMgZm9yIGNvbnNpc3RlbmN5LgotKyAgICBtYXNtLmFzX211bGxkKGRlc3Qs IGxocywgcmhzUmVnKTsKLSsgICAgbWFzbS5hc19leHRzdyhTZWNvbmRTY3JhdGNoUmVnLCBkZXN0 KTsKLSsgICAgTGFiZWwgb3ZlcmZsb3c7Ci0rICAgIG1hc20uYXNfY21wZChkZXN0LCBTZWNvbmRT Y3JhdGNoUmVnKTsKLSsgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZvdmVyZmxv dyk7Ci0rICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgIGJhaWxvdXRGcm9tKCZv dmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfbXVs bHcoZGVzdCwgbGhzLCByaHNSZWcpOwotKyAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwot KyAgfQotKwotKyAgaWYgKG11bC0+Y2FuQmVOZWdhdGl2ZVplcm8oKSkgewotKyAgICBMYWJlbCBk b25lOwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBkZXN0LCBJbW1X b3JkKDApLCAmZG9uZSk7Ci0rICAgIC8vIFJlc3VsdCBpcyAwLiBDaGVjayBpZiBsaHN8cmhzIHdh cyBuZWdhdGl2ZS4KLSsgICAgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KG1hc20pOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAg ICAgbWFzbS5hc19vcl8oc2NyYXRjaCwgbGhzLCByaHNSZWcpOwotKyAgICAgIGJhaWxvdXRDbXAz MihBc3NlbWJsZXI6OlNpZ25lZCwgc2NyYXRjaCwgc2NyYXRjaCwgaW5zLT5zbmFwc2hvdCgpKTsK LSsgICAgfQotKyAgICBtYXNtLmJpbmQoJmRvbmUpOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0TXVsSW50UHRyKExNdWxJbnRQdHIqIGlucykgewotKyAgUmVnaXN0ZXIg ZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOwotKyAgUmVnaXN0ZXIgbGhzID0gVG9S ZWdpc3RlcihpbnMtPmdldE9wZXJhbmQoMCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9 IGlucy0+Z2V0T3BlcmFuZCgxKTsKLSsKLSsgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAg ICBpZiAobGhzICE9IGRlc3QpIHsKLSsgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKLSsg ICAgfQotKyAgICBtYXNtLm11bFB0cihJbW1Xb3JkKFRvSW50UHRyKHJocykpLCBkZXN0KTsKLSsg IH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfbXVsbGQoZGVzdCwgbGhzLCBUb1JlZ2lzdGVyKHJocykp OwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TXVsSTY0KExNdWxJNjQq IGxpcikgewotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIobGlyLT5nZXREZWYoMCkpOwot KyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMCkpOwotKyAgY29u c3QgTEFsbG9jYXRpb24qIHJocyA9IGxpci0+Z2V0T3BlcmFuZCgxKTsKLSsKLSsgIGlmIChyaHMt PmlzQ29uc3RhbnQoKSkgewotKyAgICBpZiAobGhzICE9IGRlc3QpIHsKLSsgICAgICBtYXNtLm1v dmVQdHIobGhzLCBkZXN0KTsKLSsgICAgfQotKyAgICBtYXNtLm11bFB0cihJbW1Xb3JkKFRvSW50 NjQocmhzKSksIGRlc3QpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19tdWxsZChkZXN0LCBs aHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXREaXZJKExEaXZJKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5z LT5saHMoKSk7Ci0rICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpOwotKyAg UmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBSZWdpc3RlciB0 ZW1wID0gVG9SZWdpc3RlcihpbnMtPnRlbXAwKCkpOwotKyAgTURpdiogbWlyID0gaW5zLT5taXIo KTsKLSsKLSsgIExhYmVsIGRvbmU7Ci0rCi0rICAvLyBIYW5kbGUgZGl2aWRlIGJ5IHplcm8uCi0r ICBpZiAobWlyLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7Ci0rICAgIGlmIChtaXItPnRyYXBPbkVy cm9yKCkpIHsKLSsgICAgICBMYWJlbCBub25aZXJvOwotKyAgICAgIG1hc20uYnJhbmNoUHRyKEFz c2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgwKSwgJm5vblplcm8pOwotKyAgICAgIG1h c20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRpdmlkZUJ5WmVybywgbWlyLT50cmFwU2l0 ZURlc2MoKSk7Ci0rICAgICAgbWFzbS5iaW5kKCZub25aZXJvKTsKLSsgICAgfSBlbHNlIGlmICht aXItPmNhblRydW5jYXRlSW5maW5pdGllcygpKSB7Ci0rICAgICAgTGFiZWwgbm9uWmVybzsKLSsg ICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCks ICZub25aZXJvKTsKLSsgICAgICBtYXNtLm1vdmUzMihJbW0zMigwKSwgZGVzdCk7Ci0rICAgICAg bWFzbS5qdW1wKCZkb25lKTsKLSsgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwotKyAgICB9IGVs c2UgewotKyAgICAgIE1PWl9BU1NFUlQobWlyLT5mYWxsaWJsZSgpKTsKLSsgICAgICBiYWlsb3V0 Q21wMzIoQXNzZW1ibGVyOjpFcXVhbCwgcmhzLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsK LSsgICAgfQotKyAgfQotKwotKyAgLy8gSGFuZGxlIElOVDMyX01JTiAvIC0xIG92ZXJmbG93Lgot KyAgaWYgKG1pci0+Y2FuQmVOZWdhdGl2ZU92ZXJmbG93KCkpIHsKLSsgICAgTGFiZWwgbm90TWlu SW50OwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdv cmQoSU5UMzJfTUlOKSwgJm5vdE1pbkludCk7Ci0rICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxl cjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgtMSksICZub3RNaW5JbnQpOwotKwotKyAgICBpZiAo bWlyLT50cmFwT25FcnJvcigpKSB7Ci0rICAgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJ bnRlZ2VyT3ZlcmZsb3csIG1pci0+dHJhcFNpdGVEZXNjKCkpOwotKyAgICB9IGVsc2UgaWYgKG1p ci0+Y2FuVHJ1bmNhdGVPdmVyZmxvdygpKSB7Ci0rICAgICAgbWFzbS5tb3ZlMzIoSW1tMzIoSU5U MzJfTUlOKSwgZGVzdCk7Ci0rICAgICAgbWFzbS5qdW1wKCZkb25lKTsKLSsgICAgfSBlbHNlIHsK LSsgICAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUoKSk7Ci0rICAgICAgYmFpbG91dChpbnMt PnNuYXBzaG90KCkpOwotKyAgICB9Ci0rICAgIG1hc20uYmluZCgmbm90TWluSW50KTsKLSsgIH0K LSsKLSsgIC8vIEhhbmRsZSBuZWdhdGl2ZSB6ZXJvLgotKyAgaWYgKCFtaXItPmNhblRydW5jYXRl TmVnYXRpdmVaZXJvKCkgJiYgbWlyLT5jYW5CZU5lZ2F0aXZlWmVybygpKSB7Ci0rICAgIExhYmVs IG9rOwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIEltbVdv cmQoMCksICZvayk7Ci0rICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6Okxlc3NUaGFuLCByaHMs IEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICBtYXNtLmJpbmQoJm9rKTsKLSsgIH0K LSsKLSsgIC8vIFBlcmZvcm0gdGhlIGRpdmlzaW9uLgotKyAgbWFzbS5hc19kaXZ3KGRlc3QsIGxo cywgcmhzKTsKLSsgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rCi0rICAvLyBDaGVjayBy ZW1haW5kZXIgaWYgbm90IHRydW5jYXRhYmxlLgotKyAgaWYgKCFtaXItPmNhblRydW5jYXRlUmVt YWluZGVyKCkpIHsKLSsgICAgLy8gQ29tcHV0ZSByZW1haW5kZXI6IHRlbXAgPSBsaHMgLSAoZGVz dCAqIHJocykKLSsgICAgbWFzbS5hc19tdWxsdyh0ZW1wLCBkZXN0LCByaHMpOwotKyAgICBtYXNt LmFzX3N1YmYodGVtcCwgdGVtcCwgbGhzKTsgIC8vIHRlbXAgPSBsaHMgLSB0ZW1wCi0rICAgIGJh aWxvdXRDbXAzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLCBJbW0zMigwKSwgaW5zLT5zbmFw c2hvdCgpKTsKLSsgIH0KLSsKLSsgIG1hc20uYmluZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXREaXZQb3dUd29JKExEaXZQb3dUd29JKiBpbnMpIHsKLSsgIFJlZ2lz dGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5udW1lcmF0b3IoKSk7Ci0rICBSZWdpc3RlciBkZXN0 ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgaW50 MzJfdCBzaGlmdCA9IGlucy0+c2hpZnQoKTsKLSsKLSsgIGlmIChzaGlmdCAhPSAwKSB7Ci0rICAg IE1EaXYqIG1pciA9IGlucy0+bWlyKCk7Ci0rCi0rICAgIGlmICghbWlyLT5pc1RydW5jYXRlZCgp KSB7Ci0rICAgICAgLy8gSWYgcmVtYWluZGVyICE9IDAsIGJhaWxvdXQgKGNoZWNrIGxvd2VyICdz aGlmdCcgYml0cykuCi0rICAgICAgbWFzbS54X3Nsd2kodG1wLCBsaHMsIDMyIC0gc2hpZnQpOwot KyAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCB0bXAsIEltbTMyKDApLCBp bnMtPnNuYXBzaG90KCkpOwotKyAgICB9Ci0rCi0rICAgIGlmICghbWlyLT5jYW5CZU5lZ2F0aXZl RGl2aWRlbmQoKSkgewotKyAgICAgIC8vIE5vbi1uZWdhdGl2ZSBkaXZpZGVuZDogc2ltcGxlIHJp Z2h0IHNoaWZ0LgotKyAgICAgIG1hc20uYXNfc3Jhd2koZGVzdCwgbGhzLCBzaGlmdCk7Ci0rICAg IH0gZWxzZSB7Ci0rICAgICAgLy8gTmVlZCByb3VuZGluZyBhZGp1c3RtZW50IGZvciBuZWdhdGl2 ZSBudW1iZXJzLgotKyAgICAgIC8vIEFkZCAoMSA8PCBzaGlmdCkgLSAxIGlmIGxocyBpcyBuZWdh dGl2ZS4KLSsgICAgICBpZiAoc2hpZnQgPiAxKSB7Ci0rICAgICAgICBtYXNtLmFzX3NyYXdpKHRt cCwgbGhzLCAzMSk7Ci0rICAgICAgICBtYXNtLmFzX3Jsd2lubSh0bXAsIHRtcCwgMCwgMzIgLSBz aGlmdCwgMzEpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAvLyBzaGlmdCA9PSAxOiBleHRy YWN0IHNpZ24gYml0IGludG8gYml0IDMxCi0rICAgICAgICBtYXNtLmFzX3Jsd2lubSh0bXAsIGxo cywgMSwgMzEsIDMxKTsKLSsgICAgICB9Ci0rICAgICAgbWFzbS5hZGQzMihsaHMsIHRtcCk7Ci0r ICAgICAgbWFzbS5hc19zcmF3aShkZXN0LCB0bXAsIHNoaWZ0KTsKLSsgICAgfQotKyAgfSBlbHNl IHsKLSsgICAgbWFzbS5tb3ZlMzIobGhzLCBkZXN0KTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2Rl R2VuZXJhdG9yOjp2aXNpdE1vZEkoTE1vZEkqIGlucykgewotKyAgUmVnaXN0ZXIgbGhzID0gVG9S ZWdpc3RlcihpbnMtPmxocygpKTsKLSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5y aHMoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgdGVtcCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIE1Nb2QqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBMYWJlbCBk b25lOwotKwotKyAgLy8gSGFuZGxlIGRpdmlkZSBieSB6ZXJvLgotKyAgaWYgKG1pci0+Y2FuQmVE aXZpZGVCeVplcm8oKSkgewotKyAgICBpZiAobWlyLT5pc1RydW5jYXRlZCgpKSB7Ci0rICAgICAg aWYgKG1pci0+dHJhcE9uRXJyb3IoKSkgewotKyAgICAgICAgTGFiZWwgbm9uWmVybzsKLSsgICAg ICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgwKSwg Jm5vblplcm8pOwotKyAgICAgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyRGl2 aWRlQnlaZXJvLCBtaXItPnRyYXBTaXRlRGVzYygpKTsKLSsgICAgICAgIG1hc20uYmluZCgmbm9u WmVybyk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIC8vIFRydW5jYXRlZCBkaXZpc2lvbiBi eSB6ZXJvIHlpZWxkcyBpbnRlZ2VyIHplcm8uCi0rICAgICAgICBtYXNtLm1vdmUzMihyaHMsIGRl c3QpOwotKyAgICAgICAgTGFiZWwgbm9uWmVybzsKLSsgICAgICAgIG1hc20uYnJhbmNoUHRyKEFz c2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgwKSwgJm5vblplcm8pOwotKyAgICAgICAg bWFzbS5qdW1wKCZkb25lKTsKLSsgICAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7Ci0rICAgICAg fQotKyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9BU1NFUlQobWlyLT5mYWxsaWJsZSgpKTsKLSsg ICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpFcXVhbCwgcmhzLCBJbW0zMigwKSwgaW5zLT5z bmFwc2hvdCgpKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gSGFuZGxlIElOVDMyX01JTiAlIC0x LgotKyAgLy8gUFBDNjQgZGl2dyBpcyB1bmRlZmluZWQgZm9yIElOVDMyX01JTiAvIC0xIChxdW90 aWVudCBvdmVyZmxvd3MpLCBzbyB3ZQotKyAgLy8gbXVzdCByZXR1cm4gMCBleHBsaWNpdGx5LiAg VGhlIHdhc20gc3BlYyBhbHNvIGRlZmluZXMgcmVtX3MoTUlOLCAtMSkgPSAwLgotKyAgaWYgKCFt aXItPmlzVW5zaWduZWQoKSkgewotKyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsKLSsgICAgbWFz bS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiks Ci0rICAgICAgICAgICAgICAgICAgICZub3RNaW5PdmVyZmxvdyk7Ci0rICAgIG1hc20uYnJhbmNo UHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgtMSksICZub3RNaW5PdmVyZmxv dyk7Ci0rICAgIG1hc20ubW92ZTMyKEltbTMyKDApLCBkZXN0KTsKLSsgICAgbWFzbS5qdW1wKCZk b25lKTsKLSsgICAgbWFzbS5iaW5kKCZub3RNaW5PdmVyZmxvdyk7Ci0rICB9Ci0rCi0rICBpZiAo SGFzUE9XRVI5KCkpIHsKLSsgICAgbWFzbS5hc19tb2RzdyhkZXN0LCBsaHMsIHJocyk7Ci0rICB9 IGVsc2UgewotKyAgICBtYXNtLmFzX2RpdncodGVtcCwgbGhzLCByaHMpOwotKyAgICBtYXNtLmFz X211bGx3KHRlbXAsIHRlbXAsIHJocyk7Ci0rICAgIG1hc20uYXNfc3ViZihkZXN0LCB0ZW1wLCBs aHMpOwotKyAgfQotKyAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKLSsKLSsgIC8vIElmIFgl WSA9PSAwIGFuZCBYIDwgMCwgdGhlIHJlc3VsdCBpcyAtMCwgYW5kIHdlIG5lZWQgdG8gYmFpbCBv dXQuCi0rICBpZiAobWlyLT5jYW5CZU5lZ2F0aXZlRGl2aWRlbmQoKSAmJiAhbWlyLT5pc1RydW5j YXRlZCgpKSB7Ci0rICAgIE1PWl9BU1NFUlQobWlyLT5mYWxsaWJsZSgpKTsKLSsgICAgTGFiZWwg b2s7Ci0rICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGRlc3QsIEltbVdv cmQoMCksICZvayk7Ci0rICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OlNpZ25lZCwgbGhzLCBJ bW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgbWFzbS5iaW5kKCZvayk7Ci0rICB9Ci0r Ci0rICBtYXNtLmJpbmQoJmRvbmUpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0 TW9kUG93VHdvSShMTW9kUG93VHdvSSogaW5zKSB7Ci0rICBSZWdpc3RlciBpbiA9IFRvUmVnaXN0 ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKLSsgIFJlZ2lzdGVyIG91dCA9IFRvUmVnaXN0ZXIoaW5z LT5nZXREZWYoMCkpOwotKyAgTU1vZCogbWlyID0gaW5zLT5taXIoKTsKLSsgIGludDMyX3Qgc2hp ZnQgPSBpbnMtPnNoaWZ0KCk7Ci0rICB1aW50MzJfdCBtYXNrID0gKHVpbnQzMl90KDEpIDw8IHNo aWZ0KSAtIDE7Ci0rCi0rICBpZiAobWlyLT5jYW5CZU5lZ2F0aXZlRGl2aWRlbmQoKSAmJiAhbWly LT5pc1RydW5jYXRlZCgpKSB7Ci0rICAgIExhYmVsIG5vbk5lZzsKLSsgICAgbWFzbS5icmFuY2hQ dHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgaW4sIEltbVdvcmQoMCksICZub25OZWcpOwotKyAgICAv LyBpbiA9PSAwOiBtb2QgaXMgMCwgY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8uCi0rICAgIGJhaWxv dXRDbXAzMihBc3NlbWJsZXI6OlNpZ25lZCwgaW4sIGluLCBpbnMtPnNuYXBzaG90KCkpOwotKyAg ICBtYXNtLmJpbmQoJm5vbk5lZyk7Ci0rICB9Ci0rCi0rICBMYWJlbCBuZWdhdGl2ZSwgZG9uZTsK LSsgIG1hc20uYnJhbmNoMzIoQXNzZW1ibGVyOjpTaWduZWQsIGluLCBpbiwgJm5lZ2F0aXZlKTsK LSsKLSsgIC8vIFBvc2l0aXZlIGNhc2U6IGp1c3QgbWFzay4KLSsgIG1hc20uYW5kMzIoSW1tMzIo bWFzayksIGluLCBvdXQpOwotKyAgbWFzbS5qdW1wKCZkb25lKTsKLSsKLSsgIC8vIE5lZ2F0aXZl IGNhc2U6IG5lZ2F0ZSwgbWFzaywgbmVnYXRlIGJhY2suCi0rICBtYXNtLmJpbmQoJm5lZ2F0aXZl KTsKLSsgIG1hc20uYXNfbmVnKG91dCwgaW4pOwotKyAgbWFzbS5hbmQzMihJbW0zMihtYXNrKSwg b3V0KTsKLSsgIG1hc20uYXNfbmVnKG91dCwgb3V0KTsKLSsgIG1hc20uYXNfZXh0c3cob3V0LCBv dXQpOwotKwotKyAgaWYgKCFtaXItPmlzVHJ1bmNhdGVkKCkgJiYgbWlyLT5jYW5CZU5lZ2F0aXZl RGl2aWRlbmQoKSkgewotKyAgICBMYWJlbCBvazsKLSsgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1i bGVyOjpOb3RFcXVhbCwgb3V0LCBJbW1Xb3JkKDApLCAmb2spOwotKyAgICBiYWlsb3V0KGlucy0+ c25hcHNob3QoKSk7Ci0rICAgIG1hc20uYmluZCgmb2spOwotKyAgfQotKwotKyAgbWFzbS5iaW5k KCZkb25lKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1vZE1hc2tJKExNb2RN YXNrSSogaW5zKSB7Ci0rICBSZWdpc3RlciBzcmMgPSBUb1JlZ2lzdGVyKGlucy0+aW5wdXQoKSk7 Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIFJlZ2lz dGVyIHRtcDAgPSBUb1JlZ2lzdGVyKGlucy0+dGVtcDAoKSk7Ci0rICBSZWdpc3RlciB0bXAxID0g VG9SZWdpc3RlcihpbnMtPnRlbXAxKCkpOwotKyAgTU1vZCogbWlyID0gaW5zLT5taXIoKTsKLSsK LSsgIGlmICghbWlyLT5pc1RydW5jYXRlZCgpICYmIG1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5k KCkpIHsKLSsgICAgTU9aX0FTU0VSVChtaXItPmZhbGxpYmxlKCkpOwotKwotKyAgICBMYWJlbCBi YWlsOwotKyAgICBtYXNtLm1hX21vZF9tYXNrKHNyYywgZGVzdCwgdG1wMCwgdG1wMSwgaW5zLT5z aGlmdCgpLCAmYmFpbCk7Ci0rICAgIGJhaWxvdXRGcm9tKCZiYWlsLCBpbnMtPnNuYXBzaG90KCkp OwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5tYV9tb2RfbWFzayhzcmMsIGRlc3QsIHRtcDAsIHRt cDEsIGlucy0+c2hpZnQoKSwgbnVsbHB0cik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXROZWdJKExOZWdJKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdp c3RlcihpbnMtPmlucHV0KCkpOwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihpbnMt Pm91dHB1dCgpKTsKLSsgIG1hc20uYXNfbmVnKG91dHB1dCwgaW5wdXQpOwotKyAgbWFzbS5hc19l eHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRO ZWdJNjQoTE5lZ0k2NCogaW5zKSB7Ci0rICBSZWdpc3RlciBpbnB1dCA9IFRvUmVnaXN0ZXI2NChp bnMtPmlucHV0KCkpLnJlZzsKLSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvT3V0UmVnaXN0ZXI2NChp bnMpLnJlZzsKLSsgIG1hc20uYXNfbmVnKG91dHB1dCwgaW5wdXQpOwotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0VURpdk9yTW9kKExVRGl2T3JNb2QqIGlucykgewotKyAgUmVnaXN0 ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygpKTsKLSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVn aXN0ZXIoaW5zLT5yaHMoKSk7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+ b3V0cHV0KCkpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICBS ZWdpc3RlciB0ZW1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgTGFiZWwgZG9uZTsKLSsKLSsgIC8v IERpdmlzaW9uIGJ5IHplcm8gY2hlY2suCi0rICBpZiAoaW5zLT5jYW5CZURpdmlkZUJ5WmVybygp KSB7Ci0rICAgIGlmIChpbnMtPm1pcigpLT5pc1RydW5jYXRlZCgpKSB7Ci0rICAgICAgaWYgKGlu cy0+dHJhcE9uRXJyb3IoKSkgewotKyAgICAgICAgTGFiZWwgbm9uWmVybzsKLSsgICAgICAgIG1h c20uYnJhbmNoMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW0zMigwKSwgJm5vblplcm8p OwotKyAgICAgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyRGl2aWRlQnlaZXJv LCBpbnMtPnRyYXBTaXRlRGVzYygpKTsKLSsgICAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7Ci0r ICAgICAgfSBlbHNlIHsKLSsgICAgICAgIExhYmVsIG5vblplcm87Ci0rICAgICAgICBtYXNtLmJy YW5jaDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tMzIoMCksICZub25aZXJvKTsKLSsg ICAgICAgIG1hc20ubW92ZTMyKEltbTMyKDApLCBvdXRwdXQpOwotKyAgICAgICAgbWFzbS5qdW1w KCZkb25lKTsKLSsgICAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7Ci0rICAgICAgfQotKyAgICB9 IGVsc2UgewotKyAgICAgIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OkVxdWFsLCByaHMsIEltbTMy KDApLCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICB9Ci0rICB9Ci0rCi0rICAvLyBaZXJvLWV4dGVu ZCBib3RoIG9wZXJhbmRzIHRvIDY0IGJpdHMgZm9yIHVuc2lnbmVkIGRpdmlkZS4KLSsgIG1hc20u bW92ZTMyVG82NFplcm9FeHRlbmQobGhzLCBSZWdpc3RlcjY0KGxocykpOwotKyAgbWFzbS5tb3Zl MzJUbzY0WmVyb0V4dGVuZChyaHMsIFJlZ2lzdGVyNjQocmhzKSk7Ci0rCi0rICBpZiAoaW5zLT5t aXIoKS0+aXNEaXYoKSkgewotKyAgICAvLyBEaXZpc2lvbiBwYXRoOiBjb21wdXRlIHF1b3RpZW50 LiBDaGVjayByZW1haW5kZXIgaWYgbmVlZGVkLgotKyAgICBpZiAoIWlucy0+bWlyKCktPnRvRGl2 KCktPmNhblRydW5jYXRlUmVtYWluZGVyKCkpIHsKLSsgICAgICBpZiAoSGFzUE9XRVI5KCkpIHsK LSsgICAgICAgIG1hc20uYXNfbW9kdXcodGVtcCwgbGhzLCByaHMpOwotKyAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICBtYXNtLmFzX2Rpdnd1KHRlbXAsIGxocywgcmhzKTsKLSsgICAgICAgIG1hc20u YXNfbXVsbHcodGVtcCwgdGVtcCwgcmhzKTsKLSsgICAgICAgIG1hc20uYXNfc3ViZih0ZW1wLCB0 ZW1wLCBsaHMpOwotKyAgICAgIH0KLSsgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgdGVtcCwgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7Ci0rICAgIH0KLSsgICAgbWFz bS5hc19kaXZ3dShvdXRwdXQsIGxocywgcmhzKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIE1vZHVs byBwYXRoLgotKyAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICBtYXNtLmFzX21vZHV3KG91 dHB1dCwgbGhzLCByaHMpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20uYXNfZGl2d3UodGVt cCwgbGhzLCByaHMpOwotKyAgICAgIG1hc20uYXNfbXVsbHcodGVtcCwgdGVtcCwgcmhzKTsKLSsg ICAgICBtYXNtLmFzX3N1YmYob3V0cHV0LCB0ZW1wLCBsaHMpOwotKyAgICB9Ci0rICB9Ci0rCi0r ICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKLSsKLSsgIGlmICghaW5zLT5taXIoKS0+ aXNUcnVuY2F0ZWQoKSkgewotKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwg b3V0cHV0LCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgIH0KLSsKLSsgIG1hc20uYmlu ZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXREaXZPck1vZEk2NChM RGl2T3JNb2RJNjQqIGxpcikgewotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihsaXItPmdl dE9wZXJhbmQoMCkpOwotKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJh bmQoMSkpOwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihsaXItPm91dHB1dCgpKTsK LSsKLSsgIExhYmVsIGRvbmU7Ci0rCi0rICAvLyBEaXZpc2lvbiBieSB6ZXJvIHRyYXAuCi0rICBp ZiAobGlyLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7Ci0rICAgIExhYmVsIG5vblplcm87Ci0rICAg IG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgwKSwgJm5v blplcm8pOwotKyAgICBtYXNtLndhc21UcmFwKHdhc206OlRyYXA6OkludGVnZXJEaXZpZGVCeVpl cm8sIGxpci0+dHJhcFNpdGVEZXNjKCkpOwotKyAgICBtYXNtLmJpbmQoJm5vblplcm8pOwotKyAg fQotKwotKyAgLy8gSU5UNjRfTUlOIC8gLTEgb3ZlcmZsb3cgdHJhcCAoZm9yIGRpdiBvbmx5KS4K LSsgIGlmIChsaXItPmNhbkJlTmVnYXRpdmVPdmVyZmxvdygpKSB7Ci0rICAgIExhYmVsIG5vdE1p bkludDsKLSsgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1X b3JkKElOVDY0X01JTiksICZub3RNaW5JbnQpOwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJs ZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluSW50KTsKLSsgICAgaWYgKGxp ci0+bWlyKCktPmlzRGl2KCkpIHsKLSsgICAgICBtYXNtLndhc21UcmFwKHdhc206OlRyYXA6Oklu dGVnZXJPdmVyZmxvdywgbGlyLT50cmFwU2l0ZURlc2MoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgbWFzbS5tb3ZlUHRyKEltbVdvcmQoMCksIG91dHB1dCk7Ci0rICAgICAgbWFzbS5qdW1wKCZk b25lKTsKLSsgICAgfQotKyAgICBtYXNtLmJpbmQoJm5vdE1pbkludCk7Ci0rICB9Ci0rCi0rICBp ZiAobGlyLT5taXIoKS0+aXNEaXYoKSkgewotKyAgICBtYXNtLmFzX2RpdmQob3V0cHV0LCBsaHMs IHJocyk7Ci0rICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIG1hc20uYXNfbW9kc2Qo b3V0cHV0LCBsaHMsIHJocyk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX2RpdmQob3V0cHV0 LCBsaHMsIHJocyk7Ci0rICAgIG1hc20uYXNfbXVsbGQob3V0cHV0LCBvdXRwdXQsIHJocyk7Ci0r ICAgIG1hc20uYXNfc3ViZihvdXRwdXQsIG91dHB1dCwgbGhzKTsKLSsgIH0KLSsKLSsgIG1hc20u YmluZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRVRGl2T3JNb2RJ NjQoTFVEaXZPck1vZEk2NCogbGlyKSB7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGxp ci0+Z2V0T3BlcmFuZCgwKSk7Ci0rICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0 T3BlcmFuZCgxKSk7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0 KCkpOwotKwotKyAgLy8gRGl2aXNpb24gYnkgemVybyB0cmFwLgotKyAgaWYgKGxpci0+Y2FuQmVE aXZpZGVCeVplcm8oKSkgewotKyAgICBMYWJlbCBub25aZXJvOwotKyAgICBtYXNtLmJyYW5jaFB0 cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJvKTsKLSsgICAg bWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyRGl2aWRlQnlaZXJvLCBsaXItPnRyYXBT aXRlRGVzYygpKTsKLSsgICAgbWFzbS5iaW5kKCZub25aZXJvKTsKLSsgIH0KLSsKLSsgIGlmIChs aXItPm1pcigpLT5pc0RpdigpKSB7Ci0rICAgIG1hc20uYXNfZGl2ZHUob3V0cHV0LCBsaHMsIHJo cyk7Ci0rICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIG1hc20uYXNfbW9kdWQob3V0 cHV0LCBsaHMsIHJocyk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX2RpdmR1KG91dHB1dCwg bGhzLCByaHMpOwotKyAgICBtYXNtLmFzX211bGxkKG91dHB1dCwgb3V0cHV0LCByaHMpOwotKyAg ICBtYXNtLmFzX3N1YmYob3V0cHV0LCBvdXRwdXQsIGxocyk7Ci0rICB9Ci0rfQotKwotKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKy8vIFZpc2l0b3JzOiBCaXR3aXNlCi0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dEJpdE5vdEkoTEJpdE5vdEkqIGlucykgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVy KGlucy0+aW5wdXQoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1 dCgpKTsKLSsgIG1hc20uYXNfbm9yKGRlc3QsIGlucHV0LCBpbnB1dCk7Ci0rICBtYXNtLmFzX2V4 dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Qml0Tm90 STY0KExCaXROb3RJNjQqIGlucykgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyNjQo aW5zLT5pbnB1dCgpKS5yZWc7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9PdXRSZWdpc3RlcjY0KGlu cykucmVnOwotKyAgbWFzbS5hc19ub3IoZGVzdCwgaW5wdXQsIGlucHV0KTsKLSt9Ci0rCi0rdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJpdE9wSShMQml0T3BJKiBpbnMpIHsKLSsgIFJlZ2lzdGVy IGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRv UmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMg PSBpbnMtPmdldE9wZXJhbmQoMSk7Ci0rCi0rICBzd2l0Y2ggKGlucy0+Yml0b3AoKSkgewotKyAg ICBjYXNlIEpTT3A6OkJpdE9yOgotKyAgICAgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAg ICAgICAgbWFzbS5vcjMyKEltbTMyKFRvSW50MzIocmhzKSksIGxocywgZGVzdCk7Ci0rICAgICAg fSBlbHNlIHsKLSsgICAgICAgIG1hc20uYXNfb3JfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMp KTsKLSsgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgfQotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIEpTT3A6OkJpdFhvcjoKLSsgICAgICBpZiAocmhzLT5pc0NvbnN0 YW50KCkpIHsKLSsgICAgICAgIG1hc20ueG9yMzIoSW1tMzIoVG9JbnQzMihyaHMpKSwgbGhzLCBk ZXN0KTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5hc194b3JfKGRlc3QsIGxocywg VG9SZWdpc3RlcihyaHMpKTsKLSsgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0r ICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEpTT3A6OkJpdEFuZDoKLSsgICAgICBp ZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgICAgIG1hc20uYW5kMzIoSW1tMzIoVG9JbnQz MihyaHMpKSwgbGhzLCBkZXN0KTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5hc19h bmRfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgICAgICAgIG1hc20uYXNfZXh0c3co ZGVzdCwgZGVzdCk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAg ICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBiaW5hcnkgb3Bjb2RlIik7Ci0rICB9Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRCaXRPcEk2NChMQml0T3BJNjQqIGxpcikgewotKyAg UmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIobGlyLT5nZXREZWYoMCkpOwotKyAgUmVnaXN0ZXIg bGhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMCkpOwotKyAgY29uc3QgTEFsbG9jYXRp b24qIHJocyA9IGxpci0+Z2V0T3BlcmFuZCgxKTsKLSsKLSsgIHN3aXRjaCAobGlyLT5iaXRvcCgp KSB7Ci0rICAgIGNhc2UgSlNPcDo6Qml0T3I6Ci0rICAgICAgaWYgKHJocy0+aXNDb25zdGFudCgp KSB7Ci0rICAgICAgICBpZiAobGhzICE9IGRlc3QpIHsKLSsgICAgICAgICAgbWFzbS5tb3ZlUHRy KGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBtYXNtLm9yNjQoSW1tNjQoVG9JbnQ2 NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1h c20uYXNfb3JfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgICAgICB9Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgSlNPcDo6Qml0WG9yOgotKyAgICAgIGlmIChyaHMtPmlzQ29uc3Rh bnQoKSkgewotKyAgICAgICAgaWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAgICAgIG1hc20ubW92 ZVB0cihsaHMsIGRlc3QpOwotKyAgICAgICAgfQotKyAgICAgICAgbWFzbS54b3I2NChJbW02NChU b0ludDY0KHJocykpLCBSZWdpc3RlcjY0KGRlc3QpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgbWFzbS5hc194b3JfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgICAgICB9Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgSlNPcDo6Qml0QW5kOgotKyAgICAgIGlmIChyaHMtPmlz Q29uc3RhbnQoKSkgewotKyAgICAgICAgaWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAgICAgIG1h c20ubW92ZVB0cihsaHMsIGRlc3QpOwotKyAgICAgICAgfQotKyAgICAgICAgbWFzbS5hbmQ2NChJ bW02NChUb0ludDY0KHJocykpLCBSZWdpc3RlcjY0KGRlc3QpKTsKLSsgICAgICB9IGVsc2Ugewot KyAgICAgICAgbWFzbS5hc19hbmRfKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgICAg ICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJ1bmV4 cGVjdGVkIGJpbmFyeSBvcGNvZGUiKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdFNoaWZ0SShMU2hpZnRJKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0 ZXIoaW5zLT5saHMoKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5yaHMoKTsK LSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgaWYg KHJocy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIGludDMyX3Qgc2hpZnQgPSBUb0ludDMyKHJocykg JiAweDFmOwotKyAgICBzd2l0Y2ggKGlucy0+Yml0b3AoKSkgewotKyAgICAgIGNhc2UgSlNPcDo6 THNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAgICAgIG1hc20ubHNoaWZ0MzIoSW1t MzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFz bS5tb3ZlMzIobGhzLCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAg IGNhc2UgSlNPcDo6UnNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAgICAgIG1hc20u cnNoaWZ0MzJBcml0aG1ldGljKEltbTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKLSsgICAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICAgIG1hc20ubW92ZTMyKGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0r ICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEpTT3A6OlVyc2g6Ci0rICAgICAgICBpZiAoc2hp ZnQpIHsKLSsgICAgICAgICAgbWFzbS5yc2hpZnQzMihJbW0zMihzaGlmdCksIGxocywgZGVzdCk7 Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAvLyB4ID4+PiAwIGNhbiBwcm9kdWNlIHZh bHVlcyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4KLSsgICAgICAgICAgbWFz bS5tb3ZlMzIobGhzLCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChpbnMtPm1pcigp LT50b1Vyc2goKS0+ZmFsbGlibGUoKSkgewotKyAgICAgICAgICAvLyB4ID4+PiAwIGNhbiBwcm9k dWNlIHZhbHVlcyB0aGF0IGRvbid0IGZpdCBpbiBzaWduZWQgaW50MzIuCi0rICAgICAgICAgIGJh aWxvdXRDbXAzMihBc3NlbWJsZXI6Okxlc3NUaGFuLCBkZXN0LCBJbW0zMigwKSwgaW5zLT5zbmFw c2hvdCgpKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0r ICAgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgc2hpZnQgb3Bjb2RlIik7Ci0rICAgIH0KLSsg IH0gZWxzZSB7Ci0rICAgIFJlZ2lzdGVyIHNoaWZ0UmVnID0gVG9SZWdpc3RlcihyaHMpOwotKyAg ICAvLyBQUEMgc2x3L3Nydy9zcmF3IHVzZSA2IGJpdHMgb2Ygc2hpZnQgYW1vdW50OyBKUyByZXF1 aXJlcyBtb2QgMzIuCi0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwot KyAgICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1hc20uYXNfcmx3 aW5tKG1hc2tlZCwgc2hpZnRSZWcsIDAsIDI3LCAzMSk7Ci0rICAgIHN3aXRjaCAoaW5zLT5iaXRv cCgpKSB7Ci0rICAgICAgY2FzZSBKU09wOjpMc2g6Ci0rICAgICAgICBtYXNtLmFzX3NsdyhkZXN0 LCBsaHMsIG1hc2tlZCk7Ci0rICAgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpSc2g6Ci0rICAgICAgICBtYXNtLmFzX3Ny YXcoZGVzdCwgbGhzLCBtYXNrZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09w OjpVcnNoOgotKyAgICAgICAgbWFzbS5hc19zcncoZGVzdCwgbGhzLCBtYXNrZWQpOwotKyAgICAg ICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgICAgICAgIGlmIChpbnMtPm1pcigpLT50 b1Vyc2goKS0+ZmFsbGlibGUoKSkgewotKyAgICAgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVy OjpMZXNzVGhhbiwgZGVzdCwgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7Ci0rICAgICAgICB9 Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNIKCJ1 bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOwotKyAgICB9Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRTaGlmdEludFB0cihMU2hpZnRJbnRQdHIqIGlucykgewotKyAgUmVn aXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygpKTsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBU b1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgaWYgKGlucy0+cmhzKCktPmlzQ29uc3Rh bnQoKSkgewotKyAgICAvLyBTaGlmdEludFB0cidzIFJIUyBjb25zdGFudCBpcyBJbnRQdHItIG9y IEludDMyLXR5cGVkLCBub3QgSW50NjQuIFVzZQotKyAgICAvLyBUb0ludFB0cigpIHdoaWNoIGRp c3BhdGNoZXMgb24gdGhlIHVuZGVybHlpbmcgTUlSVHlwZSAodGhlIHByZXZpb3VzCi0rICAgIC8v IE1Db25zdGFudDo6dG9JbnQ2NCgpIGNhbGwgYXNzZXJ0ZWQgd2hlbiB0aGUgY29uc3RhbnQgd2Fz bid0IEludDY0KS4KLSsgICAgaW50MzJfdCBzaGlmdCA9IGludDMyX3QoVG9JbnRQdHIoaW5zLT5y aHMoKSkpICYgMHgzZjsKLSsgICAgc3dpdGNoIChpbnMtPmJpdG9wKCkpIHsKLSsgICAgICBjYXNl IEpTT3A6OkxzaDoKLSsgICAgICAgIGlmIChzaGlmdCkgewotKyAgICAgICAgICBtYXNtLmxzaGlm dFB0cihJbW0zMihzaGlmdCksIGxocywgZGVzdCk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFr OwotKyAgICAgIGNhc2UgSlNPcDo6UnNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAg ICAgIG1hc20ucnNoaWZ0UHRyQXJpdGhtZXRpYyhJbW0zMihzaGlmdCksIGxocywgZGVzdCk7Ci0r ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKLSsg ICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgSlNPcDo6VXJzaDoKLSsgICAg ICAgIGlmIChzaGlmdCkgewotKyAgICAgICAgICBtYXNtLnJzaGlmdFB0cihJbW0zMihzaGlmdCks IGxocywgZGVzdCk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBtYXNtLm1vdmVQdHIo bGhzLCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6 Ci0rICAgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgc2hpZnQgb3Bjb2RlIik7Ci0rICAgIH0K LSsgIH0gZWxzZSB7Ci0rICAgIFJlZ2lzdGVyIHNoaWZ0UmVnID0gVG9SZWdpc3RlcihpbnMtPnJo cygpKTsKLSsgICAgLy8gc2xkL3NyZC9zcmFkIHVzZSB0aGUgbG93IDcgYml0cyBvZiB0aGUgc2hp ZnQgY291bnQ6IGNvdW50cyA+PSA2NAotKyAgICAvLyBwcm9kdWNlIDAgKHNpZ24tZmlsbCBmb3Ig c3JhZCkuIE1hc2sgdG8gNiBiaXRzIGZvciBtb2QtNjQgc2VtYW50aWNzLgotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgICAgUmVnaXN0ZXIgbWFza2VkID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgICBtYXNtLmFzX3JsZGljbChtYXNrZWQsIHNoaWZ0UmVnLCAwLCA1 OCk7Ci0rICAgIHN3aXRjaCAoaW5zLT5iaXRvcCgpKSB7Ci0rICAgICAgY2FzZSBKU09wOjpMc2g6 Ci0rICAgICAgICBtYXNtLmFzX3NsZChkZXN0LCBsaHMsIG1hc2tlZCk7Ci0rICAgICAgICBicmVh azsKLSsgICAgICBjYXNlIEpTT3A6OlJzaDoKLSsgICAgICAgIG1hc20uYXNfc3JhZChkZXN0LCBs aHMsIG1hc2tlZCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEpTT3A6OlVyc2g6Ci0r ICAgICAgICBtYXNtLmFzX3NyZChkZXN0LCBsaHMsIG1hc2tlZCk7Ci0rICAgICAgICBicmVhazsK LSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9w Y29kZSIpOwotKyAgICB9Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRT aGlmdEk2NChMU2hpZnRJNjQqIGxpcikgewotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcjY0 KGxpci0+bGhzKCkpLnJlZzsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBUb091dFJlZ2lzdGVyNjQobGly KS5yZWc7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gbGlyLT5yaHMoKTsKLSsKLSsgIGlm IChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAgICBpbnQzMl90IHNoaWZ0ID0gaW50MzJfdChyaHMt PnRvQ29uc3RhbnQoKS0+dG9JbnQ2NCgpKSAmIDB4M2Y7Ci0rICAgIHN3aXRjaCAobGlyLT5iaXRv cCgpKSB7Ci0rICAgICAgY2FzZSBKU09wOjpMc2g6Ci0rICAgICAgICBpZiAoc2hpZnQpIHsKLSsg ICAgICAgICAgbWFzbS5sc2hpZnRQdHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgICAg ICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEpTT3A6OlJzaDoKLSsgICAgICAgIGlm IChzaGlmdCkgewotKyAgICAgICAgICBtYXNtLnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIoc2hp ZnQpLCBsaHMsIGRlc3QpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFzbS5tb3Zl UHRyKGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNl IEpTT3A6OlVyc2g6Ci0rICAgICAgICBpZiAoc2hpZnQpIHsKLSsgICAgICAgICAgbWFzbS5yc2hp ZnRQdHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAg ICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVh azsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0 IG9wY29kZSIpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBSZWdpc3RlciBzaGlmdFJlZyA9 IFRvUmVnaXN0ZXIocmhzKTsKLSsgICAgLy8gV2FzbSBpNjQgc2hpZnRzIHJlcXVpcmUgc2hpZnQg Y291bnQgbW9kdWxvIDY0LiBQUEM2NCBzbGQvc3JkL3NyYWQKLSsgICAgLy8gdXNlIGEgNy1iaXQg c2hpZnQgZmllbGQsIHNvIHNoaWZ0cyA+PSA2NCBwcm9kdWNlIDAgKG9yIHNpZ24tZmlsbAotKyAg ICAvLyBmb3Igc3JhZCkuIE1hc2sgdG8gNiBiaXRzIGZpcnN0LgotKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgICAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgICBtYXNtLmFzX3JsZGljbChtYXNrZWQsIHNoaWZ0UmVnLCAwLCA1OCk7ICAv LyBjbHJsZGk6IGtlZXAgbG93IDYgYml0cwotKyAgICBzd2l0Y2ggKGxpci0+Yml0b3AoKSkgewot KyAgICAgIGNhc2UgSlNPcDo6THNoOgotKyAgICAgICAgbWFzbS5hc19zbGQoZGVzdCwgbGhzLCBt YXNrZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpSc2g6Ci0rICAgICAg ICBtYXNtLmFzX3NyYWQoZGVzdCwgbGhzLCBtYXNrZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAg ICAgY2FzZSBKU09wOjpVcnNoOgotKyAgICAgICAgbWFzbS5hc19zcmQoZGVzdCwgbGhzLCBtYXNr ZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFT SCgidW5leHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0VXJzaEQoTFVyc2hEKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxo cyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0g aW5zLT5yaHMoKTsKLSsgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMt Pm91dHB1dCgpKTsKLSsKLSsgIFJlZ2lzdGVyIHRlbXAgPSBUb1JlZ2lzdGVyKGlucy0+dGVtcDAo KSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgaW50MzJfdCBzaGlmdCA9 IFRvSW50MzIocmhzKSAmIDB4MWY7Ci0rICAgIGlmIChzaGlmdCkgewotKyAgICAgIG1hc20ucnNo aWZ0MzIoSW1tMzIoc2hpZnQpLCBsaHMsIHRlbXApOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1h c20ubW92ZTMyKGxocywgdGVtcCk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20ubW92 ZTMyKGxocywgdGVtcCk7Ci0rICAgIG1hc20ucnNoaWZ0MzIoVG9SZWdpc3RlcihyaHMpLCB0ZW1w KTsKLSsgIH0KLSsKLSsgIG1hc20uY29udmVydFVJbnQzMlRvRG91YmxlKHRlbXAsIGRlc3QpOwot K30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsvLyBWaXNpdG9yczogRmxvYXRpbmctcG9pbnQgYXJpdGhtZXRp YwotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNYXRoRChMTWF0aEQqIG1hdGgpIHsKLSsg IEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKG1hdGgtPmxocygpKTsKLSsgIEZs b2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKG1hdGgtPnJocygpKTsKLSsgIEZsb2F0 UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5vdXRwdXQoKSk7Ci0rCi0rICBz d2l0Y2ggKG1hdGgtPmpzb3AoKSkgewotKyAgICBjYXNlIEpTT3A6OkFkZDoKLSsgICAgICBtYXNt LmFzX2ZhZGQoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEpTT3A6 OlN1YjoKLSsgICAgICBtYXNtLmFzX2ZzdWIoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIEpTT3A6Ok11bDoKLSsgICAgICBtYXNtLmFzX2ZtdWwoZGVzdCwgbGhzLCBy aHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEpTT3A6OkRpdjoKLSsgICAgICBtYXNtLmFz X2ZkaXYoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAg ICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBkb3VibGUgb3Bjb2RlIik7Ci0rICB9Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNYXRoRihMTWF0aEYqIG1hdGgpIHsKLSsgIEZsb2F0 UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKG1hdGgtPmxocygpKTsKLSsgIEZsb2F0UmVn aXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKG1hdGgtPnJocygpKTsKLSsgIEZsb2F0UmVnaXN0 ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5vdXRwdXQoKSk7Ci0rCi0rICBzd2l0Y2gg KG1hdGgtPmpzb3AoKSkgewotKyAgICBjYXNlIEpTT3A6OkFkZDoKLSsgICAgICBtYXNtLmFzX2Zh ZGRzKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBKU09wOjpTdWI6 Ci0rICAgICAgbWFzbS5hc19mc3VicyhkZXN0LCBsaHMsIHJocyk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgSlNPcDo6TXVsOgotKyAgICAgIG1hc20uYXNfZm11bHMoZGVzdCwgbGhzLCByaHMp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEpTT3A6OkRpdjoKLSsgICAgICBtYXNtLmFzX2Zk aXZzKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAg ICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgZmxvYXQzMiBvcGNvZGUiKTsKLSsgIH0KLSt9Ci0rCi0r dm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1pbk1heEQoTE1pbk1heEQqIGlucykgewotKyAgRmxv YXRSZWdpc3RlciBmaXJzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmZpcnN0KCkpOwotKyAgRmxv YXRSZWdpc3RlciBzZWNvbmQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zZWNvbmQoKSk7Ci0rICBt b3ppbGxhOjpEZWJ1Z09ubHk8RmxvYXRSZWdpc3Rlcj4gb3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVy KGlucy0+b3V0cHV0KCkpOwotKwotKyAgTU9aX0FTU0VSVChmaXJzdCA9PSBvdXRwdXQpOwotKyAg aWYgKGlucy0+bWlyKCktPmlzTWF4KCkpIHsKLSsgICAgbWFzbS5tYXhEb3VibGUoc2Vjb25kLCBm aXJzdCwgLyogaGFuZGxlTmFOID0gKi8gdHJ1ZSk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLm1p bkRvdWJsZShzZWNvbmQsIGZpcnN0LCAvKiBoYW5kbGVOYU4gPSAqLyB0cnVlKTsKLSsgIH0KLSt9 Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1pbk1heEYoTE1pbk1heEYqIGlucykgewot KyAgRmxvYXRSZWdpc3RlciBmaXJzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmZpcnN0KCkpOwot KyAgRmxvYXRSZWdpc3RlciBzZWNvbmQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zZWNvbmQoKSk7 Ci0rICBtb3ppbGxhOjpEZWJ1Z09ubHk8RmxvYXRSZWdpc3Rlcj4gb3V0cHV0ID0gVG9GbG9hdFJl Z2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgTU9aX0FTU0VSVChmaXJzdCA9PSBvdXRwdXQp OwotKyAgaWYgKGlucy0+bWlyKCktPmlzTWF4KCkpIHsKLSsgICAgbWFzbS5tYXhGbG9hdDMyKHNl Y29uZCwgZmlyc3QsIC8qIGhhbmRsZU5hTiA9ICovIHRydWUpOwotKyAgfSBlbHNlIHsKLSsgICAg bWFzbS5taW5GbG9hdDMyKHNlY29uZCwgZmlyc3QsIC8qIGhhbmRsZU5hTiA9ICovIHRydWUpOwot KyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TmVnRChMTmVnRCogaW5zKSB7 Ci0rICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+aW5wdXQoKSk7 Ci0rICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgp KTsKLSsgIG1hc20uYXNfZm5lZyhvdXRwdXQsIGlucHV0KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdE5lZ0YoTE5lZ0YqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9 IFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpOwotKyAgRmxvYXRSZWdpc3RlciBvdXRwdXQg PSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBtYXNtLmFzX2ZuZWcob3V0cHV0 LCBpbnB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRQb3dIYWxmRChMUG93 SGFsZkQqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3Rlcihp bnMtPmlucHV0KCkpOwotKyAgRmxvYXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIo aW5zLT5vdXRwdXQoKSk7Ci0rCi0rICBMYWJlbCBkb25lLCBza2lwOwotKwotKyAgLy8gQ2hlY2sg Zm9yIC1JbmZpbml0eS4KLSsgIG1hc20ubG9hZENvbnN0YW50RG91YmxlKE5lZ2F0aXZlSW5maW5p dHk8ZG91YmxlPigpLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIG1hc20uYnJhbmNoRG91YmxlKEFz c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgaW5wdXQsCi0rICAgICAgICAgICAg ICAgICAgICBTY3JhdGNoRG91YmxlUmVnLCAmc2tpcCk7Ci0rICBtYXNtLmxvYWRDb25zdGFudERv dWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCksIG91dHB1dCk7Ci0r ICBtYXNtLmp1bXAoJmRvbmUpOwotKwotKyAgbWFzbS5iaW5kKCZza2lwKTsKLSsgIC8vIEFkZCAw LjAgdG8gaGFuZGxlIC0wLgotKyAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoMC4wLCBTY3JhdGNo RG91YmxlUmVnKTsKLSsgIG1hc20uYXNfZmFkZChvdXRwdXQsIGlucHV0LCBTY3JhdGNoRG91Ymxl UmVnKTsKLSsgIG1hc20uYXNfZnNxcnQob3V0cHV0LCBvdXRwdXQpOwotKwotKyAgbWFzbS5iaW5k KCZkb25lKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE5vdEQoTE5vdEQqIGlu cykgewotKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0 KCkpOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rCi0r ICBtYXNtLmxvYWRDb25zdGFudERvdWJsZSgwLjAsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgbWFz bS5hc19mY21wdShpbnB1dCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBtYXNtLm1hX2NtcF9zZXRf ZGJsKGRlc3QsIEFzc2VtYmxlcjo6RG91YmxlRXF1YWxPclVub3JkZXJlZCk7Ci0rfQotKwotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROb3RGKExOb3RGKiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0 ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKLSsgIFJlZ2lzdGVyIGRl c3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgbWFzbS5sb2FkQ29uc3RhbnRG bG9hdDMyKDAuMGYsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKLSsgIG1hc20uYXNfZmNtcHUoaW5wdXQs IFNjcmF0Y2hGbG9hdDMyUmVnKTsKLSsgIG1hc20ubWFfY21wX3NldF9kYmwoZGVzdCwgQXNzZW1i bGVyOjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVmlz aXRvcnM6IEZQIGNvbXBhcmlzb25zIGFuZCBicmFuY2hlcwotKwotK3ZvaWQgQ29kZUdlbmVyYXRv cjo6dmlzaXRDb21wYXJlRChMQ29tcGFyZUQqIGNvbXApIHsKLSsgIEZsb2F0UmVnaXN0ZXIgbGhz ID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPmxlZnQoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIHJocyA9 IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5yaWdodCgpKTsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1Jl Z2lzdGVyKGNvbXAtPm91dHB1dCgpKTsKLSsgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNv bmQgPQotKyAgICAgIGNvbXAtPm1pcigpLT5qc29wKCkgPT0gSlNPcDo6U3RyaWN0RXEgPyBBc3Nl bWJsZXI6OkRvdWJsZUVxdWFsCi0rICAgICAgOiBjb21wLT5taXIoKS0+anNvcCgpID09IEpTT3A6 OlN0cmljdE5lCi0rICAgICAgICAgID8gQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl cmVkCi0rICAgICAgICAgIDogSlNPcFRvRG91YmxlQ29uZGl0aW9uKGNvbXAtPm1pcigpLT5qc29w KCkpOwotKwotKyAgbWFzbS5hc19mY21wdShsaHMsIHJocyk7Ci0rICBtYXNtLm1hX2NtcF9zZXRf ZGJsKGRlc3QsIGNvbmQpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Q29tcGFy ZUYoTENvbXBhcmVGKiBjb21wKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdp c3Rlcihjb21wLT5sZWZ0KCkpOwotKyAgRmxvYXRSZWdpc3RlciByaHMgPSBUb0Zsb2F0UmVnaXN0 ZXIoY29tcC0+cmlnaHQoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rlcihjb21wLT5v dXRwdXQoKSk7Ci0rICBBc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kID0KLSsgICAgICBj b21wLT5taXIoKS0+anNvcCgpID09IEpTT3A6OlN0cmljdEVxID8gQXNzZW1ibGVyOjpEb3VibGVF cXVhbAotKyAgICAgIDogY29tcC0+bWlyKCktPmpzb3AoKSA9PSBKU09wOjpTdHJpY3ROZQotKyAg ICAgICAgICA/IEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZAotKyAgICAgICAg ICA6IEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21wLT5taXIoKS0+anNvcCgpKTsKLSsKLSsgIG1h c20uYXNfZmNtcHUobGhzLCByaHMpOwotKyAgbWFzbS5tYV9jbXBfc2V0X2RibChkZXN0LCBjb25k KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVEQW5kQnJhbmNoKExD b21wYXJlREFuZEJyYW5jaCogY29tcCkgewotKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0 UmVnaXN0ZXIoY29tcC0+bGVmdCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJl Z2lzdGVyKGNvbXAtPnJpZ2h0KCkpOwotKwotKyAgQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24g Y29uZCA9Ci0rICAgICAgSlNPcFRvRG91YmxlQ29uZGl0aW9uKGNvbXAtPmNtcE1pcigpLT5qc29w KCkpOwotKyAgTUJhc2ljQmxvY2sqIGlmVHJ1ZSA9IGNvbXAtPmlmVHJ1ZSgpOwotKyAgTUJhc2lj QmxvY2sqIGlmRmFsc2UgPSBjb21wLT5pZkZhbHNlKCk7Ci0rCi0rICBpZiAoaXNOZXh0QmxvY2so aWZGYWxzZS0+bGlyKCkpKSB7Ci0rICAgIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpEb3VibGVG bG9hdCwgY29uZCwgbGhzLCByaHMsIGlmVHJ1ZSk7Ci0rICB9IGVsc2UgewotKyAgICBicmFuY2hU b0Jsb2NrKEFzc2VtYmxlcjo6RG91YmxlRmxvYXQsIEFzc2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9u KGNvbmQpLCBsaHMsCi0rICAgICAgICAgICAgICAgICAgcmhzLCBpZkZhbHNlKTsKLSsgICAganVt cFRvQmxvY2soaWZUcnVlKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dENvbXBhcmVGQW5kQnJhbmNoKExDb21wYXJlRkFuZEJyYW5jaCogY29tcCkgewotKyAgRmxvYXRS ZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29tcC0+bGVmdCgpKTsKLSsgIEZsb2F0UmVn aXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPnJpZ2h0KCkpOwotKwotKyAgQXNzZW1i bGVyOjpEb3VibGVDb25kaXRpb24gY29uZCA9Ci0rICAgICAgSlNPcFRvRG91YmxlQ29uZGl0aW9u KGNvbXAtPmNtcE1pcigpLT5qc29wKCkpOwotKyAgTUJhc2ljQmxvY2sqIGlmVHJ1ZSA9IGNvbXAt PmlmVHJ1ZSgpOwotKyAgTUJhc2ljQmxvY2sqIGlmRmFsc2UgPSBjb21wLT5pZkZhbHNlKCk7Ci0r Ci0rICBpZiAoaXNOZXh0QmxvY2soaWZGYWxzZS0+bGlyKCkpKSB7Ci0rICAgIGJyYW5jaFRvQmxv Y2soQXNzZW1ibGVyOjpTaW5nbGVGbG9hdCwgY29uZCwgbGhzLCByaHMsIGlmVHJ1ZSk7Ci0rICB9 IGVsc2UgewotKyAgICBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6U2luZ2xlRmxvYXQsIEFzc2Vt Ymxlcjo6SW52ZXJ0Q29uZGl0aW9uKGNvbmQpLCBsaHMsCi0rICAgICAgICAgICAgICAgICAgcmhz LCBpZkZhbHNlKTsKLSsgICAganVtcFRvQmxvY2soaWZUcnVlKTsKLSsgIH0KLSt9Ci0rCi0rdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFRlc3REQW5kQnJhbmNoKExUZXN0REFuZEJyYW5jaCogdGVz dCkgewotKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3Rlcih0ZXN0LT5pbnB1 dCgpKTsKLSsKLSsgIE1CYXNpY0Jsb2NrKiBpZlRydWUgPSB0ZXN0LT5pZlRydWUoKTsKLSsgIE1C YXNpY0Jsb2NrKiBpZkZhbHNlID0gdGVzdC0+aWZGYWxzZSgpOwotKwotKyAgbWFzbS5sb2FkQ29u c3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsKLSsgIGlmIChpc05leHRCbG9j ayhpZkZhbHNlLT5saXIoKSkpIHsKLSsgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OkRvdWJs ZUZsb2F0LCBBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAg ICAgICBTY3JhdGNoRG91YmxlUmVnLCBpZlRydWUpOwotKyAgfSBlbHNlIHsKLSsgICAgYnJhbmNo VG9CbG9jayhBc3NlbWJsZXI6OkRvdWJsZUZsb2F0LCBBc3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JV bm9yZGVyZWQsCi0rICAgICAgICAgICAgICAgICAgaW5wdXQsIFNjcmF0Y2hEb3VibGVSZWcsIGlm RmFsc2UpOwotKyAgICBqdW1wVG9CbG9jayhpZlRydWUpOwotKyAgfQotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0VGVzdEZBbmRCcmFuY2goTFRlc3RGQW5kQnJhbmNoKiB0ZXN0KSB7 Ci0rICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9hdFJlZ2lzdGVyKHRlc3QtPmlucHV0KCkp OwotKwotKyAgTUJhc2ljQmxvY2sqIGlmVHJ1ZSA9IHRlc3QtPmlmVHJ1ZSgpOwotKyAgTUJhc2lj QmxvY2sqIGlmRmFsc2UgPSB0ZXN0LT5pZkZhbHNlKCk7Ci0rCi0rICBtYXNtLmxvYWRDb25zdGFu dEZsb2F0MzIoMC4wZiwgU2NyYXRjaEZsb2F0MzJSZWcpOwotKwotKyAgaWYgKGlzTmV4dEJsb2Nr KGlmRmFsc2UtPmxpcigpKSkgewotKyAgICBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6U2luZ2xl RmxvYXQsIEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsIGlucHV0LAotKyAgICAgICAgICAgICAg ICAgIFNjcmF0Y2hGbG9hdDMyUmVnLCBpZlRydWUpOwotKyAgfSBlbHNlIHsKLSsgICAgYnJhbmNo VG9CbG9jayhBc3NlbWJsZXI6OlNpbmdsZUZsb2F0LCBBc3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JV bm9yZGVyZWQsCi0rICAgICAgICAgICAgICAgICAgaW5wdXQsIFNjcmF0Y2hGbG9hdDMyUmVnLCBp ZkZhbHNlKTsKLSsgICAganVtcFRvQmxvY2soaWZUcnVlKTsKLSsgIH0KLSt9Ci0rCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gVmlzaXRvcnM6IFRydW5jYXRpb24KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0VHJ1bmNhdGVEVG9JbnQzMihMVHJ1bmNhdGVEVG9JbnQzMiogaW5zKSB7Ci0rICBlbWl0VHJ1 bmNhdGVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGlucy0+aW5wdXQoKSksIFRvUmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSksCi0rICAgICAgICAgICAgICAgICAgICAgaW5zLT5taXIoKSk7Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRUcnVuY2F0ZUZUb0ludDMyKExUcnVuY2F0ZUZUb0lu dDMyKiBpbnMpIHsKLSsgIGVtaXRUcnVuY2F0ZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGlucy0+ aW5wdXQoKSksIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSksCi0rICAgICAgICAgICAgICAgICAg ICAgIGlucy0+bWlyKCkpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBWaXNpdG9yczogSW50NjQg LyBXYXNtIHR5cGUgY29udmVyc2lvbnMKLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0RXh0 ZW5kSW50MzJUb0ludDY0KExFeHRlbmRJbnQzMlRvSW50NjQqIGxpcikgewotKyAgUmVnaXN0ZXIg aW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBU b1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKwotKyAgaWYgKGxpci0+bWlyKCktPmlzVW5zaWdu ZWQoKSkgewotKyAgICBtYXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5kKGlucHV0LCBSZWdpc3RlcjY0 KG91dHB1dCkpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19leHRzdyhvdXRwdXQsIGlucHV0 KTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdyYXBJbnQ2NFRvSW50 MzIoTFdyYXBJbnQ2NFRvSW50MzIqIGxpcikgewotKyAgY29uc3QgTEludDY0QWxsb2NhdGlvbiBp bnB1dCA9IGxpci0+aW5wdXQoKTsKLSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIobGly LT5vdXRwdXQoKSk7Ci0rCi0rICBpZiAobGlyLT5taXIoKS0+Ym90dG9tSGFsZigpKSB7Ci0rICAg IGlmIChpbnB1dC52YWx1ZSgpLmlzTWVtb3J5KCkpIHsKLSsgICAgICBtYXNtLmxvYWQzMihUb0Fk ZHJlc3MoaW5wdXQpLCBvdXRwdXQpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20ubW92ZTY0 VG8zMihUb1JlZ2lzdGVyNjQoaW5wdXQpLCBvdXRwdXQpOwotKyAgICB9Ci0rICB9IGVsc2Ugewot KyAgICAvLyBUaGUgb25seSBwcm9kdWNlciBvZiBgYm90dG9tSGFsZj1mYWxzZWAgTVdyYXBJbnQ2 NFRvSW50MzIgaW4gdGhlCi0rICAgIC8vIGN1cnJlbnQgTUlSIHBpcGVsaW5lIGlzIHRoZSBHUFIt cGFpciBhcmd1bWVudCBzcGxpdHRlciBpbgotKyAgICAvLyBXYXNtSW9uQ29tcGlsZS5jcHAsIHdo aWNoIGlzIGdhdGVkIG9uIEpTX0NPREVHRU5fUkVHSVNURVJfUEFJUgotKyAgICAvLyAoMzItYml0 IEFSTSBvbmx5KS4gUFBDNjQgaXMgNjQtYml0IGFuZCBuZXZlciByZWFjaGVzIHRoaXMgcGF0aC4K LSsgICAgLy8gTWF0Y2hlcyB0aGUgc2FtZSBkZWZlbnNpdmUgY3Jhc2ggaW4geDY0IC8gQVJNNjQg YmFja2VuZHMuCi0rICAgIE1PWl9DUkFTSCgiTm90IGltcGxlbWVudGVkLiIpOwotKyAgfQotK30K LSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U2lnbkV4dGVuZEludDY0KExTaWduRXh0ZW5k SW50NjQqIGxpcikgewotKyAgUmVnaXN0ZXI2NCBpbnB1dCA9IFRvUmVnaXN0ZXI2NChsaXItPmlu cHV0KCkpOwotKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKLSsK LSsgIHN3aXRjaCAobGlyLT5taXIoKS0+bW9kZSgpKSB7Ci0rICAgIGNhc2UgTVNpZ25FeHRlbmRJ bnQ2NDo6Qnl0ZToKLSsgICAgICBtYXNtLmFzX2V4dHNiKG91dHB1dC5yZWcsIGlucHV0LnJlZyk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTVNpZ25FeHRlbmRJbnQ2NDo6SGFsZjoKLSsgICAg ICBtYXNtLmFzX2V4dHNoKG91dHB1dC5yZWcsIGlucHV0LnJlZyk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgTVNpZ25FeHRlbmRJbnQ2NDo6V29yZDoKLSsgICAgICBtYXNtLmFzX2V4dHN3KG91 dHB1dC5yZWcsIGlucHV0LnJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICB9Ci0rfQotKwotK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtRXh0ZW5kVTMySW5kZXgoTFdhc21FeHRlbmRVMzJJbmRl eCogbGlyKSB7Ci0rICBSZWdpc3RlciBpbnB1dCA9IFRvUmVnaXN0ZXIobGlyLT5pbnB1dCgpKTsK LSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBtYXNt Lm1vdmUzMlRvNjRaZXJvRXh0ZW5kKGlucHV0LCBSZWdpc3RlcjY0KG91dHB1dCkpOwotK30KLSsK LSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVdyYXBVMzJJbmRleChMV2FzbVdyYXBVMzJJ bmRleCogbGlyKSB7Ci0rICBSZWdpc3RlciBpbnB1dCA9IFRvUmVnaXN0ZXIobGlyLT5pbnB1dCgp KTsKLSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBt YXNtLm1vdmUzMihpbnB1dCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFdhc21UcnVuY2F0ZVRvSW50MzIoTFdhc21UcnVuY2F0ZVRvSW50MzIqIGxpcikgewotKyAg YXV0byBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXItPmlucHV0KCkpOwotKyAgYXV0byBvdXRw dXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKwotKyAgTVdhc21UcnVuY2F0ZVRvSW50 MzIqIG1pciA9IGxpci0+bWlyKCk7Ci0rICBNSVJUeXBlIGZyb21UeXBlID0gbWlyLT5pbnB1dCgp LT50eXBlKCk7Ci0rCi0rICBNT1pfQVNTRVJUKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSB8 fCBmcm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKLSsKLSsgIGF1dG8qIG9vbCA9IG5ldyAo YWxsb2MoKSkgT3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2sobWlyLCBpbnB1dCwgb3V0cHV0KTsK LSsgIGFkZE91dE9mTGluZUNvZGUob29sLCBtaXIpOwotKwotKyAgTGFiZWwqIG9vbEVudHJ5ID0g b29sLT5lbnRyeSgpOwotKyAgaWYgKG1pci0+aXNVbnNpZ25lZCgpKSB7Ci0rICAgIGlmIChmcm9t VHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgICBtYXNtLndhc21UcnVuY2F0ZURvdWJs ZVRvVUludDMyKGlucHV0LCBvdXRwdXQsIG1pci0+aXNTYXR1cmF0aW5nKCksCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xFbnRyeSk7Ci0rICAgIH0gZWxzZSBpZiAo ZnJvbVR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMikgewotKyAgICAgIG1hc20ud2FzbVRydW5jYXRl RmxvYXQzMlRvVUludDMyKGlucHV0LCBvdXRwdXQsIG1pci0+aXNTYXR1cmF0aW5nKCksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwotKyAgICB9IGVs c2UgewotKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCB0eXBlIik7Ci0rICAgIH0KLSsKLSsg ICAgbWFzbS5iaW5kKG9vbC0+cmVqb2luKCkpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBp ZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgIG1hc20ud2FzbVRydW5jYXRl RG91YmxlVG9JbnQzMihpbnB1dCwgb3V0cHV0LCBtaXItPmlzU2F0dXJhdGluZygpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwotKyAgfSBlbHNlIGlmIChm cm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKSB7Ci0rICAgIG1hc20ud2FzbVRydW5jYXRlRmxv YXQzMlRvSW50MzIoaW5wdXQsIG91dHB1dCwgbWlyLT5pc1NhdHVyYXRpbmcoKSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xFbnRyeSk7Ci0rICB9IGVsc2UgewotKyAg ICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgdHlwZSIpOwotKyAgfQotKwotKyAgbWFzbS5iaW5kKG9v bC0+cmVqb2luKCkpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVRydW5j YXRlVG9JbnQ2NChMV2FzbVRydW5jYXRlVG9JbnQ2NCogbGlyKSB7Ci0rICBGbG9hdFJlZ2lzdGVy IGlucHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGxpci0+aW5wdXQoKSk7Ci0rICBSZWdpc3RlcjY0IG91 dHB1dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOwotKwotKyAgTVdhc21UcnVuY2F0ZVRvSW50NjQq IG1pciA9IGxpci0+bWlyKCk7Ci0rICBNSVJUeXBlIGZyb21UeXBlID0gbWlyLT5pbnB1dCgpLT50 eXBlKCk7Ci0rCi0rICBNT1pfQVNTRVJUKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSB8fCBm cm9tVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKLSsKLSsgIGF1dG8qIG9vbCA9IG5ldyAoYWxs b2MoKSkgT3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2sobWlyLCBpbnB1dCwgb3V0cHV0KTsKLSsg IGFkZE91dE9mTGluZUNvZGUob29sLCBtaXIpOwotKwotKyAgTGFiZWwqIG9vbEVudHJ5ID0gb29s LT5lbnRyeSgpOwotKyAgTGFiZWwqIG9vbFJlam9pbiA9IG9vbC0+cmVqb2luKCk7Ci0rICBib29s IGlzU2F0dXJhdGluZyA9IG1pci0+aXNTYXR1cmF0aW5nKCk7Ci0rCi0rICBpZiAoZnJvbVR5cGUg PT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgIGlmIChtaXItPmlzVW5zaWduZWQoKSkgewotKyAg ICAgIG1hc20ud2FzbVRydW5jYXRlRG91YmxlVG9VSW50NjQoaW5wdXQsIG91dHB1dCwgaXNTYXR1 cmF0aW5nLCBvb2xFbnRyeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9vbFJlam9pbiwgSW52YWxpZEZsb2F0UmVnKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNt Lndhc21UcnVuY2F0ZURvdWJsZVRvSW50NjQoaW5wdXQsIG91dHB1dCwgaXNTYXR1cmF0aW5nLCBv b2xFbnRyeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sUmVqb2lu LCBJbnZhbGlkRmxvYXRSZWcpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBpZiAobWlyLT5p c1Vuc2lnbmVkKCkpIHsKLSsgICAgICBtYXNtLndhc21UcnVuY2F0ZUZsb2F0MzJUb1VJbnQ2NChp bnB1dCwgb3V0cHV0LCBpc1NhdHVyYXRpbmcsIG9vbEVudHJ5LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9vbFJlam9pbiwgSW52YWxpZEZsb2F0UmVnKTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICBtYXNtLndhc21UcnVuY2F0ZUZsb2F0MzJUb0ludDY0KGlucHV0LCBv dXRwdXQsIGlzU2F0dXJhdGluZywgb29sRW50cnksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvb2xSZWpvaW4sIEludmFsaWRGbG9hdFJlZyk7Ci0rICAgIH0KLSsgIH0K LSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEludDY0VG9GbG9hdGluZ1BvaW50KExJ bnQ2NFRvRmxvYXRpbmdQb2ludCogbGlyKSB7Ci0rICBSZWdpc3RlcjY0IGlucHV0ID0gVG9SZWdp c3RlcjY0KGxpci0+aW5wdXQoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxvYXRS ZWdpc3RlcihsaXItPm91dHB1dCgpKTsKLSsgIE1JUlR5cGUgb3V0cHV0VHlwZSA9IGxpci0+bWly KCktPnR5cGUoKTsKLSsKLSsgIGlmIChvdXRwdXRUeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewot KyAgICBpZiAobGlyLT5taXIoKS0+aXNVbnNpZ25lZCgpKSB7Ci0rICAgICAgbWFzbS5jb252ZXJ0 VUludDY0VG9Eb3VibGUoaW5wdXQsIG91dHB1dCwgUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICAg IH0gZWxzZSB7Ci0rICAgICAgbWFzbS5jb252ZXJ0SW50NjRUb0RvdWJsZShpbnB1dCwgb3V0cHV0 KTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgaWYgKGxpci0+bWlyKCktPmlzVW5zaWduZWQo KSkgewotKyAgICAgIG1hc20uY29udmVydFVJbnQ2NFRvRmxvYXQzMihpbnB1dCwgb3V0cHV0LCBS ZWdpc3Rlcjo6SW52YWxpZCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLmNvbnZlcnRJ bnQ2NFRvRmxvYXQzMihpbnB1dCwgb3V0cHV0KTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVVpbnQzMlRvRG91YmxlKExXYXNtVWludDMyVG9Eb3Vi bGUqIGxpcikgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7 Ci0rICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXItPm91dHB1dCgp KTsKLSsgIG1hc20uY29udmVydFVJbnQzMlRvRG91YmxlKGlucHV0LCBvdXRwdXQpOwotK30KLSsK LSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVVpbnQzMlRvRmxvYXQzMihMV2FzbVVpbnQz MlRvRmxvYXQzMiogbGlyKSB7Ci0rICBSZWdpc3RlciBpbnB1dCA9IFRvUmVnaXN0ZXIobGlyLT5p bnB1dCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGxpci0+ b3V0cHV0KCkpOwotKyAgbWFzbS5jb252ZXJ0VUludDMyVG9GbG9hdDMyKGlucHV0LCBvdXRwdXQp OwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUJ1aWx0aW5UcnVuY2F0ZURU b0ludDMyKAotKyAgICBMV2FzbUJ1aWx0aW5UcnVuY2F0ZURUb0ludDMyKiBsaXIpIHsKLSsgIGVt aXRUcnVuY2F0ZURvdWJsZShUb0Zsb2F0UmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKSwKLSsg ICAgICAgICAgICAgICAgICAgICBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKSwgbGlyLT5taXIo KSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQnVpbHRpblRydW5jYXRl RlRvSW50MzIoCi0rICAgIExXYXNtQnVpbHRpblRydW5jYXRlRlRvSW50MzIqIGxpcikgewotKyAg ZW1pdFRydW5jYXRlRmxvYXQzMihUb0Zsb2F0UmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKSwK LSsgICAgICAgICAgICAgICAgICAgICAgVG9SZWdpc3RlcihsaXItPmdldERlZigwKSksIGxpci0+ bWlyKCkpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBWaXNpdG9yczogV2FzbSBsb2FkL3N0b3Jl Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVt aXRXYXNtTG9hZChUKiBsaXIpIHsKLSsgIGNvbnN0IE1XYXNtTG9hZCogbWlyID0gbGlyLT5taXIo KTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIFJlZ2lzdGVyIG1lbW9yeUJhc2UgPSBU b1JlZ2lzdGVyKGxpci0+bWVtb3J5QmFzZSgpKTsKLSsgIFJlZ2lzdGVyIHB0ciA9IFRvUmVnaXN0 ZXIobGlyLT5wdHIoKSk7Ci0rICBSZWdpc3RlciBwdHJTY3JhdGNoID0gVG9UZW1wUmVnaXN0ZXJP ckludmFsaWQobGlyLT50ZW1wMCgpKTsKLSsKLSsgIGlmIChtaXItPmJhc2UoKS0+dHlwZSgpID09 IE1JUlR5cGU6OkludDMyKSB7Ci0rICAgIG1hc20ubW92ZTMyVG82NFplcm9FeHRlbmQocHRyLCBS ZWdpc3RlcjY0KHNjcmF0Y2gpKTsKLSsgICAgcHRyID0gc2NyYXRjaDsKLSsgICAgcHRyU2NyYXRj aCA9IHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyA/IHNjcmF0Y2ggOiBJbnZhbGlkUmVnOwotKyAg fQotKwotKyAgbWFzbS53YXNtTG9hZChtaXItPmFjY2VzcygpLCBtZW1vcnlCYXNlLCBwdHIsIHB0 clNjcmF0Y2gsCi0rICAgICAgICAgICAgICAgIFRvQW55UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSkp OwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIENvZGVHZW5lcmF0b3JQUEM2 NDo6ZW1pdFdhc21TdG9yZShUKiBsaXIpIHsKLSsgIGNvbnN0IE1XYXNtU3RvcmUqIG1pciA9IGxp ci0+bWlyKCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rCi0rICBSZWdpc3RlciBtZW1vcnlC YXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHIgPSBU b1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJl Z2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7Ci0rCi0rICBpZiAobWlyLT5iYXNlKCktPnR5 cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgewotKyAgICBtYXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5k KHB0ciwgUmVnaXN0ZXI2NChzY3JhdGNoKSk7Ci0rICAgIHB0ciA9IHNjcmF0Y2g7Ci0rICAgIHB0 clNjcmF0Y2ggPSBwdHJTY3JhdGNoICE9IEludmFsaWRSZWcgPyBzY3JhdGNoIDogSW52YWxpZFJl ZzsKLSsgIH0KLSsKLSsgIG1hc20ud2FzbVN0b3JlKG1pci0+YWNjZXNzKCksIFRvQW55UmVnaXN0 ZXIobGlyLT52YWx1ZSgpKSwgbWVtb3J5QmFzZSwgcHRyLAotKyAgICAgICAgICAgICAgICAgcHRy U2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtTG9hZChMV2Fz bUxvYWQqIGxpcikgeyBlbWl0V2FzbUxvYWQobGlyKTsgfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRv cjo6dmlzaXRXYXNtU3RvcmUoTFdhc21TdG9yZSogbGlyKSB7IGVtaXRXYXNtU3RvcmUobGlyKTsg fQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtTG9hZEk2NChMV2FzbUxvYWRJNjQq IGxpcikgewotKyAgY29uc3QgTVdhc21Mb2FkKiBtaXIgPSBsaXItPm1pcigpOwotKwotKyAgUmVn aXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVn aXN0ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7 Ci0rCi0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgaWYg KG1pci0+YmFzZSgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpIHsKLSsgICAgbWFzbS5tb3Zl MzJaZXJvRXh0ZW5kVG9QdHIocHRyUmVnLCBwdHJSZWcpOwotKyAgfQotKwotKyAgbWFzbS53YXNt TG9hZEk2NChtaXItPmFjY2VzcygpLCBtZW1vcnlCYXNlLCBwdHJSZWcsIHB0clNjcmF0Y2gsCi0r ICAgICAgICAgICAgICAgICAgIFRvT3V0UmVnaXN0ZXI2NChsaXIpKTsKLSt9Ci0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZUk2NChMV2FzbVN0b3JlSTY0KiBsaXIpIHsKLSsg IGNvbnN0IE1XYXNtU3RvcmUqIG1pciA9IGxpci0+bWlyKCk7Ci0rCi0rICBSZWdpc3RlciBtZW1v cnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHJT Y3JhdGNoID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKLSsKLSsgIFJl Z2lzdGVyIHB0clJlZyA9IFRvUmVnaXN0ZXIobGlyLT5wdHIoKSk7Ci0rICBpZiAobWlyLT5iYXNl KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgewotKyAgICBtYXNtLm1vdmUzMlplcm9FeHRl bmRUb1B0cihwdHJSZWcsIHB0clJlZyk7Ci0rICB9Ci0rCi0rICBtYXNtLndhc21TdG9yZUk2NCht aXItPmFjY2VzcygpLCBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKSwgbWVtb3J5QmFzZSwKLSsg ICAgICAgICAgICAgICAgICAgIHB0clJlZywgcHRyU2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRBc21KU0xvYWRIZWFwKExBc21KU0xvYWRIZWFwKiBpbnMpIHsKLSsg IGNvbnN0IE1Bc21KU0xvYWRIZWFwKiBtaXIgPSBpbnMtPm1pcigpOwotKyAgTU9aX0FTU0VSVCgh bWlyLT5oYXNNZW1vcnlCYXNlKCkpOwotKwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHB0ciA9IGlu cy0+cHRyKCk7Ci0rICBjb25zdCBMRGVmaW5pdGlvbiogb3V0cHV0ID0gaW5zLT5vdXRwdXQoKTsK LSsgIGNvbnN0IExBbGxvY2F0aW9uKiBib3VuZHNDaGVja0xpbWl0ID0gaW5zLT5ib3VuZHNDaGVj a0xpbWl0KCk7Ci0rCi0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKHB0cik7Ci0rICBT Y2FsYXI6OlR5cGUgYWNjZXNzVHlwZSA9IG1pci0+YWNjZXNzVHlwZSgpOwotKyAgYm9vbCBpc0Zs b2F0ID0gYWNjZXNzVHlwZSA9PSBTY2FsYXI6OkZsb2F0MzIgfHwgYWNjZXNzVHlwZSA9PSBTY2Fs YXI6OkZsb2F0NjQ7Ci0rICBMYWJlbCBkb25lOwotKwotKyAgaWYgKG1pci0+bmVlZHNCb3VuZHND aGVjaygpKSB7Ci0rICAgIExhYmVsIGJvdW5kc0NoZWNrUGFzc2VkOwotKyAgICBSZWdpc3RlciBi b3VuZHNDaGVja0xpbWl0UmVnID0gVG9SZWdpc3Rlcihib3VuZHNDaGVja0xpbWl0KTsKLSsgICAg bWFzbS53YXNtQm91bmRzQ2hlY2szMihBc3NlbWJsZXI6OkJlbG93LCBwdHJSZWcsIGJvdW5kc0No ZWNrTGltaXRSZWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvdW5kc0NoZWNrUGFz c2VkKTsKLSsgICAgaWYgKGlzRmxvYXQpIHsKLSsgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBTY2Fs YXI6OkZsb2F0MzIpIHsKLSsgICAgICAgIG1hc20ubG9hZENvbnN0YW50RmxvYXQzMihHZW5lcmlj TmFOKCksIFRvRmxvYXRSZWdpc3RlcihvdXRwdXQpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoR2VuZXJpY05hTigpLCBUb0Zsb2F0UmVnaXN0ZXIo b3V0cHV0KSk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20ubW92ZVB0cihJ bW1Xb3JkKDApLCBUb1JlZ2lzdGVyKG91dHB1dCkpOwotKyAgICB9Ci0rICAgIG1hc20uanVtcCgm ZG9uZSk7Ci0rICAgIG1hc20uYmluZCgmYm91bmRzQ2hlY2tQYXNzZWQpOwotKyAgfQotKwotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChwdHJSZWcs IFJlZ2lzdGVyNjQoc2NyYXRjaCkpOwotKwotKyAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0rICAg IGNhc2UgU2NhbGFyOjpJbnQ4OgotKyAgICAgIG1hc20uYXNfbGJ6eChUb1JlZ2lzdGVyKG91dHB1 dCksIEhlYXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIG1hc20uYXNfZXh0c2IoVG9SZWdpc3Rlcihv dXRwdXQpLCBUb1JlZ2lzdGVyKG91dHB1dCkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNj YWxhcjo6VWludDg6Ci0rICAgICAgbWFzbS5hc19sYnp4KFRvUmVnaXN0ZXIob3V0cHV0KSwgSGVh cFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoK LSsgICAgICBtYXNtLmFzX2xoYXgoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNo KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQxNjoKLSsgICAgICBtYXNt LmFzX2xoengoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDMyOgotKyAgICAgIG1hc20uYXNfbHd6eChUb1Jl Z2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIG1hc20uYXNfZXh0c3co VG9SZWdpc3RlcihvdXRwdXQpLCBUb1JlZ2lzdGVyKG91dHB1dCkpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIFNjYWxhcjo6VWludDMyOgotKyAgICAgIG1hc20uYXNfbHd6eChUb1JlZ2lzdGVy KG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNj YWxhcjo6RmxvYXQ2NDoKLSsgICAgICBtYXNtLmFzX2xmZHgoVG9GbG9hdFJlZ2lzdGVyKG91dHB1 dCksIEhlYXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6 RmxvYXQzMjoKLSsgICAgICBtYXNtLmFzX2xmc3goVG9GbG9hdFJlZ2lzdGVyKG91dHB1dCksIEhl YXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1P Wl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Ci0rICB9Ci0rCi0rICBpZiAoZG9uZS51 c2VkKCkpIHsKLSsgICAgbWFzbS5iaW5kKCZkb25lKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2Rl R2VuZXJhdG9yOjp2aXNpdEFzbUpTU3RvcmVIZWFwKExBc21KU1N0b3JlSGVhcCogaW5zKSB7Ci0r ICBjb25zdCBNQXNtSlNTdG9yZUhlYXAqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBNT1pfQVNTRVJU KCFtaXItPmhhc01lbW9yeUJhc2UoKSk7Ci0rCi0rICBjb25zdCBMQWxsb2NhdGlvbiogdmFsdWUg PSBpbnMtPnZhbHVlKCk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcHRyID0gaW5zLT5wdHIoKTsK LSsgIGNvbnN0IExBbGxvY2F0aW9uKiBib3VuZHNDaGVja0xpbWl0ID0gaW5zLT5ib3VuZHNDaGVj a0xpbWl0KCk7Ci0rCi0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKHB0cik7Ci0rCi0r ICBMYWJlbCBkb25lOwotKyAgaWYgKG1pci0+bmVlZHNCb3VuZHNDaGVjaygpKSB7Ci0rICAgIFJl Z2lzdGVyIGJvdW5kc0NoZWNrTGltaXRSZWcgPSBUb1JlZ2lzdGVyKGJvdW5kc0NoZWNrTGltaXQp OwotKyAgICBtYXNtLndhc21Cb3VuZHNDaGVjazMyKEFzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw dHJSZWcsIGJvdW5kc0NoZWNrTGltaXRSZWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg JmRvbmUpOwotKyAgfQotKwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFzbS5tb3ZlMzJU bzY0WmVyb0V4dGVuZChwdHJSZWcsIFJlZ2lzdGVyNjQoc2NyYXRjaCkpOwotKwotKyAgc3dpdGNo IChtaXItPmFjY2Vzc1R5cGUoKSkgewotKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKLSsgICAgY2Fz ZSBTY2FsYXI6OlVpbnQ4OgotKyAgICAgIG1hc20uYXNfc3RieChUb1JlZ2lzdGVyKHZhbHVlKSwg SGVhcFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQx NjoKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQxNjoKLSsgICAgICBtYXNtLmFzX3N0aHgoVG9SZWdp c3Rlcih2YWx1ZSksIEhlYXBSZWcsIHNjcmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IFNjYWxhcjo6SW50MzI6Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MzI6Ci0rICAgICAgbWFzbS5h c19zdHd4KFRvUmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBTY2FsYXI6OkZsb2F0NjQ6Ci0rICAgICAgbWFzbS5hc19zdGZkeChUb0Zs b2F0UmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsg ICAgY2FzZSBTY2FsYXI6OkZsb2F0MzI6Ci0rICAgICAgbWFzbS5hc19zdGZzeChUb0Zsb2F0UmVn aXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVm YXVsdDoKLSsgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOwotKyAgfQot KwotKyAgaWYgKGRvbmUudXNlZCgpKSB7Ci0rICAgIG1hc20uYmluZCgmZG9uZSk7Ci0rICB9Ci0r fQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU3RhY2tBcmcoTFdhc21TdGFja0Fy ZyogaW5zKSB7Ci0rICBjb25zdCBNV2FzbVN0YWNrQXJnKiBtaXIgPSBpbnMtPm1pcigpOwotKyAg aWYgKGlucy0+YXJnKCktPmlzQ29uc3RhbnQoKSkgewotKyAgICBtYXNtLnN0b3JlUHRyKEltbVdv cmQoVG9JbnQzMihpbnMtPmFyZygpKSksCi0rICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFj a1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOwotKyAgfSBlbHNlIHsKLSsgICAgaWYgKGlucy0+ YXJnKCktPmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgICAgbWFzbS5zdG9yZVB0cihUb1JlZ2lzdGVy KGlucy0+YXJnKCkpLAotKyAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIs IG1pci0+c3BPZmZzZXQoKSkpOwotKyAgICB9IGVsc2UgaWYgKG1pci0+aW5wdXQoKS0+dHlwZSgp ID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgIG1hc20uc3RvcmVEb3VibGUoVG9GbG9hdFJl Z2lzdGVyKGlucy0+YXJnKCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFj a1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOwotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0r ICAgIH0gZWxzZSBpZiAobWlyLT5pbnB1dCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCkg ewotKyAgICAgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4KFRvRmxvYXRSZWdpc3RlcihpbnMt PmFyZygpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKFN0YWNr UG9pbnRlciwgbWlyLT5zcE9mZnNldCgpKSk7Ci0rI2VuZGlmCi0rICAgIH0gZWxzZSB7Ci0rICAg ICAgbWFzbS5zdG9yZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGlucy0+YXJnKCkpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBtaXItPnNwT2Zmc2V0KCkp KTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVN0 YWNrQXJnSTY0KExXYXNtU3RhY2tBcmdJNjQqIGlucykgewotKyAgY29uc3QgTVdhc21TdGFja0Fy ZyogbWlyID0gaW5zLT5taXIoKTsKLSsgIEFkZHJlc3MgZHN0KFN0YWNrUG9pbnRlciwgbWlyLT5z cE9mZnNldCgpKTsKLSsgIGlmIChJc0NvbnN0YW50KGlucy0+YXJnKCkpKSB7Ci0rICAgIG1hc20u c3RvcmU2NChJbW02NChUb0ludDY0KGlucy0+YXJnKCkpKSwgZHN0KTsKLSsgIH0gZWxzZSB7Ci0r ICAgIG1hc20uc3RvcmU2NChUb1JlZ2lzdGVyNjQoaW5zLT5hcmcoKSksIGRzdCk7Ci0rICB9Ci0r fQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2VsZWN0KExXYXNtU2VsZWN0KiBp bnMpIHsKLSsgIE1JUlR5cGUgbWlyVHlwZSA9IGlucy0+bWlyKCktPnR5cGUoKTsKLSsKLSsgIFJl Z2lzdGVyIGNvbmQgPSBUb1JlZ2lzdGVyKGlucy0+Y29uZEV4cHIoKSk7Ci0rICBjb25zdCBMQWxs b2NhdGlvbiogZmFsc2VFeHByID0gaW5zLT5mYWxzZUV4cHIoKTsKLSsKLSsgIGlmIChtaXJUeXBl ID09IE1JUlR5cGU6OkludDMyIHx8IG1pclR5cGUgPT0gTUlSVHlwZTo6V2FzbUFueVJlZikgewot KyAgICBSZWdpc3RlciBvdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgICBNT1pf QVNTRVJUKFRvUmVnaXN0ZXIoaW5zLT50cnVlRXhwcigpKSA9PSBvdXQsCi0rICAgICAgICAgICAg ICAgInRydWUgZXhwciBpbnB1dCBpcyByZXVzZWQgZm9yIG91dHB1dCIpOwotKyAgICBpZiAoZmFs c2VFeHByLT5pc0dlbmVyYWxSZWcoKSkgewotKyAgICAgIG1hc20ubW92ZUlmWmVybyhvdXQsIFRv UmVnaXN0ZXIoZmFsc2VFeHByKSwgY29uZCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS5j bXAzMkxvYWQzMihBc3NlbWJsZXI6Olplcm8sIGNvbmQsIGNvbmQsIFRvQWRkcmVzcyhmYWxzZUV4 cHIpLCBvdXQpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIEZsb2F0UmVnaXN0 ZXIgb3V0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgTU9aX0FTU0VSVChU b0Zsb2F0UmVnaXN0ZXIoaW5zLT50cnVlRXhwcigpKSA9PSBvdXQsCi0rICAgICAgICAgICAgICJ0 cnVlIGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRwdXQiKTsKLSsKLSsgIGlmIChmYWxzZUV4 cHItPmlzRmxvYXRSZWcoKSkgewotKyAgICBMYWJlbCBkb25lOwotKyAgICAvLyBUaGUgc2VsZWN0 IGNvbmRpdGlvbiBpcyBhIDMyLWJpdCB2YWx1ZTsgdGVzdCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdh cmJhZ2UKLSsgICAgLy8gZG9lcyBub3QgbWFrZSBhIHplcm8gY29uZGl0aW9uIHJlYWQgYXMgbm9u LXplcm8uCi0rICAgIG1hc20uYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgY29uZCwg Y29uZCwgJmRvbmUpOwotKyAgICBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpGbG9hdDMyKSB7Ci0r ICAgICAgbWFzbS5tb3ZlRmxvYXQzMihUb0Zsb2F0UmVnaXN0ZXIoZmFsc2VFeHByKSwgb3V0KTsK LSsgICAgfSBlbHNlIGlmIChtaXJUeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgIG1h c20ubW92ZURvdWJsZShUb0Zsb2F0UmVnaXN0ZXIoZmFsc2VFeHByKSwgb3V0KTsKLSsgICAgfSBl bHNlIGlmIChtaXJUeXBlID09IE1JUlR5cGU6OlNpbWQxMjgpIHsKLSsgICAgICBtYXNtLm1vdmVT aW1kMTI4KFRvRmxvYXRSZWdpc3RlcihmYWxzZUV4cHIpLCBvdXQpOwotKyAgICB9IGVsc2Ugewot KyAgICAgIE1PWl9DUkFTSCgidW5oYW5kbGVkIHR5cGUgaW4gdmlzaXRXYXNtU2VsZWN0ISIpOwot KyAgICB9Ci0rICAgIG1hc20uYmluZCgmZG9uZSk7Ci0rICB9IGVsc2UgewotKyAgICBMYWJlbCBk b25lOwotKyAgICAvLyBUaGUgc2VsZWN0IGNvbmRpdGlvbiBpcyBhIDMyLWJpdCB2YWx1ZTsgdGVz dCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdhcmJhZ2UKLSsgICAgLy8gZG9lcyBub3QgbWFrZSBhIHpl cm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXplcm8uCi0rICAgIG1hc20uYnJhbmNoVGVzdDMyKEFz c2VtYmxlcjo6Tm9uWmVybywgY29uZCwgY29uZCwgJmRvbmUpOwotKwotKyAgICBpZiAobWlyVHlw ZSA9PSBNSVJUeXBlOjpGbG9hdDMyKSB7Ci0rICAgICAgbWFzbS5sb2FkRmxvYXQzMihUb0FkZHJl c3MoZmFsc2VFeHByKSwgb3V0KTsKLSsgICAgfSBlbHNlIGlmIChtaXJUeXBlID09IE1JUlR5cGU6 OkRvdWJsZSkgewotKyAgICAgIG1hc20ubG9hZERvdWJsZShUb0FkZHJlc3MoZmFsc2VFeHByKSwg b3V0KTsKLSsgICAgfSBlbHNlIGlmIChtaXJUeXBlID09IE1JUlR5cGU6OlNpbWQxMjgpIHsKLSsg ICAgICBtYXNtLmxvYWRVbmFsaWduZWRTaW1kMTI4KFRvQWRkcmVzcyhmYWxzZUV4cHIpLCBvdXQp OwotKyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9DUkFTSCgidW5oYW5kbGVkIHR5cGUgaW4gdmlz aXRXYXNtU2VsZWN0ISIpOwotKyAgICB9Ci0rCi0rICAgIG1hc20uYmluZCgmZG9uZSk7Ci0rICB9 Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2VsZWN0STY0KExXYXNtU2Vs ZWN0STY0KiBsaXIpIHsKLSsgIE1PWl9BU1NFUlQobGlyLT5taXIoKS0+dHlwZSgpID09IE1JUlR5 cGU6OkludDY0KTsKLSsKLSsgIFJlZ2lzdGVyIGNvbmQgPSBUb1JlZ2lzdGVyKGxpci0+Y29uZEV4 cHIoKSk7Ci0rICBMSW50NjRBbGxvY2F0aW9uIGZhbHNlRXhwciA9IGxpci0+ZmFsc2VFeHByKCk7 Ci0rCi0rICBSZWdpc3RlcjY0IG91dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOwotKyAgTU9aX0FT U0VSVChUb1JlZ2lzdGVyNjQobGlyLT50cnVlRXhwcigpKSA9PSBvdXQsCi0rICAgICAgICAgICAg ICJ0cnVlIGV4cHIgaXMgcmV1c2VkIGZvciBpbnB1dCIpOwotKwotKyAgaWYgKGZhbHNlRXhwci52 YWx1ZSgpLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgIG1hc20ubW92ZUlmWmVybyhvdXQucmVnLCBU b1JlZ2lzdGVyKGZhbHNlRXhwci52YWx1ZSgpKSwgY29uZCk7Ci0rICB9IGVsc2UgewotKyAgICBM YWJlbCBkb25lOwotKyAgICAvLyBUaGUgc2VsZWN0IGNvbmRpdGlvbiBpcyBhIDMyLWJpdCB2YWx1 ZTsgdGVzdCAzMiBiaXRzIHNvIGhpZ2gtYml0IGdhcmJhZ2UKLSsgICAgLy8gZG9lcyBub3QgbWFr ZSBhIHplcm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXplcm8uCi0rICAgIG1hc20uYnJhbmNoVGVz dDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgY29uZCwgY29uZCwgJmRvbmUpOwotKyAgICBtYXNtLmxv YWRQdHIoVG9BZGRyZXNzKGZhbHNlRXhwci52YWx1ZSgpKSwgb3V0LnJlZyk7Ci0rICAgIG1hc20u YmluZCgmZG9uZSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt Q29tcGFyZUFuZFNlbGVjdChMV2FzbUNvbXBhcmVBbmRTZWxlY3QqIGlucykgewotKyAgTUNvbXBh cmU6OkNvbXBhcmVUeXBlIGNvbXBUeSA9IGlucy0+Y29tcGFyZVR5cGUoKTsKLSsgIE1JUlR5cGUg aW5zVHkgPSBpbnMtPm1pcigpLT50eXBlKCk7Ci0rICBjb25zdCBib29sIGNtcElzMzIgPSBjb21w VHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfSW50MzIgfHwKLSsgICAgICAgICAgICAgICAgICAgICAg IGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50MzI7Ci0rICBjb25zdCBib29sIGNtcElz NjQgPSBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfSW50NjQgfHwKLSsgICAgICAgICAgICAg ICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50NjQ7Ci0rICBjb25zdCBi b29sIHNlbElzSW50ID0gaW5zVHkgPT0gTUlSVHlwZTo6SW50MzIgfHwgaW5zVHkgPT0gTUlSVHlw ZTo6SW50NjQ7Ci0rCi0rICBNT1pfUkVMRUFTRV9BU1NFUlQoCi0rICAgICAgKGNtcElzMzIgfHwg Y21wSXM2NCkgJiYgc2VsSXNJbnQsCi0rICAgICAgIkNvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNv bXBhcmVBbmRTZWxlY3Q6IHVuZXhwZWN0ZWQgdHlwZXMiKTsKLSsKLSsgIFJlZ2lzdGVyIHRydWVF eHByQW5kRGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBNT1pfQVNTRVJUKFRv UmVnaXN0ZXIoaW5zLT5pZlRydWVFeHByKCkpID09IHRydWVFeHByQW5kRGVzdCwKLSsgICAgICAg ICAgICAgInRydWUgZXhwciBpbnB1dCBpcyByZXVzZWQgZm9yIG91dHB1dCIpOwotKwotKyAgQXNz ZW1ibGVyOjpDb25kaXRpb24gY29uZCA9Ci0rICAgICAgQXNzZW1ibGVyOjpJbnZlcnRDb25kaXRp b24oSlNPcFRvQ29uZGl0aW9uKGNvbXBUeSwgaW5zLT5qc29wKCkpKTsKLSsgIFJlZ2lzdGVyIGxo cyA9IFRvUmVnaXN0ZXIoaW5zLT5sZWZ0RXhwcigpKTsKLSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVn aXN0ZXIoaW5zLT5yaWdodEV4cHIoKSk7Ci0rICBSZWdpc3RlciBmYWxzZUV4cHIgPSBUb1JlZ2lz dGVyKGlucy0+aWZGYWxzZUV4cHIoKSk7Ci0rCi0rICAvLyBpc2VsIG9wZXJhdGVzIG9uIHRoZSB3 aG9sZSA2NC1iaXQgR1BSIHJlZ2FyZGxlc3Mgb2YgY29tcGFyZSB3aWR0aDsgb25seQotKyAgLy8g dGhlIGNvbXBhcmUgaW5zdHJ1Y3Rpb24gZGlmZmVycyAoY21wdy9jbXBsdyB2cyBjbXBkL2NtcGxk KS4KLSsgIGlmIChjbXBJczMyKSB7Ci0rICAgIG1hc20uY21wMzJNb3ZlMzIoY29uZCwgbGhzLCBy aHMsIGZhbHNlRXhwciwgdHJ1ZUV4cHJBbmREZXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20u Y21wUHRyTW92ZVB0cihjb25kLCBsaHMsIHJocywgZmFsc2VFeHByLCB0cnVlRXhwckFuZERlc3Qp OwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUFkZE9mZnNldChM V2FzbUFkZE9mZnNldCogbGlyKSB7Ci0rICBNV2FzbUFkZE9mZnNldCogbWlyID0gbGlyLT5taXIo KTsKLSsgIFJlZ2lzdGVyIGJhc2UgPSBUb1JlZ2lzdGVyKGxpci0+YmFzZSgpKTsKLSsgIFJlZ2lz dGVyIG91dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rCi0rICBMYWJlbCBvazsKLSsg IG1hc20ubWFfYWRkMzJUZXN0Q2FycnkoQXNzZW1ibGVyOjpDYXJyeUNsZWFyLCBvdXQsIGJhc2Us IEltbTMyKG1pci0+b2Zmc2V0KCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAmb2spOwot KyAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpPdXRPZkJvdW5kcywgbWlyLT50cmFwU2l0ZURl c2MoKSk7Ci0rICBtYXNtLmJpbmQoJm9rKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFdhc21BZGRPZmZzZXQ2NChMV2FzbUFkZE9mZnNldDY0KiBsaXIpIHsKLSsgIE1XYXNtQWRk T2Zmc2V0KiBtaXIgPSBsaXItPm1pcigpOwotKyAgUmVnaXN0ZXI2NCBiYXNlID0gVG9SZWdpc3Rl cjY0KGxpci0+YmFzZSgpKTsKLSsgIFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxp cik7Ci0rCi0rICBMYWJlbCBvazsKLSsgIG1hc20ubWFfYWRkUHRyVGVzdENhcnJ5KEFzc2VtYmxl cjo6Q2FycnlDbGVhciwgb3V0LnJlZywgYmFzZS5yZWcsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICBJbW1Xb3JkKG1pci0+b2Zmc2V0KCkpLCAmb2spOwotKyAgbWFzbS53YXNtVHJhcCh3YXNt OjpUcmFwOjpPdXRPZkJvdW5kcywgbWlyLT50cmFwU2l0ZURlc2MoKSk7Ci0rICBtYXNtLmJpbmQo Jm9rKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVmlzaXRvcnM6IEVmZmVjdGl2ZSBBZGRyZXNz Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEVmZmVjdGl2ZUFkZHJlc3MyKExFZmZlY3Rp dmVBZGRyZXNzMiogaW5zKSB7Ci0rICBjb25zdCBNRWZmZWN0aXZlQWRkcmVzczIqIG1pciA9IGlu cy0+bWlyKCk7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OwotKwotKyAgLy8gRUEgPSBpbmRleCAqIHNjYWxlICsgZGlzcGxhY2VtZW50IChubyBiYXNlIHJl Z2lzdGVyKQotKyAgbWFzbS5tb3ZlUHRyKEltbVdvcmQoMCksIG91dHB1dCk7Ci0rICBCYXNlSW5k ZXggYWRkcihvdXRwdXQsIFRvUmVnaXN0ZXIoaW5zLT5pbmRleCgpKSwgbWlyLT5zY2FsZSgpLAot KyAgICAgICAgICAgICAgICAgbWlyLT5kaXNwbGFjZW1lbnQoKSk7Ci0rICBtYXNtLmNvbXB1dGVF ZmZlY3RpdmVBZGRyZXNzKGFkZHIsIG91dHB1dCk7Ci0rICAvLyBTaWduLWV4dGVuZCB0byAzMi1i aXQKLSsgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0RWZmZWN0aXZlQWRkcmVzczMoTEVmZmVjdGl2ZUFkZHJlc3MzKiBpbnMp IHsKLSsgIGNvbnN0IE1FZmZlY3RpdmVBZGRyZXNzMyogbWlyID0gaW5zLT5taXIoKTsKLSsgIFJl Z2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rCi0rICBCYXNlSW5k ZXggYWRkcihUb1JlZ2lzdGVyKGlucy0+YmFzZSgpKSwgVG9SZWdpc3RlcihpbnMtPmluZGV4KCkp LAotKyAgICAgICAgICAgICAgICAgbWlyLT5zY2FsZSgpLCBtaXItPmRpc3BsYWNlbWVudCgpKTsK LSsgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoYWRkciwgb3V0cHV0KTsKLSsgIC8vIFNp Z24tZXh0ZW5kIHRvIDMyLWJpdAotKyAgbWFzbS5hc19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0r fQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtTXVsSTY0V2lkZUhJNjQoTFdhc21N dWxJNjRXaWRlSEk2NCogaW5zKSB7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+ bGhzKCkpOwotKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdpc3RlcihpbnMtPnJocygpKTsKLSsgIFJl Z2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rCi0rICBpZiAoaW5z LT5pc1NpZ25lZCgpKSB7Ci0rICAgIG1hc20uYXNfbXVsaGQob3V0cHV0LCBsaHMsIHJocyk7Ci0r ICB9IGVsc2UgewotKyAgICBtYXNtLmFzX211bGhkdShvdXRwdXQsIGxocywgcmhzKTsKLSsgIH0K LSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gVmlzaXRvcnM6IFR5cGVkIEFycmF5IEF0b21pY3MKLSsK LSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Q29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1l bnQoCi0rICAgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCogbGlyKSB7Ci0rICBS ZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIEFueVJl Z2lzdGVyIG91dHB1dCA9IFRvQW55UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBSZWdpc3Rl ciBvdXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKLSsKLSsg IFJlZ2lzdGVyIG9sZHZhbCA9IFRvUmVnaXN0ZXIobGlyLT5vbGR2YWwoKSk7Ci0rICBSZWdpc3Rl ciBuZXd2YWwgPSBUb1JlZ2lzdGVyKGxpci0+bmV3dmFsKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWVU ZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVy IG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAyKCkpOwotKyAg UmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAzKCkp OwotKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOwot KwotKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5k ZXgoKSwgYXJyYXlUeXBlKTsKLSsKLSsgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3Qp IHsKLSsgICAgbWFzbS5jb21wYXJlRXhjaGFuZ2VKUyhhcnJheVR5cGUsIFN5bmNocm9uaXphdGlv bjo6RnVsbCgpLCBkZXN0LCBvbGR2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 dmFsLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRUZW1wLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dHB1dCk7Ci0rICB9KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoCi0rICAgIExBdG9t aWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRz ID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOwotKyAgQW55UmVnaXN0ZXIgb3V0cHV0ID0g VG9BbnlSZWdpc3RlcihsaXItPm91dHB1dCgpKTsKLSsgIFJlZ2lzdGVyIG91dFRlbXAgPSBUb1Rl bXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAwKCkpOwotKwotKyAgUmVnaXN0ZXIgdmFsdWUg PSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUoKSk7Ci0rICBSZWdpc3RlciB2YWx1ZVRlbXAgPSBUb1Rl bXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAxKCkpOwotKyAgUmVnaXN0ZXIgb2Zmc2V0VGVt cCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDIoKSk7Ci0rICBSZWdpc3RlciBt YXNrVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDMoKSk7Ci0rICBTY2Fs YXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Ci0rCi0rICBhdXRv IGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJh eVR5cGUpOwotKwotKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkgewotKyAgICBt YXNtLmF0b21pY0V4Y2hhbmdlSlMoYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwg ZGVzdCwgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNl dFRlbXAsIG1hc2tUZW1wLCBvdXRUZW1wLCBvdXRwdXQpOwotKyAgfSk7Ci0rfQotKwotK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wKAotKyAgICBM QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCogbGlyKSB7Ci0rICBNT1pfQVNTRVJUKCFsaXIt Pm1pcigpLT5pc0ZvckVmZmVjdCgpKTsKLSsKLSsgIEFueVJlZ2lzdGVyIG91dHB1dCA9IFRvQW55 UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0 ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIFJlZ2lzdGVyIG91dFRlbXAgPSBUb1RlbXBSZWdpc3Rl ck9ySW52YWxpZChsaXItPnRlbXAwKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1w UmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNldFRlbXAg PSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAyKCkpOwotKyAgUmVnaXN0ZXIgbWFz a1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAzKCkpOwotKyAgUmVnaXN0 ZXIgdmFsdWUgPSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUoKSk7Ci0rICBTY2FsYXI6OlR5cGUgYXJy YXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Ci0rCi0rICBhdXRvIG1lbSA9IFRvQWRk cmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFycmF5VHlwZSk7Ci0rCi0r ICBtZW0ubWF0Y2goWyZdKGNvbnN0IGF1dG8mIG1lbSkgewotKyAgICBtYXNtLmF0b21pY0ZldGNo T3BKUyhhcnJheVR5cGUsIFN5bmNocm9uaXphdGlvbjo6RnVsbCgpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICBsaXItPm1pcigpLT5vcGVyYXRpb24oKSwgdmFsdWUsIG1lbSwgdmFsdWVUZW1w LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0VGVt cCwgb3V0cHV0KTsKLSsgIH0pOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXRv bWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdCgKLSsgICAgTEF0b21pY1R5cGVkQXJy YXlFbGVtZW50Qmlub3BGb3JFZmZlY3QqIGxpcikgewotKyAgTU9aX0FTU0VSVChsaXItPm1pcigp LT5pc0ZvckVmZmVjdCgpKTsKLSsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3Rlcihs aXItPmVsZW1lbnRzKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJP ckludmFsaWQobGlyLT50ZW1wMCgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBS ZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAxKCkpOwotKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBU b1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAyKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWUg PSBUb1JlZ2lzdGVyKGxpci0+dmFsdWUoKSk7Ci0rICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0g bGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Ci0rCi0rICBhdXRvIG1lbSA9IFRvQWRkcmVzc09yQmFz ZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFycmF5VHlwZSk7Ci0rCi0rICBtZW0ubWF0 Y2goWyZdKGNvbnN0IGF1dG8mIG1lbSkgewotKyAgICBtYXNtLmF0b21pY0VmZmVjdE9wSlMoYXJy YXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpci0+bWlyKCktPm9wZXJhdGlvbigpLCB2YWx1ZSwgbWVtLCB2YWx1ZVRlbXAsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7Ci0rICB9KTsKLSt9 Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVFeGNoYW5nZVR5cGVkQXJyYXlF bGVtZW50NjQoCi0rICAgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KiBsaXIp IHsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOwot KyAgUmVnaXN0ZXI2NCBvbGR2YWwgPSBUb1JlZ2lzdGVyNjQobGlyLT5vbGR2YWwoKSk7Ci0rICBS ZWdpc3RlcjY0IG5ld3ZhbCA9IFRvUmVnaXN0ZXI2NChsaXItPm5ld3ZhbCgpKTsKLSsgIFJlZ2lz dGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7Ci0rICBTY2FsYXI6OlR5cGUgYXJyYXlU eXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Ci0rCi0rICBhdXRvIGRlc3QgPSBUb0FkZHJl c3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOwotKwotKyAg ZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkgewotKyAgICBtYXNtLmNvbXBhcmVFeGNo YW5nZTY0KFN5bmNocm9uaXphdGlvbjo6RnVsbCgpLCBkZXN0LCBvbGR2YWwsIG5ld3ZhbCwgb3V0 KTsKLSsgIH0pOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXRvbWljRXhjaGFu Z2VUeXBlZEFycmF5RWxlbWVudDY0KAotKyAgICBMQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxl bWVudDY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVs ZW1lbnRzKCkpOwotKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVl KCkpOwotKyAgUmVnaXN0ZXI2NCBvdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKLSsgIFNjYWxh cjo6VHlwZSBhcnJheVR5cGUgPSBsaXItPm1pcigpLT5hcnJheVR5cGUoKTsKLSsKLSsgIGF1dG8g ZGVzdCA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFycmF5 VHlwZSk7Ci0rCi0rICBkZXN0Lm1hdGNoKFsmXShjb25zdCBhdXRvJiBkZXN0KSB7Ci0rICAgIG1h c20uYXRvbWljRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwgZGVzdCwgdmFsdWUs IG91dCk7Ci0rICB9KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0b21pY1R5 cGVkQXJyYXlFbGVtZW50Qmlub3A2NCgKLSsgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlu b3A2NCogbGlyKSB7Ci0rICBNT1pfQVNTRVJUKGxpci0+bWlyKCktPmhhc1VzZXMoKSk7Ci0rCi0r ICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIFJl Z2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKLSsgIFJlZ2lzdGVy NjQgdGVtcCA9IFRvUmVnaXN0ZXI2NChsaXItPnRlbXAwKCkpOwotKyAgUmVnaXN0ZXI2NCBvdXQg PSBUb091dFJlZ2lzdGVyNjQobGlyKTsKLSsKLSsgIFNjYWxhcjo6VHlwZSBhcnJheVR5cGUgPSBs aXItPm1pcigpLT5hcnJheVR5cGUoKTsKLSsgIEF0b21pY09wIGF0b21pY09wID0gbGlyLT5taXIo KS0+b3BlcmF0aW9uKCk7Ci0rCi0rICBhdXRvIGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChl bGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOwotKwotKyAgZGVzdC5tYXRjaChbJl0o Y29uc3QgYXV0byYgZGVzdCkgewotKyAgICBtYXNtLmF0b21pY0ZldGNoT3A2NChTeW5jaHJvbml6 YXRpb246OkZ1bGwoKSwgYXRvbWljT3AsIHZhbHVlLCBkZXN0LCB0ZW1wLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICBvdXQpOwotKyAgfSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXRBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZmZWN0NjQoCi0rICAgIExBdG9t aWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZmZWN0NjQqIGxpcikgewotKyAgTU9aX0FTU0VS VCghbGlyLT5taXIoKS0+aGFzVXNlcygpKTsKLSsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9S ZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOwotKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0 ZXI2NChsaXItPnZhbHVlKCkpOwotKyAgUmVnaXN0ZXI2NCB0ZW1wID0gVG9SZWdpc3RlcjY0KGxp ci0+dGVtcDAoKSk7Ci0rCi0rICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+ YXJyYXlUeXBlKCk7Ci0rICBBdG9taWNPcCBhdG9taWNPcCA9IGxpci0+bWlyKCktPm9wZXJhdGlv bigpOwotKwotKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxp ci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKLSsKLSsgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8m IGRlc3QpIHsKLSsgICAgbWFzbS5hdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbjo6RnVs bCgpLCBhdG9taWNPcCwgdmFsdWUsIGRlc3QsIHRlbXApOwotKyAgfSk7Ci0rfQotKwotK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNMb2FkNjQoTEF0b21pY0xvYWQ2NCogbGlyKSB7Ci0r ICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIFJl Z2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7Ci0rICBTY2FsYXI6OlR5cGUgc3Rv cmFnZVR5cGUgPSBsaXItPm1pcigpLT5zdG9yYWdlVHlwZSgpOwotKwotKyAgYXV0byBzb3VyY2Ug PSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBzdG9yYWdlVHlw ZSk7Ci0rCi0rICBhdXRvIHN5bmMgPSBTeW5jaHJvbml6YXRpb246OkxvYWQoKTsKLSsgIG1hc20u bWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsgIHNvdXJjZS5tYXRjaChbJl0oY29uc3QgYXV0 byYgc291cmNlKSB7IG1hc20ubG9hZDY0KHNvdXJjZSwgb3V0KTsgfSk7Ci0rICBtYXNtLm1lbW9y eUJhcnJpZXJBZnRlcihzeW5jKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0 b21pY1N0b3JlNjQoTEF0b21pY1N0b3JlNjQqIGxpcikgewotKyAgUmVnaXN0ZXIgZWxlbWVudHMg PSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7Ci0rICBSZWdpc3RlcjY0IHZhbHVlID0gVG9S ZWdpc3RlcjY0KGxpci0+dmFsdWUoKSk7Ci0rICBTY2FsYXI6OlR5cGUgd3JpdGVUeXBlID0gbGly LT5taXIoKS0+d3JpdGVUeXBlKCk7Ci0rCi0rICBhdXRvIGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJ bmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCB3cml0ZVR5cGUpOwotKwotKyAgYXV0byBzeW5j ID0gU3luY2hyb25pemF0aW9uOjpTdG9yZSgpOwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3Jl KHN5bmMpOwotKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkgeyBtYXNtLnN0b3Jl NjQodmFsdWUsIGRlc3QpOyB9KTsKLSsgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwot K30KLSsKLSsvLyBXYXNtIEF0b21pY3MKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNv bXBhcmVFeGNoYW5nZUhlYXAoCi0rICAgIExXYXNtQ29tcGFyZUV4Y2hhbmdlSGVhcCogaW5zKSB7 Ci0rICBNV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBSZWdp c3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdp c3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOwotKyAgQmFzZUluZGV4IHNyY0Fk ZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1lc09uZSwgbWlyLT5hY2Nlc3MoKS5vZmZzZXQzMigp KTsKLSsKLSsgIFJlZ2lzdGVyIG9sZHZhbCA9IFRvUmVnaXN0ZXIoaW5zLT5vbGRWYWx1ZSgpKTsK LSsgIFJlZ2lzdGVyIG5ld3ZhbCA9IFRvUmVnaXN0ZXIoaW5zLT5uZXdWYWx1ZSgpKTsKLSsgIFJl Z2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDAoKSk7 Ci0rICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50 ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQo aW5zLT50ZW1wMigpKTsKLSsKLSsgIG1hc20ud2FzbUNvbXBhcmVFeGNoYW5nZShtaXItPmFjY2Vz cygpLCBzcmNBZGRyLCBvbGR2YWwsIG5ld3ZhbCwgdmFsdWVUZW1wLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNFeGNoYW5n ZUhlYXAoTFdhc21BdG9taWNFeGNoYW5nZUhlYXAqIGlucykgewotKyAgTVdhc21BdG9taWNFeGNo YW5nZUhlYXAqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9S ZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lz dGVyKGlucy0+cHRyKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWUgPSBUb1JlZ2lzdGVyKGlucy0+dmFs dWUoKSk7Ci0rICBCYXNlSW5kZXggc3JjQWRkcihtZW1vcnlCYXNlLCBwdHJSZWcsIFRpbWVzT25l LCBtaXItPmFjY2VzcygpLm9mZnNldDMyKCkpOwotKwotKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0g VG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNl dFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAxKCkpOwotKyAgUmVnaXN0 ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAyKCkpOwotKwot KyAgbWFzbS53YXNtQXRvbWljRXhjaGFuZ2UobWlyLT5hY2Nlc3MoKSwgc3JjQWRkciwgdmFsdWUs IHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tU ZW1wLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFdhc21BdG9taWNCaW5vcEhlYXAoTFdhc21BdG9taWNCaW5vcEhlYXAqIGlucykg ewotKyAgTU9aX0FTU0VSVChpbnMtPm1pcigpLT5oYXNVc2VzKCkpOwotKwotKyAgTVdhc21BdG9t aWNCaW5vcEhlYXAqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0g VG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1Jl Z2lzdGVyKGlucy0+cHRyKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0 ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1Rl bXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAxKCkpOwotKyAgUmVnaXN0ZXIgbWFza1RlbXAg PSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAyKCkpOwotKwotKyAgQmFzZUluZGV4 IHNyY0FkZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1lc09uZSwgbWlyLT5hY2Nlc3MoKS5vZmZz ZXQzMigpKTsKLSsKLSsgIG1hc20ud2FzbUF0b21pY0ZldGNoT3AobWlyLT5hY2Nlc3MoKSwgbWly LT5vcGVyYXRpb24oKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgVG9SZWdpc3RlcihpbnMt PnZhbHVlKCkpLCBzcmNBZGRyLCB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAg IG9mZnNldFRlbXAsIG1hc2tUZW1wLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKLSt9Ci0r Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNCaW5vcEhlYXBGb3JFZmZlY3Qo Ci0rICAgIExXYXNtQXRvbWljQmlub3BIZWFwRm9yRWZmZWN0KiBpbnMpIHsKLSsgIE1PWl9BU1NF UlQoIWlucy0+bWlyKCktPmhhc1VzZXMoKSk7Ci0rCi0rICBNV2FzbUF0b21pY0Jpbm9wSGVhcCog bWlyID0gaW5zLT5taXIoKTsKLSsgIFJlZ2lzdGVyIG1lbW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGlu cy0+bWVtb3J5QmFzZSgpKTsKLSsgIFJlZ2lzdGVyIHB0clJlZyA9IFRvUmVnaXN0ZXIoaW5zLT5w dHIoKSk7Ci0rICBSZWdpc3RlciB2YWx1ZVRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChp bnMtPnRlbXAwKCkpOwotKyAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJ bnZhbGlkKGlucy0+dGVtcDEoKSk7Ci0rICBSZWdpc3RlciBtYXNrVGVtcCA9IFRvVGVtcFJlZ2lz dGVyT3JJbnZhbGlkKGlucy0+dGVtcDIoKSk7Ci0rCi0rICBCYXNlSW5kZXggc3JjQWRkcihtZW1v cnlCYXNlLCBwdHJSZWcsIFRpbWVzT25lLCBtaXItPmFjY2VzcygpLm9mZnNldDMyKCkpOwotKyAg bWFzbS53YXNtQXRvbWljRWZmZWN0T3AobWlyLT5hY2Nlc3MoKSwgbWlyLT5vcGVyYXRpb24oKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwgc3Jj QWRkciwgdmFsdWVUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwg bWFza1RlbXApOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVF eGNoYW5nZUk2NChMV2FzbUNvbXBhcmVFeGNoYW5nZUk2NCogbGlyKSB7Ci0rICBSZWdpc3RlciBt ZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBw dHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgUmVnaXN0ZXI2NCBvbGRWYWx1ZSA9IFRv UmVnaXN0ZXI2NChsaXItPm9sZFZhbHVlKCkpOwotKyAgUmVnaXN0ZXI2NCBuZXdWYWx1ZSA9IFRv UmVnaXN0ZXI2NChsaXItPm5ld1ZhbHVlKCkpOwotKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091 dFJlZ2lzdGVyNjQobGlyKTsKLSsgIHVpbnQzMl90IG9mZnNldCA9IGxpci0+bWlyKCktPmFjY2Vz cygpLm9mZnNldDMyKCk7Ci0rCi0rICBCYXNlSW5kZXggYWRkcihtZW1vcnlCYXNlLCBwdHIsIFRp bWVzT25lLCBvZmZzZXQpOwotKyAgbWFzbS53YXNtQ29tcGFyZUV4Y2hhbmdlNjQobGlyLT5taXIo KS0+YWNjZXNzKCksIGFkZHIsIG9sZFZhbHVlLCBuZXdWYWx1ZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtQXRvbWljRXhjaGFuZ2VJNjQoTFdhc21BdG9taWNFeGNoYW5nZUk2NCogbGlyKSB7Ci0rICBS ZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7Ci0rICBS ZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgUmVnaXN0ZXI2NCB2YWx1 ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOwotKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBU b091dFJlZ2lzdGVyNjQobGlyKTsKLSsgIHVpbnQzMl90IG9mZnNldCA9IGxpci0+bWlyKCktPmFj Y2VzcygpLm9mZnNldDMyKCk7Ci0rCi0rICBCYXNlSW5kZXggYWRkcihtZW1vcnlCYXNlLCBwdHIs IFRpbWVzT25lLCBvZmZzZXQpOwotKyAgbWFzbS53YXNtQXRvbWljRXhjaGFuZ2U2NChsaXItPm1p cigpLT5hY2Nlc3MoKSwgYWRkciwgdmFsdWUsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljQmlub3BJNjQoTFdhc21BdG9taWNCaW5vcEk2NCogbGly KSB7Ci0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2Uo KSk7Ci0rICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgUmVnaXN0 ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOwotKyAgUmVnaXN0ZXI2NCBv dXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKLSsgIFJlZ2lzdGVyNjQgdGVtcCA9IFRvUmVn aXN0ZXI2NChsaXItPnRlbXAwKCkpOwotKyAgdWludDMyX3Qgb2Zmc2V0ID0gbGlyLT5taXIoKS0+ YWNjZXNzKCkub2Zmc2V0MzIoKTsKLSsKLSsgIEJhc2VJbmRleCBhZGRyKG1lbW9yeUJhc2UsIHB0 ciwgVGltZXNPbmUsIG9mZnNldCk7Ci0rCi0rICBtYXNtLndhc21BdG9taWNGZXRjaE9wNjQobGly LT5taXIoKS0+YWNjZXNzKCksIGxpci0+bWlyKCktPm9wZXJhdGlvbigpLCB2YWx1ZSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCB0ZW1wLCBvdXRwdXQpOwotK30KLSsKLSsvLyBT SU1EIGNvZGUgZ2VuZXJhdG9ycy4KLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U2ltZDEyOChM U2ltZDEyOCogaW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIo aW5zLT5vdXRwdXQoKSk7Ci0rICBtYXNtLmxvYWRDb25zdGFudFNpbWQxMjgoaW5zLT5zaW1kMTI4 KCksIGRlc3QpOwotK30KLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVRlcm5hcnlTaW1k MTI4KExXYXNtVGVybmFyeVNpbWQxMjgqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciB2MCA9IFRv RmxvYXRSZWdpc3RlcihpbnMtPnYwKCkpOwotKyAgRmxvYXRSZWdpc3RlciB2MSA9IFRvRmxvYXRS ZWdpc3RlcihpbnMtPnYxKCkpOwotKyAgRmxvYXRSZWdpc3RlciB2MiA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPnYyKCkpOwotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpOwotKyAgc3dpdGNoIChpbnMtPnNpbWRPcCgpKSB7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpWMTI4Qml0c2VsZWN0OgotKyAgICAgIC8vIGJpdHNlbGVjdCh2MCwgdjEsIHYy KTogcmVzdWx0ID0gKHYwICYgdjIpIHwgKHYxICYgfnYyKQotKyAgICAgIC8vIHh4c2VsOiBYQz0w 4oaSWEEsIFhDPTHihpJYQiDihpIgKFhBICYgflhDKSB8IChYQiAmIFhDKQotKyAgICAgIC8vIE5l ZWQgWEE9djEsIFhCPXYwLCBYQz12Mi4KLSsgICAgICBtYXNtLmFzX3h4c2VsKGRlc3QsIHYxLCB2 MCwgdjIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZSZWxh eGVkTGFuZVNlbGVjdDoKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4UmVsYXhlZExhbmVT ZWxlY3Q6Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRMYW5lU2VsZWN0Ogot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJSZWxheGVkTGFuZVNlbGVjdDoKLSsgICAgICAv LyByZWxheGVkIGxhbmVTZWxlY3QodjAsIHYxLCBtYXNrPXYyKTogc2FtZSBhcyBiaXRzZWxlY3QK LSsgICAgICBtYXNtLmFzX3h4c2VsKGRlc3QsIHYxLCB2MCwgdjIpOwotKyAgICAgIGJyZWFrOwot KyAgICAvLyBMb3dlcmluZyB1c2VzIGRlZmluZVJldXNlSW5wdXQgb24gVjJJbmRleCBmb3IgdGVy bmFyeSBvcHMg4oCUIHRoZQotKyAgICAvLyBhbGxvY2F0b3IgaXMgcmVxdWlyZWQgdG8gcGxhY2Ug YGRlc3RgIGluIHYyJ3Mgc2xvdC4gQXNzZXJ0IHRoYXQKLSsgICAgLy8gaGVyZTsgdGhlIEZNQS9k b3QgaGVscGVycyB3cml0ZSB0aGVpciByZXN1bHQgdGhyb3VnaCB2MiBpbi1wbGFjZSwKLSsgICAg Ly8gc28gZGVzdCA9PSB2MiBtYWtlcyB0aGUgdHJhaWxpbmcgbW92ZVNpbWQxMjggdW5uZWNlc3Nh cnkuCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWREb3RJOHgxNkk3eDE2QWRk UzoKLSsgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIpOwotKyAgICAgIG1hc20uZG90SW50OHgx NkludDd4MTZUaGVuQWRkKHYwLCB2MSwgdjIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVG9GbG9hdFJlZ2lzdGVyKGlucy0+dGVtcDAoKSkpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRSZWxheGVkTWFkZDoKLSsgICAgICBNT1pfQVNT RVJUKGRlc3QgPT0gdjIpOwotKyAgICAgIG1hc20uZm1hRmxvYXQzMng0KHYwLCB2MSwgdjIpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZWxheGVkTWFkZDoK LSsgICAgICBNT1pfQVNTRVJUKGRlc3QgPT0gdjIpOwotKyAgICAgIG1hc20uZm1hRmxvYXQ2NHgy KHYwLCB2MSwgdjIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMy eDRSZWxheGVkTm1hZGQ6Ci0rICAgICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsKLSsgICAgICBt YXNtLmZubWFGbG9hdDMyeDQodjAsIHYxLCB2Mik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpGNjR4MlJlbGF4ZWRObWFkZDoKLSsgICAgICBNT1pfQVNTRVJUKGRlc3Qg PT0gdjIpOwotKyAgICAgIG1hc20uZm5tYUZsb2F0NjR4Mih2MCwgdjEsIHYyKTsKLSsgICAgICBi cmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBOWUkgU0lNRCB0 ZXJuYXJ5IG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQmlu YXJ5U2ltZDEyOChMV2FzbUJpbmFyeVNpbWQxMjgqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBs aHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIHJocyA9 IFRvRmxvYXRSZWdpc3RlcihpbnMtPnJocygpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRv RmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkg ewotKyAgICAvLyBCaXR3aXNlCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4QW5kOgotKyAg ICAgIG1hc20uYml0d2lzZUFuZFNpbWQxMjgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOE9yOgotKyAgICAgIG1hc20uYml0d2lzZU9y U2ltZDEyOChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpWMTI4WG9yOgotKyAgICAgIG1hc20uYml0d2lzZVhvclNpbWQxMjgobGhzLCByaHMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFuZE5v dDoKLSsgICAgICBtYXNtLmJpdHdpc2VBbmROb3RTaW1kMTI4KGxocywgcmhzLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdlciBhZGQKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2QWRkOgotKyAgICAgIG1hc20uYWRkSW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFkZDoKLSsgICAgICBtYXNt LmFkZEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STMyeDRBZGQ6Ci0rICAgICAgbWFzbS5hZGRJbnQzMng0KGxocywgcmhzLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQWRkOgot KyAgICAgIG1hc20uYWRkSW50NjR4MihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIC8vIEludGVnZXIgc3ViCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN1YjoKLSsg ICAgICBtYXNtLnN1YkludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWI6Ci0rICAgICAgbWFzbS5zdWJJbnQxNng4KGxo cywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkz Mng0U3ViOgotKyAgICAgIG1hc20uc3ViSW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlN1YjoKLSsgICAgICBtYXNtLnN1 YkludDY0eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBTYXR1cmF0 aW5nIGFkZAotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBZGRTYXRTOgotKyAgICAgIG1h c20uYWRkU2F0SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFkZFNhdFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEFkZFNh dEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhBZGRTYXRTOgotKyAgICAgIG1hc20uYWRkU2F0SW50MTZ4OChsaHMsIHJo cywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFk ZFNhdFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEFkZFNhdEludDE2eDgobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBTYXR1cmF0aW5nIHN1YgotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZTdWJTYXRTOgotKyAgICAgIG1hc20uc3ViU2F0SW50OHgxNihsaHMsIHJo cywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN1 YlNhdFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFN1YlNhdEludDh4MTYobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWJTYXRTOgot KyAgICAgIG1hc20uc3ViU2F0SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFN1YlNhdFU6Ci0rICAgICAgbWFzbS51bnNp Z25lZFN1YlNhdEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAv LyBJbnRlZ2VyIG11bHRpcGx5Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE11bDoKLSsg ICAgICBtYXNtLm11bEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNdWw6Ci0rICAgICAgbWFzbS5tdWxJbnQzMng0KGxo cywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdlciBtaW4vbWF4IHNp Z25lZAotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZNaW5TOgotKyAgICAgIG1hc20ubWlu SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJOHgxNk1heFM6Ci0rICAgICAgbWFzbS5tYXhJbnQ4eDE2KGxocywgcmhzLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TWluUzoKLSsg ICAgICBtYXNtLm1pbkludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhNYXhTOgotKyAgICAgIG1hc20ubWF4SW50MTZ4OChs aHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MzJ4NE1pblM6Ci0rICAgICAgbWFzbS5taW5JbnQzMng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TWF4UzoKLSsgICAgICBtYXNt Lm1heEludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBJbnRl Z2VyIG1pbi9tYXggdW5zaWduZWQKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TWluVToK LSsgICAgICBtYXNtLnVuc2lnbmVkTWluSW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk1heFU6Ci0rICAgICAgbWFzbS51 bnNpZ25lZE1heEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STE2eDhNaW5VOgotKyAgICAgIG1hc20udW5zaWduZWRNaW5JbnQx Nng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkxNng4TWF4VToKLSsgICAgICBtYXNtLnVuc2lnbmVkTWF4SW50MTZ4OChsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE1pblU6 Ci0rICAgICAgbWFzbS51bnNpZ25lZE1pbkludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNYXhVOgotKyAgICAgIG1hc20u dW5zaWduZWRNYXhJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Ly8gQXZlcmFnZSB1bnNpZ25lZAotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBdmdyVToK LSsgICAgICBtYXNtLnVuc2lnbmVkQXZlcmFnZUludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhBdmdyVToKLSsgICAgICBt YXNtLnVuc2lnbmVkQXZlcmFnZUludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICAvLyBRMTUgbXVsdGlwbHkKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4UTE1 TXVsclNhdFM6Ci0rICAgICAgbWFzbS5xMTVNdWxyU2F0SW50MTZ4OChsaHMsIHJocywgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIEludGVnZXIgY29tcGFyZQotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZFcToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6 RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2TmU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6Ok5v dEVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJOHgxNkx0UzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6 TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk4eDE2R3RTOgotKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVy OjpHcmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZMZVM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3Nl bWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZHZVM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50 OHgxNihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZMdFU6Ci0rICAgICAgbWFz bS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkJlbG93LCBsaHMsIHJocywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkd0VToKLSsgICAgICBtYXNt LmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6QWJvdmUsIGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TGVVOgotKyAgICAgIG1hc20u Y29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2R2VVOgotKyAgICAg IG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGxocywgcmhzLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4RXE6Ci0r ICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE5lOgotKyAg ICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCByaHMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhMdFM6Ci0r ICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6Okxlc3NUaGFuLCBsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEd0UzoK LSsgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6R3JlYXRlclRoYW4sIGxocywg cmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4 TGVTOgotKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1 YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkxNng4R2VTOgotKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpHcmVh dGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkkxNng4THRVOgotKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNz ZW1ibGVyOjpCZWxvdywgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STE2eDhHdFU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3Nl bWJsZXI6OkFib3ZlLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMTZ4OExlVToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2Vt Ymxlcjo6QmVsb3dPckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEdlVToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4 KEFzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEVxOgotKyAgICAgIG1hc20uY29tcGFyZUlu dDMyeDQoQXNzZW1ibGVyOjpFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDROZToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQz Mng0KEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0THRTOgotKyAgICAgIG1hc20uY29tcGFyZUlu dDMyeDQoQXNzZW1ibGVyOjpMZXNzVGhhbiwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRHdFM6Ci0rICAgICAgbWFzbS5jb21wYXJl SW50MzJ4NChBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NExlUzoKLSsgICAgICBtYXNtLmNv bXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEdlUzoKLSsgICAg ICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4 NEx0VToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6QmVsb3csIGxocywg cmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0 R3RVOgotKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpBYm92ZSwgbGhzLCBy aHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRM ZVU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwg bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRHZVU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkFib3ZlT3JF cXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STY0eDJFcToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxlcjo6RXF1 YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk2NHgyTmU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50NjR4MihBc3NlbWJsZXI6Ok5vdEVx dWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4Mkx0UzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxlcjo6TGVz c1RoYW4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk2NHgyR3RTOgotKyAgICAgIG1hc20uY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpH cmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STY0eDJMZVM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50NjR4MihBc3NlbWJs ZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJHZVM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50NjR4 MihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICAvLyBGbG9hdCBjb21wYXJlCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG MzJ4NEVxOgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkVxdWFsLCBs aHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG MzJ4NE5lOgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6Ok5vdEVxdWFs LCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGMzJ4NEx0OgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6Okxlc3NU aGFuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGMzJ4NEd0OgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6Okdy ZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpGMzJ4NExlOgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJs ZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRHZToKLSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMy eDQoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyRXE6Ci0rICAgICAgbWFzbS5j b21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTmU6Ci0rICAgICAgbWFzbS5j b21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTHQ6Ci0rICAgICAgbWFz bS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyR3Q6Ci0rICAgICAg bWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6R3JlYXRlclRoYW4sIGxocywgcmhzLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTGU6Ci0r ICAgICAgbWFzbS5jb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsLCBs aHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG NjR4MkdlOgotKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkdyZWF0ZXJU aGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBGbG9h dCBhcml0aG1ldGljCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEFkZDoKLSsgICAgICBt YXNtLmFkZEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFN1YjoKLSsgICAgICBtYXNtLnN1YkZsb2F0MzJ4NChsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4 NE11bDoKLSsgICAgICBtYXNtLm11bEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NERpdjoKLSsgICAgICBtYXNtLmRp dkZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpGMzJ4NE1pbjoKLSsgICAgICBtYXNtLm1pbkZsb2F0MzJ4NChsaHMsIHJocywg ZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgwKSksCi0rICAgICAgICAgICAgICAg ICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMSkpKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0TWF4OgotKyAgICAgIG1hc20ubWF4Rmxv YXQzMng0KGxocywgcmhzLCBkZXN0LCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDApKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgx KSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRQTWluOgot KyAgICAgIG1hc20ucHNldWRvTWluRmxvYXQzMng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UE1heDoKLSsgICAgICBtYXNtLnBz ZXVkb01heEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkFkZDoKLSsgICAgICBtYXNtLmFkZEZsb2F0NjR4MihsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4 MlN1YjoKLSsgICAgICBtYXNtLnN1YkZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk11bDoKLSsgICAgICBtYXNtLm11 bEZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpGNjR4MkRpdjoKLSsgICAgICBtYXNtLmRpdkZsb2F0NjR4MihsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk1pbjoK LSsgICAgICBtYXNtLm1pbkZsb2F0NjR4MihsaHMsIHJocywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVy KGlucy0+Z2V0VGVtcCgwKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdp c3RlcihpbnMtPmdldFRlbXAoMSkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkY2NHgyTWF4OgotKyAgICAgIG1hc20ubWF4RmxvYXQ2NHgyKGxocywgcmhzLCBkZXN0 LCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDApKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgxKSkpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJQTWluOgotKyAgICAgIG1hc20ucHNldWRvTWlu RmxvYXQ2NHgyKGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkY2NHgyUE1heDoKLSsgICAgICBtYXNtLnBzZXVkb01heEZsb2F0NjR4MihsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIE5hcnJvdwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STh4MTZOYXJyb3dJMTZ4OFM6Ci0rICAgICAgbWFzbS5uYXJyb3dJbnQxNng4 KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2TmFycm93STE2eDhVOgotKyAgICAgIG1hc20udW5zaWduZWROYXJyb3dJbnQxNng4KGxo cywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkx Nng4TmFycm93STMyeDRTOgotKyAgICAgIG1hc20ubmFycm93SW50MzJ4NChsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE5hcnJvd0kz Mng0VToKLSsgICAgICBtYXNtLnVuc2lnbmVkTmFycm93SW50MzJ4NChsaHMsIHJocywgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIGk2NCBtdWx0aXBseQotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STY0eDJNdWw6IHsKLSsgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAwID0gVG9UZW1wRmxv YXRSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAwKCkpOwotKyAgICAgIEZsb2F0UmVnaXN0ZXIg dGVtcDFmID0gVG9UZW1wRmxvYXRSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAxKCkpOwotKyAg ICAgIG1hc20ubXVsSW50NjR4MihsaHMsIHJocywgZGVzdCwgdGVtcDAsIHRlbXAxZik7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgLy8gRXh0ZW5kZWQgbXVsdGlwbHkKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4RXh0bXVsTG93STh4MTZTOgotKyAgICAgIG1hc20uZXh0TXVsTG93 SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OEV4dG11bEhpZ2hJOHgxNlM6Ci0rICAgICAgbWFzbS5leHRNdWxIaWdoSW50 OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OEV4dG11bExvd0k4eDE2VToKLSsgICAgICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93 SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OEV4dG11bEhpZ2hJOHgxNlU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11 bEhpZ2hJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkzMng0RXh0bXVsTG93STE2eDhTOgotKyAgICAgIG1hc20uZXh0TXVsTG93 SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMzJ4NEV4dG11bEhpZ2hJMTZ4OFM6Ci0rICAgICAgbWFzbS5leHRNdWxIaWdoSW50 MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMzJ4NEV4dG11bExvd0kxNng4VToKLSsgICAgICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93 SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMzJ4NEV4dG11bEhpZ2hJMTZ4OFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11 bEhpZ2hJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyRXh0bXVsTG93STMyeDRTOgotKyAgICAgIG1hc20uZXh0TXVsTG93 SW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJNjR4MkV4dG11bEhpZ2hJMzJ4NFM6Ci0rICAgICAgbWFzbS5leHRNdWxIaWdoSW50 MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4MkV4dG11bExvd0kzMng0VToKLSsgICAgICBtYXNtLnVuc2lnbmVkRXh0TXVsTG93 SW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJNjR4MkV4dG11bEhpZ2hJMzJ4NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11 bEhpZ2hJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gRG90 IHByb2R1Y3QKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RG90STE2eDhTOgotKyAgICAg IG1hc20ud2lkZW5Eb3RJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsg ICAgLy8gUmVsYXhlZCBiaW5hcnkgb3BzCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFJl bGF4ZWRNaW46Ci0rICAgICAgbWFzbS5taW5GbG9hdDMyeDRSZWxheGVkKHJocywgbGhzKTsKLSsg ICAgICBpZiAoZGVzdCAhPSBsaHMpIG1hc20ubW92ZVNpbWQxMjgobGhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UmVsYXhlZE1heDoKLSsgICAg ICBtYXNtLm1heEZsb2F0MzJ4NFJlbGF4ZWQocmhzLCBsaHMpOwotKyAgICAgIGlmIChkZXN0ICE9 IGxocykgbWFzbS5tb3ZlU2ltZDEyOChsaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZWxheGVkTWluOgotKyAgICAgIG1hc20ubWluRmxvYXQ2 NHgyUmVsYXhlZChyaHMsIGxocyk7Ci0rICAgICAgaWYgKGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVT aW1kMTI4KGxocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGNjR4MlJlbGF4ZWRNYXg6Ci0rICAgICAgbWFzbS5tYXhGbG9hdDY0eDJSZWxheGVkKHJocywg bGhzKTsKLSsgICAgICBpZiAoZGVzdCAhPSBsaHMpIG1hc20ubW92ZVNpbWQxMjgobGhzLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2UmVsYXhlZFN3 aXp6bGU6Ci0rICAgICAgbWFzbS5zd2l6emxlSW50OHgxNlJlbGF4ZWQobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhSZWxheGVkUTE1 TXVsclM6Ci0rICAgICAgbWFzbS5xMTVNdWxySW50MTZ4OFJlbGF4ZWQobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBTd2l6emxlCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJOHgxNlN3aXp6bGU6Ci0rICAgICAgbWFzbS5zd2l6emxlSW50OHgxNihsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFJlbGF4ZWRE b3RJOHgxNkk3eDE2UzoKLSsgICAgICBtYXNtLmRvdEludDh4MTZJbnQ3eDE2KGxocywgcmhzLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlBQ QzY0OiBOWUkgU0lNRCBiaW5hcnkgb3AiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdFdhc21CaW5hcnlTaW1kMTI4V2l0aENvbnN0YW50KAotKyAgICBMV2FzbUJpbmFyeVNp bWQxMjhXaXRoQ29uc3RhbnQqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0 UmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBTaW1kQ29uc3RhbnQgcmhzID0gaW5zLT5yaHMoKTsK LSsgIC8vIExvYWQgdGhlIGNvbnN0YW50IGludG8gc2NyYXRjaCwgdGhlbiB1c2UgdGhlIGJpbmFy eSBvcC4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKLSsgIG1hc20ubG9h ZENvbnN0YW50U2ltZDEyOChyaHMsIHNjcmF0Y2gpOwotKyAgc3dpdGNoIChpbnMtPm1pcigpLT5z aW1kT3AoKSkgewotKyAgICAvLyBCaXR3aXNlCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4 QW5kOgotKyAgICAgIG1hc20uYml0d2lzZUFuZFNpbWQxMjgobGhzLCBzY3JhdGNoLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhPcjoKLSsgICAgICBt YXNtLmJpdHdpc2VPclNpbWQxMjgobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhYb3I6Ci0rICAgICAgbWFzbS5iaXR3aXNlWG9y U2ltZDEyOChsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6VjEyOEFuZE5vdDoKLSsgICAgICBtYXNtLmJpdHdpc2VBbmROb3RTaW1kMTI4 KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIEludGVnZXIgYWRk Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFkZDoKLSsgICAgICBtYXNtLmFkZEludDh4 MTYobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4QWRkOgotKyAgICAgIG1hc20uYWRkSW50MTZ4OChsaHMsIHNjcmF0Y2gsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRBZGQ6Ci0r ICAgICAgbWFzbS5hZGRJbnQzMng0KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkFkZDoKLSsgICAgICBtYXNtLmFkZEludDY0 eDIobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdlciBz dWIKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U3ViOgotKyAgICAgIG1hc20uc3ViSW50 OHgxNihsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhTdWI6Ci0rICAgICAgbWFzbS5zdWJJbnQxNng4KGxocywgc2NyYXRjaCwg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFN1YjoK LSsgICAgICBtYXNtLnN1YkludDMyeDQobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU3ViOgotKyAgICAgIG1hc20uc3ViSW50 NjR4MihsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBJbnRlZ2Vy IG11bHRpcGx5ICgxNi0vMzItYml0IGxhbmVzOyBJNjR4MiB1bnJlYWNoYWJsZSwgc2VlIGJlbG93 KQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhNdWw6Ci0rICAgICAgbWFzbS5tdWxJbnQx Nng4KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMzJ4NE11bDoKLSsgICAgICBtYXNtLm11bEludDMyeDQobGhzLCBzY3JhdGNoLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyTXVsOgot KyAgICAgIC8vIFVucmVhY2hhYmxlIG9uIFBQQzY0OiBNV2FzbUJpbmFyeVNpbWQxMjg6OnNwZWNp YWxpemVGb3JDb25zdGFudFJocwotKyAgICAgIC8vIHJldHVybnMgZmFsc2UgaW4gTG93ZXJpbmct cHBjNjQuY3BwLCBzbyBNSVIgd2l0aCBhIGNvbnN0YW50IHJocwotKyAgICAgIC8vIHRvIEk2NHgy TXVsIGlzIG5ldmVyIGNyZWF0ZWQgb24gdGhpcyBiYWNrZW5kLgotKyAgICAgIC8vCi0rICAgICAg Ly8gVGhlIHByZXZpb3VzIGluLXBsYWNlIGltcGxlbWVudGF0aW9uIHdhcyBicm9rZW4gaW4gdGhy ZWUgd2F5czoKLSsgICAgICAvLyBoYXJkLWNvZGVkIFZSMC9WUjEgc3RhZ2luZyBhc3N1bWVkIGFu IG9yZGVyaW5nIHRoYXQgZGlkbid0IG1hdGNoCi0rICAgICAgLy8gdGhlIHN1cnJvdW5kaW5nIGNv ZGU7IGEgZGVhZCBgbWZ2c3JkKGEsIGYwKWAgY2xvYmJlcmVkIGBhYAotKyAgICAgIC8vIGltbWVk aWF0ZWx5IGJlZm9yZSB0aGUgbmV4dCBtZnZzcmQ7IGFuZCB0aGUgdHJhaWxpbmcKLSsgICAgICAv LyBgeHhwZXJtZGkoZGVzdCwgc2NyYXRjaCwgZGVzdCwgMClgIHdpdGggRE09MCBwbGFjZWQgbGFu ZS0wIGluIHRoZQotKyAgICAgIC8vIHdyb25nIGhhbGYuIFJhdGhlciB0aGFuIHNoaXAgZGVhZC1i dXQtYnJva2VuIGNvZGUsIGNyYXNoIGxvdWRseQotKyAgICAgIC8vIGlmIHJlYWNoYWJpbGl0eSBl dmVyIGNoYW5nZXMg4oCUIHRoZSBmdXR1cmUgZW5hYmxlciBtdXN0IHdyaXRlIGEKLSsgICAgICAv LyBjb3JyZWN0IGxvd2VyaW5nIChlLmcuIHZpYSBtYXNtLm11bEludDY0eDIgd2l0aCBleHBsaWNp dCB0ZW1wcykuCi0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogSTY0eDJNdWwgd2l0aCBjb25zdGFu dCByaHMgdW5pbXBsZW1lbnRlZCAiCi0rICAgICAgICAgICAgICAgICIoc3BlY2lhbGl6ZUZvckNv bnN0YW50UmhzIHJldHVybnMgZmFsc2UpIik7Ci0rICAgIC8vIENvbXBhcmUKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk4eDE2RXE6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJs ZXI6OkVxdWFsLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZOZToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2Vt Ymxlcjo6Tm90RXF1YWwsIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgYmluYXJ5LXdpdGgt Y29uc3RhbnQgb3AiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21W YXJpYWJsZVNoaWZ0U2ltZDEyOCgKLSsgICAgTFdhc21WYXJpYWJsZVNoaWZ0U2ltZDEyOCogaW5z KSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmxocygpKTsK LSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSk7Ci0rICBGbG9hdFJlZ2lz dGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBzd2l0Y2ggKGlu cy0+bWlyKCktPnNpbWRPcCgpKSB7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNobDoK LSsgICAgICBtYXNtLmxlZnRTaGlmdEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJTOgotKyAgICAgIG1hc20ucmln aHRTaGlmdEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZTaHJVOgotKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0 SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OFNobDoKLSsgICAgICBtYXNtLmxlZnRTaGlmdEludDE2eDgobGhzLCByaHMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJT OgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJVOgotKyAgICAgIG1hc20u dW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNobDoKLSsgICAgICBtYXNtLmxlZnRTaGlm dEludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STMyeDRTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDMyeDQobGhzLCBy aHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRT aHJVOgotKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNobDoKLSsg ICAgICBtYXNtLmxlZnRTaGlmdEludDY0eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJTOgotKyAgICAgIG1hc20ucmlnaHRT aGlmdEludDY0eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STY0eDJTaHJVOgotKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50 NjR4MihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAg ICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgdmFyaWFibGUgc2hpZnQgb3AiKTsKLSsgIH0K LSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Db25zdGFudFNoaWZ0U2ltZDEyOCgK LSsgICAgTFdhc21Db25zdGFudFNoaWZ0U2ltZDEyOCogaW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVy IHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgZGVz dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIGludDMyX3Qgc2hpZnQgPSBp bnMtPnNoaWZ0KCk7Ci0rICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNobDoKLSsgICAgICBtYXNtLmxlZnRTaGlmdEludDh4MTYo SW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDh4MTYoSW1tMzIo c2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STh4MTZTaHJVOgotKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihJbW0z MihzaGlmdCksIHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OFNobDoKLSsgICAgICBtYXNtLmxlZnRTaGlmdEludDE2eDgoSW1tMzIoc2hpZnQp LCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2 eDhTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDE2eDgoSW1tMzIoc2hpZnQpLCBzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJV OgotKyAgICAgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChJbW0zMihzaGlmdCksIHNy YywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNo bDoKLSsgICAgICBtYXNtLmxlZnRTaGlmdEludDMyeDQoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJTOgotKyAg ICAgIG1hc20ucmlnaHRTaGlmdEludDMyeDQoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJVOgotKyAgICAgIG1h c20udW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJbW0zMihzaGlmdCksIHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNobDoKLSsgICAgICBt YXNtLmxlZnRTaGlmdEludDY0eDIoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJTOgotKyAgICAgIG1hc20ucmln aHRTaGlmdEludDY0eDIoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJVOgotKyAgICAgIG1hc20udW5zaWduZWRS aWdodFNoaWZ0SW50NjR4MihJbW0zMihzaGlmdCksIHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgY29uc3Rh bnQgc2hpZnQgb3AiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21T aWduUmVwbGljYXRpb25TaW1kMTI4KAotKyAgICBMV2FzbVNpZ25SZXBsaWNhdGlvblNpbWQxMjgq IGlucykgewotKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMo KSk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQo KSk7Ci0rICAvLyBTaWduIHJlcGxpY2F0aW9uID0gYXJpdGhtZXRpYyByaWdodCBzaGlmdCBieSBt YXggYW1vdW50IChhbGwgc2lnbiBiaXRzKS4KLSsgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9w KCkpIHsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyUzoKLSsgICAgICBtYXNtLnJp Z2h0U2hpZnRJbnQ4eDE2KEltbTMyKDcpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdElu dDE2eDgoSW1tMzIoMTUpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STMyeDRTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDMyeDQoSW1t MzIoMzEpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STY0eDJTaHJTOgotKyAgICAgIG1hc20ucmlnaHRTaGlmdEludDY0eDIoSW1tMzIoNjMpLCBz cmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFT SCgiVW5leHBlY3RlZCBzaWduIHJlcGxpY2F0aW9uIG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2h1ZmZsZVNpbWQxMjgoTFdhc21TaHVmZmxlU2ltZDEyOCog aW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmxocygp KTsKLSsgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+cmhzKCkpOwot KyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwot KyAgU2ltZENvbnN0YW50IGN0cmwgPSBpbnMtPmNvbnRyb2woKTsKLSsgIGNvbnN0IHVpbnQ4X3Qq IGxhbmVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oY3RybC5ieXRlcygpKTsK LSsgIG1hc20uc2h1ZmZsZUludDh4MTYobGFuZXMsIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21QZXJtdXRlU2ltZDEyOChMV2FzbVBlcm11dGVTaW1k MTI4KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+ c3JjKCkpOwotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpOwotKyAgLy8gUFBDNjQ6IHRoZSBzaHVmZmxlIGFuYWx5c2lzIHRyYW5zZm9ybXMgY29u dHJvbCBieXRlcyBpbnRvIHNwZWNpYWxpemVkCi0rICAvLyBmb3JtYXRzLiBSZWNvbnN0cnVjdCBy YXcgV2FzbSBieXRlIGluZGljZXMgZm9yIG91ciB2cGVybSBpbXBsZW1lbnRhdGlvbi4KLSsgIFNp bWRDb25zdGFudCBjdHJsID0gaW5zLT5jb250cm9sKCk7Ci0rICB1aW50OF90IHJhd0xhbmVzWzE2 XTsKLSsgIHN3aXRjaCAoaW5zLT5vcCgpKSB7Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6TU9W RToKLSsgICAgICBtYXNtLm1vdmVTaW1kMTI4KHNyYywgZGVzdCk7Ci0rICAgICAgcmV0dXJuOwot KyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlBFUk1VVEVfMzJ4NDogewotKyAgICAgIGNvbnN0IGlu dDMyX3QqIHdvcmRzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4oY3RybC5ieXRl cygpKTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSsgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgNDsgaisrKQotKyAgICAgICAgICByYXdMYW5lc1tpICogNCArIGpdID0g d29yZHNbaV0gKiA0ICsgajsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIFNpbWRQ ZXJtdXRlT3A6OlBFUk1VVEVfMTZ4ODogewotKyAgICAgIC8vIGNvbnRyb2wgaGFzIGludDE2IGhh bGZ3b3JkIGluZGljZXMuIEhpZ2ggYnl0ZSBvZiBoYWxmc1swXSBtYXkgaGF2ZQotKyAgICAgIC8v IHBsYXRmb3JtLXNwZWNpZmljIGZsYWdzIChQZXJtMTZ4OEFjdGlvbikuIE1hc2sgdG8gZ2V0IHRo ZSBpbmRleCBvbmx5LgotKyAgICAgIGNvbnN0IGludDE2X3QqIGhhbGZzID0gcmVpbnRlcnByZXRf Y2FzdDxjb25zdCBpbnQxNl90Kj4oY3RybC5ieXRlcygpKTsKLSsgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgaW50IGh3SWR4ID0gaGFsZnNbaV0gJiAweDc7Ci0r ICAgICAgICByYXdMYW5lc1tpICogMl0gPSBod0lkeCAqIDI7Ci0rICAgICAgICByYXdMYW5lc1tp ICogMiArIDFdID0gaHdJZHggKiAyICsgMTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpCUk9BRENBU1RfOHgxNjogewotKyAgICAgIHVp bnQ4X3QgbGFuZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygp KVswXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHJhd0xhbmVzW2ldID0g bGFuZTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OkJS T0FEQ0FTVF8xNng4OiB7Ci0rICAgICAgdWludDhfdCBsYW5lID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7Ci0rICAgICAgICByYXdMYW5lc1tpICogMl0gPSBsYW5lICogMjsKLSsgICAg ICAgIHJhd0xhbmVzW2kgKiAyICsgMV0gPSBsYW5lICogMiArIDE7Ci0rICAgICAgfQotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6Uk9UQVRFX1JJR0hUXzh4 MTY6IHsKLSsgICAgICB1aW50OF90IHNoaWZ0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4 X3QqPihjdHJsLmJ5dGVzKCkpWzBdOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkr KykgcmF3TGFuZXNbaV0gPSAoaSArIHNoaWZ0KSAlIDE2OwotKyAgICAgIGJyZWFrOwotKyAgICB9 Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6U0hJRlRfTEVGVF84eDE2OiB7Ci0rICAgICAgLy8g U2hpZnRlZC1vdXQgcG9zaXRpb25zIG11c3QgYmUgemVyby4gVXNlIGluZGV4IDE2KyB0byBwaWNr IGZyb20gemVyby4KLSsgICAgICB1aW50OF90IHNoaWZ0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTY7IGkrKykKLSsgICAgICAgIHJhd0xhbmVzW2ldID0gKGkgPj0gc2hpZnQpID8gKGkgLSBzaGlm dCkgOiAoMTYgKyBpKTsKLSsgICAgICBnb3RvIG5lZWRzWmVyb1JoczsKLSsgICAgfQotKyAgICBj YXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX1JJR0hUXzh4MTY6IHsKLSsgICAgICB1aW50OF90IHNo aWZ0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpWzBdOwot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgICAgIHJhd0xhbmVzW2ld ID0gKGkgKyBzaGlmdCA8IDE2KSA/IChpICsgc2hpZnQpIDogKDE2ICsgaSk7Ci0rICAgICAgZ290 byBuZWVkc1plcm9SaHM7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNF XzE2eDg6IHsKLSsgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDE2LWJpdCBsYW5l OiBbMSwwLDMsMiw1LDQsLi4uXQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7 Ci0rICAgICAgICByYXdMYW5lc1tpICogMl0gPSBpICogMiArIDE7Ci0rICAgICAgICByYXdMYW5l c1tpICogMiArIDFdID0gaSAqIDI7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UkVWRVJTRV8zMng0OiB7Ci0rICAgICAgLy8gUmV2ZXJz ZSBieXRlcyB3aXRoaW4gZWFjaCAzMi1iaXQgbGFuZTogWzMsMiwxLDAsNyw2LDUsNCwuLi5dCi0r ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCi0rICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IDQ7IGorKykKLSsgICAgICAgICAgcmF3TGFuZXNbaSAqIDQgKyBqXSA9IGkgKiA0ICsg KDMgLSBqKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6 OlJFVkVSU0VfNjR4MjogewotKyAgICAgIC8vIFJldmVyc2UgYnl0ZXMgd2l0aGluIGVhY2ggNjQt Yml0IGxhbmU6IFs3LDYsNSw0LDMsMiwxLDAsMTUsLi4uXQotKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMjsgaSsrKQotKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCi0rICAg ICAgICAgIHJhd0xhbmVzW2kgKiA4ICsgal0gPSBpICogOCArICg3IC0gaik7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVORF84eDE2X1RP XzE2eDg6Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfOHgxNl9UT18zMng0 OgotKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9fRVhURU5EXzh4MTZfVE9fNjR4MjoKLSsg ICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVORF8xNng4X1RPXzMyeDQ6Ci0rICAgIGNh c2UgU2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfMTZ4OF9UT182NHgyOgotKyAgICBjYXNlIFNp bWRQZXJtdXRlT3A6OlpFUk9fRVhURU5EXzMyeDRfVE9fNjR4MjogewotKyAgICAgIGNvbnN0IGlu dDhfdCogYnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KGN0cmwuYnl0ZXMo KSk7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSByYXdMYW5lc1tpXSA9IGJ5 dGVzW2ldOwotKyAgICAgIGdvdG8gbmVlZHNaZXJvUmhzOwotKyAgICB9Ci0rICAgIGRlZmF1bHQ6 IHsKLSsgICAgICAvLyBQRVJNVVRFXzh4MTYgYW5kIG90aGVyczogY29udHJvbCBoYXMgcmF3IGJ5 dGUgaW5kaWNlcy4KLSsgICAgICBjb25zdCBpbnQ4X3QqIGJ5dGVzID0gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgcmF3TGFuZXNbaV0gPSBieXRlc1tpXTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKyAgfQotKyAgbWFzbS5zaHVmZmxlSW50OHgxNihyYXdMYW5lcywgc3JjLCBzcmMsIGRlc3Qp OwotKyAgcmV0dXJuOwotKwotKyAgbmVlZHNaZXJvUmhzOiB7Ci0rICAgIC8vIFdhc20gY29udmVu dGlvbjogcmF3TGFuZXNbaV0gaW4gMC4uMTUgc2VsZWN0cyBzcmMuTEVfYnl0ZVtpZHhdLCBhbmQK LSsgICAgLy8gcmF3TGFuZXNbaV0gPj0gMTYgbWVhbnMgInplcm8iLiBXaXRob3V0IHNwaWxsaW5n LCB3ZSBjYW4ndCBzYXRpc2Z5Ci0rICAgIC8vIHZwZXJtJ3MgdGhyZWUtaW5wdXQgY29uc3RyYWlu dCBBTkQga2VlcCBzcmMgYWxpdmUgd2hlbiBkZXN0ID09IHNyYy4KLSsgICAgLy8gU3RyYXRlZ3k6 IHZwZXJtIHNyYyB3aXRoIGl0c2VsZiAoYW55IHZhbGlkIGJ5dGUgZm9yIHRoZSAiemVybyIKLSsg ICAgLy8gcG9zaXRpb25zLCBieXRlcyBnZXQgbWFza2VkIG91dCBiZWxvdyksIHRoZW4gQU5EIHdp dGggYSBtYXNrIHRoYXQKLSsgICAgLy8gemVyb3MgdGhvc2UgcG9zaXRpb25zLgotKyAgICBpbnQ4 X3QgY3RybFsxNl0sIG1hc2tbMTZdOwotKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7 IGkrKykgewotKyAgICAgIHVpbnQ4X3QgaWR4ID0gcmF3TGFuZXNbaV07Ci0rICAgICAgaWYgKGlk eCA8IDE2KSB7Ci0rICAgICAgICBjdHJsW2ldID0gMTUgLSBpZHg7Ci0rICAgICAgICBtYXNrW2ld ID0gLTE7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGN0cmxbaV0gPSAwOwotKyAgICAgICAg bWFza1tpXSA9IDA7Ci0rICAgICAgfQotKyAgICB9Ci0rICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaChtYXNtKTsKLSsgICAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRDb25zdGFu dDo6Q3JlYXRlWDE2KGN0cmwpLCBzY3JhdGNoKTsKLSsgICAgbWFzbS5hc192cGVybShkZXN0LmVu Y29kaW5nKCkgJiAzMSwKLSsgICAgICAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxLAot KyAgICAgICAgICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgICAg ICAgc2NyYXRjaC5lbmNvZGluZygpICYgMzEpOwotKyAgICBtYXNtLmxvYWRDb25zdGFudFNpbWQx MjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYobWFzayksIHNjcmF0Y2gpOwotKyAgICBtYXNtLmFz X3h4bGFuZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuOwotKyAgfQotK30KLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVJlcGxhY2VMYW5lU2ltZDEyOChMV2FzbVJlcGxh Y2VMYW5lU2ltZDEyOCogaW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QgPSBUb0Zsb2F0 UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBNT1pfQVNTRVJUKFRvRmxvYXRSZWdpc3Rlcihp bnMtPmxocygpKSA9PSBsaHNEZXN0KTsKLSsgIHVpbnQzMl90IGxhbmUgPSBpbnMtPm1pcigpLT5s YW5lSW5kZXgoKTsKLSsgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk4eDE2UmVwbGFjZUxhbmU6Ci0rICAgICAgbWFzbS5yZXBsYWNlTGFu ZUludDh4MTYobGFuZSwgVG9SZWdpc3RlcihpbnMtPnJocygpKSwgbGhzRGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFJlcGxhY2VMYW5lOgotKyAgICAg IG1hc20ucmVwbGFjZUxhbmVJbnQxNng4KGxhbmUsIFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxo c0Rlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZXBs YWNlTGFuZToKLSsgICAgICBtYXNtLnJlcGxhY2VMYW5lSW50MzJ4NChsYW5lLCBUb1JlZ2lzdGVy KGlucy0+cmhzKCkpLCBsaHNEZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkYzMng0UmVwbGFjZUxhbmU6Ci0rICAgICAgbWFzbS5yZXBsYWNlTGFuZUZsb2F0MzJ4 NChsYW5lLCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxoc0Rlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZXBsYWNlTGFuZToKLSsgICAgICBt YXNtLnJlcGxhY2VMYW5lRmxvYXQ2NHgyKGxhbmUsIFRvRmxvYXRSZWdpc3RlcihpbnMtPnJocygp KSwgbGhzRGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NS QVNIKCJQUEM2NDogTllJIFNJTUQgcmVwbGFjZSBsYW5lIG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUmVwbGFjZUludDY0TGFuZVNpbWQxMjgoCi0rICAgIExX YXNtUmVwbGFjZUludDY0TGFuZVNpbWQxMjgqIGlucykgewotKyAgTU9aX0FTU0VSVChpbnMtPm1p cigpLT5zaW1kT3AoKSA9PSB3YXNtOjpTaW1kT3A6Okk2NHgyUmVwbGFjZUxhbmUpOwotKyAgRmxv YXRSZWdpc3RlciBsaHNEZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAg TU9aX0FTU0VSVChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSkgPT0gbGhzRGVzdCk7Ci0rICBt YXNtLnJlcGxhY2VMYW5lSW50NjR4MihpbnMtPm1pcigpLT5sYW5lSW5kZXgoKSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXI2NChpbnMtPnJocygpKSwgbGhzRGVzdCk7Ci0r fQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2NhbGFyVG9TaW1kMTI4KExXYXNtU2Nh bGFyVG9TaW1kMTI4KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdp c3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U3BsYXQ6Ci0rICAgICAgbWFzbS5zcGxhdFgx NihUb1JlZ2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkkxNng4U3BsYXQ6Ci0rICAgICAgbWFzbS5zcGxhdFg4KFRvUmVnaXN0 ZXIoaW5zLT5zcmMoKSksIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STMyeDRTcGxhdDoKLSsgICAgICBtYXNtLnNwbGF0WDQoVG9SZWdpc3RlcihpbnMtPnNy YygpKSwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4 NFNwbGF0OgotKyAgICAgIG1hc20uc3BsYXRYNChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSks IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJTcGxh dDoKLSsgICAgICBtYXNtLnNwbGF0WDIoVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlBQQzY0 OiBOWUkgU0lNRCBzY2FsYXItdG8tc2ltZCBvcCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbUludDY0VG9TaW1kMTI4KExXYXNtSW50NjRUb1NpbWQxMjgqIGlucykg ewotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OwotKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STY0eDJTcGxhdDoKLSsgICAgICBtYXNtLnNwbGF0WDIoVG9SZWdpc3RlcjY0KGlucy0+ c3JjKCkpLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pf Q1JBU0goIlBQQzY0OiBOWUkgU0lNRCBpbnQ2NC10by1zaW1kIG9wIik7Ci0rICB9Ci0rfQotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtVW5hcnlTaW1kMTI4KExXYXNtVW5hcnlTaW1kMTI4 KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3Jj KCkpOwotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpOwotKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZOZWc6Ci0rICAgICAgbWFzbS5uZWdJbnQ4eDE2KHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE5lZzoKLSsgICAgICBt YXNtLm5lZ0ludDE2eDgoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkkzMng0TmVnOgotKyAgICAgIG1hc20ubmVnSW50MzJ4NChzcmMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJOZWc6Ci0rICAgICAg bWFzbS5uZWdJbnQ2NHgyKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJOHgxNkFiczoKLSsgICAgICBtYXNtLmFic0ludDh4MTYoc3JjLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWJzOgotKyAgICAg IG1hc20uYWJzSW50MTZ4OChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STMyeDRBYnM6Ci0rICAgICAgbWFzbS5hYnNJbnQzMng0KHNyYywgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkFiczoKLSsgICAg ICBtYXNtLmFic0ludDY0eDIoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OlYxMjhOb3Q6Ci0rICAgICAgbWFzbS5iaXR3aXNlTm90U2ltZDEyOChzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDROZWc6 Ci0rICAgICAgbWFzbS5uZWdGbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTmVnOgotKyAgICAgIG1hc20ubmVnRmxvYXQ2NHgy KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4 NEFiczoKLSsgICAgICBtYXNtLmFic0Zsb2F0MzJ4NChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJBYnM6Ci0rICAgICAgbWFzbS5hYnNGbG9h dDY0eDIoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkYzMng0U3FydDoKLSsgICAgICBtYXNtLnNxcnRGbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyU3FydDoKLSsgICAgICBtYXNt LnNxcnRGbG9hdDY0eDIoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkYzMng0Q2VpbDoKLSsgICAgICBtYXNtLmNlaWxGbG9hdDMyeDQoc3JjLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyQ2VpbDoKLSsg ICAgICBtYXNtLmNlaWxGbG9hdDY0eDIoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Rmxvb3I6Ci0rICAgICAgbWFzbS5mbG9vckZsb2F0MzJ4 NChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0 eDJGbG9vcjoKLSsgICAgICBtYXNtLmZsb29yRmxvYXQ2NHgyKHNyYywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFRydW5jOgotKyAgICAgIG1hc20u dHJ1bmNGbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkY2NHgyVHJ1bmM6Ci0rICAgICAgbWFzbS50cnVuY0Zsb2F0NjR4MihzcmMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDROZWFyZXN0 OgotKyAgICAgIG1hc20ubmVhcmVzdEZsb2F0MzJ4NChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJOZWFyZXN0OgotKyAgICAgIG1hc20ubmVh cmVzdEZsb2F0NjR4MihzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBDb252ZXJz aW9ucwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRDb252ZXJ0STMyeDRTOgotKyAgICAg IG1hc20uY29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRDb252ZXJ0STMyeDRVOgotKyAgICAgIG1h c20udW5zaWduZWRDb252ZXJ0SW50MzJ4NFRvRmxvYXQzMng0KHNyYywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFRydW5jU2F0RjMyeDRTOgotKyAg ICAgIG1hc20udHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0VHJ1bmNTYXRGMzJ4NFU6Ci0rICAg ICAgbWFzbS51bnNpZ25lZFRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkNvbnZlcnRMb3dJMzJ4 NFM6Ci0rICAgICAgbWFzbS5jb252ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkNvbnZlcnRMb3dJMzJ4 NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZENvbnZlcnRJbnQzMng0VG9GbG9hdDY0eDIoc3JjLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0RGVtb3Rl RjY0eDJaZXJvOgotKyAgICAgIG1hc20uY29udmVydEZsb2F0NjR4MlRvRmxvYXQzMng0KHNyYywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlByb21v dGVMb3dGMzJ4NDoKLSsgICAgICBtYXNtLmNvbnZlcnRGbG9hdDMyeDRUb0Zsb2F0NjR4MihzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRUcnVu Y1NhdEY2NHgyU1plcm86Ci0rICAgICAgbWFzbS50cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChz cmMsIGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkzMng0VHJ1bmNTYXRGNjR4MlVaZXJvOgotKyAgICAgIG1hc20udW5zaWdu ZWRUcnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChzcmMsIGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVn KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gV2lkZW4KLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkxNng4RXh0ZW5kTG93STh4MTZTOgotKyAgICAgIG1hc20ud2lkZW5Mb3dJbnQ4eDE2KHNyYywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGVu ZEhpZ2hJOHgxNlM6Ci0rICAgICAgbWFzbS53aWRlbkhpZ2hJbnQ4eDE2KHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGVuZExvd0k4eDE2 VToKLSsgICAgICBtYXNtLnVuc2lnbmVkV2lkZW5Mb3dJbnQ4eDE2KHNyYywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGVuZEhpZ2hJOHgxNlU6 Ci0rICAgICAgbWFzbS51bnNpZ25lZFdpZGVuSGlnaEludDh4MTYoc3JjLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0ZW5kTG93STE2eDhTOgot KyAgICAgIG1hc20ud2lkZW5Mb3dJbnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVuZEhpZ2hJMTZ4OFM6Ci0rICAgICAgbWFz bS53aWRlbkhpZ2hJbnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVuZExvd0kxNng4VToKLSsgICAgICBtYXNtLnVuc2lnbmVk V2lkZW5Mb3dJbnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMzJ4NEV4dGVuZEhpZ2hJMTZ4OFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFdp ZGVuSGlnaEludDE2eDgoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk2NHgyRXh0ZW5kTG93STMyeDRTOgotKyAgICAgIG1hc20ud2lkZW5Mb3dJbnQz Mng0KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ NjR4MkV4dGVuZEhpZ2hJMzJ4NFM6Ci0rICAgICAgbWFzbS53aWRlbkhpZ2hJbnQzMng0KHNyYywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dGVu ZExvd0kzMng0VToKLSsgICAgICBtYXNtLnVuc2lnbmVkV2lkZW5Mb3dJbnQzMng0KHNyYywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dGVuZEhp Z2hJMzJ4NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFdpZGVuSGlnaEludDMyeDQoc3JjLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gRXh0ZW5kZWQgYWRkIHBhaXJ3aXNlCi0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGFkZFBhaXJ3aXNlSTh4MTZTOgotKyAgICAgIG1hc20u ZXh0QWRkUGFpcndpc2VJbnQ4eDE2KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGFkZFBhaXJ3aXNlSTh4MTZVOgotKyAgICAgIG1hc20u dW5zaWduZWRFeHRBZGRQYWlyd2lzZUludDh4MTYoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0YWRkUGFpcndpc2VJMTZ4OFM6Ci0rICAg ICAgbWFzbS5leHRBZGRQYWlyd2lzZUludDE2eDgoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0RXh0YWRkUGFpcndpc2VJMTZ4OFU6Ci0rICAg ICAgbWFzbS51bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50MTZ4OChzcmMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICAvLyBSZWxheGVkIHRydW5jYXRpb24KLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0UmVsYXhlZFRydW5jRjMyeDRTOgotKyAgICAgIG1hc20udHJ1bmNGbG9hdDMyeDRU b0ludDMyeDRSZWxheGVkKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRUcnVuY0YzMng0VToKLSsgICAgICBtYXNtLnVuc2lnbmVk VHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRUcnVuY0Y2NHgyU1plcm86Ci0r ICAgICAgbWFzbS50cnVuY0Zsb2F0NjR4MlRvSW50MzJ4NFJlbGF4ZWQoc3JjLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0UmVsYXhlZFRydW5jRjY0 eDJVWmVybzoKLSsgICAgICBtYXNtLnVuc2lnbmVkVHJ1bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxh eGVkKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIFBvcGNudAotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZQb3BjbnQ6Ci0rICAgICAgbWFzbS5wb3BjbnRJbnQ4eDE2KHNy YywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNI KCJQUEM2NDogTllJIFNJTUQgdW5hcnkgb3AiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFdhc21SZWR1Y2VTaW1kMTI4KExXYXNtUmVkdWNlU2ltZDEyOCogaW5zKSB7Ci0r ICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsKLSsgIHVp bnQzMl90IGltbSA9IGlucy0+bWlyKCktPmltbSgpOwotKyAgc3dpdGNoIChpbnMtPm1pcigpLT5z aW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZFeHRyYWN0TGFuZVM6Ci0r ICAgICAgbWFzbS5leHRyYWN0TGFuZUludDh4MTYoaW1tLCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZF eHRyYWN0TGFuZVU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dHJhY3RMYW5lSW50OHgxNihpbW0s IHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dHJhY3RMYW5lUzoKLSsgICAgICBtYXNtLmV4dHJhY3RM YW5lSW50MTZ4OChpbW0sIHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dHJhY3RMYW5lVToKLSsgICAg ICBtYXNtLnVuc2lnbmVkRXh0cmFjdExhbmVJbnQxNng4KGltbSwgc3JjLCBUb1JlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkz Mng0RXh0cmFjdExhbmU6Ci0rICAgICAgbWFzbS5leHRyYWN0TGFuZUludDMyeDQoaW1tLCBzcmMs IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDRFeHRyYWN0TGFuZToKLSsgICAgICBtYXNtLmV4dHJhY3RMYW5lRmxv YXQzMng0KGltbSwgc3JjLCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJFeHRyYWN0TGFuZToKLSsgICAg ICBtYXNtLmV4dHJhY3RMYW5lRmxvYXQ2NHgyKGltbSwgc3JjLCBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEy OEFueVRydWU6Ci0rICAgICAgbWFzbS5hbnlUcnVlU2ltZDEyOChzcmMsIFRvUmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4 MTZBbGxUcnVlOgotKyAgICAgIG1hc20uYWxsVHJ1ZUludDh4MTYoc3JjLCBUb1JlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkx Nng4QWxsVHJ1ZToKLSsgICAgICBtYXNtLmFsbFRydWVJbnQxNng4KHNyYywgVG9SZWdpc3Rlcihp bnMtPm91dHB1dCgpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MzJ4NEFsbFRydWU6Ci0rICAgICAgbWFzbS5hbGxUcnVlSW50MzJ4NChzcmMsIFRvUmVnaXN0ZXIo aW5zLT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STY0eDJBbGxUcnVlOgotKyAgICAgIG1hc20uYWxsVHJ1ZUludDY0eDIoc3JjLCBUb1JlZ2lzdGVy KGlucy0+b3V0cHV0KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2Qml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQ4eDE2KHNyYywgVG9SZWdpc3Rl cihpbnMtPm91dHB1dCgpKSwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhCaXRtYXNrOgotKyAgICAgIG1hc20uYml0bWFza0lu dDE2eDgoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpLCBTY3JhdGNoU2ltZDEyOFJlZyk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEJpdG1hc2s6Ci0r ICAgICAgbWFzbS5iaXRtYXNrSW50MzJ4NChzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSks IFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk2NHgyQml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQ2NHgyKHNyYywgVG9SZWdp c3RlcihpbnMtPm91dHB1dCgpKSwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgIGJyZWFrOwot KyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHJlZHVjZSBv cCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVJlZHVjZUFuZEJy YW5jaFNpbWQxMjgoCi0rICAgIExXYXNtUmVkdWNlQW5kQnJhbmNoU2ltZDEyOCogaW5zKSB7Ci0r ICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgdG1wID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgc3dpdGNoIChpbnMtPnNpbWRPcCgpKSB7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpWMTI4QW55VHJ1ZToKLSsgICAgICBtYXNtLmFueVRydWVTaW1kMTI4KHNyYywg dG1wKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWxsVHJ1 ZToKLSsgICAgICBtYXNtLmFsbFRydWVJbnQ4eDE2KHNyYywgdG1wKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWxsVHJ1ZToKLSsgICAgICBtYXNtLmFsbFRy dWVJbnQxNng4KHNyYywgdG1wKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0QWxsVHJ1ZToKLSsgICAgICBtYXNtLmFsbFRydWVJbnQzMng0KHNyYywgdG1wKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQWxsVHJ1ZToKLSsg ICAgICBtYXNtLmFsbFRydWVJbnQ2NHgyKHNyYywgdG1wKTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2Qml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQ4 eDE2KHNyYywgdG1wLCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEJpdG1hc2s6Ci0rICAgICAgbWFzbS5iaXRtYXNrSW50MTZ4 OChzcmMsIHRtcCwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRCaXRtYXNrOgotKyAgICAgIG1hc20uYml0bWFza0ludDMyeDQo c3JjLCB0bXAsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyQml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQ2NHgyKHNy YywgdG1wLCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6 Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgcmVkdWNlLWFuZC1icmFuY2ggb3Ai KTsKLSsgIH0KLSsgIG1hc20uYXNfY21wZGkodG1wLCAwKTsKLSsgIC8vIEJyYW5jaCB0byBpZlRy dWUgaWYgbm9uemVybywgZmFsbCB0aHJvdWdoIHRvIGlmRmFsc2UuCi0rICBMYWJlbCogaWZUcnVl ID0gc2tpcFRyaXZpYWxCbG9ja3MoaW5zLT5pZlRydWUoKSktPmxpcigpLT5sYWJlbCgpOwotKyAg TGFiZWwqIGlmRmFsc2UgPSBza2lwVHJpdmlhbEJsb2NrcyhpbnMtPmlmRmFsc2UoKSktPmxpcigp LT5sYWJlbCgpOwotKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGlmVHJ1ZSk7Ci0r ICBtYXNtLmp1bXAoaWZGYWxzZSk7Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt UmVkdWNlU2ltZDEyOFRvSW50NjQoCi0rICAgIExXYXNtUmVkdWNlU2ltZDEyOFRvSW50NjQqIGlu cykgewotKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7 Ci0rICBSZWdpc3RlcjY0IGRlc3QgPSBUb091dFJlZ2lzdGVyNjQoaW5zKTsKLSsgIHN3aXRjaCAo aW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyRXh0 cmFjdExhbmU6Ci0rICAgICAgbWFzbS5leHRyYWN0TGFuZUludDY0eDIoaW5zLT5taXIoKS0+aW1t KCksIHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9a X0NSQVNIKCJQUEM2NDogTllJIFNJTUQgcmVkdWNlLXRvLWludDY0IG9wIik7Ci0rICB9Ci0rfQot K3N0YXRpYyBpbmxpbmUgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyBEZXJpdmVNZW1vcnlBY2Nlc3NE ZXNjKAotKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFNjYWxhcjo6 VHlwZSB0eXBlKSB7Ci0rICByZXR1cm4gd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyhhY2Nlc3MubWVt b3J5SW5kZXgoKSwgdHlwZSwgYWNjZXNzLmFsaWduKCksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhY2Nlc3Mub2Zmc2V0MzIoKSwgYWNjZXNzLnRyYXBEZXNjKCksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MuaXNIdWdlTWVtb3J5KCkpOwotK30KLSsK LSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWRMYW5lU2ltZDEyOChMV2FzbUxvYWRM YW5lU2ltZDEyOCogaW5zKSB7Ci0rICBjb25zdCBNV2FzbUxvYWRMYW5lU2ltZDEyOCogbWlyID0g aW5zLT5taXIoKTsKLSsgIFJlZ2lzdGVyIG1lbW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGlucy0+bWVt b3J5QmFzZSgpKTsKLSsgIFJlZ2lzdGVyIHB0ciA9IFRvUmVnaXN0ZXIoaW5zLT5wdHIoKSk7Ci0r ICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsKLSsgIEZs b2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgdG1wID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgbWFzbS5tb3ZlU2ltZDEyOChzcmMsIGRlc3QpOwotKyAgc3dpdGNo IChtaXItPmxhbmVTaXplKCkpIHsKLSsgICAgY2FzZSAxOgotKyAgICAgIG1hc20ud2FzbUxvYWQo RGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6OkludDgpLAotKyAg ICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgcHRyLCBwdHIsIEFueVJlZ2lzdGVyKHRtcCkp OwotKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQ4eDE2KG1pci0+bGFuZUluZGV4KCksIHRtcCwg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgMjoKLSsgICAgICBtYXNtLndhc21Mb2Fk KERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQxNiksCi0r ICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNlLCBwdHIsIHB0ciwgQW55UmVnaXN0ZXIodG1w KSk7Ci0rICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDE2eDgobWlyLT5sYW5lSW5kZXgoKSwgdG1w LCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSA0OgotKyAgICAgIG1hc20ud2FzbUxv YWQoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6OkludDMyKSwK LSsgICAgICAgICAgICAgICAgICAgIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBBbnlSZWdpc3Rlcih0 bXApKTsKLSsgICAgICBtYXNtLnJlcGxhY2VMYW5lSW50MzJ4NChtaXItPmxhbmVJbmRleCgpLCB0 bXAsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDg6IHsKLSsgICAgICBtYXNtLndh c21Mb2FkSTY0KERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJ bnQ2NCksCi0rICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNlLCBwdHIsIHB0ciwKLSsg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQodG1wKSk7Ci0rICAgICAgbWFzbS5yZXBs YWNlTGFuZUludDY0eDIobWlyLT5sYW5lSW5kZXgoKSwgUmVnaXN0ZXI2NCh0bXApLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgi VW5leHBlY3RlZCBsYW5lIHNpemUiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFdhc21TdG9yZUxhbmVTaW1kMTI4KExXYXNtU3RvcmVMYW5lU2ltZDEyOCogaW5zKSB7Ci0r ICBjb25zdCBNV2FzbVN0b3JlTGFuZVNpbWQxMjgqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBSZWdp c3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdp c3RlciBwdHIgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOwotKyAgRmxvYXRSZWdpc3RlciBzcmMg PSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHN3 aXRjaCAobWlyLT5sYW5lU2l6ZSgpKSB7Ci0rICAgIGNhc2UgMToKLSsgICAgICBtYXNtLnVuc2ln bmVkRXh0cmFjdExhbmVJbnQ4eDE2KG1pci0+bGFuZUluZGV4KCksIHNyYywgdG1wKTsKLSsgICAg ICBtYXNtLndhc21TdG9yZShEZXJpdmVNZW1vcnlBY2Nlc3NEZXNjKG1pci0+YWNjZXNzKCksIFNj YWxhcjo6SW50OCksCi0rICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIodG1wKSwgbWVt b3J5QmFzZSwgcHRyLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDI6Ci0rICAgICAg bWFzbS51bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OChtaXItPmxhbmVJbmRleCgpLCBzcmMsIHRt cCk7Ci0rICAgICAgbWFzbS53YXNtU3RvcmUoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFj Y2VzcygpLCBTY2FsYXI6OkludDE2KSwKLSsgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3Rl cih0bXApLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug NDoKLSsgICAgICBtYXNtLmV4dHJhY3RMYW5lSW50MzJ4NChtaXItPmxhbmVJbmRleCgpLCBzcmMs IHRtcCk7Ci0rICAgICAgbWFzbS53YXNtU3RvcmUoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXIt PmFjY2VzcygpLCBTY2FsYXI6OkludDMyKSwKLSsgICAgICAgICAgICAgICAgICAgICBBbnlSZWdp c3Rlcih0bXApLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgODoKLSsgICAgICBtYXNtLmV4dHJhY3RMYW5lSW50NjR4MihtaXItPmxhbmVJbmRleCgpLCBz cmMsIFJlZ2lzdGVyNjQodG1wKSk7Ci0rICAgICAgbWFzbS53YXNtU3RvcmVJNjQoRGVyaXZlTWVt b3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6OkludDY0KSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0KHRtcCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKLSsg ICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQg bGFuZSBzaXplIik7Ci0rICB9Ci0rfQotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBu YW1lc3BhY2UganMKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3It cHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5oCi1uZXcgZmls ZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi4zNDE0ZWNlYjVhYzQKLS0tLSAvZGV2 L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5oCi1AQCAt MCwwICsxLDEwMSBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRh YnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0 cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3Qg dG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4g SWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBm aWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAq LwotKwotKyNpZm5kZWYgaml0X3BwYzY0X0NvZGVHZW5lcmF0b3JfcHBjNjRfaAotKyNkZWZpbmUg aml0X3BwYzY0X0NvZGVHZW5lcmF0b3JfcHBjNjRfaAotKwotKyNpbmNsdWRlICJqaXQvcHBjNjQv QXNzZW1ibGVyLXBwYzY0LmgiCi0rI2luY2x1ZGUgImppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1z aGFyZWQuaCIKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQgewotKwotK2NsYXNz IENvZGVHZW5lcmF0b3JQUEM2NDsKLStjbGFzcyBPdXRPZkxpbmVUYWJsZVN3aXRjaDsKLSsKLSt1 c2luZyBPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayA9Ci0rICAgIE91dE9mTGluZVdhc21UcnVu Y2F0ZUNoZWNrQmFzZTxDb2RlR2VuZXJhdG9yUFBDNjQ+OwotKwotK2NsYXNzIENvZGVHZW5lcmF0 b3JQUEM2NCA6IHB1YmxpYyBDb2RlR2VuZXJhdG9yU2hhcmVkIHsKLSsgIGZyaWVuZCBjbGFzcyBN b3ZlUmVzb2x2ZXJQUEM2NDsKLSsKLSsgcHJvdGVjdGVkOgotKyAgQ29kZUdlbmVyYXRvclBQQzY0 KE1JUkdlbmVyYXRvciogZ2VuLCBMSVJHcmFwaCogZ3JhcGgsIE1hY3JvQXNzZW1ibGVyKiBtYXNt LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206OkNvZGVNZXRhZGF0YSogY29kZU1l dGEpOwotKwotKyAgTm9uQXNzZXJ0aW5nTGFiZWwgZGVvcHRMYWJlbF87Ci0rCi0rICBPcGVyYW5k IFRvT3BlcmFuZChjb25zdCBMQWxsb2NhdGlvbiYgYSk7Ci0rICBPcGVyYW5kIFRvT3BlcmFuZChj b25zdCBMQWxsb2NhdGlvbiogYSk7Ci0rICBNb3ZlT3BlcmFuZCB0b01vdmVPcGVyYW5kKExBbGxv Y2F0aW9uIGEpIGNvbnN0OwotKwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU Mj4KLSsgIHZvaWQgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMsIFQxIGxocywg VDIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgTFNuYXBzaG90KiBzbmFwc2hvdCkgewotKyAg ICBMYWJlbCBiYWlsOwotKyAgICBtYXNtLmJyYW5jaDMyKGMsIGxocywgcmhzLCAmYmFpbCk7Ci0r ICAgIGJhaWxvdXRGcm9tKCZiYWlsLCBzbmFwc2hvdCk7Ci0rICB9Ci0rICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotKyAgdm9pZCBiYWlsb3V0Q21wUHRyKEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGMsIFQxIGxocywgVDIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgIExTbmFw c2hvdCogc25hcHNob3QpIHsKLSsgICAgTGFiZWwgYmFpbDsKLSsgICAgbWFzbS5icmFuY2hQdHIo YywgbGhzLCByaHMsICZiYWlsKTsKLSsgICAgYmFpbG91dEZyb20oJmJhaWwsIHNuYXBzaG90KTsK LSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci0rICB2b2lkIGJh aWxvdXRUZXN0MzIoQXNzZW1ibGVyOjpDb25kaXRpb24gYywgVDEgbGhzLCBUMiByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgTFNuYXBzaG90KiBzbmFwc2hvdCkgewotKyAgICBMYWJlbCBiYWls OwotKyAgICBtYXNtLmJyYW5jaFRlc3QzMihjLCBsaHMsIHJocywgJmJhaWwpOwotKyAgICBiYWls b3V0RnJvbSgmYmFpbCwgc25hcHNob3QpOwotKyAgfQotKyAgdm9pZCBiYWlsb3V0SWZGYWxzZUJv b2woUmVnaXN0ZXIgbGhzLCBMU25hcHNob3QqIHNuYXBzaG90KTsKLSsgIHZvaWQgYmFpbG91dEZy b20oTGFiZWwqIGxhYmVsLCBMU25hcHNob3QqIHNuYXBzaG90KTsKLSsgIHZvaWQgYmFpbG91dChM U25hcHNob3QqIHNuYXBzaG90KTsKLSsKLSsgcHJvdGVjdGVkOgotKyAgYm9vbCBnZW5lcmF0ZU91 dE9mTGluZUNvZGUoKTsKLSsgIHZvaWQgYnJhbmNoVG9CbG9jayhNQmFzaWNCbG9jayogYmxvY2sp OwotKwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rICB2b2lkIGJyYW5jaFRvQmxvY2soQXNz ZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBUIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICBNQmFzaWNCbG9jayogbWlyKSB7Ci0rICAgIExhYmVsKiBsYWJlbCA9IHNraXBU cml2aWFsQmxvY2tzKG1pciktPmxpcigpLT5sYWJlbCgpOwotKyAgICBtYXNtLmJyYW5jaDMyKGNv bmQsIGxocywgcmhzLCBsYWJlbCk7Ci0rICB9Ci0rICB2b2lkIGJyYW5jaFRvQmxvY2soQXNzZW1i bGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIE1CYXNpY0Jsb2NrKiBtaXIpOwotKyAgdm9p ZCBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RmxvYXRGb3JtYXQgZm10LAotKyAgICAgICAgICAg ICAgICAgICAgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIg bGhzLAotKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBNQmFzaWNCbG9j ayogbWlyKTsKLSsKLSsgIHZvaWQgZW1pdFRhYmxlU3dpdGNoRGlzcGF0Y2goTVRhYmxlU3dpdGNo KiBtaXIsIFJlZ2lzdGVyIGluZGV4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBiYXNlKTsKLSsKLSsgIHZvaWQgZW1pdEJpZ0ludFB0ckRpdihMQmlnSW50UHRyRGl2 KiBpbnMsIFJlZ2lzdGVyIGRpdmlkZW5kLCBSZWdpc3RlciBkaXZpc29yLAotKyAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCk7Ci0rICB2b2lkIGVtaXRCaWdJbnRQdHJNb2Qo TEJpZ0ludFB0ck1vZCogaW5zLCBSZWdpc3RlciBkaXZpZGVuZCwgUmVnaXN0ZXIgZGl2aXNvciwK LSsgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpOwotKwotKyAgdm9pZCBn ZW5lcmF0ZUludmFsaWRhdGVFcGlsb2d1ZSgpOwotKwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0rICB2b2lkIGVtaXRXYXNtTG9hZChUKiBsaXIpOwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0rICB2b2lkIGVtaXRXYXNtU3RvcmUoVCogbGlyKTsKLSsKLSsgcHVibGljOgotKyAgdm9pZCB2 aXNpdE91dE9mTGluZVRhYmxlU3dpdGNoKE91dE9mTGluZVRhYmxlU3dpdGNoKiBvb2wpOwotKyAg dm9pZCB2aXNpdE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKE91dE9mTGluZVdhc21UcnVuY2F0 ZUNoZWNrKiBvb2wpOwotK307Ci0rCi0rdHlwZWRlZiBDb2RlR2VuZXJhdG9yUFBDNjQgQ29kZUdl bmVyYXRvclNwZWNpZmljOwotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3Bh Y2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X0NvZGVHZW5lcmF0b3JfcHBjNjRfaCAqLwot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTElSLXBwYzY0LmggYi9qcy9zcmMvaml0L3Bw YzY0L0xJUi1wcGM2NC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAw Li42ODY4NzUwNTYxMjcKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvTElS LXBwYzY0LmgKLUBAIC0wLDAgKzEsMTM1IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRo OiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZp bTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZv cm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGlj ZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdp dGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5v cmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRlZiBqaXRfcHBjNjRfTElSX3BwYzY0X2gKLSsjZGVm aW5lIGppdF9wcGM2NF9MSVJfcHBjNjRfaAotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNl IGppdCB7Ci0rCi0rY2xhc3MgTFVuYm94IDogcHVibGljIExJbnN0cnVjdGlvbkhlbHBlcjwxLCBC T1hfUElFQ0VTLCAwPiB7Ci0rIHB1YmxpYzoKLSsgIExJUl9IRUFERVIoVW5ib3gpOwotKwotKyAg ZXhwbGljaXQgTFVuYm94KGNvbnN0IExBbGxvY2F0aW9uJiBpbnB1dCkgOiBMSW5zdHJ1Y3Rpb25I ZWxwZXIoY2xhc3NPcGNvZGUpIHsKLSsgICAgc2V0T3BlcmFuZCgwLCBpbnB1dCk7Ci0rICB9Ci0r Ci0rICBzdGF0aWMgY29uc3Qgc2l6ZV90IElucHV0ID0gMDsKLSsKLSsgIExCb3hBbGxvY2F0aW9u IGlucHV0KCkgY29uc3QgeyByZXR1cm4gZ2V0Qm94T3BlcmFuZChJbnB1dCk7IH0KLSsKLSsgIE1V bmJveCogbWlyKCkgY29uc3QgeyByZXR1cm4gbWlyXy0+dG9VbmJveCgpOyB9Ci0rICBjb25zdCBj aGFyKiBleHRyYU5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmdGcm9tTUlSVHlwZShtaXIoKS0+ dHlwZSgpKTsgfQotK307Ci0rCi0rY2xhc3MgTFVEaXZPck1vZCA6IHB1YmxpYyBMQmluYXJ5TWF0 aDwwPiB7Ci0rIHB1YmxpYzoKLSsgIExJUl9IRUFERVIoVURpdk9yTW9kKTsKLSsKLSsgIExVRGl2 T3JNb2QoKSA6IExCaW5hcnlNYXRoKGNsYXNzT3Bjb2RlKSB7fQotKwotKyAgTUJpbmFyeUFyaXRo SW5zdHJ1Y3Rpb24qIG1pcigpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVChtaXJfLT5pc0Rpdigp IHx8IG1pcl8tPmlzTW9kKCkpOwotKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TUJpbmFyeUFyaXRo SW5zdHJ1Y3Rpb24qPihtaXJfKTsKLSsgIH0KLSsKLSsgIGJvb2wgY2FuQmVEaXZpZGVCeVplcm8o KSBjb25zdCB7Ci0rICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Ci0rICAgICAgcmV0dXJuIG1pcl8t PnRvTW9kKCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIG1pcl8t PnRvRGl2KCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICB9Ci0rCi0rICBib29sIHRyYXBPbkVy cm9yKCkgY29uc3QgewotKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBt aXJfLT50b01vZCgpLT50cmFwT25FcnJvcigpOwotKyAgICB9Ci0rICAgIHJldHVybiBtaXJfLT50 b0RpdigpLT50cmFwT25FcnJvcigpOwotKyAgfQotKwotKyAgd2FzbTo6VHJhcFNpdGVEZXNjIHRy YXBTaXRlRGVzYygpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1p cl8tPmlzTW9kKCkpOwotKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBt aXJfLT50b01vZCgpLT50cmFwU2l0ZURlc2MoKTsKLSsgICAgfQotKyAgICByZXR1cm4gbWlyXy0+ dG9EaXYoKS0+dHJhcFNpdGVEZXNjKCk7Ci0rICB9Ci0rfTsKLSsKLStjbGFzcyBMRGl2T3JNb2RJ NjQgOiBwdWJsaWMgTEJpbmFyeU1hdGg8MD4gewotKyBwdWJsaWM6Ci0rICBMSVJfSEVBREVSKERp dk9yTW9kSTY0KTsKLSsKLSsgIExEaXZPck1vZEk2NChjb25zdCBMQWxsb2NhdGlvbiYgbGhzLCBj b25zdCBMQWxsb2NhdGlvbiYgcmhzKQotKyAgICAgIDogTEJpbmFyeU1hdGgoY2xhc3NPcGNvZGUp IHsKLSsgICAgc2V0T3BlcmFuZCgwLCBsaHMpOwotKyAgICBzZXRPcGVyYW5kKDEsIHJocyk7Ci0r ICB9Ci0rCi0rICBNQmluYXJ5QXJpdGhJbnN0cnVjdGlvbiogbWlyKCkgY29uc3QgewotKyAgICBN T1pfQVNTRVJUKG1pcl8tPmlzRGl2KCkgfHwgbWlyXy0+aXNNb2QoKSk7Ci0rICAgIHJldHVybiBz dGF0aWNfY2FzdDxNQmluYXJ5QXJpdGhJbnN0cnVjdGlvbio+KG1pcl8pOwotKyAgfQotKwotKyAg Ym9vbCBjYW5CZURpdmlkZUJ5WmVybygpIGNvbnN0IHsKLSsgICAgaWYgKG1pcl8tPmlzTW9kKCkp IHsKLSsgICAgICByZXR1cm4gbWlyXy0+dG9Nb2QoKS0+Y2FuQmVEaXZpZGVCeVplcm8oKTsKLSsg ICAgfQotKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+Y2FuQmVEaXZpZGVCeVplcm8oKTsKLSsg IH0KLSsgIGJvb2wgY2FuQmVOZWdhdGl2ZU92ZXJmbG93KCkgY29uc3QgewotKyAgICBpZiAobWly Xy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT5jYW5CZU5lZ2F0aXZl RGl2aWRlbmQoKTsKLSsgICAgfQotKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+Y2FuQmVOZWdh dGl2ZU92ZXJmbG93KCk7Ci0rICB9Ci0rICB3YXNtOjpUcmFwU2l0ZURlc2MgdHJhcFNpdGVEZXNj KCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKG1pcl8tPmlzRGl2KCkgfHwgbWlyXy0+aXNNb2Qo KSk7Ci0rICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Ci0rICAgICAgcmV0dXJuIG1pcl8tPnRvTW9k KCktPnRyYXBTaXRlRGVzYygpOwotKyAgICB9Ci0rICAgIHJldHVybiBtaXJfLT50b0RpdigpLT50 cmFwU2l0ZURlc2MoKTsKLSsgIH0KLSt9OwotKwotK2NsYXNzIExVRGl2T3JNb2RJNjQgOiBwdWJs aWMgTEJpbmFyeU1hdGg8MD4gewotKyBwdWJsaWM6Ci0rICBMSVJfSEVBREVSKFVEaXZPck1vZEk2 NCk7Ci0rCi0rICBMVURpdk9yTW9kSTY0KGNvbnN0IExBbGxvY2F0aW9uJiBsaHMsIGNvbnN0IExB bGxvY2F0aW9uJiByaHMpCi0rICAgICAgOiBMQmluYXJ5TWF0aChjbGFzc09wY29kZSkgewotKyAg ICBzZXRPcGVyYW5kKDAsIGxocyk7Ci0rICAgIHNldE9wZXJhbmQoMSwgcmhzKTsKLSsgIH0KLSsK LSsgIGNvbnN0IGNoYXIqIGV4dHJhTmFtZSgpIGNvbnN0IHsKLSsgICAgcmV0dXJuIG1pcigpLT5p c1RydW5jYXRlZCgpID8gIlRydW5jYXRlZCIgOiBudWxscHRyOwotKyAgfQotKwotKyAgTUJpbmFy eUFyaXRoSW5zdHJ1Y3Rpb24qIG1pcigpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVChtaXJfLT5p c0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOwotKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TUJpbmFy eUFyaXRoSW5zdHJ1Y3Rpb24qPihtaXJfKTsKLSsgIH0KLSsgIGJvb2wgY2FuQmVEaXZpZGVCeVpl cm8oKSBjb25zdCB7Ci0rICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Ci0rICAgICAgcmV0dXJuIG1p cl8tPnRvTW9kKCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIG1p cl8tPnRvRGl2KCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICB9Ci0rICB3YXNtOjpUcmFwU2l0 ZURlc2MgdHJhcFNpdGVEZXNjKCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKG1pcl8tPmlzRGl2 KCkgfHwgbWlyXy0+aXNNb2QoKSk7Ci0rICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Ci0rICAgICAg cmV0dXJuIG1pcl8tPnRvTW9kKCktPnRyYXBTaXRlRGVzYygpOwotKyAgICB9Ci0rICAgIHJldHVy biBtaXJfLT50b0RpdigpLT50cmFwU2l0ZURlc2MoKTsKLSsgIH0KLSt9OwotKwotK30gIC8vIG5h bWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0 X0xJUl9wcGM2NF9oICovCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1w cGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmNwcAotbmV3IGZpbGUg bW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uYmUwZWFkMTlkMjczCi0tLS0gL2Rldi9u dWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmNwcAotQEAgLTAsMCAr MSwxMzI0IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1t b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIg ZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0 aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBh IGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUs IFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0r Ci0rI2luY2x1ZGUgImppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5oIgotKwotKyNpbmNsdWRlICJt b3ppbGxhL01hdGhBbGdvcml0aG1zLmgiCi0rCi0rI2luY2x1ZGUgImppdC9Mb3dlcmluZy5oIgot KyNpbmNsdWRlICJqaXQvTUlSLXdhc20uaCIKLSsjaW5jbHVkZSAiaml0L01JUi5oIgotKyNpbmNs dWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCi0rI2luY2x1ZGUgIndhc20vV2FzbUZl YXR1cmVzLmgiICAvLyBmb3Igd2FzbTo6UmVwb3J0U2ltZEFuYWx5c2lzCi0rCi0rI2luY2x1ZGUg ImppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVkLWlubC5oIgotKwotK3VzaW5nIG5hbWVzcGFjZSBq czsKLSt1c2luZyBuYW1lc3BhY2UganM6OmppdDsKLSsKLSt1c2luZyBtb3ppbGxhOjpGbG9vckxv ZzI7Ci0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLStMVGFibGVTd2l0 Y2gqIExJUkdlbmVyYXRvclBQQzY0OjpuZXdMVGFibGVTd2l0Y2goY29uc3QgTEFsbG9jYXRpb24m IGluLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBMRGVmaW5pdGlvbiYgaW5wdXRDb3B5KSB7Ci0rICByZXR1cm4gbmV3IChhbGxvYygpKSBM VGFibGVTd2l0Y2goaW4sIGlucHV0Q29weSwgdGVtcCgpKTsKLSt9Ci0rCi0rTFRhYmxlU3dpdGNo ViogTElSR2VuZXJhdG9yUFBDNjQ6Om5ld0xUYWJsZVN3aXRjaFYoY29uc3QgTEJveEFsbG9jYXRp b24mIGluKSB7Ci0rICByZXR1cm4gbmV3IChhbGxvYygpKSBMVGFibGVTd2l0Y2hWKGluLCB0ZW1w KCksIHRlbXBEb3VibGUoKSwgdGVtcCgpKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2 NDo6bG93ZXJGb3JTaGlmdChMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlucywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZp bml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVm aW5pdGlvbiogcmhzKSB7Ci0rICBsb3dlckZvckFMVShpbnMsIG1pciwgbGhzLCByaHMpOwotK30K LSsKLSt0ZW1wbGF0ZSA8Y2xhc3MgTEluc3RyPgotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxv d2VyRm9yU2hpZnRJbnQ2NChMSW5zdHIqIGlucywgTURlZmluaXRpb24qIG1pciwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywgTURl ZmluaXRpb24qIHJocykgewotKyAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxMSW5zdHIs IExTaGlmdEk2ND4pIHsKLSsgICAgaW5zLT5zZXRMaHModXNlSW50NjRSZWdpc3RlckF0U3RhcnQo bGhzKSk7Ci0rICAgIGlucy0+c2V0UmhzKHVzZVJlZ2lzdGVyT3JDb25zdGFudEF0U3RhcnQocmhz KSk7Ci0rICB9IGVsc2UgewotKyAgICBpbnMtPnNldElucHV0KHVzZUludDY0UmVnaXN0ZXJBdFN0 YXJ0KGxocykpOwotKyAgICBpbnMtPnNldENvdW50KHVzZVJlZ2lzdGVyT3JDb25zdGFudEF0U3Rh cnQocmhzKSk7Ci0rICB9Ci0rICBkZWZpbmVJbnQ2NChpbnMsIG1pcik7Ci0rfQotKwotK3RlbXBs YXRlIHZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yU2hpZnRJbnQ2NChMU2hpZnRJNjQq IGlucywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTURlZmluaXRpb24qIG1pciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIHJocyk7Ci0rdGVt cGxhdGUgdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JTaGlmdEludDY0KExSb3RhdGVJ NjQqIGlucywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTURlZmluaXRpb24qIG1pciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIHJocyk7Ci0r Ci0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JBTFUoTEluc3RydWN0aW9uSGVscGVy PDEsIDEsIDA+KiBpbnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURl ZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGlucHV0KSB7Ci0rICBpbnMtPnNldE9wZXJhbmQo MCwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucHV0KSk7Ci0rICBkZWZpbmUoaW5zLCBtaXIpOwotK30K LSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckFMVShMSW5zdHJ1Y3Rpb25IZWxw ZXI8MSwgMiwgMD4qIGlucywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN RGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpIHsKLSsgIGlucy0+c2V0T3BlcmFuZCgw LCB1c2VSZWdpc3RlckF0U3RhcnQobGhzKSk7Ci0rICBpbnMtPnNldE9wZXJhbmQoMSwgdXNlUmVn aXN0ZXJPckNvbnN0YW50QXRTdGFydChyaHMpKTsKLSsgIGRlZmluZShpbnMsIG1pcik7Ci0rfQot KwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yQUxVSW50NjQoCi0rICAgIExJbnN0 cnVjdGlvbkhlbHBlcjxJTlQ2NF9QSUVDRVMsIElOVDY0X1BJRUNFUywgMD4qIGlucywgTURlZmlu aXRpb24qIG1pciwKLSsgICAgTURlZmluaXRpb24qIGlucHV0KSB7Ci0rICBpbnMtPnNldEludDY0 T3BlcmFuZCgwLCB1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydChpbnB1dCkpOwotKyAgZGVmaW5lSW50 NjQoaW5zLCBtaXIpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckFM VUludDY0KAotKyAgICBMSW5zdHJ1Y3Rpb25IZWxwZXI8SU5UNjRfUElFQ0VTLCAyICogSU5UNjRf UElFQ0VTLCAwPiogaW5zLAotKyAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhz LCBNRGVmaW5pdGlvbiogcmhzKSB7Ci0rICBpbnMtPnNldEludDY0T3BlcmFuZCgwLCB1c2VJbnQ2 NFJlZ2lzdGVyQXRTdGFydChsaHMpKTsKLSsgIGlucy0+c2V0SW50NjRPcGVyYW5kKElOVDY0X1BJ RUNFUywgdXNlSW50NjRSZWdpc3Rlck9yQ29uc3RhbnRBdFN0YXJ0KHJocykpOwotKyAgZGVmaW5l SW50NjQoaW5zLCBtaXIpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZv ck11bEludDY0KExNdWxJNjQqIGlucywgTU11bCogbWlyLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywgTURlZmluaXRpb24qIHJocykg ewotKyAgbG93ZXJGb3JBTFVJbnQ2NChpbnMsIG1pciwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckZQVShMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMSwg MD4qIGlucywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlv biogbWlyLCBNRGVmaW5pdGlvbiogaW5wdXQpIHsKLSsgIGlucy0+c2V0T3BlcmFuZCgwLCB1c2VS ZWdpc3RlckF0U3RhcnQoaW5wdXQpKTsKLSsgIGRlZmluZShpbnMsIG1pcik7Ci0rfQotKwotK3Zv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yRlBVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAy LCAwPiogaW5zLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0 aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTURlZmluaXRpb24qIHJocykgewotKyAgaW5zLT5zZXRPcGVyYW5kKDAsIHVzZVJl Z2lzdGVyQXRTdGFydChsaHMpKTsKLSsgIGlucy0+c2V0T3BlcmFuZCgxLCB1c2VSZWdpc3RlckF0 U3RhcnQocmhzKSk7Ci0rICBkZWZpbmUoaW5zLCBtaXIpOwotK30KLSsKLStMQm94QWxsb2NhdGlv biBMSVJHZW5lcmF0b3JQUEM2NDo6dXNlQm94Rml4ZWQoTURlZmluaXRpb24qIG1pciwgUmVnaXN0 ZXIgcmVnMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgcmVnMiwgYm9vbCB1c2VBdFN0YXJ0KSB7Ci0rICBNT1pfQVNTRVJUKG1pci0+dHlw ZSgpID09IE1JUlR5cGU6OlZhbHVlKTsKLSsKLSsgIGVuc3VyZURlZmluZWQobWlyKTsKLSsgIHJl dHVybiBMQm94QWxsb2NhdGlvbihMVXNlKHJlZzEsIG1pci0+dmlydHVhbFJlZ2lzdGVyKCksIHVz ZUF0U3RhcnQpKTsKLSt9Ci0rCi0rTEFsbG9jYXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJ5 dGVPcFJlZ2lzdGVyKE1EZWZpbml0aW9uKiBtaXIpIHsKLSsgIHJldHVybiB1c2VSZWdpc3Rlciht aXIpOwotK30KLSsKLStMQWxsb2NhdGlvbiBMSVJHZW5lcmF0b3JQUEM2NDo6dXNlQnl0ZU9wUmVn aXN0ZXJBdFN0YXJ0KE1EZWZpbml0aW9uKiBtaXIpIHsKLSsgIHJldHVybiB1c2VSZWdpc3RlckF0 U3RhcnQobWlyKTsKLSt9Ci0rCi0rTEFsbG9jYXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJ5 dGVPcFJlZ2lzdGVyT3JOb25Eb3VibGVDb25zdGFudCgKLSsgICAgTURlZmluaXRpb24qIG1pcikg ewotKyAgcmV0dXJuIHVzZVJlZ2lzdGVyT3JOb25Eb3VibGVDb25zdGFudChtaXIpOwotK30KLSsK LStMRGVmaW5pdGlvbiBMSVJHZW5lcmF0b3JQUEM2NDo6dGVtcEJ5dGVPcFJlZ2lzdGVyKCkgeyBy ZXR1cm4gdGVtcCgpOyB9Ci0rCi0rTERlZmluaXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnRlbXBU b1VuYm94KCkgeyByZXR1cm4gdGVtcCgpOyB9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6 bG93ZXJVbnR5cGVkUGhpSW5wdXQoTVBoaSogcGhpLCB1aW50MzJfdCBpbnB1dFBvc2l0aW9uLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCbG9jayogYmxv Y2ssIHNpemVfdCBsaXJJbmRleCkgewotKyAgbG93ZXJUeXBlZFBoaUlucHV0KHBoaSwgaW5wdXRQ b3NpdGlvbiwgYmxvY2ssIGxpckluZGV4KTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2 NDo6bG93ZXJJbnQ2NFBoaUlucHV0KE1QaGkqIHBoaSwgdWludDMyX3QgaW5wdXRQb3NpdGlvbiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJsb2NrKiBibG9j aywgc2l6ZV90IGxpckluZGV4KSB7Ci0rICBsb3dlclR5cGVkUGhpSW5wdXQocGhpLCBpbnB1dFBv c2l0aW9uLCBibG9jaywgbGlySW5kZXgpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0 OjpkZWZpbmVJbnQ2NFBoaShNUGhpKiBwaGksIHNpemVfdCBsaXJJbmRleCkgewotKyAgZGVmaW5l VHlwZWRQaGkocGhpLCBsaXJJbmRleCk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6 Omxvd2VyTXVsSShNTXVsKiBtdWwsIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpIHsKLSsgIExNdWxJKiBsaXIgPSBu ZXcgKGFsbG9jKCkpIExNdWxJOwotKyAgaWYgKG11bC0+ZmFsbGlibGUoKSkgewotKyAgICBhc3Np Z25TbmFwc2hvdChsaXIsIG11bC0+YmFpbG91dEtpbmQoKSk7Ci0rICB9Ci0rICBpZiAobXVsLT5j YW5CZU5lZ2F0aXZlWmVybygpICYmICFyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAgICBsaXItPnNl dE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXIobGhzKSk7Ci0rICAgIGxpci0+c2V0T3BlcmFuZCgxLCB1 c2VSZWdpc3RlcihyaHMpKTsKLSsgICAgZGVmaW5lKGxpciwgbXVsKTsKLSsgICAgcmV0dXJuOwot KyAgfQotKyAgbG93ZXJGb3JBTFUobGlyLCBtdWwsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBM SVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJEaXZJKE1EaXYqIGRpdikgewotKyAgaWYgKGRpdi0+cmhz KCktPmlzQ29uc3RhbnQoKSkgewotKyAgICBpbnQzMl90IHJocyA9IGRpdi0+cmhzKCktPnRvQ29u c3RhbnQoKS0+dG9JbnQzMigpOwotKyAgICBpbnQzMl90IHNoaWZ0ID0gRmxvb3JMb2cyKHVpbnQz Ml90KHJocykpOwotKyAgICBpZiAocmhzID4gMCAmJiAxIDw8IHNoaWZ0ID09IHJocykgewotKyAg ICAgIExEaXZQb3dUd29JKiBsaXIgPQotKyAgICAgICAgICBuZXcgKGFsbG9jKCkpIExEaXZQb3dU d29JKHVzZVJlZ2lzdGVyKGRpdi0+bGhzKCkpLCBzaGlmdCk7Ci0rICAgICAgaWYgKGRpdi0+ZmFs bGlibGUoKSkgewotKyAgICAgICAgYXNzaWduU25hcHNob3QobGlyLCBkaXYtPmJhaWxvdXRLaW5k KCkpOwotKyAgICAgIH0KLSsgICAgICBkZWZpbmUobGlyLCBkaXYpOwotKyAgICAgIHJldHVybjsK LSsgICAgfQotKyAgfQotKyAgTERpdkkqIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMRGl2 SSh1c2VSZWdpc3RlcihkaXYtPmxocygpKSwgdXNlUmVnaXN0ZXIoZGl2LT5yaHMoKSksIHRlbXAo KSk7Ci0rICBpZiAoZGl2LT5mYWxsaWJsZSgpKSB7Ci0rICAgIGFzc2lnblNuYXBzaG90KGxpciwg ZGl2LT5iYWlsb3V0S2luZCgpKTsKLSsgIH0KLSsgIGRlZmluZShsaXIsIGRpdik7Ci0rfQotKwot K3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRGl2STY0KE1EaXYqIGRpdikgewotKyAgYXV0 byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgIExEaXZPck1vZEk2NCh1c2VSZWdpc3Rlcihk aXYtPmxocygpKSwgdXNlUmVnaXN0ZXIoZGl2LT5yaHMoKSkpOwotKyAgZGVmaW5lSW50NjQobGly LCBkaXYpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlck1vZEkoTU1vZCog bW9kKSB7Ci0rICBpZiAobW9kLT5yaHMoKS0+aXNDb25zdGFudCgpKSB7Ci0rICAgIGludDMyX3Qg cmhzID0gbW9kLT5yaHMoKS0+dG9Db25zdGFudCgpLT50b0ludDMyKCk7Ci0rICAgIGludDMyX3Qg c2hpZnQgPSBGbG9vckxvZzIodWludDMyX3QocmhzKSk7Ci0rICAgIGlmIChyaHMgPiAwICYmIDEg PDwgc2hpZnQgPT0gcmhzKSB7Ci0rICAgICAgTE1vZFBvd1R3b0kqIGxpciA9Ci0rICAgICAgICAg IG5ldyAoYWxsb2MoKSkgTE1vZFBvd1R3b0kodXNlUmVnaXN0ZXIobW9kLT5saHMoKSksIHNoaWZ0 KTsKLSsgICAgICBpZiAobW9kLT5mYWxsaWJsZSgpKSB7Ci0rICAgICAgICBhc3NpZ25TbmFwc2hv dChsaXIsIG1vZC0+YmFpbG91dEtpbmQoKSk7Ci0rICAgICAgfQotKyAgICAgIGRlZmluZShsaXIs IG1vZCk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9IGVsc2UgaWYgKHNoaWZ0IDwgMzEgJiYgKDEg PDwgKHNoaWZ0ICsgMSkpIC0gMSA9PSByaHMpIHsKLSsgICAgICBMTW9kTWFza0kqIGxpciA9IG5l dyAoYWxsb2MoKSkKLSsgICAgICAgICAgTE1vZE1hc2tJKHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkp LCB0ZW1wKCksIHRlbXAoKSwgc2hpZnQgKyAxKTsKLSsgICAgICBpZiAobW9kLT5mYWxsaWJsZSgp KSB7Ci0rICAgICAgICBhc3NpZ25TbmFwc2hvdChsaXIsIG1vZC0+YmFpbG91dEtpbmQoKSk7Ci0r ICAgICAgfQotKyAgICAgIGRlZmluZShsaXIsIG1vZCk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9 Ci0rICB9Ci0rICBhdXRvKiBsaXIgPQotKyAgICAgIG5ldyAoYWxsb2MoKSkgTE1vZEkodXNlUmVn aXN0ZXIobW9kLT5saHMoKSksIHVzZVJlZ2lzdGVyKG1vZC0+cmhzKCkpKTsKLSsgIGlmIChtb2Qt PmZhbGxpYmxlKCkpIHsKLSsgICAgYXNzaWduU25hcHNob3QobGlyLCBtb2QtPmJhaWxvdXRLaW5k KCkpOwotKyAgfQotKyAgZGVmaW5lKGxpciwgbW9kKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0 b3JQUEM2NDo6bG93ZXJNb2RJNjQoTU1vZCogbW9kKSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFs bG9jKCkpCi0rICAgICAgTERpdk9yTW9kSTY0KHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkpLCB1c2VS ZWdpc3Rlcihtb2QtPnJocygpKSk7Ci0rICBkZWZpbmVJbnQ2NChsaXIsIG1vZCk7Ci0rfQotKwot K3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVURpdihNRGl2KiBkaXYpIHsKLSsgIE1EZWZp bml0aW9uKiBsaHMgPSBkaXYtPmdldE9wZXJhbmQoMCk7Ci0rICBNRGVmaW5pdGlvbiogcmhzID0g ZGl2LT5nZXRPcGVyYW5kKDEpOwotKyAgTFVEaXZPck1vZCogbGlyID0gbmV3IChhbGxvYygpKSBM VURpdk9yTW9kOwotKyAgLy8gdXNlUmVnaXN0ZXJBdFN0YXJ0OiBDb2RlR2VuZXJhdG9yLXBwYzY0 J3MgdmlzaXRVRGl2T3JNb2QgemVyby1leHRlbmRzCi0rICAvLyBsaHMvcmhzIGludG8gdGhlaXIg b3duIHNsb3RzIGluIHBsYWNlIGJlZm9yZSB0aGUgMzItYml0IGRpdnd1LCBzbyB0aGUKLSsgIC8v IGlucHV0cyBtdXN0IG5vdCBiZSByZXF1aXJlZCBsaXZlIGFmdGVyIHRoZSBMSVIgb3AgYmVnaW5z LgotKyAgbGlyLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lzdGVyQXRTdGFydChsaHMpKTsKLSsgIGxp ci0+c2V0T3BlcmFuZCgxLCB1c2VSZWdpc3RlckF0U3RhcnQocmhzKSk7Ci0rICBpZiAoZGl2LT5m YWxsaWJsZSgpKSB7Ci0rICAgIGFzc2lnblNuYXBzaG90KGxpciwgZGl2LT5iYWlsb3V0S2luZCgp KTsKLSsgIH0KLSsgIGRlZmluZShsaXIsIGRpdik7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9y UFBDNjQ6Omxvd2VyVURpdkk2NChNRGl2KiBkaXYpIHsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxs b2MoKSkKLSsgICAgICBMVURpdk9yTW9kSTY0KHVzZVJlZ2lzdGVyKGRpdi0+bGhzKCkpLCB1c2VS ZWdpc3RlcihkaXYtPnJocygpKSk7Ci0rICBkZWZpbmVJbnQ2NChsaXIsIGRpdik7Ci0rfQotKwot K3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVU1vZChNTW9kKiBtb2QpIHsKLSsgIE1EZWZp bml0aW9uKiBsaHMgPSBtb2QtPmdldE9wZXJhbmQoMCk7Ci0rICBNRGVmaW5pdGlvbiogcmhzID0g bW9kLT5nZXRPcGVyYW5kKDEpOwotKyAgTFVEaXZPck1vZCogbGlyID0gbmV3IChhbGxvYygpKSBM VURpdk9yTW9kOwotKyAgLy8gU2VlIGxvd2VyVURpdiBhYm92ZSBmb3Igd2h5IHVzZVJlZ2lzdGVy QXRTdGFydCBpcyByZXF1aXJlZCBoZXJlLgotKyAgbGlyLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lz dGVyQXRTdGFydChsaHMpKTsKLSsgIGxpci0+c2V0T3BlcmFuZCgxLCB1c2VSZWdpc3RlckF0U3Rh cnQocmhzKSk7Ci0rICBpZiAobW9kLT5mYWxsaWJsZSgpKSB7Ci0rICAgIGFzc2lnblNuYXBzaG90 KGxpciwgbW9kLT5iYWlsb3V0S2luZCgpKTsKLSsgIH0KLSsgIGRlZmluZShsaXIsIG1vZCk7Ci0r fQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVU1vZEk2NChNTW9kKiBtb2QpIHsK LSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMVURpdk9yTW9kSTY0KHVzZVJl Z2lzdGVyKG1vZC0+bGhzKCkpLCB1c2VSZWdpc3Rlcihtb2QtPnJocygpKSk7Ci0rICBkZWZpbmVJ bnQ2NChsaXIsIG1vZCk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVXJz aEQoTVVyc2gqIG1pcikgewotKyAgTURlZmluaXRpb24qIGxocyA9IG1pci0+bGhzKCk7Ci0rICBN RGVmaW5pdGlvbiogcmhzID0gbWlyLT5yaHMoKTsKLSsgIE1PWl9BU1NFUlQobGhzLT50eXBlKCkg PT0gTUlSVHlwZTo6SW50MzIpOwotKyAgTU9aX0FTU0VSVChyaHMtPnR5cGUoKSA9PSBNSVJUeXBl OjpJbnQzMik7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExVcnNoRCh1c2VSZWdpc3Rl ckF0U3RhcnQobGhzKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJl Z2lzdGVyT3JDb25zdGFudEF0U3RhcnQocmhzKSwgdGVtcCgpKTsKLSsgIGRlZmluZShsaXIsIG1p cik7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyUG93T2ZUd29JKE1Qb3cq IG1pcikgewotKyAgaW50MzJfdCBiYXNlID0gbWlyLT5pbnB1dCgpLT50b0NvbnN0YW50KCktPnRv SW50MzIoKTsKLSsgIE1EZWZpbml0aW9uKiBwb3dlciA9IG1pci0+cG93ZXIoKTsKLSsgIGF1dG8q IGxpciA9IG5ldyAoYWxsb2MoKSkgTFBvd09mVHdvSSh1c2VSZWdpc3Rlcihwb3dlciksIGJhc2Up OwotKyAgYXNzaWduU25hcHNob3QobGlyLCBtaXItPmJhaWxvdXRLaW5kKCkpOwotKyAgZGVmaW5l KGxpciwgbWlyKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQ dHJEaXYoTUJpZ0ludFB0ckRpdiogaW5zKSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkp Ci0rICAgICAgTEJpZ0ludFB0ckRpdih1c2VSZWdpc3RlcihpbnMtPmxocygpKSwgdXNlUmVnaXN0 ZXIoaW5zLT5yaHMoKSksCi0rICAgICAgICAgICAgICAgICAgICBMRGVmaW5pdGlvbjo6Qm9ndXNU ZW1wKCksIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSk7Ci0rICBhc3NpZ25TbmFwc2hvdChsaXIs IGlucy0+YmFpbG91dEtpbmQoKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwotK30KLSsKLSt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckJpZ0ludFB0ck1vZChNQmlnSW50UHRyTW9kKiBpbnMp IHsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMQmlnSW50UHRyTW9kKHVz ZVJlZ2lzdGVyKGlucy0+bGhzKCkpLCB1c2VSZWdpc3RlcihpbnMtPnJocygpKSwgdGVtcCgpLAot KyAgICAgICAgICAgICAgICAgICAgTERlZmluaXRpb246OkJvZ3VzVGVtcCgpKTsKLSsgIGlmIChp bnMtPmNhbkJlRGl2aWRlQnlaZXJvKCkpIHsKLSsgICAgYXNzaWduU25hcHNob3QobGlyLCBpbnMt PmJhaWxvdXRLaW5kKCkpOwotKyAgfQotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0rCi0rdm9p ZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQdHJMc2goTUJpZ0ludFB0ckxzaCogaW5z KSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExCaWdJbnRQdHJMc2goCi0rICAgICAg dXNlUmVnaXN0ZXIoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+cmhzKCkpLCB0ZW1wKCks IHRlbXAoKSk7Ci0rICBhc3NpZ25TbmFwc2hvdChsaXIsIGlucy0+YmFpbG91dEtpbmQoKSk7Ci0r ICBkZWZpbmUobGlyLCBpbnMpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dl ckJpZ0ludFB0clJzaChNQmlnSW50UHRyUnNoKiBpbnMpIHsKLSsgIGF1dG8qIGxpciA9IG5ldyAo YWxsb2MoKSkgTEJpZ0ludFB0clJzaCgKLSsgICAgICB1c2VSZWdpc3RlcihpbnMtPmxocygpKSwg dXNlUmVnaXN0ZXIoaW5zLT5yaHMoKSksIHRlbXAoKSwgdGVtcCgpKTsKLSsgIGFzc2lnblNuYXBz aG90KGxpciwgaW5zLT5iYWlsb3V0S2luZCgpKTsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQot KwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVHJ1bmNhdGVEVG9JbnQzMihNVHJ1bmNh dGVUb0ludDMyKiBpbnMpIHsKLSsgIE1EZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7Ci0r ICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSk7Ci0rICBkZWZpbmUo bmV3IChhbGxvYygpKSBMVHJ1bmNhdGVEVG9JbnQzMih1c2VSZWdpc3RlcihvcGQpLCB0ZW1wRG91 YmxlKCkpLCBpbnMpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclRydW5j YXRlRlRvSW50MzIoTVRydW5jYXRlVG9JbnQzMiogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogb3Bk ID0gaW5zLT5pbnB1dCgpOwotKyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpG bG9hdDMyKTsKLSsgIGRlZmluZShuZXcgKGFsbG9jKCkpIExUcnVuY2F0ZUZUb0ludDMyKHVzZVJl Z2lzdGVyKG9wZCksIHRlbXBGbG9hdDMyKCkpLCBpbnMpOwotK30KLSsKLSt2b2lkIExJUkdlbmVy YXRvclBQQzY0Ojpsb3dlckJ1aWx0aW5JbnQ2NFRvRmxvYXRpbmdQb2ludCgKLSsgICAgTUJ1aWx0 aW5JbnQ2NFRvRmxvYXRpbmdQb2ludCogaW5zKSB7Ci0rICBNT1pfQ1JBU0goIldlIGRvbid0IHVz ZSBpdCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUiKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQ UEM2NDo6bG93ZXJXYXNtU2VsZWN0SShNV2FzbVNlbGVjdCogc2VsZWN0KSB7Ci0rICBhdXRvKiBs aXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAgTFdhc21TZWxlY3QodXNlUmVnaXN0ZXJBdFN0YXJ0 KHNlbGVjdC0+dHJ1ZUV4cHIoKSksCi0rICAgICAgICAgICAgICAgICAgdXNlQW55KHNlbGVjdC0+ ZmFsc2VFeHByKCkpLCB1c2VSZWdpc3RlcihzZWxlY3QtPmNvbmRFeHByKCkpKTsKLSsgIGRlZmlu ZVJldXNlSW5wdXQobGlyLCBzZWxlY3QsIExXYXNtU2VsZWN0OjpUcnVlRXhwckluZGV4KTsKLSt9 Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtU2VsZWN0STY0KE1XYXNtU2Vs ZWN0KiBzZWxlY3QpIHsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21TZWxlY3RJ NjQoCi0rICAgICAgdXNlSW50NjRSZWdpc3RlckF0U3RhcnQoc2VsZWN0LT50cnVlRXhwcigpKSwK LSsgICAgICB1c2VJbnQ2NChzZWxlY3QtPmZhbHNlRXhwcigpKSwgdXNlUmVnaXN0ZXIoc2VsZWN0 LT5jb25kRXhwcigpKSk7Ci0rICBkZWZpbmVJbnQ2NFJldXNlSW5wdXQobGlyLCBzZWxlY3QsIExX YXNtU2VsZWN0STY0OjpUcnVlRXhwckluZGV4KTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQ UEM2NDo6bG93ZXJXYXNtQnVpbHRpblRydW5jYXRlVG9JbnQzMigKLSsgICAgTVdhc21CdWlsdGlu VHJ1bmNhdGVUb0ludDMyKiBpbnMpIHsKLSsgIE1EZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0 KCk7Ci0rICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5cGU6OkRvdWJsZSB8fCBvcGQt PnR5cGUoKSA9PSBNSVJUeXBlOjpGbG9hdDMyKTsKLSsKLSsgIGlmIChvcGQtPnR5cGUoKSA9PSBN SVJUeXBlOjpEb3VibGUpIHsKLSsgICAgZGVmaW5lKG5ldyAoYWxsb2MoKSkgTFdhc21CdWlsdGlu VHJ1bmNhdGVEVG9JbnQzMigKLSsgICAgICAgICAgICAgICB1c2VSZWdpc3RlcihvcGQpLCB1c2VG aXhlZChpbnMtPmluc3RhbmNlKCksIEluc3RhbmNlUmVnKSwKLSsgICAgICAgICAgICAgICBMRGVm aW5pdGlvbjo6Qm9ndXNUZW1wKCkpLAotKyAgICAgICAgICAgaW5zKTsKLSsgICAgcmV0dXJuOwot KyAgfQotKwotKyAgZGVmaW5lKG5ldyAoYWxsb2MoKSkgTFdhc21CdWlsdGluVHJ1bmNhdGVGVG9J bnQzMigKLSsgICAgICAgICAgICAgdXNlUmVnaXN0ZXIob3BkKSwgdXNlRml4ZWQoaW5zLT5pbnN0 YW5jZSgpLCBJbnN0YW5jZVJlZyksCi0rICAgICAgICAgICAgIExEZWZpbml0aW9uOjpCb2d1c1Rl bXAoKSksCi0rICAgICAgICAgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6 bG93ZXJXYXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2NCgKLSsgICAgTVdhc21CdWlsdGluVHJ1bmNh dGVUb0ludDY0KiBpbnMpIHsKLSsgIE1PWl9DUkFTSCgiV2UgZG9uJ3QgdXNlIGl0IGZvciB0aGlz IGFyY2hpdGVjdHVyZSIpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlcldh c21CdWlsdGluRGl2STY0KE1XYXNtQnVpbHRpbkRpdkk2NCogZGl2KSB7Ci0rICBNT1pfQ1JBU0go IldlIGRvbid0IHVzZSBydW50aW1lIGRpdiBmb3IgdGhpcyBhcmNoaXRlY3R1cmUiKTsKLSt9Ci0r Ci0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtQnVpbHRpbk1vZEk2NChNV2FzbUJ1 aWx0aW5Nb2RJNjQqIG1vZCkgewotKyAgTU9aX0NSQVNIKCJXZSBkb24ndCB1c2UgcnVudGltZSBt b2QgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIik7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBD NjQ6Omxvd2VyQXRvbWljTG9hZDY0KE1Mb2FkVW5ib3hlZFNjYWxhciogaW5zKSB7Ci0rICBjb25z dCBMVXNlIGVsZW1lbnRzID0gdXNlUmVnaXN0ZXIoaW5zLT5lbGVtZW50cygpKTsKLSsgIGNvbnN0 IExBbGxvY2F0aW9uIGluZGV4ID0KLSsgICAgICB1c2VSZWdpc3Rlck9ySW5kZXhDb25zdGFudChp bnMtPmluZGV4KCksIGlucy0+c3RvcmFnZVR5cGUoKSk7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFs bG9jKCkpIExBdG9taWNMb2FkNjQoZWxlbWVudHMsIGluZGV4KTsKLSsgIGRlZmluZUludDY0KGxp ciwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJBdG9taWNTdG9y ZTY0KE1TdG9yZVVuYm94ZWRTY2FsYXIqIGlucykgewotKyAgTFVzZSBlbGVtZW50cyA9IHVzZVJl Z2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7Ci0rICBMQWxsb2NhdGlvbiBpbmRleCA9Ci0rICAgICAg dXNlUmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5pbmRleCgpLCBpbnMtPndyaXRlVHlwZSgp KTsKLSsgIExJbnQ2NEFsbG9jYXRpb24gdmFsdWUgPSB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFs dWUoKSk7Ci0rICBhZGQobmV3IChhbGxvYygpKSBMQXRvbWljU3RvcmU2NChlbGVtZW50cywgaW5k ZXgsIHZhbHVlKSwgaW5zKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gTElSR2VuZXJhdG9yOjp2 aXNpdCogaW1wbGVtZW50YXRpb25zCi0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0Qm94KE1C b3gqIGJveCkgewotKyAgTURlZmluaXRpb24qIG9wZCA9IGJveC0+Z2V0T3BlcmFuZCgwKTsKLSsK LSsgIGlmIChvcGQtPmlzQ29uc3RhbnQoKSAmJiBib3gtPmNhbkVtaXRBdFVzZXMoKSkgewotKyAg ICBlbWl0QXRVc2VzKGJveCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIGlmIChvcGQtPmlz Q29uc3RhbnQoKSkgewotKyAgICBkZWZpbmUobmV3IChhbGxvYygpKSBMVmFsdWUob3BkLT50b0Nv bnN0YW50KCktPnRvSlNWYWx1ZSgpKSwgYm94LAotKyAgICAgICAgICAgTERlZmluaXRpb24oTERl ZmluaXRpb246OkJPWCkpOwotKyAgfSBlbHNlIHsKLSsgICAgTEJveCogaW5zID0gbmV3IChhbGxv YygpKSBMQm94KHVzZVJlZ2lzdGVyQXRTdGFydChvcGQpLCBvcGQtPnR5cGUoKSk7Ci0rICAgIGRl ZmluZShpbnMsIGJveCwgTERlZmluaXRpb24oTERlZmluaXRpb246OkJPWCkpOwotKyAgfQotK30K LSsKLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRVbmJveChNVW5ib3gqIHVuYm94KSB7Ci0rICBN RGVmaW5pdGlvbiogYm94ID0gdW5ib3gtPmdldE9wZXJhbmQoMCk7Ci0rICBNT1pfQVNTRVJUKGJv eC0+dHlwZSgpID09IE1JUlR5cGU6OlZhbHVlKTsKLSsKLSsgIExJbnN0cnVjdGlvbkhlbHBlcjwx LCBCT1hfUElFQ0VTLCAwPiogbGlyOwotKyAgaWYgKElzRmxvYXRpbmdQb2ludFR5cGUodW5ib3gt PnR5cGUoKSkpIHsKLSsgICAgTU9aX0FTU0VSVCh1bmJveC0+dHlwZSgpID09IE1JUlR5cGU6OkRv dWJsZSk7Ci0rICAgIGxpciA9IG5ldyAoYWxsb2MoKSkgTFVuYm94RmxvYXRpbmdQb2ludCh1c2VC b3hBdFN0YXJ0KGJveCkpOwotKyAgfSBlbHNlIGlmICh1bmJveC0+ZmFsbGlibGUoKSkgewotKyAg ICBsaXIgPSBuZXcgKGFsbG9jKCkpIExVbmJveCh1c2VSZWdpc3RlckF0U3RhcnQoYm94KSk7Ci0r ICB9IGVsc2UgewotKyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExVbmJveCh1c2VBdFN0YXJ0KGJv eCkpOwotKyAgfQotKwotKyAgaWYgKHVuYm94LT5mYWxsaWJsZSgpKSB7Ci0rICAgIGFzc2lnblNu YXBzaG90KGxpciwgdW5ib3gtPmJhaWxvdXRLaW5kKCkpOwotKyAgfQotKwotKyAgZGVmaW5lKGxp ciwgdW5ib3gpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRDb3B5U2lnbihNQ29w eVNpZ24qIGlucykgewotKyAgTURlZmluaXRpb24qIGxocyA9IGlucy0+bGhzKCk7Ci0rICBNRGVm aW5pdGlvbiogcmhzID0gaW5zLT5yaHMoKTsKLSsKLSsgIE1PWl9BU1NFUlQoSXNGbG9hdGluZ1Bv aW50VHlwZShsaHMtPnR5cGUoKSkpOwotKyAgTU9aX0FTU0VSVChsaHMtPnR5cGUoKSA9PSByaHMt PnR5cGUoKSk7Ci0rICBNT1pfQVNTRVJUKGxocy0+dHlwZSgpID09IGlucy0+dHlwZSgpKTsKLSsK LSsgIExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiogbGlyOwotKyAgaWYgKGxocy0+dHlwZSgp ID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExDb3B5U2ln bkQoKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGxpciA9IG5ldyAoYWxsb2MoKSkgTENvcHlTaWduRigp OwotKyAgfQotKwotKyAgbG93ZXJGb3JGUFUobGlyLCBpbnMsIGxocywgcmhzKTsKLSt9Ci0rCi0r dm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0RXh0ZW5kSW50MzJUb0ludDY0KE1FeHRlbmRJbnQzMlRv SW50NjQqIGlucykgewotKyAgZGVmaW5lSW50NjQoCi0rICAgICAgbmV3IChhbGxvYygpKSBMRXh0 ZW5kSW50MzJUb0ludDY0KHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpKSwgaW5zKTsK LSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0U2lnbkV4dGVuZEludDY0KE1TaWduRXh0 ZW5kSW50NjQqIGlucykgewotKyAgZGVmaW5lSW50NjQobmV3IChhbGxvYygpKQotKyAgICAgICAg ICAgICAgICAgIExTaWduRXh0ZW5kSW50NjQodXNlSW50NjRSZWdpc3RlckF0U3RhcnQoaW5zLT5p bnB1dCgpKSksCi0rICAgICAgICAgICAgICBpbnMpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRv cjo6dmlzaXRJbnQ2NFRvRmxvYXRpbmdQb2ludChNSW50NjRUb0Zsb2F0aW5nUG9pbnQqIGlucykg ewotKyAgTURlZmluaXRpb24qIG9wZCA9IGlucy0+aW5wdXQoKTsKLSsgIE1PWl9BU1NFUlQob3Bk LT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpOwotKyAgTU9aX0FTU0VSVChJc0Zsb2F0aW5nUG9p bnRUeXBlKGlucy0+dHlwZSgpKSk7Ci0rICBkZWZpbmUobmV3IChhbGxvYygpKSBMSW50NjRUb0Zs b2F0aW5nUG9pbnQodXNlSW50NjRSZWdpc3RlcihvcGQpKSwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0U3Vic3RyKE1TdWJzdHIqIGlucykgewotKyAgTFN1YnN0ciogbGly ID0gbmV3IChhbGxvYygpKQotKyAgICAgIExTdWJzdHIodXNlUmVnaXN0ZXIoaW5zLT5zdHJpbmco KSksIHVzZVJlZ2lzdGVyKGlucy0+YmVnaW4oKSksCi0rICAgICAgICAgICAgICB1c2VSZWdpc3Rl cihpbnMtPmxlbmd0aCgpKSwgdGVtcCgpLCB0ZW1wKCksIHRlbXAoKSk7Ci0rICBkZWZpbmUobGly LCBpbnMpOwotKyAgYXNzaWduU2FmZXBvaW50KGxpciwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJH ZW5lcmF0b3I6OnZpc2l0UmV0dXJuSW1wbChNRGVmaW5pdGlvbiogb3BkLCBib29sIGlzR2VuZXJh dG9yKSB7Ci0rICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5cGU6OlZhbHVlKTsKLSsg IExSZXR1cm4qIGlucyA9IG5ldyAoYWxsb2MoKSkgTFJldHVybihpc0dlbmVyYXRvcik7Ci0rICBp bnMtPnNldE9wZXJhbmQoMCwgdXNlRml4ZWQob3BkLCBKU1JldHVyblJlZykpOwotKyAgYWRkKGlu cyk7Ci0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVFeGNoYW5nZVR5cGVkQXJy YXlFbGVtZW50KAotKyAgICBNQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQqIGlucykg ewotKyAgTU9aX0FTU0VSVCghU2NhbGFyOjppc0Zsb2F0aW5nVHlwZShpbnMtPmFycmF5VHlwZSgp KSk7Ci0rICBNT1pfQVNTRVJUKGlucy0+ZWxlbWVudHMoKS0+dHlwZSgpID09IE1JUlR5cGU6OkVs ZW1lbnRzKTsKLSsgIE1PWl9BU1NFUlQoaW5zLT5pbmRleCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6 SW50UHRyKTsKLSsKLSsgIGNvbnN0IExVc2UgZWxlbWVudHMgPSB1c2VSZWdpc3RlcihpbnMtPmVs ZW1lbnRzKCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24gaW5kZXggPQotKyAgICAgIHVzZVJlZ2lz dGVyT3JJbmRleENvbnN0YW50KGlucy0+aW5kZXgoKSwgaW5zLT5hcnJheVR5cGUoKSk7Ci0rCi0r ICBpZiAoU2NhbGFyOjppc0JpZ0ludFR5cGUoaW5zLT5hcnJheVR5cGUoKSkpIHsKLSsgICAgTElu dDY0QWxsb2NhdGlvbiBvbGR2YWwgPSB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+b2xkdmFsKCkpOwot KyAgICBMSW50NjRBbGxvY2F0aW9uIG5ld3ZhbCA9IHVzZUludDY0UmVnaXN0ZXIoaW5zLT5uZXd2 YWwoKSk7Ci0rCi0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICAgIExDb21w YXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KGVsZW1lbnRzLCBpbmRleCwgb2xkdmFsLCBu ZXd2YWwpOwotKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0K LSsKLSsgIGNvbnN0IExBbGxvY2F0aW9uIG9sZHZhbCA9IHVzZVJlZ2lzdGVyKGlucy0+b2xkdmFs KCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24gbmV3dmFsID0gdXNlUmVnaXN0ZXIoaW5zLT5uZXd2 YWwoKSk7Ci0rCi0rICBMRGVmaW5pdGlvbiBvdXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVt cCgpOwotKyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgp OwotKyAgTERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsK LSsgIExEZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKwot KyAgaWYgKGlucy0+YXJyYXlUeXBlKCkgPT0gU2NhbGFyOjpVaW50MzIgJiYgSXNGbG9hdGluZ1Bv aW50VHlwZShpbnMtPnR5cGUoKSkpIHsKLSsgICAgb3V0VGVtcCA9IHRlbXAoKTsKLSsgIH0KLSsK LSsgIGlmIChTY2FsYXI6OmJ5dGVTaXplKGlucy0+YXJyYXlUeXBlKCkpIDwgNCkgewotKyAgICAv LyBQUEM2NCBzdWItd29yZCBDQVMgdXNlcyBsYmFyeC9saGFyeCArIHN0YmN4Li9zdGhjeC4gKFBP V0VSNyspOyBvbmx5Ci0rICAgIC8vIHZhbHVlVGVtcCBpcyBuZWVkZWQsIHRvIGhvbGQgdGhlIGV4 dHNiL2V4dHNoLWNhbm9uaWNhbGlzZWQgb2xkdmFsCi0rICAgIC8vIGZvciB0aGUgMzItYml0IGNt cHcuIG9mZnNldFRlbXAvbWFza1RlbXAgYXJlIHVudXNlZCAobm8gcm91bmQtZG93bgotKyAgICAv LyArIGJpdC1pc29sYXRlIGRhbmNlKSwgYW5kIHJlbWFpbiBCb2d1c1RlbXAuCi0rICAgIHZhbHVl VGVtcCA9IHRlbXAoKTsKLSsgIH0KLSsKLSsgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxl bWVudCogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgIExDb21wYXJlRXhjaGFuZ2VUeXBlZEFy cmF5RWxlbWVudChlbGVtZW50cywgaW5kZXgsIG9sZHZhbCwgbmV3dmFsLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRUZW1wLCB2YWx1ZVRlbXAsIG9mZnNldFRl bXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUZW1wKTsK LSsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNp dEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoCi0rICAgIE1BdG9taWNFeGNoYW5nZVR5 cGVkQXJyYXlFbGVtZW50KiBpbnMpIHsKLSsgIE1PWl9BU1NFUlQoaW5zLT5lbGVtZW50cygpLT50 eXBlKCkgPT0gTUlSVHlwZTo6RWxlbWVudHMpOwotKyAgTU9aX0FTU0VSVChpbnMtPmluZGV4KCkt PnR5cGUoKSA9PSBNSVJUeXBlOjpJbnRQdHIpOwotKwotKyAgY29uc3QgTFVzZSBlbGVtZW50cyA9 IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiBpbmRl eCA9Ci0rICAgICAgdXNlUmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5pbmRleCgpLCBpbnMt PmFycmF5VHlwZSgpKTsKLSsKLSsgIGlmIChTY2FsYXI6OmlzQmlnSW50VHlwZShpbnMtPmFycmF5 VHlwZSgpKSkgewotKyAgICBMSW50NjRBbGxvY2F0aW9uIHZhbHVlID0gdXNlSW50NjRSZWdpc3Rl cihpbnMtPnZhbHVlKCkpOwotKwotKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAg ICAgICBMQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KGVsZW1lbnRzLCBpbmRleCwg dmFsdWUpOwotKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0K LSsKLSsgIE1PWl9BU1NFUlQoaW5zLT5hcnJheVR5cGUoKSA8PSBTY2FsYXI6OlVpbnQzMik7Ci0r Ci0rICBjb25zdCBMQWxsb2NhdGlvbiB2YWx1ZSA9IHVzZVJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7 Ci0rCi0rICBMRGVmaW5pdGlvbiBvdXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwot KyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKyAg TERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExE ZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKwotKyAgaWYg KGlucy0+YXJyYXlUeXBlKCkgPT0gU2NhbGFyOjpVaW50MzIpIHsKLSsgICAgTU9aX0FTU0VSVChp bnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpOwotKyAgICBvdXRUZW1wID0gdGVtcCgpOwot KyAgfQotKwotKyAgLy8gUFBDNjQgc3ViLXdvcmQgYXRvbWljIGV4Y2hhbmdlIHVzZXMgbGJhcngv bGhhcnggKyBzdGJjeC4vc3RoY3guIGRpcmVjdGx5Ci0rICAvLyAoUE9XRVI3Kyk7IHZhbHVlVGVt cC9vZmZzZXRUZW1wL21hc2tUZW1wIGFyZSBuZXZlciByZWFkIGJ5IHRoZQotKyAgLy8gaW1wbGVt ZW50YXRpb24gKHNlZSBNYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAncyBBdG9taWNFeGNoYW5nZSB0 ZW1wbGF0ZSkuCi0rICAvLyBMZWF2ZSB0aGVtIGFzIEJvZ3VzVGVtcC4KLSsKLSsgIExBdG9taWNF eGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBsaXIgPQotKyAgICAgIG5ldyAoYWxsb2MoKSkgTEF0 b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoCi0rICAgICAgICAgIGVsZW1lbnRzLCBpbmRl eCwgdmFsdWUsIG91dFRlbXAsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKwot KyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0QXRv bWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCgKLSsgICAgTUF0b21pY1R5cGVkQXJyYXlFbGVtZW50 Qmlub3AqIGlucykgewotKyAgTU9aX0FTU0VSVChpbnMtPmFycmF5VHlwZSgpICE9IFNjYWxhcjo6 VWludDhDbGFtcGVkKTsKLSsgIE1PWl9BU1NFUlQoIVNjYWxhcjo6aXNGbG9hdGluZ1R5cGUoaW5z LT5hcnJheVR5cGUoKSkpOwotKyAgTU9aX0FTU0VSVChpbnMtPmVsZW1lbnRzKCktPnR5cGUoKSA9 PSBNSVJUeXBlOjpFbGVtZW50cyk7Ci0rICBNT1pfQVNTRVJUKGlucy0+aW5kZXgoKS0+dHlwZSgp ID09IE1JUlR5cGU6OkludFB0cik7Ci0rCi0rICBjb25zdCBMVXNlIGVsZW1lbnRzID0gdXNlUmVn aXN0ZXIoaW5zLT5lbGVtZW50cygpKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uIGluZGV4ID0KLSsg ICAgICB1c2VSZWdpc3Rlck9ySW5kZXhDb25zdGFudChpbnMtPmluZGV4KCksIGlucy0+YXJyYXlU eXBlKCkpOwotKwotKyAgaWYgKFNjYWxhcjo6aXNCaWdJbnRUeXBlKGlucy0+YXJyYXlUeXBlKCkp KSB7Ci0rICAgIExJbnQ2NEFsbG9jYXRpb24gdmFsdWUgPSB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+ dmFsdWUoKSk7Ci0rICAgIExJbnQ2NERlZmluaXRpb24gdGVtcCA9IHRlbXBJbnQ2NCgpOwotKwot KyAgICBpZiAoaW5zLT5pc0ZvckVmZmVjdCgpKSB7Ci0rICAgICAgYXV0byogbGlyID0gbmV3IChh bGxvYygpKSBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdDY0KAotKyAgICAg ICAgICBlbGVtZW50cywgaW5kZXgsIHZhbHVlLCB0ZW1wKTsKLSsgICAgICBhZGQobGlyLCBpbnMp OwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKwotKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9j KCkpCi0rICAgICAgICBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcDY0KGVsZW1lbnRzLCBp bmRleCwgdmFsdWUsIHRlbXApOwotKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7Ci0rICAgIHJl dHVybjsKLSsgIH0KLSsKLSsgIExBbGxvY2F0aW9uIHZhbHVlID0gdXNlUmVnaXN0ZXIoaW5zLT52 YWx1ZSgpKTsKLSsgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1Rl bXAoKTsKLSsgIExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1w KCk7Ci0rICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsK LSsKLSsgIC8vIFBQQzY0IHN1Yi13b3JkIGF0b21pYy1iaW5vcCB1c2VzIGxiYXJ4L2xoYXJ4ICsg c3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCi0rICAvLyBUaGUgZmV0Y2gtb3AgdmFyaWFudCBuZWVk cyB2YWx1ZVRlbXAgdG8gaG9sZCB0aGUgcG9zdC1vcCB2YWx1ZSBiZWluZwotKyAgLy8gY29uZGl0 aW9uLXN0b3JlZCAoTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwJ3MgQXRvbWljRmV0Y2hPcCk7IHRo ZQotKyAgLy8gZm9yLWVmZmVjdCB2YXJpYW50IHVzZXMgYW4gaW50ZXJuYWwgc2NyYXRjaCBhbmQg bmVlZHMgbm8gdGVtcHMgYXQKLSsgIC8vIGFsbC4gb2Zmc2V0VGVtcC9tYXNrVGVtcCBhcmUgdW51 c2VkIGluIGVpdGhlciBwYXRoLgotKyAgaWYgKFNjYWxhcjo6Ynl0ZVNpemUoaW5zLT5hcnJheVR5 cGUoKSkgPCA0ICYmICFpbnMtPmlzRm9yRWZmZWN0KCkpIHsKLSsgICAgdmFsdWVUZW1wID0gdGVt cCgpOwotKyAgfQotKwotKyAgaWYgKGlucy0+aXNGb3JFZmZlY3QoKSkgewotKyAgICBMQXRvbWlj VHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdCogbGlyID0KLSsgICAgICAgIG5ldyAoYWxs b2MoKSkgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3QoCi0rICAgICAgICAg ICAgZWxlbWVudHMsIGluZGV4LCB2YWx1ZSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVt cCk7Ci0rICAgIGFkZChsaXIsIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIExEZWZp bml0aW9uIG91dFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rCi0rICBpZiAoaW5z LT5hcnJheVR5cGUoKSA9PSBTY2FsYXI6OlVpbnQzMiAmJiBJc0Zsb2F0aW5nUG9pbnRUeXBlKGlu cy0+dHlwZSgpKSkgewotKyAgICBvdXRUZW1wID0gdGVtcCgpOwotKyAgfQotKwotKyAgTEF0b21p Y1R5cGVkQXJyYXlFbGVtZW50Qmlub3AqIGxpciA9Ci0rICAgICAgbmV3IChhbGxvYygpKSBMQXRv bWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCgKLSsgICAgICAgICAgZWxlbWVudHMsIGluZGV4LCB2 YWx1ZSwgb3V0VGVtcCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7Ci0rICBkZWZp bmUobGlyLCBpbnMpOwotK30KLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRBc21KU0xvYWRIZWFw KE1Bc21KU0xvYWRIZWFwKiBpbnMpIHsKLSsgIE1EZWZpbml0aW9uKiBiYXNlID0gaW5zLT5iYXNl KCk7Ci0rICBNT1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7Ci0rCi0r ICBNRGVmaW5pdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgp OwotKyAgTU9aX0FTU0VSVF9JRihpbnMtPm5lZWRzQm91bmRzQ2hlY2soKSwKLSsgICAgICAgICAg ICAgICAgYm91bmRzQ2hlY2tMaW1pdC0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKTsKLSsKLSsg IExBbGxvY2F0aW9uIGJhc2VBbGxvYyA9IHVzZVJlZ2lzdGVyQXRTdGFydChiYXNlKTsKLSsKLSsg IExBbGxvY2F0aW9uIGxpbWl0QWxsb2MgPSBpbnMtPm5lZWRzQm91bmRzQ2hlY2soKQotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IHVzZVJlZ2lzdGVyQXRTdGFydChib3VuZHNDaGVj a0xpbWl0KQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExBbGxvY2F0aW9uKCk7 Ci0rCi0rICBNT1pfQVNTRVJUKCFpbnMtPmhhc01lbW9yeUJhc2UoKSk7Ci0rICBhdXRvKiBsaXIg PQotKyAgICAgIG5ldyAoYWxsb2MoKSkgTEFzbUpTTG9hZEhlYXAoYmFzZUFsbG9jLCBsaW1pdEFs bG9jLCBMQWxsb2NhdGlvbigpKTsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotK3ZvaWQgTElS R2VuZXJhdG9yOjp2aXNpdEFzbUpTU3RvcmVIZWFwKE1Bc21KU1N0b3JlSGVhcCogaW5zKSB7Ci0r ICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgpOwotKyAgTU9aX0FTU0VSVChiYXNlLT50 eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOwotKwotKyAgTURlZmluaXRpb24qIGJvdW5kc0NoZWNr TGltaXQgPSBpbnMtPmJvdW5kc0NoZWNrTGltaXQoKTsKLSsgIE1PWl9BU1NFUlRfSUYoaW5zLT5u ZWVkc0JvdW5kc0NoZWNrKCksCi0rICAgICAgICAgICAgICAgIGJvdW5kc0NoZWNrTGltaXQtPnR5 cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7Ci0rCi0rICBMQWxsb2NhdGlvbiBiYXNlQWxsb2MgPSB1 c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7Ci0rCi0rICBMQWxsb2NhdGlvbiBsaW1pdEFsbG9jID0g aW5zLT5uZWVkc0JvdW5kc0NoZWNrKCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyB1c2VSZWdpc3RlckF0U3RhcnQoYm91bmRzQ2hlY2tMaW1pdCkKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBMQWxsb2NhdGlvbigpOwotKwotKyAgTU9aX0FTU0VSVCghaW5zLT5o YXNNZW1vcnlCYXNlKCkpOwotKyAgYWRkKG5ldyAoYWxsb2MoKSkgTEFzbUpTU3RvcmVIZWFwKGJh c2VBbGxvYywgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+dmFsdWUoKSksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRBbGxvYywgTEFsbG9jYXRpb24oKSksCi0rICAg ICAgaW5zKTsKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWQoTVdhc21Mb2Fk KiBpbnMpIHsKLSsgIE1EZWZpbml0aW9uKiBiYXNlID0gaW5zLT5iYXNlKCk7Ci0rICBNT1pfQVNT RVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMiB8fCBiYXNlLT50eXBlKCkgPT0gTUlS VHlwZTo6SW50NjQpOwotKwotKyAgTEFsbG9jYXRpb24gbWVtb3J5QmFzZSA9Ci0rICAgICAgaW5z LT5oYXNNZW1vcnlCYXNlKCkgPyBMQWxsb2NhdGlvbih1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5t ZW1vcnlCYXNlKCkpKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWco SGVhcFJlZyk7Ci0rCi0rICBMQWxsb2NhdGlvbiBwdHIgPSB1c2VSZWdpc3RlckF0U3RhcnQoYmFz ZSk7Ci0rCi0rICBMRGVmaW5pdGlvbiBwdHJDb3B5ID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgp OwotKyAgaWYgKGlucy0+YWNjZXNzKCkub2Zmc2V0MzIoKSkgewotKyAgICBwdHJDb3B5ID0gdGVt cENvcHkoYmFzZSwgMCk7Ci0rICB9Ci0rCi0rICBpZiAoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6 SW50NjQpIHsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUxvYWRJNjQocHRy LCBtZW1vcnlCYXNlLCBwdHJDb3B5KTsKLSsgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOwotKyAg ICByZXR1cm47Ci0rICB9Ci0rCi0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtTG9h ZChwdHIsIG1lbW9yeUJhc2UsIHB0ckNvcHkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0r dm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVN0b3JlKE1XYXNtU3RvcmUqIGlucykgewotKyAg TURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKLSsgIE1PWl9BU1NFUlQoYmFzZS0+dHlw ZSgpID09IE1JUlR5cGU6OkludDMyIHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7 Ci0rCi0rICBNRGVmaW5pdGlvbiogdmFsdWUgPSBpbnMtPnZhbHVlKCk7Ci0rICBMQWxsb2NhdGlv biBtZW1vcnlCYXNlID0KLSsgICAgICBpbnMtPmhhc01lbW9yeUJhc2UoKSA/IExBbGxvY2F0aW9u KHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPm1lbW9yeUJhc2UoKSkpCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVnKTsKLSsKLSsgIExBbGxvY2F0aW9uIGJh c2VBbGxvYyA9IHVzZVJlZ2lzdGVyQXRTdGFydChiYXNlKTsKLSsKLSsgIExEZWZpbml0aW9uIHB0 ckNvcHkgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICBpZiAoaW5zLT5hY2Nlc3MoKS5v ZmZzZXQzMigpKSB7Ci0rICAgIHB0ckNvcHkgPSB0ZW1wQ29weShiYXNlLCAwKTsKLSsgIH0KLSsK LSsgIGlmIChpbnMtPmFjY2VzcygpLnR5cGUoKSA9PSBTY2FsYXI6OkludDY0KSB7Ci0rICAgIExJ bnQ2NEFsbG9jYXRpb24gdmFsdWVBbGxvYyA9IHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KHZhbHVl KTsKLSsgICAgYXV0byogbGlyID0KLSsgICAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21TdG9yZUk2 NChiYXNlQWxsb2MsIHZhbHVlQWxsb2MsIG1lbW9yeUJhc2UsIHB0ckNvcHkpOwotKyAgICBhZGQo bGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBMQWxsb2NhdGlvbiB2YWx1ZUFs bG9jID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KHZhbHVlKTsKLSsgIGF1dG8qIGxpciA9Ci0rICAgICAg bmV3IChhbGxvYygpKSBMV2FzbVN0b3JlKGJhc2VBbGxvYywgdmFsdWVBbGxvYywgbWVtb3J5QmFz ZSwgcHRyQ29weSk7Ci0rICBhZGQobGlyLCBpbnMpOwotK30KLSt2b2lkIExJUkdlbmVyYXRvcjo6 dmlzaXRXYXNtVHJ1bmNhdGVUb0ludDY0KE1XYXNtVHJ1bmNhdGVUb0ludDY0KiBpbnMpIHsKLSsg IE1EZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7Ci0rICBNT1pfQVNTRVJUKG9wZC0+dHlw ZSgpID09IE1JUlR5cGU6OkRvdWJsZSB8fCBvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpGbG9hdDMy KTsKLSsKLSsgIGRlZmluZUludDY0KG5ldyAoYWxsb2MoKSkgTFdhc21UcnVuY2F0ZVRvSW50NjQo dXNlUmVnaXN0ZXIob3BkKSksIGlucyk7Ci0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdh c21VbnNpZ25lZFRvRG91YmxlKE1XYXNtVW5zaWduZWRUb0RvdWJsZSogaW5zKSB7Ci0rICBNT1pf QVNTRVJUKGlucy0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKTsKLSsgIExXYXNt VWludDMyVG9Eb3VibGUqIGxpciA9Ci0rICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVVpbnQzMlRv RG91YmxlKHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpKTsKLSsgIGRlZmluZShsaXIs IGlucyk7Ci0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21VbnNpZ25lZFRvRmxvYXQz MihNV2FzbVVuc2lnbmVkVG9GbG9hdDMyKiBpbnMpIHsKLSsgIE1PWl9BU1NFUlQoaW5zLT5pbnB1 dCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOwotKyAgTFdhc21VaW50MzJUb0Zsb2F0MzIq IGxpciA9Ci0rICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVVpbnQzMlRvRmxvYXQzMih1c2VSZWdp c3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwotK30KLSt2 b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtQ29tcGFyZUV4Y2hhbmdlSGVhcChNV2FzbUNvbXBh cmVFeGNoYW5nZUhlYXAqIGlucykgewotKyAgTURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2Uo KTsKLSsgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyIHx8IGJhc2Ut PnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7Ci0rICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0g aW5zLT5oYXNNZW1vcnlCYXNlKCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBM QWxsb2NhdGlvbih1c2VSZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSkpCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7Ci0rCi0rICBpZiAoaW5z LT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2NCkgewotKyAgICBhdXRvKiBsaXIgPSBu ZXcgKGFsbG9jKCkpIExXYXNtQ29tcGFyZUV4Y2hhbmdlSTY0KAotKyAgICAgICAgdXNlUmVnaXN0 ZXIoYmFzZSksIHVzZUludDY0UmVnaXN0ZXIoaW5zLT5vbGRWYWx1ZSgpKSwKLSsgICAgICAgIHVz ZUludDY0UmVnaXN0ZXIoaW5zLT5uZXdWYWx1ZSgpKSwgbWVtb3J5QmFzZSk7Ci0rICAgIGRlZmlu ZUludDY0KGxpciwgaW5zKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgTERlZmluaXRpb24g dmFsdWVUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKyAgTERlZmluaXRpb24gb2Zm c2V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIG1hc2tU ZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKwotKyAgLy8gUFBDNjQgc3ViLXdvcmQg d2FzbSBDQVMgdXNlcyBsYmFyeC9saGFyeCArIHN0YmN4Li9zdGhjeC4gKFBPV0VSNyspOwotKyAg Ly8gdmFsdWVUZW1wIGhvbGRzIHRoZSBleHRzYi9leHRzaC1jYW5vbmljYWxpc2VkIG9sZHZhbCBm b3IgY21wdywgd2hpbGUKLSsgIC8vIG9mZnNldFRlbXAvbWFza1RlbXAgYXJlIHVudXNlZCAobm8g cm91bmQtZG93biArIGJpdC1pc29sYXRlIGRhbmNlKS4KLSsgIGlmIChpbnMtPmFjY2VzcygpLmJ5 dGVTaXplKCkgPCA0KSB7Ci0rICAgIHZhbHVlVGVtcCA9IHRlbXAoKTsKLSsgIH0KLSsKLSsgIGF1 dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAo dXNlUmVnaXN0ZXIoYmFzZSksIHVzZVJlZ2lzdGVyKGlucy0+b2xkVmFsdWUoKSksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlZ2lzdGVyKGlucy0+bmV3VmFsdWUoKSksIG1l bW9yeUJhc2UsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zm c2V0VGVtcCwgbWFza1RlbXApOwotKwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0rdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21pY0V4Y2hhbmdlSGVhcChNV2FzbUF0b21pY0V4Y2hh bmdlSGVhcCogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgpOwotKyAg TU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIgfHwgYmFzZS0+dHlwZSgp ID09IE1JUlR5cGU6OkludDY0KTsKLSsgIExBbGxvY2F0aW9uIG1lbW9yeUJhc2UgPSBpbnMtPmhh c01lbW9yeUJhc2UoKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IExBbGxvY2F0 aW9uKHVzZVJlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgpKSkKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVnKTsKLSsKLSsgIGlmIChpbnMtPmFjY2Vz cygpLnR5cGUoKSA9PSBTY2FsYXI6OkludDY0KSB7Ci0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxs b2MoKSkgTFdhc21BdG9taWNFeGNoYW5nZUk2NCgKLSsgICAgICAgIHVzZVJlZ2lzdGVyKGJhc2Up LCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFsdWUoKSksIG1lbW9yeUJhc2UpOwotKyAgICBkZWZp bmVJbnQ2NChsaXIsIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIC8vIFBQQzY0IHN1 Yi13b3JkIHdhc20gYXRvbWljIGV4Y2hhbmdlIHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3Ro Y3guCi0rICAvLyAoUE9XRVI3Kyk7IHZhbHVlVGVtcC9vZmZzZXRUZW1wL21hc2tUZW1wIGFyZSBu ZXZlciByZWFkIGJ5IHRoZQotKyAgLy8gaW1wbGVtZW50YXRpb24gKHNlZSBNYWNyb0Fzc2VtYmxl ci1wcGM2NC5jcHAncyBBdG9taWNFeGNoYW5nZSB0ZW1wbGF0ZSkuCi0rICAvLyBQYXNzIEJvZ3Vz VGVtcCBmb3IgYWxsIHRocmVlLgotKyAgTERlZmluaXRpb24gdmFsdWVUZW1wID0gTERlZmluaXRp b246OkJvZ3VzVGVtcCgpOwotKyAgTERlZmluaXRpb24gb2Zmc2V0VGVtcCA9IExEZWZpbml0aW9u OjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIG1hc2tUZW1wID0gTERlZmluaXRpb246OkJv Z3VzVGVtcCgpOwotKwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgIExXYXNt QXRvbWljRXhjaGFuZ2VIZWFwKHVzZVJlZ2lzdGVyKGJhc2UpLCB1c2VSZWdpc3RlcihpbnMtPnZh bHVlKCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeUJhc2UsIHZhbHVl VGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0r dm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21pY0Jpbm9wSGVhcChNV2FzbUF0b21pY0Jp bm9wSGVhcCogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgpOwotKyAg TU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIgfHwgYmFzZS0+dHlwZSgp ID09IE1JUlR5cGU6OkludDY0KTsKLSsgIExBbGxvY2F0aW9uIG1lbW9yeUJhc2UgPSBpbnMtPmhh c01lbW9yeUJhc2UoKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IExBbGxvY2F0 aW9uKHVzZVJlZ2lzdGVyKGlucy0+bWVtb3J5QmFzZSgpKSkKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVnKTsKLSsKLSsgIGlmIChpbnMtPmFjY2Vz cygpLnR5cGUoKSA9PSBTY2FsYXI6OkludDY0KSB7Ci0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxs b2MoKSkKLSsgICAgICAgIExXYXNtQXRvbWljQmlub3BJNjQodXNlUmVnaXN0ZXIoYmFzZSksIHVz ZUludDY0UmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWVtb3J5QmFzZSwgdGVtcEludDY0KCkpOwotKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7 Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZp bml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5p dGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9u OjpCb2d1c1RlbXAoKTsKLSsKLSsgIC8vIFBQQzY0IHN1Yi13b3JkIHdhc20gYXRvbWljLWJpbm9w IHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guCi0rICAvLyAoUE9XRVI3KykuIFRoZSBm ZXRjaC1vcCB2YXJpYW50IG5lZWRzIHZhbHVlVGVtcCBmb3IgdGhlIHBvc3Qtb3AgdmFsdWUKLSsg IC8vIGJlaW5nIGNvbmRpdGlvbi1zdG9yZWQ7IHRoZSBmb3ItZWZmZWN0IHZhcmlhbnQgdXNlcyBh biBpbnRlcm5hbAotKyAgLy8gc2NyYXRjaCBhbmQgbmVlZHMgbm8gdGVtcHMgYXQgYWxsLiBvZmZz ZXRUZW1wL21hc2tUZW1wIGFyZSB1bnVzZWQKLSsgIC8vIGluIGVpdGhlciBwYXRoLgotKyAgaWYg KGlucy0+YWNjZXNzKCkuYnl0ZVNpemUoKSA8IDQgJiYgaW5zLT5oYXNVc2VzKCkpIHsKLSsgICAg dmFsdWVUZW1wID0gdGVtcCgpOwotKyAgfQotKwotKyAgaWYgKCFpbnMtPmhhc1VzZXMoKSkgewot KyAgICBMV2FzbUF0b21pY0Jpbm9wSGVhcEZvckVmZmVjdCogbGlyID0gbmV3IChhbGxvYygpKQot KyAgICAgICAgTFdhc21BdG9taWNCaW5vcEhlYXBGb3JFZmZlY3QodXNlUmVnaXN0ZXIoYmFzZSks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZWdpc3RlcihpbnMt PnZhbHVlKCkpLCBtZW1vcnlCYXNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7Ci0rICAgIGFkZChsaXIsIGlu cyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkK LSsgICAgICBMV2FzbUF0b21pY0Jpbm9wSGVhcCh1c2VSZWdpc3RlcihiYXNlKSwgdXNlUmVnaXN0 ZXIoaW5zLT52YWx1ZSgpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNl LCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKLSsKLSsgIGRlZmluZShsaXIsIGlu cyk7Ci0rfQotKwotKy8vIFNJTUQgbG93ZXJpbmcKLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRX YXNtVGVybmFyeVNpbWQxMjgoTVdhc21UZXJuYXJ5U2ltZDEyOCogaW5zKSB7Ci0rI2lmZGVmIEVO QUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2lt ZDEyOCk7Ci0rICAvLyB1c2VSZWdpc3RlciBmb3IgdjAvdjEgYW5kIHVzZVJlZ2lzdGVyQXRTdGFy dCBvbmx5IGZvciB2MiDigJQgbWF0Y2hlcwotKyAgLy8gQVJNNjQncyBWMTI4Qml0c2VsZWN0IHBv bGljeS4gZGVmaW5lUmV1c2VJbnB1dCByZXF1aXJlcyB0aGUgcmV1c2VkCi0rICAvLyBpbnB1dCB0 byBiZSB1c2VSZWdpc3RlckF0U3RhcnQgYW5kIHRoZSBvdGhlcnMgdG8gcmVtYWluIGFsaXZlCi0r ICAvLyAodXNlUmVnaXN0ZXIpOyByZXVzaW5nIGFsbCB0aHJlZSBwb2xpY2llcyBhcyB1c2VSZWdp c3RlckF0U3RhcnQKLSsgIC8vIHRyaXBzIHRoZSBhbGxvY2F0b3IncyAiKmRlZi0+b3V0cHV0KCkg IT0gYWxsb2MiIGFzc2VydGlvbiBiZWNhdXNlCi0rICAvLyB2MC92MSBtYXkgdGhlbiBzaGFyZSB0 aGUgc2xvdCB3aXRoIHRoZSBvdXRwdXQuCi0rICBMRGVmaW5pdGlvbiB0ZW1wMCA9IExEZWZpbml0 aW9uOjpCb2d1c1RlbXAoKTsKLSsgIGlmIChpbnMtPnNpbWRPcCgpID09IHdhc206OlNpbWRPcDo6 STMyeDRSZWxheGVkRG90STh4MTZJN3gxNkFkZFMpIHsKLSsgICAgdGVtcDAgPSB0ZW1wU2ltZDEy OCgpOwotKyAgfQotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbVRlcm5hcnlTaW1k MTI4KAotKyAgICAgIHVzZVJlZ2lzdGVyKGlucy0+djAoKSksIHVzZVJlZ2lzdGVyKGlucy0+djEo KSksCi0rICAgICAgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+djIoKSksIHRlbXAwLAotKyAgICAg IGlucy0+c2ltZE9wKCkpOwotKyAgLy8gVGhlIFBQQzY0IHZpc2l0b3IgKENvZGVHZW5lcmF0b3It cHBjNjQuY3BwOnZpc2l0V2FzbVRlcm5hcnlTaW1kMTI4KQotKyAgLy8gZW1pdHMgdGhlIEZNQSAv IERPVF9USEVOX0FERCBjaGFpbiB3aXRoIHYyIGFzIHRoZSBpbXBsaWNpdAotKyAgLy8gYWNjdW11 bGF0b3IuIGRlZmluZVJldXNlSW5wdXQgdGVsbHMgdGhlIGFsbG9jYXRvciB0byBwdXQgYGRlc3Rg Ci0rICAvLyBpbiB2MidzIHNsb3QsIGVsaW1pbmF0aW5nIHRoZSBwcmV2aW91cyBjb25kaXRpb25h bCBtb3ZlU2ltZDEyOC4KLSsgIGRlZmluZVJldXNlSW5wdXQobGlyLCBpbnMsIExXYXNtVGVybmFy eVNpbWQxMjg6OlYySW5kZXgpOwotKyNlbHNlCi0rICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsj ZW5kaWYKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUJpbmFyeVNpbWQxMjgoTVdh c21CaW5hcnlTaW1kMTI4KiBpbnMpIHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgTU9a X0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpTaW1kMTI4KTsKLSsgIExEZWZpbml0aW9u IHRlbXAwID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKyAgTERlZmluaXRpb24gdGVtcDEg PSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICAvLyBtdWxJbnQ2NHgyIChpNjR4Mi5tdWwp IHJvdXRlcyB0aHJvdWdoIEdQUnMgKG1mdnNyZC9tdWxsZC9tdHZzcmQpIGFuZAotKyAgLy8gdXNl cyBhbiBpbnRlcm5hbCBTY3JhdGNoU2ltZDEyOCArIEdQUiBzY3JhdGNoZXM7IGl0cyBGbG9hdFJl Z2lzdGVyCi0rICAvLyB0ZW1wMS90ZW1wMiBwYXJhbWV0ZXJzIGFyZSBpbmhlcml0ZWQgZnJvbSB0 aGUgc2hhcmVkIEFSTTY0K1BQQzY0Ci0rICAvLyBzaWduYXR1cmUgYnV0IHVudXNlZCBvbiBQUEM2 NC4gT25seSBGUCBtaW4vbWF4IG5lZWQgU0lNRCB0ZW1wcyBmb3IKLSsgIC8vIHRoZSB3YXNtIE5h Ti1jYW5vbmljYWxpc2F0aW9uIGRhbmNlLgotKyAgaWYgKGlucy0+c2ltZE9wKCkgPT0gd2FzbTo6 U2ltZE9wOjpGMzJ4NE1pbiB8fAotKyAgICAgIGlucy0+c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9w OjpGMzJ4NE1heCB8fAotKyAgICAgIGlucy0+c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpGNjR4 Mk1pbiB8fAotKyAgICAgIGlucy0+c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpGNjR4Mk1heCkg ewotKyAgICB0ZW1wMCA9IHRlbXBTaW1kMTI4KCk7Ci0rICAgIHRlbXAxID0gdGVtcFNpbWQxMjgo KTsKLSsgIH0KLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21CaW5hcnlTaW1kMTI4 KAotKyAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXJBdFN0 YXJ0KGlucy0+cmhzKCkpLAotKyAgICAgIHRlbXAwLCB0ZW1wMSwgaW5zLT5zaW1kT3AoKSk7Ci0r ICBkZWZpbmUobGlyLCBpbnMpOwotKyNlbHNlCi0rICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsj ZW5kaWYKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUJpbmFyeVNpbWQxMjhXaXRo Q29uc3RhbnQoCi0rICAgIE1XYXNtQmluYXJ5U2ltZDEyOFdpdGhDb25zdGFudCogaW5zKSB7Ci0r I2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlS VHlwZTo6U2ltZDEyOCk7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtQmluYXJ5 U2ltZDEyOFdpdGhDb25zdGFudCgKLSsgICAgICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMo KSksIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSwgaW5zLT5yaHMoKSk7Ci0rICBkZWZpbmUobGly LCBpbnMpOwotKyNlbHNlCi0rICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0r dm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVNoaWZ0U2ltZDEyOChNV2FzbVNoaWZ0U2ltZDEy OCogaW5zKSB7Ci0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50 eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7Ci0rICBNT1pfQVNTRVJUKGlucy0+cmhzKCktPnR5 cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7Ci0rCi0rICBpZiAoaW5zLT5yaHMoKS0+aXNDb25zdGFu dCgpKSB7Ci0rICAgIGludDMyX3Qgc2hpZnRDb3VudE1hc2s7Ci0rICAgIHN3aXRjaCAoaW5zLT5z aW1kT3AoKSkgewotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNobDoKLSsgICAgICBj YXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJVOgotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ OHgxNlNoclM6Ci0rICAgICAgICBzaGlmdENvdW50TWFzayA9IDc7Ci0rICAgICAgICBicmVhazsK LSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaGw6Ci0rICAgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4U2hyVToKLSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaHJTOgot KyAgICAgICAgc2hpZnRDb3VudE1hc2sgPSAxNTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNobDoKLSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STMy eDRTaHJVOgotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFNoclM6Ci0rICAgICAgICBz aGlmdENvdW50TWFzayA9IDMxOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk2NHgyU2hsOgotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNoclU6Ci0r ICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoKLSsgICAgICAgIHNoaWZ0Q291bnRN YXNrID0gNjM7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9a X0NSQVNIKCJVbmV4cGVjdGVkIHNoaWZ0IG9wZXJhdGlvbiIpOwotKyAgICB9Ci0rICAgIGludDMy X3Qgc2hpZnRDb3VudCA9IGlucy0+cmhzKCktPnRvQ29uc3RhbnQoKS0+dG9JbnQzMigpICYgc2hp ZnRDb3VudE1hc2s7Ci0rI2lmZGVmIERFQlVHCi0rICAgIGpzOjp3YXNtOjpSZXBvcnRTaW1kQW5h bHlzaXMoInNoaWZ0IC0+IGNvbnN0YW50IHNoaWZ0Iik7Ci0rI2VuZGlmCi0rICAgIGF1dG8qIGxp ciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICAgIExXYXNtQ29uc3RhbnRTaGlmdFNpbWQxMjgodXNl UmVnaXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkpLCBzaGlmdENvdW50KTsKLSsgICAgZGVmaW5lKGxp ciwgaW5zKTsKLSsgIH0gZWxzZSB7Ci0rI2lmZGVmIERFQlVHCi0rICAgIGpzOjp3YXNtOjpSZXBv cnRTaW1kQW5hbHlzaXMoInNoaWZ0IC0+IHZhcmlhYmxlIHNoaWZ0Iik7Ci0rI2VuZGlmCi0rICAg IGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21WYXJpYWJsZVNoaWZ0U2ltZDEyOCgKLSsg ICAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+cmhzKCkpKTsKLSsgICAgZGVmaW5lKGxpciwgaW5zKTsKLSsgIH0KLSsjZWxzZQotKyAg TU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotKyNpZmRlZiBFTkFCTEVfV0FTTV9T SU1ECi0rLy8gSGVscGVyOiByZWNvbnN0cnVjdCByYXcgV2FzbSBieXRlIGxhbmUgaW5kaWNlcyBm cm9tIGFuYWx5emVkIFNpbWRTaHVmZmxlLgotK3N0YXRpYyBTaW1kQ29uc3RhbnQgUmVjb25zdHJ1 Y3RTaHVmZmxlQnl0ZXMoY29uc3QgU2ltZFNodWZmbGUmIHMpIHsKLSsgIGludDhfdCBieXRlc1sx Nl07Ci0rICBpZiAocy5wZXJtdXRlT3ApIHsKLSsgICAgc3dpdGNoICgqcy5wZXJtdXRlT3ApIHsK LSsgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6Ok1PVkU6Ci0rICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDE2OyBpKyspIGJ5dGVzW2ldID0gaTsKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3Rh bnQ6OkNyZWF0ZVgxNihieXRlcyk7Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRF XzMyeDQ6IHsKLSsgICAgICAgIGNvbnN0IGludDMyX3QqIHcgPSByZWludGVycHJldF9jYXN0PGNv bnN0IGludDMyX3QqPihzLmNvbnRyb2wuYnl0ZXMoKSk7Ci0rICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDQ7IGkrKykKLSsgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIGJ5 dGVzW2kqNCtqXSA9IHdbaV0qNCtqOwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3Jl YXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpQRVJN VVRFXzE2eDg6IHsKLSsgICAgICAgIGNvbnN0IGludDE2X3QqIGggPSByZWludGVycHJldF9jYXN0 PGNvbnN0IGludDE2X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSk7Ci0rICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgICBpbnQgaWR4ID0gaFtpXSAmIDB4NzsKLSsg ICAgICAgICAgYnl0ZXNbaSoyXSA9IGlkeCoyOwotKyAgICAgICAgICBieXRlc1tpKjIrMV0gPSBp ZHgqMisxOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRl WDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpCUk9BRENB U1RfOHgxNjogewotKyAgICAgICAgaW50OF90IGxhbmUgPSByZWludGVycHJldF9jYXN0PGNvbnN0 IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKLSsgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMTY7IGkrKykgYnl0ZXNbaV0gPSBsYW5lOwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25z dGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0 ZU9wOjpCUk9BRENBU1RfMTZ4ODogewotKyAgICAgICAgaW50OF90IGxhbmUgPSByZWludGVycHJl dF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKLSsgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICAgIGJ5dGVzW2kqMl0gPSBsYW5l KjI7IGJ5dGVzW2kqMisxXSA9IGxhbmUqMisxOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJu IFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBT aW1kUGVybXV0ZU9wOjpST1RBVEVfUklHSFRfOHgxNjogewotKyAgICAgICAgdWludDhfdCBzaGlm dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4ocy5jb250cm9sLmJ5dGVzKCkpWzBd OwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSBieXRlc1tpXSA9IChpICsg c2hpZnQpICUgMTY7Ci0rICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0 ZXMpOwotKyAgICAgIH0KLSsgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX1JJR0hUXzh4 MTY6IHsKLSsgICAgICAgIHVpbnQ4X3Qgc2hpZnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGlu dDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgYnl0ZXNbaV0gPSAoaStzaGlmdCA8IDE2KSA/IChpK3NoaWZ0KSA6IDA7Ci0r ICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOwotKyAgICAgIH0K LSsgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX0xFRlRfOHgxNjogewotKyAgICAgICAg dWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4ocy5jb250cm9s LmJ5dGVzKCkpWzBdOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSBieXRl c1tpXSA9IChpID49IHNoaWZ0KSA/IChpLXNoaWZ0KSA6IDA7Ci0rICAgICAgICByZXR1cm4gU2lt ZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOwotKyAgICAgIH0KLSsgICAgICBjYXNlIFNpbWRQ ZXJtdXRlT3A6OlJFVkVSU0VfMTZ4ODoKLSsgICAgICAgIC8vIFJldmVyc2UgYnl0ZXMgd2l0aGlu IGVhY2ggMTYtYml0IGxhbmU6IFsxLDAsMywyLDUsNCwuLi5dCi0rICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgICBieXRlc1tpKjJdID0gaSoyKzE7IGJ5dGVz W2kqMisxXSA9IGkqMjsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6 OkNyZWF0ZVgxNihieXRlcyk7Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzMy eDQ6Ci0rICAgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDMyLWJpdCBsYW5lOiBb MywyLDEsMCw3LDYsNSw0LC4uLl0KLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KQotKyAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgYnl0ZXNbaSo0K2pdID0g aSo0KygzLWopOwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVz KTsKLSsgICAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJFVkVSU0VfNjR4MjoKLSsgICAgICAgIC8v IFJldmVyc2UgYnl0ZXMgd2l0aGluIGVhY2ggNjQtYml0IGxhbmU6IFs3LDYsNSw0LDMsMiwxLDAs MTUsLi4uXQotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCi0rICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSBieXRlc1tpKjgral0gPSBpKjgrKDctaik7Ci0r ICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOwotKyAgICAgIGRl ZmF1bHQ6Ci0rICAgICAgICBicmVhazsKLSsgICAgfQotKyAgfQotKyAgLy8gSGFuZGxlIFNpbWRT aHVmZmxlT3AgKHR3by1vcGVyYW5kIHBhdHRlcm5zKS4KLSsgIGlmIChzLnNodWZmbGVPcCkgewot KyAgICBzd2l0Y2ggKCpzLnNodWZmbGVPcCkgewotKyAgICAgIGNhc2UgU2ltZFNodWZmbGVPcDo6 Q09OQ0FUX1JJR0hUX1NISUZUXzh4MTY6IHsKLSsgICAgICAgIC8vIGNvbnRyb2xbMF0gPSBzdWZm aXggbGVuZ3RoLiBBUk02NCB1c2VzIDE2LWNvdW50IGFzIHRoZSBFWFQgc2hpZnQuCi0rICAgICAg ICAvLyBSZWNvbnN0cnVjdCByYXcgYnl0ZSBpbmRpY2VzOiBFWFQocmhzLCBsaHMsIDE2LWNvdW50 KSA9Ci0rICAgICAgICAvLyB0YWtlICgxNi1jb3VudCkgYnl0ZXMgZnJvbSByaHMgZW5kLCB0aGVu IGNvdW50IGJ5dGVzIGZyb20gbGhzIHN0YXJ0LgotKyAgICAgICAgdWludDhfdCBjb3VudCA9IDE2 IC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07 Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgICAgaW50 IGlkeCA9IGkgKyBjb3VudDsKLSsgICAgICAgICAgYnl0ZXNbaV0gPSAoaWR4IDwgMTYpID8gKGlk eCArIDE2KSA6IChpZHggLSAxNik7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gU2ltZENv bnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOwotKyAgICAgIH0KLSsgICAgICBjYXNlIFNpbWRTaHVm ZmxlT3A6OkJMRU5EXzh4MTY6IHsKLSsgICAgICAgIC8vIGNvbnRyb2wgaGFzIDAgKGxocykgb3Ig LTEgKHJocykgcGVyIGJ5dGUuCi0rICAgICAgICBjb25zdCBpbnQ4X3QqIG1hc2sgPSByZWludGVy cHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKTsKLSsgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgICAgICAgYnl0ZXNbaV0gPSBtYXNrW2ld ID8gKGkgKyAxNikgOiBpOwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2 KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kU2h1ZmZsZU9wOjpCTEVORF8xNng4 OiB7Ci0rICAgICAgICBjb25zdCBpbnQxNl90KiBtYXNrID0gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBpbnQxNl90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA4OyBpKyspIHsKLSsgICAgICAgICAgaW50IGJhc2UgPSBtYXNrW2ldID8gKGkgKiAyICsg MTYpIDogKGkgKiAyKTsKLSsgICAgICAgICAgYnl0ZXNbaSAqIDJdID0gYmFzZTsKLSsgICAgICAg ICAgYnl0ZXNbaSAqIDIgKyAxXSA9IGJhc2UgKyAxOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0 dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rI2RlZmluZSBJ TlRFUkxFQVZFKG5hbWUsIHdpZHRoLCBsb3dfc3RhcnQsIGNvdW50KSBcCi0rICAgICAgY2FzZSBT aW1kU2h1ZmZsZU9wOjpuYW1lOiB7IFwKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291 bnQ7IGkrKykgeyBcCi0rICAgICAgICAgIGludCBsaHNJZHggPSBsb3dfc3RhcnQgKyBpICogd2lk dGg7IFwKLSsgICAgICAgICAgaW50IHJoc0lkeCA9IGxoc0lkeCArIDE2OyBcCi0rICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgd2lkdGg7IGorKykgeyBcCi0rICAgICAgICAgICAgYnl0ZXNb KGkgKiAyKSAqIHdpZHRoICsgal0gPSBsaHNJZHggKyBqOyBcCi0rICAgICAgICAgICAgYnl0ZXNb KGkgKiAyICsgMSkgKiB3aWR0aCArIGpdID0gcmhzSWR4ICsgajsgXAotKyAgICAgICAgICB9IFwK LSsgICAgICAgIH0gXAotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5 dGVzKTsgXAotKyAgICAgIH0KLSsgICAgICBJTlRFUkxFQVZFKElOVEVSTEVBVkVfTE9XXzh4MTYs IDEsIDAsIDgpCi0rICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0hJR0hfOHgxNiwgMSwgOCwg OCkKLSsgICAgICBJTlRFUkxFQVZFKElOVEVSTEVBVkVfTE9XXzE2eDgsIDIsIDAsIDQpCi0rICAg ICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0hJR0hfMTZ4OCwgMiwgOCwgNCkKLSsgICAgICBJTlRF UkxFQVZFKElOVEVSTEVBVkVfTE9XXzMyeDQsIDQsIDAsIDIpCi0rICAgICAgSU5URVJMRUFWRShJ TlRFUkxFQVZFX0hJR0hfMzJ4NCwgNCwgOCwgMikKLSsgICAgICBJTlRFUkxFQVZFKElOVEVSTEVB VkVfTE9XXzY0eDIsIDgsIDAsIDEpCi0rICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0hJR0hf NjR4MiwgOCwgOCwgMSkKLSsjdW5kZWYgSU5URVJMRUFWRQotKyAgICAgIGRlZmF1bHQ6Ci0rICAg ICAgICBicmVhazsKLSsgICAgfQotKyAgfQotKyAgLy8gUEVSTVVURV84eDE2LCBTSFVGRkxFX0JM RU5EXzh4MTYsIGV0YzogY29udHJvbCBzaG91bGQgaGF2ZSByYXcgYnl0ZSBpbmRpY2VzLgotKyAg Ly8gRm9yY2UgdG8gSW50OHgxNiB0eXBlIHRvIGF2b2lkIGFzc2VydGlvbnMgZnJvbSBtaXNtYXRj aGVkIHR5cGVzLgotKyAgaWYgKHMuY29udHJvbC50eXBlKCkgPT0gU2ltZENvbnN0YW50OjpJbnQ4 eDE2KSB7Ci0rICAgIHJldHVybiBzLmNvbnRyb2w7Ci0rICB9Ci0rICAvLyBGYWxsYmFjazogcmUt Y3JlYXRlIGFzIEludDh4MTYgZnJvbSByYXcgYnl0ZXMuCi0rICBtZW1jcHkoYnl0ZXMsIHMuY29u dHJvbC5ieXRlcygpLCAxNik7Ci0rICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0 ZXMpOwotK30KLSsKLSsjZW5kaWYgIC8vIEVOQUJMRV9XQVNNX1NJTUQKLSsKLSt2b2lkIExJUkdl bmVyYXRvcjo6dmlzaXRXYXNtU2h1ZmZsZVNpbWQxMjgoTVdhc21TaHVmZmxlU2ltZDEyOCogaW5z KSB7Ci0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkg PT0gTUlSVHlwZTo6U2ltZDEyOCk7Ci0rICBTaW1kU2h1ZmZsZSBzID0gaW5zLT5zaHVmZmxlKCk7 Ci0rICBzd2l0Y2ggKHMub3BkKSB7Ci0rICAgIGNhc2UgU2ltZFNodWZmbGU6Ok9wZXJhbmQ6OkxF RlQ6Ci0rICAgIGNhc2UgU2ltZFNodWZmbGU6Ok9wZXJhbmQ6OlJJR0hUOiB7Ci0rICAgICAgLy8g U2luZ2xlLW9wZXJhbmQgcGVybXV0ZTogdGhlIGFuYWx5c2lzIGhhcyBpZGVudGlmaWVkIHRoYXQg b25seSBvbmUKLSsgICAgICAvLyBpbnB1dCBtYXR0ZXJzICh0aGUgb3RoZXIgaXMgemVybyBvciB1 bnVzZWQpLgotKyAgICAgIExBbGxvY2F0aW9uIHNyYzsKLSsgICAgICBpZiAocy5vcGQgPT0gU2lt ZFNodWZmbGU6Ok9wZXJhbmQ6OkxFRlQpIHsKLSsgICAgICAgIHNyYyA9IHVzZVJlZ2lzdGVyQXRT dGFydChpbnMtPmxocygpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc3JjID0gdXNlUmVn aXN0ZXJBdFN0YXJ0KGlucy0+cmhzKCkpOwotKyAgICAgIH0KLSsgICAgICBhdXRvKiBsaXIgPQot KyAgICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtUGVybXV0ZVNpbWQxMjgoc3JjLCAqcy5wZXJt dXRlT3AsIHMuY29udHJvbCk7Ci0rICAgICAgZGVmaW5lKGxpciwgaW5zKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpCT1RIOgotKyAgICBj YXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpCT1RIX1NXQVBQRUQ6IHsKLSsgICAgICBTaW1kQ29u c3RhbnQgY3RybCA9IFJlY29uc3RydWN0U2h1ZmZsZUJ5dGVzKHMpOwotKyAgICAgIExBbGxvY2F0 aW9uIGxocywgcmhzOwotKyAgICAgIGlmIChzLm9wZCA9PSBTaW1kU2h1ZmZsZTo6T3BlcmFuZDo6 Qk9USF9TV0FQUEVEKSB7Ci0rICAgICAgICBsaHMgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5y aHMoKSk7Ci0rICAgICAgICByaHMgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSk7Ci0r ICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGxocyA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxo cygpKTsKLSsgICAgICAgIHJocyA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnJocygpKTsKLSsg ICAgICB9Ci0rICAgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbVNodWZmbGVTaW1k MTI4KAotKyAgICAgICAgICBsaHMsIHJocywgKnMuc2h1ZmZsZU9wLCBjdHJsKTsKLSsgICAgICBk ZWZpbmUobGlyLCBpbnMpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICB9Ci0rI2Vsc2UKLSsg IE1PWl9DUkFTSCgiTm8gU0lNRCIpOwotKyNlbmRpZgotK30KLSt2b2lkIExJUkdlbmVyYXRvcjo6 dmlzaXRXYXNtUmVwbGFjZUxhbmVTaW1kMTI4KE1XYXNtUmVwbGFjZUxhbmVTaW1kMTI4KiBpbnMp IHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgTU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9 PSBNSVJUeXBlOjpTaW1kMTI4KTsKLSsgIGlmIChpbnMtPnJocygpLT50eXBlKCkgPT0gTUlSVHlw ZTo6SW50NjQpIHsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbVJlcGxhY2VJ bnQ2NExhbmVTaW1kMTI4KAotKyAgICAgICAgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkp LCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+cmhzKCkpKTsKLSsgICAgZGVmaW5lUmV1c2VJbnB1dChs aXIsIGlucywgTFdhc21SZXBsYWNlSW50NjRMYW5lU2ltZDEyODo6TGhzSW5kZXgpOwotKyAgfSBl bHNlIHsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbVJlcGxhY2VMYW5lU2lt ZDEyOCgKLSsgICAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKSwgdXNlUmVnaXN0 ZXIoaW5zLT5yaHMoKSkpOwotKyAgICBkZWZpbmVSZXVzZUlucHV0KGxpciwgaW5zLCBMV2FzbVJl cGxhY2VMYW5lU2ltZDEyODo6TGhzSW5kZXgpOwotKyAgfQotKyNlbHNlCi0rICBNT1pfQ1JBU0go Ik5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVNj YWxhclRvU2ltZDEyOChNV2FzbVNjYWxhclRvU2ltZDEyOCogaW5zKSB7Ci0rI2lmZGVmIEVOQUJM RV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEy OCk7Ci0rICBpZiAoaW5zLT5pbnB1dCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpIHsKLSsg ICAgYXV0byogbGlyID0KLSsgICAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21JbnQ2NFRvU2ltZDEy OCh1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpKTsKLSsgICAgZGVmaW5lKGxp ciwgaW5zKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGF1dG8qIGxpciA9Ci0rICAgICAgICBuZXcgKGFs bG9jKCkpIExXYXNtU2NhbGFyVG9TaW1kMTI4KHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0 KCkpKTsKLSsgICAgZGVmaW5lKGxpciwgaW5zKTsKLSsgIH0KLSsjZWxzZQotKyAgTU9aX0NSQVNI KCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21V bmFyeVNpbWQxMjgoTVdhc21VbmFyeVNpbWQxMjgqIGlucykgewotKyNpZmRlZiBFTkFCTEVfV0FT TV9TSU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOwot KyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgIExXYXNtVW5hcnlTaW1kMTI4KHVz ZVJlZ2lzdGVyQXRTdGFydChpbnMtPmlucHV0KCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAg IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwotKyNlbHNl Ci0rICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0rI2lmZGVmIEVOQUJMRV9X QVNNX1NJTUQKLStib29sIExJUkdlbmVyYXRvclBQQzY0OjpjYW5Gb2xkUmVkdWNlU2ltZDEyOEFu ZEJyYW5jaCh3YXNtOjpTaW1kT3Agb3ApIHsKLSsgIHN3aXRjaCAob3ApIHsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OlYxMjhBbnlUcnVlOgotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZB bGxUcnVlOgotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhBbGxUcnVlOgotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRBbGxUcnVlOgotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0 eDJBbGxUcnVlOgotKyAgICAgIHJldHVybiB0cnVlOwotKyAgICBkZWZhdWx0OgotKyAgICAgIHJl dHVybiBmYWxzZTsKLSsgIH0KLSt9Ci0rCi0rYm9vbCBMSVJHZW5lcmF0b3JQUEM2NDo6Y2FuRW1p dFdhc21SZWR1Y2VTaW1kMTI4QXRVc2VzKAotKyAgICBNV2FzbVJlZHVjZVNpbWQxMjgqIGlucykg ewotKyAgaWYgKCFpbnMtPmNhbkVtaXRBdFVzZXMoKSkgewotKyAgICByZXR1cm4gZmFsc2U7Ci0r ICB9Ci0rICBpZiAoaW5zLT50eXBlKCkgIT0gTUlSVHlwZTo6SW50MzIpIHsKLSsgICAgcmV0dXJu IGZhbHNlOwotKyAgfQotKyAgaWYgKCFjYW5Gb2xkUmVkdWNlU2ltZDEyOEFuZEJyYW5jaChpbnMt PnNpbWRPcCgpKSkgewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rICBNVXNlSXRlcmF0b3Ig aXRlcihpbnMtPnVzZXNCZWdpbigpKTsKLSsgIGlmIChpdGVyID09IGlucy0+dXNlc0VuZCgpKSB7 Ci0rICAgIHJldHVybiB0cnVlOwotKyAgfQotKyAgTU5vZGUqIG5vZGUgPSBpdGVyLT5jb25zdW1l cigpOwotKyAgaWYgKCFub2RlLT5pc0RlZmluaXRpb24oKSB8fCAhbm9kZS0+dG9EZWZpbml0aW9u KCktPmlzVGVzdCgpKSB7Ci0rICAgIHJldHVybiBmYWxzZTsKLSsgIH0KLSsgIGl0ZXIrKzsKLSsg IHJldHVybiBpdGVyID09IGlucy0+dXNlc0VuZCgpOwotK30KLSsjZW5kaWYgIC8vIEVOQUJMRV9X QVNNX1NJTUQKLSsKLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtUmVkdWNlU2ltZDEyOChN V2FzbVJlZHVjZVNpbWQxMjgqIGlucykgewotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0rICBp ZiAoY2FuRW1pdFdhc21SZWR1Y2VTaW1kMTI4QXRVc2VzKGlucykpIHsKLSsgICAgZW1pdEF0VXNl cyhpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpZiAoaW5zLT50eXBlKCkgPT0gTUlSVHlw ZTo6SW50NjQpIHsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgICAgTFdh c21SZWR1Y2VTaW1kMTI4VG9JbnQ2NCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7 Ci0rICAgIGRlZmluZUludDY0KGxpciwgaW5zKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGF1dG8qIGxp ciA9Ci0rICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtUmVkdWNlU2ltZDEyOCh1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7Ci0rICAgIGRlZmluZShsaXIsIGlucyk7Ci0rICB9Ci0r I2Vsc2UKLSsgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOwotKyNlbmRpZgotK30KLSt2b2lkIExJUkdl bmVyYXRvcjo6dmlzaXRXYXNtTG9hZExhbmVTaW1kMTI4KE1XYXNtTG9hZExhbmVTaW1kMTI4KiBp bnMpIHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgTFVzZSBiYXNlID0gdXNlUmVnaXN0 ZXJBdFN0YXJ0KGlucy0+YmFzZSgpKTsKLSsgIExVc2UgaW5wdXRVc2UgPSB1c2VSZWdpc3RlckF0 U3RhcnQoaW5zLT52YWx1ZSgpKTsKLSsgIExBbGxvY2F0aW9uIG1lbW9yeUJhc2UgPQotKyAgICAg IGlucy0+aGFzTWVtb3J5QmFzZSgpID8gTEFsbG9jYXRpb24odXNlUmVnaXN0ZXJBdFN0YXJ0KGlu cy0+bWVtb3J5QmFzZSgpKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExHZW5lcmFs UmVnKEhlYXBSZWcpOwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUxvYWRMYW5l U2ltZDEyOChiYXNlLCBpbnB1dFVzZSwgbWVtb3J5QmFzZSk7Ci0rICBkZWZpbmUobGlyLCBpbnMp OwotKyNlbHNlCi0rICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0rdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0V2FzbVN0b3JlTGFuZVNpbWQxMjgoTVdhc21TdG9yZUxhbmVTaW1k MTI4KiBpbnMpIHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgTFVzZSBiYXNlID0gdXNl UmVnaXN0ZXJBdFN0YXJ0KGlucy0+YmFzZSgpKTsKLSsgIExVc2UgaW5wdXQgPSB1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT52YWx1ZSgpKTsKLSsgIExBbGxvY2F0aW9uIG1lbW9yeUJhc2UgPQotKyAg ICAgIGlucy0+aGFzTWVtb3J5QmFzZSgpID8gTEFsbG9jYXRpb24odXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+bWVtb3J5QmFzZSgpKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExHZW5l cmFsUmVnKEhlYXBSZWcpOwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbVN0b3Jl TGFuZVNpbWQxMjgoYmFzZSwgaW5wdXQsIG1lbW9yeUJhc2UpOwotKyAgYWRkKGxpciwgaW5zKTsK LSsjZWxzZQotKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotKwotKy8vIFBQ QzY0IHNwZWNpYWxpemVzIGNvbXBhcmUrc2VsZWN0IGZvciB7VSx9SW50MzIgLyB7VSx9SW50NjQg Y29tcGFyZSB3aXRoCi0rLy8gSW50MzIgLyBJbnQ2NCByZXN1bHQuIFRoZSBDb2RlR2VuIHZpc2l0 b3IKLSsvLyAoQ29kZUdlbmVyYXRvci1wcGM2NC5jcHA6dmlzaXRXYXNtQ29tcGFyZUFuZFNlbGVj dCkgZW1pdHMKLSsvLyBjbXB3L2NtcGx3L2NtcGQvY21wbGQgKyBpc2VsID0gMiBpbnNucywgcmVw bGFjaW5nIHRoZSB+NS03IGluc25zIHRoZQotKy8vIGdlbmVyaWMgcGF0aCB3b3VsZCBlbWl0IChi b29sZWFuIG1hdGVyaWFsaXphdGlvbiArIHRlc3QgKyBpc2VsKS4gRlAKLSsvLyBzcGVjaWFsaXph dGlvbiBpcyBub3Qgd29ydGh3aGlsZSDigJQgdGhlIGdlbmVyaWMgRlAgc2VsZWN0IHBhdGggYWxy ZWFkeQotKy8vIHJ1bnMgZmFzdGVyIHRoYW4gdGhlIHNwZWNpYWxpemVkIGludGVnZXIgb25lIGFu ZCBQUEM2NCBsYWNrcyBhIHRydWUKLSsvLyBmY3NlbCBlcXVpdmFsZW50IChmc2VsIG9ubHkgY29t cGFyZXMgYWdhaW5zdCB6ZXJvKS4KLStib29sIExJUkdlbmVyYXRvclNoYXJlZDo6Y2FuU3BlY2lh bGl6ZVdhc21Db21wYXJlQW5kU2VsZWN0KAotKyAgICBNQ29tcGFyZTo6Q29tcGFyZVR5cGUgY29t cFR5LCBNSVJUeXBlIGluc1R5KSB7Ci0rICBjb25zdCBib29sIGluc09rID0gaW5zVHkgPT0gTUlS VHlwZTo6SW50MzIgfHwgaW5zVHkgPT0gTUlSVHlwZTo6SW50NjQ7Ci0rICBjb25zdCBib29sIGNt cE9rID0gY29tcFR5ID09IE1Db21wYXJlOjpDb21wYXJlX0ludDMyIHx8Ci0rICAgICAgICAgICAg ICAgICAgICAgY29tcFR5ID09IE1Db21wYXJlOjpDb21wYXJlX1VJbnQzMiB8fAotKyAgICAgICAg ICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9JbnQ2NCB8fAotKyAgICAg ICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50NjQ7Ci0rICBy ZXR1cm4gaW5zT2sgJiYgY21wT2s7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yU2hhcmVkOjps b3dlcldhc21Db21wYXJlQW5kU2VsZWN0KE1XYXNtU2VsZWN0KiBpbnMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxocywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVm aW5pdGlvbiogcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1Db21wYXJlOjpDb21wYXJlVHlwZSBjb21wVHksCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPcCBqc29wKSB7Ci0rICBNT1pf QVNTRVJUKGNhblNwZWNpYWxpemVXYXNtQ29tcGFyZUFuZFNlbGVjdChjb21wVHksIGlucy0+dHlw ZSgpKSk7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtQ29tcGFyZUFuZFNlbGVj dCgKLSsgICAgICB1c2VSZWdpc3RlcihsaHMpLCB1c2VSZWdpc3RlcihyaHMpLCB1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT50cnVlRXhwcigpKSwKLSsgICAgICB1c2VSZWdpc3RlcihpbnMtPmZhbHNl RXhwcigpKSwgY29tcFR5LCBqc29wKTsKLSsgIGRlZmluZVJldXNlSW5wdXQobGlyLCBpbnMsIExX YXNtQ29tcGFyZUFuZFNlbGVjdDo6SWZUcnVlRXhwckluZGV4KTsKLSt9Ci0rCi0rLy8gTUlSIGhl bHBlcnMgbmVlZGVkIGJ5IHRoZSBsaW5rZXIKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotK2Jv b2wgTVdhc21UZXJuYXJ5U2ltZDEyODo6c3BlY2lhbGl6ZUJpdHNlbGVjdENvbnN0YW50TWFza0Fz U2h1ZmZsZSgKLSsgICAgaW50OF90IHNodWZmbGVbMTZdKSB7Ci0rICByZXR1cm4gZmFsc2U7Ci0r fQotKyNlbmRpZgotKwotK2Jvb2wgTVdhc21CaW5hcnlTaW1kMTI4OjpzcGVjaWFsaXplRm9yQ29u c3RhbnRSaHMoKSB7IHJldHVybiBmYWxzZTsgfQotKwotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1E Ci0rYm9vbCBNV2FzbVRlcm5hcnlTaW1kMTI4OjpjYW5SZWxheEJpdHNlbGVjdCgpIHsgcmV0dXJu IGZhbHNlOyB9Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLStib29sIE1X YXNtQmluYXJ5U2ltZDEyODo6Y2FuUG1hZGR1YnN3KCkgeyByZXR1cm4gZmFsc2U7IH0KLSsjZW5k aWYKLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi1kaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2 NC9Mb3dlcmluZy1wcGM2NC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAw MDAwLi45YzM1MTlhN2JiMjMKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQv TG93ZXJpbmctcHBjNjQuaAotQEAgLTAsMCArMSwxMDUgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0 YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSot Ci0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNl IENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMK LSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJp YnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9t b3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVmIGppdF9wcGM2NF9Mb3dlcmluZ19w cGM2NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfTG93ZXJpbmdfcHBjNjRfaAotKwotKyNpbmNsdWRl ICJqaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFt ZXNwYWNlIGppdCB7Ci0rCi0rY2xhc3MgTElSR2VuZXJhdG9yUFBDNjQgOiBwdWJsaWMgTElSR2Vu ZXJhdG9yU2hhcmVkIHsKLSsgcHJvdGVjdGVkOgotKyAgTElSR2VuZXJhdG9yUFBDNjQoTUlSR2Vu ZXJhdG9yKiBnZW4sIE1JUkdyYXBoJiBncmFwaCwgTElSR3JhcGgmIGxpckdyYXBoKQotKyAgICAg IDogTElSR2VuZXJhdG9yU2hhcmVkKGdlbiwgZ3JhcGgsIGxpckdyYXBoKSB7fQotKwotKyAgTFRh YmxlU3dpdGNoKiBuZXdMVGFibGVTd2l0Y2goY29uc3QgTEFsbG9jYXRpb24mIGluLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTERlZmluaXRpb24mIGlucHV0Q29weSk7 Ci0rICBMVGFibGVTd2l0Y2hWKiBuZXdMVGFibGVTd2l0Y2hWKGNvbnN0IExCb3hBbGxvY2F0aW9u JiBpbik7Ci0rCi0rICB2b2lkIGxvd2VyRm9yU2hpZnQoTEluc3RydWN0aW9uSGVscGVyPDEsIDIs IDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAgICAgICAgTURlZmlu aXRpb24qIGxocywgTURlZmluaXRpb24qIHJocyk7Ci0rICB0ZW1wbGF0ZSA8Y2xhc3MgTEluc3Ry PgotKyAgdm9pZCBsb3dlckZvclNoaWZ0SW50NjQoTEluc3RyKiBpbnMsIE1EZWZpbml0aW9uKiBt aXIsIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5p dGlvbiogcmhzKTsKLSsgIHZvaWQgbG93ZXJGb3JBTFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDEs IDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAgICAgIE1EZWZpbml0 aW9uKiBpbnB1dCk7Ci0rICB2b2lkIGxvd2VyRm9yQUxVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAy LCAwPiogaW5zLCBNRGVmaW5pdGlvbiogbWlyLAotKyAgICAgICAgICAgICAgICAgICBNRGVmaW5p dGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKLSsgIHZvaWQgbG93ZXJGb3JBTFVJbnQ2NChM SW5zdHJ1Y3Rpb25IZWxwZXI8SU5UNjRfUElFQ0VTLCBJTlQ2NF9QSUVDRVMsIDA+KiBpbnMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGlu cHV0KTsKLSsgIHZvaWQgbG93ZXJGb3JBTFVJbnQ2NCgKLSsgICAgICBMSW5zdHJ1Y3Rpb25IZWxw ZXI8SU5UNjRfUElFQ0VTLCAyICogSU5UNjRfUElFQ0VTLCAwPiogaW5zLAotKyAgICAgIE1EZWZp bml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpOwotKyAgdm9p ZCBsb3dlckZvck11bEludDY0KExNdWxJNjQqIGlucywgTU11bCogbWlyLCBNRGVmaW5pdGlvbiog bGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpOwotKyAgdm9p ZCBsb3dlckZvckZQVShMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMSwgMD4qIGlucywgTURlZmluaXRp b24qIG1pciwKLSsgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGlucHV0KTsKLSsgIHZv aWQgbG93ZXJGb3JGUFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDIsIDA+KiBpbnMsIE1EZWZpbml0 aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0 aW9uKiByaHMpOwotKwotKyAgdGVtcGxhdGUgPHNpemVfdCBUZW1wcz4KLSsgIHZvaWQgbG93ZXJG b3JDb21wYXJlSTY0KExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyICogSU5UNjRfUElFQ0VTLCBUZW1w cz4qIGxpciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1E ZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpOwotKwotKyAgTEJveEFsbG9jYXRpb24g dXNlQm94Rml4ZWQoTURlZmluaXRpb24qIG1pciwgUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXIgcmVn MiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlQXRTdGFydCA9IGZhbHNl KTsKLSsKLSsgIExBbGxvY2F0aW9uIHVzZUJ5dGVPcFJlZ2lzdGVyKE1EZWZpbml0aW9uKiBtaXIp OwotKyAgTEFsbG9jYXRpb24gdXNlQnl0ZU9wUmVnaXN0ZXJBdFN0YXJ0KE1EZWZpbml0aW9uKiBt aXIpOwotKyAgTEFsbG9jYXRpb24gdXNlQnl0ZU9wUmVnaXN0ZXJPck5vbkRvdWJsZUNvbnN0YW50 KE1EZWZpbml0aW9uKiBtaXIpOwotKyAgTERlZmluaXRpb24gdGVtcEJ5dGVPcFJlZ2lzdGVyKCk7 Ci0rCi0rICBMRGVmaW5pdGlvbiB0ZW1wVG9VbmJveCgpOwotKwotKyAgYm9vbCBuZWVkVGVtcEZv clBvc3RCYXJyaWVyKCkgeyByZXR1cm4gdHJ1ZTsgfQotKwotKyAgdm9pZCBsb3dlclVudHlwZWRQ aGlJbnB1dChNUGhpKiBwaGksIHVpbnQzMl90IGlucHV0UG9zaXRpb24sIExCbG9jayogYmxvY2ss Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsaXJJbmRleCk7Ci0rICB2b2lk IGxvd2VySW50NjRQaGlJbnB1dChNUGhpKiBwaGksIHVpbnQzMl90IGlucHV0UG9zaXRpb24sIExC bG9jayogYmxvY2ssCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGlySW5kZXgp OwotKyAgdm9pZCBkZWZpbmVJbnQ2NFBoaShNUGhpKiBwaGksIHNpemVfdCBsaXJJbmRleCk7Ci0r Ci0rICB2b2lkIGxvd2VyTXVsSShNTXVsKiBtdWwsIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0 aW9uKiByaHMpOwotKyAgdm9pZCBsb3dlckRpdkkoTURpdiogZGl2KTsKLSsgIHZvaWQgbG93ZXJE aXZJNjQoTURpdiogZGl2KTsKLSsgIHZvaWQgbG93ZXJNb2RJKE1Nb2QqIG1vZCk7Ci0rICB2b2lk IGxvd2VyTW9kSTY0KE1Nb2QqIG1vZCk7Ci0rICB2b2lkIGxvd2VyVURpdihNRGl2KiBkaXYpOwot KyAgdm9pZCBsb3dlclVEaXZJNjQoTURpdiogZGl2KTsKLSsgIHZvaWQgbG93ZXJVTW9kKE1Nb2Qq IG1vZCk7Ci0rICB2b2lkIGxvd2VyVU1vZEk2NChNTW9kKiBtb2QpOwotKyAgdm9pZCBsb3dlclVy c2hEKE1VcnNoKiBtaXIpOwotKyAgdm9pZCBsb3dlclBvd09mVHdvSShNUG93KiBtaXIpOwotKyAg dm9pZCBsb3dlckJpZ0ludFB0ckRpdihNQmlnSW50UHRyRGl2KiBpbnMpOwotKyAgdm9pZCBsb3dl ckJpZ0ludFB0ck1vZChNQmlnSW50UHRyTW9kKiBpbnMpOwotKyAgdm9pZCBsb3dlckJpZ0ludFB0 ckxzaChNQmlnSW50UHRyTHNoKiBpbnMpOwotKyAgdm9pZCBsb3dlckJpZ0ludFB0clJzaChNQmln SW50UHRyUnNoKiBpbnMpOwotKyAgdm9pZCBsb3dlclRydW5jYXRlRFRvSW50MzIoTVRydW5jYXRl VG9JbnQzMiogaW5zKTsKLSsgIHZvaWQgbG93ZXJUcnVuY2F0ZUZUb0ludDMyKE1UcnVuY2F0ZVRv SW50MzIqIGlucyk7Ci0rICB2b2lkIGxvd2VyQnVpbHRpbkludDY0VG9GbG9hdGluZ1BvaW50KE1C dWlsdGluSW50NjRUb0Zsb2F0aW5nUG9pbnQqIGlucyk7Ci0rICB2b2lkIGxvd2VyV2FzbVNlbGVj dEkoTVdhc21TZWxlY3QqIHNlbGVjdCk7Ci0rICB2b2lkIGxvd2VyV2FzbVNlbGVjdEk2NChNV2Fz bVNlbGVjdCogc2VsZWN0KTsKLSsgIHZvaWQgbG93ZXJXYXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2 NChNV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50NjQqIGlucyk7Ci0rICB2b2lkIGxvd2VyV2FzbUJ1 aWx0aW5UcnVuY2F0ZVRvSW50MzIoTVdhc21CdWlsdGluVHJ1bmNhdGVUb0ludDMyKiBpbnMpOwot KyAgdm9pZCBsb3dlcldhc21CdWlsdGluRGl2STY0KE1XYXNtQnVpbHRpbkRpdkk2NCogZGl2KTsK LSsgIHZvaWQgbG93ZXJXYXNtQnVpbHRpbk1vZEk2NChNV2FzbUJ1aWx0aW5Nb2RJNjQqIG1vZCk7 Ci0rICB2b2lkIGxvd2VyQXRvbWljTG9hZDY0KE1Mb2FkVW5ib3hlZFNjYWxhciogaW5zKTsKLSsg IHZvaWQgbG93ZXJBdG9taWNTdG9yZTY0KE1TdG9yZVVuYm94ZWRTY2FsYXIqIGlucyk7Ci0rCi0r I2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIGJvb2wgY2FuRm9sZFJlZHVjZVNpbWQxMjhBbmRC cmFuY2god2FzbTo6U2ltZE9wIG9wKTsKLSsgIGJvb2wgY2FuRW1pdFdhc21SZWR1Y2VTaW1kMTI4 QXRVc2VzKE1XYXNtUmVkdWNlU2ltZDEyOCogaW5zKTsKLSsjZW5kaWYKLSt9OwotKwotK3R5cGVk ZWYgTElSR2VuZXJhdG9yUFBDNjQgTElSR2VuZXJhdG9yU3BlY2lmaWM7Ci0rCi0rfSAgLy8gbmFt ZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBqaXRfcHBjNjRf TG93ZXJpbmdfcHBjNjRfaCAqLwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9B c3NlbWJsZXItcHBjNjQtaW5sLmggYi9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBw YzY0LWlubC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5mODJj YTM2YjRlNDAKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3Nl bWJsZXItcHBjNjQtaW5sLmgKLUBAIC0wLDAgKzEsNjE0MiBAQAotKy8qIC0qLSBNb2RlOiBDKys7 IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt Ki0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3Vy Y2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1Ymxp YwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0 cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDov L21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3BwYzY0X01hY3JvQXNz ZW1ibGVyX3BwYzY0X2lubF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBj NjRfaW5sX2gKLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0Lmgi Ci0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLSsvL3t7eyBjaGVja19t YWNyb2Fzc2VtYmxlcl9zdHlsZQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIE1vdmUgaW5zdHJ1Y3Rpb25z Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3Rl cjY0IGRlc3QpIHsKLSsgIG1vdmVQdHIoc3JjLnJlZywgZGVzdC5yZWcpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjptb3ZlNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsg IG1vdmVQdHIoSW1tV29yZChpbW0udmFsdWUpLCBkZXN0LnJlZyk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVUb0dQUjY0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3Rl cjY0IGRlc3QpIHsKLSsgIGFzX21mdnNyZChkZXN0LnJlZywgc3JjKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bW92ZUdQUjY0VG9Eb3VibGUoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjptb3ZlTG93RG91YmxlVG9HUFIoRmxvYXRSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9DUkFTSCgiTm90IHN1cHBvcnRlZCBmb3IgdGhpcyB0YXJn ZXQiKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTY0VG8zMihSZWdpc3RlcjY0 IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZXh0c3coZGVzdCwgc3JjLnJlZyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlRvNjRaZXJvRXh0ZW5kKFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICAvLyBjbHJsZGkgZGVzdCwgc3JjLCAzMiDigJQgY2xl YXIgdXBwZXIgMzIgYml0cy4KLSsgIGFzX3JsZGljbChkZXN0LnJlZywgc3JjLCAwLCAzMik7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4VG82NFNpZ25FeHRlbmQoUmVnaXN0ZXIg c3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIGFzX2V4dHNiKGRlc3QucmVnLCBzcmMpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlMTZUbzY0U2lnbkV4dGVuZChSZWdpc3RlciBz cmMsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYXNfZXh0c2goZGVzdC5yZWcsIHNyYyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlRvNjRTaWduRXh0ZW5kKFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBhc19leHRzdyhkZXN0LnJlZywgc3JjKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUZsb2F0MzJUb0dQUihGbG9hdFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gRlBSIGhvbGRzIGRvdWJsZS1mb3JtYXQgdmFsdWUg KFBQQyBjb252ZW50aW9uKS4gQ29udmVydCB0bwotKyAgLy8gc2luZ2xlLXByZWNpc2lvbiBiaXRz IGluIGJpdHMgMDozMSBvZiB0aGUgVlNSLCB0aGVuIGV4dHJhY3QuCi0rICBhc194c2N2ZHBzcG4o U2NyYXRjaERvdWJsZVJlZywgc3JjKTsKLSsgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoRG91Ymxl UmVnKTsKLSsgIHhfc3JkaShkZXN0LCBkZXN0LCAzMik7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om1vdmVHUFJUb0Zsb2F0MzIoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIC8vIFBsYWNlIHJhdyBzaW5nbGUtcHJlY2lzaW9uIGJpdHMgaW4gVlNSIGJpdHMgMDoz MSwgdGhlbiBjb252ZXJ0Ci0rICAvLyB0byBkb3VibGUtcHJlY2lzaW9uIGZvcm1hdCAobWF0Y2hp bmcgUFBDJ3MgRlBSIGNvbnZlbnRpb24sIGxpa2UgbGZzKS4KLSsgIGlmIChIYXNQT1dFUjkoKSkg ewotKyAgICAvLyBtdHZzcndzIHNwbGF0cyB0aGUgMzItYml0IHdvcmQgdG8gYm90aCBoYWx2ZXMg b2YgdGhlIFZTUi4KLSsgICAgYXNfbXR2c3J3cyhkZXN0LCBzcmMpOwotKyAgfSBlbHNlIHsKLSsg ICAgLy8gUE9XRVI4OiBzaGlmdCBHUFIgbGVmdCAzMiBiaXRzIHRvIHBsYWNlIGZsb2F0IGJpdHMg aW4gdXBwZXIgd29yZCwKLSsgICAgLy8gdGhlbiBtb3ZlIHRvIFZTUi4geHNjdnNwZHBuIHJlYWRz IGZyb20gYml0cyAwOjMxLgotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7Ci0rICAgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgeF9zbGRpKHRt cCwgc3JjLCAzMik7Ci0rICAgIGFzX210dnNyZChkZXN0LCB0bXApOwotKyAgfQotKyAgYXNfeHNj dnNwZHBuKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlRmxv YXQxNlRvR1BSKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNT RVJUKEhhc1BPV0VSOSgpKTsKLSsgIC8vIHNyYyBoYXMgRlAxNiBpbiBkdzAgYml0cyA0ODo2Mzsg cmVzdCBvZiBkdzAgaXMgMCAocGVyIHhzY3ZkcGhwIC8KLSsgIC8vIGx4c2loenggLyBtdHZzcnd6 IGNvbnRyYWN0KS4gbWZ2c3JkIHJlYWRzIGR3MCDihpIgZGVzdCA9IDB4Li4uMDAwMF9ISEhILgot KyAgLy8gTWFzayBkZWZlbnNpdmVseSBpbiBjYXNlIGEgZnV0dXJlIGNhbGxlciBoYW5kcyB1cyBh IG5vbi1jYW5vbmljYWwgRlAxNi4KLSsgIGFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAgYXNfcmxk aWNsKGRlc3QsIGRlc3QsIDAsIDQ4KTsgIC8vIGNscmxkaSA0ODoga2VlcCBsb3cgMTYgYml0cwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlR1BSVG9GbG9hdDE2KFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKLSsg IC8vIG10dnNyd3ogemVyb3MgZHcwIHdvcmQgMCBhbmQgY29waWVzIHNyYydzIGxvdyAzMiB0byBk dzAgd29yZCAxOyBtYXNrCi0rICAvLyBzcmMgdG8gaXRzIGxvdyAxNiBmaXJzdCBzbyBkdzAgYml0 cyAzMjo0NyBzdGF5IHplcm8gKGNhbm9uaWNhbCBGUDE2KS4KLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICBhc19ybGRpY2woc2NyYXRjaCwgc3JjLCAwLCA0OCk7ICAvLyBjbHJsZGkgNDg6IGtl ZXAgb25seSBsb3cgMTYKLSsgIGFzX210dnNyd3ooZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4WmVyb0V4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsKLSsgIC8vIHJsd2lubSBkZXN0LCBzcmMsIDAsIDI0LCAzMSDigJQgbWFzayB0byBs b3cgOCBiaXRzLgotKyAgYXNfcmx3aW5tKGRlc3QsIHNyYywgMCwgMjQsIDMxKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZThTaWduRXh0ZW5kKFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgYXNfZXh0c2IoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bW92ZTE2U2lnbkV4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK LSsgIGFzX2V4dHNoKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1v dmU4U2lnbkV4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNf ZXh0c2IoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTE2U2ln bkV4dGVuZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZXh0c2go ZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTMyU2lnbkV4dGVu ZFRvUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZXh0c3coZGVzdCwg c3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTMyWmVyb0V4dGVuZFRvUHRy KFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfcmxkaWNsKGRlc3QsIHNyYywg MCwgMzIpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBMb2FkIGluc3RydWN0aW9ucwotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmxvYWQzMlNpZ25FeHRlbmRUb1B0cihjb25zdCBBZGRyZXNzJiBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGxvYWQzMihzcmMsIGRlc3QpOwotKyAgYXNfZXh0c3co ZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxvYWRBYmlSZXR1cm5B ZGRyZXNzKFJlZ2lzdGVyIGRlc3QpIHsgeHNfbWZscihkZXN0KTsgfQotKwotKy8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot Ky8vIExvZ2ljYWwgaW5zdHJ1Y3Rpb25zCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bm90MzIo UmVnaXN0ZXIgcmVnKSB7Ci0rICB4X25vdChyZWcsIHJlZyk7Ci0rICBhc19leHRzdyhyZWcsIHJl Zyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5vdFB0cihSZWdpc3RlciByZWcpIHsg eF9ub3QocmVnLCByZWcpOyB9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kUHRyKFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfYW5kXyhkZXN0LCBkZXN0LCBzcmMpOwot K30KLSsKLSsvLyBJZiBgbWFza2AgaXMgYSBub24temVybywgbm9uLWFsbC1vbmVzIGNvbnRpZ3Vv dXMgcnVuIG9mIDEtYml0cyBpbiBhCi0rLy8gMzItYml0IHZhbHVlIChMU0ItbnVtYmVyaW5nKSwg c2V0IE1CL01FIHRvIHRoZSBCRSBiaXQgcG9zaXRpb25zCi0rLy8gKFBQQyBjb252ZW50aW9uOiBi aXQgMCA9IE1TQikgbmVlZGVkIGJ5IGBybHdpbm0gU0g9MGAgYW5kIHJldHVybiB0cnVlLgotKy8v IE90aGVyd2lzZSByZXR1cm4gZmFsc2UuIFJ1bi10aW1lIGNvc3QgaXMgYXQgSklUIGVtaXQgdGlt ZSBvbmx5LgotK3N0YXRpYyBpbmxpbmUgYm9vbCBJc0NvbnRpZ01hc2szMih1aW50MzJfdCBtYXNr LCB1bnNpZ25lZCYgbWIsIHVuc2lnbmVkJiBtZSkgewotKyAgaWYgKG1hc2sgPT0gMCB8fCBtYXNr ID09IDB4RkZGRkZGRkZ1KSByZXR1cm4gZmFsc2U7Ci0rICB1bnNpZ25lZCB0eiA9ICh1bnNpZ25l ZClfX2J1aWx0aW5fY3R6KG1hc2spOwotKyAgdWludDMyX3Qgc2hpZnRlZCA9IG1hc2sgPj4gdHo7 Ci0rICBpZiAoKHNoaWZ0ZWQgJiAoc2hpZnRlZCArIDEpKSAhPSAwKSByZXR1cm4gZmFsc2U7ICAv LyBIYXMgYSAwIGJldHdlZW4gMXMuCi0rICB1bnNpZ25lZCB3aWR0aCA9IDMyIC0gKHVuc2lnbmVk KV9fYnVpbHRpbl9jbHooc2hpZnRlZCk7Ci0rICAvLyBMU0IgYml0cyBzZXQ6IFt0eiwgdHord2lk dGgtMV0uIEJFIGJpdHM6IFszMi10ei13aWR0aCwgMzEtdHpdLgotKyAgbWIgPSAzMiAtIHR6IC0g d2lkdGg7Ci0rICBtZSA9IDMxIC0gdHo7Ci0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rLy8gNjQt Yml0IGNvbnRpZ3VvdXMtbWFzayBjbGFzc2lmaWNhdGlvbiBmb3IgQU5ELXdpdGgtaW1tIHZpYSBQ UEMncwotKy8vIHJvdGF0ZS1hbmQtbWFzayBmYW1pbHkgKFNIPTApLiBPbiBzdWNjZXNzLCBzZXRz IGBsc2JgIChMU0ItbnVtYmVyaW5nCi0rLy8gb2YgbG93ZXN0IHNldCBiaXQpIGFuZCBgd2lkdGhg IChudW1iZXIgb2YgY29udGlndW91cyAxLWJpdHMpLgotKy8vIENhbGxlciBwaWNrcyB0aGUgZW5j b2Rpbmc6Ci0rLy8gICAtIGxzYiA9PSAwOiAgICAgICAgICAgICAgICBsb3cgYHdpZHRoYCBiaXRz IHNldCAgICAgICAg4oaSIHJsZGljbAotKy8vICAgKG1iNj02NC13aWR0aCkKLSsvLyAgIC0gbHNi ICsgd2lkdGggPT0gNjQ6ICAgICAgIGhpZ2ggYHdpZHRoYCBiaXRzIHNldCAgICAgICDihpIgcmxk aWNyCi0rLy8gICAobWU2PXdpZHRoLTEpCi0rLy8gICAtIGxzYiArIHdpZHRoIDw9IDMyOiAgICAg ICBjb250aWcgbWFzayB3aXRoaW4gbG93IDMyICAg4oaSIHJsd2lubSAoemVyb3MgaGlnaAotKy8v ICAgMzIpCi0rLy8gICAtIG90aGVyd2lzZSAobWlkLXJ1biBtYXNrIHN0cmFkZGxpbmcgYml0IDMy IHdpdGggbHNiPjApOiBubyBTSD0wIHNpbmdsZQotKy8vICAgICBpbnNuIGZpdHMsIHJldHVybiBm YWxzZSB0byBmYWxsIGJhY2sgdG8gc2NyYXRjaCthbmQuCi0rc3RhdGljIGlubGluZSBib29sIElz Q29udGlnTWFzazY0KHVpbnQ2NF90IG1hc2ssIHVuc2lnbmVkJiBsc2IsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkJiB3aWR0aCkgewotKyAgaWYgKG1hc2sgPT0g MCB8fCBtYXNrID09IH51aW50NjRfdCgwKSkgcmV0dXJuIGZhbHNlOwotKyAgdW5zaWduZWQgdHog PSAodW5zaWduZWQpX19idWlsdGluX2N0emxsKG1hc2spOwotKyAgdWludDY0X3Qgc2hpZnRlZCA9 IG1hc2sgPj4gdHo7Ci0rICBpZiAoKHNoaWZ0ZWQgJiAoc2hpZnRlZCArIDEpKSAhPSAwKSByZXR1 cm4gZmFsc2U7ICAvLyBIYXMgYSAwIGJldHdlZW4gMXMuCi0rICB3aWR0aCA9IDY0IC0gKHVuc2ln bmVkKV9fYnVpbHRpbl9jbHpsbChzaGlmdGVkKTsKLSsgIGxzYiA9IHR6OwotKyAgcmV0dXJuIHRy dWU7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZFB0cihJbW0zMiBpbW0sIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIC8vIGFuZGkuIGhhbmRsZXMgMTYtYml0IHVuc2lnbmVkIGltbWVkaWF0 ZXMgaW4gMSBpbnNuIChzZXRzIENSMCkuCi0rICAvLyBGb3Igd2lkZXIgcG9zaXRpdmUgaW1tZWRp YXRlcywgSXNDb250aWdNYXNrMzIg4oaSIHJsd2lubSAoMSBpbnNuLAotKyAgLy8gYWxzbyBzZXRz IENSMCkuIE5PVEU6IGFuZFB0ciBzaWduLWV4dGVuZHMgSW1tMzIgdG8gNjQtYml0IGJlZm9yZQot KyAgLy8gQU5EaW5nLCBzbyBjb250aWctbWFzayBpcyBvbmx5IHNhZmUgd2hlbiB0aGUgaW1tZWRp YXRlIGlzCi0rICAvLyBub24tbmVnYXRpdmUgKGhpZ2ggYml0IGNsZWFyKSDigJQgcmx3aW5tIGFs d2F5cyB6ZXJvcyB0aGUgaGlnaCAzMi4KLSsgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0u dmFsdWUpOwotKyAgaWYgKGlzX3VpbnROKHVpbW0sIDE2KSkgewotKyAgICBhc19hbmRpX3JjKGRl c3QsIGRlc3QsIHVpbW0pOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICB1bnNpZ25lZCBtYiwgbWU7 Ci0rICBpZiAoaW1tLnZhbHVlID49IDAgJiYgSXNDb250aWdNYXNrMzIodWltbSwgbWIsIG1lKSkg ewotKyAgICBhc19ybHdpbm1fcmMoZGVzdCwgZGVzdCwgMCwgbWIsIG1lKTsKLSsgICAgcmV0dXJu OwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCh1 aW50cHRyX3QoaW50cHRyX3QoaW1tLnZhbHVlKSkpLCBzY3JhdGNoKTsKLSsgIGFzX2FuZF8oZGVz dCwgZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZFB0cihJ bW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKHNyYyAhPSBk ZXN0KSB7Ci0rICAgIHhzX21yKGRlc3QsIHNyYyk7Ci0rICB9Ci0rICBhbmRQdHIoaW1tLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kNjQoSW1tNjQgaW1tLCBSZWdpc3Rl cjY0IGRlc3QpIHsKLSsgIHVpbnQ2NF90IHUgPSBpbW0udmFsdWU7Ci0rICAvLyAxNi1iaXQgdW5z aWduZWQg4oaSIGFuZGkuICgxIGluc24pLgotKyAgaWYgKHUgPD0gMHhGRkZGdSkgewotKyAgICBh c19hbmRpX3JjKGRlc3QucmVnLCBkZXN0LnJlZywgdWludDE2X3QodSkpOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rICB1bnNpZ25lZCBsc2IsIHdpZHRoOwotKyAgaWYgKElzQ29udGlnTWFzazY0KHUs IGxzYiwgd2lkdGgpKSB7Ci0rICAgIGlmIChsc2IgPT0gMCkgewotKyAgICAgIC8vIGxvdyBgd2lk dGhgIGJpdHMgc2V0OiBybGRpY2wgU0g9MCBNQj02NC13aWR0aC4KLSsgICAgICBhc19ybGRpY2xf cmMoZGVzdC5yZWcsIGRlc3QucmVnLCAwLCA2NCAtIHdpZHRoKTsKLSsgICAgICByZXR1cm47Ci0r ICAgIH0KLSsgICAgaWYgKGxzYiArIHdpZHRoID09IDY0KSB7Ci0rICAgICAgLy8gaGlnaCBgd2lk dGhgIGJpdHMgc2V0OiBybGRpY3IgU0g9MCBNRT13aWR0aC0xLgotKyAgICAgIGFzX3JsZGljcl9y YyhkZXN0LnJlZywgZGVzdC5yZWcsIDAsIHdpZHRoIC0gMSk7Ci0rICAgICAgcmV0dXJuOwotKyAg ICB9Ci0rICAgIGlmIChsc2IgKyB3aWR0aCA8PSAzMikgewotKyAgICAgIC8vIGNvbnRpZyBtYXNr IHdpdGhpbiBsb3cgMzI6IHJsd2lubSBTSD0wIHplcm9zIGJpdHMgMC4uMzEgdG9vLgotKyAgICAg IC8vIEJFIHBvc2l0aW9uczogbWIgPSAzMiAtIGxzYiAtIHdpZHRoLCBtZSA9IDMxIC0gbHNiLgot KyAgICAgIGFzX3Jsd2lubV9yYyhkZXN0LnJlZywgZGVzdC5yZWcsIDAsIDMyIC0gbHNiIC0gd2lk dGgsIDMxIC0gbHNiKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgLy8gbWlkLXJ1biBt YXNrIHN0cmFkZGxpbmcgYml0IDMyIChsc2I+MCwgbHNiK3dpZHRoPjMyLCBsc2Ird2lkdGg8NjQp OgotKyAgICAvLyBub3QgZW5jb2RhYmxlIGFzIFNIPTAgbWFzay4gRmFsbCB0aHJvdWdoIHRvIHNj cmF0Y2grYW5kLgotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIo SW1tV29yZCh1KSwgc2NyYXRjaCk7Ci0rICBhc19hbmRfKGRlc3QucmVnLCBkZXN0LnJlZywgc2Ny YXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDY0KFJlZ2lzdGVyNjQgc3Jj LCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIGFzX2FuZF8oZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMu cmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kMzIoUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KSB7Ci0rICBhc19hbmRfKGRlc3QsIGRlc3QsIHNyYyk7Ci0rICBhc19leHRz dyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kMzIoSW1tMzIg aW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICB1aW50MzJfdCB1aW1tID0gdWludDMyX3QoaW1tLnZh bHVlKTsKLSsgIGlmIChpc191aW50Tih1aW1tLCAxNikpIHsKLSsgICAgYXNfYW5kaV9yYyhkZXN0 LCBkZXN0LCB1aW1tKTsKLSsgIH0gZWxzZSB7Ci0rICAgIHVuc2lnbmVkIG1iLCBtZTsKLSsgICAg aWYgKElzQ29udGlnTWFzazMyKHVpbW0sIG1iLCBtZSkpIHsKLSsgICAgICAvLyBybHdpbm0uU0g9 MCBBTkRzIHdpdGggdGhlIGNvbnRpZ3VvdXMgbWFzazsgcmVjb3JkIGZvcm0gc2V0cyBDUjAKLSsg ICAgICAvLyB0byBtYXRjaCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIGFuZGkuIGZhc3QgcGF0aCBh Ym92ZS4KLSsgICAgICBhc19ybHdpbm1fcmMoZGVzdCwgZGVzdCwgMCwgbWIsIG1lKTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBtb3Zl MzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgICBhc19hbmRfKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwot KyAgICB9Ci0rICB9Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YW5kMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIGlmIChzcmMgIT0gZGVzdCkgewotKyAgICB4c19tcihkZXN0LCBzcmMpOwotKyAgfQot KyAgYW5kMzIoaW1tLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW5kMzIo SW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgbG9hZDMyKGRlc3QsIHNjcmF0Y2gpOwotKyAgYW5kMzIoaW1tLCBzY3JhdGNoKTsK LSsgIHN0b3JlMzIoc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFuZDMyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihzcmMsIHNjcmF0Y2gpOwotKyAgYXNfYW5kXyhkZXN0 LCBkZXN0LCBzY3JhdGNoKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpvcjY0KEltbTY0IGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICB1 aW50NjRfdCB1ID0gaW1tLnZhbHVlOwotKyAgLy8gb3JpL29yaXMgemVyby1leHRlbmQgdGhlaXIg aW1tZWRpYXRlcyBhbmQgZG9uJ3QgdG91Y2ggb3RoZXIgYml0cywgc28KLSsgIC8vIHdoZW4gaW1t IGZpdHMgaW4gdW5zaWduZWQgMzIgKGhpZ2ggMzIgPT0gMCkgdGhlIHBhaXIgaGFuZGxlcyBpdCBp bgotKyAgLy8gMS0yIGluc25zIHdpdGggbm8gc2NyYXRjaC4KLSsgIGlmICh1IDw9IDB4RkZGRkZG RkZ1KSB7Ci0rICAgIHVpbnQxNl90IGxvID0gdWludDE2X3QodSk7Ci0rICAgIHVpbnQxNl90IGhp ID0gdWludDE2X3QodSA+PiAxNik7Ci0rICAgIGlmIChoaSA9PSAwKSB7Ci0rICAgICAgYXNfb3Jp KGRlc3QucmVnLCBkZXN0LnJlZywgbG8pOwotKyAgICB9IGVsc2UgaWYgKGxvID09IDApIHsKLSsg ICAgICBhc19vcmlzKGRlc3QucmVnLCBkZXN0LnJlZywgaGkpOwotKyAgICB9IGVsc2UgewotKyAg ICAgIGFzX29yaShkZXN0LnJlZywgZGVzdC5yZWcsIGxvKTsKLSsgICAgICBhc19vcmlzKGRlc3Qu cmVnLCBkZXN0LnJlZywgaGkpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQodSksIHNjcmF0Y2gpOwotKyAg YXNfb3JfKGRlc3QucmVnLCBkZXN0LnJlZywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om9yMzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19vcl8o ZGVzdCwgZGVzdCwgc3JjKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgdWlu dDMyX3QgdWltbSA9IHVpbnQzMl90KGltbS52YWx1ZSk7Ci0rICB1aW50MTZfdCBsbyA9IHVpbW0g JiAweEZGRkY7Ci0rICB1aW50MTZfdCBoaSA9ICh1aW1tID4+IDE2KSAmIDB4RkZGRjsKLSsgIGlm IChoaSA9PSAwKSB7Ci0rICAgIGFzX29yaShkZXN0LCBkZXN0LCBsbyk7Ci0rICB9IGVsc2UgaWYg KGxvID09IDApIHsKLSsgICAgYXNfb3JpcyhkZXN0LCBkZXN0LCBoaSk7Ci0rICB9IGVsc2Ugewot KyAgICAvLyBvcmkgKyBvcmlzIHBhaXIgaGFuZGxlcyBhcmJpdHJhcnkgMzItYml0IHVuc2lnbmVk IGltbSBpbiAyIGluc25zCi0rICAgIC8vIHdpdGhvdXQgYSBzY3JhdGNoIEdQUi4gb3JpL29yaXMg YXJlIG5vbi1yZWNvcmQgZm9ybXMgKGRvbid0IHRvdWNoCi0rICAgIC8vIENSMCksIG1hdGNoaW5n IHRoZSBiZWhhdmlvciBvZiB0aGUgcHJldmlvdXMgc2NyYXRjaCtvcl8gcGF0aAotKyAgICAvLyAo b3JfIGlzIHRoZSByZWNvcmQgZm9ybSwgYnV0IHRoZSB2YWx1ZS1vbmx5IHJlc3VsdCBpcyB3aGF0 IGNhbGxlcnMKLSsgICAgLy8gb2JzZXJ2ZSB0aHJvdWdoIGRlc3QpLgotKyAgICBhc19vcmkoZGVz dCwgZGVzdCwgbG8pOwotKyAgICBhc19vcmlzKGRlc3QsIGRlc3QsIGhpKTsKLSsgIH0KLSsgIGFz X2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvcjMyKElt bTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoc3JjICE9IGRl c3QpIHsKLSsgICAgeHNfbXIoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIG9yMzIoaW1tLCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3IzMihJbW0zMiBpbW0sIGNvbnN0IEFkZHJl c3MmIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK LSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoZGVzdCwg c2NyYXRjaCk7Ci0rICBvcjMyKGltbSwgc2NyYXRjaCk7Ci0rICBzdG9yZTMyKHNjcmF0Y2gsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3I2NChJbW02NCBpbW0sIFJlZ2lz dGVyNjQgZGVzdCkgewotKyAgdWludDY0X3QgdSA9IGltbS52YWx1ZTsKLSsgIC8vIHhvcmkveG9y aXMgemVyby1leHRlbmQgdGhlaXIgaW1tZWRpYXRlczsgZm9yIHVuc2lnbmVkLTMyLWZpdCB2YWx1 ZXMKLSsgIC8vIHRoZXkgcmVwbGFjZSB0aGUgc2NyYXRjaCt4b3Igc2VxdWVuY2Ugd2l0aCAxLTIg aW5zbnMuCi0rICBpZiAodSA8PSAweEZGRkZGRkZGdSkgewotKyAgICB1aW50MTZfdCBsbyA9IHVp bnQxNl90KHUpOwotKyAgICB1aW50MTZfdCBoaSA9IHVpbnQxNl90KHUgPj4gMTYpOwotKyAgICBp ZiAoaGkgPT0gMCkgewotKyAgICAgIGFzX3hvcmkoZGVzdC5yZWcsIGRlc3QucmVnLCBsbyk7Ci0r ICAgIH0gZWxzZSBpZiAobG8gPT0gMCkgewotKyAgICAgIGFzX3hvcmlzKGRlc3QucmVnLCBkZXN0 LnJlZywgaGkpOwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX3hvcmkoZGVzdC5yZWcsIGRlc3Qu cmVnLCBsbyk7Ci0rICAgICAgYXNfeG9yaXMoZGVzdC5yZWcsIGRlc3QucmVnLCBoaSk7Ci0rICAg IH0KLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1v dmVQdHIoSW1tV29yZCh1KSwgc2NyYXRjaCk7Ci0rICBhc194b3JfKGRlc3QucmVnLCBkZXN0LnJl Zywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yUHRyKFJlZ2lzdGVy IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfb3JfKGRlc3QsIGRlc3QsIHNyYyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yUHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkg ewotKyAgdWludDMyX3QgdWltbSA9IHVpbnQzMl90KGltbS52YWx1ZSk7Ci0rICB1aW50MTZfdCBs byA9IHVpbW0gJiAweEZGRkY7Ci0rICB1aW50MTZfdCBoaSA9ICh1aW1tID4+IDE2KSAmIDB4RkZG RjsKLSsgIC8vIG9yaS9vcmlzIHplcm8tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZXMsIHNvIGZvciBu b24tbmVnYXRpdmUgSW1tMzIgKGhpZ2gKLSsgIC8vIDMyIG9mIHNpZ24tZXh0ZW5kZWQgdmFsdWUg PSAwKSB3ZSBjYW4gdXNlIG9yaStvcmlzIHRvIE9SIHRoZSBmdWxsCi0rICAvLyAzMi1iaXQgcGF0 dGVybiBpbiAxLTIgaW5zbnMuIE5lZ2F0aXZlIEltbTMyIHNpZ24tZXh0ZW5kcyB0byBzZXQgaGln aAotKyAgLy8gYml0cyAzMi4uNjMgaW4gdGhlIE9SIOKAlCB0aG9zZSBiaXRzIHdvdWxkIGJlIGxv c3Qgd2l0aCBvcmkrb3JpcyBhbG9uZS4KLSsgIGlmIChpbW0udmFsdWUgPj0gMCkgewotKyAgICBp ZiAoaGkgPT0gMCkgewotKyAgICAgIGFzX29yaShkZXN0LCBkZXN0LCBsbyk7Ci0rICAgIH0gZWxz ZSBpZiAobG8gPT0gMCkgewotKyAgICAgIGFzX29yaXMoZGVzdCwgZGVzdCwgaGkpOwotKyAgICB9 IGVsc2UgewotKyAgICAgIGFzX29yaShkZXN0LCBkZXN0LCBsbyk7Ci0rICAgICAgYXNfb3Jpcyhk ZXN0LCBkZXN0LCBoaSk7Ci0rICAgIH0KLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW50cHRyX3QoaW1t LnZhbHVlKSkpLCBzY3JhdGNoKTsKLSsgIGFzX29yXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3JQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChzcmMgIT0gZGVzdCkgewotKyAgICB4c19tcihkZXN0 LCBzcmMpOwotKyAgfQotKyAgb3JQdHIoaW1tLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6b3I2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBhc19v cl8oZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6eG9yNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYXNfeG9y XyhkZXN0LnJlZywgZGVzdC5yZWcsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjp4b3JQdHIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194b3JfKGRl c3QsIGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvclB0cihJbW0z MiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0u dmFsdWUpOwotKyAgdWludDE2X3QgbG8gPSB1aW1tICYgMHhGRkZGOwotKyAgdWludDE2X3QgaGkg PSAodWltbSA+PiAxNikgJiAweEZGRkY7Ci0rICBpZiAoaW1tLnZhbHVlID49IDApIHsKLSsgICAg aWYgKGhpID09IDApIHsKLSsgICAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxvKTsKLSsgICAgfSBl bHNlIGlmIChsbyA9PSAwKSB7Ci0rICAgICAgYXNfeG9yaXMoZGVzdCwgZGVzdCwgaGkpOwotKyAg ICB9IGVsc2UgewotKyAgICAgIGFzX3hvcmkoZGVzdCwgZGVzdCwgbG8pOwotKyAgICAgIGFzX3hv cmlzKGRlc3QsIGRlc3QsIGhpKTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKHVpbnRwdHJfdChpbnRwdHJf dChpbW0udmFsdWUpKSksIHNjcmF0Y2gpOwotKyAgYXNfeG9yXyhkZXN0LCBkZXN0LCBzY3JhdGNo KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yUHRyKEltbTMyIGltbSwgUmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgeHNf bXIoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIHhvclB0cihpbW0sIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjp4b3IzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsg IGFzX3hvcl8oZGVzdCwgZGVzdCwgc3JjKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUpOwotKyAgdWludDE2X3Qg bG8gPSB1aW1tICYgMHhGRkZGOwotKyAgdWludDE2X3QgaGkgPSAodWltbSA+PiAxNikgJiAweEZG RkY7Ci0rICBpZiAoaGkgPT0gMCkgewotKyAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxvKTsKLSsg IH0gZWxzZSBpZiAobG8gPT0gMCkgewotKyAgICBhc194b3JpcyhkZXN0LCBkZXN0LCBoaSk7Ci0r ICB9IGVsc2UgewotKyAgICAvLyB4b3JpICsgeG9yaXMgcGFpciDigJQgMiBpbnNucywgbm8gc2Ny YXRjaCBHUFIuCi0rICAgIGFzX3hvcmkoZGVzdCwgZGVzdCwgbG8pOwotKyAgICBhc194b3Jpcyhk ZXN0LCBkZXN0LCBoaSk7Ci0rICB9Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGlmIChzcmMgIT0gZGVzdCkgewotKyAgICB4c19tcihkZXN0LCBzcmMp OwotKyAgfQotKyAgeG9yMzIoaW1tLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6eG9yMzIoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKGRlc3QsIHNjcmF0Y2gpOwotKyAgeG9yMzIoaW1tLCBz Y3JhdGNoKTsKLSsgIHN0b3JlMzIoc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnhvcjMyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihzcmMsIHNjcmF0Y2gpOwotKyAgeG9y MzIoc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFN3YXAgaW5zdHJ1Y3Rp b25zCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0ZVN3YXAxNlNpZ25FeHRlbmQoUmVnaXN0 ZXIgcmVnKSB7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIGJyaCBieXRlLXJldmVy c2VzIGV2ZXJ5IGhhbGZ3b3JkIGluIHJlZzsgZXh0c2gga2VlcHMganVzdCB0aGUKLSsgICAgLy8g bG93IGhhbGZ3b3JkJ3MgYnl0ZS1yZXZlcnNlZCB2YWx1ZSwgc2lnbi1leHRlbmRlZCB0byA2NCBi aXRzLgotKyAgICBhc19icmgocmVnLCByZWcpOwotKyAgICBhc19leHRzaChyZWcsIHJlZyk7Ci0r ICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIFBPV0VSOC85OiByb3RhdGUtYW5kLW1hc2sgc3ludGhl c2lzLiBTd2FwIGJ5dGVzIGluIGxvdyBoYWxmd29yZCB2aWEKLSsgIC8vIChyZWc8PDgpJjB4RkYw MCB8IChyZWc+PjgpJjB4RkYsIHRoZW4gc2lnbi1leHRlbmQuCi0rICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgYXNfcmx3aW5tKHNjcmF0Y2gsIHJlZywgOCwgMTYsIDIzKTsgIC8vIHNjcmF0 Y2ggPSAocmVnPDw4KSAmIDB4RkYwMAotKyAgYXNfcmx3aW5tKHJlZywgcmVnLCAyNCwgMjQsIDMx KTsgICAgIC8vIHJlZyA9IChyZWc+PjgpICYgMHhGRgotKyAgYXNfb3JfKHJlZywgcmVnLCBzY3Jh dGNoKTsKLSsgIGFzX2V4dHNoKHJlZywgcmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Ynl0ZVN3YXAxNlplcm9FeHRlbmQoUmVnaXN0ZXIgcmVnKSB7Ci0rICBpZiAoSGFzUE9XRVIx MCgpKSB7Ci0rICAgIC8vIGJyaCBieXRlLXJldmVyc2VzIGV2ZXJ5IGhhbGZ3b3JkOyBybGRpY2wg d2l0aCBzaD0wLG1iPTQ4IHplcm9lcwotKyAgICAvLyB0aGUgdXBwZXIgNDggYml0cyDigJQgbm8g Q1IwIHNpZGUgZWZmZWN0ICh2cyBhbmRpLikuCi0rICAgIGFzX2JyaChyZWcsIHJlZyk7Ci0rICAg IGFzX3JsZGljbChyZWcsIHJlZywgMCwgNDgpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgLy8gQm90aCBybHdpbm0gZm9ybXMgemVyby1leHRlbmQg dGhlIDY0LWJpdCBkZXN0aW5hdGlvbiBwZXIgSVNBIHYzLjBCCi0rICAvLyAobWFzayBNID0gTUFT SyhNQiszMiwgTUUrMzIpIGlzIDAgYWJvdmUgYml0IDMxKSwgc28gYWZ0ZXIgdGhlIE9SIHRoZQot KyAgLy8gdXBwZXIgNDggYml0cyBhcmUgYWxyZWFkeSB6ZXJvIOKAlCBubyBmb2xsb3ctdXAgY2xl YXJpbmcgbmVlZGVkLgotKyAgYXNfcmx3aW5tKHNjcmF0Y2gsIHJlZywgOCwgMTYsIDIzKTsKLSsg IGFzX3Jsd2lubShyZWcsIHJlZywgMjQsIDI0LCAzMSk7Ci0rICBhc19vcl8ocmVnLCByZWcsIHNj cmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpieXRlU3dhcDMyKFJlZ2lzdGVy IHJlZykgewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyBicncgYnl0ZS1yZXZlcnNl cyBib3RoIDMyLWJpdCBoYWx2ZXM7IGV4dHN3IGRyb3BzIHRoZSB1cHBlciBoYWxmCi0rICAgIC8v IGFuZCBzaWduLWV4dGVuZHMgdGhlIGJ5dGUtcmV2ZXJzZWQgbG93IHdvcmQgdG8gNjQgYml0cy4K LSsgICAgYXNfYnJ3KHJlZywgcmVnKTsKLSsgICAgYXNfZXh0c3cocmVnLCByZWcpOwotKyAgICBy ZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjgvOTogcm90YXRlLXdpdGgtaW5zZXJ0IHN5bnRoZXNp cyAoNCBpbnNucykuCi0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgLy8gc2NyYXRjaCA9 IHJvdGF0ZSByZWcgbGVmdCA4LCBtYXNrIGJ5dGVzIDAsMwotKyAgYXNfcmx3aW5tKHNjcmF0Y2gs IHJlZywgOCwgMCwgMzEpOyAgICAvLyByb3RsMzIgYnkgOAotKyAgYXNfcmx3aW1pKHNjcmF0Y2gs IHJlZywgMjQsIDAsIDcpOyAgICAvLyBpbnNlcnQgYnl0ZSAwCi0rICBhc19ybHdpbWkoc2NyYXRj aCwgcmVnLCAyNCwgMTYsIDIzKTsgIC8vIGluc2VydCBieXRlIDIKLSsgIC8vIFNpZ24tZXh0ZW5k IHRvIDY0IGJpdHMgKGFzIDMyLWJpdCB2YWx1ZSkuCi0rICBhc19leHRzdyhyZWcsIHNjcmF0Y2gp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpieXRlU3dhcDY0KFJlZ2lzdGVyNjQgcmVn NjQpIHsKLSsgIGlmIChIYXNQT1dFUjEwKCkpIHsKLSsgICAgLy8gMSBpbnNuLCBubyBGUFIgcm91 bmQtdHJpcC4KLSsgICAgYXNfYnJkKHJlZzY0LnJlZywgcmVnNjQucmVnKTsKLSsgIH0gZWxzZSBp ZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgYXNfbXR2c3JkKFNjcmF0Y2hEb3VibGVSZWcsIHJlZzY0 LnJlZyk7Ci0rICAgIGFzX3h4YnJkKFNjcmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcp OwotKyAgICBhc19tZnZzcmQocmVnNjQucmVnLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIH0gZWxz ZSB7Ci0rICAgIC8vIFBPV0VSODogYnl0ZS1zd2FwIHZpYSBzdGFjayB1c2luZyBzdHdicnggKHdv cmQgYnl0ZS1yZXZlcnNlIHN0b3JlKS4KLSsgICAgLy8gc3R3YnJ4IFJTLFJBLFJCIHN0b3JlcyBS UyBieXRlLXJldmVyc2VkIGF0IFJBK1JCLgotKyAgICAvLyBGb3IgNjQtYml0IHN3YXA6IHN0b3Jl IGhpZ2ggd29yZCByZXZlcnNlZCBhdCBhZGRyKzAsIGxvdyB3b3JkIGF0IGFkZHIrNC4KLSsgICAg UmVnaXN0ZXIgciA9IHJlZzY0LnJlZzsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGFz X3N0ZHUoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIC0xNik7Ci0rICAgIC8vIFN0b3JlIGxv dyAzMiBiaXRzIGJ5dGUtcmV2ZXJzZWQgYXQgU1ArMTIuCi0rICAgIGFzX2FkZGkodG1wLCBTdGFj a1BvaW50ZXIsIDEyKTsKLSsgICAgYXNfc3R3YnJ4KHIsIHIwLCB0bXApOyAgLy8gcjAgYXMgUkEg PSAwLCBzbyBhZGRyID0gdG1wCi0rICAgIC8vIFN0b3JlIGhpZ2ggMzIgYml0cyBieXRlLXJldmVy c2VkIGF0IFNQKzguCi0rICAgIHhfc3JkaShyLCByLCAzMik7Ci0rICAgIGFzX2FkZGkodG1wLCBT dGFja1BvaW50ZXIsIDgpOwotKyAgICBhc19zdHdicngociwgcjAsIHRtcCk7ICAvLyBhZGRyID0g dG1wCi0rICAgIC8vIExvYWQgcmV2ZXJzZWQgNjQtYml0IHZhbHVlIGZyb20gU1ArOC4KLSsgICAg YXNfbGQociwgU3RhY2tQb2ludGVyLCA4KTsKLSsgICAgYXNfYWRkaShTdGFja1BvaW50ZXIsIFN0 YWNrUG9pbnRlciwgMTYpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBBcml0aG1ldGlj IGZ1bmN0aW9ucwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZFB0cihSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2FkZChkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0r ICBpbnQzMl90IHZhbCA9IGltbS52YWx1ZTsKLSsgIGlmIChpc19pbnROKHZhbCwgMTYpKSB7Ci0r ICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgdmFsKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYg KEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyBJbW0zMiBhbHdheXMgZml0cyAzNC1iaXQgc2lnbmVk OyBwYWRkaSBkb2VzIGRlc3QgPSBkZXN0ICsgaW1tIGluIG9uZQotKyAgICAvLyBwcmVmaXhlZCBp bnN0cnVjdGlvbiB3aXRoIG5vIHNjcmF0Y2guCi0rICAgIGFzX3BhZGRpKGRlc3QsIGRlc3QsIGlu dDY0X3QodmFsKSwgLypSPSovZmFsc2UpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKGludDY0X3QodmFsKSksIHNjcmF0 Y2gpOwotKyAgYXNfYWRkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjphZGRQdHIoSW1tV29yZCBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChp c19pbnROKGludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7Ci0rICAgIGFzX2FkZGkoZGVzdCwgZGVz dCwgaW50MTZfdChpbW0udmFsdWUpKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYgKEhhc1BP V0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClpbW0udmFsdWUsIDM0KSkgewotKyAgICBhc19w YWRkaShkZXN0LCBkZXN0LCAoaW50NjRfdClpbW0udmFsdWUsIC8qUj0qL2ZhbHNlKTsKLSsgICAg cmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoaW1t LCBzY3JhdGNoKTsKLSsgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YWRkNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkg ewotKyAgYXNfYWRkKGRlc3QucmVnLCBkZXN0LnJlZywgc3JjLnJlZyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmFkZDY0KEltbTMyIGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBh ZGRQdHIoSW1tMzIoaW1tLnZhbHVlKSwgZGVzdC5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphZGQ2NChJbW02NCBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgaWYgKGlzX2lu dE4oaW50NjRfdChpbW0udmFsdWUpLCAxNikpIHsKLSsgICAgYXNfYWRkaShkZXN0LnJlZywgZGVz dC5yZWcsIGludDE2X3QoaW1tLnZhbHVlKSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChI YXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50NjRfdClpbW0udmFsdWUsIDM0KSkgewotKyAgICBh c19wYWRkaShkZXN0LnJlZywgZGVzdC5yZWcsIChpbnQ2NF90KWltbS52YWx1ZSwgLypSPSovZmFs c2UpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg TU9aX0FTU0VSVChkZXN0LnJlZyAhPSBzY3JhdGNoKTsKLSsgIG1vdmVQdHIoSW1tV29yZChpbW0u dmFsdWUpLCBzY3JhdGNoKTsKLSsgIGFzX2FkZChkZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihSZWdpc3RlciBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGFzX2FkZChkZXN0LCBkZXN0LCBzcmMpOwotKyAgYXNfZXh0c3coZGVz dCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZDMyKEltbTMyIGltbSwg UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKGlzX2ludE4oaW1tLnZhbHVlLCAxNikpIHsKLSsgICAg YXNfYWRkaShkZXN0LCBkZXN0LCBpbW0udmFsdWUpOwotKyAgfSBlbHNlIHsKLSsgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgYXNf YWRkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwotKyAgfQotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBtb3ZlMzIoc3JjLCBkZXN0KTsKLSsgIGFkZDMyKGlt bSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZDMyKEltbTMyIGltbSwg Y29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWQzMihkZXN0LCBzY3JhdGNoKTsKLSsgIGFkZDMyKGltbSwgc2NyYXRjaCk7Ci0rICBzdG9yZTMy KHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihjb25z dCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKLSsgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3Jh dGNoKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjphZGRQdHIoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihkZXN0LCBzY3JhdGNoKTsKLSsgIGFkZFB0cihp bW0sIHNjcmF0Y2gpOwotKyAgc3RvcmVQdHIoc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmFkZFB0cihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKHNyYywgc2NyYXRjaCk7 Ci0rICBhZGRQdHIoc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFkZERvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBh c19mYWRkKGRlc3QsIGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFk ZEZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNf ZmFkZHMoZGVzdCwgZGVzdCwgc3JjKTsKLSt9Ci0rCi0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxl cjo6c3ViMzJGcm9tU3RhY2tQdHJXaXRoUGF0Y2goUmVnaXN0ZXIgZGVzdCkgewotKyAgQ29kZU9m ZnNldCBvZmZzZXQgPSBDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7Ci0rICBlbWl0TG9hZDY0 U3RhbnphKGRlc3QsIDApOwotKyAgYXNfc3ViZihkZXN0LCBkZXN0LCBTdGFja1BvaW50ZXIpOwot KyAgcmV0dXJuIG9mZnNldDsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hTdWIz MkZyb21TdGFja1B0cihDb2RlT2Zmc2V0IG9mZnNldCwgSW1tMzIgaW1tKSB7Ci0rICBJbnN0cnVj dGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopZWRpdFNyYyhCdWZmZXJPZmZzZXQob2Zmc2V0Lm9m ZnNldCgpKSk7Ci0rICBVcGRhdGVMb2FkNjRWYWx1ZShpbnN0LCB1aW50NjRfdChpbnQ2NF90KGlt bS52YWx1ZSkpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKFJlZ2lzdGVy IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfc3ViZihkZXN0LCBzcmMsIGRlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICBpZiAoaXNfaW50TigtaW50NjRfdChpbW0udmFsdWUpLCAxNikpIHsKLSsgICAgYXNf YWRkaShkZXN0LCBkZXN0LCAtaW1tLnZhbHVlKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYg KEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyAtSW1tMzIgZml0cyAzNC1iaXQgc2lnbmVkICh3b3Jz dCBjYXNlIC1JTlQzMl9NSU4gPSArMl4zMSwgd2VsbCB3aXRoaW4KLSsgICAgLy8gwrEyXjMzKS4g cGFkZGkgd2l0aCB0aGUgbmVnYXRlZCBpbW1lZGlhdGUgZG9lcyB0aGUgc3VidHJhY3QgaW4gMSBw cmVmaXhlZAotKyAgICAvLyBpbnNuIHdpdGggbm8gc2NyYXRjaC4KLSsgICAgYXNfcGFkZGkoZGVz dCwgZGVzdCwgLWludDY0X3QoaW1tLnZhbHVlKSwgLypSPSovZmFsc2UpOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKGlu dDY0X3QoaW1tLnZhbHVlKSksIHNjcmF0Y2gpOwotKyAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViNjQoUmVnaXN0ZXI2NCBzcmMs IFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYXNfc3ViZihkZXN0LnJlZywgc3JjLnJlZywgZGVzdC5y ZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWI2NChJbW02NCBpbW0sIFJlZ2lz dGVyNjQgZGVzdCkgewotKyAgaWYgKGlzX2ludE4oLWludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7 Ci0rICAgIGFzX2FkZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbnQxNl90KC1pbnQ2NF90KGltbS52 YWx1ZSkpKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19p bnROKC0oaW50NjRfdClpbW0udmFsdWUsIDM0KSkgewotKyAgICBhc19wYWRkaShkZXN0LnJlZywg ZGVzdC5yZWcsIC0oaW50NjRfdClpbW0udmFsdWUsIC8qUj0qL2ZhbHNlKTsKLSsgICAgcmV0dXJu OwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIE1PWl9BU1NFUlQoZGVzdC5y ZWcgIT0gc2NyYXRjaCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7 Ci0rICBhc19zdWJmKGRlc3QucmVnLCBzY3JhdGNoLCBkZXN0LnJlZyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnN1YjMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAg YXNfc3ViZihkZXN0LCBzcmMsIGRlc3QpOwotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkg ewotKyAgaWYgKGlzX2ludE4oLWludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7Ci0rICAgIGFzX2Fk ZGkoZGVzdCwgZGVzdCwgLWltbS52YWx1ZSk7Ci0rICB9IGVsc2UgewotKyAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOwotKyAgICBhc19zdWJm KGRlc3QsIHNjcmF0Y2gsIGRlc3QpOwotKyAgfQotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVn aXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihzcmMs IHNjcmF0Y2gpOwotKyAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2V4dHN3 KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJQdHIoUmVnaXN0 ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgbG9hZFB0cihkZXN0LCBzY3JhdGNoKTsKLSsgIGFzX3N1YmYoc2NyYXRjaCwgc3JjLCBz Y3JhdGNoKTsKLSsgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpzdWJQdHIoY29uc3QgQWRkcmVzcyYgYWRkciwgUmVnaXN0ZXIgZGVzdCkgewot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIoYWRkciwgc2NyYXRjaCk7Ci0r ICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpzdWJEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgYXNfZnN1YihkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWJGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IGFzX2ZzdWJzKGRlc3QsIGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om11bDY0KGNvbnN0IFJlZ2lzdGVyNjQmIHJocywgY29uc3QgUmVnaXN0ZXI2NCYgc3JjRGVzdCkg ewotKyAgYXNfbXVsbGQoc3JjRGVzdC5yZWcsIHNyY0Rlc3QucmVnLCByaHMucmVnKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsNjQoSW1tNjQgaW1tLCBjb25zdCBSZWdpc3RlcjY0 JiBkZXN0KSB7Ci0rICBpZiAoaXNfaW50TihpbnQ2NF90KGltbS52YWx1ZSksIDE2KSkgewotKyAg ICBhc19tdWxsaShkZXN0LnJlZywgZGVzdC5yZWcsIGludDE2X3QoaW1tLnZhbHVlKSk7Ci0rICB9 IGVsc2UgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQo ZGVzdC5yZWcgIT0gc2NyYXRjaCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChpbW0udmFsdWUpLCBz Y3JhdGNoKTsKLSsgICAgYXNfbXVsbGQoZGVzdC5yZWcsIGRlc3QucmVnLCBzY3JhdGNoKTsKLSsg IH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsNjQoSW1tNjQgaW1tLCBjb25zdCBS ZWdpc3RlcjY0JiBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lz dGVyIHRlbXApIHsKLSsgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsK LSsgIG11bDY0KGltbSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0 KGNvbnN0IFJlZ2lzdGVyNjQmIHNyYywgY29uc3QgUmVnaXN0ZXI2NCYgZGVzdCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pfQVNTRVJU KHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICBhc19tdWxsZChkZXN0LnJlZywgZGVz dC5yZWcsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxQdHIoUmVn aXN0ZXIgcmhzLCBSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICBhc19tdWxsZChzcmNEZXN0LCBzcmNE ZXN0LCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxQdHIoSW1tV29yZCBy aHMsIFJlZ2lzdGVyIHNyY0Rlc3QpIHsKLSsgIGlmIChpc19pbnROKGludDY0X3QocmhzLnZhbHVl KSwgMTYpKSB7Ci0rICAgIGFzX211bGxpKHNyY0Rlc3QsIHNyY0Rlc3QsIGludDE2X3QocmhzLnZh bHVlKSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICBNT1pfQVNTRVJUKHNyY0Rlc3QgIT0gc2NyYXRjaCk7Ci0rICBtb3ZlUHRyKHJocywgc2NyYXRj aCk7Ci0rICBtdWxQdHIoc2NyYXRjaCwgc3JjRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om11bEJ5MyhSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIG11bGxp IGlzIHRoZSAxNi1iaXQtaW1tZWRpYXRlIGZvcm0gb2YgbXVsbGQuIDEgaW5zbiwgbm8gc2NyYXRj aCwKLSsgIC8vIHNyYz09ZGVzdCBhbGlhc2luZyBzYWZlIChSQSByZWFkIGJlZm9yZSBSVCB3cml0 ZSkuCi0rICBhc19tdWxsaShkZXN0LCBzcmMsIDMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjptdWwzMihSZWdpc3RlciByaHMsIFJlZ2lzdGVyIHNyY0Rlc3QpIHsKLSsgIGFzX211bGx3 KHNyY0Rlc3QsIHNyY0Rlc3QsIHJocyk7Ci0rICBhc19leHRzdyhzcmNEZXN0LCBzcmNEZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBz cmNEZXN0KSB7Ci0rICBpZiAoaXNfaW50TihpbW0udmFsdWUsIDE2KSkgewotKyAgICBhc19tdWxs aShzcmNEZXN0LCBzcmNEZXN0LCBpbW0udmFsdWUpOwotKyAgfSBlbHNlIHsKLSsgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgYXNf bXVsbHcoc3JjRGVzdCwgc3JjRGVzdCwgc2NyYXRjaCk7Ci0rICB9Ci0rICBhc19leHRzdyhzcmNE ZXN0LCBzcmNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsSGlnaFVuc2ln bmVkMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBNT1pfQVNTRVJUKHNyYyAhPSBzY3JhdGNoKTsKLSsgIG1v dmUzMihpbW0sIHNjcmF0Y2gpOwotKyAgYXNfbXVsaHd1KGRlc3QsIHNyYywgc2NyYXRjaCk7Ci0r ICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVs RmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19m bXVscyhkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxE b3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZm11 bChkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxEb3Vi bGVQdHIoSW1tUHRyIGltbSwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOwotKyAgYXNfbGZkKFNjcmF0Y2hEb3VibGVS ZWcsIHNjcmF0Y2gsIDApOwotKyAgYXNfZm11bChkZXN0LCBkZXN0LCBTY3JhdGNoRG91YmxlUmVn KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6aW5jNjQoQWJzb2x1dGVBZGRyZXNzIGRl c3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJl Z2lzdGVyIGFkZHJSZWcgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQodWlu dHB0cl90KGRlc3QuYWRkcikpLCBhZGRyUmVnKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSBTZWNv bmRTY3JhdGNoUmVnOwotKyAgYXNfbGQoc2NyYXRjaCwgYWRkclJlZywgMCk7Ci0rICBhc19hZGRp KHNjcmF0Y2gsIHNjcmF0Y2gsIDEpOwotKyAgYXNfc3RkKHNjcmF0Y2gsIGFkZHJSZWcsIDApOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2ZkaXZzKGRlc3QsIGRlc3QsIHNyYyk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRpdkRvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19mZGl2KGRlc3QsIGRlc3QsIHNyYyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnF1b3RpZW50MzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGlzVW5zaWduZWQpIHsKLSsgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgIGFzX2Rpdnd1KGRl c3QsIGxocywgcmhzKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX2RpdncoZGVzdCwgbGhzLCByaHMp OwotKyAgfQotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnF1b3RpZW50NjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRl c3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpIHsK LSsgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgIGFzX2RpdmR1KGRlc3QsIGxocywgcmhzKTsKLSsg IH0gZWxzZSB7Ci0rICAgIGFzX2RpdmQoZGVzdCwgbGhzLCByaHMpOwotKyAgfQotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyZW1haW5kZXIzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJo cywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s IGlzVW5zaWduZWQpIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBpZiAoaXNVbnNpZ25l ZCkgewotKyAgICAgIGFzX21vZHV3KGRlc3QsIGxocywgcmhzKTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICBhc19tb2RzdyhkZXN0LCBsaHMsIHJocyk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAg ICBhc19kaXZ3dShzY3JhdGNoLCBsaHMsIHJocyk7Ci0rICAgICAgYXNfbXVsbHcoc2NyYXRjaCwg c2NyYXRjaCwgcmhzKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19kaXZ3KHNjcmF0Y2gsIGxo cywgcmhzKTsKLSsgICAgICBhc19tdWxsdyhzY3JhdGNoLCBzY3JhdGNoLCByaHMpOwotKyAgICB9 Ci0rICAgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgbGhzKTsKLSsgIH0KLSsgIGFzX2V4dHN3KGRl c3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZW1haW5kZXI2NChSZWdp c3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkg ewotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGFzX21vZHVkKGRlc3QsIGxocywgcmhz KTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19tb2RzZChkZXN0LCBsaHMsIHJocyk7Ci0rICAg IH0KLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgaWYg KGlzVW5zaWduZWQpIHsKLSsgICAgICBhc19kaXZkdShzY3JhdGNoLCBsaHMsIHJocyk7Ci0rICAg ICAgYXNfbXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwgcmhzKTsKLSsgICAgfSBlbHNlIHsKLSsgICAg ICBhc19kaXZkKHNjcmF0Y2gsIGxocywgcmhzKTsKLSsgICAgICBhc19tdWxsZChzY3JhdGNoLCBz Y3JhdGNoLCByaHMpOwotKyAgICB9Ci0rICAgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgbGhzKTsK LSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnNjQoUmVnaXN0ZXI2NCByZWcp IHsgYXNfbmVnKHJlZy5yZWcsIHJlZy5yZWcpOyB9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bmVnUHRyKFJlZ2lzdGVyIHJlZykgeyBhc19uZWcocmVnLCByZWcpOyB9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bmVnMzIoUmVnaXN0ZXIgcmVnKSB7Ci0rICBhc19uZWcocmVnLCByZWcpOwot KyAgYXNfZXh0c3cocmVnLCByZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdh dGVEb3VibGUoRmxvYXRSZWdpc3RlciByZWcpIHsgYXNfZm5lZyhyZWcsIHJlZyk7IH0KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdhdGVGbG9hdChGbG9hdFJlZ2lzdGVyIHJlZykgeyBhc19m bmVnKHJlZywgcmVnKTsgfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFiczMyKFJlZ2lzdGVy IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFz X3NyYXdpKHNjcmF0Y2gsIHNyYywgMzEpOwotKyAgYXNfeG9yXyhkZXN0LCBzcmMsIHNjcmF0Y2gp OwotKyAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNGbG9hdDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2ZhYnMoZGVzdCwgc3JjKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2ZhYnMoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3FydEZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgYXNfZnNxcnRzKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnNxcnREb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgYXNfZnNxcnQoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bWluMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsK LSsgIGFzX2NtcHcobGhzLCByaHMpOwotKyAgLy8gaXNlbCBydCwgcmEsIHJiLCBjb25kOiBydCA9 IChDUltjb25kXSBzZXQpID8gcmEgOiByYgotKyAgLy8gTGVzc1RoYW4gc2V0IGlmIGxocyA8IHJo cyAoc2lnbmVkKSwgc28gcGljayBsaHM7IGVsc2UgcmhzID0gbWluLgotKyAgYXNfaXNlbChkZXN0 LCBsaHMsIHJocywgTGVzc1RoYW4sIGNyMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1pbjMyKFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZTMyKHJocywgc2NyYXRjaCk7Ci0rICBtaW4zMihs aHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXgzMihS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfY21wdyhs aHMsIHJocyk7Ci0rICAvLyBHVCBzZXQgaWYgbGhzID4gcmhzIChzaWduZWQpLCBzbyBwaWNrIGxo czsgZWxzZSByaHMgPSBtYXguCi0rICBhc19pc2VsKGRlc3QsIGxocywgcmhzLCBHcmVhdGVyVGhh biwgY3IwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4MzIoUmVnaXN0ZXIgbGhz LCBJbW0zMiByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICBtb3ZlMzIocmhzLCBzY3JhdGNoKTsKLSsgIG1heDMyKGxocywgc2NyYXRjaCwgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pblB0cihSZWdpc3RlciBsaHMsIFJlZ2lz dGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfY21wZChsaHMsIHJocyk7Ci0rICBhc19p c2VsKGRlc3QsIGxocywgcmhzLCBMZXNzVGhhbiwgY3IwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWluUHRyKFJlZ2lzdGVyIGxocywgSW1tV29yZCByaHMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKHJocywgc2NyYXRjaCk7 Ci0rICBtaW5QdHIobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bWF4UHRyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0KSB7 Ci0rICBhc19jbXBkKGxocywgcmhzKTsKLSsgIGFzX2lzZWwoZGVzdCwgbGhzLCByaHMsIEdyZWF0 ZXJUaGFuLCBjcjApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhQdHIoUmVnaXN0 ZXIgbGhzLCBJbW1Xb3JkIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgIG1vdmVQdHIocmhzLCBzY3JhdGNoKTsKLSsgIG1heFB0cihsaHMsIHNjcmF0 Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyKEZsb2F0 UmVnaXN0ZXIgb3RoZXIsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgaGFuZGxlTmFOKSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsK LSsgICAgLy8geHNtaW5qZHAgbWF0Y2hlcyBFQ01BLTI2MiBNYXRoLm1pbiBzZW1hbnRpY3MgZm9y IMKxMCBhbmQgTmFOLgotKyAgICAvLyBGbG9hdDMyIHZhbHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJs ZXMgaW4gUFBDIEZQUnM7IHRoZSBKLWZvcm0KLSsgICAgLy8gcmVzdWx0IGlzIGJpdC1leGFjdCBm b3IgdmFsdWVzIHJlcHJlc2VudGFibGUgaW4gZmxvYXQzMiAod2hpY2gKLSsgICAgLy8gaW5jbHVk ZXMgZXZlcnkgTmFOL8KxMC/CsUluZiBjb3JuZXIgY2FzZSBKUyBvYnNlcnZlcykuIDEgaW5zbi4K LSsgICAgYXNfeHNtaW5qZHAoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rICBMYWJlbCBkb25lLCBuYW4sIGVxdWFsOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwg b3RoZXIpOwotKyAgaWYgKGhhbmRsZU5hTikgewotKyAgICBtYV9iKEFzc2VtYmxlcjo6RG91Ymxl VW5vcmRlcmVkLCAmbmFuKTsKLSsgIH0KLSsgIC8vIEhhbmRsZSArMCB2cyAtMC4KLSsgIG1hX2Io QXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgJmVxdWFsKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3Vi bGVMZXNzVGhhbiwgJmRvbmUpOwotKyAgYXNfZm1yKHNyY0Rlc3QsIG90aGVyKTsKLSsgIGp1bXAo JmRvbmUpOwotKwotKyAgYmluZCgmZXF1YWwpOwotKyAgLy8gQm90aCBvcGVyYW5kcyBhcmUgZXF1 YWwuIENoZWNrIGlmIHRoZXkncmUgemVyby4KLSsgIGxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwg U2NyYXRjaEZsb2F0MzJSZWcpOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwgU2NyYXRjaEZsb2F0MzJS ZWcpOwotKyAgLy8gSWYgbm90IHplcm8sIHRoZXkncmUgaWRlbnRpY2FsOyBrZWVwIHNyY0Rlc3Qu Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsICZkb25lKTsKLSsgIC8vIEJvdGgg YXJlIHNvbWUgY29tYmluYXRpb24gb2YgKzAvLTAuIEZvciBtaW4sIHJlc3VsdCBzaG91bGQgYmUg LTAKLSsgIC8vIGlmIGVpdGhlciBpcyAtMDogLSgoLXNyY0Rlc3QpIC0gb3RoZXIpIGdpdmVzIC0w IHdoZW4gZWl0aGVyIGlzIC0wLgotKyAgYXNfZm5lZyhTY3JhdGNoRmxvYXQzMlJlZywgc3JjRGVz dCk7Ci0rICBhc19mc3VicyhTY3JhdGNoRmxvYXQzMlJlZywgU2NyYXRjaEZsb2F0MzJSZWcsIG90 aGVyKTsKLSsgIGFzX2ZuZWcoc3JjRGVzdCwgU2NyYXRjaEZsb2F0MzJSZWcpOwotKyAganVtcCgm ZG9uZSk7Ci0rCi0rICBpZiAoaGFuZGxlTmFOKSB7Ci0rICAgIGJpbmQoJm5hbik7Ci0rICAgIGFz X2ZhZGRzKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgIH0KLSsgIGJpbmQoJmRvbmUpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5Eb3VibGUoRmxvYXRSZWdpc3RlciBvdGhl ciwgRmxvYXRSZWdpc3RlciBzcmNEZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIGhhbmRsZU5hTikgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIHhzbWlu amRwIG1hdGNoZXMgRUNNQS0yNjIgTWF0aC5taW4gc2VtYW50aWNzIGV4YWN0bHkgKGNvdmVycwot KyAgICAvLyAxOSBjb3JuZXIgY2FzZXMgaW5jbHVkaW5nIMKxMCBhbmQgTmFOKS4gMSBpbnNuIHZz IH4xMiBmb3IgdGhlCi0rICAgIC8vIGZjbXB1L2JyYW5jaCBmYWxsYmFjay4gUE9XRVI4IGZhbGxi YWNrIGZvbGxvd3MuCi0rICAgIGFzX3hzbWluamRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsK LSsgICAgcmV0dXJuOwotKyAgfQotKyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKLSsgIGFzX2Zj bXB1KHNyY0Rlc3QsIG90aGVyKTsKLSsgIGlmIChoYW5kbGVOYU4pIHsKLSsgICAgbWFfYihBc3Nl bWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgJm5hbik7Ci0rICB9Ci0rICAvLyBIYW5kbGUgKzAgdnMg LTAuCi0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlRXF1YWwsICZlcXVhbCk7Ci0rICBtYV9iKEFz c2VtYmxlcjo6RG91YmxlTGVzc1RoYW4sICZkb25lKTsKLSsgIGFzX2ZtcihzcmNEZXN0LCBvdGhl cik7Ci0rICBqdW1wKCZkb25lKTsKLSsKLSsgIGJpbmQoJmVxdWFsKTsKLSsgIGxvYWRDb25zdGFu dERvdWJsZSgwLjAsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwgU2Ny YXRjaERvdWJsZVJlZyk7Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsICZkb25l KTsKLSsgIC8vIC0oKC1zcmNEZXN0KSAtIG90aGVyKSBnaXZlcyAtMCB3aGVuIGVpdGhlciBpcyAt MC4KLSsgIGFzX2ZuZWcoU2NyYXRjaERvdWJsZVJlZywgc3JjRGVzdCk7Ci0rICBhc19mc3ViKFNj cmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcsIG90aGVyKTsKLSsgIGFzX2ZuZWcoc3Jj RGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBqdW1wKCZkb25lKTsKLSsKLSsgIGlmIChoYW5k bGVOYU4pIHsKLSsgICAgYmluZCgmbmFuKTsKLSsgICAgYXNfZmFkZChzcmNEZXN0LCBzcmNEZXN0 LCBvdGhlcik7Ci0rICB9Ci0rICBiaW5kKCZkb25lKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bWF4RmxvYXQzMihGbG9hdFJlZ2lzdGVyIG90aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rl c3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZU5hTikgewot KyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIFNlZSBtaW5GbG9hdDMyIGFib3ZlIGZvciB0 aGUgZmxvYXQzMiDihpQgSi1mb3JtIGJpdC1leGFjdG5lc3Mgbm90ZS4KLSsgICAgYXNfeHNtYXhq ZHAoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBMYWJl bCBkb25lLCBuYW4sIGVxdWFsOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwgb3RoZXIpOwotKyAgaWYg KGhhbmRsZU5hTikgewotKyAgICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCAmbmFu KTsKLSsgIH0KLSsgIC8vIEhhbmRsZSArMCB2cyAtMC4KLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3Vi bGVFcXVhbCwgJmVxdWFsKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwg JmRvbmUpOwotKyAgYXNfZm1yKHNyY0Rlc3QsIG90aGVyKTsKLSsgIGp1bXAoJmRvbmUpOwotKwot KyAgYmluZCgmZXF1YWwpOwotKyAgbG9hZENvbnN0YW50RmxvYXQzMigwLjBmLCBTY3JhdGNoRmxv YXQzMlJlZyk7Ci0rICBhc19mY21wdShzcmNEZXN0LCBTY3JhdGNoRmxvYXQzMlJlZyk7Ci0rICBt YV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsICZkb25lKTsKLSsgIC8vIC0wICsgLTAgPSAt MCBhbmQgLTAgKyAwID0gKzAuCi0rICBhc19mYWRkcyhzcmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7 Ci0rICBqdW1wKCZkb25lKTsKLSsKLSsgIGlmIChoYW5kbGVOYU4pIHsKLSsgICAgYmluZCgmbmFu KTsKLSsgICAgYXNfZmFkZHMoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAgfQotKyAgYmlu ZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heERvdWJsZShGbG9hdFJl Z2lzdGVyIG90aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgaGFuZGxlTmFOKSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsg ICAgLy8gU2VlIG1pbkRvdWJsZSBhYm92ZSBmb3IgdGhlIEotZm9ybSBzZW1hbnRpY3Mgbm90ZS4K LSsgICAgYXNfeHNtYXhqZHAoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rICBMYWJlbCBkb25lLCBuYW4sIGVxdWFsOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwg b3RoZXIpOwotKyAgaWYgKGhhbmRsZU5hTikgewotKyAgICBtYV9iKEFzc2VtYmxlcjo6RG91Ymxl VW5vcmRlcmVkLCAmbmFuKTsKLSsgIH0KLSsgIC8vIEhhbmRsZSArMCB2cyAtMC4KLSsgIG1hX2Io QXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgJmVxdWFsKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3Vi bGVHcmVhdGVyVGhhbiwgJmRvbmUpOwotKyAgYXNfZm1yKHNyY0Rlc3QsIG90aGVyKTsKLSsgIGp1 bXAoJmRvbmUpOwotKwotKyAgYmluZCgmZXF1YWwpOwotKyAgbG9hZENvbnN0YW50RG91YmxlKDAu MCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBhc19mY21wdShzcmNEZXN0LCBTY3JhdGNoRG91Ymxl UmVnKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCwgJmRvbmUpOwotKyAgLy8g LTAgKyAtMCA9IC0wIGFuZCAtMCArIDAgPSArMC4KLSsgIGFzX2ZhZGQoc3JjRGVzdCwgc3JjRGVz dCwgb3RoZXIpOwotKyAganVtcCgmZG9uZSk7Ci0rCi0rICBpZiAoaGFuZGxlTmFOKSB7Ci0rICAg IGJpbmQoJm5hbik7Ci0rICAgIGFzX2ZhZGQoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAg fQotKyAgYmluZCgmZG9uZSk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFNoaWZ0IGZ1bmN0aW9u cwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAg UmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgYXNfcmx3aW5tKG1hc2tlZCwg c3JjLCAwLCAyNywgMzEpOwotKyAgYXNfc2x3KGRlc3QsIGRlc3QsIG1hc2tlZCk7Ci0rICBhc19l eHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0MzIo SW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBsc2hpZnQzMihpbW0sIGRlc3QsIGRlc3Qp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgeF9zbHdpKGRlc3QsIHNyYywgaW1tLnZhbHVl ICYgMHgxZik7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6ZmxleGlibGVMc2hpZnQzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK LSsgIGxzaGlmdDMyKHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Omxz aGlmdDY0KFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIC8vIFBQQzY0IHNs ZCB1c2VzIGEgNy1iaXQgc2hpZnQgZmllbGQ7IHNoaWZ0cyA+PSA2NCBwcm9kdWNlIDAuCi0rICAv LyBXYXNtIGk2NC5zaGwgcmVxdWlyZXMgc2hpZnQgY291bnQgbW9kdWxvIDY0LCBzbyBtYXNrIHRv IDYgYml0cy4KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX3JsZGljbChtYXNrZWQs IHNoaWZ0LCAwLCA1OCk7ICAvLyBjbHJsZGk6IGtlZXAgbG93IDYgYml0cwotKyAgYXNfc2xkKGRl c3QucmVnLCBkZXN0LnJlZywgbWFza2VkKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bHNoaWZ0NjQoSW1tMzIgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQoMCA8 PSBpbW0udmFsdWUgJiYgaW1tLnZhbHVlIDwgNjQpOwotKyAgeF9zbGRpKGRlc3QucmVnLCBkZXN0 LnJlZywgaW1tLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0UHRy KFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19zbGQoZGVzdCwgZGVzdCwg c2hpZnQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsc2hpZnRQdHIoSW1tMzIgaW1t LCBSZWdpc3RlciBkZXN0KSB7Ci0rICBsc2hpZnRQdHIoaW1tLCBkZXN0LCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52 YWx1ZSA8IDY0KTsKLSsgIHhfc2xkaShkZXN0LCBzcmMsIGltbS52YWx1ZSk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlTHNoaWZ0UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdp c3RlciBzcmNEZXN0KSB7Ci0rICBsc2hpZnRQdHIoc2hpZnQsIHNyY0Rlc3QpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVy IG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX3Jsd2lubShtYXNrZWQsIHNyYywgMCwg MjcsIDMxKTsKLSsgIGFzX3NydyhkZXN0LCBkZXN0LCBtYXNrZWQpOwotKyAgYXNfZXh0c3coZGVz dCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDMyKEltbTMyIGlt bSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgcnNoaWZ0MzIoaW1tLCBkZXN0LCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHhfc3J3aShkZXN0LCBzcmMsIGltbS52YWx1ZSAmIDB4MWYp OwotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmZsZXhpYmxlUnNoaWZ0MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICByc2hp ZnQzMihzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMkFy aXRobWV0aWMoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBhc19ybHdpbm0obWFza2VkLCBzcmMsIDAsIDI3LCAzMSk7Ci0rICBhc19zcmF3 KGRlc3QsIGRlc3QsIG1hc2tlZCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlm dDMyQXJpdGhtZXRpYyhJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHJzaGlmdDMyQXJp dGhtZXRpYyhpbW0sIGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpy c2hpZnQzMkFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3NyYXdp KGRlc3QsIHNyYywgaW1tLnZhbHVlICYgMHgxZik7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmZsZXhpYmxlUnNoaWZ0MzJBcml0aG1ldGljKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCkgewotKyAgcnNoaWZ0MzJBcml0aG1ldGljKHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnJzaGlmdDY0KFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlcjY0IGRlc3QpIHsK LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX3JsZGljbChtYXNrZWQsIHNoaWZ0LCAw LCA1OCk7Ci0rICBhc19zcmQoZGVzdC5yZWcsIGRlc3QucmVnLCBtYXNrZWQpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQ2NChJbW0zMiBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkg ewotKyAgTU9aX0FTU0VSVCgwIDw9IGltbS52YWx1ZSAmJiBpbW0udmFsdWUgPCA2NCk7Ci0rICB4 X3NyZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbW0udmFsdWUpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyc2hpZnQ2NEFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlcjY0IGRlc3Qp IHsKLSsgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUgJiYgaW1tLnZhbHVlIDwgNjQpOwotKyAg YXNfc3JhZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbW0udmFsdWUpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyc2hpZnQ2NEFyaXRobWV0aWMoUmVnaXN0ZXIgc2hpZnQsIFJlZ2lzdGVy NjQgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgYXNfcmxkaWNsKG1hc2tl ZCwgc2hpZnQsIDAsIDU4KTsKLSsgIGFzX3NyYWQoZGVzdC5yZWcsIGRlc3QucmVnLCBtYXNrZWQp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnRQdHIoUmVnaXN0ZXIgc2hpZnQs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3NyZChkZXN0LCBkZXN0LCBzaGlmdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIHJzaGlmdFB0cihpbW0sIGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpyc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUgJiYgaW1tLnZhbHVlIDwgNjQpOwotKyAg eF9zcmRpKGRlc3QsIHNyYywgaW1tLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6ZmxleGlibGVSc2hpZnRQdHIoUmVnaXN0ZXIgc2hpZnQsIFJlZ2lzdGVyIHNyY0Rlc3QpIHsK LSsgIHJzaGlmdFB0cihzaGlmdCwgc3JjRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBy c2hpZnRQdHJBcml0aG1ldGljKGltbSwgZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7 Ci0rICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52YWx1ZSA8IDY0KTsKLSsgIGFz X3NyYWRpKGRlc3QsIHNyYywgaW1tLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cnNoaWZ0UHRyQXJpdGhtZXRpYyhSZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXIgZGVzdCkgewot KyAgYXNfc3JhZChkZXN0LCBkZXN0LCBzaGlmdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmZsZXhpYmxlUnNoaWZ0UHRyQXJpdGhtZXRpYyhSZWdpc3RlciBzaGlmdCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjRGVz dCkgewotKyAgcnNoaWZ0UHRyQXJpdGhtZXRpYyhzaGlmdCwgc3JjRGVzdCk7Ci0rfQotKwotKy8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKy8vIFJvdGF0aW9uIGZ1bmN0aW9ucwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnJvdGF0ZUxlZnQoUmVnaXN0ZXIgY291bnQsIFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAvLyBQUEMgcm90bHcgaXMgcmx3bm0gd2l0aCBmdWxsIG1hc2s6IHJsd25tIGRlc3Qs IGlucHV0LCBjb3VudCwgMCwgMzEKLSsgIGFzX3Jsd25tKGRlc3QsIGlucHV0LCBjb3VudCwgMCwg MzEpOwotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnJvdGF0ZUxlZnQoSW1tMzIgY291bnQsIFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBkZXN0 KSB7Ci0rICBhc19ybHdpbm0oZGVzdCwgaW5wdXQsIGNvdW50LnZhbHVlICYgMzEsIDAsIDMxKTsK LSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpy b3RhdGVMZWZ0NjQoUmVnaXN0ZXIgY291bnQsIFJlZ2lzdGVyNjQgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGRlc3QsIFJlZ2lzdGVyIHRlbXApIHsK LSsgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKLSsgIC8vIHJsZGNs IGRlc3QsIHNyYywgY291bnQsIDAg4oCUIHJvdGF0ZSBsZWZ0IGRvdWJsZXdvcmQgdGhlbiBjbGVh ciBsZWZ0IDAgYml0cy4KLSsgIGFzX3JsZGNsKGRlc3QucmVnLCBzcmMucmVnLCBjb3VudCwgMCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0ZUxlZnQ2NChJbW0zMiBjb3VudCwg UmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgewotKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lz dGVyOjpJbnZhbGlkKCkpOwotKyAgLy8gcmxkaWNsIGRlc3QsIHNyYywgY291bnQsIDAg4oCUIHJv dGF0ZSBsZWZ0IGRvdWJsZXdvcmQgaW1tZWRpYXRlIHRoZW4gY2xlYXIuCi0rICBhc19ybGRpY2wo ZGVzdC5yZWcsIHNyYy5yZWcsIGNvdW50LnZhbHVlICYgNjMsIDApOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodChSZWdpc3RlciBjb3VudCwgUmVnaXN0ZXIgaW5wdXQs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gcm90YXRlUmlnaHQobikgPSByb3RhdGVMZWZ0KDMyLW4pLiBXaGVuIGRlc3QgIT0gaW5wdXQs IHRoZSBuZWdhdGVkCi0rICAvLyBjb3VudCBjYW4gbGFuZCBkaXJlY3RseSBpbiBkZXN0LCBkcm9w cGluZyB0aGUgR1BSIHNjcmF0Y2guIGRlc3QgbWF5Ci0rICAvLyBhbGlhcyBjb3VudCBoYXJtbGVz c2x5IChzdWJmaWMgcmVhZHMgY291bnQsIHRoZW4gd3JpdGVzIGRlc3QsIHRoZW4KLSsgIC8vIHJs d25tIGNvbnN1bWVzIHRoZSBuZXcgZGVzdCBhcyBpdHMgcm90YXRlLWNvdW50KS4KLSsgIGlmIChk ZXN0ICE9IGlucHV0KSB7Ci0rICAgIGFzX3N1YmZpYyhkZXN0LCBjb3VudCwgMzIpOwotKyAgICBh c19ybHdubShkZXN0LCBpbnB1dCwgZGVzdCwgMCwgMzEpOwotKyAgICBhc19leHRzdyhkZXN0LCBk ZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg IGFzX3N1YmZpYyhzY3JhdGNoLCBjb3VudCwgMzIpOwotKyAgYXNfcmx3bm0oZGVzdCwgaW5wdXQs IHNjcmF0Y2gsIDAsIDMxKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodChJbW0zMiBjb3VudCwgUmVnaXN0ZXIgaW5wdXQs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHJvdGF0ZUxlZnQoSW1tMzIoKDMyIC0gY291bnQudmFsdWUp ICYgMzEpLCBpbnB1dCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0 ZVJpZ2h0NjQoUmVnaXN0ZXIgY291bnQsIFJlZ2lzdGVyNjQgc3JjLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBkZXN0LCBSZWdpc3RlciB0ZW1wKSB7Ci0r ICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICAvLyBTYW1lIHNo YXBlIGFzIHJvdGF0ZVJpZ2h0MzI6IHdoZW4gZGVzdCAhPSBzcmMsIHRoZSBuZWdhdGVkIGNvdW50 Ci0rICAvLyBjYW4gbGFuZCBkaXJlY3RseSBpbiBkZXN0LCBkcm9wcGluZyB0aGUgR1BSIHNjcmF0 Y2guCi0rICBpZiAoZGVzdC5yZWcgIT0gc3JjLnJlZykgewotKyAgICBhc19zdWJmaWMoZGVzdC5y ZWcsIGNvdW50LCA2NCk7Ci0rICAgIGFzX3JsZGNsKGRlc3QucmVnLCBzcmMucmVnLCBkZXN0LnJl ZywgMCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICBhc19zdWJmaWMoc2NyYXRjaCwgY291bnQsIDY0KTsKLSsgIGFzX3JsZGNsKGRlc3QucmVnLCBz cmMucmVnLCBzY3JhdGNoLCAwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRl UmlnaHQ2NChJbW0zMiBjb3VudCwgUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXApIHsKLSsgIE1P Wl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKLSsgIHJvdGF0ZUxlZnQ2NChJ bW0zMigoNjQgLSBjb3VudC52YWx1ZSkgJiA2MyksIHNyYywgZGVzdCwgdGVtcCk7Ci0rfQotKwot Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKy8vIEJpdCBjb3VudGluZyBmdW5jdGlvbnMKLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpjbHo2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBhc19j bnRsemQoZGVzdC5yZWcsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpj dHo2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBpZiAoSGFzUE9XRVI5 KCkpIHsKLSsgICAgYXNfY250dHpkKGRlc3QucmVnLCBzcmMucmVnKTsKLSsgIH0gZWxzZSB7Ci0r ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIg dG1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBhc19uZWcodG1wLCBzcmMucmVnKTsKLSsgICAg Ly8gYW5kLiAocmVjb3JkIGZvcm0pIHNldHMgQ1IwW2VxXSBiYXNlZCBvbiByZXN1bHQ7IHJlc3Vs dCBpcyAwIGlmZiBzcmM9PTAsCi0rICAgIC8vIHNvIHRoaXMgZm9sZHMgdGhlIGV4cGxpY2l0IHpl cm8tY2hlY2sgdGhhdCB3b3VsZCBvdGhlcndpc2UgbmVlZCBjbXBkaS4KLSsgICAgYXNfYW5kX19y Yyh0bXAsIHNyYy5yZWcsIHRtcCk7ICAvLyB0bXAgPSB4ICYgLXg7IENSMFtlcV0gPSAoc3JjID09 IDApCi0rICAgIGFzX2NudGx6ZCh0bXAsIHRtcCk7ICAgICAgICAgICAgLy8gdG1wID0gY2x6KGlz b2xhdGVkIGJpdCkKLSsgICAgYXNfc3ViZmljKGRlc3QucmVnLCB0bXAsIDYzKTsgICAvLyBkZXN0 ID0gNjMgLSBjbHogPSBjdHogKGZvciBub256ZXJvKQotKyAgICB4c19saSh0bXAsIDY0KTsKLSsg ICAgYXNfaXNlbChkZXN0LnJlZywgdG1wLCBkZXN0LnJlZywgRXF1YWwpOyAgLy8gQ1IwW2VxXSDi hpIgNjQgaWYgc3JjPT0wCi0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNu dDY0KFJlZ2lzdGVyNjQgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRtcCkgewotKyAgYXNfcG9wY250ZChvdXRwdXQucmVn LCBpbnB1dC5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbHozMihSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QsIGJvb2wga25vd25Ob3RaZXJvKSB7Ci0rICBhc19jbnRsenco ZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y3R6MzIoUmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0LCBib29sIGtub3duTm90WmVybykgewotKyAgaWYgKEhhc1BPV0VS OSgpKSB7Ci0rICAgIGFzX2NudHR6dyhkZXN0LCBzcmMpOwotKyAgfSBlbHNlIHsKLSsgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciB0bXAgPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGFzX25lZyh0bXAsIHNyYyk7Ci0rICAgIC8vIGFuZC4gcmVj b3JkIGZvcm0gZm9sZHMgdGhlIGNtcHdpIHNyYywwIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIG5l ZWRlZAotKyAgICAvLyB0byBkcml2ZSB0aGUgaXNlbCBiZWxvdzogdG1wID09IDAgaWZmIHNyYyA9 PSAwLgotKyAgICBpZiAoa25vd25Ob3RaZXJvKSB7Ci0rICAgICAgYXNfYW5kXyh0bXAsIHNyYywg dG1wKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19hbmRfX3JjKHRtcCwgc3JjLCB0bXApOyAg Ly8gQ1IwW2VxXSA9IChzcmMgPT0gMCkKLSsgICAgfQotKyAgICBhc19jbnRsencodG1wLCB0bXAp OwotKyAgICBhc19zdWJmaWMoZGVzdCwgdG1wLCAzMSk7Ci0rICAgIGlmICgha25vd25Ob3RaZXJv KSB7Ci0rICAgICAgeHNfbGkodG1wLCAzMik7Ci0rICAgICAgYXNfaXNlbChkZXN0LCB0bXAsIGRl c3QsIEVxdWFsKTsgIC8vIENSMFtlcV0g4oaSIDMyIGlmIHNyYz09MAotKyAgICB9Ci0rICB9Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNudDMyKFJlZ2lzdGVyIGlucHV0LCBSZWdp c3RlciBvdXRwdXQsIFJlZ2lzdGVyIHRtcCkgewotKyAgYXNfcG9wY250dyhvdXRwdXQsIGlucHV0 KTsKLSsgIC8vIHBvcGNudHcgZ2l2ZXMgcGVyLXdvcmQgcmVzdWx0czsgb24gNjQtYml0IHRoZSBs b3cgd29yZCBjb3VudCBpcyBpbgotKyAgLy8gYml0cyAzMjo2Mywgc28ganVzdCBtYXNrIHRvIDMy IGJpdHMuCi0rICBhc19ybHdpbm0ob3V0cHV0LCBvdXRwdXQsIDAsIDAsIDMxKTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gQ29uZGl0aW9uIGZ1bmN0aW9ucwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNtcDhTZXQoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLCBJbW0zMiByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGxocy5iYXNlKTsKLSsgIGJv b2wgaXNVbnNpZ25lZCA9IChjb25kICYgQXNzZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCkgIT0g MDsKLSsgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgIGxvYWQ4WmVyb0V4dGVuZChsaHMsIHNjcmF0 Y2gpOwotKyAgICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW0zMih1aW50OF90KHJo cy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKLSsgICAgbWFfY21wX3NldChkZXN0LCBjKTsKLSsgIH0g ZWxzZSB7Ci0rICAgIGxvYWQ4U2lnbkV4dGVuZChsaHMsIHNjcmF0Y2gpOwotKyAgICBDb25kaXRp b24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW0zMihpbnQ4X3QocmhzLnZhbHVlKSksIGNvbmQsIHRy dWUpOwotKyAgICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjbXAxNlNldChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsaHMsIEltbTMyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGxocy5iYXNl KTsKLSsgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25kICYgQXNzZW1ibGVyOjpDb25kaXRpb25VbnNp Z25lZCkgIT0gMDsKLSsgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgIGxvYWQxNlplcm9FeHRlbmQo bGhzLCBzY3JhdGNoKTsKLSsgICAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIo dWludDE2X3QocmhzLnZhbHVlKSksIGNvbmQsIHRydWUpOwotKyAgICBtYV9jbXBfc2V0KGRlc3Qs IGMpOwotKyAgfSBlbHNlIHsKLSsgICAgbG9hZDE2U2lnbkV4dGVuZChsaHMsIHNjcmF0Y2gpOwot KyAgICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW0zMihpbnQxNl90KHJocy52YWx1 ZSkpLCBjb25kLCB0cnVlKTsKLSsgICAgbWFfY21wX3NldChkZXN0LCBjKTsKLSsgIH0KLSt9Ci0r Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjbXAzMlNldChDb25kaXRpb24gY29uZCwgVDEgbGhzLCBUMiByaHMsIFJlZ2lzdGVyIGRl c3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKLSsg IG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDY0 U2V0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGxocywgUmVnaXN0ZXI2NCByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgQ29uZGl0aW9u IGMgPSBtYV9jbXAobGhzLnJlZywgcmhzLnJlZywgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3Qs IGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA2NFNldChDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXI2NCBsaHMsIEltbTY0IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMucmVnLCBJ bW1Xb3JkKHVpbnQ2NF90KHJocy52YWx1ZSkpLCBjb25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwg Yyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDY0U2V0KENvbmRpdGlvbiBjb25k LCBBZGRyZXNzIGxocywgUmVnaXN0ZXI2NCByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJo cy5yZWcsIGNvbmQpOwotKyAgbWFfY21wX3NldChkZXN0LCBjKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y21wNjRTZXQoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLCBJbW02NCBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENv bmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIEltbVdvcmQodWludDY0X3QocmhzLnZhbHVlKSks IGNvbmQpOwotKyAgbWFfY21wX3NldChkZXN0LCBjKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVu YW1lIFQxLCB0eXBlbmFtZSBUMj4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJTZXQoQ29u ZGl0aW9uIGNvbmQsIFQxIGxocywgVDIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwot K30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsvLyBCcmFuY2ggZnVuY3Rpb25zCi0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoOChDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW0z MiByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAvLyBNaXJyb3IgQVJNNjQvTG9vbmdBcmNoNjQv UklTQy1WOiBuYXJyb3cgdGhlIGltbWVkaWF0ZSB0byB0aGUgOC1iaXQKLSsgIC8vIG1lbW9yeSBv cGVyYW5kIHdpZHRoIHNvIGJvdGggc2lkZXMgb2YgdGhlIGNvbXBhcmUgaGF2ZSBtYXRjaGluZyBi aXQKLSsgIC8vIHBhdHRlcm5zIHJlZ2FyZGxlc3Mgb2YgaG93IG1vdmUzMihJbW0zMikgbWF0ZXJp YWxpemVzIHRoZSBpbW0uIFVzZQotKyAgLy8gdWludDggY2FzdCBmb3IgZXF1YWxpdHkgLyB1bnNp Z25lZCwgaW50OCBjYXN0IGZvciBzaWduZWQgcmVsYXRpb25hbC4KLSsgIGJvb2wgaXNFcU9yTmUg PSAoY29uZCA9PSBBc3NlbWJsZXI6OkVxdWFsKSB8fCAoY29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVx dWFsKTsKLSsgIGJvb2wgaXNVbnNpZ25lZCA9IChjb25kICYgQXNzZW1ibGVyOjpDb25kaXRpb25V bnNpZ25lZCkgIT0gMDsKLSsgIEltbTMyIG5hcnJvd2VkKDApOwotKyAgaWYgKGlzRXFPck5lIHx8 IGlzVW5zaWduZWQpIHsKLSsgICAgbG9hZDhaZXJvRXh0ZW5kKGxocywgc2NyYXRjaCk7Ci0rICAg IG5hcnJvd2VkID0gSW1tMzIodWludDhfdChyaHMudmFsdWUpKTsKLSsgIH0gZWxzZSB7Ci0rICAg IGxvYWQ4U2lnbkV4dGVuZChsaHMsIHNjcmF0Y2gpOwotKyAgICBuYXJyb3dlZCA9IEltbTMyKGlu dDhfdChyaHMudmFsdWUpKTsKLSsgIH0KLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gs IG5hcnJvd2VkLCBjb25kLCB0cnVlKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2g4KENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgm IGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDhaZXJvRXh0ZW5k KGxocywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNv bmQsIHRydWUpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIEltbTMyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAvLyBTZWUgYnJhbmNoODogbmFycm93IHRoZSBpbW1l ZGlhdGUgdG8gMTYgYml0cyBzbyBib3RoIHNpZGVzIGhhdmUgbWF0Y2hpbmcKLSsgIC8vIGJpdCBw YXR0ZXJucy4gdWludDE2IGZvciBlcXVhbGl0eSAvIHVuc2lnbmVkLCBpbnQxNiBmb3Igc2lnbmVk IHJlbGF0aW9uYWwuCi0rICBib29sIGlzRXFPck5lID0gKGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVh bCkgfHwgKGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVhbCk7Ci0rICBib29sIGlzVW5zaWduZWQg PSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5zaWduZWQpICE9IDA7Ci0rICBJbW0zMiBu YXJyb3dlZCgwKTsKLSsgIGlmIChpc0VxT3JOZSB8fCBpc1Vuc2lnbmVkKSB7Ci0rICAgIGxvYWQx Nlplcm9FeHRlbmQobGhzLCBzY3JhdGNoKTsKLSsgICAgbmFycm93ZWQgPSBJbW0zMih1aW50MTZf dChyaHMudmFsdWUpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGxvYWQxNlNpZ25FeHRlbmQobGhzLCBz Y3JhdGNoKTsKLSsgICAgbmFycm93ZWQgPSBJbW0zMihpbnQxNl90KHJocy52YWx1ZSkpOwotKyAg fQotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgbmFycm93ZWQsIGNvbmQsIHRydWUp OwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIENvbmRpdGlvbiBjID0g bWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIg bGhzLCBJbW0zMiBpbW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxh YmVsKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIGltbSwgY29uZCwgdHJ1ZSk7Ci0r ICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIo Q29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIGxvYWQzMihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgY29uc3Qg QWRkcmVzcyYgbGhzLCBJbW0zMiByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKGxo cywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQs IHRydWUpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByaHMsIExhYmVsKiBsYWJlbCkg ewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCgodWludHB0 cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7Ci0rICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCAwKSwg c2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQsIHRy dWUpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiByaHMsIExhYmVsKiBsYWJlbCkgewotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWxo cy5hZGRyKSwgc2NyYXRjaCk7Ci0rICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCAwKSwgc2NyYXRj aCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQsIHRydWUpOwot KyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMy KENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGxocywgSW1tMzIgcmhzLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIGxvYWQzMihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgd2FzbTo6 U3ltYm9saWNBZGRyZXNzIGFkZHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1t MzIgaW1tLCBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBt b3ZlUHRyKGFkZHIsIHNjcmF0Y2gpOwotKyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNj cmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgaW1tLCBjb25kLCB0cnVl KTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2g2NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIEltbTY0IHZhbCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogc3VjY2VzcywgTGFiZWwqIGZhaWwpIHsKLSsg IENvbmRpdGlvbiBjID0gbWFfY21wKGxocy5yZWcsIEltbVdvcmQodWludDY0X3QodmFsLnZhbHVl KSksIGNvbmQpOwotKyAgaWYgKGZhaWwpIHsKLSsgICAgbWFfYihjLCBzdWNjZXNzKTsKLSsgICAg anVtcChmYWlsKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hX2IoYywgc3VjY2Vzcyk7Ci0rICB9Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDY0KENvbmRpdGlvbiBjb25kLCBSZWdp c3RlcjY0IGxocywgUmVnaXN0ZXI2NCByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2Nt cChsaHMucmVnLCByaHMucmVnLCBjb25kKTsKLSsgIGlmIChmYWlsKSB7Ci0rICAgIG1hX2IoYywg c3VjY2Vzcyk7Ci0rICAgIGp1bXAoZmFpbCk7Ci0rICB9IGVsc2UgewotKyAgICBtYV9iKGMsIHN1 Y2Nlc3MpOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2g2NChDb25k aXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW02NCB2YWwsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0 aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tV29yZCh1aW50NjRfdCh2YWwudmFsdWUpKSwgY29u ZCk7Ci0rICBpZiAoZmFpbCkgewotKyAgICBtYV9iKGMsIHN1Y2Nlc3MpOwotKyAgICBqdW1wKGZh aWwpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFfYihjLCBzdWNjZXNzKTsKLSsgIH0KLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJl c3MmIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJocywg TGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2Ny YXRjaCwgcmhzLnJlZywgY29uZCk7Ci0rICBpZiAoZmFpbCkgewotKyAgICBtYV9iKGMsIHN1Y2Nl c3MpOwotKyAgICBqdW1wKGZhaWwpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFfYihjLCBzdWNjZXNz KTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBZGRyZXNzJiByaHMsIFJlZ2lzdGVyIHNjcmF0Y2gsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBsb2FkUHRyKHJocywgc2NyYXRjaCk7 Ci0rICBicmFuY2g2NChjb25kLCBsaHMsIFJlZ2lzdGVyNjQoc2NyYXRjaCksIGxhYmVsLCBudWxs cHRyKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJo cywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbTMyIHJocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcChsaHMsIEltbVdvcmQoaW50NjRfdChyaHMudmFsdWUpKSwgY29uZCk7Ci0r ICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRy KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbVB0ciByaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9j bXAobGhzLCByaHMsIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1H Q1B0ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg ewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOwotKyAgbWFfYihjLCBs YWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1Xb3JkIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJo cywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIFJlZ2lzdGVy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAg Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFi ZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tUHRyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRj aCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1t R0NQdHIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxocywgc2NyYXRjaCk7 Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQpOwotKyAgbWFfYihj LCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRp b24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW1Xb3JkIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo c2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFic29sdXRlQWRk cmVzcyYgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByaHMs IExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIo SW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7Ci0rICBsb2FkUHRyKEFkZHJl c3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRj aCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFic29sdXRlQWRkcmVzcyYg bGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW1Xb3JkIHJocywgTGFiZWwq IGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3Jk KCh1aW50cHRyX3QpbGhzLmFkZHIpLCBzY3JhdGNoKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh dGNoLCAwKSwgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMs IGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgd2FzbTo6U3ltYm9saWNBZGRyZXNzIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKGxocywgc2NyYXRjaCk7 Ci0rICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9u IGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0 IEJhc2VJbmRleCYgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciByaHMsIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJo cywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGxocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tV29yZCByaHMsIExhYmVsKiBsYWJlbCkgewot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsg IENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7Ci0rICBtYV9iKGMsIGxh YmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHJpdmF0ZVB0cihDb25k aXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIGJyYW5jaFB0 cihjb25kLCBsaHMsIHJocywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hGbG9hdChEb3VibGVDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIExhYmVsKiBs YWJlbCkgewotKyAgYXNfZmNtcHUobGhzLCByaHMpOwotKyAgbWFfYihjb25kLCBsYWJlbCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRydW5jYXRlRmxvYXQzMk1heWJlTW9k VWludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwp IHsKLSsgIC8vIENvbnZlcnQgZmxvYXQzMiB0byBpbnQ2NCAodHJ1bmNhdGluZyB0b3dhcmQgemVy byksIGZhaWwgb24gTmFOL292ZXJmbG93LgotKyAgYXNfZmN0aWR6KFNjcmF0Y2hEb3VibGVSZWcs IHNyYyk7Ci0rICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICAvLyBQUEM2 NCBmY3RpZHogc2F0dXJhdGVzIHRvIElOVDY0X01JTiBvbiBuZWdhdGl2ZSBvdmVyZmxvdy9OYU4s Ci0rICAvLyBhbmQgdG8gSU5UNjRfTUFYIG9uIHBvc2l0aXZlIG92ZXJmbG93LiBDaGVjayBib3Ro LgotKyAgYXNNYXNtKCkuYnJhbmNoUHRyKEFzc2VtYmxlcjo6RXF1YWwsIGRlc3QsIEltbVdvcmQo aW50NjRfdChJTlQ2NF9NSU4pKSwgZmFpbCk7Ci0rICBhc01hc20oKS5icmFuY2hQdHIoQXNzZW1i bGVyOjpFcXVhbCwgZGVzdCwgSW1tV29yZChpbnQ2NF90KElOVDY0X01BWCkpLCBmYWlsKTsKLSsg IC8vIFRydW5jYXRlIHRvIHVpbnQzMiAoa2VlcCBsb3cgMzIgYml0cykuCi0rICBhc19ybGRpY2wo ZGVzdCwgZGVzdCwgMCwgMzIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hU cnVuY2F0ZUZsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwq IGZhaWwpIHsKLSsgIGNvbnZlcnRGbG9hdDMyVG9JbnQzMihzcmMsIGRlc3QsIGZhaWwsIGZhbHNl KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoRG91YmxlKERvdWJsZUNvbmRp dGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIExhYmVsKiBsYWJlbCkgewotKyAgYXNfZmNtcHUo bGhzLCByaHMpOwotKyAgbWFfYihjb25kLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFRydW5jYXRlRG91YmxlTWF5YmVNb2RVaW50MzIoRmxvYXRSZWdpc3RlciBz cmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKLSsgIC8vIENvbnZlcnQgZG91Ymxl IHRvIGludDY0ICh0cnVuY2F0aW5nIHRvd2FyZCB6ZXJvKSwgZmFpbCBvbiBOYU4vb3ZlcmZsb3cu Ci0rICBhc19mY3RpZHooU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKLSsgIGFzX21mdnNyZChkZXN0 LCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIC8vIFBQQzY0IGZjdGlkeiBzYXR1cmF0ZXMgdG8gSU5U NjRfTUlOIG9uIG5lZ2F0aXZlIG92ZXJmbG93L05hTiwKLSsgIC8vIGFuZCB0byBJTlQ2NF9NQVgg b24gcG9zaXRpdmUgb3ZlcmZsb3cuIENoZWNrIGJvdGguCi0rICBhc01hc20oKS5icmFuY2hQdHIo QXNzZW1ibGVyOjpFcXVhbCwgZGVzdCwgSW1tV29yZChpbnQ2NF90KElOVDY0X01JTikpLCBmYWls KTsKLSsgIGFzTWFzbSgpLmJyYW5jaFB0cihBc3NlbWJsZXI6OkVxdWFsLCBkZXN0LCBJbW1Xb3Jk KGludDY0X3QoSU5UNjRfTUFYKSksIGZhaWwpOwotKyAgLy8gVHJ1bmNhdGUgdG8gdWludDMyIChr ZWVwIGxvdyAzMiBiaXRzKS4KLSsgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCAzMik7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihGbG9h dFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwpIHsKLSsgIGNvbnZlcnREb3VibGVU b0ludDMyKHNyYywgZGVzdCwgZmFpbCwgZmFsc2UpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hJbnQ2NE5vdEluUHRyUmFuZ2UoUmVnaXN0ZXI2NCBzcmMsIExhYmVsKiBsYWJl bCkgewotKyAgLy8gTm8tb3Agb24gNjQtYml0LgotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpicmFuY2hVSW50NjROb3RJblB0clJhbmdlKFJlZ2lzdGVyNjQgc3JjLCBMYWJlbCogbGFiZWwp IHsKLSsgIC8vIEJyYW5jaCBpZiBzcmMgPj0gMl42MyAoc2lnbiBiaXQgc2V0ID0gb3V0IG9mIHNp Z25lZCBwdHIgcmFuZ2UpLgotKyAgYXNfY21wZGkoc3JjLnJlZywgMCk7Ci0rICBtYV9iKEFzc2Vt Ymxlcjo6TGVzc1RoYW4sIGxhYmVsKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBS ZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBv dmVyZmxvdykgewotKyAgc3dpdGNoIChjb25kKSB7Ci0rICAgIGNhc2UgT3ZlcmZsb3c6IHsKLSsg ICAgICAvLyBEbyByYXcgNjQtYml0IGFkZCAobm8gc2lnbiBleHRlbnNpb24pIHNvIHdlIGNhbiBk ZXRlY3QgMzItYml0IG92ZXJmbG93LgotKyAgICAgIC8vIEJvdGggaW5wdXRzIHNob3VsZCBhbHJl YWR5IGJlIHNpZ24tZXh0ZW5kZWQgMzItYml0IHZhbHVlcywgc28gdGhlCi0rICAgICAgLy8gNjQt Yml0IHJlc3VsdCBpcyBtYXRoZW1hdGljYWxseSBjb3JyZWN0LiBJZiBleHRzdyhyZXN1bHQpICE9 IHJlc3VsdCwKLSsgICAgICAvLyB0aGUgMzItYml0IGFkZCBvdmVyZmxvd2VkLgotKyAgICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIGFkZFB0cihzcmMsIGRlc3QpOwotKyAg ICAgIGFzX2V4dHN3KHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGFzX2NtcGQoZGVzdCwgc2NyYXRj aCk7Ci0rICAgICAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgbWFfYihOb3RFcXVhbCwg b3ZlcmZsb3cpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgTm9uWmVybzoKLSsg ICAgY2FzZSBaZXJvOgotKyAgICAgIGFkZDMyKHNyYywgZGVzdCk7Ci0rICAgICAgYXNfY21wZGko ZGVzdCwgMCk7Ci0rICAgICAgbWFfYihjb25kID09IE5vblplcm8gPyBOb3RFcXVhbCA6IEVxdWFs LCBvdmVyZmxvdyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2lnbmVkOgotKyAgICBjYXNl IE5vdFNpZ25lZDoKLSsgICAgICBhZGQzMihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRl c3QsIDApOwotKyAgICAgIG1hX2IoY29uZCA9PSBTaWduZWQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJU aGFuT3JFcXVhbCwgb3ZlcmZsb3cpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIENhcnJ5Q2xl YXI6Ci0rICAgIGNhc2UgQ2FycnlTZXQ6IHsKLSsgICAgICAvLyBVbnNpZ25lZCAzMi1iaXQgY2Fy cnkgZGV0ZWN0aW9uOiBzYXZlIGRlc3QsIGRvIDMyLWJpdCBhZGQsCi0rICAgICAgLy8gdGhlbiB1 bnNpZ25lZC1jb21wYXJlIHJlc3VsdCB3aXRoIG9yaWdpbmFsLiBJZiByZXN1bHQgPCBvcmlnaW5h bAotKyAgICAgIC8vICh1bnNpZ25lZCksIGEgY2Fycnkgb2NjdXJyZWQuCi0rICAgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgbW92ZTMyKGRlc3QsIHNjcmF0Y2gpOwotKyAg ICAgIGFkZDMyKHNyYywgZGVzdCk7Ci0rICAgICAgYXNfY21wbHcoZGVzdCwgc2NyYXRjaCk7Ci0r ICAgICAgbWFfYihjb25kID09IENhcnJ5U2V0ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1 YWwsIG92ZXJmbG93KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBkZWZhdWx0OgotKyAg ICAgIE1PWl9DUkFTSCgiTllJIik7Ci0rICB9Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBU PgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBUIHNy YywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJl bCogb3ZlcmZsb3cpIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIE92ZXJmbG93OiB7 Ci0rICAgICAgLy8gRG8gcmF3IDY0LWJpdCBzdWIgKG5vIHNpZ24gZXh0ZW5zaW9uKSBzbyB3ZSBj YW4gZGV0ZWN0IDMyLWJpdCBvdmVyZmxvdy4KLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsKLSsgICAgICBhc19leHRzdyhzY3JhdGNo LCBkZXN0KTsKLSsgICAgICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgICAgIGFzX2V4dHN3 KGRlc3QsIGRlc3QpOwotKyAgICAgIG1hX2IoTm90RXF1YWwsIG92ZXJmbG93KTsKLSsgICAgICBi cmVhazsKLSsgICAgfQotKyAgICBjYXNlIE5vblplcm86Ci0rICAgIGNhc2UgWmVybzoKLSsgICAg ICBzdWIzMihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgICAgIG1h X2IoY29uZCA9PSBOb25aZXJvID8gTm90RXF1YWwgOiBFcXVhbCwgb3ZlcmZsb3cpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIFNpZ25lZDoKLSsgICAgY2FzZSBOb3RTaWduZWQ6Ci0rICAgICAg c3ViMzIoc3JjLCBkZXN0KTsKLSsgICAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAgICBtYV9i KGNvbmQgPT0gU2lnbmVkID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93 KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIk5ZSSIp OwotKyAgfQotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgVCBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG92ZXJmbG93KSB7Ci0rICBN T1pfQVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cpOwotKyAgLy8gRG8gcmF3IDY0LWJpdCBtdWx0aXBs eSAobm8gc2lnbiBleHRlbnNpb24pIHNvIHdlIGNhbiBkZXRlY3QgMzItYml0Ci0rICAvLyBvdmVy Zmxvdy4gYXNfbXVsbGQgZ2l2ZXMgZnVsbCA2NC1iaXQgbG93IHJlc3VsdDsgaWYgZXh0c3cocmVz dWx0KSAhPQotKyAgLy8gcmVzdWx0LCBvdmVyZmxvdy4gc2NyYXRjaCBpcyBkZWFkIGFmdGVyIHRo ZSBtdWxsZCAoY29uc3VtZWQgYXMgUkIpLAotKyAgLy8gc28gdGhlIHNpZ24tZXh0ZW5zaW9uIHJv dW5kLXRyaXAgcmV1c2VzIGl0IGluc3RlYWQgb2YgYWNxdWlyaW5nIGEKLSsgIC8vIHNlY29uZCBz Y3JhdGNoLgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmUzMihzcmMsIHNjcmF0 Y2gpOwotKyAgYXNfbXVsbGQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rICBhc19leHRzdyhzY3Jh dGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICBhc19leHRzdyhkZXN0 LCBkZXN0KTsKLSsgIG1hX2IoTm90RXF1YWwsIG92ZXJmbG93KTsKLSt9Ci0rCi0rdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUnNoaWZ0MzIoQ29uZGl0 aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8g fHwgY29uZCA9PSBOb25aZXJvKTsKLSsgIHJzaGlmdDMyKHNyYywgZGVzdCk7Ci0rICBicmFuY2gz Mihjb25kID09IFplcm8gPyBFcXVhbCA6IE5vdEVxdWFsLCBkZXN0LCBJbW0zMigwKSwgbGFiZWwp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hOZWczMihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgcmVnLCBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBP dmVyZmxvdyk7Ci0rICBuZWczMihyZWcpOwotKyAgYnJhbmNoMzIoRXF1YWwsIHJlZywgSW1tMzIo SU5UMzJfTUlOKSwgbGFiZWwpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hBZGRQdHIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdp c3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIE92ZXJmbG93OiB7Ci0rICAgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICAgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgbW92ZVB0cihkZXN0LCBzY3JhdGNo KTsgIC8vIHNjcmF0Y2ggPSBvbGRfZGVzdAotKyAgICAgIGFkZFB0cihzcmMsIGRlc3QpOyAgICAg ICAvLyBkZXN0ID0gcmVzdWx0ID0gb2xkX2Rlc3QgKyBzcmMKLSsgICAgICBhc194b3JfKFNlY29u ZFNjcmF0Y2hSZWcsIGRlc3QsCi0rICAgICAgICAgICAgICBzY3JhdGNoKTsgIC8vIFNlY29uZFNj cmF0Y2ggPSByZXN1bHQgXiBvbGRfZGVzdAotKyAgICAgIGFzX3N1YmYoc2NyYXRjaCwgc2NyYXRj aCwKLSsgICAgICAgICAgICAgIGRlc3QpOyAgLy8gc2NyYXRjaCA9IHJlc3VsdCAtIG9sZF9kZXN0 ID0gc3JjX3ZhbHVlCi0rICAgICAgYXNfeG9yXyhzY3JhdGNoLCBzY3JhdGNoLCBkZXN0KTsgIC8v IHNjcmF0Y2ggPSBzcmNfdmFsdWUgXiByZXN1bHQKLSsgICAgICAvLyAob2xkX2Rlc3QgXiByZXN1 bHQpICYgKHNyY192YWx1ZSBeIHJlc3VsdCk6IGJpdCA2MyBzZXQgaWZmIG92ZXJmbG93LgotKyAg ICAgIC8vIGFuZC4gcmVjb3JkIGZvcm0gc2V0cyBDUjBbbHRdPShiaXQgNjMgc2V0KSwgZm9sZGlu ZyB0aGUgY21wZGkuCi0rICAgICAgYXNfYW5kX19yYyhzY3JhdGNoLCBzY3JhdGNoLCBTZWNvbmRT Y3JhdGNoUmVnKTsKLSsgICAgICBtYV9iKExlc3NUaGFuLCBsYWJlbCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIH0KLSsgICAgY2FzZSBOb25aZXJvOgotKyAgICBjYXNlIFplcm86Ci0rICAgICAgYWRk UHRyKHNyYywgZGVzdCk7Ci0rICAgICAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICAgICAgbWFfYihj b25kID09IE5vblplcm8gPyBOb3RFcXVhbCA6IEVxdWFsLCBsYWJlbCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2UgU2lnbmVkOgotKyAgICBjYXNlIE5vdFNpZ25lZDoKLSsgICAgICBhZGRQdHIo c3JjLCBkZXN0KTsKLSsgICAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAgICBtYV9iKGNvbmQg PT0gU2lnbmVkID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIGxhYmVsKTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSBDYXJyeUNsZWFyOgotKyAgICBjYXNlIENhcnJ5U2V0OiB7Ci0r ICAgICAgLy8gVW5zaWduZWQgNjQtYml0IGNhcnJ5IGRldGVjdGlvbjogc2F2ZSBkZXN0LCBkbyA2 NC1iaXQgYWRkLAotKyAgICAgIC8vIHRoZW4gdW5zaWduZWQtY29tcGFyZSByZXN1bHQgd2l0aCBv cmlnaW5hbC4gSWYgcmVzdWx0IDwgb3JpZ2luYWwKLSsgICAgICAvLyAodW5zaWduZWQpLCBhIGNh cnJ5IG9jY3VycmVkLgotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAg IG1vdmVQdHIoZGVzdCwgc2NyYXRjaCk7Ci0rICAgICAgYWRkUHRyKHNyYywgZGVzdCk7Ci0rICAg ICAgYXNfY21wbGQoZGVzdCwgc2NyYXRjaCk7Ci0rICAgICAgbWFfYihjb25kID09IENhcnJ5U2V0 ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIGxhYmVsKTsKLSsgICAgICBicmVhazsK LSsgICAgfQotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiTllJIik7Ci0rICB9Ci0r fQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFN1YlB0cihDb25kaXRpb24gY29uZCwgVCBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgc3dpdGNoIChjb25k KSB7Ci0rICAgIGNhc2UgT3ZlcmZsb3c6IHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgICAgICBtb3ZlUHRyKGRlc3QsIHNjcmF0Y2gpOyAgLy8gc2NyYXRjaCA9IG9sZF9k ZXN0Ci0rICAgICAgc3ViUHRyKHNyYywgZGVzdCk7ICAgICAgIC8vIGRlc3QgPSByZXN1bHQgPSBv bGRfZGVzdCAtIHNyYwotKyAgICAgIC8vIE92ZXJmbG93IGlmIChvbGRfZGVzdCBeIHNyY192YWx1 ZSkgJiAob2xkX2Rlc3QgXiByZXN1bHQpIGhhcyBiaXQgNjMKLSsgICAgICAvLyBzZXQuCi0rICAg ICAgYXNfc3ViZihTZWNvbmRTY3JhdGNoUmVnLCBkZXN0LAotKyAgICAgICAgICAgICAgc2NyYXRj aCk7ICAvLyBTZWNvbmRTY3JhdGNoID0gb2xkX2Rlc3QgLSByZXN1bHQgPSBzcmNfdmFsdWUKLSsg ICAgICBhc194b3JfKFNlY29uZFNjcmF0Y2hSZWcsIHNjcmF0Y2gsCi0rICAgICAgICAgICAgICBT ZWNvbmRTY3JhdGNoUmVnKTsgICAgICAgIC8vIG9sZF9kZXN0IF4gc3JjX3ZhbHVlCi0rICAgICAg YXNfeG9yXyhzY3JhdGNoLCBzY3JhdGNoLCBkZXN0KTsgIC8vIG9sZF9kZXN0IF4gcmVzdWx0Ci0r ICAgICAgLy8gUmVjb3JkLWZvcm0gQU5EIHNldHMgQ1IwIHRvIHRoZSBzaWduZWQgY29tcGFyZSBv ZiB0aGUgcmVzdWx0IHZzIDAsCi0rICAgICAgLy8gc28gYSBzZXBhcmF0ZSBjbXBkaSBpcyB1bm5l Y2Vzc2FyeTsgTGVzc1RoYW4gcmVhZHMgQ1IwLkxULgotKyAgICAgIGFzX2FuZF9fcmMoc2NyYXRj aCwgc2NyYXRjaCwgU2Vjb25kU2NyYXRjaFJlZyk7Ci0rICAgICAgbWFfYihMZXNzVGhhbiwgbGFi ZWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgTm9uWmVybzoKLSsgICAgY2Fz ZSBaZXJvOgotKyAgICAgIHN1YlB0cihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRlc3Qs IDApOwotKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJvID8gTm90RXF1YWwgOiBFcXVhbCwgbGFi ZWwpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNpZ25lZDoKLSsgICAgY2FzZSBOb3RTaWdu ZWQ6Ci0rICAgICAgc3ViUHRyKHNyYywgZGVzdCk7Ci0rICAgICAgYXNfY21wZGkoZGVzdCwgMCk7 Ci0rICAgICAgbWFfYihjb25kID09IFNpZ25lZCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVx dWFsLCBsYWJlbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NS QVNIKCJOWUkiKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoTXVs UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VS VChjb25kID09IEFzc2VtYmxlcjo6T3ZlcmZsb3cpOwotKyAgYXNfbXVsbGRvKGRlc3QsIGRlc3Qs IHNyYyk7Ci0rICBtYV9iKE92ZXJmbG93LCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaE5lZ1B0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgcmVnLCBMYWJlbCog bGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7Ci0rICBuZWdQdHIocmVn KTsKLSsgIGJyYW5jaFB0cihBc3NlbWJsZXI6OkVxdWFsLCByZWcsIEltbVdvcmQoaW50cHRyX3Qo SU5UUFRSX01JTikpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRlY0Jy YW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgc3ViUHRyKHJo cywgbGhzKTsKLSsgIGJyYW5jaFB0cihjb25kLCBsaHMsIEltbTMyKDApLCBsYWJlbCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9 PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8Ci0rICAgICAgICAgICAgIGNvbmQgPT0gTm90 U2lnbmVkKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBpZiAobGhzICE9IHJocykg ewotKyAgICBhc19hbmRfKHNjcmF0Y2gsIGxocywgcmhzKTsKLSsgICAgYXNfZXh0c3dfcmMoc2Ny YXRjaCwgc2NyYXRjaCk7ICAvLyBDUjAgc2V0IG9uIHNpZ24tZXh0ZW5kZWQgaTMyOyBmb2xkcyBj bXBkaQotKyAgfSBlbHNlIHsKLSsgICAgYXNfZXh0c3dfcmMoc2NyYXRjaCwgbGhzKTsKLSsgIH0K LSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2Vt Ymxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2UsIGxhYmVsKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBs aHMsIEltbTMyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8g fHwgY29uZCA9PSBTaWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGlmIChpc191aW50TihyaHMudmFsdWUsIDE2 KSkgewotKyAgICBhc19hbmRpX3JjKHNjcmF0Y2gsIGxocywgcmhzLnZhbHVlKTsKLSsgICAgLy8g YW5kaV9yYyBzZXRzIENSMCBvbiB0aGUgbWFza2VkIHZhbHVlLCBidXQgb25seSB0aGUgbG93IDE2 IGJpdHMgbWF0dGVyCi0rICAgIC8vIHNpbmNlIHJocyBpcyBhIDE2LWJpdCB1bnNpZ25lZCBtYXNr IOKAlCBzaWduIG9mIHRoZSBpMzIgcmVzdWx0IGlzIGFsd2F5cwotKyAgICAvLyAwLCBzbyBDUjBb bHRdIGlzIGFsd2F5cyAwLiBGb3IgU2lnbmVkL05vdFNpZ25lZCBjb25kaXRpb25zIHRoZSBhbnN3 ZXIKLSsgICAgLy8gaXMgZml4ZWQ7IGZvciBaZXJvL05vblplcm8gQ1IwW2VxXSBpcyBjb3JyZWN0 LgotKyAgfSBlbHNlIHsKLSsgICAgbW92ZTMyKHJocywgc2NyYXRjaCk7Ci0rICAgIGFzX2FuZF8o c2NyYXRjaCwgbGhzLCBzY3JhdGNoKTsKLSsgICAgYXNfZXh0c3dfcmMoc2NyYXRjaCwgc2NyYXRj aCk7ICAvLyBDUjAgc2V0IG9uIHNpZ24tZXh0ZW5kZWQgaTMyOyBmb2xkcyBjbXBkaQotKyAgfQot KyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1i bGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIG1hX2IoYmFzZSwgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJl c3MmIGxocywgSW1tMzIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9u WmVybyB8fCBjb25kID09IFNpZ25lZCB8fAotKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25l ZCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKGxocywgc2NyYXRjaCk7 Ci0rICAvLyBhbmQzMiBwaWNrcyB1cCB0aGUgcmx3aW5tIGNvbnRpZy1tYXNrIGZhc3QgcGF0aCBm b3Igbm9uLTE2LWJpdC1maXQKLSsgIC8vIGltbWVkaWF0ZXMgdGhhdCBhcmUgYSBjb250aWd1b3Vz IHJ1biBvZiAxLWJpdHMgKGNvbW1vbjogdGFnIG1hc2tzLAotKyAgLy8gaGVhZGVyIGJpdC1maWVs ZHMpLiBJdCBhbHNvIGVtaXRzIHRoZSB0cmFpbGluZyBleHRzdy4KLSsgIGFuZDMyKHJocywgc2Ny YXRjaCk7Ci0rICBhc19jbXBkaShzY3JhdGNoLCAwKTsKLSsgIENvbmRpdGlvbiBiYXNlID0gc3Rh dGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0r ICBtYV9iKGJhc2UsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VGVzdDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgcmhzLCBMYWJlbCogbGFiZWwpIHsK LSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09 IFNpZ25lZCB8fAotKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKCh1aW50cHRyX3QpbGhzLmFkZHIp LCBzY3JhdGNoKTsKLSsgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gsIDApLCBzY3JhdGNoKTsKLSsg IGFuZDMyKHJocywgc2NyYXRjaCk7Ci0rICBhc19jbXBkaShzY3JhdGNoLCAwKTsKLSsgIENvbmRp dGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29u ZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2UsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBj b25kID09IFNpZ25lZCB8fAotKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7Ci0rICBp ZiAobGhzID09IHJocykgewotKyAgICBhc19jbXBkaShsaHMsIDApOwotKyAgfSBlbHNlIHsKLSsg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAvLyBSZWNvcmQtZm9ybSBBTkQgc2V0 cyBDUjA7IG5vIGZvbGxvdy11cCBjbXBkaSBuZWVkZWQuCi0rICAgIGFzX2FuZF9fcmMoc2NyYXRj aCwgbGhzLCByaHMpOwotKyAgfQotKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25k aXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIG1hX2IoYmFzZSwg bGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHRyKENvbmRp dGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbTMyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IFpl cm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8Ci0rICAgICAgICAgICAg IGNvbmQgPT0gTm90U2lnbmVkKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBpZiAo aXNfdWludE4ocmhzLnZhbHVlLCAxNikpIHsKLSsgICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBsaHMs IHJocy52YWx1ZSk7Ci0rICB9IGVsc2UgewotKyAgICBtb3ZlMzIocmhzLCBzY3JhdGNoKTsKLSsg ICAgYXNfYW5kX19yYyhzY3JhdGNoLCBsaHMsIHNjcmF0Y2gpOyAgLy8gcmVjb3JkIGZvcm0gZm9s ZHMgdGhlIGNtcGRpCi0rICB9Ci0rICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRp dGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOwotKyAgbWFfYihiYXNlLCBs YWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RQdHIoQ29uZGl0 aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tV29yZCByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBa ZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAotKyAgICAgICAgICAg ICBjb25kID09IE5vdFNpZ25lZCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92 ZVB0cihyaHMsIHNjcmF0Y2gpOwotKyAgYXNfYW5kX19yYyhzY3JhdGNoLCBsaHMsIHNjcmF0Y2gp OwotKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNz ZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIG1hX2IoYmFzZSwgbGFiZWwpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBB ZGRyZXNzJiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiBy aHMsIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQ dHIobGhzLCBzY3JhdGNoKTsKLSsgIC8vIGFuZFB0ciBwaWNrcyB1cCB0aGUgcmx3aW5tIGNvbnRp Zy1tYXNrIGZhc3QgcGF0aCBmb3Igbm9uLTE2LWJpdC1maXQKLSsgIC8vIGltbWVkaWF0ZXMgdGhh dCBhcmUgYSBjb250aWd1b3VzIHJ1biBvZiAxLWJpdHMuCi0rICBhbmRQdHIocmhzLCBzY3JhdGNo KTsKLSsgIGFzX2NtcGRpKHNjcmF0Y2gsIDApOwotKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNf Y2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIG1h X2IoYmFzZSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 NjQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJocywgUmVnaXN0ZXIgdGVtcCwgTGFiZWwqIHN1Y2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0r ICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBT aWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIGFzX2FuZF9fcmMoc2NyYXRjaCwgbGhzLnJlZywgcmhzLnJlZyk7 Ci0rICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3Nl bWJsZXI6OkNvbmRpdGlvblplcm8pOwotKyAgaWYgKGZhaWwpIHsKLSsgICAgbWFfYihiYXNlLCBz dWNjZXNzKTsKLSsgICAganVtcChmYWlsKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hX2IoYmFzZSwg c3VjY2Vzcyk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3Q2 NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIEltbTY0IHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Ci0r ICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBT aWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCh1aW50NjRfdChyaHMudmFsdWUpKSwg c2NyYXRjaCk7Ci0rICBhc19hbmRfX3JjKHNjcmF0Y2gsIGxocy5yZWcsIHNjcmF0Y2gpOwotKyAg Q29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVy OjpDb25kaXRpb25aZXJvKTsKLSsgIGlmIChmYWlsKSB7Ci0rICAgIG1hX2IoYmFzZSwgc3VjY2Vz cyk7Ci0rICAgIGp1bXAoZmFpbCk7Ci0rICB9IGVsc2UgewotKyAgICBtYV9iKGJhc2UsIHN1Y2Nl c3MpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBWYWx1ZS10eXBlIGJyYW5jaCBmdW5j dGlvbnMKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0VW5kZWZpbmVkKENvbmRp dGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8 fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFn KEpTVkFMX1RBR19VTkRFRklORUQpLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0VW5kZWZpbmVkKENvbmRpdGlvbiBjb25k LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVP cGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFn KHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFn KEpTVkFMX1RBR19VTkRFRklORUQpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmJyYW5jaFRlc3RVbmRlZmluZWQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFk ZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBl eHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcs IEltbVRhZyhKU1ZBTF9UQUdfVU5ERUZJTkVEKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2hUZXN0VW5kZWZpbmVkKENvbmRpdGlvbiBjb25kLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVs KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFj dFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1U YWcoSlNWQUxfVEFHX1VOREVGSU5FRCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdEludDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9a X0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgQ29uZGl0aW9u IGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMyKSwgY29uZCk7Ci0rICBtYV9i KGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEludDMy KENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0 VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfSU5UMzIpLCBsYWJlbCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RJbnQzMihDb25kaXRpb24gY29uZCwg Y29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVn aXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RU YWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMyKSwgbGFiZWwpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50MzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0 IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0 ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWco Y29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMyKSwgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50MzJUcnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1 ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICB1bmJv eEludDMyKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwotKyAgbWFf YihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0RG91YmxlKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1P Wl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRpdGlv biBhY3R1YWwgPSAoY29uZCA9PSBFcXVhbCkgPyBCZWxvd09yRXF1YWwgOiBBYm92ZTsKLSsgIENv bmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19NQVhfRE9VQkxFKSwgYWN0 dWFsKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUZXN0RG91YmxlKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVl LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gp OwotKyAgYnJhbmNoVGVzdERvdWJsZShjb25kLCBzY3JhdGNoLCBsYWJlbCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3REb3VibGUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0 IEFkZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3Rl ciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdERvdWJs ZShjb25kLCB0YWcsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VGVzdERvdWJsZShDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRy ZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3REb3VibGUoY29uZCwgdGFnLCBsYWJlbCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3REb3VibGVUcnV0aHkoYm9vbCBi LCBGbG9hdFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgeHNfbGkoc2NyYXRjaCwgMCk7Ci0rICBhc19tdHZzcmQoU2NyYXRjaERvdWJsZVJlZywgc2Ny YXRjaCk7Ci0rICBhc19mY21wdSh2YWx1ZSwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBEb3VibGVD b25kaXRpb24gY29uZCA9IGIgPyBEb3VibGVOb3RFcXVhbCA6IERvdWJsZUVxdWFsT3JVbm9yZGVy ZWQ7Ci0rICBtYV9iKGNvbmQsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdE51bWJlcihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYWN0 dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3dPckVxdWFsIDogQWJvdmU7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcCh0YWcsIEltbTMyKEpTOjpkZXRhaWw6OlZhbHVlVXBwZXJJbmNsTnVtYmVy VGFnKSwgYWN0dWFsKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hUZXN0TnVtYmVyKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJh bmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUs IHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdE51bWJlcihjb25kLCBzY3JhdGNoLCBsYWJlbCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCb29sZWFuKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciB0YWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9 PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9U QUdfQk9PTEVBTiksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCb29sZWFuKENvbmRpdGlvbiBjb25kLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gp OwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX0JPT0xF QU4pLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCb29s ZWFuKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2Ny YXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19CT09M RUFOKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9v bGVhbihDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywg c2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19C T09MRUFOKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 Qm9vbGVhblRydXRoeShib29sIGIsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgdW5ib3hCb29sZWFuKHZhbHVlLCBzY3JhdGNo KTsKLSsgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwotKyAgbWFfYihiID8gTm90RXF1YWwgOiBFcXVh bCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3RyaW5n KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVh bCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1t VGFnKEpTVkFMX1RBR19TVFJJTkcpLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3RyaW5nKENvbmRpdGlvbiBjb25kLCBj b25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg c3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNo LCBJbW1UYWcoSlNWQUxfVEFHX1NUUklORyksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdFN0cmluZyhDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYg YWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4 dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywg SW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFRlc3RTdHJpbmcoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYg YWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4 dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywg SW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFRlc3RTdHJpbmdUcnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQm IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgdW5ib3hTdHJpbmco dmFsdWUsIHNjcmF0Y2gpOwotKyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgSlNTdHJpbmc6Om9m ZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoKTsKLSsgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwotKyAg bWFfYihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hUZXN0U3ltYm9sKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsg IE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRp dGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wpLCBjb25kKTsKLSsg IG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 U3ltYm9sKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOwotKyAgYnJh bmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX1NZTUJPTCksIGxhYmVs KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN5bWJvbChDb25kaXRp b24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsg IGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX1NZTUJPTCksIGxhYmVs KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN5bWJvbChDb25kaXRp b24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBi cmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wpLCBsYWJlbCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCaWdJbnQoQ29uZGl0aW9u IGNvbmQsIFJlZ2lzdGVyIHRhZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQg PT0gTm90RXF1YWwpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxf VEFHX0JJR0lOVCksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCaWdJbnQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVl T3BlcmFuZCYgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBzcGxpdFRhZyh2 YWx1ZSwgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhK U1ZBTF9UQUdfQklHSU5UKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUZXN0QmlnSW50KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhh ZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNW QUxfVEFHX0JJR0lOVCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdEJpZ0ludChDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhh ZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNW QUxfVEFHX0JJR0lOVCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdEJpZ0ludFRydXRoeShib29sIGIsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICB1bmJveEJpZ0ludCh2YWx1ZSwgc2Ny YXRjaCk7Ci0rICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCBCaWdJbnQ6Om9mZnNldE9mRGlnaXRM ZW5ndGgoKSksIHNjcmF0Y2gpOwotKyAgYXNfY21wd2koc2NyYXRjaCwgMCk7Ci0rICBtYV9iKGIg PyBOb3RFcXVhbCA6IEVxdWFsLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3ROdWxsKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJU KGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9IG1h X2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJl bCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3ROdWxsKENvbmRpdGlv biBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwg c2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19OVUxMKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TnVsbChDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVz cyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBl eHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcs IEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdE51bGwoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRk cmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0 VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRh ZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdE9iamVjdChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9 IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfT0JKRUNUKSwgY29uZCk7Ci0rICBtYV9iKGMs IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE9iamVjdChD b25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RU YWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19PQkpFQ1QpLCBsYWJlbCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RPYmplY3QoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfT0JKRUNUKSwgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0T2JqZWN0KENvbmRpdGlvbiBjb25kLCBj b25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfT0JKRUNUKSwgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHJpbWl0aXZlKENvbmRpdGlvbiBjb25k LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVP cGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFn KHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RQcmltaXRpdmUoY29uZCwgc2NyYXRjaCwg bGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0R0NUaGluZyhD b25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIGJyYW5jaFRlc3RHQ1Ro aW5nSW1wbChjb25kLCBhZGRyZXNzLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmJyYW5jaFRlc3RHQ1RoaW5nKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGFk ZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxh YmVsKSB7Ci0rICBicmFuY2hUZXN0R0NUaGluZ0ltcGwoY29uZCwgYWRkcmVzcywgbGFiZWwpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0R0NUaGluZyhDb25kaXRpb24g Y29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1 ZU9wZXJhbmQmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBicmFuY2hUZXN0R0NUaGluZ0ltcGwoY29uZCwgYWRkcmVz cywgbGFiZWwpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2hUZXN0R0NUaGluZ0ltcGwoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIGFk ZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1 YWwpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJh Y3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0g RXF1YWwpID8gQWJvdmVPckVxdWFsIDogQmVsb3c7Ci0rICBDb25kaXRpb24gYyA9Ci0rICAgICAg bWFfY21wKHRhZywgSW1tMzIoSlM6OmRldGFpbDo6VmFsdWVMb3dlckluY2xHQ1RoaW5nVGFnKSwg YWN0dWFsKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpicmFuY2hUZXN0UHJpbWl0aXZlKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsg IE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRp dGlvbiBhY3R1YWwgPSAoY29uZCA9PSBFcXVhbCkgPyBCZWxvdyA6IEFib3ZlT3JFcXVhbDsKLSsg IENvbmRpdGlvbiBjID0KLSsgICAgICBtYV9jbXAodGFnLCBJbW0zMihKUzo6ZGV0YWlsOjpWYWx1 ZVVwcGVyRXhjbFByaW1pdGl2ZVRhZyksIGFjdHVhbCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBjb25k LCBSZWdpc3RlciB0YWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90 RXF1YWwpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX01B R0lDKSwgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRy ZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0 VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRh ZyhKU1ZBTF9UQUdfTUFHSUMpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFn KGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhK U1ZBTF9UQUdfTUFHSUMpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOwot KyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX01BR0lDKSwg bGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TWFnaWMoQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIHZhbGFkZHIsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEpTV2h5TWFnaWMgd2h5LCBMYWJlbCogbGFiZWwpIHsKLSsgIHVp bnQ2NF90IG1hZ2ljID0gTWFnaWNWYWx1ZSh3aHkpLmFzUmF3Qml0cygpOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIodmFsYWRkciwgc2NyYXRjaCk7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3JkKG1hZ2ljKSwgY29uZCk7Ci0rICBtYV9iKGMs IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE1hZ2ljKENv bmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIHZhbGFkZHIsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEpTV2h5TWFnaWMgd2h5LCBMYWJlbCogbGFiZWwpIHsKLSsg IHVpbnQ2NF90IG1hZ2ljID0gTWFnaWNWYWx1ZSh3aHkpLmFzUmF3Qml0cygpOwotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIodmFsYWRkciwgc2NyYXRjaCk7Ci0rICBDb25k aXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3JkKG1hZ2ljKSwgY29uZCk7Ci0rICBtYV9i KGMsIGxhYmVsKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdFZhbHVlKENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBsaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYg cmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25k ID09IE5vdEVxdWFsKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxo cywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMudmFsdWVS ZWcoKSwgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8g VGVzdC1zZXQgZnVuY3Rpb25zCi0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dGVzdE51bWJlclNldChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAg TU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3Jh dGNoKTsKLSsgIENvbmRpdGlvbiBhY3R1YWwgPSAoY29uZCA9PSBFcXVhbCkgPyBCZWxvd09yRXF1 YWwgOiBBYm92ZTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tMzIoSlM6OmRldGFp bDo6VmFsdWVVcHBlckluY2xOdW1iZXJUYWcpLCBhY3R1YWwpOwotKyAgbWFfY21wX3NldChkZXN0 LCBjKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dGVzdEJvb2xlYW5TZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHNyYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhzcmMsIHNjcmF0Y2gpOwot KyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX0JPT0xFQU4pLCBj b25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3RTdHJpbmdTZXQoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IFQmIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVx dWFsKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRy YWN0VGFnKHNyYywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRh ZyhKU1ZBTF9UQUdfU1RSSU5HKSwgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30K LSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0U3lt Ym9sU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBzcmMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0g RXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhzcmMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9u IGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX1NZTUJPTCksIGNvbmQpOwotKyAgbWFf Y21wX3NldChkZXN0LCBjKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6dGVzdEJpZ0ludFNldChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgc3Jj LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewot KyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBz Y3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19C SUdJTlQpLCBjb25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKy8vIENvbXB1dGVkIGFkZHJlc3MgLyBjb25kaXRpb25hbCBtb3ZlIC8gY29uZGl0aW9uYWwg bG9hZAotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRvQ29tcHV0ZWRBZGRyZXNzKGNv bnN0IEJhc2VJbmRleCYgYWRkcikgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWRQdHIoYWRkciwgc2NyYXRjaCk7Ci0rICBicmFuY2goc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMs IEltbTMyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBj b25kLCB0cnVlKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMs IFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhz LCBjb25kLCB0cnVlKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTW92ZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBs aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgcmhz LCBSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihyaHMsIHNj cmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kLCB0cnVl KTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmNtcDMyTW92ZVB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQsIHRy dWUpOwotKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y21wUHRyTW92ZVB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0z MiByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgSW1tV29yZChp bnQ2NF90KHJocy52YWx1ZSkpLCBjb25kKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0ck1vdmVQdHIoQ29uZGl0aW9uIGNv bmQsIFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBDb25kaXRpb24g YyA9IG1hX2NtcChsaHMsIHJocywgY29uZCk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJNb3ZlUHRyKENvbmRpdGlvbiBj b25kLCBSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBZGRyZXNzJiByaHMsIFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICBsb2FkUHRyKHJocywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMs IHNjcmF0Y2gsIGNvbmQpOwotKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBjKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMzJMb2FkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy IGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBy aHMsIGNvbnN0IEFkZHJlc3MmIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMy KHJocywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNv bmQsIHRydWUpOwotKyAgLy8gQ29uZGl0aW9uYWwgbG9hZDogbG9hZCBpbnRvIHNjcmF0Y2gsIHRo ZW4gaXNlbC4KLSsgIGxvYWQzMihzcmMsIHNjcmF0Y2gpOwotKyAgbWFfY21wX21vdmUoZGVzdCwg c2NyYXRjaCwgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTG9hZDMyKENv bmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK LSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKLSsgIG1hX2NtcF9t b3ZlKGRlc3QsIHNjcmF0Y2gsIGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAz MkxvYWQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBk ZXN0KSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKHNyYywgc2NyYXRjaCk7Ci0rICBt YV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y21wMzJMb2FkUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIEltbTMy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYg c3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9h ZDMyKGxocywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMs IGNvbmQsIHRydWUpOwotKyAgbG9hZFB0cihzcmMsIHNjcmF0Y2gpOwotKyAgbWFfY21wX21vdmUo ZGVzdCwgc2NyYXRjaCwgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3QzMkxv YWRQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHIsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiBtYXNrLCBjb25zdCBBZGRyZXNzJiBzcmMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBN T1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8pOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihhZGRyLCBzY3JhdGNoKTsKLSsgIGlmIChpc191aW50 TihtYXNrLnZhbHVlLCAxNikpIHsKLSsgICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBzY3JhdGNoLCBt YXNrLnZhbHVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIFVzZSBhIG5lc3RlZCBzY29wZSBzbyBz Y3JhdGNoMiBpcyByZWxlYXNlZCBiZWZvcmUgbG9hZFB0ciBiZWxvdy4KLSsgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMyKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaDIg PSB0ZW1wczIuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIobWFzaywgc2NyYXRjaDIpOwotKyAgICBh c19hbmRfX3JjKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsgIC8vIHJlY29yZCBmb3JtIGZv bGRzIHRoZSBjbXBkaQotKyAgfQotKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25k aXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIGxvYWRQdHIoc3Jj LCBzY3JhdGNoKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNjcmF0Y2gsIGJhc2UpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0MzJNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBSZWdp c3RlciBvcGVyYW5kLCBJbW0zMiBtYXNrLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQg PT0gWmVybyB8fCBjb25kID09IE5vblplcm8pOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgIGlmIChpc191aW50TihtYXNrLnZhbHVlLCAxNikpIHsKLSsgICAgYXNfYW5kaV9yYyhzY3Jh dGNoLCBvcGVyYW5kLCBtYXNrLnZhbHVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1vdmUzMihtYXNr LCBzY3JhdGNoKTsKLSsgICAgYXNfYW5kX19yYyhzY3JhdGNoLCBvcGVyYW5kLCBzY3JhdGNoKTsg IC8vIHJlY29yZCBmb3JtIGZvbGRzIHRoZSBjbXBkaQotKyAgfQotKyAgQ29uZGl0aW9uIGJhc2Ug PSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJv KTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYmFzZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnRlc3QzMk1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFk ZHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW0zMiBtYXNrLCBSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8 IGNvbmQgPT0gTm9uWmVybyk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMy KGFkZHIsIHNjcmF0Y2gpOwotKyAgYW5kMzIobWFzaywgc2NyYXRjaCk7Ci0rICBhc19jbXBkaShz Y3JhdGNoLCAwKTsKLSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihj b25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBz cmMsIGJhc2UpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBTcGVjdHJlIG1pdGlnYXRpb25zCi0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZU1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBkZXN0KSB7Ci0rICAvLyBBc3N1bWVzIGNvbXBhcmUgYWxyZWFkeSBpc3N1ZWQuCi0rICBDb25k aXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oCi0rICAgICAgY29uZCAmIH4oQXNz ZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCB8IEFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybykpOwot KyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBiYXNlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6c3BlY3RyZVplcm9SZWdpc3RlcihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgc2NyYXRj aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRl c3QpIHsKLSsgIC8vIEFzc3VtZXMgY29tcGFyZSBhbHJlYWR5IGlzc3VlZC4gWmVybyBkZXN0IGlm IGNvbmRpdGlvbiBpcyB0cnVlLgotKyAgQ29uZGl0aW9uIG9yaWdCYXNlID0gc3RhdGljX2Nhc3Q8 Q29uZGl0aW9uPigKLSsgICAgICBjb25kICYgfihBc3NlbWJsZXI6OkNvbmRpdGlvblVuc2lnbmVk IHwgQXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKSk7Ci0rICAvLyBJZiBvcmlnaW5hbCBjb25kaXRp b24gaXMgdHJ1ZSwgd2Ugd2FudCBkZXN0PTAuCi0rICAvLyBpc2VsOiBpZiBjb25kaXRpb24gdHJ1 ZSwgc2VsZWN0IHplcm87IGVsc2Uga2VlcCBkZXN0LgotKyAgeHNfbGkoc2NyYXRjaCwgMCk7Ci0r ICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBvcmlnQmFzZSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnNwZWN0cmVCb3VuZHNDaGVjazMyKFJlZ2lzdGVyIGluZGV4LCBSZWdpc3Rl ciBsZW5ndGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWF5YmVTY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBmYWlsdXJlKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChpbmRleCwg bGVuZ3RoLCBCZWxvdywgdHJ1ZSk7Ci0rICBpZiAoZmFpbHVyZSkgewotKyAgICBtYV9iKEludmVy dENvbmRpdGlvbihjKSwgZmFpbHVyZSk7Ci0rICB9Ci0rICBpZiAobWF5YmVTY3JhdGNoICE9IElu dmFsaWRSZWcpIHsKLSsgICAgeHNfbGkobWF5YmVTY3JhdGNoLCAwKTsKLSsgICAgbWFfY21wX21v dmUoaW5kZXgsIG1heWJlU2NyYXRjaCwgSW52ZXJ0Q29uZGl0aW9uKGMpKTsKLSsgIH0KLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZUJvdW5kc0NoZWNrMzIoUmVnaXN0ZXIgaW5k ZXgsIGNvbnN0IEFkZHJlc3MmIGxlbmd0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBtYXliZVNjcmF0Y2gsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWx1cmUpIHsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIobGVuZ3RoLCBzY3JhdGNoKTsKLSsgIHNwZWN0cmVCb3Vu ZHNDaGVjazMyKGluZGV4LCBzY3JhdGNoLCBtYXliZVNjcmF0Y2gsIGZhaWx1cmUpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdHJlQm91bmRzQ2hlY2tQdHIoUmVnaXN0ZXIgaW5k ZXgsIFJlZ2lzdGVyIGxlbmd0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbHVyZSkgewotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoaW5kZXgsIGxlbmd0aCwgQmVsb3cpOwotKyAgaWYgKGZhaWx1cmUpIHsKLSsgICAgbWFf YihJbnZlcnRDb25kaXRpb24oYyksIGZhaWx1cmUpOwotKyAgfQotKyAgaWYgKG1heWJlU2NyYXRj aCAhPSBJbnZhbGlkUmVnKSB7Ci0rICAgIHhzX2xpKG1heWJlU2NyYXRjaCwgMCk7Ci0rICAgIG1h X2NtcF9tb3ZlKGluZGV4LCBtYXliZVNjcmF0Y2gsIEludmVydENvbmRpdGlvbihjKSk7Ci0rICB9 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVCb3VuZHNDaGVja1B0cihSZWdp c3RlciBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQWRkcmVzcyYgbGVuZ3RoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBtYXliZVNjcmF0Y2gsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsdXJlKSB7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgbG9hZFB0cihsZW5ndGgsIHNjcmF0Y2gpOwotKyAgc3BlY3RyZUJvdW5k c0NoZWNrUHRyKGluZGV4LCBzY3JhdGNoLCBtYXliZVNjcmF0Y2gsIGZhaWx1cmUpOwotK30KLSsK LSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsvLyBNZW1vcnkgYWNjZXNzIHByaW1pdGl2ZXMKLSsKLStGYXVsdGluZ0Nv ZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB ZGRyZXNzJiBhZGRyKSB7Ci0rICBNT1pfQVNTRVJUKGFkZHIuYmFzZSAhPSByMCk7Ci0rICBpZiAo aXNfaW50TihhZGRyLm9mZnNldCwgMTYpKSB7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZz ZXQoYXNfc3RmcyhzcmMsIGFkZHIuYmFzZSwgYWRkci5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsg IH0KLSsgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkci5vZmZzZXQs IDM0KSkgewotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgYXNfcHN0 ZnMoc3JjLCBhZGRyLmJhc2UsIChpbnQ2NF90KWFkZHIub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsg ICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIG1vdmVQdHIoSW1tV29yZChhZGRyLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgcmV0dXJu IEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGZzeChzcmMsIGFkZHIuYmFzZSwgc2NyYXRjaCkuZ2V0 T2Zmc2V0KCkpOwotK30KLSsKLStGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0 b3JlRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIGFkZHIpIHsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhhZGRyLCBzY3Jh dGNoKTsKLSsgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RmcyhzcmMsIHNjcmF0Y2gs IDApLmdldE9mZnNldCgpKTsKLSt9Ci0rCi0rRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1i bGVyOjpzdG9yZURvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGFkZHIpIHsKLSsgIE1P Wl9BU1NFUlQoYWRkci5iYXNlICE9IHIwKTsKLSsgIGlmIChpc19pbnROKGFkZHIub2Zmc2V0LCAx NikpIHsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGZkKHNyYywgYWRkci5i YXNlLCBhZGRyLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgaWYgKEhhc1BPV0VSMTAo KSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRyLm9mZnNldCwgMzQpKSB7Ci0rICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICBhc19wc3RmZChzcmMsIGFkZHIuYmFzZSwgKGlu dDY0X3QpYWRkci5vZmZzZXQsIC8qUj0qL2ZhbHNlKQotKyAgICAgICAgICAgIC5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3Jk KGFkZHIub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFz X3N0ZmR4KHNyYywgYWRkci5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rfQotKwotK0Zh dWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVEb3VibGUoRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBCYXNlSW5kZXgmIGFkZHIpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBj b21wdXRlRWZmZWN0aXZlQWRkcmVzcyhhZGRyLCBzY3JhdGNoKTsKLSsgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoYXNfc3RmZChzcmMsIHNjcmF0Y2gsIDApLmdldE9mZnNldCgpKTsKLSt9Ci0r Ci0rRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZUZsb2F0MTYoRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQWRkcmVzcyYgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pfQVNTRVJUKEhhc1BP V0VSOSgpKTsKLSsgIGlmIChkZXN0Lm9mZnNldCA9PSAwKSB7Ci0rICAgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoYXNfc3R4c2loeChzcmMsIHIwLCBkZXN0LmJhc2UpLmdldE9mZnNldCgpKTsK LSsgIH0KLSsgIGlmIChpc19pbnROKGRlc3Qub2Zmc2V0LCAxNikpIHsKLSsgICAgYXNfYWRkaSh0 ZW1wLCBkZXN0LmJhc2UsIGRlc3Qub2Zmc2V0KTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19zdHhzaWh4KHNyYywgcjAsIHRlbXApLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIG1v dmVQdHIoSW1tV29yZChkZXN0Lm9mZnNldCksIHRlbXApOwotKyAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldChhc19zdHhzaWh4KHNyYywgZGVzdC5iYXNlLCB0ZW1wKS5nZXRPZmZzZXQoKSk7Ci0r fQotKwotK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVGbG9hdDE2KEZs b2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pfQVNTRVJU KEhhc1BPV0VSOSgpKTsKLSsgIGNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGRlc3QsIHRlbXApOwot KyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHhzaWh4KHNyYywgcjAsIHRlbXApLmdl dE9mZnNldCgpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWVtb3J5QmFycmllcihN ZW1vcnlCYXJyaWVyIGJhcnJpZXIpIHsKLSsgIGlmIChiYXJyaWVyLmlzTm9uZSgpKSB7Ci0rICAg IHJldHVybjsKLSsgIH0KLSsgIGlmIChiYXJyaWVyLmhhc1N0b3JlTG9hZCgpIHx8IGJhcnJpZXIu aGFzU3luYygpKSB7Ci0rICAgIGFzX3N5bmMoKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX2x3c3lu YygpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBDbGFtcGluZyBmdW5jdGlvbnMKLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbGFtcEludFRvVWludDgoUmVnaXN0ZXIgcmVnKSB7Ci0r ICAvLyBDbGFtcCB0byBbMCwgMjU1XS4KLSsgIExhYmVsIGRvbmU7Ci0rICBhc19jbXB3aShyZWcs IDI1NSk7Ci0rICBtYV9iKExlc3NUaGFuT3JFcXVhbCwgJmRvbmUpOwotKyAgbW92ZTMyKEltbTMy KDI1NSksIHJlZyk7Ci0rICBiaW5kKCZkb25lKTsKLSsgIExhYmVsIHBvc2l0aXZlOwotKyAgYXNf Y21wd2kocmVnLCAwKTsKLSsgIG1hX2IoR3JlYXRlclRoYW5PckVxdWFsLCAmcG9zaXRpdmUpOwot KyAgbW92ZTMyKEltbTMyKDApLCByZWcpOwotKyAgYmluZCgmcG9zaXRpdmUpOwotK30KLSsKLSsv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsvLyBVbmJveGluZwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZhbGxpYmxl VW5ib3hQdHIoY29uc3QgVmFsdWVPcGVyYW5kJiBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlVHlwZSB0eXBlLCBMYWJlbCog ZmFpbCkgewotKyAgTU9aX0FTU0VSVCh0eXBlID09IEpTVkFMX1RZUEVfT0JKRUNUIHx8IHR5cGUg PT0gSlNWQUxfVFlQRV9TVFJJTkcgfHwKLSsgICAgICAgICAgICAgdHlwZSA9PSBKU1ZBTF9UWVBF X1NZTUJPTCB8fCB0eXBlID09IEpTVkFMX1RZUEVfQklHSU5UKTsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBzcGxpdFRhZyhzcmMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RZUEVfVE9fVEFHKHR5cGUpKSwgTm90RXF1YWwp OwotKyAgbWFfYihjLCBmYWlsKTsKLSsgIHVuYm94Tm9uRG91YmxlKHNyYywgZGVzdCwgdHlwZSk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZhbGxpYmxlVW5ib3hQdHIoY29uc3QgQWRk cmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNWYWx1ZVR5cGUgdHlwZSwgTGFiZWwqIGZhaWwpIHsKLSsgIGxvYWRWYWx1ZShz cmMsIFZhbHVlT3BlcmFuZChkZXN0KSk7Ci0rICBmYWxsaWJsZVVuYm94UHRyKFZhbHVlT3BlcmFu ZChkZXN0KSwgZGVzdCwgdHlwZSwgZmFpbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmZhbGxpYmxlVW5ib3hQdHIoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlVHlwZSB0eXBlLCBM YWJlbCogZmFpbCkgewotKyAgbG9hZFZhbHVlKHNyYywgVmFsdWVPcGVyYW5kKGRlc3QpKTsKLSsg IGZhbGxpYmxlVW5ib3hQdHIoVmFsdWVPcGVyYW5kKGRlc3QpLCBkZXN0LCB0eXBlLCBmYWlsKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUFkZFN1YkkxMjhISTY0KFJlZ2lzdGVy IGxoc0xvLCBSZWdpc3RlciBsaHNIaSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgcmhzTG8sIFJlZ2lzdGVyIHJoc0hpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQsIGJvb2wgaXNBZGQpIHsK LSsgIE1PWl9SRUxFQVNFX0FTU0VSVChvdXRwdXQgIT0gbGhzTG8gJiYgb3V0cHV0ICE9IGxoc0hp ICYmIG91dHB1dCAhPSByaHNMbyAmJgotKyAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAhPSBy aHNIaSk7Ci0rICBpZiAoaXNBZGQpIHsKLSsgICAgLy8gYWRkYyBzZXRzIENBIChjYXJyeSksIGFk ZGUgdXNlcyBpdC4KLSsgICAgYXNfYWRkYyhvdXRwdXQsIGxoc0xvLCByaHNMbyk7ICAvLyBvdXRw dXQgPSBsaHNMbyArIHJoc0xvLCBDQSA9IGNhcnJ5Ci0rICAgIGFzX2FkZGUob3V0cHV0LCBsaHNI aSwgcmhzSGkpOyAgLy8gb3V0cHV0ID0gbGhzSGkgKyByaHNIaSArIENBCi0rICB9IGVsc2Ugewot KyAgICAvLyBzdWJmYzogcmQgPSByYiAtIHJhLCBzZXRzIENBIChib3Jyb3cgY29tcGxlbWVudCku Ci0rICAgIC8vIHN1YmZlOiByZCA9IHJiICsgfnJhICsgQ0EuCi0rICAgIGFzX3N1YmZjKG91dHB1 dCwgcmhzTG8sIGxoc0xvKTsgIC8vIG91dHB1dCA9IGxoc0xvIC0gcmhzTG8sIENBID0gfmJvcnJv dwotKyAgICBhc19zdWJmZShvdXRwdXQsIHJoc0hpLCBsaHNIaSk7ICAvLyBvdXRwdXQgPSBsaHNI aSAtIHJoc0hpIC0gYm9ycm93Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondh c21NdWxJNjRXaWRlSEk2NChSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0LCBib29sIGlzU2ln bmVkKSB7Ci0rICBpZiAoaXNTaWduZWQpIHsKLSsgICAgYXNfbXVsaGQob3V0cHV0LCBsaHMsIHJo cyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19tdWxoZHUob3V0cHV0LCBsaHMsIHJocyk7Ci0rICB9 Ci0rfQotKwotKy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlCi0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlclBQQzY0Q29tcGF0OjppbmNyZW1lbnRJbnQzMlZhbHVlKGNvbnN0IEFkZHJlc3Mm IGFkZHIpIHsKLSsgIGFzTWFzbSgpLmFkZDMyKEltbTMyKDEpLCBhZGRyKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpyZXRuKEltbTMyIG4pIHsKLSsgIC8vIExvYWQg cmV0dXJuIGFkZHJlc3MgZnJvbSBbU1AsMF0gZmlyc3QsIHRoZW4gYWRqdXN0IFNQLCB0aGVuIHJl dHVybi4KLSsgIC8vIE11c3QgbG9hZCBSQSBiZWZvcmUgYWRqdXN0aW5nIFNQIChsaWtlIGxvb25n NjQpLCBzaW5jZSB0aGUgUkEgaXMgYXQKLSsgIC8vIHRoZSBjdXJyZW50IHRvcCBvZiBzdGFjaywg bm90IGF0IFNQK24uCi0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgYXNfbGQoc2NyYXRjaCwg U3RhY2tQb2ludGVyLCAwKTsKLSsgIGlmIChuLnZhbHVlICE9IDApIHsKLSsgICAgYXNNYXNtKCku YWRkUHRyKEltbTMyKG4udmFsdWUpLCBTdGFja1BvaW50ZXIpOwotKyAgfQotKyAgeHNfbXRscihz Y3JhdGNoKTsKLSsgIGFzX2JscigpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBUZW1wbGF0ZSBz cGVjaWFsaXphdGlvbnMgKG91dHNpZGUgY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUpCi0rCi0r dGVtcGxhdGUgPD4KLStpbmxpbmUgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wUHRyU2V0KEFzc2Vt Ymxlcjo6Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW1tUHRyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2NtcF9zZXQo ZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNtcFB0clNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIHJocywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIocmhzLCBzY3Jh dGNoKTsKLSsgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3JhdGNoLCBj b25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5s aW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0clNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBj b25kLCBBZGRyZXNzIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQot KwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyU2V0KEFz c2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIocmhzLCBzY3JhdGNoKTsKLSsgIEFzc2VtYmxl cjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kLCB0cnVlKTsKLSsgIG1h X2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDw+Ci0raW5saW5lIHZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNtcDMyU2V0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg bGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByaHMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIobGhz LCBzY3JhdGNoKTsKLSsgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwg cmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBs YXRlIDw+Ci0raW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyU2V0KEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbW0zMiByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKLSsgIEFzc2VtYmxlcjo6Q29uZGl0aW9u IGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2NtcF9zZXQoZGVz dCwgYyk7Ci0rfQotKwotKy8ve3t7IGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gU0lNRCBsb2FkL3N0b3JlICgxMjgtYml0KQotKwotK0ZhdWx0aW5nQ29kZU9mZnNl dCBNYWNyb0Fzc2VtYmxlcjo6bG9hZFVuYWxpZ25lZFNpbWQxMjgoY29uc3QgQWRkcmVzcyYgc3Jj LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7Ci0rICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludHB0cl90KXNy Yy5vZmZzZXQsIDM0KSkgewotKyAgICAvLyBQT1dFUjEwIHByZWZpeGVkIGxvYWQg4oCUIG5hdHVy YWwtTEUgYnl0ZSBvcmRlciwgbm8gR1BSIHNjcmF0Y2guCi0rICAgIHJldHVybiBGYXVsdGluZ0Nv ZGVPZmZzZXQoCi0rICAgICAgICBhc19wbHh2KGRlc3QuZW5jb2RpbmcoKSwgc3JjLmJhc2UsIChp bnQ2NF90KXNyYy5vZmZzZXQsIC8qUj0qL2ZhbHNlKQotKyAgICAgICAgICAgIC5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgLy8gUE9XRVI5OiBseHZ4IChY LWZvcm0sIGluZGV4ZWQpIGxvYWRzIDEyOCBiaXRzIGluIGNvcnJlY3QgTEUgb3JkZXIuCi0rICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGlmIChzcmMub2Zmc2V0 ID09IDApIHsKLSsgICAgICAvLyBSQT0wIG1lYW5zICJ1c2UgMCBhcyBiYXNlIiBpbiBpbmRleGVk IGZvcm1zLCBzbyB1c2UgcjAgZW5jb2RpbmcuCi0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19seHZ4KGRlc3QsIHIwLCBzcmMuYmFzZSkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0r ICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2eChkZXN0LCBzcmMuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zm c2V0KCkpOwotKyAgfQotKyAgLy8gUE9XRVI4OiBseHZkMnggbG9hZHMgd2l0aCBkb3VibGV3b3Jk IHN3YXAgb24gTEUuIEZpeCB3aXRoIHh4cGVybWRpLgotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBmY287Ci0rICBpZiAoc3JjLm9m ZnNldCA9PSAwKSB7Ci0rICAgIGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldChhc19seHZkMngoZGVz dCwgcjAsIHNyYy5iYXNlKS5nZXRPZmZzZXQoKSk7Ci0rICB9IGVsc2UgewotKyAgICBtb3ZlUHRy KEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICBmY28gPSBGYXVsdGluZ0NvZGVP ZmZzZXQoYXNfbHh2ZDJ4KGRlc3QsIHNyYy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0r ICB9Ci0rICBhc194eHBlcm1kaShkZXN0LCBkZXN0LCBkZXN0LCAyKTsKLSsgIHJldHVybiBmY287 Ci0rfQotKwotK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6bG9hZFVuYWxpZ25l ZFNpbWQxMjgoY29uc3QgQmFzZUluZGV4JiBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNj cmF0Y2gpOwotKyAgaWYgKHNyYy5vZmZzZXQgIT0gMCkgewotKyAgICAvLyBhZGRQdHIgcGlja3Mg dXAgUE9XRVIxMCBwYWRkaSAoMSBwcmVmaXhlZCBpbnNuKSB3aGVuIGF2YWlsYWJsZTsKLSsgICAg Ly8gZmFsbHMgYmFjayB0byBtb3ZlUHRyK2FkZCBvbiBQOS9QOC4gRHJvcHMgdGhlIGV4cGxpY2l0 IHNjcmF0Y2gyLgotKyAgICBhZGRQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgc2NyYXRjaCk7Ci0r ICB9Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNl dChhc19seHZ4KGRlc3QsIHIwLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVs dGluZ0NvZGVPZmZzZXQgZmNvKGFzX2x4dmQyeChkZXN0LCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0 KCkpOwotKyAgYXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwgZGVzdCwgMik7Ci0rICByZXR1cm4gZmNv OwotK30KLSsKLStGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlVW5hbGln bmVkU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBpZiAoSGFzUE9X RVIxMCgpICYmIGlzX2ludE4oKGludHB0cl90KWRlc3Qub2Zmc2V0LCAzNCkpIHsKLSsgICAgLy8g UE9XRVIxMCBwcmVmaXhlZCBzdG9yZSDigJQgbmF0dXJhbC1MRSBieXRlIG9yZGVyLCBubyBHUFIg c2NyYXRjaC4KLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgIGFzX3Bz dHh2KHNyYy5lbmNvZGluZygpLCBkZXN0LmJhc2UsIChpbnQ2NF90KWRlc3Qub2Zmc2V0LCAvKlI9 Ki9mYWxzZSkKLSsgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgaWYgKEhhc1BP V0VSOSgpKSB7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAg IGlmIChkZXN0Lm9mZnNldCA9PSAwKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNl dChhc19zdHh2eChzcmMsIHIwLCBkZXN0LmJhc2UpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAg ICBtb3ZlUHRyKEltbVdvcmQoZGVzdC5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldChhc19zdHh2eChzcmMsIGRlc3QuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zm c2V0KCkpOwotKyAgfQotKyAgLy8gUE9XRVI4OiBzdHh2ZDJ4IHN0b3JlcyB3aXRoIGRvdWJsZXdv cmQgc3dhcCBvbiBMRS4KLSsgIC8vIFN3YXAgYmVmb3JlIHN0b3JlLCB0aGVuIHN3YXAgYmFjayB0 byByZXN0b3JlIHRoZSByZWdpc3Rlci4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEy OCgqdGhpcyk7Ci0rICBhc194eHBlcm1kaShzY3JhdGNoMTI4LCBzcmMsIHNyYywgMik7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0 IGZjbzsKLSsgIGlmIChkZXN0Lm9mZnNldCA9PSAwKSB7Ci0rICAgIGZjbyA9IEZhdWx0aW5nQ29k ZU9mZnNldChhc19zdHh2ZDJ4KHNjcmF0Y2gxMjgsIHIwLCBkZXN0LmJhc2UpLmdldE9mZnNldCgp KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChkZXN0Lm9mZnNldCksIHNjcmF0 Y2gpOwotKyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICBhc19zdHh2ZDJ4 KHNjcmF0Y2gxMjgsIGRlc3QuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAg cmV0dXJuIGZjbzsKLSt9Ci0rCi0rRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpz dG9yZVVuYWxpZ25lZFNpbWQxMjgoCi0rICAgIEZsb2F0UmVnaXN0ZXIgc3JjLCBjb25zdCBCYXNl SW5kZXgmIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBjb21wdXRlU2Nh bGVkQWRkcmVzcyhkZXN0LCBzY3JhdGNoKTsKLSsgIGlmIChkZXN0Lm9mZnNldCAhPSAwKSB7Ci0r ICAgIGFkZFB0cihJbW1Xb3JkKGRlc3Qub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICB9Ci0rICBpZiAo SGFzUE9XRVI5KCkpIHsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHh2eChz cmMsIHIwLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBTY3JhdGNoU2ltZDEyOFNj b3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwotKyAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgc3JjLCBz cmMsIDIpOwotKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHh2ZDJ4KHNjcmF0Y2gx MjgsIHIwLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFNJ TUQgb3BlcmF0aW9ucwotKy8vCi0rLy8gU2NyYXRjaCByZWdpc3RlciBjb252ZW50aW9ucyBmb3Ig U0lNRCBoZWxwZXJzIChyZWFkIHRoaXMgYmVmb3JlIHdyaXRpbmcKLSsvLyBhIG5ldyBvbmUpOgot Ky8vCi0rLy8gMS4gYFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcylgIOKAlCBhY3F1 aXJlcyB2MCAoPSBWUjAgPSBWU1IzMiwKLSsvLyAgICBub24tYWxsb2NhdGFibGUpLiBDb25zdHJ1 Y3RlZCBhcyB7RmxvYXRSZWdpc3RlcnM6OmYwLCBTaW1kMTI4fSBzbwotKy8vICAgIGVuY29kaW5n KCkgPSAwICsgMzIgPSAzMiAocGVyIEFyY2hpdGVjdHVyZS1wcGM2NC5oKS4gRGVmYXVsdCB0ZW1w LgotKy8vICAgIE9uZSBzY29wZSBhdCBhIHRpbWUgcGVyIGhlbHBlci4gU2FmZSB0byBwYXNzIHRv IGFueSBWTVgvVlNYCi0rLy8gICAgaW5zdHJ1Y3Rpb247IHRoZSBhbGxvY2F0b3IgbmV2ZXIgcGxh Y2VzIGEgbGl2ZSB2MTI4IGluIHYwLgotKy8vCi0rLy8gMi4gKipEbyBOT1QqKiB3cml0ZSB0byBW UjEuLlZSMzEgKD0gVlNSMzMuLlZTUjYzKSB3aXRob3V0IGEgTG93ZXJpbmcKLSsvLyAgICB0ZW1w LiBWUjEuLlZSMzEgYXJlIGFsbG9jYXRhYmxlOyBhIGxpdmUgd2FzbSB2MTI4IG1heSBiZSBzaXR0 aW5nIGluCi0rLy8gICAgYW55IG9mIHRoZW0uIFVzZSBgU2NyYXRjaFNpbWQxMjhTY29wZWAgKHJ1 bGUgMSkgb3IgYSBMb3dlcmluZyB0ZW1wLgotKy8vCi0rLy8gMy4gKipSZWQtem9uZSBzdGFzaCoq IOKAlCB1c2UgYFJlZFpvbmVTdGFzaFNpbWQxMjhgIC8gYFJlZFpvbmVSZXN0b3JlU2ltZDEyOGAK LSsvLyAgICAoZGVjbGFyZWQganVzdCBiZWxvdykgd2hlbiBhIGhlbHBlciBnZW51aW5lbHkgbmVl ZHMgPjEgU0lNRCBzY3JhdGNoCi0rLy8gICAgQU5EIGFkZGluZyBhIExvd2VyaW5nIHRlbXAgd291 bGQgcmVxdWlyZSBMSVIgKyBNSVIgKyBDb2RlR2VuIGNoYW5nZXMuCi0rLy8gICAgRUxGdjIgcmVz ZXJ2ZXMgMjg4IGJ5dGVzIGJlbG93IFNQOyB3ZSB1c2UgYXQgbW9zdCAzMiAodHdvIDE2LWJ5dGUK LSsvLyAgICBzbG90cykuIExpdmUgdXNlcnM6IGBleHRBZGRQYWlyd2lzZUludCpgICgyIHNsb3Rz KSwgYHN3aXp6bGVJbnQ4eDE2YAotKy8vICAgICgxIHNsb3QpLCBgZG90SW50OHgxNkludDd4MTZU aGVuQWRkYCA0LWFyZyAoMSBzbG90KS4gSWYgeW91IGZpbmQKLSsvLyAgICB5b3Vyc2VsZiB3YW50 aW5nIGEgM3JkIHNsb3Qgb3IgbmVzdGVkIHNhdmUvcmVzdG9yZSwgcHJlZmVyIGEgTG93ZXJpbmcK LSsvLyAgICB0ZW1wIGluc3RlYWQg4oCUIHRoZSByZWQtem9uZSBhcHByb2FjaCBpcyB0b2xlcmFi bGUgYmVjYXVzZSBpdCdzCi0rLy8gICAgc2VsZi1jb250YWluZWQgdG8gYSBzaW5nbGUgaGVscGVy LiBUaGUgYE1PWl9BU1NFUlQoc2xvdCA8IDIpYCBpbnNpZGUKLSsvLyAgICB0aGUgaGVscGVycyBl bmZvcmNlcyB0aGlzIGF0IHRlc3QgdGltZS4KLSsvLwotKy8vIFNpbWQxMjggbGl2ZXMgaW4gVlIt bmFtZXNwYWNlIChWU1IzMi02MyksIHNvIFZNWCBvcHMgYWRkcmVzcyBTaW1kMTI4Ci0rLy8gRmxv YXRSZWdpc3RlcnMgZGlyZWN0bHkgd2l0aCBubyBzdGFnaW5nLiBFbmNvZGluZyBpcyAzMi02Mzsg dGhlIFZNWAotKy8vIFZSIGZpZWxkIGlzIDUtYml0ICgwLTMxKSwgc28gd2UgbWFzayB3aXRoIGAm IDMxYC4KLSsKLSsvLyBUd28gMTYtYnl0ZSBTaW1kMTI4IHNsb3RzIGF2YWlsYWJsZSBpbiB0aGUg RUxGdjIgcmVkIHpvbmUgZm9yIHNob3J0LWxpdmVkCi0rLy8gU0lNRCBzcGlsbHMgKHNlZSBwb2lu dCAzIG9mIHRoZSBTSU1EIGNvbnZlbnRpb25zIHByZWFtYmxlIGFib3ZlKS4KLStzdGF0aWMgY29u c3RleHByIGludCBrUmVkWm9uZVNpbWQxMjhNYXhTbG90cyA9IDI7Ci0rCi0rc3RhdGljIGlubGlu ZSB2b2lkIFJlZFpvbmVTdGFzaFNpbWQxMjgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEZsb2F0UmVn aXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz bG90KSB7Ci0rICBNT1pfQVNTRVJUKHNsb3QgPj0gMCAmJiBzbG90IDwga1JlZFpvbmVTaW1kMTI4 TWF4U2xvdHMpOwotKyAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgoc3JjLCBBZGRyZXNzKFN0 YWNrUG9pbnRlciwgLTE2ICogKHNsb3QgKyAxKSkpOwotK30KLSsKLStzdGF0aWMgaW5saW5lIHZv aWQgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBpbnQgc2xvdCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgTU9aX0FTU0VSVChzbG90ID49IDAgJiYgc2xvdCA8IGtSZWRab25lU2ltZDEy OE1heFNsb3RzKTsKLSsgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoQWRkcmVzcyhTdGFja1Bv aW50ZXIsIC0xNiAqIChzbG90ICsgMSkpLCBkZXN0KTsKLSt9Ci0rCi0rdHlwZWRlZiB2b2lkICgq Vm14QmluYXJ5Rm4pKEFzc2VtYmxlciYsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QpOwotKwot K3N0YXRpYyB2b2lkIEVtaXRWbXhCaW5hcnkoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFZteEJpbmFy eUZuIHZteE9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICB2bXhPcChzdGF0aWNfY2FzdDxBc3NlbWJsZXImPihtYXNtKSwgZGVz dC5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICBsaHMuZW5jb2RpbmcoKSAmIDMxLCByaHMuZW5j b2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rLy8gTWFjcm8gZm9yIGRlZmluaW5nIFZNWCBiaW5hcnkg d3JhcHBlcnMuCi0rI2RlZmluZSBWTVhfQklOQVJZX1dSQVBQRVIodm14SW5zdCkgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiKSB7IFwKLSsgICAgYS5hc18jI3ZteEluc3QodnJ0LCB2cmEsIHZy Yik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rLy8gRW1pdCBvcCBkaXJl Y3RseSBvbiBTaW1kMTI4IGRlc3QsIHRoZW4geHhsbm9yIGluIHBsYWNlLgotK3RlbXBsYXRlIDx0 eXBlbmFtZSBWbXhCaW5hcnlGblQ+Ci0rc3RhdGljIHZvaWQgRW1pdFZteEJpbmFyeU5vdChNYWNy b0Fzc2VtYmxlciYgbWFzbSwgVm14QmluYXJ5Rm5UIHZteE9wLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICB2bXhPcChz dGF0aWNfY2FzdDxBc3NlbWJsZXImPihtYXNtKSwgZGVzdC5lbmNvZGluZygpICYgMzEsCi0rICAg ICAgICBsaHMuZW5jb2RpbmcoKSAmIDMxLCByaHMuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIG1hc20u YXNfeHhsbm9yKGRlc3QsIGRlc3QsIGRlc3QpOwotK30KLSsKLSsvLyBJbnRlZ2VyIFNJTUQgY29t cGFyZSBoZWxwZXIuIFZNWCBjb21wYXJlIGluc3RydWN0aW9ucyBwcm9kdWNlIGFsbC1vbmVzCi0r Ly8gZm9yIHRydWUsIGFsbC16ZXJvcyBmb3IgZmFsc2UgcGVyIGVsZW1lbnQuCi0rLy8gQXZhaWxh YmxlIFZNWCBjb21wYXJlczogdmNtcGVxdSogKGVxKSwgdmNtcGd0cyogKHNpZ25lZCBndCksIHZj bXBndHUqCi0rLy8gKHVuc2lnbmVkIGd0KS4gT3RoZXIgY29uZGl0aW9ucyBkZXJpdmVkIGJ5IHN3 YXBwaW5nIG9wZXJhbmRzIG9yCi0rLy8gY29tcGxlbWVudGluZy4KLSt0ZW1wbGF0ZSA8dHlwZW5h bWUgRXFGbiwgdHlwZW5hbWUgR3RzRm4sIHR5cGVuYW1lIEd0dUZuPgotK3N0YXRpYyB2b2lkIEVt aXRWbXhDb21wYXJlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBBc3NlbWJsZXI6OkNvbmRpdGlvbiBj b25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QsIEVxRm4gZXFGbiwgR3RzRm4gZ3RzRm4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgR3R1Rm4gZ3R1Rm4pIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIEFzc2VtYmxl cjo6RXF1YWw6Ci0rICAgICAgRW1pdFZteEJpbmFyeShtYXNtLCBlcUZuLCBsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpOb3RFcXVhbDoKLSsgICAg ICBFbWl0Vm14QmluYXJ5Tm90KG1hc20sIGVxRm4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgotKyAgICAgIEVtaXRWbXhC aW5hcnkobWFzbSwgZ3RzRm4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoKLSsgICAgICAvLyAhKHJocyA+IGxo cykKLSsgICAgICBFbWl0Vm14QmluYXJ5Tm90KG1hc20sIGd0c0ZuLCByaHMsIGxocywgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhhbjoKLSsgICAgICAv LyByaHMgPiBsaHMgKHN3YXApCi0rICAgICAgRW1pdFZteEJpbmFyeShtYXNtLCBndHNGbiwgcmhz LCBsaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6TGVzc1Ro YW5PckVxdWFsOgotKyAgICAgIC8vICEobGhzID4gcmhzKQotKyAgICAgIEVtaXRWbXhCaW5hcnlO b3QobWFzbSwgZ3RzRm4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSBBc3NlbWJsZXI6OkFib3ZlOgotKyAgICAgIEVtaXRWbXhCaW5hcnkobWFzbSwgZ3R1Rm4sIGxo cywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6OkFib3Zl T3JFcXVhbDoKLSsgICAgICBFbWl0Vm14QmluYXJ5Tm90KG1hc20sIGd0dUZuLCByaHMsIGxocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpCZWxvdzoKLSsgICAg ICBFbWl0Vm14QmluYXJ5KG1hc20sIGd0dUZuLCByaHMsIGxocywgZGVzdCk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpCZWxvd09yRXF1YWw6Ci0rICAgICAgRW1pdFZteEJp bmFyeU5vdChtYXNtLCBndHVGbiwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBTSU1EIGludGVnZXIgY29u ZGl0aW9uIik7Ci0rICB9Ci0rfQotKwotKy8vIEVtaXQgdGVybmFyeSBWTVggb3AgZGlyZWN0bHkg b24gU2ltZDEyOCByZWdzLCBubyBzdGFnaW5nLgotK3R5cGVkZWYgdm9pZCAoKlZteFRlcm5hcnlG bikoQXNzZW1ibGVyJiwgdWludDhfdCwgdWludDhfdCwgdWludDhfdCwgdWludDhfdCk7Ci0rCi0r c3RhdGljIHZvaWQgRW1pdFZteFRlcm5hcnkoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFZteFRlcm5h cnlGbiB2bXhPcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGEs IEZsb2F0UmVnaXN0ZXIgYiwgRmxvYXRSZWdpc3RlciBjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgdm14T3Aoc3RhdGljX2Nhc3Q8QXNzZW1i bGVyJj4obWFzbSksIGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBhLmVuY29kaW5nKCkgJiAzMSwKLSsg ICAgICAgIGIuZW5jb2RpbmcoKSAmIDMxLCBjLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwotKy8v IEVtaXQgdW5hcnkgVk1YIG9wIGRpcmVjdGx5IG9uIFNpbWQxMjggcmVncywgbm8gc3RhZ2luZy4K LSt0eXBlZGVmIHZvaWQgKCpWbXhVbmFyeUZuKShBc3NlbWJsZXImLCB1aW50OF90LCB1aW50OF90 KTsKLSsKLStzdGF0aWMgdm9pZCBFbWl0Vm14VW5hcnkoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFZt eFVuYXJ5Rm4gdm14T3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHZteE9wKHN0YXRpY19jYXN0PEFzc2VtYmxl ciY+KG1hc20pLCBkZXN0LmVuY29kaW5nKCkgJiAzMSwKLSsgICAgICAgIHNyYy5lbmNvZGluZygp ICYgMzEpOwotK30KLSsKLSsvLyBIZWxwZXI6IGNyZWF0ZSBhIHplcm8gU0lNRCByZWdpc3RlciB1 c2luZyB4eGx4b3IuCi0rc3RhdGljIHZvaWQgWmVyb1NpbWQxMjgoTWFjcm9Bc3NlbWJsZXImIG1h c20sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgbWFzbS5hc194eGx4b3IoZGVzdCwgZGVzdCwg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVTaW1kMTI4KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChzcmMgIT0gZGVzdCkgewot KyAgICBhc194eGxvcihkZXN0LCBzcmMsIHNyYyk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmxvYWRDb25zdGFudFNpbWQxMjgoY29uc3QgU2ltZENvbnN0YW50JiB2LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7Ci0rICAvLyBMb2FkIDEyOC1iaXQgY29uc3RhbnQgZnJvbSBpbmxpbmUgY29uc3RhbnQgcG9v bC4KLSsgIC8vIENsb2JiZXJzIFNlY29uZFNjcmF0Y2hSZWcgKHIxMikuCi0rICBsb2FkRnJvbVBv b2xTaW1kMTI4KGRlc3QsIHYpOwotK30KLSsKLSsvLyBQUEM2NCBMRSBsYW5lIG1hcHBpbmc6Ci0r Ly8gV2FzbSBsYW5lIEsgPSBtZW1vcnkgYnl0ZSBLID0gcmVnaXN0ZXIgYnl0ZSAoMTUtSykuCi0r Ly8gbWZ2c3JkIGV4dHJhY3RzIHJlZ2lzdGVyIGJpdHNbMDo2M10gPSBCRSBkd29yZCAwID0gV2Fz bSBsYW5lcyA4LTE1IChieXRlcykuCi0rLy8gRm9yIFZNWCBieXRlIG9wcywgQkUgYnl0ZSBpbmRl eCA9IDE1IC0gd2FzbV9sYW5lLgotKy8vIEZvciBWTVggaGFsZndvcmQgb3BzLCBCRSBoYWxmd29y ZCBpbmRleCA9IDcgLSB3YXNtX2hhbGZ3b3JkLgotKy8vIEZvciBWU1ggd29yZCBvcHMgKHh4c3Bs dHcpLCBCRSB3b3JkIGluZGV4ID0gMyAtIHdhc21fd29yZC4KLSsvLyBGb3IgZG91Ymxld29yZCBv cHMsIEJFIGR3b3JkIGluZGV4ID0gMSAtIHdhc21fZHdvcmQuCi0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6c3BsYXRYMTYoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8v IG10dnNyZCB3cml0ZXMgc3JjIGludG8gQkUgMC4uNjMgb2YgZGVzdCAobG93IGJ5dGUgYXQgQkUg Ynl0ZSA3KTsKLSsgIC8vIHZzcGx0YiB0aGVuIHNwbGF0cyB0aGF0IGJ5dGUgb3ZlciBhbGwgMTYg bGFuZXMuIGRlc3QgYWxpYXNlcyBhcwotKyAgLy8gYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u IOKAlCB2c3BsdGIgdG9sZXJhdGVzIHRoaXMuIE5vIGV4dHJhCi0rICAvLyBzY3JhdGNoIHJlZ2lz dGVyIHJlcXVpcmVkLCBzbyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBob2xkIGEKLSsgIC8vIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgKGV4dEFkZFBhaXJ3aXNlKiwgdmFyLXNoaWZ0IG5hcnJvdyBmb3Jtcykg ZG8KLSsgIC8vIG5vdCBzZWUgYSBuZXN0ZWQtYWNxdWlyZSBjb2xsaXNpb24uCi0rICBhc19tdHZz cmQoZGVzdCwgc3JjKTsKLSsgIGFzX3ZzcGx0YihkZXN0LCBkZXN0LCA3KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3BsYXRYOChSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgLy8gU2FtZSBzaGFwZSBhcyBzcGxhdFgxNiB3aXRoIGhhbGZ3b3JkIGdyYW51bGFy aXR5LiBtdHZzcmQgcGxhY2VzCi0rICAvLyB0aGUgbG93IDE2IGJpdHMgYXQgQkUgaGFsZndvcmQg MyAoPSBCRSBieXRlcyA2Li43KTsgdnNwbHRoIHBpY2tzCi0rICAvLyBpdCB1cCBhbmQgc3BsYXRz IGFjcm9zcyA4IGxhbmVzLiB2c3BsdGggcmVhZHMgb25seSB0aGUgY2hvc2VuCi0rICAvLyBoYWxm d29yZCwgc28gbmVnYXRpdmUgaTMyIGlucHV0cyBkbyBub3QgbmVlZCBhIDE2LWJpdCBwcmUtbWFz awotKyAgLy8gKHdoaWNoIHRoZSBwcmV2aW91cyBHUFItcmVwbGljYXRlIHBhdGggcmVxdWlyZWQp LgotKyAgYXNfbXR2c3JkKGRlc3QsIHNyYyk7Ci0rICBhc192c3BsdGgoZGVzdCwgZGVzdCwgMyk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwbGF0WDQoUmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBhc19tdHZzcndz KGRlc3QsIHNyYyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19tdHZzcmQoZGVzdCwgc3JjKTsKLSsg ICAgYXNfeHhzcGx0dyhkZXN0LCBkZXN0LCAxKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6c3BsYXRYNChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICAvLyBzcmMgaXMgYSBkb3VibGUtcHJlY2lzaW9uIEZQUiBob2xkaW5nIGEgZmxvYXQgdmFs dWUgKHRoZSBKSVQga2VlcHMKLSsgIC8vIEZQMzIgaW4gRFAtZXF1aXZhbGVudCBmb3JtIG9uIFBQ QzY0KS4gQ29udmVydCBEUOKGklNQIGludG8gQkUgd29yZCAwCi0rICAvLyAoeHNjdmRwc3BuIGxh eXMgdGhlIHNpbmdsZSBhdCBiaXRzWzA6MzFdIC8gQkUgd29yZCAwKSwgdGhlbiBzcGxhdAotKyAg Ly8gd29yZCAwIHRvIGFsbCBmb3VyIGxhbmVzLgotKyAgYXNfeHNjdmRwc3BuKGRlc3QsIHNyYyk7 Ci0rICBhc194eHNwbHR3KGRlc3QsIGRlc3QsIDApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpzcGxhdFgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IC8vIFNwbGF0IHNjYWxhciBkb3VibGUgdG8gYm90aCBkb3VibGV3b3JkIGxhbmVzLgotKyAgLy8g U2NhbGFyIHZhbHVlIGlzIGluIHJlZ2lzdGVyIGJpdHNbMDo2M10gKEJFIGR3b3JkIDApLgotKyAg Ly8geHhwZXJtZGkgZG09MDogZGVzdCA9IFtzcmMuZHcwLCBzcmMuZHcwXQotKyAgYXNfeHhwZXJt ZGkoZGVzdCwgc3JjLCBzcmMsIDApOwotK30KLSsKLSsvLyBIZWxwZXJzOiBzcGxhdCBJbW0zMiBp bnRvIFNJTUQgcmVnaXN0ZXIgYXQgdmFyaW91cyBlbGVtZW50IHdpZHRocy4KLSsvLyBWTVggc2hp ZnQgaW5zdHJ1Y3Rpb25zIHJlYWQgdGhlIHNoaWZ0IGNvdW50IGZyb20gRUFDSCBlbGVtZW50IGlu ZGVwZW5kZW50bHksCi0rLy8gc28gdGhlIGNvdW50IG11c3QgYmUgcmVwbGljYXRlZCB0byBldmVy eSBieXRlL2hhbGZ3b3JkL3dvcmQgYXMgYXBwcm9wcmlhdGUuCi0rLy8KLSsvLyBGYXN0IHBhdGgg Zm9yIHNtYWxsIGNvbnN0YW50czogdnNwbHRpc3tiLGgsd30gKFBPV0VSNyspIHNwbGF0cyBhIDUt Yml0Ci0rLy8gc2lnbmVkIGltbWVkaWF0ZSB0byBhbGwgbGFuZXMgaW4gMSBpbnNuIHdpdGggbm8g cG9vbCBlbnRyeS4gRm9yIHZhbHVlcwotKy8vIG91dHNpZGUgWy0xNiwgMTVdIHdlIGZhbGwgYmFj ayB0byB0aGUgaW5saW5lLXBvb2wgcGF0aC4KLStzdGF0aWMgdm9pZCBTcGxhdEltbTgoTWFjcm9B c3NlbWJsZXImIG1hc20sIEltbTMyIGltbSwgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBpbnQ4 X3QgdmFsID0gKGludDhfdClpbW0udmFsdWU7Ci0rICBpZiAodmFsID49IC0xNiAmJiB2YWwgPD0g MTUpIHsKLSsgICAgbWFzbS5hc192c3BsdGlzYihkZXN0LmVuY29kaW5nKCkgJiAzMSwgdmFsKTsK LSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIFA5IHh4 c3BsdGliIGhhbmRsZXMgdGhlIGZ1bGwgOC1iaXQgcmFuZ2UgaW4gMSBpbnNuLgotKyAgICBtYXNt LmFzX3h4c3BsdGliKGRlc3QsICh1aW50OF90KXZhbCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsg IGludDhfdCBieXRlc1sxNl07Ci0rICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIGJ5dGVz W2ldID0gdmFsOwotKyAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3Jl YXRlWDE2KGJ5dGVzKSwgZGVzdCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIFNwbGF0SW1tMTYoTWFj cm9Bc3NlbWJsZXImIG1hc20sIEltbTMyIGltbSwgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBp bnQxNl90IHZhbCA9IChpbnQxNl90KWltbS52YWx1ZTsKLSsgIGlmICh2YWwgPj0gLTE2ICYmIHZh bCA8PSAxNSkgewotKyAgICBtYXNtLmFzX3ZzcGx0aXNoKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCAo aW50OF90KXZhbCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGludDE2X3QgaGFsZnNbOF07Ci0r ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgaGFsZnNbaV0gPSB2YWw7Ci0rICBtYXNtLmxv YWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYOChoYWxmcyksIGRlc3QpOwot K30KLSsKLStzdGF0aWMgdm9pZCBTcGxhdEltbTMyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBJbW0z MiBpbW0sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaW50MzJfdCB2YWwgPSBpbW0udmFsdWU7 Ci0rICBpZiAodmFsID49IC0xNiAmJiB2YWwgPD0gMTUpIHsKLSsgICAgbWFzbS5hc192c3BsdGlz dyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgKGludDhfdCl2YWwpOwotKyAgICByZXR1cm47Ci0rICB9 Ci0rICBpbnQzMl90IHdvcmRzWzRdID0ge3ZhbCwgdmFsLCB2YWwsIHZhbH07Ci0rICBtYXNtLmxv YWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYNCh3b3JkcyksIGRlc3QpOwot K30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsvLyBFeHRyYWN0IGxhbmUKLSsKLStzdGF0aWMgdm9pZCBFeHRy YWN0TGFuZVRvR1BSKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCB1aW50MzJfdCBsYW5lLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsYW5lV2lkdGhCeXRlcywg dW5zaWduZWQgbGFuZVdpZHRoQml0cykgewotKyAgLy8gRXh0cmFjdCBXYXNtIGxhbmUgZnJvbSB2 ZWN0b3IgcmVnaXN0ZXIgdG8gR1BSLgotKyAgLy8gV2FzbSBsYW5lIEsg4oaSIHJlZ2lzdGVyIGJ5 dGUgb2Zmc2V0ICgxNSAtIEsqbGFuZVdpZHRoQnl0ZXMpLgotKyAgLy8KLSsgIC8vIFN0cmF0ZWd5 OiB1c2UgbWZ2c3JkIHRvIGdldCBvbmUgNjQtYml0IGhhbGYgb2YgdGhlIHJlZ2lzdGVyLCB0aGVu IHNoaWZ0Ci0rICAvLyBhbmQgbWFzayB0byBpc29sYXRlIHRoZSBsYW5lLgotKyAgLy8KLSsgIC8v IG1mdnNyZCBnZXRzIHJlZ2lzdGVyIGJpdHNbMDo2M10gKEJFIGR3b3JkIDApID0gV2FzbSBsYW5l cyBpbiB0aGUgaGlnaAotKyAgLy8gaGFsZiBvZiB0aGUgcmVnaXN0ZXIgKGhpZ2gtbnVtYmVyZWQg bGFuZXMgaW4gTEUgbWVtb3J5IG9yZGVyKS4KLSsgIC8vIEZvciBhbiBOLWJpdCBsYW5lIGF0IFdh c20gaW5kZXggTDoKLSsgIC8vICAgSWYgTCBpcyBpbiB0aGUgaGlnaCBkd29yZCAoTCA+PSA4L2xh bmVXaWR0aEJ5dGVzKToKLSsgIC8vICAgICB1c2UgbWZ2c3JkOyBsYW5lIGlzIGF0IEdQUiBiaXQg b2Zmc2V0IGxhbmVXaWR0aEJpdHMqKEwgLQotKyAgLy8gICAgIDgvbGFuZVdpZHRoQnl0ZXMpIGZy b20gTFNCCi0rICAvLyAgIEVsc2UgKEwgaW4gbG93IGR3b3JkKToKLSsgIC8vICAgICBzd2FwIGR3 b3JkcywgdGhlbiBtZnZzcmQ7IGxhbmUgaXMgYXQgR1BSIGJpdCBvZmZzZXQgbGFuZVdpZHRoQml0 cypMCi0rICAvLyAgICAgZnJvbSBMU0IKLSsKLSsgIHVuc2lnbmVkIGxhbmVzUGVyRHdvcmQgPSA4 IC8gbGFuZVdpZHRoQnl0ZXM7Ci0rCi0rICBpZiAobGFuZSA+PSBsYW5lc1BlckR3b3JkKSB7Ci0r ICAgIG1hc20uYXNfbWZ2c3JkKGRlc3QsIHNyYyk7Ci0rICAgIHVuc2lnbmVkIHNoaWZ0ID0gbGFu ZVdpZHRoQml0cyAqIChsYW5lIC0gbGFuZXNQZXJEd29yZCk7Ci0rICAgIGlmIChzaGlmdCkgewot KyAgICAgIG1hc20ueF9zcmRpKGRlc3QsIGRlc3QsIHNoaWZ0KTsKLSsgICAgfQotKyAgfSBlbHNl IHsKLSsgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgbWFzbS5hc19tZnZzcmxkKGRlc3Qs IHNyYyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgLy8gUE9XRVI4OiBzd2FwIGR3b3JkcyB0byBn ZXQgZHcxIGludG8gc2NhbGFyIHBvc2l0aW9uLgotKyAgICAgIC8vIEF2b2lkIFNjcmF0Y2hTaW1k MTI4U2NvcGUg4oCUIGNhbGxlcnMgbWF5IGFscmVhZHkgaG9sZCBpdC4KLSsgICAgICAvLyBVc2Ug eHhwZXJtZGkgZGlyZWN0bHkgb24gU2NyYXRjaFNpbWQxMjhSZWcgKHYwL1ZTUjMyLCBub24tYWxs b2NhdGFibGUpLgotKyAgICAgIG1hc20uYXNfeHhwZXJtZGkoU2NyYXRjaFNpbWQxMjhSZWcsIHNy Yywgc3JjLCAyKTsKLSsgICAgICBtYXNtLmFzX21mdnNyZChkZXN0LCBTY3JhdGNoU2ltZDEyOFJl Zyk7Ci0rICAgIH0KLSsgICAgdW5zaWduZWQgc2hpZnQgPSBsYW5lV2lkdGhCaXRzICogbGFuZTsK LSsgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAgbWFzbS54X3NyZGkoZGVzdCwgZGVzdCwgc2hpZnQp OwotKyAgICB9Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0 cmFjdExhbmVJbnQ4eDE2KHVpbnQzMl90IGxhbmUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAg TU9aX0FTU0VSVChsYW5lIDwgMTYpOwotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIHZl eHRyYWN0dWIgcHV0cyBWUkIuQkVfYnl0ZVtVSU1dIGF0IFZSVC5CRV9ieXRlWzddIHdpdGggdGhl IHJlc3QKLSsgICAgLy8gemVyb2VkOyBtZnZzcmQgdGhlbiByZWFkcyBCRSBieXRlcyAwLi43IOKG kiBsb3cgYnl0ZSBvZiBkZXN0LCBoaWdoCi0rICAgIC8vIGJ5dGVzIGFscmVhZHkgMC4gTm8gbWFz ayBuZWVkZWQuCi0rICAgIGFzX3ZleHRyYWN0dWIoU2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgMTUg LSBsYW5lKTsKLSsgICAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAg cmV0dXJuOwotKyAgfQotKyAgRXh0cmFjdExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0 LCAxLCA4KTsKLSsgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCA1Nik7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0cmFjdExhbmVJbnQxNng4KHVpbnQzMl90IGxhbmUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgOCk7Ci0rICBpZiAo SGFzUE9XRVI5KCkpIHsKLSsgICAgYXNfdmV4dHJhY3R1aChTY3JhdGNoU2ltZDEyOFJlZywgc3Jj LCAxNCAtIDIgKiBsYW5lKTsKLSsgICAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVn KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgRXh0cmFjdExhbmVUb0dQUigqdGhpcywgbGFuZSwg c3JjLCBkZXN0LCAyLCAxNik7Ci0rICBhc19ybGRpY2woZGVzdCwgZGVzdCwgMCwgNDgpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0TGFuZUZsb2F0MzJ4NCh1aW50MzJfdCBs YW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDQp OwotKyAgLy8gQkUgd29yZCBpbmRleCA9IDMgLSBsYW5lLiB4eGV4dHJhY3R1dyBleHRyYWN0cyBh IHdvcmQgYnkgQkUgYnl0ZSBvZmZzZXQuCi0rICAvLyBCRSBieXRlIG9mZnNldCBvZiBCRSB3b3Jk IFcgPSBXKjQuIFNvIG9mZnNldCA9ICgzLWxhbmUpKjQuCi0rICAvLyB4eGV4dHJhY3R1dyBwdXRz IHRoZSBleHRyYWN0ZWQgd29yZCBpbnRvIGJpdHNbMzI6NjNdIG9mIGRlc3QgKHRoZSBsb3cKLSsg IC8vIHdvcmQgb2YgdGhlIHNjYWxhciBkb3VibGV3b3JkKSwgdGhlbiB4c2N2c3BkcG4gY29udmVy dHMgU1DihpJEUC4KLSsgIC8vIHh4c3BsdHcgcmVwbGljYXRlcyBhIHdvcmQgaW50byBhbGwgNCBw b3NpdGlvbnMuIFRoZSBzY2FsYXIgU1AgdmFsdWUKLSsgIC8vIGlzIHRoZW4gYXQgYml0c1swOjMx XSB3aGVyZSB4c2N2c3BkcG4gZXhwZWN0cyBpdC4KLSsgIGFzX3h4c3BsdHcoZGVzdCwgc3JjLCAz IC0gbGFuZSk7Ci0rICBhc194c2N2c3BkcG4oZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmV4dHJhY3RMYW5lRmxvYXQ2NHgyKHVpbnQzMl90IGxhbmUsIEZsb2F0UmVn aXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgMik7Ci0rICBpZiAobGFu ZSA9PSAwKSB7Ci0rICAgIC8vIExhbmUgMCA9IExFIGxvdyBkd29yZCA9IEJFIGR3b3JkIDEuIE5l ZWQgdG8gc3dhcCB0byBzY2FsYXIgcG9zaXRpb24uCi0rICAgIGFzX3h4cGVybWRpKGRlc3QsIHNy Yywgc3JjLCAyKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIExhbmUgMSA9IExFIGhpZ2ggZHdvcmQg PSBCRSBkd29yZCAwID0gc2NhbGFyIHBvc2l0aW9uLgotKyAgICBpZiAoc3JjICE9IGRlc3QpIHsK LSsgICAgICBhc194eGxvcihkZXN0LCBzcmMsIHNyYyk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gUmVwbGFjZSBsYW5lCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVw bGFjZUxhbmVJbnQ4eDE2KHVuc2lnbmVkIGxhbmUsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0r ICBNT1pfQVNTRVJUKGxhbmUgPCAxNik7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8v IDIgaW5zbnMgKyAxIEdQUiBzY3JhdGNoOiBsb2FkIGxhbmUgaW5kZXgsIHZpbnNicnggKHJpZ2h0 LWluZGV4ZWQKLSsgICAgLy8gPSBMRS1uYXR1cmFsKS4gdmluc2JyeCBtYXNrcyBSQSAmIDB4Riwg c28gdGhlIGltbWVkaWF0ZSBmaXRzLgotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIGlkeCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg eHNfbGkoaWR4LCBpbnQxNl90KGxhbmUpKTsKLSsgICAgYXNfdmluc2JyeChsaHNEZXN0LCBpZHgs IHJocyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAv LyAyIGluc25zICsgMSBWU1Igc2NyYXRjaDogc3RhZ2UgcmhzIGluIEJFIDAuLjYzIG9mIGEgc2Ny YXRjaCBWU1IKLSsgICAgLy8gKGxvdyBieXRlIG9mIHJocyBsYW5kcyBhdCBCRSBieXRlIDcpLCB0 aGVuIHZpbnNlcnRiIGNvcGllcyB0aGF0Ci0rICAgIC8vIEJFIGJ5dGUgNyBpbnRvIGxoc0Rlc3Qn cyBCRSBieXRlICgxNSAtIGxhbmUpID0gd2FzbSBsYW5lIEwuCi0rICAgIFNjcmF0Y2hTaW1kMTI4 U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICAgIGFzX210dnNyZChzY3JhdGNoLCByaHMpOwotKyAg ICBhc192aW5zZXJ0YihsaHNEZXN0LCBzY3JhdGNoLCAxNSAtIGxhbmUpOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rICB7Ci0rICAgIC8vIFBPV0VSODogZXh0cmFjdCBkd29yZCwgdXNlIHJsZGltaSB0 byBpbnNlcnQgYnl0ZSwgd3JpdGUgYmFjay4KLSsgICAgLy8gT25seSBuZWVkcyAxIEdQUiBzY3Jh dGNoLgotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHRt cCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgdW5zaWduZWQgZHdvcmQgPSBsYW5lIC8gODsKLSsg ICAgdW5zaWduZWQgYnl0ZUluRHdvcmQgPSBsYW5lICUgODsKLSsgICAgaWYgKGR3b3JkID09IDEp IHsKLSsgICAgICBhc19tZnZzcmQodG1wLCBsaHNEZXN0KTsKLSsgICAgfSBlbHNlIHsKLSsgICAg ICBhc194eHBlcm1kaShzY3JhdGNoMTI4LCBsaHNEZXN0LCBsaHNEZXN0LCAyKTsKLSsgICAgICBh c19tZnZzcmQodG1wLCBzY3JhdGNoMTI4KTsKLSsgICAgfQotKyAgICAvLyBybGRpbWkgUlQsUlMs U0gsTUI6IGluc2VydCByb3RhdGVkIFJTIGJpdHMgaW50byBSVCBhdCBwb3NpdGlvbnMKLSsgICAg Ly8gTUIuLjYzLVNILiBJbnNlcnQgcmhzIGJ5dGUgYXQgYml0IG9mZnNldCA4KmJ5dGVJbkR3b3Jk IGZyb20gTFNCOgotKyAgICAvLyAgIFNIID0gOCpieXRlSW5Ed29yZCwgTUIgPSA1NiAtIDgqYnl0 ZUluRHdvcmQKLSsgICAgYXNfcmxkaW1pKHRtcCwgcmhzLCA4ICogYnl0ZUluRHdvcmQsIDU2IC0g OCAqIGJ5dGVJbkR3b3JkKTsKLSsgICAgYXNfbXR2c3JkKHNjcmF0Y2gxMjgsIHRtcCk7Ci0rICAg IC8vIG10dnNyZCB3cml0ZXMgc2NyYXRjaDEyOC5kdzAgZnJvbSBgdG1wYCBhbmQgbGVhdmVzIHNj cmF0Y2gxMjguZHcxCi0rICAgIC8vIHVuZGVmaW5lZC4gQm90aCB4eHBlcm1kaSBmb3JtcyBiZWxv dyBzZWxlY3Qgc2NyYXRjaDEyOC5kdzAgb25seToKLSsgICAgLy8gICBETT0wYjAxIOKGkiBbc2Ny YXRjaC5kdzAsIGxoc0Rlc3QuZHcxXQotKyAgICAvLyAgIERNPTBiMDAg4oaSIFtsaHNEZXN0LmR3 MCwgc2NyYXRjaC5kdzBdCi0rICAgIC8vIFNvIHRoZSB1bmRlZmluZWQgZHcxIGlzIG5ldmVyIHJl YWQuIElOVkFSSUFOVDogYW55IGZ1dHVyZSBjaGFuZ2UKLSsgICAgLy8gdG8gZWl0aGVyIERNIGxp dGVyYWwgTVVTVCBmaXJzdCB6ZXJvIHNjcmF0Y2gxMjguZHcxIHZpYSB4eGx4b3Igb3IKLSsgICAg Ly8gYWRvcHQgYSBkaWZmZXJlbnQgc3RhZ2luZyBzY2hlbWU7IG90aGVyd2lzZSByZWFkcyBvZiBk dzEgcHJvZHVjZQotKyAgICAvLyBQT1dFUjktemVybyAvIFBPV0VSOC11bmRlZmluZWQgZ2FyYmFn ZSBpbiB0aGUgb3V0cHV0LgotKyAgICBpZiAoZHdvcmQgPT0gMSkgewotKyAgICAgIGFzX3h4cGVy bWRpKGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIDEpOwotKyAgICB9IGVsc2UgewotKyAg ICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIDApOwotKyAgICB9 Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VMYW5lSW50MTZ4OCh1 bnNpZ25lZCBsYW5lLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5l IDwgOCk7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIDIgaW5zbnMgKyAxIEdQUiBz Y3JhdGNoOiBsYW5lKjIg4oaSIGJ5dGUgcG9zaXRpb24sIHRoZW4gdmluc2hyeC4KLSsgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBpZHgg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHhzX2xpKGlkeCwgaW50MTZfdChsYW5lICogMikpOwot KyAgICBhc192aW5zaHJ4KGxoc0Rlc3QsIGlkeCwgcmhzKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIDIgaW5zbnMgKyAxIFZTUiBzY3JhdGNoOiBz dGFnZSByaHMgaW4gQkUgMC4uNjMgKGxvdyAxNiBvZiByaHMKLSsgICAgLy8gbGFuZHMgYXQgQkUg Ynl0ZXMgNi4uNyksIHRoZW4gdmluc2VydGggY29waWVzIHRob3NlIHR3byBieXRlcwotKyAgICAv LyBpbnRvIGxoc0Rlc3QncyBCRSBieXRlcyAoMTQgLSAyTCkuLigxNSAtIDJMKSA9IHdhc20gbGFu ZSBMLgotKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgICBhc19t dHZzcmQoc2NyYXRjaCwgcmhzKTsKLSsgICAgYXNfdmluc2VydGgobGhzRGVzdCwgc2NyYXRjaCwg MTQgLSAyICogbGFuZSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIHsKLSsgICAgLy8gUE9XRVI4 OiBleHRyYWN0IGR3b3JkLCBybGRpbWkgdG8gaW5zZXJ0IGhhbGZ3b3JkLCB3cml0ZSBiYWNrLgot KyAgICAvLyBTYW1lIGR3MS11bmRlZiBpbnZhcmlhbnQgYXMgcmVwbGFjZUxhbmVJbnQ4eDE2IGFi b3ZlLgotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHRt cCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgdW5zaWduZWQgZHdvcmQgPSBsYW5lIC8gNDsKLSsg ICAgdW5zaWduZWQgaHdJbkR3b3JkID0gbGFuZSAlIDQ7Ci0rICAgIGlmIChkd29yZCA9PSAxKSB7 Ci0rICAgICAgYXNfbWZ2c3JkKHRtcCwgbGhzRGVzdCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg YXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgbGhzRGVzdCwgbGhzRGVzdCwgMik7Ci0rICAgICAgYXNf bWZ2c3JkKHRtcCwgc2NyYXRjaDEyOCk7Ci0rICAgIH0KLSsgICAgYXNfcmxkaW1pKHRtcCwgcmhz LCAxNiAqIGh3SW5Ed29yZCwgNDggLSAxNiAqIGh3SW5Ed29yZCk7Ci0rICAgIGFzX210dnNyZChz Y3JhdGNoMTI4LCB0bXApOwotKyAgICBpZiAoZHdvcmQgPT0gMSkgewotKyAgICAgIGFzX3h4cGVy bWRpKGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIDEpOwotKyAgICB9IGVsc2UgewotKyAg ICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIDApOwotKyAgICB9 Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VMYW5lSW50MzJ4NCh1 bnNpZ25lZCBsYW5lLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5l IDwgNCk7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIDEgaW5zbiwgbm8gc2NyYXRj aCBWU1IuIFVJTSBpcyB0aGUgQkUgYnl0ZSBvZmZzZXQuCi0rICAgIGFzX3ZpbnN3KGxoc0Rlc3Qs IHJocywgKDMgLSBsYW5lKSAqIDQpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpZiAoSGFzUE9X RVI5KCkpIHsKLSsgICAgLy8gUE9XRVI5OiB4eGluc2VydHcgaW5zZXJ0cyB3b3JkIGZyb20gYml0 c1szMjo2M10gb2YgWEIgYXQgQkUgYnl0ZQotKyAgICAvLyBvZmZzZXQgVUlNIGluIFhULiBtdHZz cmQgcHV0cyBHUFIgaW50byBiaXRzWzA6NjNdOyBsb3cgMzIgYml0cwotKyAgICAvLyBsYW5kIGF0 IGJpdHNbMzI6NjNdLiBCRSBieXRlIG9mZnNldCBvZiBXYXNtIHdvcmQgbGFuZSA9ICgzLWxhbmUp KjQuCi0rICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICAgIGFzX210 dnNyZChzY3JhdGNoLCByaHMpOwotKyAgICBhc194eGluc2VydHcobGhzRGVzdCwgc2NyYXRjaCwg KDMgLSBsYW5lKSAqIDQpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjg6IGV4dHJh Y3QgZHdvcmQsIHJsZGltaSB0byBpbnNlcnQgd29yZCwgd3JpdGUgYmFjay4KLSsgIC8vIE1vZGVs ZWQgb24gcmVwbGFjZUxhbmVJbnQxNng4IGJlbG93LgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoMTI4KCp0 aGlzKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHVuc2lnbmVkIGR3 b3JkID0gbGFuZSAvIDI7ICAgICAgICAvLyAwID0gbGFuZXMgMCwxOyAxID0gbGFuZXMgMiwzLgot KyAgdW5zaWduZWQgd29yZEluRHdvcmQgPSBsYW5lICUgMjsgIC8vIDAgPSBsb3cgTEUgd29yZDsg MSA9IGhpZ2ggTEUgd29yZC4KLSsgIGlmIChkd29yZCA9PSAxKSB7Ci0rICAgIGFzX21mdnNyZCh0 bXAsIGxoc0Rlc3QpOwotKyAgfSBlbHNlIHsKLSsgICAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwg bGhzRGVzdCwgbGhzRGVzdCwgMik7Ci0rICAgIGFzX21mdnNyZCh0bXAsIHNjcmF0Y2gxMjgpOwot KyAgfQotKyAgYXNfcmxkaW1pKHRtcCwgcmhzLCAzMiAqIHdvcmRJbkR3b3JkLCAzMiAtIDMyICog d29yZEluRHdvcmQpOwotKyAgYXNfbXR2c3JkKHNjcmF0Y2gxMjgsIHRtcCk7Ci0rICBpZiAoZHdv cmQgPT0gMSkgewotKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0 LCAxKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHNj cmF0Y2gxMjgsIDApOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNl TGFuZUZsb2F0MzJ4NCh1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3Qp IHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDQpOwotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICAgIGFzX3hzY3ZkcHNwbihz Y3JhdGNoLCByaHMpOwotKyAgICBhc194eGluc2VydHcobGhzRGVzdCwgc2NyYXRjaCwgKDMgLSBs YW5lKSAqIDQpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjg6IGNvbnZlcnQgZG91 YmxlIHJocyB0byBzaW5nbGUgKGxhbmRzIGluIEJFIGJpdHMgMC4uMzEgb2YgRlBSKSwKLSsgIC8v IGV4dHJhY3QgYml0cyB0byBhIEdQUiwgdGhlbiByb3V0ZSB0aHJvdWdoIHRoZSBpbnRlZ2VyIGlu c2VydCBwYXRoLgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgcmhzQml0cyA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHsKLSsgICAgU2NyYXRj aFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgICAgYXNfeHNjdmRwc3BuKHNjcmF0Y2gs IHJocyk7Ci0rICAgIGFzX21mdnNyZChyaHNCaXRzLCBzY3JhdGNoKTsgICAvLyBzaW5nbGUgaXMg aW4gaGlnaCAzMiBiaXRzIG9mIEdQUgotKyAgICB4X3NyZGkocmhzQml0cywgcmhzQml0cywgMzIp OyAgLy8gc2luZ2xlIOKGkiBsb3cgMzIgYml0cwotKyAgfQotKyAgLy8gSW5saW5lIHRoZSBpbnQt aW5zZXJ0IHNlcXVlbmNlIChjYW4ndCBjYWxsIHJlcGxhY2VMYW5lSW50MzJ4NCBmcm9tCi0rICAv LyBoZXJlIGJlY2F1c2Ugd2UncmUgYWxyZWFkeSBpbnNpZGUgYSBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSBhbmQKLSsgIC8vIG5lZWQgdG8gYWNxdWlyZSBhIHNlcGFyYXRlIHRtcCkuCi0rICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwotKyAgUmVnaXN0ZXIgdG1wID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgdW5zaWduZWQgZHdvcmQgPSBsYW5lIC8gMjsKLSsgIHVuc2lnbmVk IHdvcmRJbkR3b3JkID0gbGFuZSAlIDI7Ci0rICBpZiAoZHdvcmQgPT0gMSkgewotKyAgICBhc19t ZnZzcmQodG1wLCBsaHNEZXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4cGVybWRpKHNjcmF0 Y2gxMjgsIGxoc0Rlc3QsIGxoc0Rlc3QsIDIpOwotKyAgICBhc19tZnZzcmQodG1wLCBzY3JhdGNo MTI4KTsKLSsgIH0KLSsgIGFzX3JsZGltaSh0bXAsIHJoc0JpdHMsIDMyICogd29yZEluRHdvcmQs IDMyIC0gMzIgKiB3b3JkSW5Ed29yZCk7Ci0rICBhc19tdHZzcmQoc2NyYXRjaDEyOCwgdG1wKTsK LSsgIGlmIChkd29yZCA9PSAxKSB7Ci0rICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gx MjgsIGxoc0Rlc3QsIDEpOwotKyAgfSBlbHNlIHsKLSsgICAgYXNfeHhwZXJtZGkobGhzRGVzdCwg bGhzRGVzdCwgc2NyYXRjaDEyOCwgMCk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnJlcGxhY2VMYW5lRmxvYXQ2NHgyKHVuc2lnbmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgbGhzRGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgMik7Ci0rICAvLyB4eHBlcm1kaSB0 byBwbGFjZSB0aGUgc2NhbGFyIGRvdWJsZSBpbnRvIHRoZSBjb3JyZWN0IGxhbmUuCi0rICBpZiAo bGFuZSA9PSAwKSB7Ci0rICAgIC8vIFJlcGxhY2UgTEUgbG93IGR3b3JkICg9IGR3MSkuIEtlZXAg bGhzRGVzdCBkdzAgKGxhbmUgMSkuCi0rICAgIC8vIHJocyBzY2FsYXIgaXMgaW4gZHcwLiBkbT0w YjAwOiBbbGhzRGVzdC5kdzAsIHJocy5kdzBdCi0rICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxo c0Rlc3QsIHJocywgMCk7Ci0rICB9IGVsc2UgewotKyAgICAvLyBSZXBsYWNlIExFIGhpZ2ggZHdv cmQgKD0gZHcwKS4gS2VlcCBsaHNEZXN0IGR3MSAobGFuZSAwKS4KLSsgICAgLy8gcmhzIHNjYWxh ciBpcyBpbiBkdzAuIGRtPTBiMDE6IFtyaHMuZHcwLCBsaHNEZXN0LmR3MV0KLSsgICAgYXNfeHhw ZXJtZGkobGhzRGVzdCwgcmhzLCBsaHNEZXN0LCAxKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6c2h1ZmZsZUludDh4MTYoY29uc3QgdWludDhfdCBsYW5lc1sxNl0sIEZsb2F0 UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgc2h1ZmZsZUludDh4MTYobGFuZXMsIGxoc0Rlc3QsIHJo cywgbGhzRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNodWZmbGVJbnQ4eDE2 KGNvbnN0IHVpbnQ4X3QgbGFuZXNbMTZdLCBGbG9hdFJlZ2lzdGVyIGxocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgLy8g UFBDNjQgdnBlcm0gdXNlcyBCRSBieXRlIGluZGljZXM6IFZSQVswXT1NU0IsIFZSQVsxNV09TFNC LCBWUkJbMTYuLjMxXS4KLSsgIC8vIENvbnZlcnQgV2FzbSBMRSBsYW5lIGluZGljZXMgdG8gdnBl cm0gY29udHJvbDogbGhzIGxhbmUgTiA9IEJFIGluZGV4Ci0rICAvLyAoMTUtTiksIHJocyBsYW5l IE4gPSBCRSBpbmRleCAoMzEtTikgPSAoNDcgLSAoTisxNikpLgotKyAgaW50OF90IGN0cmxbMTZd OwotKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgdWludDhfdCBz cmMgPSBsYW5lc1tpXTsKLSsgICAgaWYgKHNyYyA8IDE2KSB7Ci0rICAgICAgY3RybFtpXSA9IDE1 IC0gc3JjOwotKyAgICB9IGVsc2UgewotKyAgICAgIGN0cmxbaV0gPSA0NyAtIHNyYzsKLSsgICAg fQotKyAgfQotKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihj dHJsKSwgc2NyYXRjaCk7Ci0rICAvLyB2cGVybSBkaXJlY3RseSBvbiBTaW1kMTI4IHJlZ3MuCi0r ICBhc192cGVybShkZXN0LmVuY29kaW5nKCkgJiAzMSwgbGhzLmVuY29kaW5nKCkgJiAzMSwgcmhz LmVuY29kaW5nKCkgJiAzMSwKLSsgICAgICAgICAgIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGFuZVNlbGVjdFNpbWQxMjgoRmxvYXRSZWdp c3RlciBtYXNrLCBGbG9hdFJlZ2lzdGVyIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0r ICAvLyB4eHNlbDogWEM9MOKGklhBLCBYQz0x4oaSWEIg4oaSIFhUID0gKFhBICYgflhDKSB8IChY QiAmIFhDKQotKyAgLy8gbGFuZVNlbGVjdDogZGVzdCA9IChsaHMgJiBtYXNrKSB8IChyaHMgJiB+ bWFzaykKLSsgIC8vIE5lZWQgWEE9cmhzLCBYQj1saHMsIFhDPW1hc2suCi0rICBhc194eHNlbChk ZXN0LCByaHMsIGxocywgbWFzayk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVy bGVhdmVIaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgLy8gT24gTEUsIHZtcmdoYihyaHMsIGxocykgZ2l2ZXMgV2FzbSBpbnRlcmxl YXZlX2hpZ2guCi0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1y Z2hiKSwgcmhzLCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRl cmxlYXZlSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXJn aGgpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVy bGVhdmVIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtcmdo dyksIHJocywgbGhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6aW50ZXJs ZWF2ZUhpZ2hJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICAvLyB4eHBlcm1kaSBETT0wOiBbWEEuZHcwLCBYQi5kdzBdID0gbWVyZ2UgaGln aCBkd29yZHMuCi0rICAvLyBPbiBMRTogZHcwID0gaGlnaCBXYXNtIGxhbmUgKGxhbmUgMSkuCi0r ICBhc194eHBlcm1kaShkZXN0LCByaHMsIGxocywgMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmludGVybGVhdmVMb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2bXJnbGIpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmludGVybGVhdmVMb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBF Uih2bXJnbGgpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmludGVybGVhdmVMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2 bXJnbHcpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Omlu dGVybGVhdmVMb3dJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIC8vIHh4cGVybWRpIERNPTM6IFtYQS5kdzEsIFhCLmR3MV0gPSBtZXJnZSBs b3cgZHdvcmRzLgotKyAgYXNfeHhwZXJtZGkoZGVzdCwgcmhzLCBsaHMsIDMpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjb25jYXRBbmRSaWdodFNoaWZ0U2ltZDEyOChGbG9hdFJlZ2lz dGVyIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hpZnQpIHsKLSsgIC8vIHZzbGRv aShWUkEsIFZSQiwgU0gpIGV4dHJhY3RzIDE2IGJ5dGVzIHN0YXJ0aW5nIGF0IGJ5dGUgU0ggb2Yg dGhlCi0rICAvLyBiaWctZW5kaWFuIGNvbmNhdGVuYXRpb24gVlJBfHxWUkIuIEVuZGlhbm5lc3Mg bWFwcGluZyBmb3IgdGhlIFdhc20KLSsgIC8vIGB2MTI4LnNodWZmbGVgIHJpZ2h0LXNoaWZ0LWNv bmNhdCBzZW1hbnRpYzoKLSsgIC8vICAgV2FzbTogIHJlc3VsdFtpXSA9IChpICsgc2hpZnQgPCAx NikgPyByaHNbaSArIHNoaWZ0XQotKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IGxoc1tpICsgc2hpZnQgLSAxNl0KLSsgIC8vICAgUFBDIExFOiB2c2xkb2kocmhz LCBsaHMsIHNoaWZ0KSBwcm9kdWNlcyBleGFjdGx5IHRoYXQg4oCUIHRoZSBMRSBieXRlCi0rICAv LyAgIGxheW91dCByZXZlcnNlcyBmcm9tIEJFLCBzbyBwYXNzaW5nIChyaHMsIGxocywgc2hpZnQp IGhlcmUgaXMgdGhlIExFCi0rICAvLyAgIGVxdWl2YWxlbnQgb2YgKGxocywgcmhzLCAxNiAtIHNo aWZ0KSBvbiBCRS4KLSsgIE1PWl9BU1NFUlQoc2hpZnQgPCAxNik7Ci0rICBpZiAoc2hpZnQgPT0g MCkgewotKyAgICBtb3ZlU2ltZDEyOChyaHMsIGRlc3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0r ICAvLyB2c2xkb2kgVlJULFZSQSxWUkIsU0g6IHJlc3VsdFtpXSA9IChWUkF8fFZSQilbU0graV0K LSsgIC8vIEVtaXQgdnNsZG9pIGRpcmVjdGx5IG9uIFNpbWQxMjggcmVncyAoVlJBID0gbGhzID0g aGlnaCBwYXJ0LCBWUkIgPQotKyAgLy8gcmhzID0gbG93IHBhcnQpLiBUaGUgVk1YIGVtaXR0ZXIg bWFza3MgYCYgMzFgIGludGVybmFsbHkgdG8gZXh0cmFjdAotKyAgLy8gdGhlIDUtYml0IFZSIGZp ZWxkIGZyb20gdGhlIFNpbWQxMjggZW5jb2RpbmcuCi0rICBhc192c2xkb2koZGVzdCwgbGhzLCBy aHMsIHNoaWZ0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0U2ltZDEy OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQoY291 bnQudmFsdWUgPCAxNik7Ci0rICBpZiAoY291bnQudmFsdWUgPT0gMCkgewotKyAgICBtb3ZlU2lt ZDEyOChzcmMsIGRlc3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyB2c2xvIHNoaWZ0cyBs ZWZ0IGJ5IGJ5dGVzIChjb3VudCBpbiBiaXRzIDEyMS0xMjQgb2YgVlJCLCBpLmUuIGJ5dGUgMTUg Yml0cwotKyAgLy8gMS00KS4gdnNsIHNoaWZ0cyBsZWZ0IGJ5IGJpdHMgKGNvdW50IGluIGJpdHMg MTI1LTEyNyBvZiBWUkIsIGkuZS4gYnl0ZSAxNQotKyAgLy8gYml0cyA1LTcpLiBGb3IgYnl0ZSBz aGlmdDogc3BsYXRYNChjb3VudCo4LCBzY3JhdGNoKSwgdGhlbiB2c2xvLgotKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNwbGF0SW1tMzIoKnRoaXMsIEltbTMyKGNv dW50LnZhbHVlICogOCksIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZzbG8pLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0U2ltZDEyOChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGNvdW50LnZhbHVlIDwgMTYpOwotKyAgaWYgKGNv dW50LnZhbHVlID09IDApIHsKLSsgICAgbW92ZVNpbWQxMjgoc3JjLCBkZXN0KTsKLSsgICAgcmV0 dXJuOwotKyAgfQotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNw bGF0SW1tMzIoKnRoaXMsIEltbTMyKGNvdW50LnZhbHVlICogOCksIHNjcmF0Y2gpOwotKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcm8pLCBzcmMsIHNjcmF0Y2gs IGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJvRXh0ZW5kOHgxNlRvMTZ4 OChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIFVuc2lnbmVkIHdpZGVuIGxvdzog aW50ZXJsZWF2ZSBsb3cgYnl0ZXMgd2l0aCB6ZXJvIGJ5dGVzLgotKyAgLy8gT24gTEUsIHZtcmds Yih6ZXJvLCBzcmMpIGludGVybGVhdmVzIHRoZSBsb3cgOCBieXRlcyBvZiBzcmMgd2l0aCB6ZXJv cy4KLSsgIC8vIFVzZSBTY3JhdGNoU2ltZDEyOFJlZyBhcyB0aGUgemVyby4gT3JkZXIgbWF0dGVy czogcmVhZCBzcmMgaW50byB0aGUKLSsgIC8vIG1lcmdlIEJFRk9SRSB3cml0aW5nIGRlc3QgKHdo aWNoIG1pZ2h0IGFsaWFzIHNyYykuIHZtcmdsYiByZWFkcwotKyAgLy8gdnJhK3ZyYiwgd3JpdGVz IHZydCDigJQgc2luZ2xlLWN5Y2xlIGlzc3VlLgotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB6ZXJv KCp0aGlzKTsKLSsgIGFzX3h4bHhvcih6ZXJvLCB6ZXJvLCB6ZXJvKTsKLSsgIGFzX3ZtcmdsYihk ZXN0LmVuY29kaW5nKCkgJiAzMSwgemVyby5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygp ICYgMzEpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJvRXh0ZW5kOHgxNlRvMzJ4 NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHplcm9FeHRlbmQ4eDE2VG8xNng4KHNy YywgZGVzdCk7Ci0rICB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChkZXN0LCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDh4MTZUbzY0eDIoRmxvYXRSZWdpc3RlciBz cmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICB6ZXJvRXh0ZW5kOHgxNlRvMzJ4NChzcmMsIGRlc3QpOwotKyAgemVy b0V4dGVuZDMyeDRUbzY0eDIoZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Onplcm9FeHRlbmQxNng4VG8zMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gVW5zaWduZWQgd2lkZW4gbG93OiBpbnRlcmxlYXZlIGxvdyBoYWxmd29yZHMgd2l0aCB6ZXJv IGhhbGZ3b3Jkcy4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgemVybygqdGhpcyk7Ci0rICBhc194 eGx4b3IoemVybywgemVybywgemVybyk7Ci0rICBhc192bXJnbGgoZGVzdC5lbmNvZGluZygpICYg MzEsIHplcm8uZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDE2eDhUbzY0eDIoRmxvYXRSZWdpc3RlciBz cmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChzcmMsIGRlc3QpOwotKyAgemVy b0V4dGVuZDMyeDRUbzY0eDIoZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Onplcm9FeHRlbmQzMng0VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gVW5zaWduZWQgd2lkZW4gbG93OiBpbnRlcmxlYXZlIGxvdyB3b3JkcyB3aXRoIHplcm8gd29y ZHMuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHplcm8oKnRoaXMpOwotKyAgYXNfeHhseG9yKHpl cm8sIHplcm8sIHplcm8pOwotKyAgYXNfdm1yZ2x3KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCB6ZXJv LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnJldmVyc2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGNvbnN0IHVpbnQ4X3QgbGFuZXNbXSA9IHsxNCwgMTUsIDEyLCAxMywg MTAsIDExLCA4LCA5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYsICA3LCAgNCwgIDUs ICAyLCAgMywgIDAsIDF9OwotKyAgc2h1ZmZsZUludDh4MTYobGFuZXMsIHNyYywgc3JjLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJzZUludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgY29uc3QgdWludDhfdCBsYW5lc1td ID0gezEyLCAxMywgMTQsIDE1LCA4LCA5LCAxMCwgMTEsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgNCwgIDUsICA2LCAgNywgIDAsIDEsIDIsICAzfTsKLSsgIHNodWZmbGVJbnQ4eDE2KGxh bmVzLCBzcmMsIHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJldmVy c2VJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFz X3h4cGVybWRpKGRlc3QsIHNyYywgc3JjLCAyKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6c3dpenpsZUludDh4MTZSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBzd2l6emxlSW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rfQot KwotKy8vIGV4dE11bHtMb3csSGlnaH1JbnR7OHgxNiwxNng4fSB1c2UgUE9XRVI4KyB3aWRlbmlu ZyBtdWx0aXBsaWVzCi0rLy8gKHZtdWx7ZSxvfXtzLHV9e2IsaH0pIHBsdXMgYSBoYWxmd29yZC93 b3JkIG1lcmdlIHRvIG1hcCBCRS1pbmRleGVkCi0rLy8gZXZlbi9vZGQgcHJvZHVjdHMgaW50byBX YXNtIGxhbmUgb3JkZXIgb24gUFBDNjQgTEUuCi0rLy8KLSsvLyBMYW5lIG1hcHBpbmc6Ci0rLy8g ICBGb3IgTG93IChXYXNtIGxhbmVzIGZyb20gTEUgYnl0ZXMvSFcgMC4uTi8yLTEgPSBCRSAxNS4u Ti8yKToKLSsvLyAgICAgdm1yZ2x7aCx3fShldmVuX3Byb2R1Y3RzLCBvZGRfcHJvZHVjdHMpIHBs YWNlcyB0aGUgcmlnaHQgcHJvZHVjdHMKLSsvLyAgICAgYXQgQkUgcmVzdWx0IGluZGljZXMsIHdo aWNoIG9uIExFIG1hcCB0byBXYXNtIGxhbmVzIDAuLk4vMi0xLgotKy8vICAgRm9yIEhpZ2ggKFdh c20gbGFuZXMgZnJvbSBMRSBpbmRpY2VzIE4vMi4uTi0xID0gQkUgTi8yLTEuLjApOgotKy8vICAg ICB2bXJnaHtoLHd9IHRha2VzIHRoZSB1cHBlci1oYWxmIEJFIGluZGljZXMgaW5zdGVhZC4KLSsv LwotKy8vIEFsaWFzaW5nIHNhZmV0eTogdm11bCogcmVhZHMgYm90aCBvcGVyYW5kcyBiZWZvcmUg d3JpdGluZywgc28KLSsvLyBgZGVzdCA9IHZtdWxvKiBsaHMsIHJoc2AgaXMgc2FmZSBldmVuIHdo ZW4gZGVzdCBhbGlhc2VzIGxocy9yaHMuCi0rLy8gV2UgdXNlIG9uZSBzY3JhdGNoIGZvciB0aGUg ZXZlbi1wcm9kdWN0IGhhbGYgYmVjYXVzZSB2bXJnbHtoLHd9Ci0rLy8gcmVhZHMgZGVzdCBhZnRl ciB0aGUgb2RkIG11bHRpcGx5LgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dE11bExvd0lu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29k aW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQgPSBkZXN0 LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfdm11 bGVzYihzLCBsLCByKTsKLSsgIGFzX3ZtdWxvc2IoZCwgbCwgcik7Ci0rICBhc192bXJnbGgoZCwg cywgZCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dE11bEhpZ2hJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1k MTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAm IDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2Rp bmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICBhc192bXVsZXNiKHMs IGwsIHIpOwotKyAgYXNfdm11bG9zYihkLCBsLCByKTsKLSsgIGFzX3ZtcmdoaChkLCBzLCBkKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRFeHRNdWxMb3dJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEy OFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAz MSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5n KCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfdm11bGV1YihzLCBs LCByKTsKLSsgIGFzX3ZtdWxvdWIoZCwgbCwgcik7Ci0rICBhc192bXJnbGgoZCwgcywgZCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0TXVsSGlnaEludDh4MTYoRmxv YXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYg MzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGlu ZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxldWIocywg bCwgcik7Ci0rICBhc192bXVsb3ViKGQsIGwsIHIpOwotKyAgYXNfdm1yZ2hoKGQsIHMsIGQpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxMb3dJbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSBy aHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEs IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxlc2gocywgbCwgcik7Ci0r ICBhc192bXVsb3NoKGQsIGwsIHIpOwotKyAgYXNfdm1yZ2x3KGQsIHMsIGQpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxIaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMSwgciA9IHJocy5lbmNv ZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNj cmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfdm11bGVzaChzLCBsLCByKTsKLSsgIGFzX3Zt dWxvc2goZCwgbCwgcik7Ci0rICBhc192bXJnaHcoZCwgcywgZCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2Rp bmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3Jh dGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxldWgocywgbCwgcik7Ci0rICBhc192bXVs b3VoKGQsIGwsIHIpOwotKyAgYXNfdm1yZ2x3KGQsIHMsIGQpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bEhpZ2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxLCByID0gcmhzLmVuY29k aW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzID0gc2Ny YXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICBhc192bXVsZXVoKHMsIGwsIHIpOwotKyAgYXNfdm11 bG91aChkLCBsLCByKTsKLSsgIGFzX3ZtcmdodyhkLCBzLCBkKTsKLSt9Ci0rCi0rLy8gRXh0TXVs e0xvdyxIaWdofUludDMyeDQgdXNlIHZtdWx7ZSxvfXtzLHV9dyAoUE9XRVI4KykgcGx1cyB4eHBl cm1kaQotKy8vIHRvIGNvbWJpbmUgdGhlIHR3byBpNjQgcGFydGlhbCBwcm9kdWN0cyBpbnRvIFdh c20gbGFuZSBvcmRlciBvbiBQUEM2NAotKy8vIExFLiB4eHBlcm1kaSBhY2NlcHRzIHRoZSBmdWxs IDYtYml0IFZTUiBlbmNvZGluZyBzbyBpdCB3b3JrcyBkaXJlY3RseQotKy8vIG9uIFNpbWQxMjgg cmVncyAoZW5jb2RpbmcgMzItNjMpIHdpdGhvdXQgYW55IFZSIHN0YWdpbmcuCi0rLy8KLSsvLyBB bGlhc2luZyBzYWZlOiBib3RoIHZtdWwqIHJlYWRzIGNvbXBsZXRlIGJlZm9yZSB0aGUgc2Vjb25k IG9uZSB3cml0ZXMKLSsvLyBkZXN0LCBhbmQgeHhwZXJtZGkgcmVhZHMgYm90aCBpbnB1dHMgYmVm b3JlIHdyaXRpbmcuCi0rCi0rc3RhdGljIHZvaWQgRW1pdEV4dE11bEludDMyeDQoCi0rICAgIE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0rICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgdm9pZCAoKm11bEV2ZW4pKEFzc2VtYmxlciYsIHVp bnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QpLAotKyAgICB2b2lkICgqbXVsT2RkKShBc3NlbWJsZXIm LCB1aW50OF90LCB1aW50OF90LCB1aW50OF90KSwgdWludDhfdCBkbSkgewotKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKG1hc20pOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkg JiAzMTsKLSsgIHVpbnQ4X3QgciA9IHJocy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQg PSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2Rpbmco KSAmIDMxOwotKyAgbXVsRXZlbihzdGF0aWNfY2FzdDxBc3NlbWJsZXImPihtYXNtKSwgcywgbCwg cik7Ci0rICBtdWxPZGQoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIGQsIGwsIHIpOwot KyAgbWFzbS5hc194eHBlcm1kaShkZXN0LCBzY3JhdGNoLCBkZXN0LCBkbSk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmV4dE11bExvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0RXh0TXVsSW50MzJ4NCgKLSsgICAgICAqdGhp cywgbGhzLCByaHMsIGRlc3QsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVp bnQ4X3QgeCwgdWludDhfdCB5KSB7Ci0rICAgICAgICBhLmFzX3ZtdWxlc3codCwgeCwgeSk7Ci0r ICAgICAgfSwKLSsgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1 aW50OF90IHkpIHsKLSsgICAgICAgIGEuYXNfdm11bG9zdyh0LCB4LCB5KTsKLSsgICAgICB9LAot KyAgICAgIDMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxIaWdoSW50MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0RXh0 TXVsSW50MzJ4NCgKLSsgICAgICAqdGhpcywgbGhzLCByaHMsIGRlc3QsCi0rICAgICAgW10oQXNz ZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7Ci0rICAgICAgICBh LmFzX3ZtdWxlc3codCwgeCwgeSk7Ci0rICAgICAgfSwKLSsgICAgICBbXShBc3NlbWJsZXImIGEs IHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkpIHsKLSsgICAgICAgIGEuYXNfdm11bG9z dyh0LCB4LCB5KTsKLSsgICAgICB9LAotKyAgICAgIDApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZEV4dE11bExvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg cmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRFeHRNdWxJbnQzMng0KAotKyAgICAgICp0aGlzLCBs aHMsIHJocywgZGVzdCwKLSsgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhf dCB4LCB1aW50OF90IHkpIHsKLSsgICAgICAgIGEuYXNfdm11bGV1dyh0LCB4LCB5KTsKLSsgICAg ICB9LAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4 X3QgeSkgewotKyAgICAgICAgYS5hc192bXVsb3V3KHQsIHgsIHkpOwotKyAgICAgIH0sCi0rICAg ICAgMyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0TXVsSGlnaElu dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1p dEV4dE11bEludDMyeDQoCi0rICAgICAgKnRoaXMsIGxocywgcmhzLCBkZXN0LAotKyAgICAgIFtd KEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgewotKyAgICAg ICAgYS5hc192bXVsZXV3KHQsIHgsIHkpOwotKyAgICAgIH0sCi0rICAgICAgW10oQXNzZW1ibGVy JiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7Ci0rICAgICAgICBhLmFzX3Zt dWxvdXcodCwgeCwgeSk7Ci0rICAgICAgfSwKLSsgICAgICAwKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cTE1TXVsclNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gUTE1IG11bHRpcGx5LXJvdW5kLXNhdHVyYXRlOiB2bWhy YWRkc2hzKGEsIGIsIHplcm8pIGNvbXB1dGVzCi0rICAvLyBzYXR1cmF0ZSgoYVtpXSpiW2ldICsg MHg0MDAwKSA+PiAxNSkgZm9yIGVhY2ggaGFsZndvcmQuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOwotKyAgRW1p dFZteFRlcm5hcnkoCi0rICAgICAgKnRoaXMsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50 OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50OF90IHZyYykgewotKyAgICAg ICAgYS5hc192bWhyYWRkc2hzKHZydCwgdnJhLCB2cmIsIHZyYyk7Ci0rICAgICAgfSwKLSsgICAg ICBsaHMsIHJocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotKy8vIG5lZyA9IDAgLSBzcmMuIFVz ZSBTY3JhdGNoU2ltZDEyOFJlZyAoPSBWUjAsIG5vbi1hbGxvY2F0YWJsZSkgYXMgdGhlCi0rLy8g emVybyBzb3VyY2Ugc28gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBzZWVzIG5vIGNsb2JiZXJlZCBW UnMuCi0rLy8gMiBpbnNuczogeHhseG9yIHNjcmF0Y2ggKyB2c3VidVhtIGRlc3QsIHNjcmF0Y2gs IHNyYy4gdm5lZ3tiLGh9Ci0rLy8gZG9lc24ndCBleGlzdCBpbiBhbnkgUE9XRVIgSVNBLCBoZW5j ZSB0aGUgc3VidHJhY3QuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnSW50OHgxNihGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOwotKyAgYXNf dnN1YnVibShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsCi0r ICAgICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpuZWdJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBaZXJvU2ltZDEy OCgqdGhpcywgc2NyYXRjaCk7Ci0rICBhc192c3VidWhtKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBz Y3JhdGNoLmVuY29kaW5nKCkgJiAzMSwKLSsgICAgICAgICAgICAgc3JjLmVuY29kaW5nKCkgJiAz MSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZ0ludDMyeDQoRmxvYXRSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAg IEVtaXRWbXhVbmFyeSgKLSsgICAgICAgICp0aGlzLAotKyAgICAgICAgW10oQXNzZW1ibGVyJiBh LCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192bmVndyh2cnQsIHZyYik7IH0sCi0r ICAgICAgICBzcmMsIGRlc3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjggZmFs bGJhY2s6IDAgLSBzcmMgdmlhIFNjcmF0Y2hTaW1kMTI4UmVnIChWUjApLgotKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNo KTsKLSsgIGFzX3ZzdWJ1d20oZGVzdC5lbmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5jb2Rpbmco KSAmIDMxLAotKyAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bmVnSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgRW1pdFZteFVuYXJ5KAot KyAgICAgICAgKnRoaXMsCi0rICAgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYikgeyBhLmFzX3ZuZWdkKHZydCwgdnJiKTsgfSwKLSsgICAgICAgIHNyYywgZGVz dCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIFBPV0VSOCBmYWxsYmFjazogMCAtIHNyYyB2 aWEgU2NyYXRjaFNpbWQxMjhSZWcgKFZSMCkuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0 Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOwotKyAgYXNfdnN1YnVk bShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsCi0rICAgICAg ICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOwotK30KLSsjdW5kZWYgREVGX05FR19JTlROeE1f VlNVQgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQWRkU2F0SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGR1YnMpLCBsaHMsIHJocywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQWRkU2F0SW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGR1aHMpLCBsaHMsIHJocywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkU3ViU2F0SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJ1YnMpLCBsaHMsIHJocywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkU3ViU2F0SW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJ1aHMpLCBsaHMsIHJocywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTWluSW50OHgxNihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgq dGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW51YiksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRNaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodm1pbnVoKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5B UllfV1JBUFBFUih2bWludXcpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnVuc2lnbmVkTWF4SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQ UEVSKHZtYXh1YiksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dW5zaWduZWRNYXhJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1h eHVoKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNp Z25lZE1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWF4dXcpLCBs aHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQXZl cmFnZUludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhdmd1YiksIGxocywgcmhzLCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRBdmVyYWdlSW50MTZ4 OChGbG9hdFJlZ2lzdGVyIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5 KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmF2Z3VoKSwgbGhzLCByaHMsIGRlc3QpOwotK30K LSsKLSsvLyBhYnMoeCkgPSBtYXgoeCwgLXgpIHBlciBzaWduZWQgbGFuZS4gTm8gdmFic3tiLGgs dyxkfSBleGlzdHMgaW4gYW55IElTQS4KLSsvLyB2bmVne3csZH0gZXhpc3RzIG9ubHkgb24gUE9X RVI5LgotKy8vIFdlIHVzZSBTY3JhdGNoU2ltZDEyOFJlZyBhcyBhIHRlbXAgZm9yIC1zcmMuIE9y ZGVyIG1hdHRlcnM6IGNvbXB1dGUKLSsvLyAtc3JjIGludG8gdGVtcCBmaXJzdCAocmVhZHMgc3Jj KSwgdGhlbiBtYXgoc3JjLCB0ZW1wKSBpbnRvIGRlc3QgKHJlYWRzCi0rLy8gc3JjICsgdGVtcCwg d3JpdGVzIGRlc3QpLiBTYWZlIGV2ZW4gd2hlbiBkZXN0ID09IHNyYyBiZWNhdXNlIHNyYyBpcwot Ky8vIHJlYWQgYmVmb3JlIGRlc3QgaXMgd3JpdHRlbiBieSB2bWF4c1guCi0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YWJzSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHRtcCgqdGhpcyk7Ci0rICBhc194eGx4b3Io dG1wLCB0bXAsIHRtcCk7ICAvLyB0bXAgPSAwCi0rICBhc192c3VidWJtKHRtcC5lbmNvZGluZygp ICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgIHNyYy5lbmNvZGluZygp ICYgMzEpOyAgLy8gdG1wID0gLXNyYwotKyAgYXNfdm1heHNiKGRlc3QuZW5jb2RpbmcoKSAmIDMx LCBzcmMuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgIHRtcC5lbmNvZGluZygpICYgMzEp OyAgLy8gZGVzdCA9IG1heChzcmMsIC1zcmMpCi0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFic0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg U2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMpOwotKyAgYXNfeHhseG9yKHRtcCwgdG1wLCB0 bXApOwotKyAgYXNfdnN1YnVobSh0bXAuZW5jb2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAm IDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIGFzX3ZtYXhzaChkZXN0LmVuY29kaW5nKCkg JiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgdG1wLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMpOwotKyAg aWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIGFzX3ZuZWd3KHRtcC5lbmNvZGluZygpICYgMzEsIHNy Yy5lbmNvZGluZygpICYgMzEpOyAgLy8gdG1wID0gLXNyYwotKyAgfSBlbHNlIHsKLSsgICAgYXNf eHhseG9yKHRtcCwgdG1wLCB0bXApOwotKyAgICBhc192c3VidXdtKHRtcC5lbmNvZGluZygpICYg MzEsIHRtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOwotKyAgfQotKyAg YXNfdm1heHN3KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0bXAu ZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzSW50NjR4 MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHRtcCgqdGhpcyk7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgYXNfdm5l Z2QodG1wLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7ICAvLyB0bXAgPSAt c3JjCi0rICB9IGVsc2UgewotKyAgICBhc194eGx4b3IodG1wLCB0bXAsIHRtcCk7Ci0rICAgIGFz X3ZzdWJ1ZG0odG1wLmVuY29kaW5nKCkgJiAzMSwgdG1wLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVu Y29kaW5nKCkgJiAzMSk7Ci0rICB9Ci0rICBhc192bWF4c2QoZGVzdC5lbmNvZGluZygpICYgMzEs IHNyYy5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQ4eDE2KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsg IFNwbGF0SW1tOCgqdGhpcywgY291bnQsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhp cywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbGIpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQxNng4KEltbTMyIGNvdW50LCBGbG9h dFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlz KTsKLSsgIFNwbGF0SW1tMTYoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xoKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0SW50MzJ4NChJbW0zMiBjb3Vu dCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7Ci0rICBTcGxhdEltbTMyKCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7Ci0rICBFbWl0 Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNsdyksIHNyYywgc2NyYXRjaCwg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDY0eDIoSW1t MzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOwotKyAgU3BsYXRJbW0zMigqdGhpcywgY291bnQsIHNjcmF0Y2gpOwot KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbGQpLCBzcmMsIHNj cmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50 OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgU3BsYXRJbW04KCp0aGlzLCBjb3VudCwgc2Ny YXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYWIp LCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNp Z25lZFJpZ2h0U2hpZnRJbnQ4eDE2KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNw bGF0SW1tOCgqdGhpcywgY291bnQsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZzcmIpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMp OwotKyAgU3BsYXRJbW0xNigqdGhpcywgY291bnQsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFy eSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFoKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hT aW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdEltbTE2KCp0aGlzLCBjb3VudCwg c2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNy aCksIHNyYywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJp Z2h0U2hpZnRJbnQzMng0KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdEltbTMyKCp0aGlz LCBjb3VudCwgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dS QVBQRVIodnNyYXcpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKLSsgIFNwbGF0SW1tMzIoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhC aW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3J3KSwgc3JjLCBzY3JhdGNoLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDY0eDIoSW1tMzIg Y291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKLSsgIFNwbGF0SW1tMzIoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsg IEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhZCksIHNyYywgc2Ny YXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRT aGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgU3BsYXRJbW0zMigq dGhpcywgY291bnQsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZzcmQpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpiaXR3aXNlQW5kU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsK LSsgIGFzX3h4bGFuZChsaHNEZXN0LCBsaHNEZXN0LCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpiaXR3aXNlQW5kU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBhc194eGxhbmQoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlT3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgcmhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNE ZXN0KSB7Ci0rICBhc194eGxvcihsaHNEZXN0LCBsaHNEZXN0LCByaHMpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlT3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHhsb3IoZGVzdCwgbGhzLCByaHMpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlWG9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpIHsKLSsgIGFzX3h4bHhvcihsaHNEZXN0LCBsaHNEZXN0LCByaHMpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlWG9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194eGx4b3IoZGVzdCwgbGhzLCByaHMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlTm90U2ltZDEyOChGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194eGxub3IoZGVzdCwgc3Jj LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlTm90QW5kU2ltZDEy OChGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIC8vIG5vdGFuZChsaHMsIHJocykg PSB+bGhzICYgcmhzID0geHhsYW5kYyhyaHMsIGxocykKLSsgIGFzX3h4bGFuZGMobGhzRGVzdCwg cmhzLCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YW55VHJ1ZVNpbWQx MjgoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIHZjbXBlcXVkLiAo UE9XRVI4KykgYWdhaW5zdCB6ZXJvIHNldHMgQ1I2OgotKyAgLy8gICAtIENSNi5MVCAoQkUgYml0 IDI0KSA9IDEgaWZmIHRoZSBwZXItbGFuZSByZXN1bHQgaXMgYWxsLTFzLCBpLmUuCi0rICAvLyAg ICAgZXZlcnkgZG91Ymxld29yZCBvZiBzcmMgZXF1YWxzIHplcm8gKD0gc3JjIGlzIGFsbC16ZXJv KS4KLSsgIC8vICAgLSBDUjYuRVEgKEJFIGJpdCAyNikgPSAxIGlmZiBubyBsYW5lIHdhcyBlcXVh bCAoPSBhbnkgbm9uemVybykuCi0rICAvLyBhbnktdHJ1ZSA9ICFhbGwtemVybyA9ICFDUjYuTFQu Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBzID0g c2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICBhc194eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwg c2NyYXRjaCk7Ci0rICBhc192Y21wZXF1ZF9yYyhzLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCBzKTsK LSsgIGlmIChIYXNQT1dFUjEwKCkpIHsKLSsgICAgLy8gc2V0YmNyIG1hdGVyaWFsaXNlcyAoQ1Jb QkldID09IDApID8gMSA6IDAgZGlyZWN0bHkgaW50byBkZXN0LgotKyAgICAvLyBkZXN0ID0gKENS Ni5MVCA9PSAwKSA9ICJub3QgYWxsLXplcm8iID0gYW55LXRydWUuCi0rICAgIGFzX3NldGJjcihk ZXN0LCBBc3NlbWJsZXI6Okxlc3NUaGFuLCBjcjYpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBh c19tZm9jcmYoZGVzdCwgY3I2KTsKLSsgIC8vIENSNi5MVCBpcyBhdCBCRSBiaXQgMjQgb2YgdGhl IEdQUi4gcmx3aW5tIHNoPTI1IHJvdGF0ZXMgbGVmdCAyNToKLSsgIC8vIGJpdCAoMjQgLSAyNSkg bW9kIDMyID0gMzEgKExTQikuIE1hc2sgMzEuLjMxIGtlZXBzIGp1c3QgYml0IDMxLgotKyAgYXNf cmx3aW5tKGRlc3QsIGRlc3QsIDI1LCAzMSwgMzEpOwotKyAgYXNfeG9yaShkZXN0LCBkZXN0LCAx KTsKLSt9Ci0rCi0rLy8gdmNtcGVxdVguIGFnYWluc3QgemVybyBzZXRzIENSNjogTFQgPSBhbGwg aW5wdXQgbGFuZXMgd2VyZSB6ZXJvLAotKy8vIEVRID0gbm8gaW5wdXQgbGFuZSB3YXMgemVyby4g VGhlIGxhdHRlciBpcyBleGFjdGx5ICJhbGwtdHJ1ZSIuCi0rLy8gbWZvY3JmIHBsYWNlcyBDUjYg YXQgYml0cyAyNC0yNyBvZiB0aGUgbG93IDMyLWJpdCBoYWxmIChMVD0yNCwgRVE9MjYpLgotKy8v IHJsd2lubSByZCxyZCwyNywzMSwzMSBleHRyYWN0cyBiaXQgMjYgKENSNi5FUSkgcmlnaHQtanVz dGlmaWVkLgotK3RlbXBsYXRlIDx0eXBlbmFtZSBWbXhDbXBSY0ZuPgotK3N0YXRpYyB2b2lkIEVt aXRBbGxUcnVlSW50KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBWbXhDbXBSY0ZuIHZteENt cFJjKSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gobWFzbSk7Ci0rICBaZXJvU2lt ZDEyOChtYXNtLCBzY3JhdGNoKTsKLSsgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAm IDMxOwotKyAgdm14Q21wUmMoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIHMsIHNyYy5l bmNvZGluZygpICYgMzEsIHMpOwotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyBzZXRi YyBtYXRlcmlhbGlzZXMgQ1I2LkVRIGRpcmVjdGx5IGludG8gZGVzdCAoMSBpbnNuIHZzIHRoZSAy LWluc24KLSsgICAgLy8gbWZvY3JmICsgcmx3aW5tIGV4dHJhY3QpLiBBbHJlYWR5IHdpcmVkIGlu IG1hX2NtcF9zZXQuCi0rICAgIG1hc20uYXNfc2V0YmMoZGVzdCwgQXNzZW1ibGVyOjpFcXVhbCwg Y3I2KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgbWFzbS5hc19tZm9jcmYoZGVzdCwgY3I2KTsK LSsgIG1hc20uYXNfcmx3aW5tKGRlc3QsIGRlc3QsIDI3LCAzMSwgMzEpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjphbGxUcnVlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgRW1pdEFsbFRydWVJbnQoKnRoaXMsIHNyYywgZGVzdCwKLSsgICAgICAg ICAgICAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHIsIHVpbnQ4X3Qg YikgewotKyAgICAgICAgICAgICAgICAgICBhLmFzX3ZjbXBlcXViX3JjKHQsIHIsIGIpOwotKyAg ICAgICAgICAgICAgICAgfSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFsbFRydWVJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0QWxsVHJ1 ZUludCgqdGhpcywgc3JjLCBkZXN0LAotKyAgICAgICAgICAgICAgICAgW10oQXNzZW1ibGVyJiBh LCB1aW50OF90IHQsIHVpbnQ4X3QgciwgdWludDhfdCBiKSB7Ci0rICAgICAgICAgICAgICAgICAg IGEuYXNfdmNtcGVxdWhfcmModCwgciwgYik7Ci0rICAgICAgICAgICAgICAgICB9KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWxsVHJ1ZUludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRBbGxUcnVlSW50KCp0aGlzLCBzcmMsIGRlc3QsCi0r ICAgICAgICAgICAgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCByLCB1 aW50OF90IGIpIHsKLSsgICAgICAgICAgICAgICAgICAgYS5hc192Y21wZXF1d19yYyh0LCByLCBi KTsKLSsgICAgICAgICAgICAgICAgIH0pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjph bGxUcnVlSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgRW1p dEFsbFRydWVJbnQoKnRoaXMsIHNyYywgZGVzdCwKLSsgICAgICAgICAgICAgICAgIFtdKEFzc2Vt YmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHIsIHVpbnQ4X3QgYikgewotKyAgICAgICAgICAg ICAgICAgICBhLmFzX3ZjbXBlcXVkX3JjKHQsIHIsIGIpOwotKyAgICAgICAgICAgICAgICAgfSk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgY29tcGFyZUludDh4 MTYoY29uZCwgbGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICBpZiAoY29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsICYmIEhhc1BP V0VSOSgpKSB7Ci0rICAgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2 Y21wbmViKSwgbGhzLCByaHMsIGRlc3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBFbWl0Vm14 Q29tcGFyZSgqdGhpcywgY29uZCwgbGhzLCByaHMsIGRlc3QsIFZNWF9CSU5BUllfV1JBUFBFUih2 Y21wZXF1YiksCi0rICAgICAgICAgICAgICAgICBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0c2Ip LCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0dWIpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdp c3RlciBsaHNEZXN0KSB7Ci0rICBjb21wYXJlSW50MTZ4OChjb25kLCBsaHNEZXN0LCByaHMsIGxo c0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50MTZ4OChBc3Nl bWJsZXI6OkNvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChjb25k ID09IEFzc2VtYmxlcjo6Tm90RXF1YWwgJiYgSGFzUE9XRVI5KCkpIHsKLSsgICAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBuZWgpLCBsaHMsIHJocywgZGVzdCk7 Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIEVtaXRWbXhDb21wYXJlKCp0aGlzLCBjb25kLCBsaHMs IHJocywgZGVzdCwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBlcXVoKSwKLSsgICAgICAgICAgICAg ICAgIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3RzaCksIFZNWF9CSU5BUllfV1JBUFBFUih2Y21w Z3R1aCkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50MzJ4NChBc3Nl bWJsZXI6OkNvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIGNvbXBh cmVJbnQzMng0KGNvbmQsIGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVhbCAm JiBIYXNQT1dFUjkoKSkgewotKyAgICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dS QVBQRVIodmNtcG5ldyksIGxocywgcmhzLCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAg RW1pdFZteENvbXBhcmUoKnRoaXMsIGNvbmQsIGxocywgcmhzLCBkZXN0LCBWTVhfQklOQVJZX1dS QVBQRVIodmNtcGVxdXcpLAotKyAgICAgICAgICAgICAgICAgVk1YX0JJTkFSWV9XUkFQUEVSKHZj bXBndHN3KSwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBndHV3KSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBs aHNEZXN0KSB7Ci0rICBjb21wYXJlRmxvYXQzMng0KGNvbmQsIGxoc0Rlc3QsIHJocywgbGhzRGVz dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1i bGVyOjpDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgc3dpdGNo IChjb25kKSB7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpFcXVhbDoKLSsgICAgICBhc194dmNtcGVx c3AoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6 Tm90RXF1YWw6Ci0rICAgICAgYXNfeHZjbXBlcXNwKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBi aXR3aXNlTm90U2ltZDEyOChkZXN0LCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBB c3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgotKyAgICAgIGFzX3h2Y21wZ3RzcChkZXN0LCBsaHMsIHJo cyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1 YWw6Ci0rICAgICAgYXNfeHZjbXBnZXNwKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBBc3NlbWJsZXI6Okxlc3NUaGFuOgotKyAgICAgIGFzX3h2Y21wZ3RzcChkZXN0 LCByaHMsIGxocyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhh bk9yRXF1YWw6Ci0rICAgICAgYXNfeHZjbXBnZXNwKGRlc3QsIHJocywgbGhzKTsKLSsgICAgICBi cmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgU0lNRCBm bG9hdCBjb25kaXRpb24iKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29t cGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIGNv bXBhcmVGbG9hdDY0eDIoY29uZCwgbGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBj b25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBzd2l0Y2ggKGNvbmQpIHsKLSsgICAg Y2FzZSBBc3NlbWJsZXI6OkVxdWFsOgotKyAgICAgIGFzX3h2Y21wZXFkcChkZXN0LCBsaHMsIHJo cyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpOb3RFcXVhbDoKLSsgICAg ICBhc194dmNtcGVxZHAoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJpdHdpc2VOb3RTaW1kMTI4 KGRlc3QsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6R3JlYXRl clRoYW46Ci0rICAgICAgYXNfeHZjbXBndGRwKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoKLSsgICAgICBhc194 dmNtcGdlZHAoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2Vt Ymxlcjo6TGVzc1RoYW46Ci0rICAgICAgYXNfeHZjbXBndGRwKGRlc3QsIHJocywgbGhzKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKLSsgICAg ICBhc194dmNtcGdlZHAoZGVzdCwgcmhzLCBsaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZh dWx0OgotKyAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBTSU1EIGZsb2F0IGNvbmRpdGlvbiIp OwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdGbG9hdDMyeDQoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZuZWdzcChkZXN0LCBz cmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdGbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZuZWdkcChkZXN0LCBzcmMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNGbG9hdDMyeDQoRmxvYXRSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZhYnNzcChkZXN0LCBzcmMpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZhYnNkcChkZXN0LCBzcmMpOwotK30K LSsKLSsvLyBQZXIgc3BlYzoKLSsvLyAgIHJlc3VsdFtrXSA9IChzfHUpZXh0X3dpZGVuKHNyY1sy a10pICsgKHN8dSlleHRfd2lkZW4oc3JjWzJrKzFdKQotKy8vIFBPV0VSIGxhY2tzIHBhaXJ3aXNl IG11bHRpcGx5LWFkZC4gRW11bGF0ZSB2aWEgdm11bFh7ZSxvfVgoc3JjLCBzcGxhdCgxKSkKLSsv LyArIHZhZGQuIEJvdGggdm11bHMgbmVlZCBgc3JjYCBBTkQgYHNwbGF0KDEpYCBhdmFpbGFibGUg c2ltdWx0YW5lb3VzbHkuCi0rLy8KLSsvLyBBdmFpbGFibGUgU0lNRCBzbG90cyB3aXRob3V0IGlu dm9sdmluZyBMb3dlcmluZzoKLSsvLyAgIC0gU2NyYXRjaFNpbWQxMjhSZWcgKFZSMCwgbm9uLWFs bG9jYXRhYmxlKQotKy8vICAgLSBkZXN0LCBzcmMKLSsvLyBUaGF0J3MgMyByZWdzIHdoZW4gZGVz dCAhPSBzcmMg4oCUIGVub3VnaCBmb3Ige3NyYywgc3BsYXQsIGludGVybWVkaWF0ZX0uCi0rLy8g V2hlbiBkZXN0ID09IHNyYyB3ZSBzdGFzaCBzcmMgYW5kIHRoZSBldmVuIHByb2R1Y3QgdG8gdGhl IDI4OC1ieXRlIEVMRnYyCi0rLy8gcmVkIHpvbmUgYW5kIHJlYnVpbGQgc3BsYXQoMSkuCi0rLy8K LSsvLyAoRWFybGllciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgaGVscGVycyByb3V0ZWQgdGhy b3VnaCBoYXJkY29kZWQKLSsvLyBWUjEvVlIyL1ZSMyB2aWEgeHhsb3JfdnNyIOKAlCBmYXN0ZXIg YnV0IHN0b21wZWQgYWxsb2NhdG9yLW1hbmFnZWQgVlJzCi0rLy8gYW5kIHNpbGVudGx5IGNvcnJ1 cHRlZCBhbnkgbGl2ZSB3YXNtIHYxMjggdGhlIGFsbG9jYXRvciBoYWQgcGxhY2VkCi0rLy8gdGhl cmUuIFNjcmF0Y2hTaW1kMTI4UmVnICsgcmVkLXpvbmUgc3Rhc2ggaXMgdGhlIHNhZmUgY29udHJh Y3QuKQotKy8vIEFsd2F5cy1zYWZlIHBhdHRlcm46IHN0YXNoIHNyYyB0byByZWQgem9uZSBzbyBk ZXN0IGNhbiBiZSBmcmVlbHkgb3ZlcndyaXR0ZW4sCi0rLy8gc3Rhc2ggZXZlbiB0byByZWQgem9u ZSBhZnRlciBmaXJzdCB2bXVsIHNvIHdlIGNhbiByZWJ1aWxkIHNwbGF0KDEpIGZvciB0aGUKLSsv LyBzZWNvbmQgdm11bC4gVGhlIHNwbGF0LW9mLTEgaXMgbm93IGB2c3BsdGlze2IsaH1gICg1LWJp dCBzaWduZWQgaW1tZWRpYXRlCi0rLy8gc3BsYXQpIOKAlCAxIGluc24gdnMgdGhlIDMtaW5zbiBt b3ZlUHRyK210dnNyZCt2c3BsdCBzZXF1ZW5jZSB0aGUgcHJldmlvdXMKLSsvLyBwYXRoIHVzZWQu Ci0rLy8gUGF0dGVybjogc3Rhc2ggc3JjIHRvIHJlZCB6b25lIHNsb3QgMCBzbyBkZXN0IGNhbiBi ZSBmcmVlbHkgb3ZlcndyaXR0ZW47Ci0rLy8gdm11bC1ldmVuIChzaWduZWQvdW5zaWduZWQpIG9m IHNyYyB3aXRoIHNwbGF0KDEpIHByb2R1Y2VzIHNpZ24vemVyby1leHRlbmRlZAotKy8vIGV2ZW4t bGFuZSBwcm9kdWN0cyBpbnRvIGRlc3Q7IHN0YXNoIHRoYXQgdG8gc2xvdCAxIGFuZCByZWJ1aWxk IHNjcmF0Y2g9c3JjCi0rLy8gKHNsb3QgMCkgYW5kIGRlc3Q9c3BsYXQoMSk7IHZtdWwtb2RkIHBy b2R1Y2VzIHRoZSBvZGQgcHJvZHVjdHM7IHJlc3RvcmUKLSsvLyBldmVuIGZyb20gc2xvdCAxIGFu ZCBwYWlyd2lzZS1hZGQuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0QWRkUGFpcndpc2VJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsK LSsgIHVpbnQ4X3Qgc3JjRW5jID0gc3JjLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZGVz dEVuYyA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOwotKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhp cywgc3JjLCAwKTsKLSsgIGFzX3ZzcGx0aXNiKHMsIDEpOwotKyAgYXNfdm11bGVzYihkZXN0RW5j LCBzcmNFbmMsIHMpOwotKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgZGVzdCwgMSk7Ci0r ICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDAsIHNjcmF0Y2gpOwotKyAgYXNfdnNwbHRp c2IoZGVzdEVuYywgMSk7Ci0rICBhc192bXVsb3NiKGRlc3RFbmMsIHMsIGRlc3RFbmMpOwotKyAg UmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAxLCBzY3JhdGNoKTsKLSsgIGFzX3ZhZGR1aG0o ZGVzdEVuYywgZGVzdEVuYywgcyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkRXh0QWRkUGFpcndpc2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3Qg cyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBzcmNFbmMgPSBzcmMuZW5j b2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkZXN0RW5jID0gZGVzdC5lbmNvZGluZygpICYgMzE7 Ci0rICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBzcmMsIDApOwotKyAgYXNfdnNwbHRpc2Io cywgMSk7Ci0rICBhc192bXVsZXViKGRlc3RFbmMsIHNyY0VuYywgcyk7Ci0rICBSZWRab25lU3Rh c2hTaW1kMTI4KCp0aGlzLCBkZXN0LCAxKTsKLSsgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhp cywgMCwgc2NyYXRjaCk7Ci0rICBhc192c3BsdGlzYihkZXN0RW5jLCAxKTsKLSsgIGFzX3ZtdWxv dWIoZGVzdEVuYywgcywgZGVzdEVuYyk7Ci0rICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMs IDEsIHNjcmF0Y2gpOwotKyAgYXNfdmFkZHVobShkZXN0RW5jLCBkZXN0RW5jLCBzKTsKLSt9Ci0r Ci0rLy8gdm1zdW1zaG0vdm1zdW11aG0gY29sbGFwc2UgdGhlIGkxNng4IOKGkiBpMzJ4NCBwYWly d2lzZS1hZGQgaW50byBhIHNpbmdsZQotKy8vIG11bHRpcGx5LXN1bTogVlQuaTMyW2tdID0gVlJB LmkxNlsya10qVlJCLmkxNlsya10gKwotKy8vIFZSQS5pMTZbMmsrMV0qVlJCLmkxNlsyaysxXQot Ky8vICsgVlJDLmkzMltrXS4gV2l0aCBWUkIgPSBzcGxhdCgxKSBhbmQgVlJDID0gMCB0aGlzIGlz IGV4YWN0bHkgdGhlIHdhc20KLSsvLyBpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfe3MsdX0g Y29udHJhY3QuIDMgaW5zbnMgd2hlbiBkZXN0ICE9IHNyYzsKLSsvLyBMV2FzbVVuYXJ5U2ltZDEy OCB1c2VzIHVzZVJlZ2lzdGVyQXRTdGFydCBzbyBkZXN0IG1heSBhbGlhcyBzcmMg4oCUIGluIHRo YXQKLSsvLyBjYXNlIHdlIHB1dCBzcGxhdCgxKSBpbnRvIHNjcmF0Y2ggKHByZXNlcnZpbmcgc3Jj IGluIGRlc3QpIGFuZCB1c2UgYQotKy8vIHJlZC16b25lIHNsb3QgZm9yIHRoZSB6ZXJvIFZSQyBv cGVyYW5kLgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9h dFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgaWYgKGRlc3QgIT0gc3JjKSB7Ci0rICAgIGFzX3h4bHhvcihzY3JhdGNoLCBz Y3JhdGNoLCBzY3JhdGNoKTsgIC8vIHNjcmF0Y2ggPSAwIChWUkMgYWRkZW5kKQotKyAgICBhc192 c3BsdGlzaChkZXN0LmVuY29kaW5nKCkgJiAzMSwgMSk7ICAvLyBkZXN0ID0gc3BsYXQoMSkgKFZS QiBtdWx0aXBsaWVyKQotKyAgICBhc192bXN1bXNobShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3Jj LmVuY29kaW5nKCkgJiAzMSwgZGVzdC5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgICAg IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gZGVz dCA9PSBzcmM6IGxvYWQgc3BsYXQoMSkgaW50byBzY3JhdGNoIGluc3RlYWQsIHN0YXNoIHplcm8g dG8gdGhlIHJlZAotKyAgLy8gem9uZSwgcmVzdG9yZSB6ZXJvIGludG8gc2NyYXRjaCBhZnRlciB0 aGUgc3BsYXQgaXMgY29uc3VtZWQuLi4gYWN0dWFsbHkKLSsgIC8vIHNpbXBsZXI6IHVzZSB2bXVs ZS92bXVsbyArIHZhZGQgdHJpbyB3aXRoIHJlZCB6b25lLiBTYW1lIHNoYXBlIGFzIHRoZQotKyAg Ly8gcHJlLXZtc3Vtc2htIGZhbGxiYWNrIGZvciBpOHgxNi4KLSsgIHVpbnQ4X3QgcyA9IHNjcmF0 Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBzcmNFbmMgPSBzcmMuZW5jb2RpbmcoKSAm IDMxOwotKyAgdWludDhfdCBkZXN0RW5jID0gZGVzdC5lbmNvZGluZygpICYgMzE7Ci0rICBSZWRa b25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBzcmMsIDApOwotKyAgYXNfdnNwbHRpc2gocywgMSk7Ci0r ICBhc192bXVsZXNoKGRlc3RFbmMsIHNyY0VuYywgcyk7Ci0rICBSZWRab25lU3Rhc2hTaW1kMTI4 KCp0aGlzLCBkZXN0LCAxKTsKLSsgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMCwgc2Ny YXRjaCk7Ci0rICBhc192c3BsdGlzaChkZXN0RW5jLCAxKTsKLSsgIGFzX3ZtdWxvc2goZGVzdEVu YywgcywgZGVzdEVuYyk7Ci0rICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDEsIHNjcmF0 Y2gpOwotKyAgYXNfdmFkZHV3bShkZXN0RW5jLCBkZXN0RW5jLCBzKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRFeHRBZGRQYWlyd2lzZUludDE2eDgoRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgaWYgKGRlc3QgIT0gc3JjKSB7Ci0rICAgIGFzX3h4bHhvcihzY3JhdGNoLCBz Y3JhdGNoLCBzY3JhdGNoKTsKLSsgICAgYXNfdnNwbHRpc2goZGVzdC5lbmNvZGluZygpICYgMzEs IDEpOwotKyAgICBhc192bXN1bXVobShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5n KCkgJiAzMSwgZGVzdC5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgICAgIHNjcmF0Y2gu ZW5jb2RpbmcoKSAmIDMxKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgdWludDhfdCBzID0gc2Ny YXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IHNyY0VuYyA9IHNyYy5lbmNvZGluZygp ICYgMzE7Ci0rICB1aW50OF90IGRlc3RFbmMgPSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKLSsgIFJl ZFpvbmVTdGFzaFNpbWQxMjgoKnRoaXMsIHNyYywgMCk7Ci0rICBhc192c3BsdGlzaChzLCAxKTsK LSsgIGFzX3ZtdWxldWgoZGVzdEVuYywgc3JjRW5jLCBzKTsKLSsgIFJlZFpvbmVTdGFzaFNpbWQx MjgoKnRoaXMsIGRlc3QsIDEpOwotKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBz Y3JhdGNoKTsKLSsgIGFzX3ZzcGx0aXNoKGRlc3RFbmMsIDEpOwotKyAgYXNfdm11bG91aChkZXN0 RW5jLCBzLCBkZXN0RW5jKTsKLSsgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMSwgc2Ny YXRjaCk7Ci0rICBhc192YWRkdXdtKGRlc3RFbmMsIGRlc3RFbmMsIHMpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpzcXJ0RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2c3FydHNwKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnNxcnRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgYXNfeHZzcXJ0ZHAoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6Y29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZjdnN4d3NwKGRlc3QsIHNyYyk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQ29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChGbG9h dFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dmN2dXh3c3AoZGVz dCwgc3JjKTsKLSt9Ci0rCi0rLy8gaTMyeDQgKGxvdyAyIGxhbmVzKSDihpIgZjY0eDIuIFdhc20g YGY2NHgyLmNvbnZlcnRfbG93X2kzMng0X3tzLHV9YC4KLSsvLyB4dmN2e3MsdX14d2RwIGNvbnZl cnRzIEJFIHdvcmQgMCBhbmQgQkUgd29yZCAyIG9mIHNvdXJjZSB0byBkb3VibGVzIGluCi0rLy8g QkUgZHdvcmRzIDAgYW5kIDEuIHZtcmdsdyBwbGFjZXMgc3JjLndvcmRfQkVbMiwzXSBhdCB0aGUg cmVhZCBwb3NpdGlvbnMsCi0rLy8gbWF0Y2hpbmcgdGhlIGYzMuKGkmY2NCBwcm9tb3RlIHNoYXBl OgotKy8vICAgdm1yZ2x3ICAgIHNjcmF0Y2gsIHNyYywgc3JjICAgIDsgQkUgd29yZHMgMiwzIG9m IHNyYyDihpIgQkUgd29yZHMgMCwyIG9mCi0rLy8gICBzY3JhdGNoIHh2Y3YqeHdkcCBkZXN0LCBz Y3JhdGNoICAgICAgICA7IGNvbnZlcnQgYm90aCwgcGxhY2UgaW4gQkUgZHdvcmRzCi0rLy8gICAw LDEKLSsvLyBPdXRwdXQgQkUgZHdvcmRzIGxhbmQgYXMgW2NvbnZlcnQoaW5wdXQgbGFuZSAxKSwg Y29udmVydChpbnB1dCBsYW5lIDApXSwKLSsvLyB3aGljaCBvbiBQUEM2NExFIHN0b3JhZ2UgSVMg dGhlIHdhc20gb3V0cHV0IGxheW91dC4KLSsvLwotKy8vIDIgaW5zbnMgZWFjaCwgc2luZ2xlIFNj cmF0Y2hTaW1kMTI4IHNjb3BlLCBubyBHUFIgb3IgRlBSIHNjcmF0Y2guCi0rLy8gQWxsIG9wcyBQ T1dFUjcrLiBkZXN0PT1zcmMgYWxpYXNpbmcgc2FmZSAodm1yZ2x3IGNvbnN1bWVzIHNyYyBpbnRv Ci0rLy8gc2NyYXRjaCBiZWZvcmUgZGVzdCBpcyB3cml0dGVuKS4KLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb252ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfdm1y Z2x3KHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5j b2RpbmcoKSAmIDMxKTsKLSsgIGFzX3h2Y3ZzeHdkcChkZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRDb252ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKEZs b2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4 U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBhc192bXJnbHcoc2NyYXRjaC5lbmNvZGluZygpICYg MzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOwotKyAgYXNfeHZj dnV4d2RwKGRlc3QsIHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVu Y1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIC8vIHh2Y3ZzcHN4d3MgZ2l2ZXMgSU5UMzJfTUlOIGZvciBOYU4sIGJ1dCBXYXNtIHJlcXVp cmVzIDAuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfeHZj bXBlcXNwKHNjcmF0Y2gsIHNyYywgc3JjKTsgIC8vIH4wIGZvciBub24tTmFOLCAwIGZvciBOYU4K LSsgIGFzX3h2Y3ZzcHN4d3MoZGVzdCwgc3JjKTsKLSsgIGFzX3h4bGFuZChkZXN0LCBkZXN0LCBz Y3JhdGNoKTsgIC8vIHplcm8gTmFOIGxhbmVzCi0rfQotKwotKy8vIFBhY2sgdGhlIHR3byAiaW50 ZXJlc3RpbmciIDMyLWJpdCByZXN1bHRzIHRoYXQgeHZjdip4d3MgLyB4dmN2ZHBzcCBsZWF2ZXMK LSsvLyBhdCBzY3JhdGNoLndvcmRfQkVbMF0gKD0gQSkgYW5kIHNjcmF0Y2gud29yZF9CRVsyXSAo PSBCKSBpbnRvIGEgemVyb2VkIGRlc3QKLSsvLyBhcyBkZXN0LndvcmRfQkUgPSBbMCwgMCwgQSwg Ql0uIFRoaXMgaXMgdGhlIGxheW91dCB3YXNtIHJlcXVpcmVzIGZvcgotKy8vIGY2NHgyIOKGkiB7 aTMyeDQgdHJ1bmNfc2F0LCBmMzJ4NCBkZW1vdGV9LiBXcml0ZXMgZGVzdCwgY29uc3VtZXMgc2Ny YXRjaC4KLSsvLwotKy8vIFBPV0VSOSBwYXRoICg0IGluc25zKSB1c2VzIHh4aW5zZXJ0dy94eGV4 dHJhY3R1dy4gUE9XRVI4IHBhdGggKDcgaW5zbnMpCi0rLy8gZ29lcyB2aWEgdHdvIEdQUiByb3Vu ZC10cmlwczogZXh0cmFjdCBBIGFuZCBCIHdpdGggbWZ2c3JkLCBzcGxpY2UgdGhlbQotKy8vIGlu dG8gYSBzaW5nbGUgZHdvcmQgd2l0aCBybGRpbWksIG10dnNyZCBiYWNrIGludG8gYSBTSU1EIHJl ZywgYW5kCi0rLy8geHhwZXJtZGkgdGhlIHJlc3VsdCBpbnRvIGRlc3QuZHcxIHdoaWxlIGtlZXBp bmcgZGVzdC5kdzAgemVyby4KLStzdGF0aWMgaW5saW5lIHZvaWQgUGFja1R3b1dvcmRzVG9Mb3dI YWxmKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoSGFzUE9X RVI5KCkpIHsKLSsgICAgbWFzbS5hc194eGluc2VydHcoZGVzdCwgc2NyYXRjaCwKLSsgICAgICAg ICAgICAgICAgICAgICAgOCk7ICAvLyBkZXN0LndvcmRfQkVbMl0g4oaQIHNjcmF0Y2gud29yZF9C RVsxXSAoPSBBKQotKyAgICBtYXNtLmFzX3h4ZXh0cmFjdHV3KHNjcmF0Y2gsIHNjcmF0Y2gsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgOCk7ICAvLyBzY3JhdGNoLndvcmRfQkVbMV0g4oaQIHNj cmF0Y2gud29yZF9CRVsyXSAoPSBCKQotKyAgICBtYXNtLmFzX3h4aW5zZXJ0dyhkZXN0LCBzY3Jh dGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAxMik7ICAvLyBkZXN0LndvcmRfQkVbM10g4oaQ IHNjcmF0Y2gud29yZF9CRVsxXSAoPSBCKQotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dF Ujg6IHh4aW5zZXJ0dy94eGV4dHJhY3R1dyBhcmUgSVNBIDMuMC4gVGFrZSBhIEdQUiBkZXRvdXIg aW5zdGVhZC4KLSsgIC8vIHNjcmF0Y2guZHdfQkVbMF0gPSAoQSA8PCAzMikgfCBBLCBzY3JhdGNo LmR3X0JFWzFdID0gKEIgPDwgMzIpIHwgQi4KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgdG1wQSA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lz dGVyIHRtcEIgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtYXNtLmFzX21mdnNyZCh0bXBBLCBzY3Jh dGNoKTsgIC8vIHRtcEEgPSAoQSA8PCAzMikgfCBBCi0rICBtYXNtLmFzX3h4cGVybWRpKHNjcmF0 Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gsCi0rICAgICAgICAgICAgICAgICAgIDIpOyAgICAgICAgICAg IC8vIHN3YXAgZHdvcmRzOiBub3cgZHcwID0gKEI8PDMyKXxCCi0rICBtYXNtLmFzX21mdnNyZCh0 bXBCLCBzY3JhdGNoKTsgIC8vIHRtcEIgPSAoQiA8PCAzMikgfCBCCi0rICBtYXNtLnhfc3JkaSh0 bXBBLCB0bXBBLCAzMik7ICAgIC8vIHRtcEEgPSAweDAwMDAwMDAwX0FBQUFBQUFBCi0rICBtYXNt LmFzX3JsZGltaSh0bXBCLCB0bXBBLCAzMiwKLSsgICAgICAgICAgICAgICAgIDApOyAgICAgICAg ICAgICAgLy8gdG1wQlswLi4zMV0gPSBBOyB0bXBCWzMyLi42M10gPSBCIChrZXB0KQotKyAgbWFz bS5hc19tdHZzcmQoc2NyYXRjaCwgdG1wQik7ICAvLyBzY3JhdGNoLmR3X0JFWzBdID0gKEEgPDwg MzIpIHwgQjsgZHcxID0gMAotKyAgbWFzbS5hc194eHBlcm1kaShkZXN0LCBkZXN0LCBzY3JhdGNo LAotKyAgICAgICAgICAgICAgICAgICAwKTsgIC8vIGRlc3QgPSB7ZGVzdC5kdzA9MCwgc2NyYXRj aC5kdzB9ID0gWzAsIDAsIEEsIEJdCi0rfQotKwotKy8vIGZjdGl3eiAvIGZjbXB1IC8gZmN0aWR1 eiBhcmUgWC1mb3JtIHNjYWxhciBGUCBpbnN0cnVjdGlvbnMgdGhhdCBvbmx5Ci0rLy8gZW5jb2Rl IDUtYml0IEZSVC9GUkIgZmllbGRzLCBzbyBlbWl0dGluZyB0aGVtIG9uIGEgU2ltZDEyOCByZWcK LSsvLyAoZW5jb2RpbmcgMzIrKSB3b3VsZCBjb3JydXB0IHRoZSBvcGNvZGUuIEJyaWRnZSB0aHJv dWdoCi0rLy8gU2NyYXRjaERvdWJsZVJlZyAoRlBSIGYwKSBmb3IgdGhlIGNvbnZlcnNpb24uIEV4 dHJhY3QgYm90aCBsYW5lcycgR1BSCi0rLy8gcmVzdWx0cyBiZWZvcmUgd3JpdGluZyBkZXN0IHNv IHRoYXQgZGVzdCA9PSBzcmMgaXMgc2FmZS4KLSsvLwotKy8vIEF2b2lkIHJlcGxhY2VMYW5lSW50 MzJ4NCBvbiB0aGUgdGFpbDogb24gUE9XRVI4IGl0IG5lZWRzIGFuIGV4dHJhCi0rLy8gR1BSIHNj cmF0Y2gsIGJ1dCByMTEgYW5kIHIxMiBhcmUgYWxyZWFkeSBoZWxkIGFzIGEvYiBoZXJlLiBQYWNr IGJvdGgKLSsvLyBpbnQzMnMgaW50byBgYWAgd2l0aCBybGRpbWksIHRyYW5zZmVyIHZpYSBtdHZz cmQsIHRoZW4geHhwZXJtZGkgdGhlCi0rLy8gRFdzIGludG8gdGhlIGxvdyBoYWxmIHNvIHdhc20g bGFuZSAwIChCRSBXMykgaG9sZHMgYSwgbGFuZSAxIChXMikgYi4KLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjp0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciB0ZW1wKSB7Ci0rICAvLyBXYXNtIGBpMzJ4NC50cnVuY19zYXRfZjY0eDJf c196ZXJvYC4geHZjdmRwc3h3cyBzYXR1cmF0ZXMgdG8gSU5UMzJfTUlOCi0rICAvLyBvbiBvdmVy Zmxvdy9OYU4gKHBlciBJU0EpOyB3YXNtIHJlcXVpcmVzIE5hTiDihpIgMCwgc28gYSBwZXItZHdv cmQgTmFOCi0rICAvLyBtYXNrIHZpYSB4dmNtcGVxZHAgY2xhbXBzIE5hTiBsYW5lcyB0byAwIGJl Zm9yZSBsYXlpbmcgb3V0IHRoZSByZXN1bHQuCi0rICAvLyBPdXRwdXQgQkUgd29yZCBwb3NpdGlv bnMgbmVlZCB3YXNtIGxhbmUgb3JkZXI6IGxhbmUgMSDihpIgQkUgd29yZCAyLAotKyAgLy8gbGFu ZSAwIOKGkiBCRSB3b3JkIDMuIHh2Y3ZkcHN4d3MgbGFuZHMgaXRzIHJlc3VsdHMgYXQgQkUgd29y ZHMgMCBhbmQgMgotKyAgLy8gKHdpdGggcmVwbGljYXRpb24gaW50byAxLzMpOyBQYWNrVHdvV29y ZHNUb0xvd0hhbGYgbW92ZXMgdGhlbSBpbnRvCi0rICAvLyB0aGUgcmlnaHQgcG9zaXRpb25zIHdo aWxlIHplcm9pbmcgdGhlIHJlc3QuCi0rICAvLyBkZXN0PT1zcmMgc2FmZTogc3JjIGlzIGNvbnN1 bWVkIGJ5IHh2Y3ZkcHN4d3MgYW5kIHh2Y21wZXFkcCBiZWZvcmUKLSsgIC8vIGRlc3QgaXMgemVy b2VkLgotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y3Zk cHN4d3Moc2NyYXRjaCwgc3JjKTsKLSsgIGFzX3h2Y21wZXFkcChkZXN0LCBzcmMsCi0rICAgICAg ICAgICAgICAgc3JjKTsgIC8vIE5hTi1tYXNrOiAweEZGLi4uRiBwZXIgZHdvcmQgZm9yIG5vbi1O YU4sIDAgZm9yIE5hTgotKyAgYXNfeHhsYW5kKHNjcmF0Y2gsIHNjcmF0Y2gsIGRlc3QpOwotKyAg YXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOwotKyAgUGFja1R3b1dvcmRzVG9Mb3dIYWxmKCp0 aGlzLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWdu ZWRUcnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgewotKyAgLy8gV2FzbSBgaTMyeDQudHJ1 bmNfc2F0X2Y2NHgyX3VfemVyb2AuIHh2Y3ZkcHV4d3Mgc2VtYW50aWNzIGFscmVhZHkKLSsgIC8v IG1hdGNoIHRoZSB3YXNtIHNwZWMgd2l0aG91dCBhbnkgbWFza2luZzogTmFOIOKGkiAwLCBuZWdh dGl2ZSDihpIgMCwKLSsgIC8vIHBvc2l0aXZlIG92ZXJmbG93IOKGkiBVSU5UMzJfTUFYLiBTbyBu byBOYU4gbWFzayBuZWVkZWQ7IGp1c3QgcG9zaXRpb24KLSsgIC8vIHRoZSBzYXR1cmF0ZWQgcmVz dWx0cyBpbnRvIEJFIHdvcmRzIDIsMyB3aXRoIHplcm9zIGF0IHdvcmRzIDAsMS4KLSsgIC8vIGRl c3Q9PXNyYyBzYWZlOiBzcmMgY29uc3VtZWQgYnkgeHZjdmRwdXh3cyBiZWZvcmUgZGVzdCBpcyB6 ZXJvZWQuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfeHZj dmRwdXh3cyhzY3JhdGNoLCBzcmMpOwotKyAgYXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOwot KyAgUGFja1R3b1dvcmRzVG9Mb3dIYWxmKCp0aGlzLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKEZsb2F0 UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHRydW5jU2F0RmxvYXQzMng0VG9J bnQzMng0KHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVk VHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKAotKyAgICBGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICB1bnNpZ25lZFRydW5jU2F0RmxvYXQzMng0VG9JbnQz Mng0KHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQ2 NHgyVG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICB0cnVuY1NhdEZsb2F0NjR4MlRvSW50MzJ4NChzcmMsIGRlc3QsIFNjcmF0Y2hTaW1kMTI4 UmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRUcnVuY0Zsb2F0NjR4 MlRvSW50MzJ4NFJlbGF4ZWQoCi0rICAgIEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIHVuc2lnbmVkVHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0 LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rfQotKwotKy8vIGY2NHgyIOKGkiBmMzJ4NCAobG93IDIg bGFuZXM7IGhpZ2ggbGFuZXMgemVybykuIFdhc20gYGYzMng0LmRlbW90ZV9mNjR4Ml96ZXJvYC4K LSsvLyB4dmN2ZHBzcCBjb252ZXJ0cyBib3RoIGRvdWJsZXMgaW4gb25lIHNob3QsIHJlcGxpY2F0 aW5nIGVhY2ggcmVzdWx0IGFjcm9zcwotKy8vIGl0cyBkd29yZDogQkUgd29yZCBsYW5lcyA9IFtz KGluLmR3MCksIHMoaW4uZHcwKSwgcyhpbi5kdzEpLCBzKGluLmR3MSldLgotKy8vIE9uIFBQQzY0 TEUgd2FzbSBzdG9yYWdlIChseHZ4LWxvYWRlZCksIGlucHV0LmR3X0JFWzBdID0gd2FzbSBsYW5l IDEgYW5kCi0rLy8gaW5wdXQuZHdfQkVbMV0gPSB3YXNtIGxhbmUgMCwgc28gd2UgZ2V0IFtzKGwx KSwgcyhsMSksIHMobDApLCBzKGwwKV0gaW4KLSsvLyBCRSB3b3JkIG9yZGVyLiBXZSB0aGVuIHpl cm8gZGVzdCBhbmQgcGFjayBzKGwxKSBpbnRvIEJFIHdvcmQgMiAod2FzbQotKy8vIG91dHB1dCBs YW5lIDEpIGFuZCBzKGwwKSBpbnRvIEJFIHdvcmQgMyAod2FzbSBvdXRwdXQgbGFuZSAwKSB2aWEg dGhlCi0rLy8gc2hhcmVkIFBhY2tUd29Xb3Jkc1RvTG93SGFsZiBoZWxwZXIsIHdoaWNoIGhhcyBQ T1dFUjkgYW5kIFBPV0VSOCBwYXRocy4KLSsvLwotKy8vIGRlc3Q9PXNyYyBhbGlhc2luZyBzYWZl OiBzcmMgaXMgY29uc3VtZWQgYnkgeHZjdmRwc3AgYmVmb3JlIGRlc3QgaXMgemVyb2VkLgotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRGbG9hdDY0eDJUb0Zsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgYXNfeHZjdmRwc3Aoc2NyYXRjaCwgc3JjKTsKLSsgIFplcm9TaW1kMTI4KCp0 aGlzLCBkZXN0KTsKLSsgIFBhY2tUd29Xb3Jkc1RvTG93SGFsZigqdGhpcywgc2NyYXRjaCwgZGVz dCk7Ci0rfQotKwotKy8vIGYzMng0IChsb3cgMiBsYW5lcykg4oaSIGY2NHgyLiBXYXNtIGBmNjR4 Mi5wcm9tb3RlX2xvd19mMzJ4NGAuIHh2Y3ZzcGRwCi0rLy8gY29udmVydHMgYm90aCBCRSB3b3Jk IDAgYW5kIEJFIHdvcmQgMiBvZiBpdHMgc291cmNlIHRvIGRvdWJsZXMgaW4gQkUKLSsvLyBkd29y ZHMgMCBhbmQgMSByZXNwZWN0aXZlbHkuIFRvIGdldCB3YXNtIGxhbmVzIDAgYW5kIDEgKD0gaW5w dXQgQkUKLSsvLyB3b3JkcyAzIGFuZCAyKSBpbnRvIHRob3NlIHNvdXJjZSBwb3NpdGlvbnMsIHZt cmdsdyBtZXJnZXMgbG93IHdvcmRzOgotKy8vIFZSVC53b3JkWzBdID0gVlJBLndvcmRbMl0gPSB3 YXNtIGxhbmUgMSwgVlJULndvcmRbMl0gPSBWUkEud29yZFszXSA9Ci0rLy8gd2FzbSBsYW5lIDAg KHdpdGggcmVwbGljYXRlZCBjb3BpZXMgaW4gb2RkIHdvcmQgc2xvdHMgdGhhdCB4dmN2c3BkcAot Ky8vIGlnbm9yZXMpLiBPdXRwdXQgQkUgZHdvcmRzIGxhbmQgYXMgW2RvdWJsZShsYW5lMSksIGRv dWJsZShsYW5lMCldLAotKy8vIHdoaWNoIG9uIFBQQzY0TEUgc3RvcmFnZSBpcyBleGFjdGx5IHRo ZSB3YXNtIGY2NHgyIG91dHB1dCBsYXlvdXQuCi0rLy8KLSsvLyBkZXN0PT1zcmMgYWxpYXNpbmcg c2FmZTogdm1yZ2x3IGNvbnN1bWVzIHNyYyBpbnRvIGEgc2VwYXJhdGUgc2NyYXRjaAotKy8vIGJl Zm9yZSBkZXN0IGlzIHdyaXR0ZW4uCi0rLy8KLSsvLyAyIGluc25zLCBzaW5nbGUgU2NyYXRjaFNp bWQxMjggc2NvcGUuIEFsbCBvcHMgUE9XRVI3Ky4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252 ZXJ0RmxvYXQzMng0VG9GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg ewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3Ztcmdsdyhz Y3JhdGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5n KCkgJiAzMSk7Ci0rICBhc194dmN2c3BkcChkZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6dW5zaWduZWROYXJyb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBPbiBMRSwgVk1YIHBhY2sgc3dhcHMg b3BlcmFuZCBvcmRlciB2cyBXYXNtIGNvbnZlbnRpb24uCi0rICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodnBrc2h1cyksIHJocywgbGhzLCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWROYXJyb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBPbiBMRSwgVk1YIHBhY2sg c3dhcHMgb3BlcmFuZCBvcmRlciB2cyBXYXNtIGNvbnZlbnRpb24uCi0rICBFbWl0Vm14QmluYXJ5 KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnBrc3d1cyksIHJocywgbGhzLCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5Mb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIE9uIFBQQzY0IExFLCByYXcgdnVwa2xz YiB1bnBhY2tzIHRoZSBMT1cgV2FzbSBsYW5lcyAobm90IHZ1cGtoc2IpLgotKyAgLy8gR0NDIHZl Y191bnBhY2toIG1hcHMgdG8gdnVwa2xzYiBvbiBMRSAoc3dhcHBlZCBmcm9tIEJFIG5hbWluZyku Ci0rICAvLyBSYXcgdnVwa2xzYihbMS4uOCwtMS4uLThdKSA9IFsxLDIsMyw0LDUsNiw3LDhdLgot KyAgRW1pdFZteFVuYXJ5KAotKyAgICAgICp0aGlzLAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwg dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVwa2xzYih2cnQsIHZyYik7IH0sCi0r ICAgICAgc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5IaWdo SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBP biBQUEM2NCBMRSwgcmF3IHZ1cGtoc2IgdW5wYWNrcyB0aGUgSElHSCBXYXNtIGxhbmVzLgotKyAg RW1pdFZteFVuYXJ5KAotKyAgICAgICp0aGlzLAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVwa2hzYih2cnQsIHZyYik7IH0sCi0rICAg ICAgc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRl bkxvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICB6ZXJvRXh0ZW5k OHgxNlRvMTZ4OChzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNp Z25lZFdpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gdm1yZ2hiKHplcm8sIHNyYykgaW50ZXJsZWF2ZXMgemVybyBieXRlcyB3aXRoIHRoZSBCRS1o aWdoIGhhbGYgb2Ygc3JjLAotKyAgLy8gcHJvZHVjaW5nIHplcm8tZXh0ZW5kZWQgaGFsZndvcmRz IG9mIHRoZSBMRS1oaWdoIChXYXNtLWhpZ2gpIGxhbmVzLgotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h4bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNo KTsKLSsgIGFzX3ZtcmdoYihkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygp ICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp3aWRlbkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg ewotKyAgLy8gT24gUFBDNjQgTEUsIHJhdyB2dXBrbHNoIHVucGFja3MgTE9XIFdhc20gbGFuZXMg KEdDQyBzd2FwcyBoL2wgb24gTEUpLgotKyAgRW1pdFZteFVuYXJ5KAotKyAgICAgICp0aGlzLAot KyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNf dnVwa2xzaCh2cnQsIHZyYik7IH0sCi0rICAgICAgc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6d2lkZW5IaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14VW5hcnkoCi0rICAgICAgKnRoaXMsCi0rICAgICAg W10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192dXBraHNo KHZydCwgdnJiKTsgfSwKLSsgICAgICBzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZFdpZGVuTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIHplcm9FeHRlbmQxNng4VG8zMng0KHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkV2lkZW5IaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwot KyAgYXNfeHhseG9yKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gpOwotKyAgYXNfdm1yZ2hoKGRl c3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5n KCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuTG93SW50MzJ4NChG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBPbiBQUEM2NCBM RSwgcmF3IHZ1cGtsc3cgdW5wYWNrcyBMT1cgV2FzbSBsYW5lcy4KLSsgIEVtaXRWbXhVbmFyeSgK LSsgICAgICAqdGhpcywKLSsgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYikgeyBhLmFzX3Z1cGtsc3codnJ0LCB2cmIpOyB9LAotKyAgICAgIHNyYywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkV2lkZW5Mb3dJbnQzMng0KEZs b2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgemVyb0V4dGVuZDMyeDRUbzY0eDIoc3Jj LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5IaWdoSW50MzJ4NChG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14VW5hcnko Ci0rICAgICAgKnRoaXMsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWlu dDhfdCB2cmIpIHsgYS5hc192dXBraHN3KHZydCwgdnJiKTsgfSwKLSsgICAgICBzcmMsIGRlc3Qp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdpZGVuSGlnaEludDMyeDQo RmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gaTY0eDIuZXh0ZW5kX2hpZ2hf aTMyeDRfdTogdGFrZSBoaWdoIDIgaTMyIGxhbmVzIG9mIHNyYywgemVyby1leHRlbmQKLSsgIC8v IHRvIGk2NCBlYWNoLiBVc2Ugdm1yZ2h3IHRvIGludGVybGVhdmUgYSB6ZXJvIFZSIHdpdGggc3Jj IOKAlCBzYW1lIHNoYXBlCi0rICAvLyBhcyB0aGUgKGFscmVhZHktY29ycmVjdCkgdW5zaWduZWRX aWRlbkhpZ2hJbnQxNng4IHNpYmxpbmcgYWJvdmUuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOwotKyAgYXNfdm1y Z2h3KGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVu Y29kaW5nKCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01pbkZs b2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpIHsKLSsgIC8v IHBtaW46IHJlc3VsdFtpXSA9IHJoc1tpXSA8IGxoc1tpXSA/IHJoc1tpXSA6IGxoc1tpXQotKyAg Ly8geHZjbXBndHNwKG1hc2ssIGxocywgcmhzKSDihpIgMSB3aGVyZSBsaHMgPiByaHMgKGkuZS4s IHJocyA8IGxocykKLSsgIC8vIHh4c2VsOiBtYXNrPTEg4oaSIFhCPXJocy4gbWFzaz0wIOKGkiBY QT1saHMuCi0rICAvLyBSZXN1bHQgZ29lcyB0byBsaHNPckxoc0Rlc3QgKHNlY29uZCBwYXJhbSku Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfeHZjbXBndHNw KHNjcmF0Y2gsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0KTsKLSsgIGFzX3h4c2VsKGxoc09y TGhzRGVzdCwgbGhzT3JMaHNEZXN0LCByaHNPclJoc0Rlc3QsIHNjcmF0Y2gpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpwc2V1ZG9NaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIHBtaW4obGhzLCByaHMpID0gcmhzIDwg bGhzID8gcmhzIDogbGhzCi0rICAvLyBJbmxpbmUgdG8gaGFuZGxlIGRlc3QgYWxpYXNpbmcgd2l0 aCBlaXRoZXIgb3BlcmFuZC4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7 Ci0rICBhc194dmNtcGd0c3Aoc2NyYXRjaCwgbGhzLCByaHMpOwotKyAgLy8gbWFzaz0xIHdoZXJl IGxocyA+IHJocy4gWEM9MSDihpIgc2VsZWN0IFhCPXJocy4gWEM9MCDihpIgc2VsZWN0IFhBPWxo cy4KLSsgIGFzX3h4c2VsKGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cHNldWRvTWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNE ZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGxoc09yTGhzRGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlz KTsKLSsgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCk7 Ci0rICBhc194eHNlbChsaHNPckxoc0Rlc3QsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBz Y3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWluRmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfeHZjbXBndGRwKHNjcmF0Y2gsIGxo cywgcmhzKTsKLSsgIGFzX3h4c2VsKGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhz T3JSaHNEZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKLSsgIGFzX3h2Y21wZ3RzcChzY3JhdGNoLCByaHNPclJoc0Rlc3QsIGxoc09yTGhz RGVzdCk7Ci0rICBhc194eHNlbChsaHNPckxoc0Rlc3QsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNE ZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4Rmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAv LyBwbWF4KGxocywgcmhzKSA9IGxocyA8IHJocyA/IHJocyA6IGxocwotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y21wZ3RzcChzY3JhdGNoLCByaHMsIGxo cyk7Ci0rICAvLyBtYXNrPTEgd2hlcmUgcmhzID4gbGhzIChsaHMgPCByaHMpLiBYQz0xIOKGkiBz ZWxlY3QgWEI9cmhzLiBYQz0wIOKGkiBzZWxlY3QKLSsgIC8vIFhBPWxocy4KLSsgIGFzX3h4c2Vs KGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cHNldWRvTWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVz dCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y21w Z3RkcChzY3JhdGNoLCByaHNPclJoc0Rlc3QsIGxoc09yTGhzRGVzdCk7Ci0rICBhc194eHNlbChs aHNPckxoc0Rlc3QsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBzY3JhdGNoKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOwotKyAgYXNfeHZjbXBndGRwKHNjcmF0Y2gsIHJocywgbGhzKTsKLSsgIGFz X3h4c2VsKGRlc3QsIGxocywgcmhzLCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6ZG90SW50OHgxNkludDd4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgLy8gcmVzdWx0W2tdID0gbGhzWzJrXSpyaHNbMmtdICsgbGhzWzJrKzFd KnJoc1syaysxXSBmb3Igaz0wLi43LgotKyAgLy8gdm11bGVzYi92bXVsb3NiIHByb2R1Y2UgZXZl bi9vZGQgYnl0ZSBwcm9kdWN0cyBhcyBpMTYgaW4gbWF0Y2hpbmcKLSsgIC8vIGhhbGZ3b3JkIGxh bmVzOyB2YWRkdWhtIHN1bXMgdGhlbSBwYWlyd2lzZS4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAg dWludDhfdCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5j b2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0r ICBhc192bXVsZXNiKHMsIGwsIHIpOwotKyAgYXNfdm11bG9zYihkLCBsLCByKTsKLSsgIGFzX3Zh ZGR1aG0oZCwgcywgZCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNlaWxGbG9hdDMy eDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZyc3Bp cChkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjZWlsRmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cmRwaXAo ZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JGbG9hdDMyeDQo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZyc3BpbShk ZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbG9vckZsb2F0NjR4MihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnJkcGltKGRl c3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cnNwaXooZGVz dCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNGbG9hdDY0eDIoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZyZHBpeihkZXN0 LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWFyZXN0RmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cnNwaWMoZGVz dCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVhcmVzdEZsb2F0NjR4MihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnJkcGljKGRl c3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZubWFGbG9hdDMyeDQoRmxv YXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsKLSsgIGFzX3h2bm1zdWJh c3Aoc3JjRGVzdCwgc3JjMSwgc3JjMik7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZu bWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsK LSsgIGFzX3h2bm1zdWJhZHAoc3JjRGVzdCwgc3JjMSwgc3JjMik7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1pbkZsb2F0MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rl c3QpIHsKLSsgIGFzX3h2bWluc3Aoc3JjRGVzdCwgc3JjRGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bWluc3AoZGVzdCwgbGhzLCByaHMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDMyeDRSZWxheGVkKEZsb2F0 UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICBhc194dm1heHNwKHNyY0Rlc3QsIHNyY0Rlc3Qs IHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0MzJ4NFJlbGF4ZWQo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dm1h eHNwKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxv YXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgewotKyAgYXNfeHZtaW5k cChzcmNEZXN0LCBzcmNEZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt aW5GbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgYXNfeHZtaW5kcChkZXN0LCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rl c3QpIHsKLSsgIGFzX3h2bWF4ZHAoc3JjRGVzdCwgc3JjRGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bWF4ZHAoZGVzdCwgbGhzLCByaHMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpxMTVNdWxySW50MTZ4OFJlbGF4ZWQoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHExNU11bHJT YXRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rLy8gU0lNRCBvdmVybG9hZHMgYWNj ZXB0aW5nIGFuIGV4dHJhIEZsb2F0UmVnaXN0ZXIgdGVtcCAoc2hhcmVkLWhlYWRlciBzaWduYXR1 cmUKLSsvLyB1c2VkIGJ5IHg4Njsgb24gUFBDNjQgdGhlIHRlbXAgaXMgdW51c2VkIGZvciBtb3N0 IG9mIHRoZXNlKS4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwb3BjbnRJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsKLSsgIHBvcGNudEludDh4MTYoc3JjLCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRUcnVuY1NhdEZsb2F0 MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcCkgewotKyAgdW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4 NChzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkb3RJbnQ4eDE2SW50 N3gxNlRoZW5BZGQoRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg dGVtcCkgewotKyAgLy8gZGVzdCArPSBwYWlyd2lzZV93aWRlbl9pMTZfdG9faTMyKGRvdF9pOHgx NihsaHMsIHJocykpLgotKyAgLy8KLSsgIC8vIFN0ZXAgMTogaTE2eDggZG90IG9mIGk4IGJ5dGUg cGFpcnMgKHZtdWxlc2Ivdm11bG9zYi92YWRkdWhtKS4gS2VlcHMKLSsgIC8vIHRoZSBleGlzdGlu ZyBzaWduZWQtYnl0ZSBtdWx0aXBseSBzZW1hbnRpY3MgdGhhdCBtYXRjaCBBUk02NCBzZG90Ci0r ICAvLyBhbmQgeDg2IHZwZHBic3NkICh2bXN1bW1ibSB3b3VsZCBiZSBzaWduZWTDl3Vuc2lnbmVk IGFuZCBkaXZlcmdlIGZvcgotKyAgLy8gaTcgbGFuZXMgdGhhdCBiaXQtcGF0dGVybiBhcyBuZWdh dGl2ZSkuCi0rICAvLwotKyAgLy8gU3RlcCAyOiB2bXN1bXNobSBkZXN0LCBkb3QsIHNwbGF0X2h3 KDEpLCBkZXN0IGNvbXB1dGVzCi0rICAvLyAgIGRlc3QuaTMyW2tdID0gZGVzdC5pMzJba10gKyBk b3QuaTE2WzJrXSoxICsgZG90LmkxNlsyaysxXSoxCi0rICAvLyB3aGljaCBpcyBleGFjdGx5IHBh aXJ3aXNlIHdpZGVuICsgYWNjdW11bGF0ZSBpbiBhIHNpbmdsZSBpbnNuLgotKyAgLy8gc3BsYXRf aHcoMSkgaXMgYSBzaW5nbGUgdnNwbHRpc2ggKDUtYml0IFNJTU0gc3BsYXQgdG8gYWxsIDggaGFs ZndvcmRzKS4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50 OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCByID0gcmhzLmVuY29kaW5n KCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhf dCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IHQgPSB0ZW1wLmVuY29k aW5nKCkgJiAzMTsKLSsKLSsgIGFzX3ZtdWxlc2IocywgbCwgcik7Ci0rICBhc192bXVsb3NiKHQs IGwsIHIpOwotKyAgYXNfdmFkZHVobSh0LCBzLCB0KTsKLSsgIGFzX3ZzcGx0aXNoKHMsIDEpOwot KyAgYXNfdm1zdW1zaG0oZCwgdCwgcywgZCk7Ci0rfQotKwotKy8vIFNJTUQgb3BzIHBvcnRlZCBm cm9tIGFybTY0LSBhbmQgeDg2L3g2NC1zaGFwZWQgc2lnbmF0dXJlcy4KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpwZXJtdXRlSW50MTZ4OChjb25zdCB1aW50MTZfdCBsYW5lc1s4XSwgRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICB1aW50OF90IHNodWZmbGVMYW5lc1sxNl07Ci0rICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgIHNodWZmbGVMYW5lc1tpICogMl0gPSBs YW5lc1tpXSAqIDI7Ci0rICAgIHNodWZmbGVMYW5lc1tpICogMiArIDFdID0gbGFuZXNbaV0gKiAy ICsgMTsKLSsgIH0KLSsgIHNodWZmbGVJbnQ4eDE2KHNodWZmbGVMYW5lcywgc3JjLCBzcmMsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodFNpbWQxMjgoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hpZnQpIHsKLSsgIE1PWl9BU1NFUlQoc2hp ZnQgPCAxNik7Ci0rICBpZiAoc2hpZnQgPT0gMCkgewotKyAgICBtb3ZlU2ltZDEyOChzcmMsIGRl c3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyB2c2xkb2kgVlJULFZSQSxWUkIsU0g6IGNv bmNhdGVuYXRlIFZSQXx8VlJCLCB0YWtlIGJ5dGVzIFtTSC4uU0grMTVdLgotKyAgLy8gUm90YXRl IHJpZ2h0IGJ5IE4gPSB2c2xkb2koc3JjLCBzcmMsIDE2LU4pLgotKyAgYXNfdnNsZG9pKGRlc3Qs IHNyYywgc3JjLCAxNiAtIHNoaWZ0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVs SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIg dGVtcDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRl bXAyKSB7Ci0rICAvLyBQT1dFUjEwIGNvbGxhcHNlcyB0aGUgZW50aXJlIGk2NHgyIG11bHRpcGx5 IHRvIGEgc2luZ2xlIHZtdWxsZC4KLSsgIC8vIFBPV0VSOS9QT1dFUjggZmFsbCBiYWNrIHRvIHRo ZSBHUFIgcm91bmQtdHJpcCBwYXRoOiBleHRyYWN0IGVhY2gKLSsgIC8vIGxhbmUgcGFpciBpbnRv IEdQUnMgKG1mdnNybGQgZm9yIExFLWR3MC9XYXNtLWxhbmUtMCwgbWZ2c3JkIGZvcgotKyAgLy8g TEUtZHcxL2xhbmUtMSksIG11bHRpcGx5LCBhbmQgcmVhc3NlbWJsZSB2aWEgbXR2c3JkICsgeHhw ZXJtZGkuCi0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIGFzX3ZtdWxsZChkZXN0LmVuY29k aW5nKCkgJiAzMSwgbGhzLmVuY29kaW5nKCkgJiAzMSwgcmhzLmVuY29kaW5nKCkgJiAzMSk7Ci0r ICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIEFsaWFzaW5nIHNhZmV0eTogc3Rhc2ggdGhlIGxhbmUt MCBwcm9kdWN0IGluIFNjcmF0Y2hTaW1kMTI4ICh3aGljaAotKyAgLy8gaXMgbm9uLWFsbG9jYXRh YmxlLCBzbyBjYW5ub3QgYWxpYXMgbGhzL3JocykgYW5kIG9ubHkgd3JpdGUgZGVzdCBhdAotKyAg Ly8gdGhlIHZlcnkgZW5kLCBhZnRlciBib3RoIGxocyBhbmQgcmhzIGhhdmUgYmVlbiBmdWxseSBj b25zdW1lZC4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBhID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgYiA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGlm IChIYXNQT1dFUjkoKSkgewotKyAgICBhc19tZnZzcmxkKGEsIGxocyk7Ci0rICAgIGFzX21mdnNy bGQoYiwgcmhzKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4cGVybWRpKHNjcmF0Y2gsIGxocywg bGhzLCAyKTsKLSsgICAgYXNfbWZ2c3JkKGEsIHNjcmF0Y2gpOwotKyAgICBhc194eHBlcm1kaShz Y3JhdGNoLCByaHMsIHJocywgMik7Ci0rICAgIGFzX21mdnNyZChiLCBzY3JhdGNoKTsKLSsgIH0K LSsgIGFzX211bGxkKGEsIGEsIGIpOwotKyAgYXNfbXR2c3JkKHNjcmF0Y2gsIGEpOwotKwotKyAg YXNfbWZ2c3JkKGEsIGxocyk7Ci0rICBhc19tZnZzcmQoYiwgcmhzKTsKLSsgIGFzX211bGxkKGEs IGEsIGIpOwotKyAgYXNfbXR2c3JkKGRlc3QsIGEpOwotKyAgYXNfeHhwZXJtZGkoZGVzdCwgZGVz dCwgc2NyYXRjaCwgMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdHdpc2VBbmRO b3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIC8vIGFuZG5vdChsaHMsIHJocykgPSBsaHMgJiB+cmhzID0geHhsYW5kYyhsaHMsIHJocykK LSsgIGFzX3h4bGFuZGMoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpiaXR3aXNlU2VsZWN0U2ltZDEyOChGbG9hdFJlZ2lzdGVyIG9uVHJ1ZSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIG9uRmFsc2Us Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBtYXNrRGVzdCkgewotKyAgLy8gcmVzdWx0ID0gKG9uVHJ1ZSAmIG1hc2spIHwgKG9uRmFsc2Ug JiB+bWFzaykKLSsgIC8vIHh4c2VsOiBYQz0w4oaSWEEsIFhDPTHihpJYQiDihpIgWFQgPSAoWEEg JiB+WEMpIHwgKFhCICYgWEMpCi0rICAvLyBOZWVkIFhBPW9uRmFsc2UsIFhCPW9uVHJ1ZSwgWEM9 bWFzay4KLSsgIGFzX3h4c2VsKG1hc2tEZXN0LCBvbkZhbHNlLCBvblRydWUsIG1hc2tEZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cG9wY250SW50OHgxNihGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14VW5hcnkoCi0rICAgICAgKnRo aXMsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsg YS5hc192cG9wY250Yih2cnQsIHZyYik7IH0sCi0rICAgICAgc3JjLCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciB0ZW1wKSB7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIFNpbmdsZS1p bnN0cnVjdGlvbiBjb2xsYXBzZSBvbiBQT1dFUjEwLgotKyAgICBhc192ZXh0cmFjdGJtKGRlc3Qs IHNyYyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIFBPV0VSOCsgdmJwZXJtcS1iYXNlZCBi aXRtYXNrOiBjdGxbaV0gPSAoMTUtaSkqOCBwcm9kdWNlcyB0aGUgd2FzbS1zcGVjCi0rICAvLyBi aXRtYXAgKGJpdCBpID0gTVNCIG9mIExFIGxhbmUgaSkgaW4gZHcwIGxvdyAxNiBiaXRzLgotKyAg aW50OF90IGN0bFsxNl0gPSB7MTIwLCAxMTIsIDEwNCwgOTYsIDg4LCA4MCwgNzIsIDY0LAotKyAg ICAgICAgICAgICAgICAgICAgNTYsICA0OCwgIDQwLCAgMzIsIDI0LCAxNiwgOCwgIDB9OwotKyAg bG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsK LSsgIGFzX3ZicGVybXEodGVtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEs IHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIGFzX21mdnNyZChkZXN0LCB0ZW1wKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB0ZW1wKSB7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIGFzX3ZleHRy YWN0aG0oZGVzdCwgc3JjKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gU2FtZSByZWNpcGUg YXMgYml0bWFza0ludDh4MTYgYnV0IGN0bCBwaWNrcyBoYWxmd29yZCBNU0JzOgotKyAgLy8gQkUg Yml0ICgxNC0yaSkqOCBmb3IgbGFuZSBpLCBwbHVzIDggaWdub3JlLWJ5dGVzIChoaWdoIGJpdCBz ZXQpLgotKyAgaW50OF90IGN0bFsxNl0gPSB7MTEyLCAgOTYsICAgODAsICAgNjQsICAgNDgsICAg MzIsICAgMTYsICAgMCwKLSsgICAgICAgICAgICAgICAgICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0x MjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjh9OwotKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1k Q29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsKLSsgIGFzX3ZicGVybXEodGVtcC5lbmNv ZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsK LSsgIGFzX21mdnNyZChkZXN0LCB0ZW1wKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 Yml0bWFza0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7Ci0rICBp ZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIGFzX3ZleHRyYWN0d20oZGVzdCwgc3JjKTsKLSsgICAg cmV0dXJuOwotKyAgfQotKyAgLy8gU2FtZSByZWNpcGUgYXMgYml0bWFza0ludDh4MTYgYnV0IGN0 bCBwaWNrcyB3b3JkIE1TQnM6Ci0rICAvLyBCRSBiaXQgKDEyLTRpKSo4IGZvciBsYW5lIGksIHBs dXMgMTIgaWdub3JlLWJ5dGVzIChoaWdoIGJpdCBzZXQpLgotKyAgaW50OF90IGN0bFsxNl0gPSB7 OTYsICAgNjQsICAgMzIsICAgMCwgICAgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwKLSsgICAgICAg ICAgICAgICAgICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0x Mjh9OwotKyAgbG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwp LCB0ZW1wKTsKLSsgIGFzX3ZicGVybXEodGVtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGlu ZygpICYgMzEsIHRlbXAuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIGFzX21mdnNyZChkZXN0LCB0ZW1w KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0bWFza0ludDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAg IGFzX3ZleHRyYWN0ZG0oZGVzdCwgc3JjKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gU2Ft ZSByZWNpcGUgYXMgdGhlIG90aGVyIGJpdG1hc2sgdmFyaWFudHMuIGN0bCBwaWNrcyBkd29yZCBN U0JzOgotKyAgLy8gQkUgYml0IDY0IGZvciBsYW5lIDAsIEJFIGJpdCAwIGZvciBsYW5lIDEsIHBs dXMgMTQgaWdub3JlLWJ5dGVzLgotKyAgaW50OF90IGN0bFsxNl0gPSB7NjQsICAgMCwgICAgLTEy OCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwKLSsgICAgICAgICAgICAgICAgICAgIC0x MjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjh9OwotKyAgbG9hZENv bnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdGwpLCB0ZW1wKTsKLSsgIGFz X3ZicGVybXEodGVtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRlbXAu ZW5jb2RpbmcoKSAmIDMxKTsKLSsgIGFzX21mdnNyZChkZXN0LCB0ZW1wKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29u ZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJo cywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBjb21wYXJlSW50NjR4Mihjb25kLCBsaHNE ZXN0LCByaHMsIGxoc0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJl SW50NjR4MihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIEVtaXRWbXhDb21wYXJlKCp0aGlzLCBjb25kLCBsaHMsIHJocywgZGVzdCwgVk1YX0JJTkFS WV9XUkFQUEVSKHZjbXBlcXVkKSwKLSsgICAgICAgICAgICAgICAgIFZNWF9CSU5BUllfV1JBUFBF Uih2Y21wZ3RzZCksIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3R1ZCkpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVn aXN0ZXIgbGhzRGVzdCkgewotKyAgbWluRmxvYXQzMng0KGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZtaW5zcChkZXN0LCBsaHMsIHJocyk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgewotKyAgLy8gV2Fz bSBtaW4gd2l0aCBOYU4gcHJvcGFnYXRpb24uCi0rICAvLyBEZXRlY3QgTmFOIGluIGVpdGhlciBv cGVyYW5kIChub3QgdmlhIGFkZCB3aGljaCBmYWxzZWx5IGZsYWdzIGluZisoLWluZikpLgotKyAg Ly8gQ29tcHV0ZSBtYXNrIGFuZCBhZGQgQkVGT1JFIG1pbiAobWluIG1heSBjbG9iYmVyIGxocyB2 aWEgZGVzdCBhbGlhc2luZykuCi0rICBhc194dmNtcGVxc3AodGVtcDEsIGxocywgbGhzKTsKLSsg IGFzX3h2Y21wZXFzcCh0ZW1wMiwgcmhzLCByaHMpOwotKyAgYXNfeHhsYW5kKHRlbXAxLCB0ZW1w MSwgdGVtcDIpOwotKyAgYXNfeHZhZGRzcCh0ZW1wMiwgbGhzLCByaHMpOwotKyAgYXNfeHZtaW5z cChkZXN0LCBsaHMsIHJocyk7Ci0rICBhc194eHNlbChkZXN0LCB0ZW1wMiwgZGVzdCwgdGVtcDEp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3Rl ciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgbWluRmxvYXQ2NHgyKGxoc0Rlc3Qs IHJocywgbGhzRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZtaW5kcChk ZXN0LCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1w MSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1w MikgewotKyAgLy8gTmFOIG1hc2sgYW5kIGFkZCBtdXN0IGJlIGNvbXB1dGVkIEJFRk9SRSBtaW4g KHdoaWNoIG1heSBjbG9iYmVyIGxocyB2aWEKLSsgIC8vIGRlc3QpLgotKyAgYXNfeHZjbXBlcWRw KHRlbXAxLCBsaHMsIGxocyk7Ci0rICBhc194dmNtcGVxZHAodGVtcDIsIHJocywgcmhzKTsKLSsg IGFzX3h4bGFuZCh0ZW1wMSwgdGVtcDEsIHRlbXAyKTsgIC8vIHRlbXAxID0gfjAgd2hlbiBib3Ro IG5vbi1OYU4KLSsgIGFzX3h2YWRkZHAodGVtcDIsIGxocywgcmhzKTsgICAgIC8vIHRlbXAyID0g YWRkIChOYU4gc291cmNlKQotKyAgYXNfeHZtaW5kcChkZXN0LCBsaHMsIHJocyk7ICAgICAgLy8g ZGVzdCA9IG1pbiAobWF5IGNsb2JiZXIgbGhzKQotKyAgYXNfeHhzZWwoZGVzdCwgdGVtcDIsIGRl c3QsIHRlbXAxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIG1heEZsb2F0MzJ4 NChsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt YXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFz X3h2bWF4c3AoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt YXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVn aXN0ZXIgdGVtcDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgdGVtcDIpIHsKLSsgIC8vIFdhc20gbWF4IHdpdGggTmFOIHByb3BhZ2F0aW9uLCB1c2lu ZyB0ZW1wIHJlZ2lzdGVycy4KLSsgIGFzX3h2Y21wZXFzcCh0ZW1wMSwgbGhzLCBsaHMpOwotKyAg YXNfeHZjbXBlcXNwKHRlbXAyLCByaHMsIHJocyk7Ci0rICBhc194eGxhbmQodGVtcDEsIHRlbXAx LCB0ZW1wMik7Ci0rICBhc194dmFkZHNwKHRlbXAyLCBsaHMsIHJocyk7Ci0rICBhc194dm1heHNw KGRlc3QsIGxocywgcmhzKTsKLSsgIGFzX3h4c2VsKGRlc3QsIHRlbXAyLCBkZXN0LCB0ZW1wMSk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVy IHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBtYXhGbG9hdDY0eDIobGhzRGVzdCwg cmhzLCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dm1heGRwKGRl c3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAx LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAy KSB7Ci0rICBhc194dmNtcGVxZHAodGVtcDEsIGxocywgbGhzKTsKLSsgIGFzX3h2Y21wZXFkcCh0 ZW1wMiwgcmhzLCByaHMpOwotKyAgYXNfeHhsYW5kKHRlbXAxLCB0ZW1wMSwgdGVtcDIpOwotKyAg YXNfeHZhZGRkcCh0ZW1wMiwgbGhzLCByaHMpOwotKyAgYXNfeHZtYXhkcChkZXN0LCBsaHMsIHJo cyk7Ci0rICBhc194eHNlbChkZXN0LCB0ZW1wMiwgZGVzdCwgdGVtcDEpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KEZsb2F0 UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dmN2c3B1eHdzKGRl c3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dHJhY3RMYW5lSW50NjR4 Mih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGxh bmUgPCAyKTsKLSsgIGlmIChsYW5lID09IDEpIHsKLSsgICAgLy8gTGFuZSAxID0gQkUgZHdvcmQg MCA9IHJlZ2lzdGVyIGJpdHNbMDo2M10uCi0rICAgIGFzX21mdnNyZChkZXN0LnJlZywgc3JjKTsK LSsgIH0gZWxzZSB7Ci0rICAgIC8vIExhbmUgMCA9IEJFIGR3b3JkIDEuCi0rICAgIGlmIChIYXNQ T1dFUjkoKSkgewotKyAgICAgIGFzX21mdnNybGQoZGVzdC5yZWcsIHNyYyk7Ci0rICAgIH0gZWxz ZSB7Ci0rICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgICAgICBh c194eHBlcm1kaShzY3JhdGNoLCBzcmMsIHNyYywgMik7Ci0rICAgICAgYXNfbWZ2c3JkKGRlc3Qu cmVnLCBzY3JhdGNoKTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpyZXBsYWNlTGFuZUludDY0eDIodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXI2NCByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgMik7Ci0rICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0r ICAgIC8vIDEgaW5zbiwgbm8gc2NyYXRjaCBWU1IuIFVJTSBieXRlIG9mZnNldDogbGFuZSAwIOKG kiA4LCBsYW5lIDEg4oaSIDAuCi0rICAgIGFzX3ZpbnNkKGxoc0Rlc3QsIHJocy5yZWcsICgxIC0g bGFuZSkgKiA4KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKLSsgIGFzX210dnNyZChzY3JhdGNoLCByaHMucmVnKTsKLSsgIGlmIChs YW5lID09IDApIHsKLSsgICAgLy8gUmVwbGFjZSBkdzEgKExFIGxvdyA9IGxhbmUgMCkuIEtlZXAg ZHcwIChsYW5lIDEpLgotKyAgICAvLyBkbT0wYjAwOiBbbGhzRGVzdC5kdzAsIHNjcmF0Y2guZHcw XQotKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNoLCAwKTsKLSsgIH0g ZWxzZSB7Ci0rICAgIC8vIFJlcGxhY2UgZHcwIChMRSBoaWdoID0gbGFuZSAxKS4gS2VlcCBkdzEg KGxhbmUgMCkuCi0rICAgIC8vIGRtPTBiMDE6IFtzY3JhdGNoLmR3MCwgbGhzRGVzdC5kdzFdCi0r ICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHNjcmF0Y2gsIGxoc0Rlc3QsIDEpOwotKyAgfQotK30K LSsKLSsvLyBTSU1EIDMtb3BlcmFuZCBhcml0aG1ldGljICh4ODZfc2hhcmVkLXN0eWxlIHNpZ25h dHVyZXMpLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEZsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZhZGRzcChkZXN0LCBsaHMsIHJo cyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEZsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZhZGRkcChkZXN0LCBsaHMsIHJo cyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklO QVJZX1dSQVBQRVIodmFkZHVobSksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YWRkSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWJtKSwg bGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZGbG9hdDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2ZGl2c3Ao ZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0TGFu ZUludDE2eDgodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NF UlQobGFuZSA8IDgpOwotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIGFzX3ZleHRyYWN0dWgo U2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgMTQgLSAyICogbGFuZSk7Ci0rICAgIGFzX21mdnNyZChk ZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgIGFzX2V4dHNoKGRlc3QsIGRlc3QpOwotKyAg ICByZXR1cm47Ci0rICB9Ci0rICBFeHRyYWN0TGFuZVRvR1BSKCp0aGlzLCBsYW5lLCBzcmMsIGRl c3QsIDIsIDE2KTsKLSsgIGFzX2V4dHNoKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpleHRyYWN0TGFuZUludDMyeDQodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDQpOwotKyAgRXh0cmFjdExhbmVUb0dQUigq dGhpcywgbGFuZSwgc3JjLCBkZXN0LCA0LCAzMik7Ci0rICAvLyBFeHRyYWN0TGFuZVRvR1BSIGxl YXZlcyB0aGUgYWRqYWNlbnQgbGFuZSBpbiB0aGUgaGlnaCAzMiBiaXRzIGZvciB0aGUKLSsgIC8v IHVuc2hpZnRlZCBsYW5lcyAoMCBhbmQgMik7IGNhbm9uaWNhbGl6ZSB0byBhIHNpZ24tZXh0ZW5k ZWQgaTMyLCBhcyB0aGUKLSsgIC8vIGk4eDE2L2kxNng4IGV4dHJhY3RzIGRvIHdpdGggZXh0c2Iv ZXh0c2guIEEgY29uc3VtZXIgdGhhdCByZWFkcyB0aGUgZnVsbAotKyAgLy8gNjQtYml0IHJlZ2lz dGVyIC0tIGUuZy4gdGhlIFBPV0VSOCBpMzIuY3R6IGVtdWxhdGlvbiwgd2hvc2UgNjQtYml0IG5l Zy9hbmQuCi0rICAvLyB3aXRoIGEgMzItYml0IGNudGx6dyBvdGhlcndpc2UgbWlzLWhhbmRsZXMg YSB6ZXJvIGxvdyB3b3JkIG92ZXIgbm9uemVybwotKyAgLy8gaGlnaCBnYXJiYWdlIGFuZCByZXR1 cm5zIC0xIC0tIHJlcXVpcmVzIHRoaXMuCi0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExhbmVJbnQ4eDE2KHVpbnQzMl90IGxhbmUs IEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGxhbmUgPCAxNik7Ci0rICBpZiAo SGFzUE9XRVI5KCkpIHsKLSsgICAgYXNfdmV4dHJhY3R1YihTY3JhdGNoU2ltZDEyOFJlZywgc3Jj LCAxNSAtIGxhbmUpOwotKyAgICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaFNpbWQxMjhSZWcpOwot KyAgICBhc19leHRzYihkZXN0LCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgRXh0cmFj dExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0LCAxLCA4KTsKLSsgIGFzX2V4dHNiKGRl c3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhJbnQxNng4KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZtYXhzaCksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bWF4SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWF4 c3cpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heElu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14Qmlu YXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1heHNiKSwgbGhzLCByaHMsIGRlc3QpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9X UkFQUEVSKHZtaW5zYiksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bXVsSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXVsdXdtKSwgbGhzLCBy aHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuYXJyb3dJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gT24gTEUsIFZNWCBw YWNrIHN3YXBzIG9wZXJhbmQgb3JkZXIgdnMgV2FzbSBjb252ZW50aW9uLgotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZwa3Noc3MpLCByaHMsIGxocywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwbGF0WDIoUmVnaXN0ZXI2NCBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIGFzX210dnNy ZGQoZGVzdCwgc3JjLnJlZywgc3JjLnJlZyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19tdHZzcmQo ZGVzdCwgc3JjLnJlZyk7Ci0rICAgIGFzX3h4cGVybWRpKGRlc3QsIGRlc3QsIGRlc3QsIDApOwot KyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJJbnQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZzdWJ1d20pLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnN3aXp6bGVJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIC8vIFdhc20gaTh4MTYuc3dpenpsZTogcmVzdWx0W2ldID0gKHJoc1tp XSA8IDE2KSA/IGxoc1tyaHNbaV1dIDogMC4KLSsgIC8vCi0rICAvLyBTdHJhdGVneTogYnVpbGQg Y3RybCBpbiBTY3JhdGNoU2ltZDEyOCAod2hpY2ggY2FuJ3QgYWxpYXMgaW5wdXRzCi0rICAvLyBi ZWNhdXNlIHYwIGlzIG5vbi1hbGxvY2F0YWJsZSkuIFVzZSB2c3VidWJzKHNwbGF0KDE1KSwgcmhz KSB0bwotKyAgLy8gcHJvZHVjZSBjdHJsID0gbWF4KDAsIDE1IC0gcmhzKTsgdGhlIHNhdHVyYXRp b24gY2xhbXBzIG91dC1vZi1yYW5nZQotKyAgLy8gaW5kaWNlcyB0byAwLCBhbmQgdGhvc2UgcG9z aXRpb25zIGdldCBtYXNrZWQgb2ZmIGJlbG93LgotKyAgLy8KLSsgIC8vIFRoZSBtYXNrIGlzIGNv bXB1dGVkIHZpYSB2Y21wZ3R1YihyaHMsIHNwbGF0KDE1KSkgKyB4eGxub3Ig4oCUIDB4RkYKLSsg IC8vIHdoZXJlIHJocyA8PSAxNS4gUmVmb3JtdWxhdGluZyAicmhzIDwgMTYiIGFzICIhKHJocyA+ IDE1KSIgbGV0cyB1cwotKyAgLy8gdXNlIHZzcGx0aXNiIHdpdGggYSA1LWJpdCBzaWduZWQgaW1t ZWRpYXRlIChQNyssIDEgaW5zbiwgbm8gR1BSCi0rICAvLyBzY3JhdGNoKSBmb3IgYm90aCBzcGxh dC1vZi0xNSBzaXRlcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cwotKyAgLy8gbW92ZVB0cigweDBG MEYwRjBGKS9tb3ZlUHRyKDB4MTAxMDEwMTApICsgc3BsYXRYNCBkYW5jZS4KLSsgIC8vCi0rICAv LyBBbGlhc2luZzogZGVzdCBtYXkgZXF1YWwgbGhzICh3YXNtIGJhc2VsaW5lIGNhbGxzIHN3aXp6 bGVJbnQ4eDE2KAotKyAgLy8gcnNkLCBycywgcnNkKTsgSW9uJ3MgdXNlUmVnaXN0ZXJBdFN0YXJ0 IHBlcm1pdHMgdGhlIHNhbWUpLiBXaGVuCi0rICAvLyBkZXN0ICE9IHJocywgY3RybCBjYW4gYmUg YnVpbHQgaW4gc2NyYXRjaCBhbmQgdGhlIG1hc2sgY29tcHV0ZWQKLSsgIC8vIGFmdGVyIHRoZSBw ZXJtdXRlIChyaHMgaXMgc3RpbGwgYWxpdmUpLiBXaGVuIGRlc3QgPT0gcmhzLCB0aGUKLSsgIC8v IHBlcm11dGUgd291bGQgY2xvYmJlciByaHMgYmVmb3JlIHdlIGNvdWxkIGNvbXB1dGUgdGhlIG1h c2ssIHNvIHRoZQotKyAgLy8gbWFzayBnb2VzIHRvIHRoZSByZWQgem9uZSBmaXJzdC4KLSsgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IHMgPSBzY3JhdGNo LmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzE7Ci0r ICB1aW50OF90IHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5l bmNvZGluZygpICYgMzE7Ci0rCi0rICBpZiAoZGVzdCAhPSByaHMpIHsKLSsgICAgYXNfdnNwbHRp c2IocywgMTUpOwotKyAgICBhc192c3VidWJzKHMsIHMsIHIpOyAgIC8vIHNjcmF0Y2ggPSBjdHJs Ci0rICAgIGFzX3ZwZXJtKGQsIGwsIGwsIHMpOyAgLy8gZGVzdCA9IHZwZXJtKGxocywgbGhzLCBj dHJsKQotKyAgICBhc192c3BsdGlzYihzLCAxNSk7Ci0rICAgIGFzX3ZjbXBndHViKHMsIHIsIHMp OyAgICAgICAgICAgICAvLyBzY3JhdGNoID0gMHhGRiB3aGVyZSByaHMgPiAxNQotKyAgICBhc194 eGxhbmRjKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOyAgLy8gZGVzdCAmPSB+c2NyYXRjaCAoPSBieXRl cy10by1rZWVwKQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBkZXN0ID09IHJoczogdnBl cm0gY2xvYmJlcnMgcmhzLCBzbyBidWlsZCB0aGUgYnl0ZXMtdG8temVybyBtYXNrIGZpcnN0Ci0r ICAvLyBhbmQgc3Rhc2ggaXQuIFRoZSB4eGxhbmRjIGF0IHRoZSBlbmQgY29uc3VtZXMgdGhlIHVu LWludmVydGVkIGZvcm0uCi0rICBhc192c3BsdGlzYihzLCAxNSk7Ci0rICBhc192Y21wZ3R1Yihz LCByLCBzKTsgIC8vIHNjcmF0Y2ggPSAweEZGIHdoZXJlIHJocyA+IDE1Ci0rICBSZWRab25lU3Rh c2hTaW1kMTI4KCp0aGlzLCBzY3JhdGNoLCAwKTsKLSsgIGFzX3ZzcGx0aXNiKHMsIDE1KTsKLSsg IGFzX3ZzdWJ1YnMocywgcywgcik7ICAgLy8gc2NyYXRjaCA9IGN0cmwKLSsgIGFzX3ZwZXJtKGQs IGwsIGwsIHMpOyAgLy8gZGVzdCA9IHZwZXJtKGxocywgbGhzLCBjdHJsKQotKyAgUmVkWm9uZVJl c3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBzY3JhdGNoKTsKLSsgIGFzX3h4bGFuZGMoZGVzdCwgZGVz dCwgc2NyYXRjaCk7ICAvLyBkZXN0ICY9IH5zY3JhdGNoICg9IGJ5dGVzLXRvLWtlZXApCi0rfQot Ky8vIFNJTUQgMy1vcGVyYW5kIGFyaXRobWV0aWMgKGNvbnRpbnVlZCkuCi0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YWRkSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdXdtKSwg bGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRJbnQ2NHgy KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgq dGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGR1ZG0pLCBsaHMsIHJocywgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZ X1dSQVBQRVIodmFkZHNocyksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YWRkU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkc2Jz KSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZGbG9h dDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2ZGl2 ZHAoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5JbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFy eSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW5zaCksIGxocywgcmhzLCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2bWluc3cpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om11bEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgYXNfeHZtdWxzcChkZXN0LCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om11bEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgYXNfeHZtdWxkcChkZXN0LCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om11bEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBT Y3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMs IHNjcmF0Y2gpOwotKyAgRW1pdFZteFRlcm5hcnkoCi0rICAgICAgKnRoaXMsCi0rICAgICAgW10o QXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50 OF90IHZyYykgewotKyAgICAgICAgYS5hc192bWxhZGR1aG0odnJ0LCB2cmEsIHZyYiwgdnJjKTsK LSsgICAgICB9LAotKyAgICAgIGxocywgcmhzLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBF Uih2cGtzd3NzKSwgcmhzLCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWJGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IGFzX3h2c3Vic3AoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWJGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IGFzX3h2c3ViZHAoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzdWJJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJ1aG0pLCBsaHMsIHJocywg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YkludDY0eDIoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhf QklOQVJZX1dSQVBQRVIodnN1YnVkbSksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6c3ViSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWJt KSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJTYXRJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJzaHMpLCBsaHMsIHJocywgZGVz dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YlNhdEludDh4MTYoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodnN1YnNicyksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5Eb3RJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBpMzJ4NC5kb3RfaTE2eDhfczogcmVzdWx0W2tdID0g bGhzWzJrXSpyaHNbMmtdICsgbGhzWzJrKzFdKnJoc1syaysxXS4KLSsgIC8vIHZtc3Vtc2htIGNv bXB1dGVzIGV4YWN0bHkgdGhhdCBmb3IgZWFjaCBpMzIgbGFuZSBwbHVzIGFuIGFkZGVuZCAoVlJD KS4KLSsgIC8vIFdpdGggVlJDID0gMCwgdGhlIGFkZGVuZCBkaXNhcHBlYXJzIGFuZCB3ZSBnZXQg dGhlIHdhc20gc3BlYyByZXN1bHQgaW4KLSsgIC8vIGEgc2luZ2xlIGluc3RydWN0aW9uLiB4eGx4 b3IgemVyb3MgdGhlIHNjcmF0Y2ggaW4gMSBpbnNuLCBzbyB0b3RhbCBpcwotKyAgLy8gMiBpbnNu cyB2cyB0aGUgb2xkIHZtdWxlc2gvdm11bG9zaC92YWRkdXdtIHRyaW8uCi0rICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNfeHhseG9yKHNjcmF0Y2gsIHNjcmF0Y2gs IHNjcmF0Y2gpOwotKyAgYXNfdm1zdW1zaG0oZGVzdC5lbmNvZGluZygpICYgMzEsIGxocy5lbmNv ZGluZygpICYgMzEsIHJocy5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgICBzY3JhdGNo LmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwotKy8vIFNJTUQgdmFyaWFibGUtc2hpZnQgYW5kIEZN QSBoZWxwZXJzLgotKy8vIFBhdHRlcm46IHNwbGF0IHRoZSBHUFIgc2hpZnQgY291bnQgYWNyb3Nz IGFsbCBsYW5lcyBvZiBhIHNjcmF0Y2ggVlNSLAotKy8vIHRoZW4gaXNzdWUgYSB2ZWN0b3Itc2hp ZnQgb24gbGhzIGFuZCB0aGUgc3BsYXQuIHZzbHtiLGh9IC8gdnNye2IsaH0gLwotKy8vIHZzcmF7 YixofSB1c2UgdGhlIGxvdyAzLW9yLTQgYml0cyBvZiBlYWNoIGxhbmUncyBzaGlmdCBjb3VudCwg ZXhhY3RseQotKy8vIG1hdGNoaW5nIHdhc20gbW9kdWxvLU4gc2hpZnQgc2VtYW50aWNzLgotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMs IFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlz KTsKLSsgIHNwbGF0WDE2KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodnNsYiksIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMp OwotKyAgc3BsYXRYMTYocmhzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZN WF9CSU5BUllfV1JBUFBFUih2c3JhYiksIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHNwbGF0WDE2KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14 QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYiksIGxocywgc2NyYXRjaCwgZGVz dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDE2eDgoRmxvYXRS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKLSsgIHNwbGF0WDgocmhzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xoKSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDE2eDgoRmxvYXRSZWdp c3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2Ny YXRjaCgqdGhpcyk7Ci0rICBzcGxhdFg4KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5 KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYWgpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hT aW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBzcGxhdFg4KHJocywgc2NyYXRjaCk7Ci0r ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyaCksIGxocywgc2Ny YXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHNwbGF0WDQocmhzLCBzY3JhdGNoKTsKLSsgIEVt aXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2x3KSwgbGhzLCBzY3JhdGNo LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0SW50NjR4MihG bG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNj b3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgc3BsYXRYNChyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbGQpLCBsaHMsIHNjcmF0Y2gsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50MzJ4NChGbG9h dFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHNwbGF0WDQocmhzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhC aW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhdyksIGxocywgc2NyYXRjaCwgZGVz dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQ2NHgyKEZsb2F0 UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOwotKyAgc3BsYXRYNChyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFkKSwgbGhzLCBzY3JhdGNoLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgc3BsYXRYNChyaHMsIHNjcmF0Y2gp OwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcncpLCBsaHMs IHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJp Z2h0U2hpZnRJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBzcGxhdFg0 KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQ RVIodnNyZCksIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmZtYUZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVnaXN0ZXIgc3JjMiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0 KSB7Ci0rICBhc194dm1hZGRhc3Aoc3JjRGVzdCwgc3JjMSwgc3JjMik7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmZtYUZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYzEsIEZsb2F0UmVn aXN0ZXIgc3JjMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBzcmNEZXN0KSB7Ci0rICBhc194dm1hZGRhZHAoc3JjRGVzdCwgc3JjMSwgc3JjMik7Ci0r fQotKwotKy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlCi0rCi0rfSAgLy8gbmFtZXNw YWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBqaXRfcHBjNjRfTWFj cm9Bc3NlbWJsZXJfcHBjNjRfaW5sX2ggKi8KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0 L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJs ZXItcHBjNjQuY3BwCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi43 MDJmYjNjZDRjYmEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9B c3NlbWJsZXItcHBjNjQuY3BwCi1AQCAtMCwwICsxLDM0NjcgQEAKLSsvKiAtKi0gTW9kZTogQysr OyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg LSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291 cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJs aWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlz dHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6 Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L01hY3Jv QXNzZW1ibGVyLXBwYzY0LmgiCi0rCi0rI2luY2x1ZGUgImppdC9CYWlsb3V0cy5oIgotKyNpbmNs dWRlICJqaXQvQmFzZWxpbmVGcmFtZS5oIgotKyNpbmNsdWRlICJqaXQvRmx1c2hJQ2FjaGUuaCIK LSsjaW5jbHVkZSAiaml0L0ppdEZyYW1lcy5oIgotKyNpbmNsdWRlICJqaXQvSml0UnVudGltZS5o IgotKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXIuaCIKLSsjaW5jbHVkZSAiaml0L01vdmVF bWl0dGVyLmgiCi0rI2luY2x1ZGUgImppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5o IgotKyNpbmNsdWRlICJ2bS9KaXRBY3RpdmF0aW9uLmgiCi0rI2luY2x1ZGUgInZtL0pTQ29udGV4 dC5oIgotKyNpbmNsdWRlICJ3YXNtL1dhc21TdHVicy5oIgotKwotKyNpbmNsdWRlICJqaXQvTWFj cm9Bc3NlbWJsZXItaW5sLmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsK LSsKLStNYWNyb0Fzc2VtYmxlciYgTWFjcm9Bc3NlbWJsZXJQUEM2NDo6YXNNYXNtKCkgewotKyAg cmV0dXJuICpzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcio+KHRoaXMpOwotK30KLSsKLStjb25z dCBNYWNyb0Fzc2VtYmxlciYgTWFjcm9Bc3NlbWJsZXJQUEM2NDo6YXNNYXNtKCkgY29uc3Qgewot KyAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBNYWNyb0Fzc2VtYmxlcio+KHRoaXMpOwotK30K LSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsvLyBPdXQtb2YtbGluZSBmYWtlIGV4aXQgZnJhbWUKLSsKLStib29s IE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmJ1aWxkT09MRmFrZUV4aXRGcmFtZSh2b2lkKiBm YWtlUmV0dXJuQWRkcikgewotKyAgYXNNYXNtKCkuUHVzaChGcmFtZURlc2NyaXB0b3IoRnJhbWVU eXBlOjpJb25KUykpOwotKyAgYXNNYXNtKCkuUHVzaChJbW1QdHIoZmFrZVJldHVybkFkZHIpKTsK LSsgIGFzTWFzbSgpLlB1c2goRnJhbWVQb2ludGVyKTsKLSsgIHJldHVybiB0cnVlOwotK30KLSsK LSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsvLyBMb2FkIGludDMyIG9yIGRvdWJsZSBmcm9tIG1lbW9yeQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bG9hZEludDMyT3JEb3VibGUoY29uc3QgQWRk cmVzcyYgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg TGFiZWwgZW5kOwotKwotKyAgLy8gTG9hZCB0aGUgYm94ZWQgdmFsdWUgYW5kIHN0YXNoIGluIHRo ZSBGUFIgaW1tZWRpYXRlbHksIHRoZW4gcmV1c2UgdGhlCi0rICAvLyBHUFIgZm9yIHRoZSB0YWcg dGVzdC4gIE9ubHkgb25lIHNjcmF0Y2ggR1BSIGlzIGhlbGQgaGVyZSBzbyB0aGF0Ci0rICAvLyBi cmFuY2hUZXN0SW50MzIgY2FuIGFjcXVpcmUgdGhlIHNlY29uZCBvbmUgZm9yIHRoZSBJbW1UYWcg Y29uc3RhbnQuCi0rICBsb2FkUHRyKEFkZHJlc3Moc3JjLmJhc2UsIHNyYy5vZmZzZXQpLCBzY3Jh dGNoKTsKLSsgIGFzX210dnNyZChkZXN0LCBzY3JhdGNoKTsKLSsgIHhfc3JkaShzY3JhdGNoLCBz Y3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOwotKyAgYXNNYXNtKCkuYnJhbmNoVGVzdEludDMyKEFz c2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gsICZlbmQpOwotKyAgLy8gSXQgd2FzIGFuIGludDMy LiAgUmVjb3ZlciB0aGUgYm94ZWQgdmFsdWUgZnJvbSB0aGUgRlBSLCBzaWduLWV4dGVuZAotKyAg Ly8gdGhlIGxvdyAzMiBiaXRzLCBhbmQgY29udmVydCB0byBkb3VibGUuCi0rICBhc19tZnZzcmQo c2NyYXRjaCwgZGVzdCk7Ci0rICBhc19leHRzdyhzY3JhdGNoLCBzY3JhdGNoKTsKLSsgIGFzX210 dnNyZChkZXN0LCBzY3JhdGNoKTsKLSsgIGFzX2ZjZmlkKGRlc3QsIGRlc3QpOwotKwotKyAgYmlu ZCgmZW5kKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpsb2FkSW50 MzJPckRvdWJsZShjb25zdCBCYXNlSW5kZXgmIGFkZHIsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBMYWJlbCBlbmQ7Ci0rCi0rICBjb21wdXRlU2NhbGVkQWRk cmVzcyhhZGRyLCBzY3JhdGNoKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBhZGRyLm9m ZnNldCksIHNjcmF0Y2gpOwotKyAgYXNfbXR2c3JkKGRlc3QsIHNjcmF0Y2gpOwotKyAgeF9zcmRp KHNjcmF0Y2gsIHNjcmF0Y2gsIEpTVkFMX1RBR19TSElGVCk7Ci0rICBhc01hc20oKS5icmFuY2hU ZXN0SW50MzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaCwgJmVuZCk7Ci0rICBhc19tZnZz cmQoc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19leHRzdyhzY3JhdGNoLCBzY3JhdGNoKTsKLSsgIGFz X210dnNyZChkZXN0LCBzY3JhdGNoKTsKLSsgIGFzX2ZjZmlkKGRlc3QsIGRlc3QpOwotKwotKyAg YmluZCgmZW5kKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMK LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmNvbnZlcnRVSW50MzJUb0RvdWJs ZShSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBtdHZzcnd6OiBWU1Jb ZGVzdF0uZHcwID0gemVyb19leHRfNjQoc3JjWzMyOjYzXSk7IFA4KyAoSVNBIDIuMDcpLgotKyAg Ly8gUmVwbGFjZXMgcmxkaWNsICsgbXR2c3JkICgyIGluc25zICsgc2NyYXRjaCkgd2l0aCAxIGlu c24uCi0rICBhc19tdHZzcnd6KGRlc3QsIHNyYyk7Ci0rICBhc19mY2ZpZChkZXN0LCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpjb252ZXJ0VUludDMyVG9G bG9hdDMyKFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBtdHZzcnd6 ICsgZmNmaWRzOyBzYW1lIHJlY2lwZSBhcyBjb252ZXJ0VUludDMyVG9Eb3VibGUuCi0rICBhc19t dHZzcnd6KGRlc3QsIHNyYyk7Ci0rICBhc19mY2ZpZHMoZGVzdCwgZGVzdCk7Ci0rfQotKwotKy8v IEhlbHBlciBmb3IgdGhlIG5lZ2F0aXZlLXplcm8gY2hlY2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJv dW5kLXRyaXAuCi0rLy8gUHJlY29uZGl0aW9uOiBgZGVzdGAgaG9sZHMgdGhlIGludGVnZXIgcm91 bmQtdHJpcCByZXN1bHQ7IGlmIGl0IGVxdWFscwotKy8vIHplcm8sIHRoZW4gYHNyY2Agd2FzIGVp dGhlciArMC4wIG9yIC0wLjAgKHRob3NlIGFyZSB0aGUgb25seSBkb3VibGVzCi0rLy8gdGhhdCBy b3VuZC10cmlwIHRvIGludCAwKS4gRGlzdGluZ3Vpc2ggdGhlbSBieSBpbnNwZWN0aW5nIHNyYydz IHNpZ24KLSsvLyBiaXQ6IC0wLjAgaGFzIGl0cyBNU0Igc2V0LCBzbyBhbiBtZnZzcmQtdGhlbi1z aWduZWQtY21wLWFnYWluc3QtemVybwotKy8vIGJyYW5jaGVzIHRvIGBmYWlsYCBvbmx5IGZvciAt MC4wLiBOb24temVybyBgZGVzdGAgdmFsdWVzIChpbmNsdWRpbmcKLSsvLyBldmVyeSBuZWdhdGl2 ZSBpbnRlZ2VyKSBza2lwIHRoZSBjaGVjayBlbnRpcmVseS4KLStzdGF0aWMgdm9pZCBFbWl0TmVn YXRpdmVaZXJvQ2hlY2soTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdCYgbWFzbSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRl c3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0r ICBMYWJlbCBub3RaZXJvOwotKyAgbWFzbS5hc19jbXBkaShkZXN0LCAwKTsKLSsgIG1hc20ubWFf YihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICBtYXNtLmFzX21mdnNyZChzY3JhdGNoLCBzcmMpOwotKyAgbWFzbS5hc19jbXBkaShzY3Jh dGNoLCAwKTsKLSsgIG1hc20ubWFfYihBc3NlbWJsZXI6Okxlc3NUaGFuLCBmYWlsKTsKLSsgIG1h c20uYmluZCgmbm90WmVybyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBh dDo6Y29udmVydERvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBM YWJlbCogZmFpbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgbmVnYXRpdmVaZXJvQ2hlY2spIHsKLSsgIC8vIFRydW5jYXRlIHRvIGlu dDMyIChyb3VuZCB0b3dhcmQgemVybyksIHNpZ24tZXh0ZW5kLCBhbmQgdmVyaWZ5Ci0rICAvLyBl eGFjdG5lc3MgdmlhIHJvdW5kLXRyaXAgY29tcGFyZS4gZmN0aXd6IHdyaXRlcyB0aGUgaW50MzIg dG8gQkUKLSsgIC8vIGJpdHMgMzIuLjYzIG9mIHRoZSBGUFI7IG1mdnNyZCBleHRyYWN0cyBhbmQg ZXh0c3cgc2lnbi1leHRlbmRzLgotKyAgLy8gVGhlIGNvbXBhcmUgYWxzbyBjYXRjaGVzIE5hTiAo dW5vcmRlcmVkKSBhbmQgSW5mIChzYXR1cmF0ZWQgdG8KLSsgIC8vIElOVDMyX3tNSU4sTUFYfSwg d29uJ3Qgcm91bmQtdHJpcCBlcXVhbCkuCi0rICBhc19mY3Rpd3ooU2NyYXRjaERvdWJsZVJlZywg c3JjKTsKLSsgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIGFzX2V4dHN3 KGRlc3QsIGRlc3QpOwotKyAgYXNfbXR2c3JkKFNjcmF0Y2hEb3VibGVSZWcsIGRlc3QpOwotKyAg YXNfZmNmaWQoU2NyYXRjaERvdWJsZVJlZywgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBhc19mY21w dShTY3JhdGNoRG91YmxlUmVnLCBzcmMpOwotKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVx dWFsT3JVbm9yZGVyZWQsIGZhaWwpOwotKwotKyAgaWYgKG5lZ2F0aXZlWmVyb0NoZWNrKSB7Ci0r ICAgIEVtaXROZWdhdGl2ZVplcm9DaGVjaygqdGhpcywgc3JjLCBkZXN0LCBmYWlsKTsKLSsgIH0K LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpjb252ZXJ0RG91YmxlVG9Q dHIoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZVpl cm9DaGVjaykgewotKyAgLy8gU2FtZSBwYXR0ZXJuIGFzIGNvbnZlcnREb3VibGVUb0ludDMyIGJ1 dCB0byBpbnQ2NCAobm8gc2lnbi1leHRlbmQKLSsgIC8vIG5lZWRlZCBzaW5jZSBmY3RpZHogYWxy ZWFkeSBwcm9kdWNlcyBhIDY0LWJpdCByZXN1bHQpLgotKyAgYXNfZmN0aWR6KFNjcmF0Y2hEb3Vi bGVSZWcsIHNyYyk7Ci0rICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBh c19tdHZzcmQoU2NyYXRjaERvdWJsZVJlZywgZGVzdCk7Ci0rICBhc19mY2ZpZChTY3JhdGNoRG91 YmxlUmVnLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIGFzX2ZjbXB1KFNjcmF0Y2hEb3VibGVSZWcs IHNyYyk7Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZmFp bCk7Ci0rCi0rICBpZiAobmVnYXRpdmVaZXJvQ2hlY2spIHsKLSsgICAgRW1pdE5lZ2F0aXZlWmVy b0NoZWNrKCp0aGlzLCBzcmMsIGRlc3QsIGZhaWwpOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyUFBDNjRDb21wYXQ6OmNvbnZlcnRGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVy IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmVaZXJvQ2hlY2spIHsK LSsgIC8vIFNhbWUgYXMgY29udmVydERvdWJsZVRvSW50MzIgYnV0IHRoZSByb3VuZC10cmlwIHVz ZXMgZmNmaWRzIHNvIHRoZQotKyAgLy8gY29tcGFyaXNvbiBoYXBwZW5zIGF0IHNpbmdsZSBwcmVj aXNpb24gKG1hdGNoZXMgc3JjJ3MgYWN0dWFsIHdpZHRoKS4KLSsgIGFzX2ZjdGl3eihTY3JhdGNo RG91YmxlUmVnLCBzcmMpOwotKyAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOwot KyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICBhc19tdHZzcmQoU2NyYXRjaERvdWJsZVJlZywg ZGVzdCk7Ci0rICBhc19mY2ZpZHMoU2NyYXRjaERvdWJsZVJlZywgU2NyYXRjaERvdWJsZVJlZyk7 Ci0rICBhc19mY21wdShTY3JhdGNoRG91YmxlUmVnLCBzcmMpOwotKyAgbWFfYihBc3NlbWJsZXI6 OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZhaWwpOwotKwotKyAgaWYgKG5lZ2F0aXZlWmVy b0NoZWNrKSB7Ci0rICAgIEVtaXROZWdhdGl2ZVplcm9DaGVjaygqdGhpcywgc3JjLCBkZXN0LCBm YWlsKTsKLSsgIH0KLSt9Ci0rCi0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0 Ojp0b2dnbGVkQ2FsbChKaXRDb2RlKiB0YXJnZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuYWJsZWQpIHsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAvLyBzdGFuemEoOCkgKyBtdGN0ci9iY3RybCgyKSA9IDEwIGluc3Ry dWN0aW9ucy4KLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJ bnNucyk7Ci0rICBCdWZmZXJPZmZzZXQgYm9Mb2FkID0KLSsgICAgICBlbWl0TG9hZDY0U3Rhbnph KHNjcmF0Y2gsICh1aW50NjRfdCl1aW50cHRyX3QodGFyZ2V0LT5yYXcoKSkpOwotKyAgQ29kZU9m ZnNldCBvZmZzZXQoYm9Mb2FkLmdldE9mZnNldCgpKTsKLSsgIGFkZFBlbmRpbmdKdW1wKGJvTG9h ZCwgSW1tUHRyKHRhcmdldC0+cmF3KCkpLCBSZWxvY2F0aW9uS2luZDo6SklUQ09ERSk7Ci0rICBp ZiAoZW5hYmxlZCkgewotKyAgICB4c19tdGN0cihzY3JhdGNoKTsKLSsgICAgYXNfYmN0cihMaW5r Qml0OjpMaW5rQik7Ci0rICB9IGVsc2UgewotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAg IHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIH0KLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0r ICBNT1pfQVNTRVJUX0lGKCFvb20oKSwgbmV4dE9mZnNldCgpLmdldE9mZnNldCgpIC0gb2Zmc2V0 Lm9mZnNldCgpID09Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZWRDYWxsU2l6 ZShudWxscHRyKSk7Ci0rICByZXR1cm4gb2Zmc2V0OwotK30KLSsKLSsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBF eGNlcHRpb24gaGFuZGxpbmcKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Omhh bmRsZUZhaWx1cmVXaXRoSGFuZGxlclRhaWwoCi0rICAgIExhYmVsKiBwcm9maWxlckV4aXRUYWls LCBMYWJlbCogYmFpbG91dFRhaWwsCi0rICAgIHVpbnQzMl90KiByZXR1cm5WYWx1ZUNoZWNrT2Zm c2V0KSB7Ci0rICAvLyBSb3VuZCBzaXplb2YoUmVzdW1lRnJvbUV4Y2VwdGlvbikgdXAgdG8gQUJJ U3RhY2tBbGlnbm1lbnQuIFRoZQotKyAgLy8gY2Fub25pY2FsIChzeiArIGFsaWduIC0gMSkgJiB+ KGFsaWduIC0gMSkgZm9ybSBpcyBleGFjdDogd2hlbiBzegotKyAgLy8gaXMgYWxyZWFkeSBhIG11 bHRpcGxlIG9mIGBhbGlnbmAgdGhlIHJvdW5kaW5nIGlzIGEgbm8tb3AuIFRoZQotKyAgLy8gcHJl dmlvdXMgKHN6ICsgYWxpZ24pICYgfihhbGlnbiAtIDEpIG92ZXItYWxsb2NhdGVkIGJ5IGBhbGln bmAKLSsgIC8vIGJ5dGVzIHdoZW5ldmVyIHN6IHdhcyBhbHJlYWR5IGFsaWduZWQuCi0rICBpbnQg c2l6ZSA9IChzaXplb2YoUmVzdW1lRnJvbUV4Y2VwdGlvbikgKyBBQklTdGFja0FsaWdubWVudCAt IDEpICYKLSsgICAgICAgICAgICAgfihBQklTdGFja0FsaWdubWVudCAtIDEpOwotKyAgYXNNYXNt KCkuc3ViUHRyKEltbTMyKHNpemUpLCBTdGFja1BvaW50ZXIpOwotKyAgLy8gVXNlIHIzIChmaXJz dCBhcmd1bWVudCByZWdpc3RlcikuCi0rICBtb3YoU3RhY2tQb2ludGVyLCByMyk7Ci0rCi0rICB1 c2luZyBGbiA9IHZvaWQgKCopKFJlc3VtZUZyb21FeGNlcHRpb24qIHJmZSk7Ci0rICBhc01hc20o KS5zZXR1cFVuYWxpZ25lZEFCSUNhbGwocjQpOwotKyAgYXNNYXNtKCkucGFzc0FCSUFyZyhyMyk7 Ci0rICBhc01hc20oKS5jYWxsV2l0aEFCSTxGbiwgSGFuZGxlRXhjZXB0aW9uPigKLSsgICAgICBB QklUeXBlOjpHZW5lcmFsLCBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJOjpEb250Q2hlY2tIYXNFeGl0 RnJhbWUpOwotKwotKyAgKnJldHVyblZhbHVlQ2hlY2tPZmZzZXQgPSBhc01hc20oKS5jdXJyZW50 T2Zmc2V0KCk7Ci0rCi0rICBMYWJlbCBlbnRyeUZyYW1lOwotKyAgTGFiZWwgY2F0Y2hfOwotKyAg TGFiZWwgZmluYWxseTsKLSsgIExhYmVsIHJldHVybkJhc2VsaW5lOwotKyAgTGFiZWwgcmV0dXJu SW9uOwotKyAgTGFiZWwgYmFpbG91dDsKLSsgIExhYmVsIHdhc21JbnRlcnBFbnRyeTsKLSsgIExh YmVsIHdhc21DYXRjaDsKLSsKLSsgIGxvYWQzMihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1l RnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZLaW5kKCkpLCByMyk7Ci0rICBhc01hc20oKS5icmFuY2gz MihBc3NlbWJsZXI6OkVxdWFsLCByMywKLSsgICAgICAgICAgICAgICAgICAgIEltbTMyKEV4Y2Vw dGlvblJlc3VtZUtpbmQ6OkVudHJ5RnJhbWUpLCAmZW50cnlGcmFtZSk7Ci0rICBhc01hc20oKS5i cmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywgSW1tMzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6 Q2F0Y2gpLAotKyAgICAgICAgICAgICAgICAgICAgJmNhdGNoXyk7Ci0rICBhc01hc20oKS5icmFu Y2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywgSW1tMzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6Rmlu YWxseSksCi0rICAgICAgICAgICAgICAgICAgICAmZmluYWxseSk7Ci0rICBhc01hc20oKS5icmFu Y2gzMihBc3NlbWJsZXI6OkVxdWFsLCByMywKLSsgICAgICAgICAgICAgICAgICAgIEltbTMyKEV4 Y2VwdGlvblJlc3VtZUtpbmQ6OkZvcmNlZFJldHVybkJhc2VsaW5lKSwKLSsgICAgICAgICAgICAg ICAgICAgICZyZXR1cm5CYXNlbGluZSk7Ci0rICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6 OkVxdWFsLCByMywKLSsgICAgICAgICAgICAgICAgICAgIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtp bmQ6OkZvcmNlZFJldHVybklvbiksICZyZXR1cm5Jb24pOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIo QXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkJhaWxvdXQp LAotKyAgICAgICAgICAgICAgICAgICAgJmJhaWxvdXQpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIo QXNzZW1ibGVyOjpFcXVhbCwgcjMsCi0rICAgICAgICAgICAgICAgICAgICBJbW0zMihFeGNlcHRp b25SZXN1bWVLaW5kOjpXYXNtSW50ZXJwRW50cnkpLAotKyAgICAgICAgICAgICAgICAgICAgJndh c21JbnRlcnBFbnRyeSk7Ci0rICBhc01hc20oKS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBy MywgSW1tMzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6V2FzbUNhdGNoKSwKLSsgICAgICAgICAgICAg ICAgICAgICZ3YXNtQ2F0Y2gpOwotKwotKyAgYnJlYWtwb2ludCgpOyAgLy8gSW52YWxpZCBraW5k LgotKwotKyAgLy8gTm8gZXhjZXB0aW9uIGhhbmRsZXIuIFJldHVybiBlcnJvciBmcm9tIGVudHJ5 IGZyYW1lLgotKyAgYmluZCgmZW50cnlGcmFtZSk7Ci0rICBhc01hc20oKS5tb3ZlVmFsdWUoTWFn aWNWYWx1ZShKU19JT05fRVJST1IpLCBKU1JldHVybk9wZXJhbmQpOwotKyAgbG9hZFB0cihBZGRy ZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFtZVBvaW50 ZXIoKSksCi0rICAgICAgICAgIEZyYW1lUG9pbnRlcik7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3Rh Y2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwK LSsgICAgICAgICAgU3RhY2tQb2ludGVyKTsKLSsgIHJldCgpOwotKwotKyAgLy8gQ2F0Y2ggaGFu ZGxlci4KLSsgIGJpbmQoJmNhdGNoXyk7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVy LCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlRhcmdldCgpKSwgcjMpOwotKyAgbG9hZFB0 cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFt ZVBvaW50ZXIoKSksCi0rICAgICAgICAgIEZyYW1lUG9pbnRlcik7Ci0rICBsb2FkUHRyKEFkZHJl c3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRl cigpKSwKLSsgICAgICAgICAgU3RhY2tQb2ludGVyKTsKLSsgIGp1bXAocjMpOwotKwotKyAgLy8g RmluYWxseSBibG9jay4KLSsgIGJpbmQoJmZpbmFsbHkpOwotKyAgVmFsdWVPcGVyYW5kIGV4Y2Vw dGlvbiA9IFZhbHVlT3BlcmFuZChyNCk7Ci0rICBsb2FkVmFsdWUoQWRkcmVzcyhTdGFja1BvaW50 ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRXhjZXB0aW9uKCkpLAotKyAgICAgICAg ICAgIGV4Y2VwdGlvbik7Ci0rCi0rICBWYWx1ZU9wZXJhbmQgZXhjZXB0aW9uU3RhY2sgPSBWYWx1 ZU9wZXJhbmQocjUpOwotKyAgbG9hZFZhbHVlKAotKyAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVy LCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkV4Y2VwdGlvblN0YWNrKCkpLAotKyAgICAg IGV4Y2VwdGlvblN0YWNrKTsKLSsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJl c3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mVGFyZ2V0KCkpLCByMyk7Ci0rICBsb2FkUHRyKEFk ZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkZyYW1lUG9p bnRlcigpKSwKLSsgICAgICAgICAgRnJhbWVQb2ludGVyKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhT dGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mU3RhY2tQb2ludGVyKCkp LAotKyAgICAgICAgICBTdGFja1BvaW50ZXIpOwotKwotKyAgcHVzaFZhbHVlKGV4Y2VwdGlvbik7 Ci0rICBwdXNoVmFsdWUoZXhjZXB0aW9uU3RhY2spOwotKyAgcHVzaFZhbHVlKEJvb2xlYW5WYWx1 ZSh0cnVlKSk7Ci0rICBqdW1wKHIzKTsKLSsKLSsgIC8vIEZvcmNlZCByZXR1cm4gZnJvbSBiYXNl bGluZS4KLSsgIExhYmVsIHByb2ZpbGluZ0luc3RydW1lbnRhdGlvbjsKLSsgIGJpbmQoJnJldHVy bkJhc2VsaW5lKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21F eGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkpLAotKyAgICAgICAgICBGcmFtZVBvaW50 ZXIpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlv bjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCi0rICAgICAgICAgIFN0YWNrUG9pbnRlcik7Ci0r ICBsb2FkVmFsdWUoQWRkcmVzcyhGcmFtZVBvaW50ZXIsIEJhc2VsaW5lRnJhbWU6OnJldmVyc2VP ZmZzZXRPZlJldHVyblZhbHVlKCkpLAotKyAgICAgICAgICAgIEpTUmV0dXJuT3BlcmFuZCk7Ci0r ICBqdW1wKCZwcm9maWxpbmdJbnN0cnVtZW50YXRpb24pOwotKwotKyAgLy8gRm9yY2VkIHJldHVy biBmcm9tIElvbi4KLSsgIGJpbmQoJnJldHVybklvbik7Ci0rICBsb2FkVmFsdWUoQWRkcmVzcyhT dGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRXhjZXB0aW9uKCkpLAot KyAgICAgICAgICAgIEpTUmV0dXJuT3BlcmFuZCk7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQ b2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKLSsg ICAgICAgICAgRnJhbWVQb2ludGVyKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIs IFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mU3RhY2tQb2ludGVyKCkpLAotKyAgICAgICAg ICBTdGFja1BvaW50ZXIpOwotKwotKyAgYmluZCgmcHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsK LSsgIHsKLSsgICAgTGFiZWwgc2tpcFByb2ZpbGluZ0luc3RydW1lbnRhdGlvbjsKLSsgICAgQWJz b2x1dGVBZGRyZXNzIGFkZHJlc3NPZkVuYWJsZWQoCi0rICAgICAgICBhc01hc20oKS5ydW50aW1l KCktPmdlY2tvUHJvZmlsZXIoKS5hZGRyZXNzT2ZFbmFibGVkKCkpOwotKyAgICBhc01hc20oKS5i cmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBhZGRyZXNzT2ZFbmFibGVkLCBJbW0zMigwKSwKLSsg ICAgICAgICAgICAgICAgICAgICAgJnNraXBQcm9maWxpbmdJbnN0cnVtZW50YXRpb24pOwotKyAg ICBqdW1wKHByb2ZpbGVyRXhpdFRhaWwpOwotKyAgICBiaW5kKCZza2lwUHJvZmlsaW5nSW5zdHJ1 bWVudGF0aW9uKTsKLSsgIH0KLSsKLSsgIHhzX21yKFN0YWNrUG9pbnRlciwgRnJhbWVQb2ludGVy KTsKLSsgIC8vIFBvcCBGUCBmcm9tIHN0YWNrLCB0aGVuIHJldHVybiAocG9wIExSICsgYmxyKS4K LSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApLCBGcmFtZVBvaW50ZXIpOwotKyAg YXNNYXNtKCkuYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBTdGFja1BvaW50ZXIpOwotKyAg cmV0KCk7Ci0rCi0rICAvLyBCYWlsb3V0LgotKyAgYmluZCgmYmFpbG91dCk7Ci0rICBsb2FkUHRy KEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkJhaWxv dXRJbmZvKCkpLAotKyAgICAgICAgICByNSk7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwKLSsgICAg ICAgICAgU3RhY2tQb2ludGVyKTsKLSsgIHhzX2xpKFJldHVyblJlZywgMSk7Ci0rICBqdW1wKGJh aWxvdXRUYWlsKTsKLSsKLSsgIC8vIFdhc20gaW50ZXJwIGVudHJ5LgotKyAgYmluZCgmd2FzbUlu dGVycEVudHJ5KTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21F eGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkpLAotKyAgICAgICAgICBGcmFtZVBvaW50 ZXIpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlv bjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCi0rICAgICAgICAgIFN0YWNrUG9pbnRlcik7Ci0r ICBtb3ZlUHRyKEltbVdvcmQod2FzbTo6SW50ZXJwRmFpbEluc3RhbmNlUmVnKSwgSW5zdGFuY2VS ZWcpOwotKyAgcmV0KCk7Ci0rCi0rICAvLyBXYXNtIGNhdGNoLgotKyAgYmluZCgmd2FzbUNhdGNo KTsKLSsgIHdhc206OkdlbmVyYXRlSnVtcFRvQ2F0Y2hIYW5kbGVyKGFzTWFzbSgpLCBTdGFja1Bv aW50ZXIsIHI0LCByNSwgcjYpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbGFtcERv dWJsZVRvVWludDgoRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBT Y3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsKLSsgIGlmIChIYXNQT1dF UjkoKSkgewotKyAgICAvLyBQOSB4c21heGpkcCB1c2VzIEphdmEvSlMgc2VtYW50aWNzIChJU0Eg djMuMEIpOiBhbnkgTmFOCi0rICAgIC8vIGlzIHRyZWF0ZWQgYXMgImxlc3MgdGhhbiBhbnkgbnVt YmVyIHRoYXQgaXMgbm90IGEgTmFOIiwgc28KLSsgICAgLy8geHNtYXhqZHAoaW5wdXQsIDApIGNv bGxhcHNlcyB7TmFOLCAtSW5mLCDiiaQgMH0gdG8gMCBpbiBvbmUgaW5zbiDigJQKLSsgICAgLy8g dGhlICLiiaQgMCBvciBOYU4g4oaSIDAiIGJyYW5jaCBkYW5jZSBkaXNhcHBlYXJzLgotKyAgICAv LwotKyAgICAvLyBBZnRlciB0aGUgbWF4LCBmY3RpZCAocm91bmQtdG8tbmVhcmVzdC1ldmVuIHBl ciBGUFNDUiBkZWZhdWx0LAotKyAgICAvLyBtYXRjaGVzIEVDTUEgVWludDhDbGFtcGVkQXJyYXkn cyByb3VuZC1oYWxmLXRvLWV2ZW4pIHNhdHVyYXRlcwotKyAgICAvLyBvdXQtb2YtaW50NjQgdmFs dWVzIHRvIElOVDY0X01BWC4gUmVtYWluaW5nIHVwcGVyIGNsYW1wCi0rICAgIC8vIChvdXRwdXQg PiAyNTUg4oaSIDI1NSkgaXMgb25lIGNtcGRpICsgaXNlbC4KLSsgICAgemVyb0RvdWJsZShmcHNj cmF0Y2gpOwotKyAgICBhc194c21heGpkcChmcHNjcmF0Y2gsIGlucHV0LCBmcHNjcmF0Y2gpOwot KyAgICBhc19mY3RpZChmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICAgIGFzX21mdnNyZChvdXRw dXQsIGZwc2NyYXRjaCk7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgICAgUmVnaXN0ZXIgbWF4MjU1ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICB4c19s aShtYXgyNTUsIDI1NSk7Ci0rICAgIGFzX2NtcGRpKG91dHB1dCwgMjU1KTsKLSsgICAgYXNfaXNl bChvdXRwdXQsIG1heDI1NSwgb3V0cHV0LCBHcmVhdGVyVGhhbik7Ci0rICAgIHJldHVybjsKLSsg IH0KLSsKLSsgIC8vIFBPV0VSOCBmYWxsYmFjazogeHNtYXhqZHAgaXMgdW5hdmFpbGFibGUsIHNv IGZpbHRlciBOYU4gZXhwbGljaXRseQotKyAgLy8gYmVmb3JlIGZjdGlkLiBQZXIgUG93ZXIgSVNB LCBmY3RpZCBtYXBzIE5hTiB0byBJTlQ2NF9NQVgsIHdoaWNoCi0rICAvLyB3b3VsZCBjbGFtcCB0 byAyNTUgaW5zdGVhZCBvZiB0aGUgc3BlYy1yZXF1aXJlZCAwLgotKyAgTGFiZWwgcG9zaXRpdmUs IGJlbG93MjU1LCBkb25lOwotKyAgemVyb0RvdWJsZShmcHNjcmF0Y2gpOwotKyAgYnJhbmNoRG91 YmxlKERvdWJsZUdyZWF0ZXJUaGFuLCBpbnB1dCwgZnBzY3JhdGNoLCAmcG9zaXRpdmUpOwotKyAg ewotKyAgICBtb3ZlMzIoSW1tMzIoMCksIG91dHB1dCk7Ci0rICAgIGp1bXAoJmRvbmUpOwotKyAg fQotKwotKyAgYmluZCgmcG9zaXRpdmUpOwotKwotKyAgbG9hZENvbnN0YW50RG91YmxlKDI1NS4w LCBmcHNjcmF0Y2gpOwotKyAgYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBpbnB1dCwgZnBz Y3JhdGNoLCAmYmVsb3cyNTUpOwotKyAgewotKyAgICBtb3ZlMzIoSW1tMzIoMjU1KSwgb3V0cHV0 KTsKLSsgICAganVtcCgmZG9uZSk7Ci0rICB9Ci0rCi0rICBiaW5kKCZiZWxvdzI1NSk7Ci0rCi0r ICBhc19mY3RpZChmcHNjcmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQsIGZwc2Ny YXRjaCk7Ci0rICBiaW5kKCZkb25lKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3Vi RnJvbVN0YWNrUHRyKEltbTMyIGltbTMyKSB7Ci0rICBpZiAoaW1tMzIudmFsdWUpIHsKLSsgICAg YXNNYXNtKCkuc3ViUHRyKGltbTMyLCBTdGFja1BvaW50ZXIpOwotKyAgfQotK30KLSsKLSsvL3t7 eyBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondp ZGVuSW50MzIoUmVnaXN0ZXIgcikgewotKyAgbW92ZTMyVG82NFNpZ25FeHRlbmQociwgUmVnaXN0 ZXI2NChyKSk7Ci0rfQotKwotKy8vIFN0YWNrIG9wZXJhdGlvbnMuCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6UHVzaChSZWdpc3RlciByZWcpIHsKLSsgIHB1c2gocmVnKTsKLSsgIGFkanVzdEZyYW1l KGludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOwotK30KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQ dXNoKGNvbnN0IEltbTMyIGltbSkgewotKyAgcHVzaChpbW0pOwotKyAgYWRqdXN0RnJhbWUoaW50 MzJfdChzaXplb2YoaW50cHRyX3QpKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1 c2goY29uc3QgSW1tV29yZCBpbW0pIHsKLSsgIHB1c2goaW1tKTsKLSsgIGFkanVzdEZyYW1lKGlu dDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQ dXNoKGNvbnN0IEltbVB0ciBpbW0pIHsKLSsgIFB1c2goSW1tV29yZCh1aW50cHRyX3QoaW1tLnZh bHVlKSkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoKGNvbnN0IEltbUdDUHRy IHB0cikgewotKyAgcHVzaChwdHIpOwotKyAgYWRqdXN0RnJhbWUoaW50MzJfdChzaXplb2YoaW50 cHRyX3QpKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1c2hCb3hlZChGbG9hdFJl Z2lzdGVyIHJlZykgewotKyAgc3ViRnJvbVN0YWNrUHRyKEltbTMyKHNpemVvZihkb3VibGUpKSk7 Ci0rICBib3hEb3VibGUocmVnLCBBZGRyZXNzKGdldFN0YWNrUG9pbnRlcigpLCAwKSk7Ci0rICBh ZGp1c3RGcmFtZShzaXplb2YoZG91YmxlKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OlBvcChSZWdpc3RlciByZWcpIHsKLSsgIHBvcChyZWcpOwotKyAgYWRqdXN0RnJhbWUoLWludDMy X3Qoc2l6ZW9mKGludHB0cl90KSkpOwotK30KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoUmVn c0luTWFzayhMaXZlUmVnaXN0ZXJTZXQgc2V0KSB7Ci0rICBpbnQzMl90IGRpZmYgPQotKyAgICAg IHNldC5ncHJzKCkuc2l6ZSgpICogc2l6ZW9mKGludHB0cl90KSArIHNldC5mcHVzKCkuZ2V0UHVz aFNpemVJbkJ5dGVzKCk7Ci0rICBjb25zdCBpbnQzMl90IHJlc2VydmVkID0gZGlmZjsKLSsKLSsg IHJlc2VydmVTdGFjayhyZXNlcnZlZCk7Ci0rICBmb3IgKEdlbmVyYWxSZWdpc3RlckJhY2t3YXJk SXRlcmF0b3IgaXRlcihzZXQuZ3BycygpKTsgaXRlci5tb3JlKCk7ICsraXRlcikgewotKyAgICBk aWZmIC09IHNpemVvZihpbnRwdHJfdCk7Ci0rICAgIHN0b3JlUHRyKCppdGVyLCBBZGRyZXNzKFN0 YWNrUG9pbnRlciwgZGlmZikpOwotKyAgfQotKwotKyAgLy8gTmF0dXJhbCBwZXIta2luZCBzbG90 IOKAlCA4IGJ5dGVzIGZvciBTaW5nbGUvRG91YmxlIHZpYSBzdGZkLCAxNiBieXRlcwotKyAgLy8g Zm9yIFNpbWQxMjggdmlhIHN0eHZ4LiBSZWdpc3RlckR1bXA6OkZQVUFycmF5IGlzIHNpemVkIDMy IMOXIDggPSAyNTYKLSsgIC8vIGJ5dGVzIChzaXplb2YoUmVnaXN0ZXJDb250ZW50KSBpcyA4IOKA lCBubyB2MTI4IGluIHRoZSB1bmlvbiksIHNvCi0rICAvLyBmX0sncyBzdGZkIHNsb3QgbGFuZHMg YXQgdGhlIHJpZ2h0IG9mZnNldC4gQmFpbG91dCBBbGxSZWdzIGV4Y2x1ZGVzCi0rICAvLyBTaW1k MTI4IChJb24gaGFzIG5vIFNJTUQgbGl2ZSksIHNvIHRoZSBGUCByZWdpb24gaW4gYmFpbG91dCBm cmFtZXMKLSsgIC8vIGlzIHN0cmljdGx5IEZsb2F0LW9ubHkuCi0rICBmb3IgKEZsb2F0UmVnaXN0 ZXJCYWNrd2FyZEl0ZXJhdG9yIGl0ZXIoc2V0LmZwdXMoKS5yZWR1Y2VTZXRGb3JQdXNoKCkpOwot KyAgICAgICBpdGVyLm1vcmUoKTsgKytpdGVyKSB7Ci0rICAgIEZsb2F0UmVnaXN0ZXIgcmVnID0g Kml0ZXI7Ci0rICAgIGRpZmYgLT0gcmVnLnNpemUoKTsKLSsgICAgaWYgKHJlZy5pc1NpbWQxMjgo KSkgewotKyAgICAgIHN0b3JlVW5hbGlnbmVkU2ltZDEyOChyZWcsIEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBkaWZmKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgc3RvcmVEb3VibGUocmVnLmFzRG91 YmxlKCksIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSk7Ci0rICAgIH0KLSsgIH0KLSsgIE1P Wl9BU1NFUlQoZGlmZiA9PSAwKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UG9wUmVnc0lu TWFza0lnbm9yZShMaXZlUmVnaXN0ZXJTZXQgc2V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGl2ZVJlZ2lzdGVyU2V0IGlnbm9yZSkgewotKyAgaW50MzJfdCBk aWZmID0KLSsgICAgICBzZXQuZ3BycygpLnNpemUoKSAqIHNpemVvZihpbnRwdHJfdCkgKyBzZXQu ZnB1cygpLmdldFB1c2hTaXplSW5CeXRlcygpOwotKyAgY29uc3QgaW50MzJfdCByZXNlcnZlZCA9 IGRpZmY7Ci0rCi0rICBmb3IgKEdlbmVyYWxSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRlcihz ZXQuZ3BycygpKTsgaXRlci5tb3JlKCk7ICsraXRlcikgewotKyAgICBkaWZmIC09IHNpemVvZihp bnRwdHJfdCk7Ci0rICAgIGlmICghaWdub3JlLmhhcygqaXRlcikpIHsKLSsgICAgICBsb2FkUHRy KEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSwgKml0ZXIpOwotKyAgICB9Ci0rICB9Ci0rCi0r ICAvLyBOYXR1cmFsIHBlci1raW5kIHNsb3QuIFNlZSBQdXNoUmVnc0luTWFzayBjb21tZW50Lgot KyAgZm9yIChGbG9hdFJlZ2lzdGVyQmFja3dhcmRJdGVyYXRvciBpdGVyKHNldC5mcHVzKCkucmVk dWNlU2V0Rm9yUHVzaCgpKTsKLSsgICAgICAgaXRlci5tb3JlKCk7ICsraXRlcikgewotKyAgICBG bG9hdFJlZ2lzdGVyIHJlZyA9ICppdGVyOwotKyAgICBkaWZmIC09IHJlZy5zaXplKCk7Ci0rICAg IGlmICghaWdub3JlLmhhcyhyZWcpKSB7Ci0rICAgICAgaWYgKHJlZy5pc1NpbWQxMjgoKSkgewot KyAgICAgICAgbG9hZFVuYWxpZ25lZFNpbWQxMjgoQWRkcmVzcyhTdGFja1BvaW50ZXIsIGRpZmYp LCByZWcpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MoU3Rh Y2tQb2ludGVyLCBkaWZmKSwgcmVnLmFzRG91YmxlKCkpOwotKyAgICAgIH0KLSsgICAgfQotKyAg fQotKyAgTU9aX0FTU0VSVChkaWZmID09IDApOwotKyAgZnJlZVN0YWNrKHJlc2VydmVkKTsKLSt9 Ci0rCi0rLy8gQ2FsbCBvcGVyYXRpb25zLgotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmNh bGwoUmVnaXN0ZXIgcmVnKSB7Ci0rICAvLyBFTEZ2MiBBQkk6IHIxMiBtdXN0IGhvbGQgdGhlIHRh cmdldCBhZGRyZXNzIGF0IGZ1bmN0aW9uIGVudHJ5Ci0rICAvLyBzbyB0aGUgY2FsbGVlIGNhbiBj b21wdXRlIGl0cyBUT0MgcG9pbnRlciBmcm9tIHIxMi4KLSsgIGlmIChyZWcgIT0gQ2FsbFJlZykg ewotKyAgICBtb3ZlUHRyKHJlZywgQ2FsbFJlZyk7Ci0rICB9Ci0rICB4c19tdGN0cihDYWxsUmVn KTsKLSsgIGFzX2JjdHIoTGlua0IpOwotKyAgcmV0dXJuIENvZGVPZmZzZXQoY3VycmVudE9mZnNl dCgpKTsKLSt9Ci0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChMYWJlbCogbGFiZWwp IHsKLSsgIGlmIChsYWJlbC0+Ym91bmQoKSkgewotKyAgICAvLyBPcGVuIHRoZSBuby1wb29sIHdp bmRvdyBCRUZPUkUgY29tcHV0aW5nIHRoZSBkaXNwbGFjZW1lbnQuCi0rICAgIC8vIGVudGVyTm9Q b29sKCkgY2FuIGl0c2VsZiB0cmlnZ2VyIGEgcGVuZGluZyBwb29sIGZsdXNoLCBhZHZhbmNpbmcK LSsgICAgLy8gY3VycmVudE9mZnNldCgpLiBBIHByZS1mbHVzaCBkaXNwbGFjZW1lbnQgZW1pdHRl ZCBhdCB0aGUgcG9zdC1mbHVzaAotKyAgICAvLyBwb3NpdGlvbiB3b3VsZCBvdmVyc2hvb3QgdGhl IHRhcmdldCBieSBwb29sU2l6ZSBieXRlcy4KLSsgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05v UG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKLSsgICAgaW50MzJfdCBvZmZzZXQgPSBsYWJlbC0+ b2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0KCk7Ci0rICAgIC8vIENhbGwgaW5zdHJ1Y3Rpb24gZ29l cyBhdCBpbnN0WzldIGluIHRoZSAxMC13b3JkIHN0YW56YS4KLSsgICAgaW50MzJfdCBjYWxsT2Zm c2V0ID0gb2Zmc2V0IC0gOSAqIChpbnQzMl90KXNpemVvZih1aW50MzJfdCk7Ci0rICAgIGlmIChK T2ZmSW1tMjY6OklzSW5SYW5nZShjYWxsT2Zmc2V0KSkgewotKyAgICAgIC8vIFNob3J0OiA5IG5v cHMgKyBibCA9IDEwIGluc3RydWN0aW9ucy4KLSsgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0r ICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsg ICAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAg ICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAg ICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAg ICBhc19iKEpPZmZJbW0yNihjYWxsT2Zmc2V0KSwgUmVsYXRpdmVCcmFuY2gsIExpbmtCKTsKLSsg ICAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgICAgIHJldHVybiBDb2RlT2Zmc2V0KGN1 cnJlbnRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgLy8gTG9uZyBjYWxsIHRvIGJvdW5kIGxhYmVs OiBzdGFuemEoOCkgKyBtdGN0ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rpb25zLgotKyAgICBCdWZm ZXJPZmZzZXQgYm8gPQotKyAgICAgICAgZW1pdExvYWQ2NFN0YW56YShTZWNvbmRTY3JhdGNoUmVn LCBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKLSsgICAgeHNfbXRjdHIoU2Vjb25kU2NyYXRj aFJlZyk7Ci0rICAgIGFzX2JjdHIoTGlua0IpOwotKyAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgp OwotKyAgICBhZGRMb25nSnVtcChibywgQnVmZmVyT2Zmc2V0KGxhYmVsLT5vZmZzZXQoKSkpOwot KyAgICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotKyAgfQotKyAgLy8gRW1p dCBhIENhbGxUYWcgc3RhbnphOiB0cmFwICsgY2hhaW4gKyA4IG5vcHMgKDEwIGluc3RydWN0aW9u cyB0b3RhbCkuCi0rICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sUGF0Y2hhYmxlQnJhbmNo SW5zbnMpOwotKyAgQnVmZmVyT2Zmc2V0IGJvID0geHNfdHJhcF90YWdnZWQoQ2FsbFRhZyk7Ci0r ICB3cml0ZUluc3QobGFiZWwtPnVzZWQoKSA/IGxhYmVsLT5vZmZzZXQoKSA6IExhYmVsQmFzZTo6 SU5WQUxJRF9PRkZTRVQpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5v cEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwot KyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJ bnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgbV9idWZmZXIubGVhdmVO b1Bvb2woKTsKLSsgIGlmICghb29tKCkpIHsKLSsgICAgbGFiZWwtPnVzZShiby5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotK30KLStD b2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsKGNvbnN0IEFkZHJlc3MmIGFkZHIpIHsKLSsg IGxvYWRQdHIoYWRkciwgQ2FsbFJlZyk7Ci0rICByZXR1cm4gY2FsbChDYWxsUmVnKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChJbW1QdHIgdGFyZ2V0KSB7Ci0rICB1aW50NjRf dCBhZGRyID0gdWludHB0cl90KHRhcmdldC52YWx1ZSk7Ci0rICAvLyBzdGFuemEoOCkgKyBtdGN0 ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rpb25zLgotKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05v UG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IGVtaXRMb2Fk NjRTdGFuemEoQ2FsbFJlZywgYWRkcik7Ci0rICBhZGRQZW5kaW5nSnVtcChibywgdGFyZ2V0LCBS ZWxvY2F0aW9uS2luZDo6SEFSRENPREVEKTsKLSsgIHhzX210Y3RyKENhbGxSZWcpOwotKyAgYXNf YmN0cihMaW5rQik7Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotK30KLSsKLStDb2RlT2Zm c2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsKHdhc206OlN5bWJvbGljQWRkcmVzcyB0YXJnZXQpIHsK LSsgIG1vdmVQdHIodGFyZ2V0LCBDYWxsUmVnKTsKLSsgIHJldHVybiBjYWxsKENhbGxSZWcpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFCSU5vUHJvZmlsZXIoY29uc3Qg QWRkcmVzcyYgZnVuLCBBQklUeXBlIHJlc3VsdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIGxvYWRQdHIoZnVuLCBzY3JhdGNoKTsKLSsKLSsgIHVpbnQzMl90IHN0YWNrQWRqdXN0 OwotKyAgY2FsbFdpdGhBQklQcmUoJnN0YWNrQWRqdXN0KTsKLSsgIGNhbGwoc2NyYXRjaCk7Ci0r ICBjYWxsV2l0aEFCSVBvc3Qoc3RhY2tBZGp1c3QsIHJlc3VsdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNhbGxXaXRoQUJJUHJlKHVpbnQzMl90KiBzdGFja0FkanVzdCwgYm9vbCBj YWxsRnJvbVdhc20pIHsKLSsgIE1PWl9BU1NFUlQoaW5DYWxsXyk7Ci0rICB1aW50MzJfdCBzdGFj a0ZvckNhbGwgPSBhYmlBcmdzXy5zdGFja0J5dGVzQ29uc3VtZWRTb0ZhcigpOwotKwotKyAgLy8g UmVzZXJ2ZSBwbGFjZSBmb3IgTFIgc2F2ZS4KLSsgIHN0YWNrRm9yQ2FsbCArPSBzaXplb2YoaW50 cHRyX3QpOwotKwotKyAgaWYgKGR5bmFtaWNBbGlnbm1lbnRfKSB7Ci0rICAgIHN0YWNrRm9yQ2Fs bCArPSBDb21wdXRlQnl0ZUFsaWdubWVudChzdGFja0ZvckNhbGwsIEFCSVN0YWNrQWxpZ25tZW50 KTsKLSsgIH0gZWxzZSB7Ci0rICAgIHVpbnQzMl90IGFsaWdubWVudEF0UHJvbG9ndWUgPSBjYWxs RnJvbVdhc20gPyBzaXplb2Yod2FzbTo6RnJhbWUpIDogMDsKLSsgICAgc3RhY2tGb3JDYWxsICs9 IENvbXB1dGVCeXRlQWxpZ25tZW50KAotKyAgICAgICAgc3RhY2tGb3JDYWxsICsgZnJhbWVQdXNo ZWQoKSArIGFsaWdubWVudEF0UHJvbG9ndWUsIEFCSVN0YWNrQWxpZ25tZW50KTsKLSsgIH0KLSsK LSsgICpzdGFja0FkanVzdCA9IHN0YWNrRm9yQ2FsbDsKLSsgIHJlc2VydmVTdGFjayhzdGFja0Zv ckNhbGwpOwotKwotKyAgLy8gU2F2ZSBMUi4gUmVzdG9yZSBpdCBpbiBjYWxsV2l0aEFCSVBvc3Qu Ci0rICB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgeHNfbWZscihzY3Jh dGNoKTsKLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIHN0YWNr Rm9yQ2FsbCAtIHNpemVvZihpbnRwdHJfdCkpKTsKLSsgIH0KLSsKLSsgIC8vIFBvc2l0aW9uIGFs bCBhcmd1bWVudHMuCi0rICB7Ci0rICAgIGVub3VnaE1lbW9yeV8gJj0gbW92ZVJlc29sdmVyXy5y ZXNvbHZlKCk7Ci0rICAgIGlmICghZW5vdWdoTWVtb3J5XykgewotKyAgICAgIHJldHVybjsKLSsg ICAgfQotKwotKyAgICBNb3ZlRW1pdHRlciBlbWl0dGVyKCp0aGlzKTsKLSsgICAgZW1pdHRlci5l bWl0KG1vdmVSZXNvbHZlcl8pOwotKyAgICBlbWl0dGVyLmZpbmlzaCgpOwotKyAgfQotKwotKyAg YXNzZXJ0U3RhY2tBbGlnbm1lbnQoQUJJU3RhY2tBbGlnbm1lbnQpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFCSVBvc3QodWludDMyX3Qgc3RhY2tBZGp1c3QsIEFCSVR5 cGUgcmVzdWx0KSB7Ci0rICB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg bG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgc3RhY2tBZGp1c3QgLSBzaXplb2YoaW50cHRy X3QpKSwgc2NyYXRjaCk7Ci0rICAgIHhzX210bHIoc2NyYXRjaCk7Ci0rICB9Ci0rCi0rICBpZiAo ZHluYW1pY0FsaWdubWVudF8pIHsKLSsgICAgLy8gUmVzdG9yZSBTUCBmcm9tIHN0YWNrIChhcyBz dG9yZWQgaW4gc2V0dXBVbmFsaWduZWRBQklDYWxsKS4KLSsgICAgbG9hZFB0cihBZGRyZXNzKFN0 YWNrUG9pbnRlciwgc3RhY2tBZGp1c3QpLCBTdGFja1BvaW50ZXIpOwotKyAgICBhZGp1c3RGcmFt ZSgtc3RhY2tBZGp1c3QpOwotKyAgfSBlbHNlIHsKLSsgICAgZnJlZVN0YWNrKHN0YWNrQWRqdXN0 KTsKLSsgIH0KLSsKLSsjaWZkZWYgREVCVUcKLSsgIE1PWl9BU1NFUlQoaW5DYWxsXyk7Ci0rICBp bkNhbGxfID0gZmFsc2U7Ci0rI2VuZGlmCi0rfQotKwotKy8vIFZhbHVlIG9wZXJhdGlvbnMuCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZVZhbHVlKGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZU9wZXJhbmQmIGRlc3Qp IHsKLSsgIGlmIChzcmMudmFsdWVSZWcoKSAhPSBkZXN0LnZhbHVlUmVnKCkpIHsKLSsgICAgbW92 ZVB0cihzcmMudmFsdWVSZWcoKSwgZGVzdC52YWx1ZVJlZygpKTsKLSsgIH0KLSt9Ci0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bW92ZVZhbHVlKGNvbnN0IFZhbHVlJiBzcmMsIGNvbnN0IFZhbHVlT3Bl cmFuZCYgZGVzdCkgewotKyAgaWYgKCFzcmMuaXNHQ1RoaW5nKCkpIHsKLSsgICAgbW92ZVB0cihJ bW1Xb3JkKHNyYy5hc1Jhd0JpdHMoKSksIGRlc3QudmFsdWVSZWcoKSk7Ci0rICAgIHJldHVybjsK LSsgIH0KLSsgIENvZGVPZmZzZXQgb2ZmID0gbW92V2l0aFBhdGNoKEltbVdvcmQoc3JjLmFzUmF3 Qml0cygpKSwgZGVzdC52YWx1ZVJlZygpKTsKLSsgIHdyaXRlRGF0YVJlbG9jYXRpb24ob2ZmLCBz cmMpOwotK30KLSsKLSsvLyBCcmFuY2ggb3BlcmF0aW9ucy4KLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpicmFuY2hUZXN0VmFsdWUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgbGhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSYgcmhz LCBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09 IE5vdEVxdWFsKTsKLSsgIE1PWl9BU1NFUlQoIXJocy5pc05hTigpKTsKLSsKLSsgIGlmICghcmhz LmlzR0NUaGluZygpKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgTU9a X0FTU0VSVChsaHMudmFsdWVSZWcoKSAhPSBzY3JhdGNoKTsKLSsgICAgbW92ZVB0cihJbW1Xb3Jk KHJocy5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwotKyAgICBicmFuY2hQdHIoY29uZCwgbGhzLnZh bHVlUmVnKCksIHNjcmF0Y2gsIGxhYmVsKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgICAgTU9aX0FTU0VSVChsaHMudmFsdWVSZWcoKSAhPSBzY3JhdGNo KTsKLSsgICAgbW92ZVZhbHVlKHJocywgVmFsdWVPcGVyYW5kKHNjcmF0Y2gpKTsKLSsgICAgYnJh bmNoUHRyKGNvbmQsIGxocy52YWx1ZVJlZygpLCBzY3JhdGNoLCBsYWJlbCk7Ci0rICB9Ci0rfQot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3ROYU5WYWx1ZShDb25kaXRpb24gY29uZCwg Y29uc3QgVmFsdWVPcGVyYW5kJiB2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChj b25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIE1PWl9BU1NFUlQodmFsLnZhbHVlUmVnKCkgIT0gc2NyYXRjaCk7Ci0rCi0rICAv LyBTdHJpcCB0aGUgSUVFRSBzaWduIGJpdCAoTFNCLW51bWJlcmluZyBiaXQgNjMgPSBQUEMtbnVt YmVyaW5nIGJpdCAwKQotKyAgLy8gd2l0aCBybGRpY2wgU0g9MCwgTUI9MTogcm90YXRlIGJ5IHpl cm8gKG5vLW9wKSB0aGVuIGtlZXAgYml0cyAxLi42MyBvZgotKyAgLy8gUFBDLW51bWJlcmluZywg Y2xlYXJpbmcgYml0IDAuIFJvdGF0aW5nIGJ5IDEgaW5zdGVhZCB3b3VsZCBhbHNvIHNoaWZ0Ci0r ICAvLyB0aGUgcXVpZXQtTmFOIGJpdCBvdXQgb2YgcG9zaXRpb24gYW5kIGNhdXNlIDEuNSAoMHgz RkY4Li4uKSBhbmQgTmFOCi0rICAvLyAoMHg3RkY4Li4uKSB0byBjb2xsaWRlIGFmdGVyIG1hc2tp bmcg4oCUIGJ1ZyAxOTQzNzA0IFBQQzY0IHJlZ3Jlc3Npb24uCi0rICBhc19ybGRpY2wodGVtcCwg dmFsLnZhbHVlUmVnKCksIDAsIDEpOwotKwotKyAgLy8gTG9hZCBjYW5vbmljYWwgTmFOICh3aXRo IHNpZ24gYml0IDApIGFuZCBzdHJpcCBpdHMgc2lnbiBiaXQgdG9vLgotKyAgc3RhdGljX2Fzc2Vy dChKUzo6ZGV0YWlsOjpDYW5vbmljYWxpemVkTmFOU2lnbkJpdCA9PSAwKTsKLSsgIG1vdmVWYWx1 ZShEb3VibGVWYWx1ZShKUzo6R2VuZXJpY05hTigpKSwgVmFsdWVPcGVyYW5kKHNjcmF0Y2gpKTsK LSsgIGFzX3JsZGljbChzY3JhdGNoLCBzY3JhdGNoLCAwLCAxKTsKLSsKLSsgIGJyYW5jaFB0cihj b25kLCB0ZW1wLCBzY3JhdGNoLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFB0ckluTnVyc2VyeUNodW5rKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBwdHIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVt cCwgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVh bCB8fCBjb25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwpOwotKyAgTU9aX0FTU0VSVChwdHIgIT0g dGVtcCk7Ci0rICBNT1pfQVNTRVJUKHRlbXAgIT0gSW52YWxpZFJlZyk7Ci0rCi0rICBhbmRQdHIo SW1tMzIoaW50MzJfdCh+Z2M6OkNodW5rTWFzaykpLCBwdHIsIHRlbXApOwotKyAgYnJhbmNoUHRy KEludmVydENvbmRpdGlvbihjb25kKSwgQWRkcmVzcyh0ZW1wLCBnYzo6Q2h1bmtTdG9yZUJ1ZmZl ck9mZnNldCksCi0rICAgICAgICAgICAgSW1tV29yZCgwKSwgbGFiZWwpOwotK30KLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hWYWx1ZUlzTnVyc2VyeUNlbGwoQ29uZGl0aW9uIGNvbmQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlT3BlcmFu ZCB2YWx1ZSwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBicmFuY2hWYWx1ZUlzTnVyc2VyeUNl bGxJbXBsKGNvbmQsIHZhbHVlLCB0ZW1wLCBsYWJlbCk7Ci0rfQotKwotKy8vIFBhdGNoaW5nIC8g bmVhciBhZGRyZXNzIG9wZXJhdGlvbnMuCi0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6bm9w UGF0Y2hhYmxlVG9DYWxsKCkgewotKyAgLy8gRW1pdCAxMCBub3BzIHRoYXQgY2FuIGJlIHBhdGNo ZWQgdG8gYSBjYWxsIHN0YW56YToKLSsgIC8vIDggbG9hZDY0IG5vcHMgKyBtdGN0ciBub3AgKyBi Y3RybCBub3AKLSsgIC8vIFJldHVybiBvZmZzZXQgQUZURVIgdGhlIHN0YW56YSAoPSB0aGUgcmV0 dXJuIGFkZHJlc3MpLgotKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJy YW5jaEluc25zKTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0 KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChO b3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsK LSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICBy ZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotK30KLStDb2RlT2Zmc2V0IE1hY3Jv QXNzZW1ibGVyOjptb3ZlTmVhckFkZHJlc3NXaXRoUGF0Y2goUmVnaXN0ZXIgZGVzdCkgewotKyAg Q29kZU9mZnNldCBvZmZzZXQoY3VycmVudE9mZnNldCgpKTsKLSsgIGVtaXRMb2FkNjRTdGFuemEo ZGVzdCwgMCk7Ci0rICByZXR1cm4gb2Zmc2V0OwotK30KLSsvLyBzdGF0aWMKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpwYXRjaE5lYXJBZGRyZXNzTW92ZShDb2RlTG9jYXRpb25MYWJlbCBsb2MsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi ZWwgdGFyZ2V0KSB7Ci0rICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopbG9jLnJh dygpOwotKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgKHVpbnQ2NF90KXRhcmdldC5yYXcoKSk7 Ci0rfQotKwotKy8vIFJldHVybiBhZGRyZXNzIG9wZXJhdGlvbnMgKGxpbmsgcmVnaXN0ZXIgYXJj aGl0ZWN0dXJlcykuCi0rLy8KLSsvLyBOb3RlOiB0aGVzZSBNVVNUIGRlY3JlbWVudCBTUCBieSBl eGFjdGx5IDggYnl0ZXMuIHdhc206OkZyYW1lIGlzIDE2IGJ5dGVzCi0rLy8gKGNhbGxlckZQXyAr IHJldHVybkFkZHJlc3NfKSBhbmQgR2VuZXJhdGVDYWxsYWJsZVByb2xvZ3VlIHBhaXJzIHRoaXMg d2l0aAotKy8vIHB1c2goRnJhbWVQb2ludGVyKSB0byBtYXRjaCB0aGF0IGxheW91dCBleGFjdGx5 IOKAlCBhIDE2LWJ5dGUgZGVjcmVtZW50IGhlcmUKLSsvLyB3b3VsZCBpbnNlcnQgOCBieXRlcyBv ZiBwYWRkaW5nIGFuZCBicmVhayBGUC1jaGFpbiB1bndpbmRpbmcuIFRoZSA4LWJ5dGUKLSsvLyBp bnRlcm1lZGlhdGUgbWlzYWxpZ25tZW50IGJldHdlZW4gdGhpcyBzYXZlIGFuZCB0aGUgZm9sbG93 aW5nIHB1c2goRlApIGlzCi0rLy8gbmV2ZXIgb2JzZXJ2ZWQgYnkgYSBDIGNhbGwgKG5vIGludGVy dmVuaW5nIHRyYW5zaXRpb24pLCBhbmQgYW55IGNhbGxlciB0aGF0Ci0rLy8gZG9lcyBtYWtlIGEg QyBjYWxsIGFmdGVyIHB1c2hSZXR1cm5BZGRyZXNzIHJvdXRlcyB0aHJvdWdoCi0rLy8gc2V0dXBV bmFsaWduZWRBQklDYWxsIHdoaWNoIHJlLWFsaWducy4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpw dXNoUmV0dXJuQWRkcmVzcygpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICB4c19t ZmxyKHNjcmF0Y2gpOwotKyAgcHVzaChzY3JhdGNoKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cG9wUmV0dXJuQWRkcmVzcygpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBw b3Aoc2NyYXRjaCk7Ci0rICB4c19tdGxyKHNjcmF0Y2gpOwotK30KLSsKLSsvLyBBQkkgc2V0dXAu Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c2V0dXBVbmFsaWduZWRBQklDYWxsKFJlZ2lzdGVyIHNj cmF0Y2gpIHsKLSsgIE1PWl9BU1NFUlQoIUlzQ29tcGlsaW5nV2FzbSgpLCAid2FzbSBzaG91bGQg b25seSB1c2UgYWxpZ25lZCBBQkkgY2FsbHMiKTsKLSsgIHNldHVwTmF0aXZlQUJJQ2FsbCgpOwot KyAgZHluYW1pY0FsaWdubWVudF8gPSB0cnVlOwotKwotKyAgbW92ZVB0cihTdGFja1BvaW50ZXIs IHNjcmF0Y2gpOwotKwotKyAgLy8gRm9yY2Ugc3AgdG8gYmUgYWxpZ25lZC4KLSsgIHN1YlB0cihJ bW0zMihzaXplb2YodWludHB0cl90KSksIFN0YWNrUG9pbnRlcik7Ci0rICBhbmRQdHIoSW1tMzIo fihBQklTdGFja0FsaWdubWVudCAtIDEpKSwgU3RhY2tQb2ludGVyKTsKLSsgIHN0b3JlUHRyKHNj cmF0Y2gsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSk7Ci0rfQotKwotKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8v IEFyaXRobWV0aWMgaGVscGVycy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZURp dk1vZDMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGl2T3V0cHV0LCBSZWdpc3RlciByZW1PdXRwdXQs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQs IGNvbnN0IExpdmVSZWdpc3RlclNldCYpIHsKLSsgIE1PWl9BU1NFUlQobGhzICE9IGRpdk91dHB1 dCAmJiBsaHMgIT0gcmVtT3V0cHV0LCAibGhzIGlzIHByZXNlcnZlZCIpOwotKyAgTU9aX0FTU0VS VChyaHMgIT0gZGl2T3V0cHV0ICYmIHJocyAhPSByZW1PdXRwdXQsICJyaHMgaXMgcHJlc2VydmVk Iik7Ci0rCi0rICAvLyBQUEM2NCBoYXMgbm8gbW9kdWx1cyBpbnN0cnVjdGlvbi4gQ29tcHV0ZTog cmVtID0gbGhzIC0gKGxocy9yaHMpKnJocwotKyAgLy8gUFBDNjQgZGl2dyhJTlQzMl9NSU4sIC0x KSBpcyB1bmRlZmluZWQ7IHF1b3RpZW50PUlOVDMyX01JTiwgcmVtYWluZGVyPTAuCi0rICBMYWJl bCBkb25lOwotKyAgaWYgKCFpc1Vuc2lnbmVkKSB7Ci0rICAgIExhYmVsIG5vdE1pbk92ZXJmbG93 OwotKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMy X01JTiksICZub3RNaW5PdmVyZmxvdyk7Ci0rICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVx dWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOwotKyAgICBtb3ZlMzIoSW1t MzIoSU5UMzJfTUlOKSwgZGl2T3V0cHV0KTsKLSsgICAgbW92ZTMyKEltbTMyKDApLCByZW1PdXRw dXQpOwotKyAgICBqdW1wKCZkb25lKTsKLSsgICAgYmluZCgmbm90TWluT3ZlcmZsb3cpOwotKyAg fQotKyAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAgYXNfZGl2d3UoZGl2T3V0cHV0LCBsaHMsIHJo cyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19kaXZ3KGRpdk91dHB1dCwgbGhzLCByaHMpOwotKyAg fQotKyAgYXNfZXh0c3coZGl2T3V0cHV0LCBkaXZPdXRwdXQpOwotKyAgaWYgKEhhc1BPV0VSOSgp KSB7Ci0rICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfbW9kdXcocmVtT3V0cHV0LCBs aHMsIHJocyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfbW9kc3cocmVtT3V0cHV0LCBsaHMs IHJocyk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIGFzX211bGx3KHJlbU91dHB1dCwgZGl2 T3V0cHV0LCByaHMpOwotKyAgICBhc19zdWJmKHJlbU91dHB1dCwgcmVtT3V0cHV0LCBsaHMpOwot KyAgfQotKyAgYXNfZXh0c3cocmVtT3V0cHV0LCByZW1PdXRwdXQpOwotKyAgYmluZCgmZG9uZSk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNoaWZ0SW5kZXgzMkFuZEFkZChSZWdpc3Rl ciBpbmRleFRlbXAzMiwgaW50IHNoaWZ0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBwb2ludGVyKSB7Ci0rICBpZiAoSXNTaGlmdEluU2NhbGVSYW5n ZShzaGlmdCkpIHsKLSsgICAgY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoCi0rICAgICAgICBCYXNl SW5kZXgocG9pbnRlciwgaW5kZXhUZW1wMzIsIFNoaWZ0VG9TY2FsZShzaGlmdCkpLCBwb2ludGVy KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgbHNoaWZ0MzIoSW1tMzIoc2hpZnQpLCBpbmRleFRl bXAzMik7Ci0rICBhZGRQdHIoaW5kZXhUZW1wMzIsIHBvaW50ZXIpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpjb252ZXJ0SW50NjRUb0RvdWJsZShSZWdpc3RlcjY0IHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBhc19tdHZzcmQoZGVzdCwgc3JjLnJlZyk7Ci0rICBhc19mY2Zp ZChkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVhcmJ5SW50RG91 YmxlKFJvdW5kaW5nTW9kZSBtb2RlLCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBzd2l0Y2gg KG1vZGUpIHsKLSsgICAgY2FzZSBSb3VuZGluZ01vZGU6Ok5lYXJlc3RUaWVzVG9FdmVuOiB7Ci0r ICAgICAgLy8gUFBDNjQncyBmcmluIHJvdW5kcyB0aWVzIGF3YXkgZnJvbSB6ZXJvLCBOT1QgdG8g ZXZlbiAoSVNBIHYzLjEpLgotKyAgICAgIC8vIFVzZSBmY3RpZCtmY2ZpZCB3aGljaCB1c2VzIEZQ U0NSIFJOIChkZWZhdWx0ID0gcm91bmQtdG8tbmVhcmVzdC1ldmVuKS4KLSsgICAgICAvLyBHdWFy ZDogaWYgfHNyY3wgPj0gMl41MiwgdmFsdWUgaXMgYWxyZWFkeSBpbnRlZ3JhbCAob3IgTmFOL0lu Zikg4oCUCi0rICAgICAgLy8ganVzdCBjb3B5IHNyYy4gVGhpcyBwcmVzZXJ2ZXMgTmFOLCBJbmYs IGFuZCAtMC4KLSsgICAgICAvLyBDaGVjayB2aWEgaW50ZWdlciBleHBvbmVudCBleHRyYWN0aW9u IHRvIGF2b2lkIEZQIHRlbXAgY29uZmxpY3RzLgotKyAgICAgIExhYmVsIGRvbmU7Ci0rICAgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgbW92ZURvdWJsZShzcmMsIFNjcmF0Y2hE b3VibGVSZWcpOwotKyAgICAgIGlmIChzcmMgIT0gZGVzdCkgewotKyAgICAgICAgbW92ZURvdWJs ZShzcmMsIGRlc3QpOwotKyAgICAgIH0KLSsgICAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAg ICAgIC8vIHhzeGV4cGRwIGxheXMgdGhlIDExLWJpdCBiaWFzZWQgZXhwb25lbnQgaW4gWFQuZHcw IHdpdGggdGhlCi0rICAgICAgICAvLyByZXN0IHplcm9lZCwgc28gbWZ2c3JkIHJlYWRzIGl0IGRp cmVjdGx5IOKAlCBkcm9wcyB0aGUKLSsgICAgICAgIC8vIHNyZGkrYW5kaS4gbWFza2luZyBwYWly LgotKyAgICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBleHBTY3JhdGNoKCp0aGlzKTsKLSsgICAg ICAgIGFzX3hzeGV4cGRwKGV4cFNjcmF0Y2gsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgICAgICAg YXNfbWZ2c3JkKHNjcmF0Y2gsIGV4cFNjcmF0Y2gpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAg ICBhc19tZnZzcmQoc2NyYXRjaCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICAgICAgICB4X3NyZGko c2NyYXRjaCwgc2NyYXRjaCwgNTIpOwotKyAgICAgICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBzY3Jh dGNoLCAweDdGRik7Ci0rICAgICAgfQotKyAgICAgIC8vIEJpYXNlZCBleHBvbmVudCA+PSAxMDc1 ICg9IDEwMjMrNTIpIG1lYW5zIHx2YWx8ID49IDJeNTIuCi0rICAgICAgLy8gQWxzbyBjYXRjaGVz IEluZiAoZXhwPTIwNDcpIGFuZCBOYU4gKGV4cD0yMDQ3KS4KLSsgICAgICBtYV9jbXAoc2NyYXRj aCwgSW1tMzIoMTA3NSksIEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKTsKLSsgICAgICBt YV9iKEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCAmZG9uZSk7Ci0rICAgICAgYXNfZmN0 aWQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICAgICAgYXNfZmNmaWQoZGVzdCwgZGVzdCk7 Ci0rICAgICAgYXNfZmNwc2duKGRlc3QsIFNjcmF0Y2hEb3VibGVSZWcsIGRlc3QpOwotKyAgICAg IGJpbmQoJmRvbmUpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgUm91bmRpbmdN b2RlOjpUb3dhcmRzWmVybzoKLSsgICAgICBhc19mcml6KGRlc3QsIHNyYyk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgUm91bmRpbmdNb2RlOjpVcDoKLSsgICAgICBhc19mcmlwKGRlc3QsIHNy Yyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgUm91bmRpbmdNb2RlOjpEb3duOgotKyAgICAg IGFzX2ZyaW0oZGVzdCwgc3JjKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAg ICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgcm91bmRpbmcgbW9kZSIpOwotKyAgfQotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWFyYnlJbnRGbG9hdDMyKFJvdW5kaW5nTW9kZSBtb2RlLCBG bG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gUFBDIEZQIHJvdW5kaW5nIGluc3RydWN0aW9u cyBvcGVyYXRlIG9uIGRvdWJsZS1wcmVjaXNpb24uCi0rICAvLyBGb3Igc2luZ2xlLXByZWNpc2lv biwgd2Ugcm91bmQgYXMgZG91YmxlIHRoZW4gcm91bmQgYmFjayB0byBzaW5nbGUuCi0rICAvLyBU aGUgZnJzcCBpbnN0cnVjdGlvbiBoYW5kbGVzIHRoZSBkb3VibGUtPnNpbmdsZSBjb252ZXJzaW9u LgotKyAgbmVhcmJ5SW50RG91YmxlKG1vZGUsIHNyYywgZGVzdCk7Ci0rICBhc19mcnNwKGRlc3Qs IGRlc3QpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBGYXIganVtcCBzdXBwb3J0LgotKwotK0Nv ZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmZhckp1bXBXaXRoUGF0Y2goKSB7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKwotKyAgLy8gc3RhbnphKDgpICsgbXRjdHIgKyBiY3RyID0gMTAg aW5zdHJ1Y3Rpb25zLgotKyAgQ29kZU9mZnNldCBsb2FkT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7 Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5zbnMpOwot KyAgZW1pdExvYWQ2NFN0YW56YShzY3JhdGNoLCAwKTsKLSsgIHhzX210Y3RyKHNjcmF0Y2gpOwot KyAgYXNfYmN0cigpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsKLSsgIHJldHVybiBs b2FkT2Zmc2V0OwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbHVz aCgpIHsgQXNzZW1ibGVyOjpmbHVzaCgpOyB9Ci0rCi0rLy8gV2FzbSBzdXBwb3J0LgotKwotK0Zh dWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRyYXBJbnN0cnVjdGlvbigpIHsK LSsgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBs Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KGN1cnJlbnRP ZmZzZXQoKSk7Ci0rICB4c190cmFwKCk7Ci0rICByZXR1cm4gZmNvOwotK30KLSsKLSsvLyBQUEM2 NCBTbG93Q2FsbE1hcmtlcjogYG9yaSByMCwgcjAsIDBgIC0tIGEgTk9QLWxpa2UgaW5zdHJ1Y3Rp b24KLSsvLyB0aGF0IHdvbid0IGFwcGVhciBpbiBub3JtYWwgY29kZSBnZW5lcmF0aW9uLgotKy8v IG9yaSByMCwgcjAsIDAgPSAweDYwMDAwMDAwIC0tIHRoYXQncyBhY3R1YWxseSBQUENfbm9wLgot Ky8vIFVzZSBhIGRpc3Rpbmd1aXNoYWJsZSBlbmNvZGluZzogYG9yaSByMTIsIHIxMiwgMGAgPSAw eDYxOEMwMDAwCi0rc3RhdGljIGNvbnN0IGludDMyX3QgU2xvd0NhbGxNYXJrZXIgPSAweDYxOEMw MDAwOwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21NYXJrQ2FsbEFzU2xvdygpIHsKLSsg IC8vIEVtaXQ6IG9yaSByMTIsIHIxMiwgMAotKyAgYXNfb3JpKENhbGxSZWcsIENhbGxSZWcsIDAp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQ2hlY2tTbG93Q2FsbHNpdGUoUmVn aXN0ZXIgcmFfLCBMYWJlbCogbm90U2xvdywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcDEsIFJlZ2lzdGVyIHRlbXAyKSB7Ci0rICBNT1pf QVNTRVJUKHJhXyAhPSB0ZW1wMik7Ci0rICBsb2FkMzIoQWRkcmVzcyhyYV8sIDApLCB0ZW1wMik7 Ci0rICBicmFuY2gzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wMiwgSW1tMzIoU2xvd0NhbGxN YXJrZXIpLCBub3RTbG93KTsKLSt9Ci0rCi0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6d2Fz bU1hcmtlZFNsb3dDYWxsKGNvbnN0IHdhc206OkNhbGxTaXRlRGVzYyYgZGVzYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXIgcmVn KSB7Ci0rICBDb2RlT2Zmc2V0IG9mZnNldCA9IGNhbGwoZGVzYywgcmVnKTsKLSsgIHdhc21NYXJr Q2FsbEFzU2xvdygpOwotKyAgcmV0dXJuIG9mZnNldDsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8g QWRkaXRpb25hbCBzdGFjayBvcGVyYXRpb25zLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1 c2goRmxvYXRSZWdpc3RlciBmKSB7Ci0rICBwdXNoKGYpOwotKyAgYWRqdXN0RnJhbWUoaW50MzJf dChzaXplb2YoZG91YmxlKSkpOwotK30KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQb3AoRmxvYXRS ZWdpc3RlciBmKSB7Ci0rICBwb3AoZik7Ci0rICBhZGp1c3RGcmFtZSgtaW50MzJfdChzaXplb2Yo ZG91YmxlKSkpOwotK30KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQb3AoY29uc3QgVmFsdWVPcGVy YW5kJiB2YWwpIHsKLSsgIHBvcFZhbHVlKHZhbCk7Ci0rICBhZGp1c3RGcmFtZSgtaW50MzJfdChz aXplb2YoVmFsdWUpKSk7Ci0rfQotKwotKy8vIHN0YXRpYwotK3NpemVfdCBNYWNyb0Fzc2VtYmxl cjo6UHVzaFJlZ3NJbk1hc2tTaXplSW5CeXRlcyhMaXZlUmVnaXN0ZXJTZXQgc2V0KSB7Ci0rICBy ZXR1cm4gc2V0LmdwcnMoKS5zaXplKCkgKiBzaXplb2YoaW50cHRyX3QpICsgc2V0LmZwdXMoKS5n ZXRQdXNoU2l6ZUluQnl0ZXMoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVS ZWdzSW5NYXNrKExpdmVSZWdpc3RlclNldCBzZXQsIEFkZHJlc3MgZGVzdCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgRmxvYXRS ZWdpc3RlclNldCBmcHVTZXQoc2V0LmZwdXMoKS5yZWR1Y2VTZXRGb3JQdXNoKCkpOwotKyAgbW96 aWxsYTo6RGVidWdPbmx5PHVuc2lnbmVkPiBudW1GcHUgPSBmcHVTZXQuc2l6ZSgpOwotKyAgbW96 aWxsYTo6RGVidWdPbmx5PGludDMyX3Q+IGRpZmZGID0gZnB1U2V0LmdldFB1c2hTaXplSW5CeXRl cygpOwotKyAgbW96aWxsYTo6RGVidWdPbmx5PGludDMyX3Q+IGRpZmZHID0gc2V0LmdwcnMoKS5z aXplKCkgKiBzaXplb2YoaW50cHRyX3QpOwotKwotKyAgTU9aX0FTU0VSVChkZXN0Lm9mZnNldCA+ PSBkaWZmRyArIGRpZmZGKTsKLSsKLSsgIGZvciAoR2VuZXJhbFJlZ2lzdGVyQmFja3dhcmRJdGVy YXRvciBpdGVyKHNldC5ncHJzKCkpOyBpdGVyLm1vcmUoKTsgKytpdGVyKSB7Ci0rICAgIGRpZmZH IC09IHNpemVvZihpbnRwdHJfdCk7Ci0rICAgIGRlc3Qub2Zmc2V0IC09IHNpemVvZihpbnRwdHJf dCk7Ci0rICAgIHN0b3JlUHRyKCppdGVyLCBkZXN0KTsKLSsgIH0KLSsgIE1PWl9BU1NFUlQoZGlm ZkcgPT0gMCk7Ci0rCi0rICAvLyBOYXR1cmFsIHBlci1raW5kIHNsb3QuIFNlZSBQdXNoUmVnc0lu TWFzayBjb21tZW50LgotKyAgZm9yIChGbG9hdFJlZ2lzdGVyQmFja3dhcmRJdGVyYXRvciBpdGVy KGZwdVNldCk7IGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsKLSsgICAgRmxvYXRSZWdpc3RlciByZWcg PSAqaXRlcjsKLSsgICAgZGlmZkYgLT0gcmVnLnNpemUoKTsKLSsgICAgbnVtRnB1IC09IDE7Ci0r ICAgIGRlc3Qub2Zmc2V0IC09IHJlZy5zaXplKCk7Ci0rICAgIGlmIChyZWcuaXNTaW1kMTI4KCkp IHsKLSsgICAgICBzdG9yZVVuYWxpZ25lZFNpbWQxMjgocmVnLCBkZXN0KTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICBzdG9yZURvdWJsZShyZWcuYXNEb3VibGUoKSwgZGVzdCk7Ci0rICAgIH0KLSsg IH0KLSsgIE1PWl9BU1NFUlQoZGlmZkYgPT0gMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmZyZWVTdGFja1RvKHVpbnQzMl90IGZyYW1lUHVzaGVkKSB7Ci0rICBNT1pfQVNTRVJUKGZy YW1lUHVzaGVkIDw9IGZyYW1lUHVzaGVkXyk7Ci0rICAvLyBTUCA9IEZQIC0gZnJhbWVQdXNoZWQK LSsgIG1vdmVQdHIoRnJhbWVQb2ludGVyLCBTdGFja1BvaW50ZXIpOwotKyAgaWYgKGZyYW1lUHVz aGVkKSB7Ci0rICAgIHN1YlB0cihJbW0zMihmcmFtZVB1c2hlZCksIFN0YWNrUG9pbnRlcik7Ci0r ICB9Ci0rICBmcmFtZVB1c2hlZF8gPSBmcmFtZVB1c2hlZDsKLSt9Ci0rCi0rLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r Ly8gQWRkaXRpb25hbCBjYWxsIC8gcGF0Y2ggb3BlcmF0aW9ucy4KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpjYWxsKEppdENvZGUqIGMpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r Ci0rICB1aW50NjRfdCBhZGRyID0gdWludHB0cl90KGMtPnJhdygpKTsKLSsgIEJ1ZmZlck9mZnNl dCBibyA9IGVtaXRMb2FkNjRTdGFuemEoc2NyYXRjaCwgYWRkcik7Ci0rICBhZGRQZW5kaW5nSnVt cChibywgSW1tUHRyKGMtPnJhdygpKSwgUmVsb2NhdGlvbktpbmQ6OkpJVENPREUpOwotKwotKyAg Y2FsbEppdE5vUHJvZmlsZXIoc2NyYXRjaCk7Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3Nl bWJsZXI6OmNhbGxXaXRoUGF0Y2goKSB7Ci0rICAvLyBFbWl0IGEgQ2FsbFRhZy1zaXplZCBzdGFu emEgb2Ygbm9wcy4gV2lsbCBiZSBwYXRjaGVkIGJ5IHBhdGNoQ2FsbC4KLSsgIC8vIFJldHVybiBv ZmZzZXQgQUZURVIgdGhlIHN0YW56YSAoPSB0aGUgcmV0dXJuIGFkZHJlc3Mgd2hlbiBibCBleGVj dXRlcykuCi0rICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5z bnMpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAg d3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0 KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3Qp OwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgd3Jp dGVJbnN0KE5vcEluc3QpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVybiBD b2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnBhdGNoQ2FsbCh1aW50MzJfdCBjYWxsZXJPZmZzZXQsIHVpbnQzMl90IGNhbGxlZU9mZnNldCkg ewotKyAgLy8gY2FsbGVyT2Zmc2V0IHBvaW50cyBBRlRFUiB0aGUgMTAtaW5zdHJ1Y3Rpb24gc3Rh bnphICh0aGUgcmV0dXJuIGFkZHJlc3MpLgotKyAgLy8gU3VidHJhY3QgdG8gZmluZCB0aGUgc3Rh bnphIHN0YXJ0LiBUaGUgYGJsYCBnb2VzIGF0IGluc3RbOV0uCi0rICB1aW50MzJfdCBzdGFuemFT dGFydCA9IGNhbGxlck9mZnNldCAtIDEwICogc2l6ZW9mKHVpbnQzMl90KTsKLSsgIEluc3RydWN0 aW9uKiBpMCA9IChJbnN0cnVjdGlvbiopKG1fYnVmZmVyLmdldEluc3QoQnVmZmVyT2Zmc2V0KHN0 YW56YVN0YXJ0KSkpOwotKyAgLy8gYmwgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGluc3RbOV0sIHdo aWNoIGlzIGF0IHN0YW56YVN0YXJ0ICsgMzYuCi0rICBpbnRwdHJfdCBibEFkZHIgPSAoaW50cHRy X3Qpc3RhbnphU3RhcnQgKyA5ICogKGludHB0cl90KXNpemVvZih1aW50MzJfdCk7Ci0rICBpbnRw dHJfdCBjYWxsT2Zmc2V0ID0gKGludHB0cl90KWNhbGxlZU9mZnNldCAtIGJsQWRkcjsKLSsgIGlm IChKT2ZmSW1tMjY6OklzSW5SYW5nZShjYWxsT2Zmc2V0KSkgewotKyAgICBpMFswXS5tYWtlTm9w KCk7Ci0rICAgIGkwWzFdLm1ha2VOb3AoKTsKLSsgICAgaTBbMl0ubWFrZU5vcCgpOwotKyAgICBp MFszXS5tYWtlTm9wKCk7Ci0rICAgIGkwWzRdLm1ha2VOb3AoKTsKLSsgICAgaTBbNV0ubWFrZU5v cCgpOwotKyAgICBpMFs2XS5tYWtlTm9wKCk7Ci0rICAgIGkwWzddLm1ha2VOb3AoKTsKLSsgICAg aTBbOF0ubWFrZU5vcCgpOwotKyAgICBpMFs5XS5zZXREYXRhKFBQQ19iIHwgSk9mZkltbTI2KGNh bGxPZmZzZXQpLmVuY29kZSgpIHwgTGlua0IpOwotKyAgfSBlbHNlIHsKLSsgICAgYWRkTG9uZ0p1 bXAoQnVmZmVyT2Zmc2V0KHN0YW56YVN0YXJ0KSwgQnVmZmVyT2Zmc2V0KGNhbGxlZU9mZnNldCkp OwotKyAgICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhpMCwgU2Vjb25kU2NyYXRjaFJlZywgTGFi ZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgIGkwWzhdLm1ha2VPcF9tdGN0cihTZWNvbmRT Y3JhdGNoUmVnKTsKLSsgICAgaTBbOV0ubWFrZU9wX2JjdHIoTGlua0IpOwotKyAgfQotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaEZhckp1bXAoQ29kZU9mZnNldCBmYXJKdW1wLCB1 aW50MzJfdCB0YXJnZXRPZmZzZXQpIHsKLSsgIEluc3RydWN0aW9uKiBpbnN0ID0KLSsgICAgICAo SW5zdHJ1Y3Rpb24qKW1fYnVmZmVyLmdldEluc3QoQnVmZmVyT2Zmc2V0KGZhckp1bXAub2Zmc2V0 KCkpKTsKLSsgIC8vIEV4dHJhY3QgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZyb20gdGhlIGV4 aXN0aW5nIHN0YW56YS4gQm90aCBzaGFwZXMKLSsgIC8vIGVuY29kZSByRCBhdCBMRSBiaXRzIFsy MS4uMjVdIG9mIHRoZWlyIGZpcnN0ICJyZWdpc3Rlci10b3VjaGluZyIgc2xvdDoKLSsgIC8vIFA4 ID0gbWZsciByRCBhdCBbMl0sIFA5KyA9IGFkZHBjaXMgckQgYXQgWzBdLiBNYWpvciBvcGNvZGUg b2Ygc2xvdCBbMF0KLSsgIC8vIGRpc3Rpbmd1aXNoZXMgKDMxID0gbWZzcHIsIDE5ID0gYWRkcGNp cykuCi0rICB1aW50MzJfdCBpMCA9IGluc3RbMF0uZW5jb2RlKCk7Ci0rICB1aW50MzJfdCByZWdD b2RlID0gKCgoaTAgPj4gMjYpICYgMHgzZikgPT0gMTkpCi0rICAgICAgICAgICAgICAgICAgICAg ICAgID8gKChpMCA+PiAyMSkgJiAweDFmKQotKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICgo aW5zdFsyXS5lbmNvZGUoKSA+PiAyMSkgJiAweDFmKTsKLSsgIFJlZ2lzdGVyIHJlZyA9IFJlZ2lz dGVyOjpGcm9tQ29kZShyZWdDb2RlKTsKLSsgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGluc3Qs IHJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICBhZGRMb25nSnVtcChCdWZmZXJP ZmZzZXQoZmFySnVtcC5vZmZzZXQoKSksIEJ1ZmZlck9mZnNldCh0YXJnZXRPZmZzZXQpKTsKLSt9 Ci0rCi0rLy8gc3RhdGljCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hGYXJKdW1wKHVpbnQ4 X3QqIGZhckp1bXAsIHVpbnQ4X3QqIHRhcmdldCkgewotKyAgVXBkYXRlTG9hZDY0VmFsdWUoKElu c3RydWN0aW9uKilmYXJKdW1wLCAodWludDY0X3QpKHVpbnRwdHJfdCl0YXJnZXQpOwotKyAgRmx1 c2hJQ2FjaGUoZmFySnVtcCwgOCAqIHNpemVvZihJbnN0cnVjdGlvbikpOwotK30KLSsKLSsvLyBz dGF0aWMKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaE5vcFRvQ2FsbCh1aW50OF90KiBjYWxs c2l0ZSwgdWludDhfdCogdGFyZ2V0KSB7Ci0rICAvLyBjYWxsc2l0ZSBwb2ludHMgQUZURVIgdGhl IDEwLWluc3RydWN0aW9uIHN0YW56YS4gU3VidHJhY3QgdG8gZmluZCBzdGFydC4KLSsgIEluc3Ry dWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKiljYWxsc2l0ZSAtIDEwOwotKyAgV3JpdGVMb2Fk NjRJbnN0cnVjdGlvbnMoaW5zdCwgU2Vjb25kU2NyYXRjaFJlZywgKHVpbnQ2NF90KSh1aW50cHRy X3QpdGFyZ2V0KTsKLSsgIGluc3RbOF0ubWFrZU9wX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOwot KyAgaW5zdFs5XS5tYWtlT3BfYmN0cihMaW5rQik7Ci0rICBGbHVzaElDYWNoZShpbnN0LCAxMCAq IHNpemVvZihJbnN0cnVjdGlvbikpOwotK30KLSsKLSsvLyBzdGF0aWMKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpwYXRjaENhbGxUb05vcCh1aW50OF90KiBjYWxsc2l0ZSkgewotKyAgLy8gY2FsbHNp dGUgcG9pbnRzIEFGVEVSIHRoZSAxMC1pbnN0cnVjdGlvbiBzdGFuemEuIFN1YnRyYWN0IHRvIGZp bmQgc3RhcnQuCi0rICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopY2FsbHNpdGUg LSAxMDsKLSsgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotKyAgICBpbnN0W2ldLm1h a2VOb3AoKTsKLSsgIH0KLSsgIEZsdXNoSUNhY2hlKGluc3QsIDEwICogc2l6ZW9mKEluc3RydWN0 aW9uKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoTW92ZTMyKENvZGVPZmZz ZXQgb2Zmc2V0LCBJbW0zMiBuKSB7Ci0rICAvLyBQYXRjaCBhbiA4LWluc3RydWN0aW9uIGxvYWQ2 NCBzZXF1ZW5jZSB3aXRoIGEgMzItYml0IHZhbHVlLgotKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPQot KyAgICAgIChJbnN0cnVjdGlvbiopbV9idWZmZXIuZ2V0SW5zdChCdWZmZXJPZmZzZXQob2Zmc2V0 Lm9mZnNldCgpKSk7Ci0rICBVcGRhdGVMb2FkNjRWYWx1ZShpbnN0LCB1aW50NjRfdChpbnQ2NF90 KG4udmFsdWUpKSk7Ci0rfQotKwotK3VpbnQzMl90IE1hY3JvQXNzZW1ibGVyOjpwdXNoRmFrZVJl dHVybkFkZHJlc3MoUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgQ29kZUxhYmVsIGNsOwotKwotKyAg Ly8gVXNlIG1vdihDb2RlTGFiZWwqLCBSZWdpc3Rlcikgd2hpY2ggYWx3YXlzIGVtaXRzIGEgZnVs bCA4LWluc3RydWN0aW9uCi0rICAvLyBsb2FkNjQgc2VxdWVuY2UgKHZpYSBOT1BzICsgV3JpdGVM b2FkNjRJbnN0cnVjdGlvbnMpLiBUaGlzIGlzIGNyaXRpY2FsCi0rICAvLyBiZWNhdXNlIG1vdmVQ dHIoSW1tV29yZCgwKSkgd291bGQgb3B0aW1pemUgdG8gYSBzaW5nbGUgbGkgaW5zdHJ1Y3Rpb24s Ci0rICAvLyBidXQgcHJvY2Vzc0NvZGVMYWJlbHMtPkJpbmQtPlVwZGF0ZUxvYWQ2NFZhbHVlIGV4 cGVjdHMgdGhlIGZ1bGwKLSsgIC8vIDgtaW5zdHJ1Y3Rpb24gbGl0ZXJhbCBwb29sIHNlcXVlbmNl IGF0IHRoZSBwYXRjaEF0IG9mZnNldC4KLSsgIG1vdigmY2wsIHNjcmF0Y2gpOwotKwotKyAgUHVz aChzY3JhdGNoKTsKLSsKLSsgIGJpbmQoJmNsKTsKLSsgIHVpbnQzMl90IHJldEFkZHIgPSBjdXJy ZW50T2Zmc2V0KCk7Ci0rCi0rICBhZGRDb2RlTGFiZWwoY2wpOwotKyAgcmV0dXJuIHJldEFkZHI7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxXaXRoQUJJTm9Qcm9maWxlcihSZWdp c3RlciBmdW4sIEFCSVR5cGUgcmVzdWx0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgLy8gU2F2ZSBmdW4gdG8gc2NyYXRjaCBzaW5jZSBmdW4gbWlnaHQgYmUgY2xvYmJlcmVkIGJ5 IGNhbGxXaXRoQUJJUHJlLgotKyAgbW92ZVB0cihmdW4sIHNjcmF0Y2gpOwotKwotKyAgdWludDMy X3Qgc3RhY2tBZGp1c3Q7Ci0rICBjYWxsV2l0aEFCSVByZSgmc3RhY2tBZGp1c3QpOwotKyAgY2Fs bChzY3JhdGNoKTsKLSsgIGNhbGxXaXRoQUJJUG9zdChzdGFja0FkanVzdCwgcmVzdWx0KTsKLSt9 Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rLy8gQWRkaXRpb25hbCBhcml0aG1ldGljIGhlbHBlcnMuCi0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVSZW1haW5kZXIzMihSZWdpc3RlciBsaHMsIFJl Z2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIGRlc3QsIGJvb2wgaXNVbnNpZ25lZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IExpdmVSZWdpc3RlclNldCYpIHsKLSsgIC8vIHJlbSA9IGxo cyAtIChsaHMvcmhzKSpyaHMKLSsgIC8vIFBQQzY0IGRpdncoSU5UMzJfTUlOLCAtMSkgaXMgdW5k ZWZpbmVkOyByZXN1bHQgaXMgMC4KLSsgIExhYmVsIGRvbmU7Ci0rICBpZiAoIWlzVW5zaWduZWQp IHsKLSsgICAgTGFiZWwgbm90TWluT3ZlcmZsb3c7Ci0rICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCBsaHMsIEltbVdvcmQoSU5UMzJfTUlOKSwgJm5vdE1pbk92ZXJmbG93KTsKLSsg ICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgtMSksICZub3RN aW5PdmVyZmxvdyk7Ci0rICAgIG1vdmUzMihJbW0zMigwKSwgZGVzdCk7Ci0rICAgIGp1bXAoJmRv bmUpOwotKyAgICBiaW5kKCZub3RNaW5PdmVyZmxvdyk7Ci0rICB9Ci0rICBpZiAoSGFzUE9XRVI5 KCkpIHsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBhc19tb2R1dyhkZXN0LCBsaHMs IHJocyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfbW9kc3coZGVzdCwgbGhzLCByaHMpOwot KyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAg IGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfZGl2d3Uoc2NyYXRjaCwgbGhzLCByaHMpOwot KyAgICB9IGVsc2UgewotKyAgICAgIGFzX2Rpdncoc2NyYXRjaCwgbGhzLCByaHMpOwotKyAgICB9 Ci0rICAgIGFzX211bGx3KHNjcmF0Y2gsIHNjcmF0Y2gsIHJocyk7Ci0rICAgIGFzX3N1YmYoZGVz dCwgc2NyYXRjaCwgbGhzKTsKLSsgIH0KLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgYmlu ZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUXVvdGllbnRQ dHIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBib29sIGlzVW5zaWduZWQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQm KSB7Ci0rICAvLyBQUEM2NCBkaXZkKElOVDY0X01JTiwgLTEpIGlzIHVuZGVmaW5lZDsgcmV0dXJu IElOVDY0X01JTiB0byBtYXRjaAotKyAgLy8gQVJNNjQvTG9vbmdBcmNoNjQgaGFyZHdhcmUgc2Rp diBiZWhhdmlvci4KLSsgIExhYmVsIGRvbmU7Ci0rICBpZiAoIWlzVW5zaWduZWQpIHsKLSsgICAg TGFiZWwgbm90TWluT3ZlcmZsb3c7Ci0rICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFs LCBsaHMsIEltbVdvcmQoSU5UNjRfTUlOKSwgJm5vdE1pbk92ZXJmbG93KTsKLSsgICAgYnJhbmNo UHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tV29yZCgtMSksICZub3RNaW5PdmVyZmxv dyk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChJTlQ2NF9NSU4pLCBkZXN0KTsKLSsgICAganVtcCgm ZG9uZSk7Ci0rICAgIGJpbmQoJm5vdE1pbk92ZXJmbG93KTsKLSsgIH0KLSsgIGlmIChpc1Vuc2ln bmVkKSB7Ci0rICAgIGFzX2RpdmR1KGRlc3QsIGxocywgcmhzKTsKLSsgIH0gZWxzZSB7Ci0rICAg IGFzX2RpdmQoZGVzdCwgbGhzLCByaHMpOwotKyAgfQotKyAgYmluZCgmZG9uZSk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUmVtYWluZGVyUHRyKFJlZ2lzdGVyIGxocywg UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIGRlc3QsIGJvb2wgaXNVbnNpZ25lZCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmKSB7Ci0rICAvLyByZW0g PSBsaHMgLSAobGhzL3JocykqcmhzCi0rICAvLyBQUEM2NCBkaXZkKElOVDY0X01JTiwgLTEpIGlz IHVuZGVmaW5lZDsgcmVzdWx0IGlzIDAuCi0rICBMYWJlbCBkb25lOwotKyAgaWYgKCFpc1Vuc2ln bmVkKSB7Ci0rICAgIExhYmVsIG5vdE1pbk92ZXJmbG93OwotKyAgICBicmFuY2hQdHIoQXNzZW1i bGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDY0X01JTiksICZub3RNaW5PdmVyZmxvdyk7 Ci0rICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAm bm90TWluT3ZlcmZsb3cpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoMCksIGRlc3QpOwotKyAgICBq dW1wKCZkb25lKTsKLSsgICAgYmluZCgmbm90TWluT3ZlcmZsb3cpOwotKyAgfQotKyAgaWYgKEhh c1BPV0VSOSgpKSB7Ci0rICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfbW9kdWQoZGVz dCwgbGhzLCByaHMpOwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX21vZHNkKGRlc3QsIGxocywg cmhzKTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGFzX2RpdmR1KHNjcmF0Y2gsIGxocywg cmhzKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19kaXZkKHNjcmF0Y2gsIGxocywgcmhzKTsK LSsgICAgfQotKyAgICBhc19tdWxsZChzY3JhdGNoLCBzY3JhdGNoLCByaHMpOwotKyAgICBhc19z dWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7Ci0rICB9Ci0rICBiaW5kKCZkb25lKTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gUm91bmRpbmcgaGVscGVycy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpmbG9vckRvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0r ICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rCi0rICAvLyBSb3VuZCB0b3dhcmQgbmVnYXRpdmUgaW5maW5pdHksIHRo ZW4gY29udmVydCB0byBpbnQ2NC4KLSsgIGFzX2ZyaW0oZnBzY3JhdGNoLCBzcmMpOwotKyAgYXNf ZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKLSsgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0 Y2gpOwotKwotKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCi0rICBhc19leHRz dyhzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICBtYV9iKE5v dEVxdWFsLCBmYWlsKTsKLSsKLSsgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0 IGlzIHplcm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBt YV9iKE5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIC8vIElmIHRvcCAyIGJpdHMgb2Yg c3JjIGFyZSBzZXQsIGl0J3MgbmVnYXRpdmUgb3IgTmFOLgotKyAgICBhc19tZnZzcmQoZGVzdCwg c3JjKTsKLSsgICAgLy8gcmxkaWNsLiA9IHhfc3JkaSArIHJlY29yZCBmb3JtOiBkZXN0ID0gdG9w IDIgYml0cywgQ1IwW2VxXT0oZGVzdD09MCkuCi0rICAgIC8vIEZvbGRzIHRoZSBleHBsaWNpdCBj bXBkaSBzcmMsMCB0aGF0IHdvdWxkIG90aGVyd2lzZSBkcml2ZSB0aGUgYnJhbmNoLgotKyAgICBh c19ybGRpY2xfcmMoZGVzdCwgZGVzdCwgMiwgNjIpOwotKyAgICBtYV9iKE5vdEVxdWFsLCBmYWls KTsKLSsgIH0KLSsgIGJpbmQoJm5vdFplcm8pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpmbG9vckZsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsK LSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsKLSsgIC8vIFBQQyBGUCByb3VuZGluZyB3b3JrcyBvbiBkb3VibGVz LiBTaW5nbGUtcHJlY2lzaW9uIEZQUnMgYXJlCi0rICAvLyBhbHJlYWR5IGluIGRvdWJsZS13aWR0 aCByZWdpc3RlcnMsIHNvIGZyaW0gd29ya3MgZmluZS4KLSsgIGFzX2ZyaW0oZnBzY3JhdGNoLCBz cmMpOwotKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKLSsgIGFzX21mdnNyZChk ZXN0LCBmcHNjcmF0Y2gpOwotKwotKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIu Ci0rICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7 Ci0rICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsKLSsgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFO IHdoZW4gcmVzdWx0IGlzIHplcm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVz dCwgMCk7Ci0rICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIC8vIHNyYyBp cyBoZWxkIGluIHRoZSBGUFIgYXMgYSA2NC1iaXQgZG91YmxlIChsZnMgd2lkZW5zIGZsb2F0MzIg dG8KLSsgICAgLy8gZG91YmxlIG9uIGxvYWQpLCBzbyB0aGUgc2FtZSB0b3AtMi1iaXRzIGNoZWNr IHVzZWQgZm9yIGRvdWJsZXMKLSsgICAgLy8gYXBwbGllczogYml0IDYzID0gc2lnbiwgYml0IDYy ID0gZXhwb25lbnQgTVNCLiBOb256ZXJvIG1lYW5zIC0wLAotKyAgICAvLyDCsUluZiwgTmFOLCBv ciBhIGxhcmdlIG1hZ25pdHVkZSDigJQgbm9uZSBvZiB3aGljaCBpcyArMC4KLSsgICAgYXNfbWZ2 c3JkKGRlc3QsIHNyYyk7Ci0rICAgIC8vIHJsZGljbC4gPSB4X3NyZGkgKyByZWNvcmQgZm9ybTog ZGVzdCA9IHRvcCAyIGJpdHMsIENSMFtlcV09KGRlc3Q9PTApLgotKyAgICAvLyBGb2xkcyB0aGUg ZXhwbGljaXQgY21wZGkgc3JjLDAgdGhhdCB3b3VsZCBvdGhlcndpc2UgZHJpdmUgdGhlIGJyYW5j aC4KLSsgICAgYXNfcmxkaWNsX3JjKGRlc3QsIGRlc3QsIDIsIDYyKTsKLSsgICAgbWFfYihOb3RF cXVhbCwgZmFpbCk7Ci0rICB9Ci0rICBiaW5kKCZub3RaZXJvKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y2VpbERvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVy IGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZh aWwpIHsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGFzX2ZyaXAoZnBzY3JhdGNoLCBzcmMpOwotKyAg YXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKLSsgIGFzX21mdnNyZChkZXN0LCBmcHNj cmF0Y2gpOwotKwotKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCi0rICBhc19l eHRzdyhzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICBtYV9i KE5vdEVxdWFsLCBmYWlsKTsKLSsKLSsgIC8vIENoZWNrIGZvciAoLTEsIC0wXSBhbmQgTmFOIHdo ZW4gcmVzdWx0IGlzIHplcm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwg MCk7Ci0rICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIC8vIElmIGJpbmFy eSB2YWx1ZSBpcyBub3QgemVybywgaW5wdXQgd2FzIG5vdCAwIChjb3VsZCBiZSAtMCBvciBOYU4p LgotKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKLSsgICAgYXNfY21wZGkoZGVzdCwgMCk7Ci0r ICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQotKyAgYmluZCgmbm90WmVybyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNlaWxGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVy IHNyYywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGZhaWwpIHsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNN YXNtKCkpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGFzX2ZyaXAoZnBzY3Jh dGNoLCBzcmMpOwotKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKLSsgIGFzX21m dnNyZChkZXN0LCBmcHNjcmF0Y2gpOwotKwotKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4g aW50MzIuCi0rICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2Ny YXRjaCk7Ci0rICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsKLSsgIC8vIENoZWNrIGZvciAoLTEs IC0wXSBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAg YXNfY21wZGkoZGVzdCwgMCk7Ci0rICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0r ICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAg bWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0rICB9Ci0rICBiaW5kKCZub3RaZXJvKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNEb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYWJlbCogZmFpbCkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20o KSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgYXNfZmN0aWR6KGZwc2NyYXRj aCwgc3JjKTsKLSsgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOwotKwotKyAgLy8gQ2hlY2sg aWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCi0rICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKLSsg IGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsKLSsg IC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCi0rICBMYWJlbCBu b3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBtYV9iKE5vdEVxdWFsLCAmbm90WmVy byk7Ci0rICB7Ci0rICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAgICAvLyBybGRpY2wuID0g eF9zcmRpICsgcmVjb3JkIGZvcm06IGRlc3QgPSB0b3AgMiBiaXRzLCBDUjBbZXFdPShkZXN0PT0w KS4KLSsgICAgLy8gRm9sZHMgdGhlIGV4cGxpY2l0IGNtcGRpIHNyYywwIHRoYXQgd291bGQgb3Ro ZXJ3aXNlIGRyaXZlIHRoZSBicmFuY2guCi0rICAgIGFzX3JsZGljbF9yYyhkZXN0LCBkZXN0LCAy LCA2Mik7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQotKyAgYmluZCgmbm90WmVy byk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQzMlRvSW50MzIoRmxv YXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZw c2NyYXRjaChhc01hc20oKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgYXNf ZmN0aWR6KGZwc2NyYXRjaCwgc3JjKTsKLSsgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOwot KwotKyAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCi0rICBhc19leHRzdyhzY3Jh dGNoLCBkZXN0KTsKLSsgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICBtYV9iKE5vdEVxdWFs LCBmYWlsKTsKLSsKLSsgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHpl cm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBtYV9iKE5v dEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAg ICAvLyBybGRpY2wuID0geF9zcmRpICsgcmVjb3JkIGZvcm06IGRlc3QgPSB0b3AgMiBiaXRzLCBD UjBbZXFdPShkZXN0PT0wKS4KLSsgICAgLy8gRm9sZHMgdGhlIGV4cGxpY2l0IGNtcGRpIHNyYyww IHRoYXQgd291bGQgb3RoZXJ3aXNlIGRyaXZlIHRoZSBicmFuY2guCi0rICAgIGFzX3JsZGljbF9y YyhkZXN0LCBkZXN0LCAyLCA2Mik7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQot KyAgYmluZCgmbm90WmVybyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdW5kRG91 YmxlVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wLCBMYWJlbCog ZmFpbCkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgTGFiZWwgbmVnYXRpdmUsIGVuZCwgcGVyZm9y bVJvdW5kOwotKwotKyAgLy8gQnJhbmNoIGZvciBuZWdhdGl2ZSBpbnB1dHMuCi0rICB6ZXJvRG91 YmxlKGZwc2NyYXRjaCk7Ci0rICBicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFs LCBzcmMsIGZwc2NyYXRjaCwgJnBlcmZvcm1Sb3VuZCk7Ci0rCi0rICAvLyBJbnB1dCBpcyBuZWdh dGl2ZS4KLSsgIGxvYWRDb25zdGFudERvdWJsZSgtMC41LCBmcHNjcmF0Y2gpOwotKyAgYnJhbmNo RG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgc3JjLCBmcHNjcmF0Y2gsIGZhaWwpOwot KyAganVtcCgmcGVyZm9ybVJvdW5kKTsKLSsKLSsgIGJpbmQoJnBlcmZvcm1Sb3VuZCk7Ci0rICB7 Ci0rICAgIGxvYWRDb25zdGFudERvdWJsZShHZXRCaWdnZXN0TnVtYmVyTGVzc1RoYW4oMC41KSwg dGVtcCk7Ci0rICAgIGFzX2ZhZGQoZnBzY3JhdGNoLCBzcmMsIHRlbXApOwotKyAgICBhc19mcmlt KGZwc2NyYXRjaCwgZnBzY3JhdGNoKTsKLSsgICAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgZnBzY3Jh dGNoKTsKLSsgICAgYXNfbWZ2c3JkKGRlc3QsIGZwc2NyYXRjaCk7Ci0rCi0rICAgIC8vIENoZWNr IGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgotKyAgICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsK LSsgICAgYXNfY21wZChkZXN0LCBzY3JhdGNoKTsKLSsgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7 Ci0rICB9Ci0rICBiaW5kKCZlbmQpOwotKwotKyAgLy8gQ2hlY2sgZm9yIC0wIGFuZCBOYU4gd2hl biByZXN1bHQgaXMgemVyby4KLSsgIExhYmVsIG5vdFplcm87Ci0rICBhc19jbXBkaShkZXN0LCAw KTsKLSsgIG1hX2IoTm90RXF1YWwsICZub3RaZXJvKTsKLSsgIHsKLSsgICAgYXNfbWZ2c3JkKGRl c3QsIHNyYyk7Ci0rICAgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgICBtYV9iKE5vdEVxdWFsLCBm YWlsKTsKLSsgIH0KLSsgIGJpbmQoJm5vdFplcm8pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpyb3VuZEZsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciB0ZW1wLCBMYWJlbCogZmFpbCkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChh c01hc20oKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgTGFiZWwgbmVnYXRp dmUsIGVuZCwgcGVyZm9ybVJvdW5kOwotKwotKyAgLy8gQnJhbmNoIGZvciBub24tbmVnYXRpdmUg aW5wdXRzLgotKyAgbG9hZENvbnN0YW50RmxvYXQzMigwLjBmLCBmcHNjcmF0Y2gpOwotKyAgYnJh bmNoRmxvYXQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBzcmMsIGZwc2NyYXRjaCwgJnBlcmZv cm1Sb3VuZCk7Ci0rCi0rICAvLyBJbnB1dCBpcyBuZWdhdGl2ZS4KLSsgIGxvYWRDb25zdGFudEZs b2F0MzIoLTAuNWYsIGZwc2NyYXRjaCk7Ci0rICBicmFuY2hGbG9hdChEb3VibGVHcmVhdGVyVGhh bk9yRXF1YWwsIHNyYywgZnBzY3JhdGNoLCBmYWlsKTsKLSsgIGp1bXAoJnBlcmZvcm1Sb3VuZCk7 Ci0rCi0rICBiaW5kKCZwZXJmb3JtUm91bmQpOwotKyAgewotKyAgICBsb2FkQ29uc3RhbnRGbG9h dDMyKGZsb2F0KEdldEJpZ2dlc3ROdW1iZXJMZXNzVGhhbigwLjUpKSwgdGVtcCk7Ci0rICAgIGFz X2ZhZGRzKGZwc2NyYXRjaCwgc3JjLCB0ZW1wKTsKLSsgICAgYXNfZnJpbShmcHNjcmF0Y2gsIGZw c2NyYXRjaCk7Ci0rICAgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICAgIGFz X21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOwotKwotKyAgICAvLyBDaGVjayBpZiByZXN1bHQgZml0 cyBpbiBpbnQzMi4KLSsgICAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7Ci0rICAgIGFzX2NtcGQo ZGVzdCwgc2NyYXRjaCk7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQotKyAgYmlu ZCgmZW5kKTsKLSsKLSsgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHpl cm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBtYV9iKE5v dEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAg ICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0rICB9Ci0r ICBiaW5kKCZub3RaZXJvKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gRlAgY29udmVyc2lvbiAv IGNvcHktc2lnbi4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0SW50UHRyVG9Eb3Vi bGUoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGNvbnZlcnRJbnQ2NFRv RG91YmxlKFJlZ2lzdGVyNjQoc3JjKSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNvcHlTaWduRG91YmxlKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIG91dHB1 dCkgewotKyAgLy8gZmNwc2duIGZydCwgZnJhLCBmcmI6IGNvcGllcyBzaWduIG9mIGZyYSB0byBt YWduaXR1ZGUgb2YgZnJiLgotKyAgLy8gbGhzID0gbWFnbml0dWRlIHNvdXJjZSwgcmhzID0gc2ln biBzb3VyY2UuCi0rICBhc19mY3BzZ24ob3V0cHV0LCByaHMsIGxocyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmNvcHlTaWduRmxvYXQzMihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBhc19mY3BzZ24ob3V0cHV0LCByaHMsIGxocyk7Ci0rfQot KwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKy8vIEdDIC8gbnVyc2VyeSBoZWxwZXJzLgotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmxvYWRTdG9yZUJ1ZmZlcihSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIGJ1ZmZlcikg ewotKyAgYW5kUHRyKEltbTMyKGludDMyX3QofmdjOjpDaHVua01hc2spKSwgcHRyLCBidWZmZXIp OwotKyAgbG9hZFB0cihBZGRyZXNzKGJ1ZmZlciwgZ2M6OkNodW5rU3RvcmVCdWZmZXJPZmZzZXQp LCBidWZmZXIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hWYWx1ZUlzTnVy c2VyeUNlbGwoQ29uZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBsYWJl bCkgewotKyAgYnJhbmNoVmFsdWVJc051cnNlcnlDZWxsSW1wbChjb25kLCBhZGRyZXNzLCB0ZW1w LCBsYWJlbCk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFZhbHVlSXNOdXJzZXJ5Q2VsbEltcGwoQ29uZGl0aW9uIGNvbmQsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiB2 YWx1ZSwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEFz c2VtYmxlcjo6RXF1YWwgfHwgY29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsKLSsgIE1PWl9B U1NFUlQodGVtcCAhPSBJbnZhbGlkUmVnKTsKLSsgIExhYmVsIGRvbmU7Ci0rICBicmFuY2hUZXN0 R0NUaGluZyhBc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAg IGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVhbCA/ICZkb25lIDogbGFiZWwpOwotKwotKyAgZ2V0R0NU aGluZ1ZhbHVlQ2h1bmsodmFsdWUsIHRlbXApOwotKyAgbG9hZFB0cihBZGRyZXNzKHRlbXAsIGdj OjpDaHVua1N0b3JlQnVmZmVyT2Zmc2V0KSwgdGVtcCk7Ci0rICBicmFuY2hQdHIoSW52ZXJ0Q29u ZGl0aW9uKGNvbmQpLCB0ZW1wLCBJbW1Xb3JkKDApLCBsYWJlbCk7Ci0rCi0rICBiaW5kKCZkb25l KTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVGVtcGxhdGUgaW5zdGFudGlhdGlvbnMuCi0rCi0r dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVVbmJveGVk VmFsdWUoY29uc3QgQ29uc3RhbnRPclJlZ2lzdGVyJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNSVJUeXBlIHZhbHVlVHlwZSwgY29uc3QgVCYgZGVzdCkg ewotKyAgTU9aX0FTU0VSVCh2YWx1ZVR5cGUgPCBNSVJUeXBlOjpWYWx1ZSk7Ci0rCi0rICBpZiAo dmFsdWVUeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICBib3hEb3VibGUodmFsdWUucmVn KCkudHlwZWRSZWcoKS5mcHUoKSwgZGVzdCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIGlm ICh2YWx1ZS5jb25zdGFudCgpKSB7Ci0rICAgIHN0b3JlVmFsdWUodmFsdWUudmFsdWUoKSwgZGVz dCk7Ci0rICB9IGVsc2UgewotKyAgICBzdG9yZVZhbHVlKFZhbHVlVHlwZUZyb21NSVJUeXBlKHZh bHVlVHlwZSksIHZhbHVlLnJlZygpLnR5cGVkUmVnKCkuZ3ByKCksCi0rICAgICAgICAgICAgICAg ZGVzdCk7Ci0rICB9Ci0rfQotKwotK3RlbXBsYXRlIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN0b3Jl VW5ib3hlZFZhbHVlKGNvbnN0IENvbnN0YW50T3JSZWdpc3RlciYgdmFsdWUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlSVHlwZSB2YWx1ZVR5cGUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QWRkcmVzcyYgZGVzdCk7Ci0rdGVtcGxhdGUgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVVbmJv eGVkVmFsdWUoCi0rICAgIGNvbnN0IENvbnN0YW50T3JSZWdpc3RlciYgdmFsdWUsIE1JUlR5cGUg dmFsdWVUeXBlLAotKyAgICBjb25zdCBCYXNlT2JqZWN0RWxlbWVudEluZGV4JiBkZXN0KTsKLSsK LSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsvLyBNaXNjIHN0dWJzLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNv bW1lbnQoY29uc3QgY2hhciogbXNnKSB7fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN1 bGF0aW9uQmFycmllcigpIHsKLSsgIC8vIGlzeW5jIHByb3ZpZGVzIGV4ZWN1dGlvbiBzeW5jaHJv bml6YXRpb246IGRpc2NhcmRzIHByZWZldGNoZWQKLSsgIC8vIGluc3RydWN0aW9ucyBhbmQgZm9y Y2VzIGEgcmVmZXRjaCtyZWV4ZWN1dGUgcGFzdCB0aGUgYmFycmllci4KLSsgIC8vIE5vIGluc3Ry dWN0aW9uIGZvbGxvd2luZyBpc3luYyBtYXkgYmVnaW4gKGFyY2hpdGVjdHVyYWxseSkgdW50aWwK LSsgIC8vIGlzeW5jIGNvbXBsZXRlcywgYmxvY2tpbmcgc3BlY3VsYXRpdmUgYnlwYXNzIOKAlCBl eGFjdGx5IHRoZQotKyAgLy8gU3BlY3RyZSB2MSBndWFyYW50ZWUgbmVlZGVkIGFmdGVyIGEgQyBj YWxsIHJldHVybnMgYSB2YWx1ZSB0aGF0Ci0rICAvLyBtYXkgaW5mbHVlbmNlIHN1YnNlcXVlbnQg bG9hZHMuIFJlYWNoYWJsZSBmcm9tIHNoYXJlZAotKyAgLy8gQ29kZUdlbmVyYXRvciB1bmRlciBK aXRPcHRpb25zLnNwZWN0cmVKaXRUb0N4eENhbGxzLgotKyAgYXNfaXN5bmMoKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljUGF1c2UoKSB7IG5vcCgpOyB9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6ZW50ZXJGYWtlRXhpdEZyYW1lRm9yV2FzbShSZWdpc3RlciBjeHJlZywg UmVnaXN0ZXIgc2NyYXRjaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEV4aXRGcmFtZVR5cGUgdHlwZSkgewotKyAgZW50ZXJGYWtlRXhpdEZyYW1lKGN4 cmVnLCBzY3JhdGNoLCB0eXBlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUJv dW5kc0NoZWNrMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGluZGV4LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGJvdW5kc0NoZWNrTGltaXQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBtYV9jbXAoaW5kZXgsIGJvdW5kc0NoZWNrTGltaXQsIGNvbmQpOwotKyAgbWFfYihjb25kLCBs YWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Cb3VuZHNDaGVjazMyKENv bmRpdGlvbiBjb25kLCBSZWdpc3RlciBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBZGRyZXNzIGJvdW5kc0NoZWNrTGltaXQsIExhYmVsKiBsYWJlbCkgewot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihib3VuZHNDaGVja0xpbWl0LCBz Y3JhdGNoKTsKLSsgIG1hX2NtcChpbmRleCwgc2NyYXRjaCwgY29uZCk7Ci0rICBtYV9iKGNvbmQs IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUJvdW5kc0NoZWNrNjQo Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgaW5kZXgsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBib3VuZHNDaGVja0xpbWl0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgbWFfY21w KGluZGV4LnJlZywgYm91bmRzQ2hlY2tMaW1pdC5yZWcsIGNvbmQpOwotKyAgbWFfYihjb25kLCBs YWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Cb3VuZHNDaGVjazY0KENv bmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGluZGV4LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFkZHJlc3MgYm91bmRzQ2hlY2tMaW1pdCwgTGFiZWwqIGxhYmVsKSB7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihib3VuZHNDaGVja0xpbWl0 LCBzY3JhdGNoKTsKLSsgIG1hX2NtcChpbmRleC5yZWcsIHNjcmF0Y2gsIGNvbmQpOwotKyAgbWFf Yihjb25kLCBsYWJlbCk7Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUz MldpdGhQYXRjaChSZWdpc3RlciBkZXN0KSB7Ci0rICBDb2RlT2Zmc2V0IG9mZnNldChjdXJyZW50 T2Zmc2V0KCkpOwotKyAgZW1pdExvYWQ2NFN0YW56YShkZXN0LCAwKTsKLSsgIHJldHVybiBvZmZz ZXQ7Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyRnJvbU1lbUFuZEJy YW5jaElmTmVnYXRpdmVXaXRoUGF0Y2goCi0rICAgIEFkZHJlc3MgYWRkcmVzcywgTGFiZWwqIGxh YmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgTU9aX0FTU0VSVChzY3JhdGNo ICE9IGFkZHJlc3MuYmFzZSk7Ci0rICBsb2FkMzIoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICAvLyBT dWJ0cmFjdCBhIHBsYWNlaG9sZGVyIHZhbHVlICh3aWxsIGJlIHBhdGNoZWQpLgotKyAgLy8gVXNl IGFkZGkgd2l0aCBwb3NpdGl2ZSBwbGFjZWhvbGRlciAoMTI4KSwgd2hpY2ggd2lsbCBiZSBwYXRj aGVkIHRvCi0rICAvLyBhZGRpIHdpdGggbmVnYXRpdmUgdmFsdWUuIFRoZSBpbW1lZGlhdGUgaXMg aW4gdGhlIGFkZGkgaW5zdHJ1Y3Rpb24uCi0rICBhc19hZGRpKHNjcmF0Y2gsIHNjcmF0Y2gsIDEy OCk7Ci0rICBDb2RlT2Zmc2V0IHBhdGNoUG9pbnQgPSBDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQo KSk7Ci0rICBzdG9yZTMyKHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgLy8gQnJhbmNoIGlmIHJlc3Vs dCBpcyBuZWdhdGl2ZSAoc2lnbmVkKS4KLSsgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwotKyAgbWFf YihMZXNzVGhhbiwgbGFiZWwpOwotKyAgcmV0dXJuIHBhdGNoUG9pbnQ7Ci0rfQotKwotK2Jvb2wg TWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRVSW50NjRUb0RvdWJsZU5lZWRzVGVtcCgpIHsgcmV0dXJu IGZhbHNlOyB9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChJbW1Xb3JkIGltbSkgeyBj YWxsKEltbVB0cigodm9pZCopaW1tLnZhbHVlKSk7IH0KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpjb252ZXJ0VUludDY0VG9Eb3VibGUoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dGVtcCkgewotKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOwotKyAg Ly8gUE9XRVI3KyBoYXMgZmNmaWR1ICh1bnNpZ25lZCBpNjQg4oaSIGY2NCkgYXMgYSBzaW5nbGUg aW5zdHJ1Y3Rpb247IG5vCi0rICAvLyBzaWduLXNwbGl0IC8gYnJhbmNoIC8gR1BSIHNjcmF0Y2gg bmVlZGVkLgotKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOwotKyAgYXNfZmNmaWR1KGRlc3Qs IGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0SW50NjRUb0Zsb2F0 MzIoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfbXR2c3JkKGRl c3QsIHNyYy5yZWcpOwotKyAgYXNfZmNmaWRzKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpjb252ZXJ0VUludDY0VG9GbG9hdDMyKFJlZ2lzdGVyNjQgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6Oklu dmFsaWQoKSk7Ci0rICAvLyBQT1dFUjcrIGhhcyBmY2ZpZHVzICh1bnNpZ25lZCBpNjQg4oaSIGYz MikgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCi0rICBhc19tdHZzcmQoZGVzdCwgc3JjLnJlZyk7 Ci0rICBhc19mY2ZpZHVzKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpmbGV4aWJsZVF1b3RpZW50MzIoCi0rICAgIFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBS ZWdpc3RlciBkZXN0LCBib29sIGlzVW5zaWduZWQsCi0rICAgIGNvbnN0IExpdmVSZWdpc3RlclNl dCYgdm9sYXRpbGVMaXZlUmVncykgewotKyAgLy8gUFBDNjQgZGl2dyhJTlQzMl9NSU4sIC0xKSBp cyB1bmRlZmluZWQ7IHJldHVybiBJTlQzMl9NSU4gdG8gbWF0Y2gKLSsgIC8vIEFSTTY0L0xvb25n QXJjaDY0IGhhcmR3YXJlIHNkaXYgYmVoYXZpb3IuCi0rICBMYWJlbCBkb25lOwotKyAgaWYgKCFp c1Vuc2lnbmVkKSB7Ci0rICAgIExhYmVsIG5vdE1pbk92ZXJmbG93OwotKyAgICBicmFuY2hQdHIo QXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZub3RNaW5PdmVy Zmxvdyk7Ci0rICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQo LTEpLCAmbm90TWluT3ZlcmZsb3cpOwotKyAgICBtb3ZlMzIoSW1tMzIoSU5UMzJfTUlOKSwgZGVz dCk7Ci0rICAgIGp1bXAoJmRvbmUpOwotKyAgICBiaW5kKCZub3RNaW5PdmVyZmxvdyk7Ci0rICB9 Ci0rICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICBhc19kaXZ3dShkZXN0LCBsaHMsIHJocyk7Ci0r ICB9IGVsc2UgewotKyAgICBhc19kaXZ3KGRlc3QsIGxocywgcmhzKTsKLSsgIH0KLSsgIGFzX2V4 dHN3KGRlc3QsIGRlc3QpOwotKyAgYmluZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om9vbFdhc21UcnVuY2F0ZUNoZWNrRjMyVG9JMzIoCi0rICAgIEZsb2F0UmVnaXN0ZXIg aW5wdXQsIFJlZ2lzdGVyIG91dHB1dCwgVHJ1bmNGbGFncyBmbGFncywKLSsgICAgY29uc3Qgd2Fz bTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsIExhYmVsKiByZWpvaW4pIHsKLSsgIG91dE9m TGluZVdhc21UcnVuY2F0ZVRvSW50MzJDaGVjayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBlOjpGbG9h dDMyLCBmbGFncywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWpvaW4s IHRyYXBTaXRlRGVzYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9vbFdhc21UcnVu Y2F0ZUNoZWNrRjMyVG9JNjQoCi0rICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQg b3V0cHV0LCBUcnVuY0ZsYWdzIGZsYWdzLAotKyAgICBjb25zdCB3YXNtOjpUcmFwU2l0ZURlc2Mm IHRyYXBTaXRlRGVzYywgTGFiZWwqIHJlam9pbikgewotKyAgb3V0T2ZMaW5lV2FzbVRydW5jYXRl VG9JbnQ2NENoZWNrKGlucHV0LCBvdXRwdXQsIE1JUlR5cGU6OkZsb2F0MzIsIGZsYWdzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlam9pbiwgdHJhcFNpdGVEZXNjKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b29sV2FzbVRydW5jYXRlQ2hlY2tGNjRUb0kz MigKLSsgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgb3V0cHV0LCBUcnVuY0ZsYWdz IGZsYWdzLAotKyAgICBjb25zdCB3YXNtOjpUcmFwU2l0ZURlc2MmIHRyYXBTaXRlRGVzYywgTGFi ZWwqIHJlam9pbikgewotKyAgb3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQzMkNoZWNrKGlucHV0 LCBvdXRwdXQsIE1JUlR5cGU6OkRvdWJsZSwgZmxhZ3MsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVqb2luLCB0cmFwU2l0ZURlc2MpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpvb2xXYXNtVHJ1bmNhdGVDaGVja0Y2NFRvSTY0KAotKyAgICBGbG9hdFJlZ2lz dGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwgVHJ1bmNGbGFncyBmbGFncywKLSsgICAgY29u c3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsIExhYmVsKiByZWpvaW4pIHsKLSsg IG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50NjRDaGVjayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBl OjpEb3VibGUsIGZsYWdzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl am9pbiwgdHJhcFNpdGVEZXNjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29t cGF0OjpvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDMyQ2hlY2soCi0rICAgIEZsb2F0UmVnaXN0 ZXIgaW5wdXQsIFJlZ2lzdGVyIG91dHB1dCwgTUlSVHlwZSBmcm9tVHlwZSwgVHJ1bmNGbGFncyBm bGFncywKLSsgICAgTGFiZWwqIHJlam9pbiwgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFw U2l0ZURlc2MpIHsKLSsgIGJvb2wgaXNVbnNpZ25lZCA9IGZsYWdzICYgVFJVTkNfVU5TSUdORUQ7 Ci0rICBib29sIGlzU2F0dXJhdGluZyA9IGZsYWdzICYgVFJVTkNfU0FUVVJBVElORzsKLSsKLSsg IGlmIChpc1NhdHVyYXRpbmcpIHsKLSsgICAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChh c01hc20oKSk7Ci0rICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAg ICBhc01hc20oKS5sb2FkQ29uc3RhbnREb3VibGUoMC4wLCBmcHNjcmF0Y2gpOwotKyAgICB9IGVs c2UgewotKyAgICAgIGFzTWFzbSgpLmxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwgZnBzY3JhdGNo KTsKLSsgICAgfQotKwotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIC8vIElmIGlucHV0 IDwgMCBvciBOYU4sIG91dHB1dCA9IDA7IGVsc2Ugb3V0cHV0ID0gVUlOVDMyX01BWC4KLSsgICAg ICBMYWJlbCBub3ROZWdPck5hTjsKLSsgICAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91 YmxlKSB7Ci0rICAgICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVH cmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZwc2NyYXRjaCwgJm5vdE5lZ09yTmFOKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNN YXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlu cHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCAmbm90TmVnT3JO YU4pOwotKyAgICAgIH0KLSsgICAgICBhc01hc20oKS5tb3ZlMzIoSW1tMzIoMCksIG91dHB1dCk7 Ci0rICAgICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOwotKyAgICAgIGFzTWFzbSgpLmJpbmQoJm5v dE5lZ09yTmFOKTsKLSsgICAgICBhc01hc20oKS5tb3ZlMzIoSW1tMzIoVUlOVDMyX01BWCksIG91 dHB1dCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgLy8gU2lnbmVkOiBOYU4gLT4gMCwgbmVnYXRp dmUgb3ZlcmZsb3cgLT4gSU5UMzJfTUlOLAotKyAgICAgIC8vIHBvc2l0aXZlIG92ZXJmbG93IGFs cmVhZHkgc2F0dXJhdGVkIHRvIElOVDMyX01BWC4KLSsgICAgICBMYWJlbCBub3ROYU4sIGRvbmU7 Ci0rICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgICAgYXNN YXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0 LCAmbm90TmFOKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRmxv YXQoQXNzZW1ibGVyOjpEb3VibGVPcmRlcmVkLCBpbnB1dCwgaW5wdXQsICZub3ROYU4pOwotKyAg ICAgIH0KLSsgICAgICBhc01hc20oKS5tb3ZlMzIoSW1tMzIoMCksIG91dHB1dCk7Ci0rICAgICAg YXNNYXNtKCkuanVtcChyZWpvaW4pOwotKwotKyAgICAgIGFzTWFzbSgpLmJpbmQoJm5vdE5hTik7 Ci0rICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgICAgYXNN YXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBp bnB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsIHJlam9pbik7 Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxl cjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZwc2NyYXRjaCwgcmVqb2luKTsKLSsgICAgICB9Ci0rICAgICAgYXNNYXNtKCku bW92ZTMyKEltbTMyKElOVDMyX01JTiksIG91dHB1dCk7Ci0rICAgIH0KLSsKLSsgICAgTU9aX0FT U0VSVChyZWpvaW4tPmJvdW5kKCkpOwotKyAgICBhc01hc20oKS5qdW1wKHJlam9pbik7Ci0rICAg IHJldHVybjsKLSsgIH0KLSsKLSsgIExhYmVsIGlucHV0SXNOYU47Ci0rICBpZiAoZnJvbVR5cGUg PT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgIGFzTWFzbSgpLmJyYW5jaERvdWJsZShBc3NlbWJs ZXI6OkRvdWJsZVVub3JkZXJlZCwgaW5wdXQsIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgJmlucHV0SXNOYU4pOwotKyAgfSBlbHNlIHsKLSsgICAgYXNNYXNtKCkuYnJhbmNoRmxv YXQoQXNzZW1ibGVyOjpEb3VibGVVbm9yZGVyZWQsIGlucHV0LCBpbnB1dCwgJmlucHV0SXNOYU4p OwotKyAgfQotKwotKyAgYXNNYXNtKCkud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlck92ZXJm bG93LCB0cmFwU2l0ZURlc2MpOwotKyAgYXNNYXNtKCkuYmluZCgmaW5wdXRJc05hTik7Ci0rICBh c01hc20oKS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnZhbGlkQ29udmVyc2lvblRvSW50ZWdlciwg dHJhcFNpdGVEZXNjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpv dXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2soCi0rICAgIEZsb2F0UmVnaXN0ZXIgaW5w dXQsIFJlZ2lzdGVyNjQgb3V0cHV0XywgTUlSVHlwZSBmcm9tVHlwZSwgVHJ1bmNGbGFncyBmbGFn cywKLSsgICAgTGFiZWwqIHJlam9pbiwgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0 ZURlc2MpIHsKLSsgIGJvb2wgaXNVbnNpZ25lZCA9IGZsYWdzICYgVFJVTkNfVU5TSUdORUQ7Ci0r ICBib29sIGlzU2F0dXJhdGluZyA9IGZsYWdzICYgVFJVTkNfU0FUVVJBVElORzsKLSsKLSsgIGlm IChpc1NhdHVyYXRpbmcpIHsKLSsgICAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01h c20oKSk7Ci0rICAgIFJlZ2lzdGVyIG91dHB1dCA9IG91dHB1dF8ucmVnOwotKwotKyAgICBpZiAo ZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgICAgYXNNYXNtKCkubG9hZENvbnN0 YW50RG91YmxlKDAuMCwgZnBzY3JhdGNoKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc01hc20o KS5sb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIGZwc2NyYXRjaCk7Ci0rICAgIH0KLSsKLSsgICAg aWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBMYWJlbCBub3ROZWdPck5hTjsKLSsgICAgICBpZiAo ZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgICAgICBhc01hc20oKS5icmFuY2hE b3VibGUoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgJm5vdE5lZ09yTmFOKTsKLSsgICAg ICB9IGVsc2UgewotKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3Vi bGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnBzY3JhdGNoLCAmbm90TmVnT3JOYU4pOwotKyAgICAgIH0KLSsgICAgICBhc01hc20oKS5t b3ZlUHRyKEltbVdvcmQoMCksIG91dHB1dCk7Ci0rICAgICAgYXNNYXNtKCkuanVtcChyZWpvaW4p OwotKyAgICAgIGFzTWFzbSgpLmJpbmQoJm5vdE5lZ09yTmFOKTsKLSsgICAgICBhc01hc20oKS5t b3ZlUHRyKEltbVdvcmQoVUlOVDY0X01BWCksIG91dHB1dCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgTGFiZWwgbm90TmFOOwotKyAgICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUp IHsKLSsgICAgICAgIGFzTWFzbSgpLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZU9yZGVy ZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5hTik7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGFz TWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0 LCAmbm90TmFOKTsKLSsgICAgICB9Ci0rICAgICAgYXNNYXNtKCkubW92ZVB0cihJbW1Xb3JkKDAp LCBvdXRwdXQpOwotKyAgICAgIGFzTWFzbSgpLmp1bXAocmVqb2luKTsKLSsKLSsgICAgICBhc01h c20oKS5iaW5kKCZub3ROYU4pOwotKyAgICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3Vi bGUpIHsKLSsgICAgICAgIGFzTWFzbSgpLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZUdy ZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnBzY3JhdGNoLCByZWpvaW4pOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBhc01hc20oKS5i cmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsIHJlam9pbik7Ci0rICAgICAg fQotKyAgICAgIGFzTWFzbSgpLm1vdmVQdHIoSW1tV29yZChJTlQ2NF9NSU4pLCBvdXRwdXQpOwot KyAgICB9Ci0rCi0rICAgIE1PWl9BU1NFUlQocmVqb2luLT5ib3VuZCgpKTsKLSsgICAgYXNNYXNt KCkuanVtcChyZWpvaW4pOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBMYWJlbCBpbnB1dElz TmFOOwotKyAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICBhc01hc20o KS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVVbm9yZGVyZWQsIGlucHV0LCBpbnB1dCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dElzTmFOKTsKLSsgIH0gZWxzZSB7Ci0r ICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCBpbnB1 dCwgaW5wdXQsICZpbnB1dElzTmFOKTsKLSsgIH0KLSsKLSsgIGFzTWFzbSgpLndhc21UcmFwKHdh c206OlRyYXA6OkludGVnZXJPdmVyZmxvdywgdHJhcFNpdGVEZXNjKTsKLSsgIGFzTWFzbSgpLmJp bmQoJmlucHV0SXNOYU4pOwotKyAgYXNNYXNtKCkud2FzbVRyYXAod2FzbTo6VHJhcDo6SW52YWxp ZENvbnZlcnNpb25Ub0ludGVnZXIsIHRyYXBTaXRlRGVzYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OlBvcFN0YWNrUHRyKCkgewotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRl ciwgMCksIFN0YWNrUG9pbnRlcik7Ci0rICBhZGp1c3RGcmFtZSgtaW50MzJfdChzaXplb2YoaW50 cHRyX3QpKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoU3ViMzJGcm9tTWVt QW5kQnJhbmNoSWZOZWdhdGl2ZShDb2RlT2Zmc2V0IG9mZnNldCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgaW1tKSB7Ci0r ICBpbnQzMl90IHZhbCA9IGltbS52YWx1ZTsKLSsgIE1PWl9SRUxFQVNFX0FTU0VSVCh2YWwgPj0g MSAmJiB2YWwgPD0gMTI3KTsKLSsgIC8vIFBhdGNoIHRoZSBhZGRpIGluc3RydWN0aW9uIHRoYXQn cyByaWdodCBiZWZvcmUgcGF0Y2hQb2ludC4KLSsgIC8vIGFkZGkgaXMgMSBpbnN0cnVjdGlvbiBi ZWZvcmUgdGhlIENvZGVPZmZzZXQgKHdoaWNoIGlzIGFmdGVyIHRoZSBhZGRpKS4KLSsgIEluc3Ry dWN0aW9uKiBpbnN0ID0KLSsgICAgICAoSW5zdHJ1Y3Rpb24qKW1fYnVmZmVyLmdldEluc3QoQnVm ZmVyT2Zmc2V0KG9mZnNldC5vZmZzZXQoKSAtIDQpKTsKLSsgIC8vIFJld3JpdGUgdGhlIGltbWVk aWF0ZSBmaWVsZCB0byAtdmFsLgotKyAgLy8gUFBDIGFkZGk6IG9wY29kZSg2KSB8IFJUKDUpIHwg UkEoNSkgfCBTSSgxNikKLSsgIHVpbnQzMl90IGluc3RXb3JkID0gaW5zdC0+ZW5jb2RlKCk7Ci0r ICB1aW50MzJfdCBiYXNlID0gaW5zdFdvcmQgJiAweGZmZmYwMDAwOwotKyAgaW5zdC0+c2V0RGF0 YShiYXNlIHwgKHVpbnQxNl90KSgtdmFsICYgMHhmZmZmKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBpbnB1dCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG91dHB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgaXNTYXR1cmF0aW5nLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIG9vbEVudHJ5KSB7Ci0rICBTY3JhdGNoRG91YmxlU2NvcGUgZnBz Y3JhdGNoKGFzTWFzbSgpKTsKLSsgIC8vIENsZWFyIFZYQ1ZJIChiaXQgMjMpIGJlZm9yZSB0aGUg Y29udmVyc2lvbiBzbyB3ZSBjYW4gZGV0ZWN0IG92ZXJmbG93LgotKyAgYXNfbXRmc2IwKDIzKTsK LSsgIGFzX2ZjdGl3eihmcHNjcmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQsIGZw c2NyYXRjaCk7Ci0rICBhc19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rICAvLyBNb3ZlIEZQU0NS IGZpZWxkIDUgKHdoaWNoIGNvbnRhaW5zIFZYQ1ZJKSB0byBDUjAuCi0rICAvLyBJZiB0aGUgY29u dmVyc2lvbiB3YXMgaW52YWxpZCAoTmFOIG9yIG91dC1vZi1yYW5nZSksIFZYQ1ZJPTEg4oaSIFNP IHNldC4KLSsgIGFzX21jcmZzKGNyMCwgNSk7Ci0rICBtYV9iKFNPQml0LCBvb2xFbnRyeSk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRvVUludDMyKEZs b2F0UmVnaXN0ZXIgaW5wdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1cmF0aW5nLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xFbnRyeSkgewotKyAg U2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgLy8gQWx3YXlzIGNoZWNrIGZvciBOYU4g4oCUIHRoZSBvb2wgaGFuZGxl ciBjbGFtcHMgZm9yIHNhdHVyYXRpbmcgbW9kZS4KLSsgIGFzX2ZjbXB1KGlucHV0LCBpbnB1dCk7 Ci0rICBtYV9iKERvdWJsZVVub3JkZXJlZCwgb29sRW50cnkpOwotKyAgYXNfZmN0aWR6KGZwc2Ny YXRjaCwgaW5wdXQpOwotKyAgYXNfbWZ2c3JkKG91dHB1dCwgZnBzY3JhdGNoKTsKLSsgIHhfc3Jk aShzY3JhdGNoLCBvdXRwdXQsIDMyKTsKLSsgIGFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKLSsg IGFzX2NtcGRpKHNjcmF0Y2gsIDApOwotKyAgbWFfYihOb3RFcXVhbCwgb29sRW50cnkpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMyVG9JbnQzMihGbG9h dFJlZ2lzdGVyIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb29sRW50cnkpIHsKLSsgIFNj cmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgYXNfbXRmc2IwKDIzKTsK LSsgIGFzX2ZjdGl3eihmcHNjcmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQsIGZw c2NyYXRjaCk7Ci0rICBhc19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rICBhc19tY3JmcyhjcjAs IDUpOwotKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMyVG9VSW50MzIoRmxvYXRSZWdpc3RlciBpbnB1dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg b3V0cHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIGlzU2F0dXJhdGluZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIG9vbEVudHJ5KSB7Ci0rICBTY3JhdGNoRG91YmxlU2NvcGUg ZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19m Y21wdShpbnB1dCwgaW5wdXQpOwotKyAgbWFfYihEb3VibGVVbm9yZGVyZWQsIG9vbEVudHJ5KTsK LSsgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQsIGZw c2NyYXRjaCk7Ci0rICB4X3NyZGkoc2NyYXRjaCwgb3V0cHV0LCAzMik7Ci0rICBhc19leHRzdyhv dXRwdXQsIG91dHB1dCk7Ci0rICBhc19jbXBkaShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoTm90RXF1 YWwsIG9vbEVudHJ5KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRl RG91YmxlVG9JbnQ2NCgKLSsgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRw dXQsIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCi0rICAgIExhYmVsKiBvb2xS ZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkgewotKyAgTU9aX0FTU0VSVCh0ZW1wRG91 YmxlLmlzSW52YWxpZCgpKTsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNt KCkpOwotKyAgYXNfbXRmc2IwKDIzKTsKLSsgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGlucHV0KTsK LSsgIGFzX21mdnNyZChvdXRwdXQucmVnLCBmcHNjcmF0Y2gpOwotKyAgYXNfbWNyZnMoY3IwLCA1 KTsKLSsgIG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKLSsgIGlmIChpc1NhdHVyYXRpbmcpIHsKLSsg ICAgYmluZChvb2xSZWpvaW4pOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3 YXNtVHJ1bmNhdGVGbG9hdDMyVG9JbnQ2NCgKLSsgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVn aXN0ZXI2NCBvdXRwdXQsIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCi0rICAg IExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcEZsb2F0KSB7Ci0rICBNT1pfQVNT RVJUKHRlbXBGbG9hdC5pc0ludmFsaWQoKSk7Ci0rICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3Jh dGNoKGFzTWFzbSgpKTsKLSsgIGFzX210ZnNiMCgyMyk7Ci0rICBhc19mY3RpZHooZnBzY3JhdGNo LCBpbnB1dCk7Ci0rICBhc19tZnZzcmQob3V0cHV0LnJlZywgZnBzY3JhdGNoKTsKLSsgIGFzX21j cmZzKGNyMCwgNSk7Ci0rICBtYV9iKFNPQml0LCBvb2xFbnRyeSk7Ci0rICBpZiAoaXNTYXR1cmF0 aW5nKSB7Ci0rICAgIGJpbmQob29sUmVqb2luKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6d2FzbVRydW5jYXRlRG91YmxlVG9VSW50NjQoCi0rICAgIEZsb2F0UmVnaXN0ZXIg aW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVu dHJ5LAotKyAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpIHsK LSsgIE1PWl9BU1NFUlQodGVtcERvdWJsZS5pc0ludmFsaWQoKSk7Ci0rICBTY3JhdGNoRG91Ymxl U2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIGFzX210ZnNiMCgyMyk7Ci0rICBhc19mY3Rp ZHV6KGZwc2NyYXRjaCwgaW5wdXQpOwotKyAgYXNfbWZ2c3JkKG91dHB1dC5yZWcsIGZwc2NyYXRj aCk7Ci0rICBhc19tY3JmcyhjcjAsIDUpOwotKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwotKyAg aWYgKGlzU2F0dXJhdGluZykgewotKyAgICBiaW5kKG9vbFJlam9pbik7Ci0rICB9Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0ZUZsb2F0MzJUb1VJbnQ2NCgKLSsgICAg RmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIGJvb2wgaXNTYXR1cmF0aW5n LCBMYWJlbCogb29sRW50cnksCi0rICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIg dGVtcEZsb2F0KSB7Ci0rICBNT1pfQVNTRVJUKHRlbXBGbG9hdC5pc0ludmFsaWQoKSk7Ci0rICBT Y3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIGFzX210ZnNiMCgyMyk7 Ci0rICBhc19mY3RpZHV6KGZwc2NyYXRjaCwgaW5wdXQpOwotKyAgYXNfbWZ2c3JkKG91dHB1dC5y ZWcsIGZwc2NyYXRjaCk7Ci0rICBhc19tY3JmcyhjcjAsIDUpOwotKyAgbWFfYihTT0JpdCwgb29s RW50cnkpOwotKyAgaWYgKGlzU2F0dXJhdGluZykgewotKyAgICBiaW5kKG9vbFJlam9pbik7Ci0r ICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6cHJvZmlsZXJFbnRl ckZyYW1lKFJlZ2lzdGVyIGZyYW1lUHRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgIGFzTWFzbSgpLmxv YWRKU0NvbnRleHQoc2NyYXRjaCk7Ci0rICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgb2Zmc2V0 b2YoSlNDb250ZXh0LCBwcm9maWxpbmdBY3RpdmF0aW9uXykpLCBzY3JhdGNoKTsKLSsgIHN0b3Jl UHRyKGZyYW1lUHRyLAotKyAgICAgICAgICAgQWRkcmVzcyhzY3JhdGNoLCBKaXRBY3RpdmF0aW9u OjpvZmZzZXRPZkxhc3RQcm9maWxpbmdGcmFtZSgpKSk7Ci0rICBzdG9yZVB0cihJbW1QdHIobnVs bHB0ciksCi0rICAgICAgICAgICBBZGRyZXNzKHNjcmF0Y2gsIEppdEFjdGl2YXRpb246Om9mZnNl dE9mTGFzdFByb2ZpbGluZ0NhbGxTaXRlKCkpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl clBQQzY0Q29tcGF0Ojpwcm9maWxlckV4aXRGcmFtZSgpIHsKLSsgIGp1bXAoYXNNYXNtKCkucnVu dGltZSgpLT5qaXRSdW50aW1lKCktPmdldFByb2ZpbGVyRXhpdEZyYW1lVGFpbCgpKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjptYV9tb2RfbWFzayhSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBob2xkLCBSZWdpc3RlciByZW1haW4sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNoaWZ0LCBMYWJlbCogbmVnWmVy bykgewotKyAgLy8gQ29tcHV0ZSB4ICUgKCgxPDxzaGlmdCkgLSAxKSBieSBkaWdpdC1zdW1taW5n IGluIGJhc2UgYiA9IDE8PHNoaWZ0LgotKyAgLy8gU2luY2UgYiAlIChiLTEpID09IDEsIHggJSAo Yi0xKSA9PSBzdW0gb2YgYmFzZS1iIGRpZ2l0cyBvZiB4LCBtb2QgKGItMSkuCi0rICBpbnQzMl90 IG1hc2sgPSAoMSA8PCBzaGlmdCkgLSAxOwotKyAgTGFiZWwgaGVhZCwgbmVnYXRpdmUsIHN1bVNp Z25lZCwgZG9uZTsKLSsKLSsgIGFzX29yXyhyZW1haW4sIHNyYywgc3JjKTsgIC8vIG1vdmUgc3Jj IC0+IHJlbWFpbgotKyAgeHNfbGkoZGVzdCwgMCk7Ci0rCi0rICAvLyBDaGVjayBzaWduICgzMi1i aXQgc2lnbmVkIGNvbXBhcmlzb24pCi0rICBhc19jbXB3aShyZW1haW4sIDApOwotKyAgbWFfYihB c3NlbWJsZXI6Okxlc3NUaGFuLCAmbmVnYXRpdmUpOwotKyAgeHNfbGkoaG9sZCwgMSk7Ci0rICBq dW1wKCZoZWFkKTsKLSsKLSsgIGJpbmQoJm5lZ2F0aXZlKTsKLSsgIHhzX2xpKGhvbGQsIC0xKTsK LSsgIGFzX25lZyhyZW1haW4sIHJlbWFpbik7Ci0rICBhc19ybGRpY2wocmVtYWluLCByZW1haW4s IDAsIDMyKTsKLSsKLSsgIGJpbmQoJmhlYWQpOwotKyAgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rCi0rICAgIC8vIEV4dHJhY3QgYm90dG9tICdzaGlmdCcgYml0czogc2NyYXRj aCA9IHJlbWFpbiAmIG1hc2sKLSsgICAgbW92ZTMyKEltbTMyKG1hc2spLCBzY3JhdGNoKTsKLSsg ICAgYXNfYW5kXyhzY3JhdGNoLCByZW1haW4sIHNjcmF0Y2gpOwotKwotKyAgICAvLyBBZGQgdG8g YWNjdW11bGF0b3IKLSsgICAgYXNfYWRkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwotKwotKyAgICAv LyBUcmlhbCBzdWJ0cmFjdGlvbjogc2NyYXRjaCA9IGRlc3QgLSBtYXNrCi0rICAgIG1vdmUzMihJ bW0zMihtYXNrKSwgc2NyYXRjaCk7Ci0rICAgIGFzX3N1YmYoc2NyYXRjaCwgc2NyYXRjaCwgZGVz dCk7ICAvLyBzY3JhdGNoID0gZGVzdCAtIHNjcmF0Y2gKLSsKLSsgICAgLy8gSWYgKGRlc3QgLSBt YXNrKSA+IDAsIGtlZXAgdGhlIHN1YnRyYWN0ZWQgdmFsdWUKLSsgICAgYXNfY21wd2koc2NyYXRj aCwgMCk7Ci0rICAgIG1hX2IoQXNzZW1ibGVyOjpMZXNzVGhhbiwgJnN1bVNpZ25lZCk7Ci0rICAg IGFzX29yXyhkZXN0LCBzY3JhdGNoLCBzY3JhdGNoKTsgIC8vIGRlc3QgPSBzY3JhdGNoCi0rICAg IGJpbmQoJnN1bVNpZ25lZCk7Ci0rCi0rICAgIC8vIFNoaWZ0IG91dCB0aGUgYml0cyB3ZSBqdXN0 IHByb2Nlc3NlZAotKyAgICB4X3Nyd2kocmVtYWluLCByZW1haW4sIHNoaWZ0KTsKLSsKLSsgICAg Ly8gQ29udGludWUgaWYgcmVtYWluICE9IDAKLSsgICAgYXNfY21wd2kocmVtYWluLCAwKTsKLSsg ICAgbWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmaGVhZCk7Ci0rICB9Ci0rCi0rICAvLyBJZiBp bnB1dCB3YXMgbmVnYXRpdmUsIG5lZ2F0ZSByZXN1bHQKLSsgIGFzX2NtcHdpKGhvbGQsIDApOwot KyAgbWFfYihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgJmRvbmUpOwotKwotKyAgaWYg KG5lZ1plcm8gIT0gbnVsbHB0cikgewotKyAgICBhc19jbXB3aShkZXN0LCAwKTsKLSsgICAgbWFf YihBc3NlbWJsZXI6OkVxdWFsLCBuZWdaZXJvKTsKLSsgIH0KLSsKLSsgIGFzX25lZyhkZXN0LCBk ZXN0KTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKwotKyAgYmluZCgmZG9uZSk7Ci0rfQot KwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKy8vIEF0b21pYyBvcGVyYXRpb25zLgotKwotK3RlbXBs YXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIENvbXBhcmVFeGNoYW5nZShNYWNyb0Fzc2Vt YmxlciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyogYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2Fs YXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIgb2xkdmFsLCBSZWdpc3RlciBuZXd2YWws Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0 ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFz a1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMobWFzbSk7Ci0rICBib29sIHNpZ25FeHRlbmQgPSBTY2FsYXI6OmlzU2lnbmVkSW50VHlwZSh0 eXBlKTsKLSsgIHVuc2lnbmVkIG5ieXRlcyA9IFNjYWxhcjo6Ynl0ZVNpemUodHlwZSk7Ci0rCi0r ICBzd2l0Y2ggKG5ieXRlcykgewotKyAgICBjYXNlIDE6Ci0rICAgIGNhc2UgMjoKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSA0OgotKyAgICAgIE1PWl9BU1NFUlQodmFsdWVUZW1wID09IEludmFs aWRSZWcpOwotKyAgICAgIE1PWl9BU1NFUlQob2Zmc2V0VGVtcCA9PSBJbnZhbGlkUmVnKTsKLSsg ICAgICBNT1pfQVNTRVJUKG1hc2tUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIGJyZWFrOwot KyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKwotKyAgTGFiZWwgYWdh aW4sIGVuZDsKLSsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBt YXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7Ci0rCi0rICBpZiAobmJ5 dGVzID09IDQpIHsKLSsgICAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOwotKyAgICBt YXNtLmJpbmQoJmFnYWluKTsKLSsKLSsgICAgaWYgKGFjY2VzcykgewotKyAgICAgIG1hc20uZmx1 c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAgICAgIG1hc20u YXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAg ICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwotKyAg ICB9Ci0rCi0rICAgIG1hc20uYXNfbHdhcngob3V0cHV0LCByMCwgc2NyYXRjaCk7Ci0rICAgIC8v IG1hX2NtcCguLi4sIGlzMzJiaXQ9dHJ1ZSkgZW1pdHMgY21wdywgd2hpY2ggY29tcGFyZXMgb25s eSBiaXRzCi0rICAgIC8vIDMyOjYzIChsb3cgMzIpIG9mIGJvdGggb3BlcmFuZHMgcGVyIElTQSB2 My4wQi4gVGhlIHVwcGVyCi0rICAgIC8vIDMyIGJpdHMgb2Ygb2xkdmFsIGFyZSBpZ25vcmVkLCBz byBubyBjYW5vbmljYWxpc2luZyBleHRzdyBuZWVkZWQuCi0rICAgIG1hc20ubWFfY21wKG91dHB1 dCwgb2xkdmFsLCBBc3NlbWJsZXI6Ok5vdEVxdWFsLCAvKiBpczMyYml0ICovIHRydWUpOwotKyAg ICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmVuZCk7Ci0rICAgIG1hc20uYXNfc3R3 Y3gobmV3dmFsLCByMCwgc2NyYXRjaCk7Ci0rICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVx dWFsLCAmYWdhaW4pOwotKwotKyAgICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKLSsg ICAgbWFzbS5iaW5kKCZlbmQpOwotKyAgICAvLyBsd2FyeCB6ZXJvLWV4dGVuZHM7IHNpZ24tZXh0 ZW5kIGZvciAzMi1iaXQgY2Fub25pY2FsIGZvcm0uCi0rICAgIG1hc20uYXNfZXh0c3cob3V0cHV0 LCBvdXRwdXQpOwotKwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBTdWItd29yZCAoMSBv ciAyIGJ5dGUpIGNvbXBhcmUtZXhjaGFuZ2UgdmlhIG5hdGl2ZSBsYmFyeC9saGFyeCArCi0rICAv LyBzdGJjeC4vc3RoY3guIFBPV0VSNysgKHdlbGwgYmVsb3cgb3VyIFBPV0VSOCBiYXNlbGluZSku IFJlcGxhY2VzIHRoZSBwcmlvcgotKyAgLy8gcm91bmQtZG93bi10by13b3JkCi0rICAvLyArIG1h c2sgKyBSTVcgZGFuY2UuIGxYYXJ4IHplcm8tZXh0ZW5kcyB0aGUgbG9hZGVkIGJ5dGUvaGFsZjsg c3RYY3guIHN0b3JlcwotKyAgLy8gb25seSB0aGUgbG93IDgvMTYgYml0cyBvZiBSUywgc28gbm8g cHJlLW1hc2tpbmcgaXMgbmVlZGVkIG9uIHRoZSBzdG9yZQotKyAgLy8gc2lkZS4gb2Zmc2V0VGVt cCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkgdGhlIGxvd2VyaW5nIGJ1dCB1bnVz ZWQKLSsgIC8vIGhlcmUuCi0rICAodm9pZClvZmZzZXRUZW1wOwotKyAgKHZvaWQpbWFza1RlbXA7 Ci0rCi0rICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rCi0rICBtYXNtLmJpbmQo JmFnYWluKTsKLSsKLSsgIGlmIChhY2Nlc3MpIHsKLSsgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAg Ly8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgIG1hc20uYXBwZW5kKCphY2Nlc3Ms IHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAgICAgICAgICBGYXVsdGlu Z0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAo bmJ5dGVzKSB7Ci0rICAgIGNhc2UgMToKLSsgICAgICBtYXNtLmFzX2xiYXJ4KG91dHB1dCwgcjAs IHNjcmF0Y2gpOwotKyAgICAgIGlmIChzaWduRXh0ZW5kKSB7Ci0rICAgICAgICBtYXNtLmFzX2V4 dHNiKHZhbHVlVGVtcCwgb2xkdmFsKTsKLSsgICAgICAgIG1hc20uYXNfZXh0c2Iob3V0cHV0LCBv dXRwdXQpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBtYXNtLmFzX2FuZGlfcmModmFsdWVU ZW1wLCBvbGR2YWwsIDB4ZmYpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAy OgotKyAgICAgIG1hc20uYXNfbGhhcngob3V0cHV0LCByMCwgc2NyYXRjaCk7Ci0rICAgICAgaWYg KHNpZ25FeHRlbmQpIHsKLSsgICAgICAgIG1hc20uYXNfZXh0c2godmFsdWVUZW1wLCBvbGR2YWwp OwotKyAgICAgICAgbWFzbS5hc19leHRzaChvdXRwdXQsIG91dHB1dCk7Ci0rICAgICAgfSBlbHNl IHsKLSsgICAgICAgIG1hc20uYXNfcmx3aW5tKHZhbHVlVGVtcCwgb2xkdmFsLCAwLCAxNiwgMzEp OwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgIH0KLSsKLSsgIG1hc20ubWFfY21wKG91dHB1 dCwgdmFsdWVUZW1wLCBBc3NlbWJsZXI6Ok5vdEVxdWFsLCAvKiBpczMyYml0ICovIHRydWUpOwot KyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZlbmQpOwotKwotKyAgaWYgKG5ieXRl cyA9PSAxKSB7Ci0rICAgIG1hc20uYXNfc3RiY3gobmV3dmFsLCByMCwgc2NyYXRjaCk7Ci0rICB9 IGVsc2UgewotKyAgICBtYXNtLmFzX3N0aGN4KG5ld3ZhbCwgcjAsIHNjcmF0Y2gpOwotKyAgfQot KyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7Ci0rCi0rICBtYXNtLm1l bW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKLSsKLSsgIG1hc20uYmluZCgmZW5kKTsKLSt9Ci0rCi0r dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rc3RhdGljIHZvaWQgQ29tcGFyZUV4Y2hhbmdlNjQoTWFj cm9Bc3NlbWJsZXImIG1hc20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg d2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBUJiBtZW0sCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBleHBlY3QsIFJlZ2lzdGVyNjQgcmVwbGFjZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAg TU9aX0FTU0VSVChleHBlY3QgIT0gb3V0cHV0ICYmIHJlcGxhY2UgIT0gb3V0cHV0KTsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBz Y3JhdGNoKTsKLSsKLSsgIExhYmVsIHRyeUFnYWluOwotKyAgTGFiZWwgZXhpdDsKLSsKLSsgIG1h c20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsKLSsgIG1hc20uYmluZCgmdHJ5QWdhaW4p OwotKwotKyAgaWYgKGFjY2VzcykgewotKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUg Y29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6 VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9m ZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwotKyAgfQotKwotKyAgbWFzbS5hc19sZGFyeChv dXRwdXQucmVnLCByMCwgc2NyYXRjaCk7Ci0rCi0rICBtYXNtLm1hX2NtcChvdXRwdXQucmVnLCBl eHBlY3QucmVnLCBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsKLSsgIG1hc20ubWFfYihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCAmZXhpdCk7Ci0rICBtYXNtLmFzX3N0ZGN4KHJlcGxhY2UucmVnLCByMCwgc2Ny YXRjaCk7Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJnRyeUFnYWluKTsKLSsK LSsgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotKwotKyAgbWFzbS5iaW5kKCZleGl0 KTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rc3RhdGljIHZvaWQgQXRvbWljRXhj aGFuZ2UoTWFjcm9Bc3NlbWJsZXImIG1hc20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdp c3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zm c2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNt KTsKLSsgIGJvb2wgc2lnbkV4dGVuZCA9IFNjYWxhcjo6aXNTaWduZWRJbnRUeXBlKHR5cGUpOwot KyAgdW5zaWduZWQgbmJ5dGVzID0gU2NhbGFyOjpieXRlU2l6ZSh0eXBlKTsKLSsKLSsgIHN3aXRj aCAobmJ5dGVzKSB7Ci0rICAgIGNhc2UgMToKLSsgICAgY2FzZSAyOgotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIDQ6Ci0rICAgICAgTU9aX0FTU0VSVCh2YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7 Ci0rICAgICAgTU9aX0FTU0VSVChvZmZzZXRUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIE1P Wl9BU1NFUlQobWFza1RlbXAgPT0gSW52YWxpZFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRl ZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCk7Ci0rICB9Ci0rCi0rICBMYWJlbCBhZ2FpbjsKLSsK LSsgIFJlZ2lzdGVyIG1lbVRlbXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtYXNtLmNvbXB1dGVF ZmZlY3RpdmVBZGRyZXNzKG1lbSwgbWVtVGVtcCk7Ci0rCi0rICBpZiAobmJ5dGVzID09IDQpIHsK LSsgICAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOwotKyAgICBtYXNtLmJpbmQoJmFn YWluKTsKLSsKLSsgICAgaWYgKGFjY2VzcykgewotKyAgICAgIG1hc20uZmx1c2hCdWZmZXIoKTsg IC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAgICAgIG1hc20uYXBwZW5kKCphY2Nl c3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAgICAgICAgICAgIEZh dWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwotKyAgICB9Ci0rCi0rICAg IG1hc20uYXNfbHdhcngob3V0cHV0LCByMCwgbWVtVGVtcCk7Ci0rICAgIG1hc20uYXNfc3R3Y3go dmFsdWUsIHIwLCBtZW1UZW1wKTsKLSsgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWws ICZhZ2Fpbik7Ci0rCi0rICAgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotKyAgICAv LyBsd2FyeCB6ZXJvLWV4dGVuZHM7IHNpZ24tZXh0ZW5kIGZvciAzMi1iaXQgY2Fub25pY2FsIGZv cm0uCi0rICAgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwotKwotKyAgICByZXR1cm47 Ci0rICB9Ci0rCi0rICAvLyBTdWItd29yZCBleGNoYW5nZSB2aWEgbmF0aXZlIGxiYXJ4L2xoYXJ4 ICsgc3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCi0rICAvLyB2YWx1ZVRlbXAgLyBvZmZzZXRUZW1w IC8gbWFza1RlbXAgYXJlIHN0aWxsIGFsbG9jYXRlZCBieSB0aGUgbG93ZXJpbmcgYnV0Ci0rICAv LyB1bnVzZWQgaGVyZS4KLSsgICh2b2lkKXZhbHVlVGVtcDsKLSsgICh2b2lkKW9mZnNldFRlbXA7 Ci0rICAodm9pZCltYXNrVGVtcDsKLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5j KTsKLSsKLSsgIG1hc20uYmluZCgmYWdhaW4pOwotKwotKyAgaWYgKGFjY2VzcykgewotKyAgICBt YXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAg bWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAg ICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwot KyAgfQotKwotKyAgaWYgKG5ieXRlcyA9PSAxKSB7Ci0rICAgIG1hc20uYXNfbGJhcngob3V0cHV0 LCByMCwgbWVtVGVtcCk7Ci0rICAgIG1hc20uYXNfc3RiY3godmFsdWUsIHIwLCBtZW1UZW1wKTsK LSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfbGhhcngob3V0cHV0LCByMCwgbWVtVGVtcCk7Ci0r ICAgIG1hc20uYXNfc3RoY3godmFsdWUsIHIwLCBtZW1UZW1wKTsKLSsgIH0KLSsgIG1hc20ubWFf YihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOwotKwotKyAgaWYgKHNpZ25FeHRlbmQpIHsK LSsgICAgaWYgKG5ieXRlcyA9PSAxKSB7Ci0rICAgICAgbWFzbS5hc19leHRzYihvdXRwdXQsIG91 dHB1dCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS5hc19leHRzaChvdXRwdXQsIG91dHB1 dCk7Ci0rICAgIH0KLSsgIH0KLSsgIC8vIFVuc2lnbmVkOiBsYmFyeC9saGFyeCBhbHJlYWR5IHpl cm8tZXh0ZW5kOyBvdXRwdXQgaXMgY2Fub25pY2FsLgotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVy QWZ0ZXIoc3luYyk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lk IEF0b21pY0V4Y2hhbmdlNjQoTWFjcm9Bc3NlbWJsZXImIG1hc20sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjKiBhY2Nlc3MsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgVCYg bWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVn aXN0ZXI2NCBvdXRwdXQpIHsKLSsgIE1PWl9BU1NFUlQodmFsdWUgIT0gb3V0cHV0KTsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVt LCBzY3JhdGNoKTsKLSsKLSsgIExhYmVsIHRyeUFnYWluOwotKwotKyAgbWFzbS5tZW1vcnlCYXJy aWVyQmVmb3JlKHN5bmMpOwotKwotKyAgbWFzbS5iaW5kKCZ0cnlBZ2Fpbik7Ci0rCi0rICBpZiAo YWNjZXNzKSB7Ci0rICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdh c21Mb2FkSW1wbAotKyAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUlu c246OkF0b21pYywKLSsgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3Vy cmVudE9mZnNldCgpKSk7Ci0rICB9Ci0rCi0rICBtYXNtLmFzX2xkYXJ4KG91dHB1dC5yZWcsIHIw LCBzY3JhdGNoKTsKLSsKLSsgIG1hc20uYXNfc3RkY3godmFsdWUucmVnLCByMCwgc2NyYXRjaCk7 Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJnRyeUFnYWluKTsKLSsKLSsgIG1h c20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KLStzdGF0aWMgdm9pZCBBdG9taWNGZXRjaE9wKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNj ZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNo cm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIGJvb2wgc2lnbkV4dGVuZCA9 IFNjYWxhcjo6aXNTaWduZWRJbnRUeXBlKHR5cGUpOwotKyAgdW5zaWduZWQgbmJ5dGVzID0gU2Nh bGFyOjpieXRlU2l6ZSh0eXBlKTsKLSsKLSsgIHN3aXRjaCAobmJ5dGVzKSB7Ci0rICAgIGNhc2Ug MToKLSsgICAgY2FzZSAyOgotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDQ6Ci0rICAgICAgTU9a X0FTU0VSVCh2YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7Ci0rICAgICAgTU9aX0FTU0VSVChvZmZz ZXRUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIE1PWl9BU1NFUlQobWFza1RlbXAgPT0gSW52 YWxpZFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNI KCk7Ci0rICB9Ci0rCi0rICBMYWJlbCBhZ2FpbjsKLSsKLSsgIFJlZ2lzdGVyIG1lbVRlbXAgPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgbWVt VGVtcCk7Ci0rCi0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAg aWYgKG5ieXRlcyA9PSA0KSB7Ci0rICAgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsK LSsgICAgbWFzbS5iaW5kKCZhZ2Fpbik7Ci0rCi0rICAgIGlmIChhY2Nlc3MpIHsKLSsgICAgICBt YXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAg ICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsg ICAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkp KTsKLSsgICAgfQotKwotKyAgICBtYXNtLmFzX2x3YXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOwot KwotKyAgICBzd2l0Y2ggKG9wKSB7Ci0rICAgICAgY2FzZSBBdG9taWNPcDo6QWRkOgotKyAgICAg ICAgbWFzbS5hc19hZGQoc2NyYXRjaCwgb3V0cHV0LCB2YWx1ZSk7Ci0rICAgICAgICBicmVhazsK LSsgICAgICBjYXNlIEF0b21pY09wOjpTdWI6Ci0rICAgICAgICBtYXNtLmFzX3N1YmYoc2NyYXRj aCwgdmFsdWUsIG91dHB1dCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEF0b21pY09w OjpBbmQ6Ci0rICAgICAgICBtYXNtLmFzX2FuZF8oc2NyYXRjaCwgb3V0cHV0LCB2YWx1ZSk7Ci0r ICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEF0b21pY09wOjpPcjoKLSsgICAgICAgIG1hc20u YXNfb3JfKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg Y2FzZSBBdG9taWNPcDo6WG9yOgotKyAgICAgICAgbWFzbS5hc194b3JfKHNjcmF0Y2gsIG91dHB1 dCwgdmFsdWUpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1P Wl9DUkFTSCgpOwotKyAgICB9Ci0rCi0rICAgIG1hc20uYXNfc3R3Y3goc2NyYXRjaCwgcjAsIG1l bVRlbXApOwotKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKLSsK LSsgICAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7Ci0rICAgIC8vIGx3YXJ4IHplcm8t ZXh0ZW5kczsgc2lnbi1leHRlbmQgZm9yIDMyLWJpdCBjYW5vbmljYWwgZm9ybS4KLSsgICAgbWFz bS5hc19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rCi0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsg IC8vIFN1Yi13b3JkIGZldGNoLWFuZC1vcCB2aWEgbmF0aXZlIGxiYXJ4L2xoYXJ4ICsgc3RiY3gu L3N0aGN4LiAoUE9XRVI3KykuCi0rICAvLyBgb3V0cHV0YCBob2xkcyB0aGUgcHJlLW9wIGxvYWRl ZCB2YWx1ZSAocmV0dXJuZWQgdG8gY2FsbGVyKTsgYHZhbHVlVGVtcGAKLSsgIC8vIGlzIHRoZSBw b3N0LW9wIHZhbHVlIHdlIGNvbmRpdGlvbi1zdG9yZS4gc3RYY3guIG9ubHkgc3RvcmVzIGxvdyA4 LzE2IGJpdHMKLSsgIC8vIG9mIFJTLCBzbyBubyBwcmUtbWFzayBvZiB2YWx1ZVRlbXAgaXMgbmVl ZGVkLgotKyAgLy8gb2Zmc2V0VGVtcCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkg dGhlIGxvd2VyaW5nIGJ1dCB1bnVzZWQ7IHRoZQotKyAgLy8gbG9jYWwgYHNjcmF0Y2hgIGlzIG9u bHkgdXNlZCBpbiB0aGUgNC1ieXRlIGJyYW5jaCBhYm92ZS4KLSsgICh2b2lkKW9mZnNldFRlbXA7 Ci0rICAodm9pZCltYXNrVGVtcDsKLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5j KTsKLSsKLSsgIG1hc20uYmluZCgmYWdhaW4pOwotKwotKyAgaWYgKGFjY2VzcykgewotKyAgICBt YXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAg bWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAg ICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwot KyAgfQotKwotKyAgaWYgKG5ieXRlcyA9PSAxKSB7Ci0rICAgIG1hc20uYXNfbGJhcngob3V0cHV0 LCByMCwgbWVtVGVtcCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwg cjAsIG1lbVRlbXApOwotKyAgfQotKwotKyAgc3dpdGNoIChvcCkgewotKyAgICBjYXNlIEF0b21p Y09wOjpBZGQ6Ci0rICAgICAgbWFzbS5hc19hZGQodmFsdWVUZW1wLCBvdXRwdXQsIHZhbHVlKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNPcDo6U3ViOgotKyAgICAgIG1hc20uYXNf c3ViZih2YWx1ZVRlbXAsIHZhbHVlLCBvdXRwdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IEF0b21pY09wOjpBbmQ6Ci0rICAgICAgbWFzbS5hc19hbmRfKHZhbHVlVGVtcCwgb3V0cHV0LCB2 YWx1ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXRvbWljT3A6Ok9yOgotKyAgICAgIG1h c20uYXNfb3JfKHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2UgQXRvbWljT3A6OlhvcjoKLSsgICAgICBtYXNtLmFzX3hvcl8odmFsdWVUZW1wLCBvdXRw dXQsIHZhbHVlKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JB U0goKTsKLSsgIH0KLSsKLSsgIGlmIChuYnl0ZXMgPT0gMSkgewotKyAgICBtYXNtLmFzX3N0YmN4 KHZhbHVlVGVtcCwgcjAsIG1lbVRlbXApOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19zdGhj eCh2YWx1ZVRlbXAsIHIwLCBtZW1UZW1wKTsKLSsgIH0KLSsgIG1hc20ubWFfYihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCAmYWdhaW4pOwotKwotKyAgaWYgKHNpZ25FeHRlbmQpIHsKLSsgICAgaWYgKG5i eXRlcyA9PSAxKSB7Ci0rICAgICAgbWFzbS5hc19leHRzYihvdXRwdXQsIG91dHB1dCk7Ci0rICAg IH0gZWxzZSB7Ci0rICAgICAgbWFzbS5hc19leHRzaChvdXRwdXQsIG91dHB1dCk7Ci0rICAgIH0K LSsgIH0KLSsgIC8vIFVuc2lnbmVkOiBsYmFyeC9saGFyeCBhbHJlYWR5IHplcm8tZXh0ZW5kOyBv dXRwdXQgaXMgY2Fub25pY2FsLgotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7 Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIEF0b21pY0ZldGNo T3A2NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQg dmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0 ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgTU9aX0FTU0VSVCh2YWx1ZSAhPSBv dXRwdXQpOwotKyAgTU9aX0FTU0VSVCh2YWx1ZSAhPSB0ZW1wKTsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBzY3JhdGNoKTsKLSsK LSsgIExhYmVsIHRyeUFnYWluOwotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMp OwotKwotKyAgbWFzbS5iaW5kKCZ0cnlBZ2Fpbik7Ci0rCi0rICBpZiAoYWNjZXNzKSB7Ci0rICAg IG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAg ICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsg ICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7 Ci0rICB9Ci0rCi0rICBtYXNtLmFzX2xkYXJ4KG91dHB1dC5yZWcsIHIwLCBzY3JhdGNoKTsKLSsK LSsgIHN3aXRjaCAob3ApIHsKLSsgICAgY2FzZSBBdG9taWNPcDo6QWRkOgotKyAgICAgIG1hc20u YXNfYWRkKHRlbXAucmVnLCBvdXRwdXQucmVnLCB2YWx1ZS5yZWcpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIEF0b21pY09wOjpTdWI6Ci0rICAgICAgbWFzbS5hc19zdWJmKHRlbXAucmVnLCB2 YWx1ZS5yZWcsIG91dHB1dC5yZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEF0b21pY09w OjpBbmQ6Ci0rICAgICAgbWFzbS5hc19hbmRfKHRlbXAucmVnLCBvdXRwdXQucmVnLCB2YWx1ZS5y ZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEF0b21pY09wOjpPcjoKLSsgICAgICBtYXNt LmFzX29yXyh0ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFsdWUucmVnKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBBdG9taWNPcDo6WG9yOgotKyAgICAgIG1hc20uYXNfeG9yXyh0ZW1wLnJlZywg b3V0cHV0LnJlZywgdmFsdWUucmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsg ICAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsKLSsgIG1hc20uYXNfc3RkY3godGVtcC5yZWcsIHIw LCBzY3JhdGNoKTsKLSsgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmdHJ5QWdhaW4p OwotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7Ci0rfQotKwotK3RlbXBsYXRl IDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIEF0b21pY0VmZmVjdE9wKE1hY3JvQXNzZW1ibGVy JiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFj Y2Vzc0Rlc2MqIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2FsYXI6OlR5 cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZh bHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1w LCBSZWdpc3RlciBtYXNrVGVtcCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo bWFzbSk7Ci0rICB1bnNpZ25lZCBuYnl0ZXMgPSBTY2FsYXI6OmJ5dGVTaXplKHR5cGUpOwotKwot KyAgc3dpdGNoIChuYnl0ZXMpIHsKLSsgICAgY2FzZSAxOgotKyAgICBjYXNlIDI6Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgNDoKLSsgICAgICBNT1pfQVNTRVJUKHZhbHVlVGVtcCA9PSBJbnZh bGlkUmVnKTsKLSsgICAgICBNT1pfQVNTRVJUKG9mZnNldFRlbXAgPT0gSW52YWxpZFJlZyk7Ci0r ICAgICAgTU9aX0FTU0VSVChtYXNrVGVtcCA9PSBJbnZhbGlkUmVnKTsKLSsgICAgICBicmVhazsK LSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsKLSsgIExhYmVsIGFn YWluOwotKwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1hc20u Y29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MobWVtLCBzY3JhdGNoKTsKLSsKLSsgIFJlZ2lzdGVyIHNj cmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgaWYgKG5ieXRlcyA9PSA0KSB7Ci0rICAg IG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsgICAgbWFzbS5iaW5kKCZhZ2Fpbik7 Ci0rCi0rICAgIGlmIChhY2Nlc3MpIHsKLSsgICAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBz ZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3 YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsgICAgICAgICAgICAgICAgICBGYXVsdGlu Z0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgICAgfQotKwotKyAgICBtYXNt LmFzX2x3YXJ4KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7Ci0rCi0rICAgIHN3aXRjaCAob3ApIHsK LSsgICAgICBjYXNlIEF0b21pY09wOjpBZGQ6Ci0rICAgICAgICBtYXNtLmFzX2FkZChzY3JhdGNo Miwgc2NyYXRjaDIsIHZhbHVlKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQXRvbWlj T3A6OlN1YjoKLSsgICAgICAgIG1hc20uYXNfc3ViZihzY3JhdGNoMiwgdmFsdWUsIHNjcmF0Y2gy KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQXRvbWljT3A6OkFuZDoKLSsgICAgICAg IG1hc20uYXNfYW5kXyhzY3JhdGNoMiwgc2NyYXRjaDIsIHZhbHVlKTsKLSsgICAgICAgIGJyZWFr OwotKyAgICAgIGNhc2UgQXRvbWljT3A6Ok9yOgotKyAgICAgICAgbWFzbS5hc19vcl8oc2NyYXRj aDIsIHNjcmF0Y2gyLCB2YWx1ZSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEF0b21p Y09wOjpYb3I6Ci0rICAgICAgICBtYXNtLmFzX3hvcl8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1 ZSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9aX0NSQVNI KCk7Ci0rICAgIH0KLSsKLSsgICAgbWFzbS5hc19zdHdjeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gp OwotKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKLSsKLSsgICAg bWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7Ci0rCi0rICAgIHJldHVybjsKLSsgIH0KLSsK LSsgIC8vIFN1Yi13b3JkIGVmZmVjdC1vbmx5IG9wIHZpYSBuYXRpdmUgbGJhcngvbGhhcnggKyBz dGJjeC4vc3RoY3guIChQT1dFUjcrKS4KLSsgIC8vIE5vIG91dHB1dCB0byByZXR1cm47IHNjcmF0 Y2gyIGhvbGRzIHRoZSBsb2FkK29wK3N0b3JlIHZhbHVlLgotKyAgLy8gdmFsdWVUZW1wIC8gb2Zm c2V0VGVtcCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkgdGhlIGxvd2VyaW5nIGJ1 dAotKyAgLy8gdW51c2VkIGhlcmUuCi0rICAodm9pZCl2YWx1ZVRlbXA7Ci0rICAodm9pZClvZmZz ZXRUZW1wOwotKyAgKHZvaWQpbWFza1RlbXA7Ci0rCi0rICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZv cmUoc3luYyk7Ci0rCi0rICBtYXNtLmJpbmQoJmFnYWluKTsKLSsKLSsgIGlmIChhY2Nlc3MpIHsK LSsgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBs Ci0rICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWlj LAotKyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0 KCkpKTsKLSsgIH0KLSsKLSsgIGlmIChuYnl0ZXMgPT0gMSkgewotKyAgICBtYXNtLmFzX2xiYXJ4 KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX2xoYXJ4 KHNjcmF0Y2gyLCByMCwgc2NyYXRjaCk7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKG9wKSB7Ci0rICAg IGNhc2UgQXRvbWljT3A6OkFkZDoKLSsgICAgICBtYXNtLmFzX2FkZChzY3JhdGNoMiwgc2NyYXRj aDIsIHZhbHVlKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNPcDo6U3ViOgotKyAg ICAgIG1hc20uYXNfc3ViZihzY3JhdGNoMiwgdmFsdWUsIHNjcmF0Y2gyKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBBdG9taWNPcDo6QW5kOgotKyAgICAgIG1hc20uYXNfYW5kXyhzY3JhdGNo Miwgc2NyYXRjaDIsIHZhbHVlKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNPcDo6 T3I6Ci0rICAgICAgbWFzbS5hc19vcl8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgQXRvbWljT3A6OlhvcjoKLSsgICAgICBtYXNtLmFzX3hvcl8o c2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6 Ci0rICAgICAgTU9aX0NSQVNIKCk7Ci0rICB9Ci0rCi0rICBpZiAobmJ5dGVzID09IDEpIHsKLSsg ICAgbWFzbS5hc19zdGJjeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOwotKyAgfSBlbHNlIHsKLSsg ICAgbWFzbS5hc19zdGhjeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOwotKyAgfQotKyAgbWFzbS5t YV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7Ci0rCi0rICBtYXNtLm1lbW9yeUJhcnJp ZXJBZnRlcihzeW5jKTsKLSt9Ci0rCi0rLy8gUHVibGljIE1hY3JvQXNzZW1ibGVyIG1ldGhvZHMu Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0 eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciBvbGR2YWwsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG5ld3ZhbCwgUmVnaXN0ZXIgdmFs dWVUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBv ZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMs IG51bGxwdHIsIHR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsg ICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBT eW5jaHJvbml6YXRpb24gc3luYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbmV3dmFsLCBSZWdpc3RlciB2YWx1ZVRl bXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNl dFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKLSsgIENvbXBhcmVFeGNoYW5nZSgqdGhpcywgbnVs bHB0ciwgdHlwZSwgc3luYywgbWVtLCBvbGR2YWwsIG5ld3ZhbCwgdmFsdWVUZW1wLAotKyAgICAg ICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb24gc3luYywg Y29uc3QgQWRkcmVzcyYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyNjQgZXhwZWN0LCBSZWdpc3RlcjY0IHJlcGxhY2UsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIENvbXBh cmVFeGNoYW5nZTY0KCp0aGlzLCBudWxscHRyLCBzeW5jLCBtZW0sIGV4cGVjdCwgcmVwbGFjZSwg b3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlNjQo U3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgZXhwZWN0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgcmVwbGFjZSwgUmVnaXN0 ZXI2NCBvdXRwdXQpIHsKLSsgIENvbXBhcmVFeGNoYW5nZTY0KCp0aGlzLCBudWxscHRyLCBzeW5j LCBtZW0sIGV4cGVjdCwgcmVwbGFjZSwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBh Y2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB ZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG5ld3ZhbCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKLSsgIENvbXBhcmVFeGNoYW5nZSgqdGhpcywgJmFj Y2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgbWVtLCBvbGR2YWwsCi0rICAgICAg ICAgICAgICAgICAgbmV3dmFsLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRw dXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQ29tcGFyZUV4Y2hhbmdlKGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBvbGR2 YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBu ZXd2YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7 Ci0rICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vz cy5zeW5jKCksIG1lbSwgb2xkdmFsLAotKyAgICAgICAgICAgICAgICAgIG5ld3ZhbCwgdmFsdWVU ZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQWRkcmVzcyYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlcjY0IGV4cGVjdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByZXBsYWNlLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgQ29tcGFyZUV4 Y2hhbmdlNjQoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy5zeW5jKCksIG1lbSwgZXhwZWN0LCByZXBs YWNlLAotKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQmFzZUluZGV4JiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJlcGxhY2UsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBDb21wYXJl RXhjaGFuZ2U2NCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnN5bmMoKSwgbWVtLCBleHBlY3QsIHJl cGxhY2UsCi0rICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0 aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRk cmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVy IG91dHB1dCkgewotKyAgQXRvbWljRXhjaGFuZ2UoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMs IG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgIG1h c2tUZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNo YW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVy IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZh bHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9t aWNFeGNoYW5nZSgqdGhpcywgbnVsbHB0ciwgdHlwZSwgc3luYywgbWVtLCB2YWx1ZSwgdmFsdWVU ZW1wLCBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgbWFza1RlbXAsIG91dHB1dCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0V4Y2hhbmdlNjQoU3luY2hyb25pemF0 aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBB dG9taWNFeGNoYW5nZTY0KCp0aGlzLCBudWxscHRyLCBzeW5jLCBtZW0sIHZhbHVlLCBvdXRwdXQp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZTY0KFN5bmNocm9u aXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgQXRvbWljRXhjaGFu Z2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCB2YWx1ZSwgb3V0cHV0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0V4Y2hhbmdlKGNvbnN0IHdhc206Ok1lbW9y eUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBv ZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNFeGNoYW5nZSgqdGhp cywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgbWVtLCB2YWx1ZSwKLSsg ICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNFeGNoYW5nZShjb25zdCB3 YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1w LCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNF eGNoYW5nZSgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgbWVt LCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1Rl bXAsIG91dHB1dCk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lk IFdhc21BdG9taWNFeGNoYW5nZTY0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vz cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lz dGVyNjQgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCBvdXRwdXQpIHsKLSsgIEF0b21pY0V4Y2hhbmdlNjQobWFzbSwgJmFjY2VzcywgYWNjZXNzLnN5 bmMoKSwgbWVtLCB2YWx1ZSwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 d2FzbUF0b21pY0V4Y2hhbmdlNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJl c3MmIG1lbSwgUmVnaXN0ZXI2NCBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIFdhc21BdG9taWNFeGNoYW5nZTY0 KCp0aGlzLCBhY2Nlc3MsIG1lbSwgc3JjLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp3YXNtQXRvbWljRXhjaGFuZ2U2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNj JiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBXYXNtQXRvbWlj RXhjaGFuZ2U2NCgqdGhpcywgYWNjZXNzLCBtZW0sIHNyYywgb3V0cHV0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcChTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hy b25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9t aWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1h c2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0 cHV0KSB7Ci0rICBBdG9taWNGZXRjaE9wKCp0aGlzLCBudWxscHRyLCB0eXBlLCBzeW5jLCBvcCwg bWVtLCB2YWx1ZSwgdmFsdWVUZW1wLAotKyAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNr VGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hP cChTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVn aXN0ZXIgdmFsdWVUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKLSsgIEF0b21pY0ZldGNoT3AoKnRo aXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG9wLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsCi0rICAg ICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjphdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0 b21pY09wIG9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl cjY0IHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIEF0 b21pY0ZldGNoT3A2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHRlbXAs IG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNoT3A2NChT eW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXAsIFJl Z2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRjaE9wNjQoKnRoaXMsIG51bGxwdHIsIHN5 bmMsIG9wLCB2YWx1ZSwgbWVtLCB0ZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBv cCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFs dWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyNjQgdGVtcCkgewotKyAgQXRvbWljRmV0Y2hPcDY0KCp0aGlzLCBudWxs cHRyLCBzeW5jLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwgdGVtcCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmF0b21pY0VmZmVjdE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21p Y09wIG9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXApIHsKLSsgIEF0b21pY0ZldGNoT3A2NCgqdGhp cywgbnVsbHB0ciwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIHRlbXApOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlB Y2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRl bXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQXRvbWljRmV0Y2hPcCgqdGhpcywgJmFjY2Vz cywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgb3AsIG1lbSwgdmFsdWUsCi0rICAgICAg ICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNGZXRjaE9wKGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVl VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBv ZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKLSsgIEF0b21pY0ZldGNoT3AoKnRoaXMs ICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG9wLCBtZW0sIHZhbHVlLAot KyAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRmV0Y2hPcDY0KGNvbnN0 IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlcjY0IHZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBS ZWdpc3RlcjY0IHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgQXRvbWljRmV0Y2hPcDY0KCp0aGlzLCAmYWNjZXNz LCBhY2Nlc3Muc3luYygpLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0ZldGNoT3A2NChjb25zdCB3YXNtOjpNZW1v cnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0 IHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl cjY0IG91dHB1dCkgewotKyAgQXRvbWljRmV0Y2hPcDY0KCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3Mu c3luYygpLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6d2FzbUF0b21pY0VmZmVjdE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRv bWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1Rl bXApIHsKLSsgIEF0b21pY0VmZmVjdE9wKCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3MudHlwZSgpLCBh Y2Nlc3Muc3luYygpLCBvcCwgbWVtLCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgIHZhbHVlVGVt cCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3 YXNtQXRvbWljRWZmZWN0T3AoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVn aXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEJhc2VJbmRleCYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKSB7Ci0rICBB dG9taWNFZmZlY3RPcCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMo KSwgb3AsIG1lbSwgdmFsdWUsCi0rICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRl bXAsIG1hc2tUZW1wKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gSlMgYXRvbWlj IG9wZXJhdGlvbnMuCi0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rc3RhdGljIHZvaWQgQ29t cGFyZUV4Y2hhbmdlSlMoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFNjYWxhcjo6VHlwZSBhcnJheVR5 cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMs IGNvbnN0IFQmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBv bGR2YWwsIFJlZ2lzdGVyIG5ld3ZhbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBpZiAoYXJy YXlUeXBlID09IFNjYWxhcjo6VWludDMyKSB7Ci0rICAgIG1hc20uY29tcGFyZUV4Y2hhbmdlKGFy cmF5VHlwZSwgc3luYywgbWVtLCBvbGR2YWwsIG5ld3ZhbCwgdmFsdWVUZW1wLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgdGVtcCk7Ci0rICAgIG1hc20u Y29udmVydFVJbnQzMlRvRG91YmxlKHRlbXAsIG91dHB1dC5mcHUoKSk7Ci0rICB9IGVsc2Ugewot KyAgICBtYXNtLmNvbXBhcmVFeGNoYW5nZShhcnJheVR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBu ZXd2YWwsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwg bWFza1RlbXAsIG91dHB1dC5ncHIoKSk7Ci0rICB9Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgotK3N0YXRpYyB2b2lkIEF0b21pY0V4Y2hhbmdlSlMoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT eW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgVCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zm c2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1w LCBSZWdpc3RlciB0ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0 ZXIgb3V0cHV0KSB7Ci0rICBpZiAoYXJyYXlUeXBlID09IFNjYWxhcjo6VWludDMyKSB7Ci0rICAg IG1hc20uYXRvbWljRXhjaGFuZ2UoYXJyYXlUeXBlLCBzeW5jLCBtZW0sIHZhbHVlLCB2YWx1ZVRl bXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIHRlbXAp OwotKyAgICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZSh0ZW1wLCBvdXRwdXQuZnB1KCkpOwot KyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hdG9taWNFeGNoYW5nZShhcnJheVR5cGUsIHN5bmMsIG1l bSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICBtYXNrVGVtcCwgb3V0cHV0LmdwcigpKTsKLSsgIH0KLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0rc3RhdGljIHZvaWQgQXRvbWljRmV0Y2hPcEpTKE1hY3JvQXNzZW1ibGVyJiBtYXNt LCBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBT eW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAs IEFueVJlZ2lzdGVyIG91dHB1dCkgewotKyAgaWYgKGFycmF5VHlwZSA9PSBTY2FsYXI6OlVpbnQz MikgewotKyAgICBtYXNtLmF0b21pY0ZldGNoT3AoYXJyYXlUeXBlLCBzeW5jLCBvcCwgdmFsdWUs IG1lbSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgbWFz a1RlbXAsIHRlbXApOwotKyAgICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZSh0ZW1wLCBvdXRw dXQuZnB1KCkpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hdG9taWNGZXRjaE9wKGFycmF5VHlw ZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAg ICAgICAgICAgICAgICAgIG1hc2tUZW1wLCBvdXRwdXQuZ3ByKCkpOwotKyAgfQotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRXhjaGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlU eXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXph dGlvbiBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2xkdmFsLCBSZWdpc3RlciBuZXd2YWwsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdp c3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkgewotKyAgQ29tcGFyZUV4Y2hh bmdlSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgbWVtLCBvbGR2YWwsIG5ld3ZhbCwgdmFsdWVU ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIHRlbXAsIG91 dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5nZUpTKFNj YWxhcjo6VHlwZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lz dGVyIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQp IHsKLSsgIENvbXBhcmVFeGNoYW5nZUpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMsIG1lbSwgb2xk dmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAs IG1hc2tUZW1wLCB0ZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjph dG9taWNFeGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgQWRkcmVz cyYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0 ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNFeGNoYW5nZUpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMs IG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAg bWFza1RlbXAsIHRlbXAsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0 b21pY0V4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVy IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpIHsKLSsg IEF0b21pY0V4Y2hhbmdlSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgbWVtLCB2YWx1ZSwgdmFs dWVUZW1wLCBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgdGVtcCwg b3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcEpTKFNj YWxhcjo6VHlwZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1w LCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRj aE9wSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwg b2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgdGVtcCwgb3V0cHV0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcEpTKFNjYWxhcjo6VHlw ZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNo cm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lz dGVyIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpIHsKLSsgIEF0b21pY0ZldGNoT3BKUygq dGhpcywgYXJyYXlUeXBlLCBzeW5jLCBvcCwgdmFsdWUsIG1lbSwgdmFsdWVUZW1wLCBvZmZzZXRU ZW1wLAotKyAgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCB0ZW1wLCBvdXRwdXQpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFZmZlY3RPcEpTKFNjYWxhcjo6VHlwZSBhcnJh eVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6 YXRpb24gc3luYywgQXRvbWljT3Agb3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVy IG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBtYXNrVGVtcCkgewotKyAgQXRvbWljRWZmZWN0T3AoKnRoaXMsIG51bGxwdHIsIGFycmF5 VHlwZSwgc3luYywgb3AsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAg IG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRv bWljRWZmZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNv bnN0IEFkZHJlc3MmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKSB7Ci0rICBBdG9taWNF ZmZlY3RPcCgqdGhpcywgbnVsbHB0ciwgYXJyYXlUeXBlLCBzeW5jLCBvcCwgbWVtLCB2YWx1ZSwg dmFsdWVUZW1wLAotKyAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotK30K LSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBXYXNtIGFkZHJlc3Mgb2Zmc2V0IGNhcnJ5IHRl c3RzLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bWFfYWRkMzJUZXN0Q2Fy cnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcnMsIEltbTMyIGltbSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvdmVy ZmxvdykgewotKyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6Q2FycnlTZXQgfHwgY29u ZCA9PSBBc3NlbWJsZXI6OkNhcnJ5Q2xlYXIpOwotKyAgaWYgKHJkICE9IHJzKSB7Ci0rICAgIGFz TWFzbSgpLm1vdmUzMihycywgcmQpOwotKyAgICBhc01hc20oKS5hZGQzMihpbW0sIHJkKTsKLSsg ICAgYXNfY21wbHcocmQsIHJzKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIHZpc2l0V2FzbUFkZE9m ZnNldCB1c2VzIHVzZVJlZ2lzdGVyQXRTdGFydCwgc28gdGhlIExJUiBhbGxvY2F0b3IgbWF5Ci0r ICAgIC8vIGNvbGxhcHNlIHJkIG9udG8gcnMuIG1vdmUzMiArIGFkZDMyIHdvdWxkIGNsb2JiZXIg cnMgYmVmb3JlIHRoZQotKyAgICAvLyBjb21wYXJlOyBzYXZlIHJzIHRvIGEgc2NyYXRjaCBmaXJz dC4KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBhc01hc20oKS5tb3ZlMzIocnMs IHNjcmF0Y2gpOwotKyAgICBhc01hc20oKS5hZGQzMihpbW0sIHJkKTsKLSsgICAgYXNfY21wbHco cmQsIHNjcmF0Y2gpOwotKyAgfQotKyAgbWFfYihjb25kID09IEFzc2VtYmxlcjo6Q2FycnlTZXQg PyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgb3ZlcmZsb3cpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Om1hX2FkZFB0clRlc3RDYXJyeShDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgcmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgcnMsIEltbVdvcmQgaW1tLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvdmVyZmxvdykgewot KyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6Q2FycnlTZXQgfHwgY29uZCA9PSBBc3Nl bWJsZXI6OkNhcnJ5Q2xlYXIpOwotKyAgaWYgKHJkICE9IHJzKSB7Ci0rICAgIGFzTWFzbSgpLm1v dmVQdHIocnMsIHJkKTsKLSsgICAgYXNNYXNtKCkuYWRkUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwg cmQpOwotKyAgICBhc19jbXBsZChyZCwgcnMpOwotKyAgfSBlbHNlIHsKLSsgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgICBhc01hc20oKS5tb3ZlUHRyKHJzLCBzY3JhdGNoKTsKLSsgICAg YXNNYXNtKCkuYWRkUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgcmQpOwotKyAgICBhc19jbXBsZChy ZCwgc2NyYXRjaCk7Ci0rICB9Ci0rICBtYV9iKGNvbmQgPT0gQXNzZW1ibGVyOjpDYXJyeVNldCA/ IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBvdmVyZmxvdyk7Ci0rfQotKwotKy8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKy8vIFdhc20gbG9hZC9zdG9yZSBoZWxwZXJzLgotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbVByb2JlTGFzdEJ5dGUoCi0rICAgIGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0 ZXIgcHRyKSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAg Y29uc3QgdW5zaWduZWQgc2l6ZSA9IFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSk7Ci0r ICBpZiAoc2l6ZSA8PSAxKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHByb2JlQWRkciA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIC8vIHNpemUgaXMgYXQgbW9zdCAxNiAoU2ltZDEyOCksIHdlbGwgd2l0 aGluIHRoZSBpbnQxNl90IHJhbmdlIG9mIGFzX2FkZGkuCi0rICBhc19hZGRpKHByb2JlQWRkciwg cHRyLCBpbnQxNl90KHNpemUgLSAxKSk7Ci0rICAvLyBSZWNvcmQgdGhlIHByb2JlIGFzIGEgd2Fz bSB0cmFwIHNpdGUgc28gaXRzIFNJR1NFR1YgZGlzcGF0Y2hlcwotKyAgLy8gdGhyb3VnaCB0aGUg d2FzbSBzaWduYWwgaGFuZGxlciB0aGUgc2FtZSB3YXkgdGhlIHJlYWwgYWNjZXNzIHdvdWxkLgot KyAgbV9idWZmZXIuZmx1c2hQb29sKCk7Ci0rICBhcHBlbmQoYWNjZXNzLCB3YXNtOjpUcmFwTWFj aGluZUluc246OkxvYWQ4LAotKyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zm c2V0KCkpKTsKLSsgIC8vIFByb2JpbmcgMS1ieXRlIGxvYWQ7IHJlc3VsdCBkaXNjYXJkZWQuCi0r ICBhc19sYnp4KHByb2JlQWRkciwgbWVtb3J5QmFzZSwgcHJvYmVBZGRyKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp3YXNtTG9hZEltcGwoCi0rICAgIGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0 ZXIgcHRyLAotKyAgICBSZWdpc3RlciBwdHJTY3JhdGNoLCBBbnlSZWdpc3RlciBvdXRwdXQpIHsK LSsgIGFjY2Vzcy5hc3NlcnRPZmZzZXRJbkd1YXJkUGFnZXMoKTsKLSsgIHVpbnQzMl90IG9mZnNl dCA9IGFjY2Vzcy5vZmZzZXQzMigpOwotKyAgTU9aX0FTU0VSVF9JRihvZmZzZXQsIHB0clNjcmF0 Y2ggIT0gSW52YWxpZFJlZyk7Ci0rCi0rICBpZiAob2Zmc2V0KSB7Ci0rICAgIGFzTWFzbSgpLmFk ZFB0cihJbW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gpOwotKyAgICBwdHIgPSBwdHJTY3JhdGNo OwotKyAgfQotKwotKyAgd2FzbVByb2JlTGFzdEJ5dGUoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIp OwotKwotKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJlZm9yZShhY2Nlc3Muc3luYygpKTsKLSsg IC8vIEZsdXNoIGFueSBwZW5kaW5nIGNvbnN0YW50IHBvb2wgZW50cmllcyBiZWZvcmUgcmVjb3Jk aW5nIHRoZSB0cmFwIHNpdGUsCi0rICAvLyBvdGhlcndpc2UgYSBwb29sIGJvZHkgaW5zZXJ0ZWQg YmV0d2VlbiB0aGUgcmVjb3JkZWQgb2Zmc2V0IGFuZCB0aGUKLSsgIC8vIGVtaXR0ZWQgbG9hZCBz aGlmdHMgdGhlIGxvYWQgYW5kIGxlYXZlcyB0aGUgcG9vbCBndWFyZCBicmFuY2ggYXQgdGhlCi0r ICAvLyByZWNvcmRlZCBvZmZzZXQgKFN1bW1hcml6ZVRyYXBJbnN0cnVjdGlvbiB0aGVuIHJlamVj dHMgdGhlIHRyYXAgc2l0ZSkuCi0rICBtX2J1ZmZlci5mbHVzaFBvb2woKTsKLSsgIGFwcGVuZChh Y2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvckxvYWQoU2NhbGFyOjpieXRlU2l6ZShhY2Nl c3MudHlwZSgpKSksCi0rICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQo KSkpOwotKwotKyAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7Ci0rICAgIGNhc2UgU2NhbGFyOjpJ bnQ4OgotKyAgICAgIGFzX2xiengob3V0cHV0LmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAg ICAgIGFzX2V4dHNiKG91dHB1dC5ncHIoKSwgb3V0cHV0LmdwcigpKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgotKyAgICAgIGFzX2xiengob3V0cHV0LmdwcigpLCBt ZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MTY6 Ci0rICAgICAgYXNfbGhheChvdXRwdXQuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6Ci0rICAgICAgYXNfbGh6eChvdXRwdXQu Z3ByKCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFy OjpJbnQzMjoKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKLSsgICAgICBhc19sd3p4KG91dHB1 dC5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBhc19leHRzdyhvdXRwdXQuZ3ByKCks IG91dHB1dC5ncHIoKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpGbG9hdDY0 OgotKyAgICAgIGlmIChhY2Nlc3MuaXNaZXJvRXh0ZW5kU2ltZDEyOExvYWQoKSB8fCBhY2Nlc3Mu aXNTcGxhdFNpbWQxMjhMb2FkKCkgfHwKLSsgICAgICAgICAgYWNjZXNzLmlzV2lkZW5TaW1kMTI4 TG9hZCgpKSB7Ci0rICAgICAgICAvLyBsZmR4IGlzIFgtZm9ybSBzY2FsYXIgRlAg4oCUIGVuY29k ZXMgb25seSA1LWJpdCBGUlQsIHNvIGEKLSsgICAgICAgIC8vIFNpbWQxMjggZGVzdCAoZW5jb2Rp bmcgMzIrKSBjb3JydXB0cyB0aGUgb3Bjb2RlLiBCcmlkZ2UKLSsgICAgICAgIC8vIHRocm91Z2gg U2NyYXRjaERvdWJsZVJlZyAoRlBSIGYwLCBlbmNvZGluZyAwKS4KLSsgICAgICAgIFNjcmF0Y2hE b3VibGVTY29wZSBkc2NyYXRjaChhc01hc20oKSk7Ci0rICAgICAgICBhc19sZmR4KGRzY3JhdGNo LCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgICAgaWYgKGFjY2Vzcy5pc1plcm9FeHRlbmRTaW1k MTI4TG9hZCgpKSB7Ci0rICAgICAgICAgIC8vIExvYWRlZCB2YWx1ZSBnb2VzIHRvIEJFIGR3MSAo PSBMRSBkdzAgPSBsYW5lIDApOyBCRSBkdzAgPSAwLgotKyAgICAgICAgICBhc194eGx4b3IoU2Ny YXRjaFNpbWQxMjhSZWcsIFNjcmF0Y2hTaW1kMTI4UmVnLCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0r ICAgICAgICAgIGFzX3h4cGVybWRpKG91dHB1dC5mcHUoKSwgU2NyYXRjaFNpbWQxMjhSZWcsIGRz Y3JhdGNoLCAwKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoYWNjZXNzLmlzU3BsYXRTaW1kMTI4TG9h ZCgpKSB7Ci0rICAgICAgICAgIGFzX3h4cGVybWRpKG91dHB1dC5mcHUoKSwgZHNjcmF0Y2gsIGRz Y3JhdGNoLCAwKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIC8vIHdpZGVuOiBwbGFj ZSBsb2FkZWQgNjQgYml0cyBpbiBMRSBkdzAgKD0gQkUgZHcxKSBmb3Igd2lkZW5Mb3cuCi0rICAg ICAgICAgIGFzX3h4cGVybWRpKG91dHB1dC5mcHUoKSwgZHNjcmF0Y2gsIGRzY3JhdGNoLCAyKTsK LSsgICAgICAgICAgc3dpdGNoIChhY2Nlc3Mud2lkZW5TaW1kT3AoKSkgewotKyAgICAgICAgICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDh4OFM6Ci0rICAgICAgICAgICAgICBhc01hc20o KS53aWRlbkxvd0ludDh4MTYob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOwotKyAgICAgICAg ICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhMb2FkOHg4 VToKLSsgICAgICAgICAgICAgIGFzTWFzbSgpLnVuc2lnbmVkV2lkZW5Mb3dJbnQ4eDE2KG91dHB1 dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAg ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDE2eDRTOgotKyAgICAgICAgICAgICAgYXNN YXNtKCkud2lkZW5Mb3dJbnQxNng4KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAg ICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9h ZDE2eDRVOgotKyAgICAgICAgICAgICAgYXNNYXNtKCkudW5zaWduZWRXaWRlbkxvd0ludDE2eDgo b3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOwotKyAgICAgICAgICAgICAgYnJlYWs7Ci0rICAg ICAgICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhMb2FkMzJ4MlM6Ci0rICAgICAgICAgICAg ICBhc01hc20oKS53aWRlbkxvd0ludDMyeDQob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOwot KyAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYx MjhMb2FkMzJ4MlU6Ci0rICAgICAgICAgICAgICBhc01hc20oKS51bnNpZ25lZFdpZGVuTG93SW50 MzJ4NChvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSk7Ci0rICAgICAgICAgICAgICBicmVhazsK LSsgICAgICAgICAgICBkZWZhdWx0OgotKyAgICAgICAgICAgICAgTU9aX0NSQVNIKCJVbmV4cGVj dGVkIHdpZGVuIG9wIik7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2Ug ewotKyAgICAgICAgYXNfbGZkeChvdXRwdXQuZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAg ICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQzMjoKLSsgICAgICBp ZiAoYWNjZXNzLmlzWmVyb0V4dGVuZFNpbWQxMjhMb2FkKCkpIHsKLSsgICAgICAgIC8vIHYxMjgu bG9hZDMyX3plcm86IGxvYWQgMzIgcmF3IGJpdHMgaW50byBsYW5lIDAsIHplcm8gdGhlIHJlc3Qu Ci0rICAgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAg ICAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgICBhc19sd3p4KHRt cCwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICAgIGFzX3h4bHhvcihvdXRwdXQuZnB1KCksIG91 dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAgICAgIGlmIChIYXNQT1dFUjkoKSkgewot KyAgICAgICAgICBhc19tdHZzcndzKFNjcmF0Y2hTaW1kMTI4UmVnLCB0bXApOwotKyAgICAgICAg ICBhc194eGluc2VydHcob3V0cHV0LmZwdSgpLCBTY3JhdGNoU2ltZDEyOFJlZywgMTIpOwotKyAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgLy8gUE9XRVI4OiBtdHZzcmQgcHV0cyB2YWx1ZSBp biBCRSBkdzAgbG93IDMyIGJpdHMuCi0rICAgICAgICAgIC8vIHh4cGVybWRpKGRlc3QsIHplcm8s IHNjcmF0Y2gsIDApID0ge3plcm9bZHcwXSwgc2NyYXRjaFtkdzBdfQotKyAgICAgICAgICAvLyBp biBCRSwgcGxhY2luZyB0aGUgdmFsdWUgaW4gTEUgd29yZCAwIHdpdGggdGhlIHJlc3QgemVyby4K LSsgICAgICAgICAgYXNfbXR2c3JkKFNjcmF0Y2hTaW1kMTI4UmVnLCB0bXApOwotKyAgICAgICAg ICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSwgU2NyYXRjaFNpbWQxMjhS ZWcsIDApOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBhc19sZnN4KG91 dHB1dC5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgU2NhbGFyOjpTaW1kMTI4OgotKyAgICAgIGlmIChIYXNQT1dFUjkoKSkgewotKyAg ICAgICAgYXNfbHh2eChvdXRwdXQuZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgfSBl bHNlIHsKLSsgICAgICAgIGFzX2x4dmQyeChvdXRwdXQuZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7 Ci0rICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSwgb3V0cHV0 LmZwdSgpLCAyKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAg ICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGFycmF5IHR5cGUiKTsKLSsgIH0KLSsKLSsgIGFzTWFz bSgpLm1lbW9yeUJhcnJpZXJBZnRlcihhY2Nlc3Muc3luYygpKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp3YXNtU3RvcmVJbXBsKAotKyAgICBjb25zdCB3YXNtOjpN ZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEFueVJlZ2lzdGVyIHZhbHVlLAotKyAgICBSZWdpc3Rl ciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gpIHsKLSsgIGFj Y2Vzcy5hc3NlcnRPZmZzZXRJbkd1YXJkUGFnZXMoKTsKLSsgIHVpbnQzMl90IG9mZnNldCA9IGFj Y2Vzcy5vZmZzZXQzMigpOwotKyAgTU9aX0FTU0VSVF9JRihvZmZzZXQsIHB0clNjcmF0Y2ggIT0g SW52YWxpZFJlZyk7Ci0rCi0rICBpZiAob2Zmc2V0KSB7Ci0rICAgIGFzTWFzbSgpLmFkZFB0cihJ bW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gpOwotKyAgICBwdHIgPSBwdHJTY3JhdGNoOwotKyAg fQotKwotKyAgd2FzbVByb2JlTGFzdEJ5dGUoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIpOwotKwot KyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJlZm9yZShhY2Nlc3Muc3luYygpKTsKLSsgIC8vIFJl Y29yZCB0cmFwIHNpdGUgYXQgdGhlIGZhdWx0aW5nIG1lbW9yeSBpbnN0cnVjdGlvbi4gRm9yIFA4 IFNpbWQxMjgKLSsgIC8vIHN0b3JlLCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gKHN0eHZkMngp IGlzIGFmdGVyIGEgYnl0ZS1zd2FwCi0rICAvLyAoeHhwZXJtZGkpLCBzbyB3ZSBkZWZlciB0aGUg dHJhcCBzaXRlIHJlY29yZGluZy4KLSsgIC8vIEZsdXNoIHBvb2wgZmlyc3Q7IHNlZSBjb21tZW50 IGluIHdhc21Mb2FkSW1wbC4KLSsgIGlmIChhY2Nlc3MudHlwZSgpICE9IFNjYWxhcjo6U2ltZDEy OCB8fCBIYXNQT1dFUjkoKSkgewotKyAgICBtX2J1ZmZlci5mbHVzaFBvb2woKTsKLSsgICAgYXBw ZW5kKGFjY2VzcywKLSsgICAgICAgICAgIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvclN0b3JlKFNj YWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAotKyAgICAgICAgICAgRmF1bHRpbmdDb2Rl T2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSkpOwotKyAgfQotKwotKyAgc3dpdGNoIChhY2Nlc3MudHlw ZSgpKSB7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQ4OgotKyAgICBjYXNlIFNjYWxhcjo6VWludDg6 Ci0rICAgICAgYXNfc3RieCh2YWx1ZS5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDE2OgotKyAgICBjYXNlIFNjYWxhcjo6VWludDE2 OgotKyAgICAgIGFzX3N0aHgodmFsdWUuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQz MjoKLSsgICAgICBhc19zdHd4KHZhbHVlLmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50NjQ6Ci0rICAgICAgYXNfc3RkeCh2YWx1ZS5n cHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6 OkZsb2F0NjQ6Ci0rICAgICAgYXNfc3RmZHgodmFsdWUuZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpGbG9hdDMyOgotKyAgICAgIGFzX3N0 ZnN4KHZhbHVlLmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIFNjYWxhcjo6U2ltZDEyODoKLSsgICAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICAg IGFzX3N0eHZ4KHZhbHVlLmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICBhc194eHBlcm1kaShTY3JhdGNoU2ltZDEyOFJlZywgdmFsdWUuZnB1KCksIHZh bHVlLmZwdSgpLCAyKTsKLSsgICAgICAgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNv bW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgICAgICBhcHBlbmQoYWNjZXNzLAotKyAgICAgICAg ICAgICAgIHdhc206OlRyYXBNYWNoaW5lSW5zbkZvclN0b3JlKFNjYWxhcjo6Ynl0ZVNpemUoYWNj ZXNzLnR5cGUoKSkpLAotKyAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50 T2Zmc2V0KCkpKTsKLSsgICAgICAgIGFzX3N0eHZkMngoU2NyYXRjaFNpbWQxMjhSZWcsIG1lbW9y eUJhc2UsIHB0cik7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAg ICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Ci0rICB9Ci0rCi0rICBhc01h c20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5bmMoKSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbUxvYWRJNjRJbXBsKAotKyAgICBjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVy IHB0ciwKLSsgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsg IHVpbnQzMl90IG9mZnNldCA9IGFjY2Vzcy5vZmZzZXQzMigpOwotKyAgTU9aX0FTU0VSVF9JRihv ZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyk7Ci0rCi0rICBpZiAob2Zmc2V0KSB7Ci0r ICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gpOwotKyAgICBw dHIgPSBwdHJTY3JhdGNoOwotKyAgfQotKwotKyAgd2FzbVByb2JlTGFzdEJ5dGUoYWNjZXNzLCBt ZW1vcnlCYXNlLCBwdHIpOwotKwotKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJlZm9yZShhY2Nl c3Muc3luYygpKTsKLSsgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNvbW1lbnQgaW4g d2FzbUxvYWRJbXBsCi0rICBhcHBlbmQoYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc25Gb3JM b2FkKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAotKyAgICAgICAgIEZhdWx0aW5n Q29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKLSsKLSsgIHN3aXRjaCAoYWNjZXNzLnR5cGUo KSkgewotKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKLSsgICAgICBhc19sYnp4KG91dHB1dC5yZWcs IG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYXNfZXh0c2Iob3V0cHV0LnJlZywgb3V0cHV0LnJl Zyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50ODoKLSsgICAgICBhc19s Ynp4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgU2NhbGFyOjpJbnQxNjoKLSsgICAgICBhc19saGF4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2Us IHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6Ci0rICAgICAg YXNfbGh6eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIFNjYWxhcjo6SW50MzI6Ci0rICAgICAgYXNfbHd6eChvdXRwdXQucmVnLCBtZW1vcnlC YXNlLCBwdHIpOwotKyAgICAgIGFzX2V4dHN3KG91dHB1dC5yZWcsIG91dHB1dC5yZWcpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6VWludDMyOgotKyAgICAgIGFzX2x3engob3V0 cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICAvLyBaZXJvLWV4dGVuZGVkIGJ5IGx3 enggYWxyZWFkeQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50NjQ6Ci0rICAg ICAgYXNfbGR4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGFycmF5IHR5cGUiKTsK LSsgIH0KLSsKLSsgIGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJBZnRlcihhY2Nlc3Muc3luYygpKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojp3YXNtU3RvcmVJNjRJbXBs KAotKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyNjQg dmFsdWUsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsCi0rICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIg cHRyU2NyYXRjaCkgewotKyAgdWludDMyX3Qgb2Zmc2V0ID0gYWNjZXNzLm9mZnNldDMyKCk7Ci0r ICBNT1pfQVNTRVJUX0lGKG9mZnNldCwgcHRyU2NyYXRjaCAhPSBJbnZhbGlkUmVnKTsKLSsKLSsg IGlmIChvZmZzZXQpIHsKLSsgICAgYXNNYXNtKCkuYWRkUHRyKEltbVdvcmQob2Zmc2V0KSwgcHRy U2NyYXRjaCk7Ci0rICAgIHB0ciA9IHB0clNjcmF0Y2g7Ci0rICB9Ci0rCi0rICB3YXNtUHJvYmVM YXN0Qnl0ZShhY2Nlc3MsIG1lbW9yeUJhc2UsIHB0cik7Ci0rCi0rICBhc01hc20oKS5tZW1vcnlC YXJyaWVyQmVmb3JlKGFjY2Vzcy5zeW5jKCkpOwotKyAgbV9idWZmZXIuZmx1c2hQb29sKCk7ICAv LyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgIGFwcGVuZChhY2Nlc3MsIHdhc206OlRy YXBNYWNoaW5lSW5zbkZvclN0b3JlKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAot KyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKLSsKLSsgIHN3 aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKLSsgICAgY2Fz ZSBTY2FsYXI6OlVpbnQ4OgotKyAgICAgIGFzX3N0YngodmFsdWUucmVnLCBtZW1vcnlCYXNlLCBw dHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MTY6Ci0rICAgIGNhc2Ug U2NhbGFyOjpVaW50MTY6Ci0rICAgICAgYXNfc3RoeCh2YWx1ZS5yZWcsIG1lbW9yeUJhc2UsIHB0 cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoKLSsgICAgY2FzZSBT Y2FsYXI6OlVpbnQzMjoKLSsgICAgICBhc19zdHd4KHZhbHVlLnJlZywgbWVtb3J5QmFzZSwgcHRy KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDY0OgotKyAgICAgIGFzX3N0 ZHgodmFsdWUucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZh dWx0OgotKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Ci0rICB9Ci0r Ci0rICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5bmMoKSk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Mb2FkKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtZW1v cnlCYXNlLCBSZWdpc3RlciBwdHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICB3YXNtTG9hZEltcGwo YWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0Y2gsIG91dHB1dCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Mb2FkSTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBt ZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIHdhc21Mb2Fk STY0SW1wbChhY2Nlc3MsIG1lbW9yeUJhc2UsIHB0ciwgcHRyU2NyYXRjaCwgb3V0cHV0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVN0b3JlKGNvbnN0IHdhc206Ok1lbW9yeUFj Y2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVn aXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCkgewotKyAgd2FzbVN0 b3JlSW1wbChhY2Nlc3MsIHZhbHVlLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0Y2gpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtU3RvcmVJNjQoY29uc3Qgd2FzbTo6TWVtb3J5 QWNjZXNzRGVzYyYgYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlcjY0IHZhbHVlLCBSZWdpc3RlciBtZW1vcnlCYXNlLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gpIHsKLSsg IHdhc21TdG9yZUk2NEltcGwoYWNjZXNzLCB2YWx1ZSwgbWVtb3J5QmFzZSwgcHRyLCBwdHJTY3Jh dGNoKTsKLSt9Ci0rCi0rLy99fX0gY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUKLSsKLSt9ICAv LyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2lmZGVmIEVOQUJMRV9X QVNNX1NJTUQKLSsvLyBzdGF0aWMKLStib29sIE1hY3JvQXNzZW1ibGVyOjpNdXN0TWFza1NoaWZ0 Q291bnRTaW1kMTI4KHdhc206OlNpbWRPcCBvcCwgaW50MzJfdCogbWFzaykgewotKyAgcmV0dXJu IGZhbHNlOwotK30KLSsjZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L01hY3Jv QXNzZW1ibGVyLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0 LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmJjMjE0M2I2NzQ2 NQotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1w cGM2NC5oCi1AQCAtMCwwICsxLDIwMzEgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6 IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmlt OiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9y bSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNl bnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0 aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9y Zy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVmIGppdF9wcGM2NF9NYWNyb0Fzc2VtYmxlcl9wcGM2 NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBjNjRfaAotKwotKyNpbmNs dWRlICJqaXQvTW92ZVJlc29sdmVyLmgiCi0rI2luY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXIt cHBjNjQuaCIKLSsjaW5jbHVkZSAid2FzbS9XYXNtQnVpbHRpbnMuaCIKLSsKLStuYW1lc3BhY2Ug anMgewotK25hbWVzcGFjZSBqaXQgewotKwotK2lubGluZSBib29sIGlzX2ludE4oaW50NjRfdCB4 LCB1bnNpZ25lZCBuKSB7Ci0rICBNT1pfQVNTRVJUKCgwIDwgbikgJiYgKG4gPCA2NCkpOwotKyAg aW50NjRfdCBsaW1pdCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IChuIC0gMSk7Ci0rICBy ZXR1cm4gKC1saW1pdCA8PSB4KSAmJiAoeCA8IGxpbWl0KTsKLSt9Ci0rCi0raW5saW5lIGJvb2wg aXNfdWludE4odWludDY0X3QgeCwgdW5zaWduZWQgbikgewotKyAgTU9aX0FTU0VSVCgoMCA8IG4p ICYmIChuIDwgNjQpKTsKLSsgIHJldHVybiAhKHggPj4gbik7Ci0rfQotKwotKy8vIGVudGVyTm9Q b29sKCkgZ3VhcmQgc2l6ZXMuIEluaGliaXRpbmcgdGhlIGNvbnN0YW50IHBvb2wga2VlcHMgdGhl c2UKLSsvLyBzdGFuemFzIGF0IGEgZml4ZWQgaW5zdHJ1Y3Rpb24gY291bnQsIHdoaWNoIHBhdGNo ZXJzIGFuZCBsb25nLWJyYW5jaAotKy8vIHJlc29sdmVycyByZWx5IG9uLiBFYWNoIGNvbnN0YW50 IG5hbWVzIGEgZGlzdGluY3Qgc3RhbnphIHNoYXBlOyBzZWUKLSsvLyB0aGUgZW1pdHRpbmcgY2Fs bCBzaXRlIGZvciB0aGUgZXhhY3QgbGF5b3V0LgotKy8vCi0rLy8ga05vUG9vbExvYWQ2NFN0YW56 YUluc25zICg4KTogZW1pdExvYWQ2NFN0YW56YSBib2R5IOKAlCA4IE5PUHMgdGhhdAotKy8vICAg V3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMgbGF0ZXIgb3ZlcndyaXRlcyBpbiBwbGFjZS4gVHdvIHNo YXBlcyBzaGFyZQotKy8vICAgdGhlIHNhbWUgOC1zbG90IGZvb3RwcmludCB3aXRoIHRoZSAucXVh ZCBmaXhlZCBhdCBzbG90cyBbNi4uN106Ci0rLy8gICAgIC0gUE9XRVI5KyAoSGFzUE9XRVI5KCkp OiBhZGRwY2lzICsgbGQgKyBiICsgMyBOT1BzICgyIGR5bmFtaWMgaW5zbnMsCi0rLy8gICAgICAg bm8gTFIgY2xvYmJlcikuIFByZWZlcnJlZCBwYXRoLgotKy8vICAgICAtIFBPV0VSOCBmYWxsYmFj azogbWZsci9iY2wvbWZsci9tdGxyL2xkL2IgTFItYm91bmNpbmcgc2VxdWVuY2UKLSsvLyAgICAg ICAoNiBkeW5hbWljIGluc25zLCBSQVMtdGhyYXNoaW5nIOKAlCBrZXB0IG9ubHkgYmVjYXVzZSBQ OCBoYXMgbm8KLSsvLyAgICAgICBhZGRwY2lzKS4KLSsvLwotKy8vIGtOb1Bvb2xQYXRjaGFibGVC cmFuY2hJbnNucyAoMTApOiBwYXRjaGFibGUgZmFyIGNhbGwgLyBqdW1wIC8KLSsvLyAgIHVuY29u ZGl0aW9uYWwgYnJhbmNoLiBUaHJlZSBhbHRlcm5hdGl2ZSBzaGFwZXMsIGFsbCBmaXR0aW5nIHRo ZQotKy8vICAgc2FtZSBidWRnZXQ6Ci0rLy8gICAgIC0gbG9hZDY0IHN0YW56YSAoOCkgKyBtdGN0 ciArIGJjdHJbbF0gID0gMTAgIChib3VuZCBjYWxsL2p1bXApCi0rLy8gICAgIC0gOSBOT1BzICsg YmwgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTAgIChzaG9ydCBib3VuZCBjYWxsKQotKy8v ICAgICAtIHhzX3RyYXBfdGFnZ2VkKFRBRykgKyBjaGFpbiArIDggTk9QcyA9IDEwICAoZndkLXJl ZiBzdGFuemEpCi0rLy8KLSsvLyBrTm9Qb29sQ29uZExvbmdCcmFuY2hJbnNuc1A4TWF4ICgxNCk6 IGNvbmRpdGlvbmFsIGxvbmcgYnJhbmNoLCBQT1dFUjgKLSsvLyAgIE92ZXJmbG93IHdvcnN0IGNh c2UuIFBPV0VSOCBoYXMgbm8gbWNyeHJ4IHNvIG92ZXJmbG93L2NhcnJ5IHRlc3QgaXMKLSsvLyAg IG1meGVyK3Jsd2lubSttdGNyZiAoMyBpbnNucykgb24gdG9wIG9mIHRoZSBiYXNlIHNoYXBlLiBC dWRnZXQgPQotKy8vICAgMyAoWEVSIGluc3BlY3Rpb24pICsgMSAoYmMpICsgOCAobG9hZDY0IHN0 YW56YSkgKyAyIChtdGN0citiY3RyKSA9IDE0LgotK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtO b1Bvb2xMb2FkNjRTdGFuemFJbnNucyA9IDg7Ci0rc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga05v UG9vbFBhdGNoYWJsZUJyYW5jaEluc25zID0gMTA7Ci0rc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg a05vUG9vbENvbmRMb25nQnJhbmNoSW5zbnNQOE1heCA9IDE0OwotKwotK2VudW0gTG9hZFN0b3Jl U2l6ZSB7Ci0rICBTaXplQnl0ZSA9IDgsCi0rICBTaXplSGFsZldvcmQgPSAxNiwKLSsgIFNpemVX b3JkID0gMzIsCi0rICBTaXplRG91YmxlID0gNjQKLSt9OwotKwotK2VudW0gTG9hZFN0b3JlRXh0 ZW5zaW9uIHsgWmVyb0V4dGVuZCA9IDAsIFNpZ25FeHRlbmQgPSAxIH07Ci0rCi0rc3RhdGljIFJl Z2lzdGVyIENhbGxSZWcgPSByMTI7Ci0rCi0rc3RydWN0IEltbVNoaWZ0ZWRUYWcgOiBwdWJsaWMg SW1tV29yZCB7Ci0rICBleHBsaWNpdCBJbW1TaGlmdGVkVGFnKEpTVmFsdWVTaGlmdGVkVGFnIHNo dGFnKSA6IEltbVdvcmQoKHVpbnRwdHJfdClzaHRhZykge30KLSsgIGV4cGxpY2l0IEltbVNoaWZ0 ZWRUYWcoSlNWYWx1ZVR5cGUgdHlwZSkKLSsgICAgICA6IEltbVdvcmQoKCh1aW50cHRyX3QpSlNW QUxfVFlQRV9UT19TSElGVEVEX1RBRyh0eXBlKSkpIHt9Ci0rfTsKLSsKLStzdHJ1Y3QgSW1tVGFn IDogcHVibGljIEltbTMyIHsKLSsgIGV4cGxpY2l0IEltbVRhZyhKU1ZhbHVlVGFnIHRhZykgOiBJ bW0zMih0YWcpIHt9Ci0rfTsKLSsKLStjbGFzcyBTY3JhdGNoVGFnU2NvcGUgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHNfOwotKyAgUmVnaXN0ZXIgc2NyYXRjaF87Ci0rICBib29s IG93bmVkXzsKLSsgIG1vemlsbGE6OkRlYnVnT25seTxib29sPiByZWxlYXNlZF87Ci0rCi0rIHB1 YmxpYzoKLSsgIFNjcmF0Y2hUYWdTY29wZShBc3NlbWJsZXImIG1hc20sIGNvbnN0IFZhbHVlT3Bl cmFuZCYpCi0rICAgICAgOiB0ZW1wc18obWFzbSksIG93bmVkXyh0cnVlKSwgcmVsZWFzZWRfKGZh bHNlKSB7Ci0rICAgIHNjcmF0Y2hfID0gdGVtcHNfLkFjcXVpcmUoKTsKLSsgIH0KLSsKLSsgIG9w ZXJhdG9yIFJlZ2lzdGVyKCkgewotKyAgICBNT1pfQVNTRVJUKCFyZWxlYXNlZF8pOwotKyAgICBy ZXR1cm4gc2NyYXRjaF87Ci0rICB9Ci0rCi0rICB2b2lkIHJlbGVhc2UoKSB7Ci0rICAgIE1PWl9B U1NFUlQoIXJlbGVhc2VkXyk7Ci0rICAgIHJlbGVhc2VkXyA9IHRydWU7Ci0rICAgIGlmIChvd25l ZF8pIHsKLSsgICAgICB0ZW1wc18uUmVsZWFzZShzY3JhdGNoXyk7Ci0rICAgICAgb3duZWRfID0g ZmFsc2U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHZvaWQgcmVhY3F1aXJlKCkgewotKyAgICBNT1pf QVNTRVJUKHJlbGVhc2VkXyk7Ci0rICAgIHJlbGVhc2VkXyA9IGZhbHNlOwotKyAgICBpZiAoIW93 bmVkXykgewotKyAgICAgIHNjcmF0Y2hfID0gdGVtcHNfLkFjcXVpcmUoKTsKLSsgICAgICBvd25l ZF8gPSB0cnVlOwotKyAgICB9Ci0rICB9Ci0rfTsKLSsKLStjbGFzcyBTY3JhdGNoVGFnU2NvcGVS ZWxlYXNlIHsKLSsgIFNjcmF0Y2hUYWdTY29wZSogdHNfOwotKwotKyBwdWJsaWM6Ci0rICBleHBs aWNpdCBTY3JhdGNoVGFnU2NvcGVSZWxlYXNlKFNjcmF0Y2hUYWdTY29wZSogdHMpIDogdHNfKHRz KSB7Ci0rICAgIHRzXy0+cmVsZWFzZSgpOwotKyAgfQotKyAgflNjcmF0Y2hUYWdTY29wZVJlbGVh c2UoKSB7IHRzXy0+cmVhY3F1aXJlKCk7IH0KLSt9OwotKwotK2NsYXNzIE1hY3JvQXNzZW1ibGVy UFBDNjQgOiBwdWJsaWMgQXNzZW1ibGVyIHsKLSsgcHJvdGVjdGVkOgotKyAgTWFjcm9Bc3NlbWJs ZXImIGFzTWFzbSgpOwotKyAgY29uc3QgTWFjcm9Bc3NlbWJsZXImIGFzTWFzbSgpIGNvbnN0Owot K307Ci0rCi0rY2xhc3MgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdCA6IHB1YmxpYyBNYWNyb0Fz c2VtYmxlclBQQzY0IHsKLSsgcHVibGljOgotKyAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJQUEM2NDo6 TWFjcm9Bc3NlbWJsZXJQUEM2NDsKLSsKLSsgIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQoKSB7 fQotKwotKyAgYm9vbCBidWlsZE9PTEZha2VFeGl0RnJhbWUodm9pZCogZmFrZVJldHVybkFkZHIp OwotKwotKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICAvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucwotKwotKyAgdm9p ZCBjb252ZXJ0Qm9vbFRvSW50MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAg IGFzX3Jsd2lubShkZXN0LCBzcmMsIDAsIDMxLCAzMSk7Ci0rICB9Ci0rICB2b2lkIGNvbnZlcnRJ bnQzMlRvRG91YmxlKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIC8v IG10dnNyd2E6IFZTUltkZXN0XS5kdzAgPSBzaWduX2V4dF82NChzcmNbMzI6NjNdKTsgUDgrIChJ U0EgMi4wNykuCi0rICAgIC8vIFJlcGxhY2VzIGV4dHN3ICsgbXR2c3JkICgyIGluc25zICsgc2Ny YXRjaCBHUFIpIHdpdGggMSBpbnNuLgotKyAgICBhc19tdHZzcndhKGRlc3QsIHNyYyk7Ci0rICAg IGFzX2ZjZmlkKGRlc3QsIGRlc3QpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJs ZShjb25zdCBBZGRyZXNzJiBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICAvLyBsZml3 YXggKFA3Kyk6IEZQUi5kd1swXSA9IHNpZ25fZXh0XzY0KE1FTVthZGRyLCA0XSkuIFgtZm9ybSBp bmRleGVkCi0rICAgIC8vIOKAlCBubyBpbW1lZGlhdGUgb2Zmc2V0LCBzbyB3aGVuIG9mZnNldCAh PSAwIHdlIGFkZCBpdCBpbnRvIGEgc2NyYXRjaAotKyAgICAvLyBmaXJzdC4gUmVwbGFjZXMgbHd6 ICsgZXh0c3cgKyBtdHZzcmQgd2l0aCBsZml3YXggKG9uZSBpbnNuKSBwbHVzCi0rICAgIC8vIG9w dGlvbmFsIGFkZHJlc3MgYWRkLgotKyAgICBpZiAoc3JjLm9mZnNldCA9PSAwKSB7Ci0rICAgICAg YXNfbGZpd2F4KGRlc3QsIHIwLCBzcmMuYmFzZSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYp KSB7Ci0rICAgICAgICBhc19hZGRpKHNjcmF0Y2gsIHNyYy5iYXNlLCBzcmMub2Zmc2V0KTsKLSsg ICAgICAgIGFzX2xmaXdheChkZXN0LCByMCwgc2NyYXRjaCk7Ci0rICAgICAgfSBlbHNlIHsKLSsg ICAgICAgIC8vIFgtZm9ybSBpbmRleGVkOiBsZml3YXggY29tcHV0ZXMgYmFzZSArIHNjcmF0Y2gg ZGlyZWN0bHksIG5vIGFkZC4KLSsgICAgICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwg c2NyYXRjaCk7Ci0rICAgICAgICBhc19sZml3YXgoZGVzdCwgc3JjLmJhc2UsIHNjcmF0Y2gpOwot KyAgICAgIH0KLSsgICAgfQotKyAgICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKLSsgIH0KLSsgIHZv aWQgY29udmVydEludDMyVG9Eb3VibGUoY29uc3QgQmFzZUluZGV4JiBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2Fs ZWRBZGRyZXNzKHNyYywgc2NyYXRjaCk7Ci0rICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFkZHJl c3Moc2NyYXRjaCwgc3JjLm9mZnNldCksIGRlc3QpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0VUlu dDMyVG9Eb3VibGUoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpOwotKyAgdm9pZCBj b252ZXJ0VUludDMyVG9GbG9hdDMyKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KTsK LSsgIHZvaWQgY29udmVydERvdWJsZVRvRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICAgIGFzX2Zyc3AoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIC8vIFBP V0VSOSBGUDE2IGNvbnZlcnNpb25zICgxIGluc24gZWFjaCkuIENhbGxlciBtdXN0IGhhdmUgdmVy aWZpZWQKLSsgIC8vIEhhc1BPV0VSOSgpIOKAlCBTdXBwb3J0c0Zsb2F0ezY0LDMyfVRvMTYgZ2F0 ZXMgdGhhdC4gUFBDNjQgRlBScyBob2xkCi0rICAvLyBkb3VibGVzIGludGVybmFsbHk7IGFuICJG UDMyLWluLUZQUiIgaXMganVzdCB0aGUgRlAzMiB2YWx1ZSBzdG9yZWQKLSsgIC8vIGFzIGV4YWN0 IEZQNjQsIHNvIHhzY3ZkcGhwL3hzY3ZocGRwIHdvcmsgZm9yIGJvdGggRlAzMuKGlEZQMTYgYW5k Ci0rICAvLyBGUDY04oaURlAxNiAoRlAxNiBmaXRzIGV4YWN0bHkgaW4gRlAzMiB3aGljaCBmaXRz IGV4YWN0bHkgaW4gRlA2NCkuCi0rICB2b2lkIGNvbnZlcnREb3VibGVUb0Zsb2F0MTYoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBNT1pfQVNTRVJUKEhhc1BP V0VSOSgpKTsKLSsgICAgYXNfeHNjdmRwaHAoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIHZvaWQgY29u dmVydEZsb2F0MTZUb0RvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KSB7Ci0rICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOwotKyAgICBhc194c2N2aHBkcChkZXN0 LCBzcmMpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0RmxvYXQzMlRvRmxvYXQxNihGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5 KCkpOwotKyAgICBhc194c2N2ZHBocChkZXN0LCBzcmMpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0 RmxvYXQxNlRvRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOwotKyAgICBhc194c2N2aHBkcChkZXN0LCBz cmMpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0SW50MzJUb0Zsb2F0MTYoUmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7Ci0rICAg IGNvbnZlcnRJbnQzMlRvRmxvYXQzMihzcmMsIGRlc3QpOwotKyAgICBjb252ZXJ0RmxvYXQzMlRv RmxvYXQxNihkZXN0LCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgY29udmVydERvdWJsZVRvSW50MzIo RmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrID0gdHJ1ZSk7Ci0rICB2 b2lkIGNvbnZlcnREb3VibGVUb1B0cihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwg TGFiZWwqIGZhaWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVy b0NoZWNrID0gdHJ1ZSk7Ci0rICB2b2lkIGNvbnZlcnRGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrID0gdHJ1ZSk7Ci0rICB2b2lkIGNvbnZl cnRGbG9hdDMyVG9Eb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg ewotKyAgICAvLyBQUEM2NCBGUFJzIGhvbGQgZXZlcnkgRlAzMiB2YWx1ZSBpbiBpdHMgRlA2NC1l cXVpdmFsZW50IHJlcHJlc2VudGF0aW9uLAotKyAgICAvLyBzbyBmNjQucHJvbW90ZV9mMzIgaXMg Y29uY2VwdHVhbGx5IGEgbm8tb3AgZXhjZXB0IHRoYXQgd2FzbSByZXF1aXJlcwotKyAgICAvLyBz TmFOIGlucHV0cyB0byBiZSBxdWlldGVkLiBmcnNwIChSb3VuZCB0byBTaW5nbGUtUHJlY2lzaW9u KSBpcyB0aGUKLSsgICAgLy8gaWRlbnRpdHkgZm9yIFNQLXJlcHJlc2VudGFibGUgaW5wdXRzIGJ1 dCBhcHBsaWVzIElFRUUgTmFOLXF1aWV0aW5nIGFzCi0rICAgIC8vIGEgc2lkZSBlZmZlY3QsIHJl cGxhY2luZyB0aGUgcHJpb3IgZm1yICsgZmNtcHUgKyBicmFuY2ggKyBjYW5vbmljYWwtCi0rICAg IC8vIE5hTi1sb2FkICg1KyBpbnNucyArIHNjcmF0Y2ggR1BSKSB3aXRoIGEgc2luZ2xlIGluc3Ry dWN0aW9uLiBSZXN1bHQKLSsgICAgLy8gbWF0Y2hlcyB3aGF0IHg4NiB2Y3Z0c3Myc2QgLyBBUk0g ZmN2dCBwcm9kdWNlLgotKyAgICBhc19mcnNwKGRlc3QsIHNyYyk7Ci0rICB9Ci0rICB2b2lkIGNv bnZlcnRJbnQzMlRvRmxvYXQzMihSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgICAvLyBtdHZzcndhICsgZmNmaWRzOyBzYW1lIHJlY2lwZSBhcyBjb252ZXJ0SW50MzJUb0Rv dWJsZShSZWdpc3RlcikuCi0rICAgIGFzX210dnNyd2EoZGVzdCwgc3JjKTsKLSsgICAgYXNfZmNm aWRzKGRlc3QsIGRlc3QpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0SW50MzJUb0Zsb2F0MzIoY29u c3QgQWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgLy8gbGZpd2F4ICsg ZmNmaWRzOyBzYW1lIHJlY2lwZSBhcyBjb252ZXJ0SW50MzJUb0RvdWJsZShBZGRyZXNzKS4KLSsg ICAgaWYgKHNyYy5vZmZzZXQgPT0gMCkgewotKyAgICAgIGFzX2xmaXdheChkZXN0LCByMCwgc3Jj LmJhc2UpOwotKyAgICB9IGVsc2UgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2KSkgewotKyAgICAgICAgYXNfYWRkaShz Y3JhdGNoLCBzcmMuYmFzZSwgc3JjLm9mZnNldCk7Ci0rICAgICAgICBhc19sZml3YXgoZGVzdCwg cjAsIHNjcmF0Y2gpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBtb3ZlUHRyKEltbVdvcmQo c3JjLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICAgICAgYXNfbGZpd2F4KGRlc3QsIHNyYy5iYXNl LCBzY3JhdGNoKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgYXNfZmNmaWRzKGRlc3QsIGRlc3Qp OwotKyAgfQotKwotKyAgLy8gUE9XRVI5IEZQMTYgbG9hZDogbHhzaWh6eCB3cml0ZXMgdGhlIDIg bWVtb3J5IGJ5dGVzIGRpcmVjdGx5IGludG8KLSsgIC8vIGR3WzBdIGxvdyAxNiBiaXRzIHdpdGgg dGhlIHJlc3QgemVyb2VkIOKAlCBtYXRjaGluZyB0aGUgbGF5b3V0IHRoYXQKLSsgIC8vIHhzY3Zo cGRwIGV4cGVjdHMsIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgotKyAgRmF1bHRpbmdDb2RlT2Zm c2V0IGxvYWRGbG9hdDE2KGNvbnN0IEFkZHJlc3MmIGFkZHIsIEZsb2F0UmVnaXN0ZXIgZGVzdCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICAg IE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOwotKyAgICBpZiAoYWRkci5vZmZzZXQgPT0gMCkgewot KyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHhzaWh6eChkZXN0LCByMCwgYWRk ci5iYXNlKS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgaWYgKGlzX2ludE4oYWRkci5vZmZz ZXQsIDE2KSkgewotKyAgICAgIGFzX2FkZGkodGVtcCwgYWRkci5iYXNlLCBhZGRyLm9mZnNldCk7 Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19seHNpaHp4KGRlc3QsIHIwLCB0 ZW1wKS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zm c2V0KSwgdGVtcCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHhzaWh6eChk ZXN0LCBhZGRyLmJhc2UsIHRlbXApLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29k ZU9mZnNldCBsb2FkRmxvYXQxNihjb25zdCBCYXNlSW5kZXgmIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXApIHsK LSsgICAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7Ci0rICAgIGNvbXB1dGVFZmZlY3RpdmVBZGRy ZXNzKHNyYywgdGVtcCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHhzaWh6 eChkZXN0LCByMCwgdGVtcCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKwotKyAgLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICAvLyBFZmZlY3RpdmUgYWRkcmVzcyBjb21wdXRhdGlvbgotKwotKyAgdm9pZCBjb21wdXRlU2Nh bGVkQWRkcmVzcyhjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsg ICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0gVGltZXNPbmUpIHsKLSsgICAgICBhc19hZGQoZGVzdCwg YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4KTsKLSsgICAgfSBlbHNlIGlmIChkZXN0ICE9IGFk ZHJlc3MuYmFzZSAmJiBkZXN0ICE9IGFkZHJlc3MuaW5kZXgpIHsKLSsgICAgICB4X3NsZGkoZGVz dCwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7Ci0rICAgICAgYXNfYWRkKGRlc3QsIGFk ZHJlc3MuYmFzZSwgZGVzdCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICAgICAgeF9zbGRpKHNjcmF0Y2gsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Mu c2NhbGUpOwotKyAgICAgIGFzX2FkZChkZXN0LCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpOwotKyAg ICB9Ci0rICB9Ci0rCi0rICB2b2lkIGNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGNvbnN0IEFkZHJl c3MmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgaWYgKGFkZHJlc3Mub2Zmc2V0ID09 IDApIHsKLSsgICAgICBpZiAoZGVzdCAhPSBhZGRyZXNzLmJhc2UpIHsKLSsgICAgICAgIHhzX21y KGRlc3QsIGFkZHJlc3MuYmFzZSk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgaWYgKGlzX2ludE4o YWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAgICAgIGFzX2FkZGkoZGVzdCwgYWRkcmVzcy5iYXNl LCBhZGRyZXNzLm9mZnNldCk7Ci0rICAgIH0gZWxzZSBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2lu dE4oYWRkcmVzcy5vZmZzZXQsIDM0KSkgewotKyAgICAgIC8vIFNpbmdsZS1pbnNuIDM0LWJpdC1z aWduZWQgcmVnK2ltbSBhZGQuIEF2b2lkcyB0aGUgc2NyYXRjaCBHUFIuCi0rICAgICAgYXNfcGFk ZGkoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgLypSPSovZmFsc2UpOwotKyAg ICB9IGVsc2UgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK LSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIE1PWl9B U1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5v ZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgICBhc19hZGQoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3Jh dGNoKTsKLSsgICAgfQotKyAgfQotKyAgdm9pZCBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhjb25z dCBCYXNlSW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgY29tcHV0ZVNjYWxl ZEFkZHJlc3MoYWRkcmVzcywgZGVzdCk7Ci0rICAgIGlmIChhZGRyZXNzLm9mZnNldCkgewotKyAg ICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICAgIGFzX2FkZGko ZGVzdCwgZGVzdCwgYWRkcmVzcy5vZmZzZXQpOwotKyAgICAgIH0gZWxzZSBpZiAoSGFzUE9XRVIx MCgpICYmIGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDM0KSkgewotKyAgICAgICAgYXNfcGFkZGko ZGVzdCwgZGVzdCwgYWRkcmVzcy5vZmZzZXQsIC8qUj0qL2ZhbHNlKTsKLSsgICAgICB9IGVsc2Ug ewotKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICAg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICAgIE1PWl9BU1NF UlQoc2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9m ZnNldCksIHNjcmF0Y2gpOwotKyAgICAgICAgYXNfYWRkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwot KyAgICAgIH0KLSsgICAgfQotKyAgfQotKwotKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICAvLyBNb3ZlIGluc3Ry dWN0aW9ucwotKwotKyAgdm9pZCBtb3YoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7IHhz X21yKGRlc3QsIHNyYyk7IH0KLSsgIHZvaWQgbW92KEltbVdvcmQgaW1tLCBSZWdpc3RlciBkZXN0 KSB7IG1vdmVQdHIoaW1tLCBkZXN0KTsgfQotKyAgdm9pZCBtb3YoSW1tUHRyIGltbSwgUmVnaXN0 ZXIgZGVzdCkgewotKyAgICBtb3YoSW1tV29yZCh1aW50cHRyX3QoaW1tLnZhbHVlKSksIGRlc3Qp OwotKyAgfQotKyAgLy8gRW1pdCBhbiA4LWluc3RydWN0aW9uIE5PUCBzdGFuemEgZm9yIGEgcGF0 Y2hhYmxlIDY0LWJpdCBsb2FkLgotKyAgLy8gUG9vbCBmbHVzaGVzIGFyZSBpbmhpYml0ZWQgZHVy aW5nIGVtaXNzaW9uIHRvIHByZXZlbnQgcG9vbCBkYXRhCi0rICAvLyBmcm9tIGJlaW5nIGluc2Vy dGVkIG1pZC1zdGFuemEuCi0rICBCdWZmZXJPZmZzZXQgZW1pdExvYWQ2NFN0YW56YShSZWdpc3Rl ciBkZXN0LCB1aW50NjRfdCB2YWx1ZSkgewotKyAgICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Q b29sTG9hZDY0U3RhbnphSW5zbnMpOwotKyAgICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3Qo Tm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcElu c3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsK LSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAg IHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgICAg Ly8gSWYgYW55IG9mIHRoZSA4IHdyaXRlSW5zdCBjYWxscyBoaXQgT09NLCBvbmx5IHNvbWUgb2Yg dGhlIHN0YW56YQotKyAgICAvLyB3YXMgcmVzZXJ2ZWQgaW4gdGhlIGJ1ZmZlci4gV3JpdGVMb2Fk NjRJbnN0cnVjdGlvbnMgd3JpdGVzIDMyIGJ5dGVzCi0rICAgIC8vIHVuY29uZGl0aW9uYWxseSwg c28gY2FsbGluZyBpdCBoZXJlIHdvdWxkIG92ZXJmbG93IHRoZSBWZWN0b3IncwotKyAgICAvLyBi YWNraW5nIHN0b3JlIGFuZCBjb3JydXB0IHRoZSBuZXh0IGhlYXAgY2h1bmsncyBtZXRhZGF0YSwg c3VyZmFjaW5nCi0rICAgIC8vIGxhdGVyIGFzIGEgbWFsbG9jLWRldGVjdGVkIGZyZWUtdGltZSBj cmFzaC4KLSsgICAgaWYgKG1fYnVmZmVyLm9vbSgpKSB7Ci0rICAgICAgcmV0dXJuIGJvOwotKyAg ICB9Ci0rICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKChJbnN0cnVjdGlvbiopZWRpdFNyYyhi byksIGRlc3QsIHZhbHVlKTsKLSsgICAgcmV0dXJuIGJvOwotKyAgfQotKwotKyAgdm9pZCBtb3Yo Q29kZUxhYmVsKiBsYWJlbCwgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBCdWZmZXJPZmZzZXQgYm8g PSBlbWl0TG9hZDY0U3RhbnphKGRlc3QsIExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOwotKyAg ICBsYWJlbC0+cGF0Y2hBdCgpLT5iaW5kKGJvLmdldE9mZnNldCgpKTsKLSsgICAgbGFiZWwtPnNl dExpbmtNb2RlKENvZGVMYWJlbDo6TW92ZUltbWVkaWF0ZSk7Ci0rICB9Ci0rICB2b2lkIG1vdihS ZWdpc3RlciBzcmMsIEFkZHJlc3MgZGVzdCkgeyBzdG9yZVB0cihzcmMsIGRlc3QpOyB9Ci0rICB2 b2lkIG1vdihBZGRyZXNzIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBsb2FkUHRyKHNyYywgZGVzdCk7 IH0KLSsKLSsgIHZvaWQgbW92ZTMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBp ZiAoaXNfaW50TihpbW0udmFsdWUsIDE2KSkgewotKyAgICAgIHhzX2xpKGRlc3QsIChpbnQxNl90 KWltbS52YWx1ZSk7Ci0rICAgIH0gZWxzZSBpZiAoaXNfdWludE4oKHVpbnQzMl90KWltbS52YWx1 ZSwgMTYpKSB7Ci0rICAgICAgeHNfbGkoZGVzdCwgMCk7Ci0rICAgICAgYXNfb3JpKGRlc3QsIGRl c3QsICh1aW50MTZfdClpbW0udmFsdWUpOwotKyAgICB9IGVsc2UgewotKyAgICAgIHhzX2xpcyhk ZXN0LCAoaW50MTZfdCkoKHVpbnQzMl90KWltbS52YWx1ZSA+PiAxNikpOwotKyAgICAgIGlmIChp bW0udmFsdWUgJiAweGZmZmYpIHsKLSsgICAgICAgIGFzX29yaShkZXN0LCBkZXN0LCAodWludDE2 X3QpaW1tLnZhbHVlKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0KLSsgIHZvaWQgbW92ZTMyKFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBhc19leHRzdyhkZXN0LCBzcmMpOyB9Ci0rCi0r ICB2b2lkIG1vdmVQdHIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChz cmMgIT0gZGVzdCkgewotKyAgICAgIHhzX21yKGRlc3QsIHNyYyk7Ci0rICAgIH0KLSsgIH0KLSsg IHZvaWQgbW92ZVB0cihJbW1Xb3JkIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAoaW1t LnZhbHVlID09IDApIHsKLSsgICAgICB4c19saShkZXN0LCAwKTsKLSsgICAgfSBlbHNlIGlmIChp c19pbnROKChpbnRwdHJfdClpbW0udmFsdWUsIDE2KSkgewotKyAgICAgIHhzX2xpKGRlc3QsIChp bnQxNl90KWltbS52YWx1ZSk7Ci0rICAgIH0gZWxzZSBpZiAoaXNfdWludE4oaW1tLnZhbHVlLCAx NikpIHsKLSsgICAgICB4c19saShkZXN0LCAwKTsKLSsgICAgICBhc19vcmkoZGVzdCwgZGVzdCwg KHVpbnQxNl90KWltbS52YWx1ZSk7Ci0rICAgIH0gZWxzZSBpZiAoaXNfaW50TigoaW50cHRyX3Qp aW1tLnZhbHVlLCAzMikpIHsKLSsgICAgICAvLyAzMi1iaXQgc2lnbmVkOiBsaXMgKyBvcmkgKDIg aW5zdHJ1Y3Rpb25zKS4KLSsgICAgICB4c19saXMoZGVzdCwgKGludDE2X3QpKCh1aW50MzJfdClp bW0udmFsdWUgPj4gMTYpKTsKLSsgICAgICBpZiAoaW1tLnZhbHVlICYgMHhGRkZGKSB7Ci0rICAg ICAgICBhc19vcmkoZGVzdCwgZGVzdCwgKHVpbnQxNl90KWltbS52YWx1ZSk7Ci0rICAgICAgfQot KyAgICB9IGVsc2UgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClpbW0udmFs dWUsIDM0KSkgewotKyAgICAgIC8vIFBPV0VSMTAgc2luZ2xlLWluc3RydWN0aW9uIDM0LWJpdCBz aWduZWQgaW1tZWRpYXRlLiBSZXBsYWNlcyB0aGUKLSsgICAgICAvLyA1LWluc24gZmFsbGJhY2sg Zm9yIHZhbHVlcyBpbiAoMzMtMzQpLWJpdCBzaWduZWQgcmFuZ2UuCi0rICAgICAgLy8gOCBieXRl cyB2cyAyMCBieXRlczsgb25lIHNsb3QgdGVtcCByZWdpc3RlciBpcyBubyBsb25nZXIgbmVlZGVk LgotKyAgICAgIGFzX3BhZGRpKGRlc3QsIHIwLCAoaW50NjRfdClpbW0udmFsdWUsIC8qUj0qL2Zh bHNlKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAvLyBGdWxsIDY0LWJpdDogR0NDLXN0eWxlIGxp cytvcmkrbGlzK29yaStybGRpbWkgKDUgaW5zdHJ1Y3Rpb25zKS4KLSsgICAgICAvLyBObyBMUiBj bG9iYmVyLCBubyBlbWJlZGRlZCBkYXRhIOKAlCBwdXJlIGluc3RydWN0aW9uIHNlcXVlbmNlLgot KyAgICAgIHVpbnQzMl90IGxvMzIgPSAodWludDMyX3QpKGltbS52YWx1ZSk7Ci0rICAgICAgdWlu dDMyX3QgaGkzMiA9ICh1aW50MzJfdCkoaW1tLnZhbHVlID4+IDMyKTsKLSsgICAgICBSZWdpc3Rl ciB0ZW1wID0gKGRlc3QgIT0gU2Vjb25kU2NyYXRjaFJlZykgPyBTZWNvbmRTY3JhdGNoUmVnCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU2F2ZWRT Y3JhdGNoUmVnaXN0ZXI7Ci0rICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoNSAqIHNpemVvZih1 aW50MzJfdCkpOwotKyAgICAgIHhzX2xpcyhkZXN0LCAoaW50MTZfdCkobG8zMiA+PiAxNikpOwot KyAgICAgIGFzX29yaShkZXN0LCBkZXN0LCBsbzMyICYgMHhGRkZGKTsKLSsgICAgICB4c19saXMo dGVtcCwgKGludDE2X3QpKGhpMzIgPj4gMTYpKTsKLSsgICAgICBhc19vcmkodGVtcCwgdGVtcCwg aGkzMiAmIDB4RkZGRik7Ci0rICAgICAgYXNfcmxkaW1pKGRlc3QsIHRlbXAsIDMyLCAwKTsKLSsg ICAgfQotKyAgfQotKyAgdm9pZCBtb3ZlUHRyKEltbVB0ciBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsK LSsgICAgbW92ZVB0cihJbW1Xb3JkKHVpbnRwdHJfdChpbW0udmFsdWUpKSwgZGVzdCk7Ci0rICB9 Ci0rCi0rICAvLyBMb2FkIGEgNjQtYml0IEZQUiBjb25zdGFudCBmcm9tIHRoZSBpbmxpbmUgY29u c3RhbnQgcG9vbC4KLSsgIC8vIFBPV0VSOTogMiBpbnN0cnVjdGlvbnMgKGFkZHBjaXMgKyBsZmQp IC0tIG5vIGFsaWdubWVudCBjb25zdHJhaW50LgotKyAgLy8gUE9XRVIxMDogMSBwcmVmaXhlZCBp bnN0cnVjdGlvbiAocGxmZCwgMiBzbG90cyksIG9yIDMgc2xvdHMgaW4gdGhlCi0rICAvLyAgIChs b2FkQWRkciAmIDYzKSA9PSA2MCBhbGlnbm1lbnQtbGVhZGluZy1ub3AgY2FzZS4gUmVzZXJ2ZSAz IHRvCi0rICAvLyAgIGNvdmVyIGJvdGggY2FzZXMgY29uc2VydmF0aXZlbHkuCi0rICAvLyBQT1dF Ujg6IG5vdCB1c2VkIC0tIGxvYWRDb25zdGFudERvdWJsZSBpbmxpbmVzIHRoZSBjb25zdGFudC4K LSsgIEJ1ZmZlck9mZnNldCBsb2FkRnJvbVBvb2xGbG9hdDY0KEZsb2F0UmVnaXN0ZXIgZGVzdCwg ZG91YmxlIHZhbHVlKSB7Ci0rICAgIHNpemVfdCBzbG90cyA9IEhhc1BPV0VSMTAoKSA/IDMgOiAy OwotKyAgICB1aW50MzJfdCBoaW50ID0gKHVpbnQzMl90KGRlc3QuZW5jb2RpbmcoKSkgPDwgMTYp IHwKLSsgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChQb29sTG9hZEZQUjY0KSA8PCAyMSkg fCAweEYwMDAwMDAwOwotKyAgICB1aW50MzJfdCBpbnN0WzNdID0ge2hpbnQsIE5vcEluc3QsIE5v cEluc3R9OwotKyAgICByZXR1cm4gbV9idWZmZXIuYWxsb2NFbnRyeShzbG90cywgMiwgKHVpbnQ4 X3QqKWluc3QsICh1aW50OF90KikmdmFsdWUpOwotKyAgfQotKyAgLy8gTG9hZCBhIDMyLWJpdCBG UFIgY29uc3RhbnQgZnJvbSB0aGUgaW5saW5lIGNvbnN0YW50IHBvb2wuCi0rICAvLyBTYW1lIHNo YXBlIGFzIGxvYWRGcm9tUG9vbEZsb2F0NjQgKGFib3ZlKS4gbGZzL3BsZnMgYXV0by1leHBhbmQg dGhlCi0rICAvLyAzMi1iaXQgc2luZ2xlLXByZWNpc2lvbiB2YWx1ZSB0byBkb3VibGUgaW4gdGhl IEZQUiwgc28gbm8gZm9sbG93LXVwCi0rICAvLyB4c2N2c3BkcG4gaXMgbmVlZGVkLgotKyAgQnVm ZmVyT2Zmc2V0IGxvYWRGcm9tUG9vbEZsb2F0MzIoRmxvYXRSZWdpc3RlciBkZXN0LCBmbG9hdCB2 YWx1ZSkgewotKyAgICBzaXplX3Qgc2xvdHMgPSBIYXNQT1dFUjEwKCkgPyAzIDogMjsKLSsgICAg dWludDMyX3QgaGludCA9ICh1aW50MzJfdChkZXN0LmVuY29kaW5nKCkpIDw8IDE2KSB8Ci0rICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExvYWRGUFIzMikgPDwgMjEpIHwgMHhGMDAw MDAwMDsKLSsgICAgdWludDMyX3QgaW5zdFszXSA9IHtoaW50LCBOb3BJbnN0LCBOb3BJbnN0fTsK LSsgICAgcmV0dXJuIG1fYnVmZmVyLmFsbG9jRW50cnkoc2xvdHMsIDEsICh1aW50OF90KilpbnN0 LCAodWludDhfdCopJnZhbHVlKTsKLSsgIH0KLSsgIC8vIExvYWQgYSAxMjgtYml0IFNJTUQgY29u c3RhbnQgZnJvbSB0aGUgaW5saW5lIGNvbnN0YW50IHBvb2wuCi0rICAvLyBQZXItYXJjaCBzbG90 IHJlc2VydmF0aW9uIC0tIHRoZSBwYXRjaGVyIHdyaXRlcyBvbmx5IHRoZSBzbG90cwotKyAgLy8g ZWFjaCBtaWNyby1hcmNoIGFjdHVhbGx5IG5lZWRzOgotKyAgLy8gICBQODogNSAoYmNsICsgbWZs ciArIGFkZGkgKyBseHZkMnggKyB4eHBlcm1kaSkKLSsgIC8vICAgUDk6IDMgKGFkZHBjaXMgKyBh ZGRpICsgbHh2eCkgLS0gbm8gTFIgdG91Y2gsIG5vIFJBUyBoYXphcmQKLSsgIC8vICAgUDEwOiAz IChhbGlnbm1lbnQtc2FmZTogcHJlZml4ICsgc3VmZml4ICsgMSByZXNlcnZlIGZvciB0aGUKLSsg IC8vICAgICAgICAgIChsb2FkQWRkciAmIDYzKSA9PSA2MCBsZWFkaW5nLW5vcCBjYXNlKQotKyAg Ly8gUG9vbCBlbnRyeSBpcyA0IMOXIDQtYnl0ZSB3b3JkcyA9IDE2IGJ5dGVzLiBQOSB1c2VzCi0r ICAvLyBTYXZlZFNjcmF0Y2hSZWdpc3RlciAocjE2KSBhcyB0aGUgUEMgYmFzZTsgUDEwIGVtaXRz IGEgc2luZ2xlCi0rICAvLyBQQy1yZWxhdGl2ZSBwbHh2IHdpdGggbm8gc2NyYXRjaCBhbmQgbm8g TFIgdG91Y2guIE9ubHkgUDggc3RpbGwKLSsgIC8vIGNsb2JiZXJzIExSIChjb3JyZWN0bmVzcy1v bmx5IGZhbGxiYWNrOyBsaXZlIGJ5IGRlc2lnbikuCi0rICBCdWZmZXJPZmZzZXQgbG9hZEZyb21Q b29sU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBTaW1kQ29uc3RhbnQmIHYpIHsKLSsgICAgc2l6ZV90IHNsb3RzOwot KyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgICAgc2xvdHMgPSAzOwotKyAgICB9IGVsc2Ug aWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgc2xvdHMgPSAzOwotKyAgICB9IGVsc2UgewotKyAg ICAgIHNsb3RzID0gNTsKLSsgICAgfQotKyAgICAvLyBTaW1kMTI4IGVuY29kaW5nIGlzIDMyLTYz OyBtYXNrIHRvIDUgYml0cyBmb3IgaGludC4KLSsgICAgLy8gUGF0Y2hDb25zdGFudFBvb2xMb2Fk IHNldHMgVFggYml0IHVuY29uZGl0aW9uYWxseSBmb3IgU2ltZDEyOC4KLSsgICAgdWludDMyX3Qg aGludCA9ICgodWludDMyX3QoZGVzdC5lbmNvZGluZygpKSAmIDB4MUYpIDw8IDE2KSB8Ci0rICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExvYWRTaW1kMTI4KSA8PCAyMSkgfCAweEYw MDAwMDAwOwotKyAgICB1aW50MzJfdCBpbnN0WzVdID0ge2hpbnQsIE5vcEluc3QsIE5vcEluc3Qs IE5vcEluc3QsIE5vcEluc3R9OwotKyAgICByZXR1cm4gbV9idWZmZXIuYWxsb2NFbnRyeShzbG90 cywgNCwgKHVpbnQ4X3QqKWluc3QsICh1aW50OF90Kil2LmJ5dGVzKCkpOwotKyAgfQotKyAgdm9p ZCBtb3ZlUHRyKHdhc206OlN5bWJvbGljQWRkcmVzcyBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsg ICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0YW56YShkZXN0LCAodWludDY0X3QpLTEp OwotKyAgICBhcHBlbmQod2FzbTo6U3ltYm9saWNBY2Nlc3MoQ29kZU9mZnNldChiby5nZXRPZmZz ZXQoKSksIGltbSkpOwotKyAgfQotKyAgdm9pZCBtb3ZlUHRyKEltbUdDUHRyIGltbSwgUmVnaXN0 ZXIgZGVzdCkgewotKyAgICBCdWZmZXJPZmZzZXQgYm8gPSBlbWl0TG9hZDY0U3RhbnphKGRlc3Qs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KXVpbnRw dHJfdChpbW0udmFsdWUpKTsKLSsgICAgQXNzZW1ibGVyOjp3cml0ZURhdGFSZWxvY2F0aW9uKGJv LCBpbW0pOwotKyAgfQotKwotKyAgdm9pZCBtb3ZlRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChzcmMgIT0gZGVzdCkgewotKyAgICAgIGFz X2ZtcihkZXN0LCBzcmMpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIG1vdmVEb3VibGUoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAoc3JjICE9IGRlc3Qp IHsKLSsgICAgICBhc19mbXIoZGVzdCwgc3JjKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICAvLyBCcmFuY2ggZnVuY3Rpb25zCi0rCi0rICB2b2lkIGJyYW5jaChKaXRDb2RlKiBj KSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgQnVmZmVyT2Zmc2V0IGJvID0g ZW1pdExvYWQ2NFN0YW56YShzY3JhdGNoLCAodWludDY0X3QpdWludHB0cl90KGMtPnJhdygpKSk7 Ci0rICAgIGFkZFBlbmRpbmdKdW1wKGJvLCBJbW1QdHIoYy0+cmF3KCkpLCBSZWxvY2F0aW9uS2lu ZDo6SklUQ09ERSk7Ci0rICAgIHhzX210Y3RyKHNjcmF0Y2gpOwotKyAgICBhc19iY3RyKCk7Ci0r ICB9Ci0rICB2b2lkIGJyYW5jaChjb25zdCBSZWdpc3RlciByZWcpIHsKLSsgICAgeHNfbXRjdHIo cmVnKTsKLSsgICAgYXNfYmN0cigpOwotKyAgfQotKwotKyAgdm9pZCBqdW1wKExhYmVsKiBsYWJl bCkgewotKyAgICBpZiAobGFiZWwtPmJvdW5kKCkpIHsKLSsgICAgICAvLyBPcGVuIHRoZSBuby1w b29sIHdpbmRvdyBCRUZPUkUgY29tcHV0aW5nIHRoZSBkaXNwbGFjZW1lbnQuIFRoZQotKyAgICAg IC8vIGVudGVyTm9Qb29sKCkgY2FsbCBpdHNlbGYgY2FuIHRyaWdnZXIgYSBwb29sIGZsdXNoLCB3 aGljaCBhZHZhbmNlcwotKyAgICAgIC8vIGN1cnJlbnRPZmZzZXQoKS4gQ29tcHV0aW5nIHRoZSBk aXNwbGFjZW1lbnQgYWdhaW5zdCB0aGUgcHJlLWZsdXNoCi0rICAgICAgLy8gb2Zmc2V0IGFuZCB0 aGVuIGVtaXR0aW5nIHRoZSBiIGF0IHRoZSBwb3N0LWZsdXNoIG9mZnNldCB3b3VsZCBsYW5kCi0r ICAgICAgLy8gdGhlIGJyYW5jaCAocG9vbFNpemUpIGJ5dGVzIHBhc3QgdGhlIGludGVuZGVkIHRh cmdldC4KLSsgICAgICBtX2J1ZmZlci5lbnRlck5vUG9vbCgyKTsKLSsgICAgICBpbnQzMl90IG9m ZnNldCA9IGxhYmVsLT5vZmZzZXQoKSAtIGN1cnJlbnRPZmZzZXQoKTsKLSsgICAgICBpZiAoSk9m ZkltbTI2OjpJc0luUmFuZ2Uob2Zmc2V0KSkgewotKyAgICAgICAgYXNfYihvZmZzZXQpOwotKyAg ICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICAgICAgbV9idWZmZXIubGVhdmVOb1Bvb2wo KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgICB9Ci0rICAgICAgbV9idWZmZXIubGVhdmVOb1Bv b2woKTsKLSsgICAgICAvLyBMb25nIGp1bXAgdG8gYm91bmQgbGFiZWwuCi0rICAgICAgQnVmZmVy T2Zmc2V0IGJvID0KLSsgICAgICAgICAgZW1pdExvYWQ2NFN0YW56YShTZWNvbmRTY3JhdGNoUmVn LCBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKLSsgICAgICB4c19tdGN0cihTZWNvbmRTY3Jh dGNoUmVnKTsKLSsgICAgICBhc19iY3RyKCk7Ci0rICAgICAgYWRkTG9uZ0p1bXAoYm8sIEJ1ZmZl ck9mZnNldChsYWJlbC0+b2Zmc2V0KCkpKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAg Ly8gVW5ib3VuZCBsYWJlbDogZW1pdCB0cmFwLXRhZ2dlZCBzdGFuemEgKDEwIHNsb3RzKS4KLSsg ICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKLSsg ICAgQnVmZmVyT2Zmc2V0IGJvID0geHNfdHJhcF90YWdnZWQoQlRhZyk7Ci0rICAgIHdyaXRlSW5z dChsYWJlbC0+dXNlZCgpID8gbGFiZWwtPm9mZnNldCgpIDogTGFiZWxCYXNlOjpJTlZBTElEX09G RlNFVCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3Qp OwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsg ICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICBtX2J1ZmZl ci5sZWF2ZU5vUG9vbCgpOwotKyAgICBpZiAoIW9vbSgpKSB7Ci0rICAgICAgbGFiZWwtPnVzZShi by5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgIH0KLSsgIHZvaWQganVtcChSZWdpc3RlciByZWcp IHsKLSsgICAgeHNfbXRjdHIocmVnKTsKLSsgICAgYXNfYmN0cigpOwotKyAgfQotKyAgdm9pZCBq dW1wKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgICBsb2FkUHRyKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgICB4c19tdGN0cihzY3JhdGNo KTsKLSsgICAgYXNfYmN0cigpOwotKyAgfQotKyAgdm9pZCBqdW1wKEppdENvZGUqIGNvZGUpIHsg YnJhbmNoKGNvZGUpOyB9Ci0rICB2b2lkIGp1bXAoSW1tUHRyIHB0cikgewotKyAgICBCdWZmZXJP ZmZzZXQgYm8gPQotKyAgICAgICAgZW1pdExvYWQ2NFN0YW56YShTZWNvbmRTY3JhdGNoUmVnLCAo dWludDY0X3QpdWludHB0cl90KHB0ci52YWx1ZSkpOwotKyAgICBhZGRQZW5kaW5nSnVtcChibywg cHRyLCBSZWxvY2F0aW9uS2luZDo6SEFSRENPREVEKTsKLSsgICAgeHNfbXRjdHIoU2Vjb25kU2Ny YXRjaFJlZyk7Ci0rICAgIGFzX2JjdHIoKTsKLSsgIH0KLSsgIHZvaWQganVtcChUcmFtcG9saW5l UHRyIGNvZGUpIHsganVtcChJbW1QdHIoY29kZS52YWx1ZSkpOyB9Ci0rCi0rICAvLyBDb25kaXRp b25hbCBicmFuY2ggdG8gbGFiZWwuIEFzc3VtZXMgYSBjb21wYXJlIGluc3RydWN0aW9uIGhhcyBh bHJlYWR5Ci0rICAvLyBiZWVuIGVtaXR0ZWQgdGhhdCBzZXRzIENSMC4KLSsgIHRlbXBsYXRlIDx0 eXBlbmFtZSBDb25kVD4KLSsgIHZvaWQgbWFfYihDb25kVCBjb25kLCBMYWJlbCogbGFiZWwpIHsK LSsgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxDb25kVCwgQ29uZGl0aW9uPikgewot KyAgICAgIGlmIChjb25kID09IEFsd2F5cykgewotKyAgICAgICAganVtcChsYWJlbCk7Ci0rICAg ICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICB9Ci0rICAgIGlmIChsYWJlbC0+Ym91bmQoKSkg ewotKyAgICAgIC8vIE9wZW4gdGhlIG5vLXBvb2wgd2luZG93IEJFRk9SRSBjb21wdXRpbmcgdGhl IGRpc3BsYWNlbWVudC4gU2FtZQotKyAgICAgIC8vIGhhemFyZCBhcyBqdW1wKCk6IGVudGVyTm9Q b29sIG1heSBpdHNlbGYgZmx1c2ggYSBwZW5kaW5nIHBvb2wsCi0rICAgICAgLy8gYWR2YW5jaW5n IGN1cnJlbnRPZmZzZXQoKTsgdGhlIGJjIG11c3QgZW1pdCB3aXRoIGEgZGlzcGxhY2VtZW50Ci0r ICAgICAgLy8gY29tcHV0ZWQgYWdhaW5zdCB0aGUgcG9zdC1mbHVzaCBvZmZzZXQuIEJ1ZGdldCBj b3ZlcnMgbWF4IDYKLSsgICAgICAvLyBpbnN0cnVjdGlvbnM6IFBPV0VSOCBPdmVyZmxvdyBYRVIg b3BzICgzKSArIGNyb3IgKDEpICsgYmMgKDEpICsKLSsgICAgICAvLyBub3AgKDEpIGZvciB0aGUg d29yc3QtY2FzZSBEb3VibGVDb25kaXRpb24rT3ZlcmZsb3cgc2hvcnQgcGF0aC4KLSsgICAgICBt X2J1ZmZlci5lbnRlck5vUG9vbCg2KTsKLSsgICAgICAvLyBGb3IgRG91YmxlQ29uZGl0aW9uLCBh c19iYyBlbWl0cyBjcm9yL2NyYW5kYyBiZWZvcmUgdGhlIGJjCi0rICAgICAgLy8gaW5zdHJ1Y3Rp b24sIGFkdmFuY2luZyBjdXJyZW50T2Zmc2V0KCkgYnkgNC4gQWNjb3VudCBmb3IgdGhpcwotKyAg ICAgIC8vIGluIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uCi0rICAgICAgaW50MzJfdCBjckFkanVz dCA9IDA7Ci0rICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxDb25kVCwgRG91Ymxl Q29uZGl0aW9uPikgewotKyAgICAgICAgY3JBZGp1c3QgPSAtKGludDMyX3Qpc2l6ZW9mKHVpbnQz Ml90KTsKLSsgICAgICB9Ci0rICAgICAgaW50MzJfdCBvZmZzZXQgPSBsYWJlbC0+b2Zmc2V0KCkg LSBjdXJyZW50T2Zmc2V0KCkgKyBjckFkanVzdDsKLSsgICAgICBpZiAoQk9mZkltbTE2OjpJc0lu UmFuZ2Uob2Zmc2V0KSkgewotKyAgICAgICAgYXNfYmMoKGludDE2X3Qpb2Zmc2V0LCBjb25kKTsK LSsgICAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgICAgIG1fYnVmZmVyLmxlYXZlTm9Q b29sKCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIG1fYnVmZmVyLmxlYXZl Tm9Qb29sKCk7Ci0rICAgICAgLy8gTG9uZyBjb25kaXRpb25hbCBicmFuY2ggZm9yIGJvdW5kIGxh YmVsLgotKyAgICAgIC8vIFhFUiBvcHMoMC0zKSArIGNyb3IoMC0xKSArIGJjKDEpICsgc3Rhbnph KDgpICsgbXRjdHIoMSkgKyBiY3RyKDEpLgotKyAgICAgIC8vIFA4IE92ZXJmbG93OiBtZnhlcity bHdpbm0rbXRjcmYrYmMrc3RhbnphK210Y3RyK2JjdHIgPSAxNCBtYXguCi0rICAgICAgbV9idWZm ZXIuZW50ZXJOb1Bvb2woa05vUG9vbENvbmRMb25nQnJhbmNoSW5zbnNQOE1heCk7Ci0rICAgICAg YXNfYmMoKGludDE2X3QpNDQsIEludmVydENvbmRpdGlvbihjb25kKSk7Ci0rICAgICAgQnVmZmVy T2Zmc2V0IGJvTG9hZCA9Ci0rICAgICAgICAgIGVtaXRMb2FkNjRTdGFuemEoU2Vjb25kU2NyYXRj aFJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgICAgeHNfbXRjdHIoU2Vjb25k U2NyYXRjaFJlZyk7Ci0rICAgICAgYXNfYmN0cigpOwotKyAgICAgIG1fYnVmZmVyLmxlYXZlTm9Q b29sKCk7Ci0rICAgICAgYWRkTG9uZ0p1bXAoYm9Mb2FkLCBCdWZmZXJPZmZzZXQobGFiZWwtPm9m ZnNldCgpKSk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIC8vIEZvcndhcmQgcmVmZXJl bmNlOiBlbWl0IEJDVGFnIHN0YW56YS4KLSsgICAgLy8gWEVSIG9wcygwLTMpICsgY3JvcigwLTEp ICsgYmMoMSkgKyB0cmFwX3RhZ2dlZCgxKSArIGNoYWluKDEpICsgOCBOT1BzLgotKyAgICAvLyBQ OCBPdmVyZmxvdzogbWZ4ZXIrcmx3aW5tK210Y3JmK2JjK3RyYXArY2hhaW4rOE5PUHMgPSAxNCBt YXguCi0rICAgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xDb25kTG9uZ0JyYW5jaEluc25z UDhNYXgpOwotKyAgICBhc19iYygoaW50MTZfdCk0NCwgSW52ZXJ0Q29uZGl0aW9uKGNvbmQpKTsK LSsgICAgQnVmZmVyT2Zmc2V0IGJvID0geHNfdHJhcF90YWdnZWQoQkNUYWcpOwotKyAgICB3cml0 ZUluc3QobGFiZWwtPnVzZWQoKSA/IGxhYmVsLT5vZmZzZXQoKSA6IExhYmVsQmFzZTo6SU5WQUxJ RF9PRkZTRVQpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJ bnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7 Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAg ICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgbV9i dWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgICAgaWYgKCFvb20oKSkgewotKyAgICAgIGxhYmVsLT51 c2UoYm8uZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICB9Ci0rCi0rICAvLyBTZXQgZGVzdCA9IDEg aWYgQ1IwIHNhdGlzZmllcyBjb25kLCBlbHNlIGRlc3QgPSAwLgotKyAgLy8gUE9XRVIxMDogc2V0 YmMvc2V0YmNyICgxIGluc24pLiBQOC9QOTogaXNlbC1iYXNlZCBwYXRoIHdpdGggdGhlCi0rICAv LyByMC1hcy16ZXJvIHRyaWNrIG9uIHRoZSBCcmFuY2hPbkNsZWFyIGhhbGYuCi0rICB2b2lkIG1h X2NtcF9zZXQoUmVnaXN0ZXIgZGVzdCwgQ29uZGl0aW9uIGNvbmQpIHsKLSsgICAgdWludDMyX3Qg YmFzZSA9IHVpbnQzMl90KGNvbmQpICYgMHhmZjsKLSsgICAgdWludDMyX3Qgc2V0YmFzZSA9IChi YXNlICYgfkJyYW5jaE9wdGlvbk1hc2spIHwgQnJhbmNoT25TZXQ7Ci0rICAgIGlmIChIYXNQT1dF UjEwKCkpIHsKLSsgICAgICBpZiAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hP blNldCkgewotKyAgICAgICAgYXNfc2V0YmMoZGVzdCwgc2V0YmFzZSwgY3IwKTsKLSsgICAgICB9 IGVsc2UgewotKyAgICAgICAgYXNfc2V0YmNyKGRlc3QsIHNldGJhc2UsIGNyMCk7Ci0rICAgICAg fQotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICAgIHhzX2xpKHNjcmF0Y2gsIDEpOwotKyAgICBpZiAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNr KSA9PSBCcmFuY2hPblNldCkgewotKyAgICAgIHhzX2xpKGRlc3QsIDApOwotKyAgICAgIGFzX2lz ZWwoZGVzdCwgc2NyYXRjaCwgZGVzdCwgc2V0YmFzZSwgY3IwKTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICBhc19pc2VsMChkZXN0LCByMCwgc2NyYXRjaCwgc2V0YmFzZSwgY3IwKTsKLSsgICAgfQot KyAgfQotKwotKyAgdm9pZCBtYV9jbXBfc2V0X2RibChSZWdpc3RlciBkZXN0LCBEb3VibGVDb25k aXRpb24gY29uZCkgewotKyAgICB1aW50MzJfdCBiYXNlID0gdWludDMyX3QoY29uZCkgJiAweGZm OwotKyAgICBib29sIGhhc1Vub3JkZXJlZEZsYWcgPSB1aW50MzJfdChjb25kKSAmIERvdWJsZUNv bmRpdGlvblVub3JkZXJlZDsKLSsgICAgdWludDMyX3Qgc2V0YmFzZSA9IChiYXNlICYgfkJyYW5j aE9wdGlvbk1hc2spIHwgQnJhbmNoT25TZXQ7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgICAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAgIGlmICgoYmFzZSAmIEJyYW5jaE9wdGlv bk1hc2spID09IEJyYW5jaE9uU2V0KSB7Ci0rICAgICAgICBhc19zZXRiYyhkZXN0LCBzZXRiYXNl LCBjcjApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBhc19zZXRiY3IoZGVzdCwgc2V0YmFz ZSwgY3IwKTsKLSsgICAgICB9Ci0rICAgICAgLy8gRml4dXAgcGF0aHMgYmVsb3cgc3RpbGwgbmVl ZCBzY3JhdGNoPTEgZm9yIHRoZSBTTy1pc2VsLgotKyAgICAgIGlmIChoYXNVbm9yZGVyZWRGbGFn IHx8ICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spICE9IEJyYW5jaE9uU2V0ICYmCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQgIT0gRG91YmxlT3JkZXJlZCkpIHsKLSsgICAg ICAgIHhzX2xpKHNjcmF0Y2gsIDEpOwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICB4 c19saShzY3JhdGNoLCAxKTsKLSsgICAgICBpZiAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9 PSBCcmFuY2hPblNldCkgewotKyAgICAgICAgeHNfbGkoZGVzdCwgMCk7Ci0rICAgICAgICBhc19p c2VsKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIHNldGJhc2UsIGNyMCk7Ci0rICAgICAgfSBlbHNlIHsK LSsgICAgICAgIGFzX2lzZWwwKGRlc3QsIHIwLCBzY3JhdGNoLCBzZXRiYXNlLCBjcjApOwotKyAg ICAgIH0KLSsgICAgfQotKyAgICBpZiAoaGFzVW5vcmRlcmVkRmxhZykgewotKyAgICAgIC8vIENv bmRpdGlvbiBpbmNsdWRlcyB1bm9yZGVyZWQgKE5hTik6IGZvcmNlIGRlc3Q9MSB3aGVuIFNPIGlz IHNldC4KLSsgICAgICAvLyBpc2VsIGRlc3QsIHNjcmF0Y2goPTEpLCBkZXN0LCBTTwotKyAgICAg IGFzX2lzZWwoZGVzdCwgc2NyYXRjaCwgZGVzdCwgdWludDE2X3QoU09CaXQpLCBjcjApOwotKyAg ICB9IGVsc2UgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9uTWFzaykgIT0gQnJhbmNoT25TZXQgJiYK LSsgICAgICAgICAgICAgICBjb25kICE9IERvdWJsZU9yZGVyZWQpIHsKLSsgICAgICAvLyBPcmRl cmVkIGNvbXBhcmlzb24gdGhhdCBuZWdhdGVzIGEgQ1IgYml0IChCcmFuY2hPbkNsZWFyKTogTmFO Ci0rICAgICAgLy8gcHJvZHVjZXMgYWxsLXplcm8gTFQvR1QvRVEgYml0cyB3aGljaCBtYWtlcyB0 aGUgbmVnYXRpb24gcmV0dXJuCi0rICAgICAgLy8gdHJ1ZS4gIEZpeCBieSBmb3JjaW5nIGRlc3Q9 MCB3aGVuIFNPIGlzIHNldC4KLSsgICAgICBhc19pc2VsMChkZXN0LCByMCwgZGVzdCwgdWludDE2 X3QoU09CaXQpLCBjcjApOwotKyAgICB9Ci0rICB9Ci0rCi0rICAvLyBDb25kaXRpb25hbCBtb3Zl OiBpZiBDUjAgc2F0aXNmaWVzIGNvbmQsIGRlc3QgPSBzcmMuCi0rICB2b2lkIG1hX2NtcF9tb3Zl KFJlZ2lzdGVyIGRlc3QsIFJlZ2lzdGVyIHNyYywgQ29uZGl0aW9uIGNvbmQpIHsKLSsgICAgdWlu dDMyX3QgYmFzZSA9IHVpbnQzMl90KGNvbmQpICYgMHhmZjsKLSsgICAgdWludDMyX3Qgc2V0YmFz ZSA9IChiYXNlICYgfkJyYW5jaE9wdGlvbk1hc2spIHwgQnJhbmNoT25TZXQ7Ci0rICAgIGlmICgo YmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJyYW5jaE9uU2V0KSB7Ci0rICAgICAgYXNfaXNl bChkZXN0LCBzcmMsIGRlc3QsIHNldGJhc2UsIGNyMCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg YXNfaXNlbChkZXN0LCBkZXN0LCBzcmMsIHNldGJhc2UsIGNyMCk7Ci0rICAgIH0KLSsgIH0KLSsK LSsgIC8vIElmIGNvbmQgPT0gMCwgbW92ZSBzcmMgdG8gZHN0OyBvdGhlcndpc2UgZHN0IGlzIHVu Y2hhbmdlZC4gVGhlIG9ubHkKLSsgIC8vIGNhbGxlcnMgYXJlIHdhc20gc2VsZWN0LCB3aG9zZSBj b25kaXRpb24gaXMgYSAzMi1iaXQgdmFsdWU6IHRlc3QgaXRzCi0rICAvLyAzMi1iaXQgc2lnbiB3 aXRoIGNtcHdpIHNvIGhpZ2gtYml0IGdhcmJhZ2UgKGUuZy4gdW5kZXIgcmVnaXN0ZXIgcHJlc3N1 cmUpCi0rICAvLyBkb2VzIG5vdCBtYWtlIGEgemVybyBjb25kaXRpb24gcmVhZCBhcyBub24temVy by4KLSsgIHZvaWQgbW92ZUlmWmVybyhSZWdpc3RlciBkc3QsIFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgY29uZCkgewotKyAgICBhc19jbXB3aShjb25kLCAwKTsKLSsgICAgYXNfaXNlbChkc3QsIHNy YywgZHN0LCBFcXVhbCwgY3IwKTsKLSsgIH0KLSsKLSsgIHZvaWQgbWFfYWRkMzJUZXN0Q2Fycnko Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgSW1tMzIgaW1tLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cpOwotKyAgdm9pZCBtYV9hZGRQ dHJUZXN0Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgSW1t V29yZCBpbW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cpOwot KwotKyAgLy8gSXNzdWUgdGhlIGNvcnJlY3QgY29tcGFyZSBpbnN0cnVjdGlvbiBmb3IgdGhlIGdp dmVuIGNvbmRpdGlvbiBhbmQKLSsgIC8vIG9wZXJhbmQgc2l6ZXMuIFJldHVybnMgdGhlIGNvbmRp dGlvbiB0byB1c2Ugd2l0aCBtYV9iIG9yIG1hX2NtcF9zZXQKLSsgIC8vICh1c3VhbGx5IHRoZSBz YW1lLCBidXQgdW5zaWduZWQgY29uZGl0aW9ucyB1c2UgY21wbCogdmFyaWFudHMpLgotKyAgQ29u ZGl0aW9uIG1hX2NtcChSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgQ29uZGl0aW9uIGNvbmQs Ci0rICAgICAgICAgICAgICAgICAgIGJvb2wgaXMzMmJpdCA9IGZhbHNlKSB7Ci0rICAgIENvbmRp dGlvbiBiYXNlID0KLSsgICAgICAgIHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH4oQ29u ZGl0aW9uVW5zaWduZWQgfCBDb25kaXRpb25aZXJvKSk7Ci0rICAgIGJvb2wgaXNVbnNpZ25lZCA9 IChjb25kICYgQ29uZGl0aW9uVW5zaWduZWQpICE9IDA7Ci0rICAgIC8vIENvbmRpdGlvblplcm8t ZmxhZ2dlZCBjb25kaXRpb25zIChTaWduZWQsIE5vdFNpZ25lZCwgWmVybywgTm9uWmVybykKLSsg ICAgLy8gdGVzdCBhIHNpbmdsZSByZWdpc3RlciBhZ2FpbnN0IHplcm8sIG5vdCB0d28gcmVnaXN0 ZXJzIGFnYWluc3QgZWFjaAotKyAgICAvLyBvdGhlci4gQ29tcGFyZSBhZ2FpbnN0IGltbWVkaWF0 ZSAwLgotKyAgICBpZiAoKGNvbmQgJiBDb25kaXRpb25aZXJvKSAhPSAwKSB7Ci0rICAgICAgaWYg KGlzMzJiaXQpIHsKLSsgICAgICAgIGFzX2NtcHdpKGxocywgMCk7Ci0rICAgICAgfSBlbHNlIHsK LSsgICAgICAgIGFzX2NtcGRpKGxocywgMCk7Ci0rICAgICAgfQotKyAgICAgIHJldHVybiBiYXNl OwotKyAgICB9Ci0rICAgIGlmIChpczMyYml0KSB7Ci0rICAgICAgaWYgKGlzVW5zaWduZWQpIHsK LSsgICAgICAgIGFzX2NtcGx3KGxocywgcmhzKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAg YXNfY21wdyhsaHMsIHJocyk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIGlmIChp c1Vuc2lnbmVkKSB7Ci0rICAgICAgICBhc19jbXBsZChsaHMsIHJocyk7Ci0rICAgICAgfSBlbHNl IHsKLSsgICAgICAgIGFzX2NtcGQobGhzLCByaHMpOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBy ZXR1cm4gYmFzZTsKLSsgIH0KLSsKLSsgIENvbmRpdGlvbiBtYV9jbXAoUmVnaXN0ZXIgbGhzLCBJ bW0zMiByaHMsIENvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAgICBib29sIGlzMzJi aXQgPSBmYWxzZSkgewotKyAgICBDb25kaXRpb24gYmFzZSA9Ci0rICAgICAgICBzdGF0aWNfY2Fz dDxDb25kaXRpb24+KGNvbmQgJiB+KENvbmRpdGlvblVuc2lnbmVkIHwgQ29uZGl0aW9uWmVybykp OwotKyAgICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIENvbmRpdGlvblVuc2lnbmVkKSAhPSAw OwotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGlmIChpc191aW50TihyaHMudmFsdWUs IDE2KSkgewotKyAgICAgICAgaWYgKGlzMzJiaXQpIHsKLSsgICAgICAgICAgYXNfY21wbHdpKGxo cywgcmhzLnZhbHVlKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGFzX2NtcGxkaShs aHMsIHJocy52YWx1ZSk7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gYmFzZTsKLSsgICAg ICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaWYgKGlzX2ludE4ocmhzLnZhbHVlLCAxNikpIHsK LSsgICAgICAgIGlmIChpczMyYml0KSB7Ci0rICAgICAgICAgIGFzX2NtcHdpKGxocywgcmhzLnZh bHVlKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGFzX2NtcGRpKGxocywgcmhzLnZh bHVlKTsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBiYXNlOwotKyAgICAgIH0KLSsgICAg fQotKyAgICAvLyBJbW1lZGlhdGUgZG9lc24ndCBmaXQg4oCUIG1hdGVyaWFsaXplIGludG8gc2Ny YXRjaCBhbmQgY29tcGFyZS4KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3Zl MzIocmhzLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQs IGlzMzJiaXQpOwotKyAgfQotKwotKyAgQ29uZGl0aW9uIG1hX2NtcChSZWdpc3RlciBsaHMsIElt bVdvcmQgcmhzLCBDb25kaXRpb24gY29uZCkgewotKyAgICBDb25kaXRpb24gYmFzZSA9Ci0rICAg ICAgICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+KENvbmRpdGlvblVuc2lnbmVkIHwg Q29uZGl0aW9uWmVybykpOwotKyAgICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIENvbmRpdGlv blVuc2lnbmVkKSAhPSAwOwotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGlmIChpc191 aW50TihyaHMudmFsdWUsIDE2KSkgewotKyAgICAgICAgYXNfY21wbGRpKGxocywgcmhzLnZhbHVl KTsKLSsgICAgICAgIHJldHVybiBiYXNlOwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAg ICBpZiAoaXNfaW50TihyaHMudmFsdWUsIDE2KSkgewotKyAgICAgICAgYXNfY21wZGkobGhzLCBy aHMudmFsdWUpOwotKyAgICAgICAgcmV0dXJuIGJhc2U7Ci0rICAgICAgfQotKyAgICB9Ci0rICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihyaHMsIHNjcmF0Y2gpOwotKyAg ICByZXR1cm4gbWFfY21wKGxocywgc2NyYXRjaCwgY29uZCk7Ci0rICB9Ci0rCi0rICBDb25kaXRp b24gbWFfY21wKFJlZ2lzdGVyIGxocywgSW1tUHRyIHJocywgQ29uZGl0aW9uIGNvbmQpIHsKLSsg ICAgcmV0dXJuIG1hX2NtcChsaHMsIEltbVdvcmQodWludHB0cl90KHJocy52YWx1ZSkpLCBjb25k KTsKLSsgIH0KLSsKLSsgIENvbmRpdGlvbiBtYV9jbXAoUmVnaXN0ZXIgbGhzLCBJbW1HQ1B0ciBy aHMsIENvbmRpdGlvbiBjb25kKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg bW92ZVB0cihyaHMsIHNjcmF0Y2gpOwotKyAgICByZXR1cm4gbWFfY21wKGxocywgc2NyYXRjaCwg Y29uZCk7Ci0rICB9Ci0rCi0rICBDb25kaXRpb24gbWFfY21wKFJlZ2lzdGVyIGxocywgSW1tVGFn IHJocywgQ29uZGl0aW9uIGNvbmQpIHsKLSsgICAgLy8gVGFnIHZhbHVlcyBvbiBQVU5CT1g2NCBh cmUgMTctYml0ICgweDFGRkYwKyksIHRvbyBsYXJnZSBmb3IgMTYtYml0Ci0rICAgIC8vIHNpZ25l ZCBvciB1bnNpZ25lZCBpbW1lZGlhdGVzLgotKyAgICBDb25kaXRpb24gYmFzZSA9Ci0rICAgICAg ICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+KENvbmRpdGlvblVuc2lnbmVkIHwgQ29u ZGl0aW9uWmVybykpOwotKyAgICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIENvbmRpdGlvblVu c2lnbmVkKSAhPSAwOwotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmUzMihJ bW0zMihyaHMudmFsdWUpLCBzY3JhdGNoKTsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAg ICBhc19jbXBsZChsaHMsIHNjcmF0Y2gpOwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX2NtcGQo bGhzLCBzY3JhdGNoKTsKLSsgICAgfQotKyAgICByZXR1cm4gYmFzZTsKLSsgIH0KLSsKLSsgIC8v IENvbXBhcmUgYSB0YWcgcmVnaXN0ZXIgYWdhaW5zdCBhbiBJbW1UYWcgY29uc3RhbnQgYW5kIGJy YW5jaCwgV0lUSE9VVAotKyAgLy8gYWNxdWlyaW5nIGEgc2NyYXRjaCByZWdpc3Rlci4gIFVzZXMg eG9yaXMrY21wbHdpIHdoaWNoIE1PRElGSUVTIHRhZ1JlZy4KLSsgIC8vIE9ubHkgc2FmZSB3aGVu IHRhZ1JlZyBpcyBhIHNjcmF0Y2ggcmVnaXN0ZXIgb3duZWQgYnkgdGhlIGNhbGxlci4KLSsgIHZv aWQgYnJhbmNoVGVzdFRhZyhDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnUmVnLCBJbW1UYWcg dGFnLCBMYWJlbCogbGFiZWwpIHsKLSsgICAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNv bmQgPT0gTm90RXF1YWwpOwotKyAgICB1aW50MzJfdCB0ID0gdGFnLnZhbHVlOwotKyAgICBhc194 b3Jpcyh0YWdSZWcsIHRhZ1JlZywgdCA+PiAxNik7Ci0rICAgIGFzX2NtcGx3aSh0YWdSZWcsIHQg JiAweEZGRkYpOwotKyAgICBDb25kaXRpb24gYyA9IChjb25kID09IEVxdWFsKSA/IEVxdWFsIDog Tm90RXF1YWw7Ci0rICAgIG1hX2IoYywgbGFiZWwpOwotKyAgfQotKwotKyAgdm9pZCBtYV9tb2Rf bWFzayhSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsIFJlZ2lzdGVyIGhvbGQsIFJlZ2lzdGVy IHJlbWFpbiwKLSsgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzaGlmdCwgTGFiZWwqIG5lZ1pl cm8gPSBudWxscHRyKTsKLSsKLSsgIHZvaWQgbm9wKCkgeyB3cml0ZUluc3QoTm9wSW5zdCk7IH0K LSsgIHZvaWQgYnJlYWtwb2ludCh1aW50MzJfdCB2YWx1ZSA9IDApIHsgeHNfdHJhcCgpOyB9Ci0r Ci0rICBpbmxpbmUgdm9pZCByZXRuKEltbTMyIG4pOwotKwotKyAgLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICAvLyBT dGFjayBvcGVyYXRpb25zCi0rCi0rICB2b2lkIHB1c2goSW1tMzIgaW1tKSB7Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7Ci0rICAgIHB1c2go c2NyYXRjaCk7Ci0rICB9Ci0rICB2b2lkIHB1c2goSW1tV29yZCBpbW0pIHsKLSsgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKGltbSwgc2NyYXRjaCk7Ci0rICAgIHB1c2go c2NyYXRjaCk7Ci0rICB9Ci0rICB2b2lkIHB1c2goSW1tR0NQdHIgaW1tKSB7Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOwotKyAgICBwdXNo KHNjcmF0Y2gpOwotKyAgfQotKyAgdm9pZCBwdXNoKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsK LSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBsb2FkUHRyKGFkZHJlc3MsIHNjcmF0 Y2gpOwotKyAgICBwdXNoKHNjcmF0Y2gpOwotKyAgfQotKyAgdm9pZCBwdXNoKFJlZ2lzdGVyIHJl ZykgeyBhc19zdGR1KHJlZywgU3RhY2tQb2ludGVyLCAtOCk7IH0KLSsgIHZvaWQgcHVzaChGbG9h dFJlZ2lzdGVyIHJlZykgewotKyAgICAvLyBzdGZkdS9zdGZzdSBmdXNlcyB0aGUgU1AgZGVjcmVt ZW50IGFuZCB0aGUgRlAgc3RvcmU6IEVBPVNQLTgsCi0rICAgIC8vIE1FTVtFQV09cmVnLCBTUD1F QS4gMSBpbnNuIGluc3RlYWQgb2YgYWRkaStzdGZkL3N0ZnMuCi0rICAgIGlmIChyZWcuaXNTaW5n bGUoKSkgewotKyAgICAgIGFzX3N0ZnN1KHJlZywgU3RhY2tQb2ludGVyLCAtOCk7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgYXNfc3RmZHUocmVnLCBTdGFja1BvaW50ZXIsIC04KTsKLSsgICAgfQot KyAgfQotKyAgdm9pZCBwb3AoUmVnaXN0ZXIgcmVnKSB7Ci0rICAgIGFzX2xkKHJlZywgU3RhY2tQ b2ludGVyLCAwKTsKLSsgICAgYXNfYWRkaShTdGFja1BvaW50ZXIsIFN0YWNrUG9pbnRlciwgOCk7 Ci0rICB9Ci0rICB2b2lkIHBvcChGbG9hdFJlZ2lzdGVyIHJlZykgewotKyAgICBpZiAocmVnLmlz U2luZ2xlKCkpIHsKLSsgICAgICBhc19sZnMocmVnLCBTdGFja1BvaW50ZXIsIDApOwotKyAgICB9 IGVsc2UgewotKyAgICAgIGFzX2xmZChyZWcsIFN0YWNrUG9pbnRlciwgMCk7Ci0rICAgIH0KLSsg ICAgYXNfYWRkaShTdGFja1BvaW50ZXIsIFN0YWNrUG9pbnRlciwgOCk7Ci0rICB9Ci0rCi0rICBD b2RlT2Zmc2V0IHB1c2hXaXRoUGF0Y2goSW1tV29yZCBpbW0pIHsKLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICBDb2RlT2Zmc2V0IG9mZnNldCA9IG1vdldpdGhQYXRjaChpbW0sIHNj cmF0Y2gpOwotKyAgICBwdXNoKHNjcmF0Y2gpOwotKyAgICByZXR1cm4gb2Zmc2V0OwotKyAgfQot KyAgQ29kZU9mZnNldCBtb3ZXaXRoUGF0Y2goSW1tV29yZCBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsK LSsgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0YW56YShkZXN0LCAodWludDY0X3Qp aW1tLnZhbHVlKTsKLSsgICAgcmV0dXJuIENvZGVPZmZzZXQoYm8uZ2V0T2Zmc2V0KCkpOwotKyAg fQotKyAgQ29kZU9mZnNldCBtb3ZXaXRoUGF0Y2goSW1tUHRyIGltbSwgUmVnaXN0ZXIgZGVzdCkg ewotKyAgICByZXR1cm4gbW92V2l0aFBhdGNoKEltbVdvcmQodWludHB0cl90KGltbS52YWx1ZSkp LCBkZXN0KTsKLSsgIH0KLSsKLSsgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAgLy8gVGFnL3VuYm94IG9wZXJhdGlv bnMKLSsKLSsgIHZvaWQgc3BsaXRUYWcoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0r ICAgIHhfc3JkaShkZXN0LCBzcmMsIEpTVkFMX1RBR19TSElGVCk7Ci0rICB9Ci0rICB2b2lkIHNw bGl0VGFnKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkgewotKyAg ICBzcGxpdFRhZyhvcGVyYW5kLnZhbHVlUmVnKCksIGRlc3QpOwotKyAgfQotKyAgdm9pZCBzcGxp dFRhZ0ZvclRlc3QoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwgU2NyYXRjaFRhZ1Njb3BlJiB0 YWcpIHsKLSsgICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7Ci0rICB9Ci0rCi0rICB2b2lkIHVuYm94 Tm9uRG91YmxlKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCwKLSsg ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5cGUgdHlwZSkgewotKyAgICB1bmJveE5vbkRv dWJsZShvcGVyYW5kLnZhbHVlUmVnKCksIGRlc3QsIHR5cGUpOwotKyAgfQotKyAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0rICB2b2lkIHVuYm94Tm9uRG91YmxlKFQgc3JjLCBSZWdpc3RlciBkZXN0 LCBKU1ZhbHVlVHlwZSB0eXBlKSB7Ci0rICAgIE1PWl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBF X0RPVUJMRSk7Ci0rICAgIGlmICh0eXBlID09IEpTVkFMX1RZUEVfSU5UMzIgfHwgdHlwZSA9PSBK U1ZBTF9UWVBFX0JPT0xFQU4pIHsKLSsgICAgICBsb2FkMzIoc3JjLCBkZXN0KTsKLSsgICAgICBy ZXR1cm47Ci0rICAgIH0KLSsgICAgbG9hZFB0cihzcmMsIGRlc3QpOwotKyAgICB1bmJveE5vbkRv dWJsZShkZXN0LCBkZXN0LCB0eXBlKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hOb25Eb3VibGUoUmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBKU1ZhbHVlVHlwZSB0eXBlKSB7Ci0rICAgIE1PWl9B U1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX0RPVUJMRSk7Ci0rICAgIGlmICh0eXBlID09IEpTVkFM X1RZUEVfSU5UMzIgfHwgdHlwZSA9PSBKU1ZBTF9UWVBFX0JPT0xFQU4pIHsKLSsgICAgICBhc19l eHRzdyhkZXN0LCBzcmMpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICAvLyBFeHRyYWN0 IHRoZSBwYXlsb2FkIChsb3dlciA0NyBiaXRzKSBieSBjbGVhcmluZyB0aGUgdGFnLgotKyAgICAv LyBUaGlzIGF2b2lkcyBhY3F1aXJpbmcgYSBzY3JhdGNoIHJlZ2lzdGVyLCBwcmV2ZW50aW5nIHBv b2wgZXhoYXVzdGlvbgotKyAgICAvLyB3aGVuIGNhbGxlZCBmcm9tIG5lc3RlZCBzY3JhdGNoIHNj b3BlcyAoZS5nLiwgU2NyYXRjaFRhZ1Njb3BlIOKGkgotKyAgICAvLyBicmFuY2hUZXN0U3RyaW5n VHJ1dGh5IOKGkiB1bmJveFN0cmluZyDihpIgaGVyZSkuCi0rICAgIC8vIHJsZGljbCBkZXN0LCBz cmMsIDAsIDE3IOKAlCBjbGVhciB1cHBlciAxNyBiaXRzICh0YWcpLCBrZWVwIGxvd2VyIDQ3Lgot KyAgICBhc19ybGRpY2woZGVzdCwgc3JjLCAwLCAxNyk7Ci0rICB9Ci0rICB2b2lkIHVuYm94R0NU aGluZ0ZvckdDQmFycmllcihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsg ICAgbG9hZFB0cihzcmMsIGRlc3QpOwotKyAgICAvLyBDbGVhciB0YWcgYml0cyAodG9wIDE3IGJp dHMgb24gNjQtYml0KS4KLSsgICAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDY0IC0gSlNWQUxf VEFHX1NISUZUKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hHQ1RoaW5nRm9yR0NCYXJyaWVyKGNvbnN0 IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGFzX3JsZGljbChkZXN0 LCBzcmMudmFsdWVSZWcoKSwgMCwgNjQgLSBKU1ZBTF9UQUdfU0hJRlQpOwotKyAgfQotKyAgdm9p ZCB1bmJveFdhc21BbnlSZWZHQ1RoaW5nRm9yR0NCYXJyaWVyKGNvbnN0IEFkZHJlc3MmIHNyYywg UmVnaXN0ZXIgZGVzdCkgewotKyAgICBzdGF0aWNfYXNzZXJ0KHdhc206OkFueVJlZjo6VGFnU2hp ZnQgPT0gMik7Ci0rICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsKLSsgICAgYXNfcmxkaWNyKGRlc3Qs IGRlc3QsIDAsIDYxKTsKLSsgIH0KLSsgIHZvaWQgZ2V0R0NUaGluZ1ZhbHVlQ2h1bmsoY29uc3Qg QWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsK LSsgICAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDE3KTsKLSsgICAgYXNfcmxkaWNyKGRlc3Qs IGRlc3QsIDAsIDQzKTsKLSsgIH0KLSsgIHZvaWQgZ2V0R0NUaGluZ1ZhbHVlQ2h1bmsoY29uc3Qg VmFsdWVPcGVyYW5kJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgYXNfcmxkaWNsKGRlc3Qs IHNyYy52YWx1ZVJlZygpLCAwLCAxNyk7Ci0rICAgIGFzX3JsZGljcihkZXN0LCBkZXN0LCAwLCA0 Myk7Ci0rICB9Ci0rCi0rICB2b2lkIGJveERvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgY29uc3Qg VmFsdWVPcGVyYW5kJiBkZXN0LCBGbG9hdFJlZ2lzdGVyKSB7Ci0rICAgIGFzX21mdnNyZChkZXN0 LnZhbHVlUmVnKCksIHNyYyk7Ci0rICB9Ci0rICB2b2lkIGJveE5vbkRvdWJsZShKU1ZhbHVlVHlw ZSB0eXBlLCBSZWdpc3RlciBzcmMsIGNvbnN0IFZhbHVlT3BlcmFuZCYgZGVzdCkgewotKyAgICBi b3hWYWx1ZSh0eXBlLCBzcmMsIGRlc3QudmFsdWVSZWcoKSk7Ci0rICB9Ci0rICB2b2lkIGJveE5v bkRvdWJsZShSZWdpc3RlciB0eXBlLCBSZWdpc3RlciBzcmMsIGNvbnN0IFZhbHVlT3BlcmFuZCYg ZGVzdCkgewotKyAgICBib3hWYWx1ZSh0eXBlLCBzcmMsIGRlc3QudmFsdWVSZWcoKSk7Ci0rICB9 Ci0rICB2b2lkIHVuYm94SW50MzIoY29uc3QgVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICAgIGFzX2V4dHN3KGRlc3QsIG9wZXJhbmQudmFsdWVSZWcoKSk7Ci0rICB9 Ci0rICB2b2lkIHVuYm94SW50MzIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7 IGxvYWQzMihzcmMsIGRlc3QpOyB9Ci0rICB2b2lkIHVuYm94SW50MzIoY29uc3QgQmFzZUluZGV4 JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgbG9hZDMyKHNyYywgZGVzdCk7IH0KLSsgIHZvaWQgdW5i b3hCb29sZWFuKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkgewot KyAgICBhc19leHRzdyhkZXN0LCBvcGVyYW5kLnZhbHVlUmVnKCkpOwotKyAgfQotKyAgdm9pZCB1 bmJveEJvb2xlYW4oY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7IGxvYWQzMihz cmMsIGRlc3QpOyB9Ci0rICB2b2lkIHVuYm94Qm9vbGVhbihjb25zdCBCYXNlSW5kZXgmIHNyYywg UmVnaXN0ZXIgZGVzdCkgeyBsb2FkMzIoc3JjLCBkZXN0KTsgfQotKyAgdm9pZCB1bmJveERvdWJs ZShjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg ICBhc19tdHZzcmQoZGVzdCwgb3BlcmFuZC52YWx1ZVJlZygpKTsKLSsgIH0KLSsgIHZvaWQgdW5i b3hEb3VibGUoY29uc3QgQWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAg bG9hZERvdWJsZShzcmMsIGRlc3QpOwotKyAgfQotKyAgdm9pZCB1bmJveERvdWJsZShjb25zdCBC YXNlSW5kZXgmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGxvYWREb3VibGUoc3Jj LCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hTdHJpbmcoY29uc3QgVmFsdWVPcGVyYW5kJiBv cGVyYW5kLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91YmxlKG9wZXJhbmQsIGRl c3QsIEpTVkFMX1RZUEVfU1RSSU5HKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hTdHJpbmcoY29uc3Qg QWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91YmxlKHNyYywg ZGVzdCwgSlNWQUxfVFlQRV9TVFJJTkcpOwotKyAgfQotKyAgdm9pZCB1bmJveFN5bWJvbChjb25z dCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgdW5ib3hOb25E b3VibGUob3BlcmFuZCwgZGVzdCwgSlNWQUxfVFlQRV9TWU1CT0wpOwotKyAgfQotKyAgdm9pZCB1 bmJveFN5bWJvbChjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgdW5i b3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBFX1NZTUJPTCk7Ci0rICB9Ci0rICB2b2lk IHVuYm94QmlnSW50KGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkg ewotKyAgICB1bmJveE5vbkRvdWJsZShvcGVyYW5kLCBkZXN0LCBKU1ZBTF9UWVBFX0JJR0lOVCk7 Ci0rICB9Ci0rICB2b2lkIHVuYm94QmlnSW50KGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIg ZGVzdCkgewotKyAgICB1bmJveE5vbkRvdWJsZShzcmMsIGRlc3QsIEpTVkFMX1RZUEVfQklHSU5U KTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hPYmplY3QoY29uc3QgVmFsdWVPcGVyYW5kJiBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBF X09CSkVDVCk7Ci0rICB9Ci0rICB2b2lkIHVuYm94T2JqZWN0KGNvbnN0IEFkZHJlc3MmIHNyYywg UmVnaXN0ZXIgZGVzdCkgewotKyAgICB1bmJveE5vbkRvdWJsZShzcmMsIGRlc3QsIEpTVkFMX1RZ UEVfT0JKRUNUKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hPYmplY3QoY29uc3QgQmFzZUluZGV4JiBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZB TF9UWVBFX09CSkVDVCk7Ci0rICB9Ci0rICB2b2lkIHVuYm94VmFsdWUoY29uc3QgVmFsdWVPcGVy YW5kJiBzcmMsIEFueVJlZ2lzdGVyIGRlc3QsIEpTVmFsdWVUeXBlIHR5cGUpIHsKLSsgICAgaWYg KGRlc3QuaXNGbG9hdCgpKSB7Ci0rICAgICAgdW5ib3hEb3VibGUoc3JjLCBkZXN0LmZwdSgpKTsK LSsgICAgfSBlbHNlIHsKLSsgICAgICB1bmJveE5vbkRvdWJsZShzcmMsIGRlc3QuZ3ByKCksIHR5 cGUpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIHVuYm94T2JqZWN0T3JOdWxsKGNvbnN0IEFkZHJl c3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBsb2FkUHRyKHNyYywgZGVzdCk7Ci0rICAg IC8vIE9iamVjdCBwb2ludGVycyBoYXZlIHRoZSBvYmplY3QgdGFnIGluIGhpZ2ggYml0czsgbnVs bCBoYXMgYSBkaWZmZXJlbnQKLSsgICAgLy8gdGFnLiBDbGVhciB0aGUgdG9wIGJpdHMgdG8gZ2V0 IGVpdGhlciBhIHZhbGlkIHBvaW50ZXIgb3IgemVyby4KLSsgICAgYXNfcmxkaWNsKGRlc3QsIGRl c3QsIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZUKTsKLSsgIH0KLSsKLSsgIHZvaWQgdGFnVmFsdWUo SlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcGF5bG9hZCwgVmFsdWVPcGVyYW5kIGRlc3QpIHsK LSsgICAgTU9aX0FTU0VSVCh0eXBlICE9IEpTVkFMX1RZUEVfVU5ERUZJTkVEICYmIHR5cGUgIT0g SlNWQUxfVFlQRV9OVUxMKTsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBNT1pf QVNTRVJUKHNjcmF0Y2ggIT0gcGF5bG9hZCAmJiBzY3JhdGNoICE9IGRlc3QudmFsdWVSZWcoKSk7 Ci0rICAgIHRhZ1ZhbHVlV2l0aFNjcmF0Y2godHlwZSwgcGF5bG9hZCwgZGVzdCwgc2NyYXRjaCk7 Ci0rICB9Ci0rICB2b2lkIHRhZ1ZhbHVlV2l0aFNjcmF0Y2goSlNWYWx1ZVR5cGUgdHlwZSwgUmVn aXN0ZXIgcGF5bG9hZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU9wZXJhbmQg ZGVzdCwgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICBtb3ZlUHRyKEltbVNoaWZ0ZWRUYWcodHlw ZSksIHNjcmF0Y2gpOwotKyAgICBpZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUg PT0gSlNWQUxfVFlQRV9CT09MRUFOIHx8Ci0rICAgICAgICB0eXBlID09IEpTVkFMX1RZUEVfTUFH SUMpIHsKLSsgICAgICBpZiAocGF5bG9hZCAhPSBkZXN0LnZhbHVlUmVnKCkpIHsKLSsgICAgICAg IG1vdmVQdHIocGF5bG9hZCwgZGVzdC52YWx1ZVJlZygpKTsKLSsgICAgICB9Ci0rICAgICAgYXNf cmxkaWNsKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1ZVJlZygpLCAwLCAzMik7Ci0rICAgICAg YXNfb3JfKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1ZVJlZygpLCBzY3JhdGNoKTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICBpZiAocGF5bG9hZCAhPSBkZXN0LnZhbHVlUmVnKCkpIHsKLSsgICAg ICAgIG1vdmVQdHIocGF5bG9hZCwgZGVzdC52YWx1ZVJlZygpKTsKLSsgICAgICB9Ci0rICAgICAg YXNfb3JfKGRlc3QudmFsdWVSZWcoKSwgZGVzdC52YWx1ZVJlZygpLCBzY3JhdGNoKTsKLSsgICAg fQotKyAgfQotKyAgdm9pZCBib3hWYWx1ZShKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgTU9aX0FTU0VSVChzcmMgIT0gZGVzdCk7Ci0rICAgIE1P Wl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX1VOREVGSU5FRCAmJiB0eXBlICE9IEpTVkFMX1RZ UEVfTlVMTCk7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgYm94VmFsdWVXaXRo U2NyYXRjaCh0eXBlLCBzcmMsIGRlc3QsIHNjcmF0Y2gpOwotKyAgfQotKyAgdm9pZCBib3hWYWx1 ZVdpdGhTY3JhdGNoKEpTVmFsdWVUeXBlIHR5cGUsIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICAg IGlmICh0eXBlID09IEpTVkFMX1RZUEVfSU5UMzIgfHwgdHlwZSA9PSBKU1ZBTF9UWVBFX0JPT0xF QU4gfHwKLSsgICAgICAgIHR5cGUgPT0gSlNWQUxfVFlQRV9NQUdJQykgewotKyAgICAgIGFzX3Js ZGljbChkZXN0LCBzcmMsIDAsIDMyKTsKLSsgICAgICBtb3ZlUHRyKEltbVNoaWZ0ZWRUYWcodHlw ZSksIHNjcmF0Y2gpOwotKyAgICAgIGFzX29yXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICBtb3ZlUHRyKEltbVNoaWZ0ZWRUYWcodHlwZSksIHNjcmF0Y2gpOwot KyAgICAgIHhzX21yKGRlc3QsIHNyYyk7Ci0rICAgICAgYXNfb3JfKGRlc3QsIGRlc3QsIHNjcmF0 Y2gpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIGJveFZhbHVlKFJlZ2lzdGVyIHR5cGUsIFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBNT1pfQVNTRVJUKHNyYyAhPSBkZXN0KTsK LSsKLSsjaWZkZWYgREVCVUcKLSsgICAgTGFiZWwgZG9uZSwgaXNOdWxsT3JVbmRlZmluZWQsIGlz Qm9vbGVhbiwgaXNJbnQzMk9yTWFnaWM7Ci0rCi0rICAgIC8vIFVzZSBtYV9jbXAgKyBtYV9iIGlu c3RlYWQgb2YgYXNNYXNtKCkuYnJhbmNoMzIoKSBiZWNhdXNlCi0rICAgIC8vIE1hY3JvQXNzZW1i bGVyIGlzIG5vdCB5ZXQgZnVsbHkgZGVmaW5lZCBhdCB0aGlzIHBvaW50LgotKyAgICBDb25kaXRp b24gY29uZDsKLSsgICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJbW0zMihKU1ZBTF9UWVBFX05VTEwp LCBFcXVhbCwgdHJ1ZSk7Ci0rICAgIG1hX2IoY29uZCwgJmlzTnVsbE9yVW5kZWZpbmVkKTsKLSsg ICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJbW0zMihKU1ZBTF9UWVBFX1VOREVGSU5FRCksIEVxdWFs LCB0cnVlKTsKLSsgICAgbWFfYihjb25kLCAmaXNOdWxsT3JVbmRlZmluZWQpOwotKyAgICBjb25k ID0gbWFfY21wKHR5cGUsIEltbTMyKEpTVkFMX1RZUEVfQk9PTEVBTiksIEVxdWFsLCB0cnVlKTsK LSsgICAgbWFfYihjb25kLCAmaXNCb29sZWFuKTsKLSsgICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJ bW0zMihKU1ZBTF9UWVBFX0lOVDMyKSwgRXF1YWwsIHRydWUpOwotKyAgICBtYV9iKGNvbmQsICZp c0ludDMyT3JNYWdpYyk7Ci0rICAgIGNvbmQgPSBtYV9jbXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQ RV9NQUdJQyksIEVxdWFsLCB0cnVlKTsKLSsgICAgbWFfYihjb25kLCAmaXNJbnQzMk9yTWFnaWMp OwotKyAgICAvLyBHQ1RoaW5nIHR5cGVzIGFyZW4ndCBzdXBwb3J0ZWQsIGJlY2F1c2UgYXNfcmxk aWNsIHRydW5jYXRlcwotKyAgICAvLyBwYXlsb2FkcyBhYm92ZSBVSU5UMzJfTUFYLgotKyAgICBi cmVha3BvaW50KCk7Ci0rICAgIHsKLSsgICAgICBiaW5kKCZpc051bGxPclVuZGVmaW5lZCk7Ci0r Ci0rICAgICAgLy8gRW5zdXJlIG5vIHBheWxvYWQgZm9yIG51bGwgYW5kIHVuZGVmaW5lZC4KLSsg ICAgICBjb25kID0gbWFfY21wKHNyYywgSW1tV29yZCgwKSwgRXF1YWwpOwotKyAgICAgIG1hX2Io Y29uZCwgJmRvbmUpOwotKyAgICAgIGJyZWFrcG9pbnQoKTsKLSsgICAgfQotKyAgICB7Ci0rICAg ICAgYmluZCgmaXNCb29sZWFuKTsKLSsKLSsgICAgICAvLyBFbnN1cmUgYm9vbGVhbiB2YWx1ZXMg YXJlIGVpdGhlciAwIG9yIDEuCi0rICAgICAgY29uZCA9IG1hX2NtcChzcmMsIEltbTMyKDEpLCBC ZWxvd09yRXF1YWwsIHRydWUpOwotKyAgICAgIG1hX2IoY29uZCwgJmRvbmUpOwotKyAgICAgIGJy ZWFrcG9pbnQoKTsKLSsgICAgfQotKyAgICB7Ci0rICAgICAgYmluZCgmaXNJbnQzMk9yTWFnaWMp OwotKwotKyAgICAgIC8vIEVuc3VyZSB8c3JjfCBpcyBzaWduLWV4dGVuZGVkLgotKyAgICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIGRlYnVnVGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVy IGRlYnVnU2NyYXRjaCA9IGRlYnVnVGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIGFzX2V4dHN3KGRl YnVnU2NyYXRjaCwgc3JjKTsKLSsgICAgICBjb25kID0gbWFfY21wKHNyYywgZGVidWdTY3JhdGNo LCBFcXVhbCk7Ci0rICAgICAgbWFfYihjb25kLCAmZG9uZSk7Ci0rICAgICAgYnJlYWtwb2ludCgp OwotKyAgICB9Ci0rICAgIGJpbmQoJmRvbmUpOwotKyNlbmRpZgotKwotKyAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0ICYmIHNjcmF0Y2gg IT0gc3JjICYmIHNjcmF0Y2ggIT0gdHlwZSk7Ci0rICAgIC8vIEJ1aWxkIHRhZzogKHR5cGUgfCBK U1ZBTF9UQUdfTUFYX0RPVUJMRSkgPDwgSlNWQUxfVEFHX1NISUZUCi0rICAgIG1vdmUzMihJbW0z MihKU1ZBTF9UQUdfTUFYX0RPVUJMRSksIHNjcmF0Y2gpOwotKyAgICBhc19vcl8oc2NyYXRjaCwg c2NyYXRjaCwgdHlwZSk7Ci0rICAgIHhfc2xkaShzY3JhdGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdf U0hJRlQpOwotKyAgICAvLyBJbnNlcnQgMzItYml0IHBheWxvYWQuCi0rICAgIGFzX3JsZGljbChk ZXN0LCBzcmMsIDAsIDMyKTsKLSsgICAgYXNfb3JfKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwotKyAg fQotKwotKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICAvLyBWYWx1ZSBzdG9yZS9sb2FkL3B1c2gvcG9wCi0rCi0r ICB2b2lkIHN0b3JlVmFsdWUoVmFsdWVPcGVyYW5kIHZhbCwgY29uc3QgQWRkcmVzcyYgZGVzdCkg ewotKyAgICBzdG9yZVB0cih2YWwudmFsdWVSZWcoKSwgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIHN0 b3JlVmFsdWUoVmFsdWVPcGVyYW5kIHZhbCwgY29uc3QgQmFzZUluZGV4JiBkZXN0KSB7Ci0rICAg IHN0b3JlUHRyKHZhbC52YWx1ZVJlZygpLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgc3RvcmVWYWx1 ZShKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciByZWcsIEFkZHJlc3MgZGVzdCkgewotKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQoZGVzdC5iYXNlICE9IHNjcmF0 Y2gpOwotKyAgICBib3hWYWx1ZSh0eXBlLCByZWcsIHNjcmF0Y2gpOwotKyAgICBzdG9yZVB0cihz Y3JhdGNoLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgc3RvcmVWYWx1ZShKU1ZhbHVlVHlwZSB0eXBl LCBSZWdpc3RlciByZWcsIEJhc2VJbmRleCBkZXN0KSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgICAgTU9aX0FTU0VSVChkZXN0LmJhc2UgIT0gc2NyYXRjaCk7Ci0rICAgIGJveFZh bHVlKHR5cGUsIHJlZywgc2NyYXRjaCk7Ci0rICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOwot KyAgfQotKyAgdm9pZCBzdG9yZVZhbHVlKGNvbnN0IFZhbHVlJiB2YWwsIEFkZHJlc3MgZGVzdCkg ewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQoZGVzdC5iYXNl ICE9IHNjcmF0Y2gpOwotKyAgICBpZiAodmFsLmlzR0NUaGluZygpKSB7Ci0rICAgICAgQ29kZU9m ZnNldCBvZmYgPSBtb3ZXaXRoUGF0Y2goSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkpLCBzY3JhdGNo KTsKLSsgICAgICB3cml0ZURhdGFSZWxvY2F0aW9uKG9mZiwgdmFsKTsKLSsgICAgfSBlbHNlIHsK LSsgICAgICBtb3ZlUHRyKEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2NyYXRjaCk7Ci0rICAg IH0KLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlVmFs dWUoY29uc3QgVmFsdWUmIHZhbCwgQmFzZUluZGV4IGRlc3QpIHsKLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKGRlc3QuYmFzZSAhPSBzY3JhdGNoKTsKLSsgICAg aWYgKHZhbC5pc0dDVGhpbmcoKSkgewotKyAgICAgIENvZGVPZmZzZXQgb2ZmID0gbW92V2l0aFBh dGNoKEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2NyYXRjaCk7Ci0rICAgICAgd3JpdGVEYXRh UmVsb2NhdGlvbihvZmYsIHZhbCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbW92ZVB0cihJbW1X b3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwotKyAgICB9Ci0rICAgIHN0b3JlUHRyKHNj cmF0Y2gsIGRlc3QpOwotKyAgfQotKyAgdm9pZCBzdG9yZVZhbHVlKGNvbnN0IEFkZHJlc3MmIHNy YywgY29uc3QgQWRkcmVzcyYgZGVzdCwgUmVnaXN0ZXIgdGVtcCkgewotKyAgICBsb2FkUHRyKHNy YywgdGVtcCk7Ci0rICAgIHN0b3JlUHRyKHRlbXAsIGRlc3QpOwotKyAgfQotKwotKyAgdm9pZCBz dG9yZVByaXZhdGVWYWx1ZShSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGRlc3QpIHsKLSsg ICAgc3RvcmVQdHIoc3JjLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgc3RvcmVQcml2YXRlVmFsdWUo SW1tR0NQdHIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICAgIHN0b3JlUHRyKGltbSwg ZGVzdCk7Ci0rICB9Ci0rCi0rICB2b2lkIGxvYWRWYWx1ZShBZGRyZXNzIHNyYywgVmFsdWVPcGVy YW5kIHZhbCkgewotKyAgICBsb2FkUHRyKHNyYywgdmFsLnZhbHVlUmVnKCkpOwotKyAgfQotKyAg dm9pZCBsb2FkVmFsdWUoY29uc3QgQmFzZUluZGV4JiBzcmMsIFZhbHVlT3BlcmFuZCB2YWwpIHsK LSsgICAgbG9hZFB0cihzcmMsIHZhbC52YWx1ZVJlZygpKTsKLSsgIH0KLSsgIHZvaWQgbG9hZFVu YWxpZ25lZFZhbHVlKGNvbnN0IEFkZHJlc3MmIHNyYywgVmFsdWVPcGVyYW5kIGRlc3QpIHsKLSsg ICAgbG9hZFB0cihzcmMsIGRlc3QudmFsdWVSZWcoKSk7Ci0rICB9Ci0rCi0rICB2b2lkIHB1c2hW YWx1ZShWYWx1ZU9wZXJhbmQgdmFsKSB7IHB1c2godmFsLnZhbHVlUmVnKCkpOyB9Ci0rICB2b2lk IHBvcFZhbHVlKFZhbHVlT3BlcmFuZCB2YWwpIHsgcG9wKHZhbC52YWx1ZVJlZygpKTsgfQotKyAg dm9pZCBwdXNoVmFsdWUoY29uc3QgVmFsdWUmIHZhbCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICAgIGlmICh2YWwuaXNHQ1RoaW5nKCkpIHsKLSsgICAgICBDb2RlT2Zmc2V0IG9m ZiA9IG1vdldpdGhQYXRjaChJbW1Xb3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwotKyAg ICAgIHdyaXRlRGF0YVJlbG9jYXRpb24ob2ZmLCB2YWwpOwotKyAgICB9IGVsc2UgewotKyAgICAg IG1vdmVQdHIoSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKLSsgICAgfQotKyAg ICBwdXNoKHNjcmF0Y2gpOwotKyAgfQotKyAgdm9pZCBwdXNoVmFsdWUoSlNWYWx1ZVR5cGUgdHlw ZSwgUmVnaXN0ZXIgcmVnKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgYm94 VmFsdWUodHlwZSwgcmVnLCBzY3JhdGNoKTsKLSsgICAgcHVzaChzY3JhdGNoKTsKLSsgIH0KLSsg IHZvaWQgcHVzaFZhbHVlKGNvbnN0IEFkZHJlc3MmIGFkZHIpIHsKLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICBsb2FkUHRyKGFkZHIsIHNjcmF0Y2gpOwotKyAgICBwdXNoKHNjcmF0 Y2gpOwotKyAgfQotKyAgdm9pZCBwdXNoVmFsdWUoY29uc3QgQmFzZUluZGV4JiBhZGRyLCBSZWdp c3RlciBzY3JhdGNoKSB7Ci0rICAgIGxvYWRQdHIoYWRkciwgc2NyYXRjaCk7Ci0rICAgIHB1c2go c2NyYXRjaCk7Ci0rICB9Ci0rCi0rICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgIC8vIExvYWQgaW5zdHJ1Y3Rpb25z Ci0rCi0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDhTaWduRXh0ZW5kKGNvbnN0IEFkZHJlc3Mm IGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbzsK LSsgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAgICAgIGZjbyA9IEZh dWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfbGJ6KGRlc3QsIGFkZHJlc3MuYmFzZSwg YWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7 Ci0rICAgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICAg ICAgZmNvID0KLSsgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xiengoZGVzdCwgYWRk cmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgYXNfZXh0c2Io ZGVzdCwgZGVzdCk7Ci0rICAgIHJldHVybiBmY287Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZz ZXQgbG9hZDhTaWduRXh0ZW5kKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7 Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Mo c3JjLCBzY3JhdGNoKTsKLSsgICAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbzsKLSsgICAgaWYgKGlz X2ludE4oc3JjLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0 KGFzX2xieihkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICAgIG1vdmVQ dHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVzdCk7Ci0rICAgICAgZmNvID0gRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX2xiengoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9 Ci0rICAgIGFzX2V4dHNiKGRlc3QsIGRlc3QpOwotKyAgICByZXR1cm4gZmNvOwotKyAgfQotKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4WmVyb0V4dGVuZChjb25zdCBBZGRyZXNzJiBhZGRyZXNz LCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikp IHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19sYnoo ZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9 Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9 IGRlc3QpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsK LSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sYnp4KGRlc3QsIGFkZHJlc3MuYmFz ZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxv YWQ4WmVyb0V4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAg ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKHNyYywg c2NyYXRjaCk7Ci0rICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6KGRlc3QsIHNjcmF0Y2gsIHNyYy5vZmZzZXQp LmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7 Ci0rICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVzdCk7Ci0rICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6eChkZXN0LCBzY3JhdGNoLCBkZXN0KS5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDE2U2lnbkV4dGVuZChjb25zdCBB ZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHJl c3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAg ICAgICAgICBhc19saGEoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zm c2V0KCkpOwotKyAgICB9Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgTU9aX0FT U0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZz ZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19saGF4KGRl c3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1bHRp bmdDb2RlT2Zmc2V0IGxvYWQxNlNpZ25FeHRlbmQoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwot KyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2Nh bGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAx NikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoYShkZXN0LCBzY3Jh dGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgTU9aX0FTU0VSVChz Y3JhdGNoICE9IGRlc3QpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3Qp OwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoYXgoZGVzdCwgc2NyYXRjaCwg ZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+Ci0rICB2 b2lkIGxvYWQxNlVuYWxpZ25lZFNpZ25FeHRlbmQoY29uc3QgUyYgc3JjLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAgIGxvYWQxNlNpZ25FeHRlbmQoc3JjLCBkZXN0KTsKLSsgIH0KLSsgIEZhdWx0aW5n Q29kZU9mZnNldCBsb2FkMTZaZXJvRXh0ZW5kKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lz dGVyIGRlc3QpIHsKLSsgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAg ICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX2xoeihkZXN0LCBh ZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7 Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoengoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3Jh dGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDE2WmVy b0V4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKHNyYywgc2NyYXRj aCk7Ci0rICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfbGh6KGRlc3QsIHNjcmF0Y2gsIHNyYy5vZmZzZXQpLmdldE9m ZnNldCgpKTsKLSsgICAgfQotKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7Ci0rICAg IG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVzdCk7Ci0rICAgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoYXNfbGh6eChkZXN0LCBzY3JhdGNoLCBkZXN0KS5nZXRPZmZzZXQoKSk7Ci0r ICB9Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KLSsgIHZvaWQgbG9hZDE2VW5hbGlnbmVkWmVy b0V4dGVuZChjb25zdCBTJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgbG9hZDE2WmVyb0V4 dGVuZChzcmMsIGRlc3QpOwotKyAgfQotKwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQzMihj b25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIC8vIGx3YSBpcyBE Uy1mb3JtICgxNC1iaXQgZGlzcGxhY2VtZW50IMOXIDQgPSAxNi1iaXQtc2lnbmVkIGVmZmVjdGl2 ZQotKyAgICAvLyByYW5nZSwgNC1ieXRlIGFsaWdubWVudCByZXF1aXJlZCkuIGx3YXggaXMgWC1m b3JtIGluZGV4ZWQsIG5vCi0rICAgIC8vIGFsaWdubWVudCBjb25zdHJhaW50LiBCb3RoIHNpZ24t ZXh0ZW5kIGluIG9uZSBpbnN0cnVjdGlvbjsgb25seQotKyAgICAvLyB0aGUgbWlzYWxpZ25lZCAx Ni1iaXQtZml0dGluZyBjYXNlIHN0aWxsIG5lZWRzIGx3eiArIGV4dHN3LgotKyAgICBpZiAoaXNf aW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmIChhZGRyZXNzLm9mZnNldCAmIDMpID09IDApIHsK LSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19sd2EoZGVz dCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0r ICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICBGYXVsdGluZ0Nv ZGVPZmZzZXQgZmNvKAotKyAgICAgICAgICBhc19sd3ooZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRy ZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICAgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwot KyAgICAgIHJldHVybiBmY287Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChh ZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KGFzX2x3YXgoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9 Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDMyKGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywg UmVnaXN0ZXIgZGVzdCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1 dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihhZGRy ZXNzLm9mZnNldCwgMTYpICYmIChhZGRyZXNzLm9mZnNldCAmIDMpID09IDApIHsKLSsgICAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19sd2EoZGVzdCwgc2NyYXRj aCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBpZiAoaXNfaW50 TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbyhh c19sd3ooZGVzdCwgc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAg ICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgICAgICByZXR1cm4gZmNvOwotKyAgICB9Ci0rICAg IE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJl c3Mub2Zmc2V0KSwgZGVzdCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHdh eChkZXN0LCBzY3JhdGNoLCBkZXN0KS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICB2b2lkIGxvYWQz MihBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBtb3ZlUHRy KEltbVdvcmQoKHVpbnRwdHJfdClhZGRyZXNzLmFkZHIpLCBkZXN0KTsKLSsgICAgYXNfbHdhKGRl c3QsIGRlc3QsIDApOwotKyAgfQotKyAgdm9pZCBsb2FkMzIod2FzbTo6U3ltYm9saWNBZGRyZXNz IGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgbW92ZVB0cihhZGRyZXNzLCBkZXN0KTsK LSsgICAgYXNfbHdhKGRlc3QsIGRlc3QsIDApOwotKyAgfQotKyAgdGVtcGxhdGUgPHR5cGVuYW1l IFM+Ci0rICB2b2lkIGxvYWQzMlVuYWxpZ25lZChjb25zdCBTJiBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgICAgbG9hZDMyKHNyYywgZGVzdCk7Ci0rICB9Ci0rCi0rICBGYXVsdGluZ0NvZGVPZmZz ZXQgbG9hZDY0KGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAg ICByZXR1cm4gbG9hZFB0cihhZGRyZXNzLCBkZXN0LnJlZyk7Ci0rICB9Ci0rICBGYXVsdGluZ0Nv ZGVPZmZzZXQgbG9hZDY0KGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywgUmVnaXN0ZXI2NCBkZXN0 KSB7Ci0rICAgIHJldHVybiBsb2FkUHRyKGFkZHJlc3MsIGRlc3QucmVnKTsKLSsgIH0KLSsgIHRl bXBsYXRlIDx0eXBlbmFtZSBTPgotKyAgdm9pZCBsb2FkNjRVbmFsaWduZWQoY29uc3QgUyYgc3Jj LCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgICAgbG9hZDY0KHNyYywgZGVzdCk7Ci0rICB9Ci0rCi0r ICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZFB0cihjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdp c3RlciBkZXN0KSB7Ci0rICAgIC8vIGFzX2xkIChEUy1mb3JtKSByZXF1aXJlcyA0LWJ5dGUgYWxp Z25lZCBvZmZzZXQuCi0rICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikgJiYgIShh ZGRyZXNzLm9mZnNldCAmIDB4MykpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KAotKyAgICAgICAgICBhc19sZChkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5n ZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChp bnRwdHJfdClhZGRyZXNzLm9mZnNldCwgMzQpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldCgKLSsgICAgICAgICAgYXNfcGxkKGRlc3QsIGFkZHJlc3MuYmFzZSwgKGludDY0X3Qp YWRkcmVzcy5vZmZzZXQsIC8qUj0qL2ZhbHNlKQotKyAgICAgICAgICAgICAgLmdldE9mZnNldCgp KTsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQo c2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwg c2NyYXRjaCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGR4KGRlc3QsIGFk ZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1bHRpbmdDb2Rl T2Zmc2V0IGxvYWRQdHIoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMs IHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikgJiYgIShzcmMub2Zm c2V0ICYgMHgzKSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGQoZGVz dCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIE1PWl9B U1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKHNyYy5vZmZzZXQp LCBkZXN0KTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZHgoZGVzdCwgc2Ny YXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgdm9pZCBsb2FkUHRyKEFic29sdXRl QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIG1vdmVQdHIoSW1tV29yZCgo dWludHB0cl90KWFkZHJlc3MuYWRkciksIGRlc3QpOwotKyAgICBhc19sZChkZXN0LCBkZXN0LCAw KTsKLSsgIH0KLSsgIHZvaWQgbG9hZFB0cih3YXNtOjpTeW1ib2xpY0FkZHJlc3MgYWRkcmVzcywg UmVnaXN0ZXIgZGVzdCkgewotKyAgICBtb3ZlUHRyKGFkZHJlc3MsIGRlc3QpOwotKyAgICBhc19s ZChkZXN0LCBkZXN0LCAwKTsKLSsgIH0KLSsKLSsgIHZvaWQgbG9hZFByaXZhdGUoY29uc3QgQWRk cmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBsb2FkUHRyKGFkZHJlc3MsIGRl c3QpOwotKyAgfQotKwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWREb3VibGUoY29uc3QgQWRk cmVzcyYgYWRkciwgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHIu b2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAg ICAgICBhc19sZmQoZGVzdCwgYWRkci5iYXNlLCBhZGRyLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwot KyAgICB9Ci0rICAgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkci5v ZmZzZXQsIDM0KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAg ICAgIGFzX3BsZmQoZGVzdCwgYWRkci5iYXNlLCAoaW50NjRfdClhZGRyLm9mZnNldCwgLypSPSov ZmFsc2UpCi0rICAgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zmc2V0KSwgc2Ny YXRjaCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGZkeChkZXN0LCBhZGRy LmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNl dCBsb2FkRG91YmxlKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhz cmMsIHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKLSsgICAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xmZChkZXN0LCBzY3JhdGNoLCBzcmMub2Zm c2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgc2NyYXRjaDIp OwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xmZHgoZGVzdCwgc2NyYXRjaCwg c2NyYXRjaDIpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2Fk RmxvYXQzMihjb25zdCBBZGRyZXNzJiBhZGRyLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAg aWYgKGlzX2ludE4oYWRkci5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0Nv ZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX2xmcyhkZXN0LCBhZGRyLmJhc2UsIGFkZHIub2Zmc2V0 KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnRO KChpbnRwdHJfdClhZGRyLm9mZnNldCwgMzQpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldCgKLSsgICAgICAgICAgYXNfcGxmcyhkZXN0LCBhZGRyLmJhc2UsIChpbnQ2NF90KWFk ZHIub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsgICAgICAgICAgICAgIC5nZXRPZmZzZXQoKSk7Ci0r ICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQo YWRkci5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChh c19sZnN4KGRlc3QsIGFkZHIuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRGbG9hdDMyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21w dXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihzcmMub2Zm c2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xmcyhkZXN0 LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgUmVnaXN0 ZXIgc2NyYXRjaDIgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChzcmMu b2Zmc2V0KSwgc2NyYXRjaDIpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xm c3goZGVzdCwgc2NyYXRjaCwgc2NyYXRjaDIpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIC8vIExv YWQgYSBGUCBjb25zdGFudCBpbnRvIGBkZXN0YC4KLSsgIC8vCi0rICAvLyArMC4wIC8gKzAuMGY6 IGB4eGx4b3IgZGVzdCwgZGVzdCwgZGVzdGAgKDEgaW5zbikuIE5vIHJlZ2lzdGVyIGNsb2JiZXJz LgotKyAgLy8KLSsgIC8vIFBPV0VSOSBub24temVybzogY29uc3RhbnQgcG9vbCBsb2FkIHZpYSBg YWRkcGNpcyByMTYsIGhpOyBsZmQvbGZzIGZELAotKyAgLy8gbG8ocjE2KTsgbm9wYC4gMiByZWFs IGluc25zICsgbm9wLCBubyBMUiBjbG9iYmVyLCBubyBSZXR1cm4gQWRkcmVzcwotKyAgLy8gU3Rh Y2sgY29ycnVwdGlvbi4gbGZzIGF1dG8tZXhwYW5kcyBzaW5nbGUtcHJlY2lzaW9uIHRvIGRvdWJs ZSwgc28gbm8KLSsgIC8vIHNlcGFyYXRlIHhzY3ZzcGRwbiBzdGVwLiBDbG9iYmVycyByMTYgKFNh dmVkU2NyYXRjaFJlZ2lzdGVyKS4gUG9vbAotKyAgLy8gZW50cmllcyBhcmUgc2hhcmVkIGFjcm9z cyBkdXBsaWNhdGUgY29uc3RhbnRzLgotKyAgLy8KLSsgIC8vIFBPV0VSOCBub24temVybzogaW5s aW5lIGBtb3ZlUHRyICsgbXR2c3JkKCt4c2N2c3BkcG4pYCBwYXRoLiBXZSBkbyBOT1QKLSsgIC8v IHVzZSB0aGUgYmNsLWJhc2VkIHBvb2wgcGF0aCBvbiBQT1dFUjg6IGJjbCBjbG9iYmVycyBMUiBh bmQgY29ycnVwdHMKLSsgIC8vIHRoZSBSZXR1cm4gQWRkcmVzcyBTdGFjaywgd2hpY2ggY2F1c2Vz IGNhdGFzdHJvcGhpYyBtaXNwcmVkaWN0cyBpbgotKyAgLy8gaG90IEZQLWNvbnN0YW50IGxvb3Bz ICh+MjAweCBzbG93ZG93biBvYnNlcnZlZCBvbiBjbXAtYml0c2VsZWN0LmpzKS4KLSsgIC8vCi0r ICAvLyBQcmVjb25kaXRpb246IG11c3Qgbm90IGJlIGNhbGxlZCBpbnNpZGUgYW4gYGVudGVyTm9Q b29sYCByZWdpb24gd2hlbgotKyAgLy8gSGFzUE9XRVI5KCkgaXMgdHJ1ZSAodGhlIHBvb2wgcGF0 aCBjYWxscyBgYWxsb2NFbnRyeWAgd2hpY2ggYXNzZXJ0cwotKyAgLy8gYGluaGliaXRQb29sc18g PT0gMGApLiBBdWRpdC12ZXJpZmllZCB0aGF0IG5vIHN1Y2ggY2FsbCBzaXRlIGV4aXN0cwotKyAg Ly8gdG9kYXk7IHRoZSBQT1dFUjggaW5saW5lIHBhdGggaXMgdW5hZmZlY3RlZC4KLSsgIHZvaWQg bG9hZENvbnN0YW50RG91YmxlKGRvdWJsZSBkcCwgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAg IGlmIChtb3ppbGxhOjpJc1Bvc2l0aXZlWmVybyhkcCkpIHsKLSsgICAgICBhc194eGx4b3IoZGVz dCwgZGVzdCwgZGVzdCk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIGlmIChIYXNQT1dF UjkoKSkgewotKyAgICAgIGxvYWRGcm9tUG9vbEZsb2F0NjQoZGVzdCwgZHApOwotKyAgICAgIHJl dHVybjsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHVuaW9uIHsK LSsgICAgICBkb3VibGUgZDsKLSsgICAgICB1aW50NjRfdCB1OwotKyAgICB9IHU7Ci0rICAgIHUu ZCA9IGRwOwotKyAgICBtb3ZlUHRyKEltbVdvcmQodS51KSwgc2NyYXRjaCk7Ci0rICAgIGFzX210 dnNyZChkZXN0LCBzY3JhdGNoKTsKLSsgIH0KLSsgIHZvaWQgbG9hZENvbnN0YW50RmxvYXQzMihm bG9hdCBmLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgaWYgKG1vemlsbGE6OklzUG9zaXRp dmVaZXJvKGYpKSB7Ci0rICAgICAgYXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOwotKyAgICAg IHJldHVybjsKLSsgICAgfQotKyAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICBsb2FkRnJv bVBvb2xGbG9hdDMyKGRlc3QsIGYpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHVuaW9uIHsKLSsgICAgICBmbG9hdCBmOwotKyAgICAg IHVpbnQzMl90IHU7Ci0rICAgIH0gdTsKLSsgICAgdS5mID0gZjsKLSsgICAgbW92ZVB0cihJbW1X b3JkKHUudSksIHNjcmF0Y2gpOwotKyAgICB4X3NsZGkoc2NyYXRjaCwgc2NyYXRjaCwgMzIpOwot KyAgICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7Ci0rICAgIGFzX3hzY3ZzcGRwbihkZXN0LCBk ZXN0KTsKLSsgIH0KLSsKLSsgIHZvaWQgbm90Qm9vbGVhbihjb25zdCBWYWx1ZU9wZXJhbmQmIHZh bCkgewotKyAgICBhc194b3JpKHZhbC52YWx1ZVJlZygpLCB2YWwudmFsdWVSZWcoKSwgMSk7Ci0r ICB9Ci0rCi0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RUYWcoY29uc3QgQWRkcmVz cyYgYWRkcmVzcywgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICBsb2FkUHRyKGFkZHJlc3MsIHNj cmF0Y2gpOwotKyAgICB4X3NyZGkoc2NyYXRjaCwgc2NyYXRjaCwgSlNWQUxfVEFHX1NISUZUKTsK LSsgICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9Ci0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4 dHJhY3RUYWcoY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgaWYgKHNjcmF0Y2ggPT0g cjApIHsKLSsgICAgICAvLyByMCBjYW5ub3QgYmUgdXNlZCBhcyBhIGJhc2UgcmVnaXN0ZXIgaW4g RC1mb3JtL1gtZm9ybSBsb2FkcywKLSsgICAgICAvLyBzbyB3ZSBuZWVkIGEgc2VwYXJhdGUgdGVt cCBmb3IgdGhlIGludGVybWVkaWF0ZSBhZGRyZXNzLgotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBiYXNlID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIGJhc2UpOwotKyAgICAg IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICB9 IGVsc2UgewotKyAgICAgIC8vIHNjcmF0Y2ggaXMgYSBwb29sIHJlZ2lzdGVyIChyMTEvcjEyKSBv ciBhbm90aGVyIEdQUiB0aGF0IGNhbgotKyAgICAgIC8vIHNlcnZlIGFzIGEgYmFzZSByZWdpc3Rl ciwgc28gcmV1c2UgaXQgZm9yIHRoZSBhZGRyZXNzIGNvbXB1dGF0aW9uLgotKyAgICAgIGNvbXB1 dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgICAgIGxvYWRQdHIoQWRkcmVz cyhzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICB9Ci0rICAgIHhfc3Jk aShzY3JhdGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOwotKyAgICByZXR1cm4gc2NyYXRj aDsKLSsgIH0KLSsgIFtbbm9kaXNjYXJkXV0gUmVnaXN0ZXIgZXh0cmFjdFRhZyhjb25zdCBWYWx1 ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOwotKyAgICBy ZXR1cm4gc2NyYXRjaDsKLSsgIH0KLSsKLSsgIFtbbm9kaXNjYXJkXV0gUmVnaXN0ZXIgZXh0cmFj dE9iamVjdChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgbG9hZFB0cihhZGRyZXNz LCBzY3JhdGNoKTsKLSsgICAgYXNfcmxkaWNsKHNjcmF0Y2gsIHNjcmF0Y2gsIDAsIDY0IC0gSlNW QUxfVEFHX1NISUZUKTsKLSsgICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9Ci0rICBbW25vZGlzY2Fy ZF1dIFJlZ2lzdGVyIGV4dHJhY3RPYmplY3QoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7 Ci0rICAgIHVuYm94T2JqZWN0KHZhbHVlLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIHNjcmF0Y2g7 Ci0rICB9Ci0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RJbnQzMihjb25zdCBWYWx1 ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICB1bmJveEludDMyKHZhbHVlLCBzY3JhdGNoKTsKLSsg ICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9Ci0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJh Y3RTdHJpbmcoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICAgIHVuYm94U3RyaW5n KHZhbHVlLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9Ci0rICBbW25vZGlz Y2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RTeW1ib2woY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNo KSB7Ci0rICAgIHVuYm94U3ltYm9sKHZhbHVlLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIHNjcmF0 Y2g7Ci0rICB9Ci0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RCb29sZWFuKGNvbnN0 IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgdW5ib3hCb29sZWFuKHZhbHVlLCBzY3Jh dGNoKTsKLSsgICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9Ci0rCi0rICB2b2lkIHRlc3RPYmplY3RT ZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsIFJlZ2lzdGVyIGRl c3QpIHsKLSsgICAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwp OwotKyAgICB7Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwot KyAgICAgIFJlZ2lzdGVyIHRhZyA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBzcGxpdFRhZyh2 YWx1ZSwgdGFnKTsKLSsgICAgICB1aW50MzJfdCB0ID0gSlNWQUxfVEFHX09CSkVDVDsKLSsgICAg ICBhc194b3Jpcyh0YWcsIHRhZywgdCA+PiAxNik7Ci0rICAgICAgYXNfY21wbHdpKHRhZywgdCAm IDB4RkZGRik7Ci0rICAgIH0KLSsgICAgbWFfY21wX3NldChkZXN0LCBjb25kKTsKLSsgIH0KLSsg IHZvaWQgdGVzdFVuZGVmaW5lZFNldChDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICAg IE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgICAgewot KyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdp c3RlciB0YWcgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7 Ci0rICAgICAgLy8gVXNlIHhvcmlzK2NtcGx3aSB0byBjb21wYXJlIHdpdGhvdXQgYSBzZWNvbmQg c2NyYXRjaC4KLSsgICAgICB1aW50MzJfdCB0ID0gSlNWQUxfVEFHX1VOREVGSU5FRDsKLSsgICAg ICBhc194b3Jpcyh0YWcsIHRhZywgdCA+PiAxNik7Ci0rICAgICAgYXNfY21wbHdpKHRhZywgdCAm IDB4RkZGRik7Ci0rICAgIH0KLSsgICAgbWFfY21wX3NldChkZXN0LCBjb25kKTsKLSsgIH0KLSsg IHZvaWQgdGVzdE51bGxTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFs dWUsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNv bmQgPT0gTm90RXF1YWwpOwotKyAgICB7Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVyIHRhZyA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgICBzcGxpdFRhZyh2YWx1ZSwgdGFnKTsKLSsgICAgICB1aW50MzJfdCB0ID0gSlNWQUxfVEFH X05VTEw7Ci0rICAgICAgYXNfeG9yaXModGFnLCB0YWcsIHQgPj4gMTYpOwotKyAgICAgIGFzX2Nt cGx3aSh0YWcsIHQgJiAweEZGRkYpOwotKyAgICB9Ci0rICAgIG1hX2NtcF9zZXQoZGVzdCwgY29u ZCk7Ci0rICB9Ci0rCi0rICBCdWZmZXJPZmZzZXQgcmV0KCkgewotKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICAgIGFzX2xkKHNjcmF0Y2gsIFN0YWNrUG9pbnRlciwgMCk7Ci0rICAgIGFz X2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgpOwotKyAgICB4c19tdGxyKHNjcmF0 Y2gpOwotKyAgICByZXR1cm4gYXNfYmxyKCk7Ci0rICB9Ci0rCi0rICB2b2lkIGooTGFiZWwqIGRl c3QpIHsganVtcChkZXN0KTsgfQotKwotKyAgdm9pZCBnZXRXYXNtQW55UmVmR0NUaGluZ0NodW5r KFJlZ2lzdGVyIGFueXJlZiwgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBzdGF0aWNfYXNzZXJ0KGpz OjpnYzo6Q2h1bmtTaGlmdCA9PSAyMCk7Ci0rICAgIGFzX3JsZGljcihkZXN0LCBhbnlyZWYsIDAs IDQzKTsKLSsgIH0KLSsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBsb2FkVW5i b3hlZFZhbHVlKGNvbnN0IFQmIGFkZHJlc3MsIE1JUlR5cGUgdHlwZSwgQW55UmVnaXN0ZXIgZGVz dCkgewotKyAgICBpZiAoZGVzdC5pc0Zsb2F0KCkpIHsKLSsgICAgICBsb2FkSW50MzJPckRvdWJs ZShhZGRyZXNzLCBkZXN0LmZwdSgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICB1bmJveE5vbkRv dWJsZShhZGRyZXNzLCBkZXN0LmdwcigpLCBWYWx1ZVR5cGVGcm9tTUlSVHlwZSh0eXBlKSk7Ci0r ICAgIH0KLSsgIH0KLSsKLSsgIHZvaWQgbG9hZEludDMyT3JEb3VibGUoY29uc3QgQWRkcmVzcyYg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpOwotKyAgdm9pZCBsb2FkSW50MzJPckRvdWJsZShjb25z dCBCYXNlSW5kZXgmIGFkZHIsIEZsb2F0UmVnaXN0ZXIgZGVzdCk7Ci0rCi0rICAvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgIC8vIFN0b3JlIGluc3RydWN0aW9ucwotKwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3Jl OChSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgaWYgKGlzX2lu dE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZz ZXQoCi0rICAgICAgICAgIGFzX3N0YihzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQp LmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAg IG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0Yngoc3JjLCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdl dE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZTgoUmVnaXN0ZXIg c3JjLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgICAg aWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX3N0YihzcmMsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zm c2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0 Y2gyKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGJ4KHNyYywgc2NyYXRj aCwgc2NyYXRjaDIpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIHZvaWQgc3RvcmU4KEltbTMyIGlt bSwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOwotKyAgICBzdG9yZTgoc2NyYXRjaCwgYWRkcmVz cyk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlOChJbW0zMiBpbW0sIGNvbnN0IEJhc2VJbmRleCYgYWRk cmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmUzMihpbW0sIHNj cmF0Y2gpOwotKyAgICBzdG9yZTgoc2NyYXRjaCwgYWRkcmVzcyk7Ci0rICB9Ci0rCi0rICBGYXVs dGluZ0NvZGVPZmZzZXQgc3RvcmUxNihSZWdpc3RlciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJl c3MpIHsKLSsgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX3N0aChzcmMsIGFkZHJlc3Mu YmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNj cmF0Y2gpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0aHgoc3JjLCBhZGRy ZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9m ZnNldCBzdG9yZTE2KFJlZ2lzdGVyIHNyYywgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7Ci0r ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRk cmVzcywgc2NyYXRjaCk7Ci0rICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsK LSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19zdGgoc3Jj LCBzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFJl Z2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQo YWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoMik7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZz ZXQoYXNfc3RoeChzcmMsIHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0r ICB2b2lkIHN0b3JlMTYoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7Ci0rICAg IHN0b3JlMTYoc2NyYXRjaCwgYWRkcmVzcyk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlMTYoSW1tMzIg aW1tLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgc3RvcmUxNihzY3JhdGNoLCBh ZGRyZXNzKTsKLSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZTE2 VW5hbGlnbmVkKFJlZ2lzdGVyIHNyYywgY29uc3QgVCYgZGVzdCkgewotKyAgICBzdG9yZTE2KHNy YywgZGVzdCk7Ci0rICB9Ci0rCi0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmUzMihSZWdpc3Rl ciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgaWYgKGlzX2ludE4oYWRkcmVz cy5vZmZzZXQsIDE2KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAg ICAgICAgIGFzX3N0dyhzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNl dCgpKTsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIo SW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KGFzX3N0d3goc3JjLCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgp KTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZTMyKFJlZ2lzdGVyIHNyYywgY29u c3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICAgIGlmIChpc19p bnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KAotKyAgICAgICAgICBhc19zdHcoc3JjLCBzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0 T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoMik7Ci0r ICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R3eChzcmMsIHNjcmF0Y2gsIHNjcmF0 Y2gyKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXIgc3JjLCBB YnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICAgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWFkZHJlc3MuYWRkciksIHNjcmF0Y2gpOwot KyAgICBhc19zdHcoc3JjLCBzY3JhdGNoLCAwKTsKLSsgIH0KLSsgIHZvaWQgc3RvcmUzMihJbW0z MiBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtb3ZlMzIoc3JjLCBzY3JhdGNoKTsKLSsgICAgc3RvcmUzMihzY3JhdGNoLCBh ZGRyZXNzKTsKLSsgIH0KLSsgIHZvaWQgc3RvcmUzMihJbW0zMiBzcmMsIGNvbnN0IEJhc2VJbmRl eCYgYWRkcmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmUzMihz cmMsIHNjcmF0Y2gpOwotKyAgICBzdG9yZTMyKHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgfQotKyAg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rICB2b2lkIHN0b3JlMzJVbmFsaWduZWQoUmVnaXN0ZXIg c3JjLCBjb25zdCBUJiBkZXN0KSB7Ci0rICAgIHN0b3JlMzIoc3JjLCBkZXN0KTsKLSsgIH0KLSsK LSsgIHZvaWQgc3RvcmU2NChJbW02NCBpbW0sIEFkZHJlc3MgYWRkcmVzcykgewotKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChpbW0udmFsdWUpLCBzY3Jh dGNoKTsKLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwgYWRkcmVzcyk7Ci0rICB9Ci0rICB2b2lkIHN0 b3JlNjQoSW1tNjQgaW1tLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRj aCk7Ci0rICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgfQotKyAgRmF1bHRpbmdD b2RlT2Zmc2V0IHN0b3JlNjQoUmVnaXN0ZXI2NCBzcmMsIEFkZHJlc3MgYWRkcmVzcykgewotKyAg ICByZXR1cm4gc3RvcmVQdHIoc3JjLnJlZywgYWRkcmVzcyk7Ci0rICB9Ci0rICBGYXVsdGluZ0Nv ZGVPZmZzZXQgc3RvcmU2NChSZWdpc3RlcjY0IHNyYywgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz KSB7Ci0rICAgIHJldHVybiBzdG9yZVB0cihzcmMucmVnLCBhZGRyZXNzKTsKLSsgIH0KLSsgIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZTY0VW5hbGlnbmVkKFJlZ2lzdGVyNjQg c3JjLCBjb25zdCBUJiBkZXN0KSB7Ci0rICAgIHN0b3JlNjQoc3JjLCBkZXN0KTsKLSsgIH0KLSsK LSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZVB0cihJbW1Xb3JkIGltbSwg VCBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK LSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihp bW0sIHNjcmF0Y2gpOwotKyAgICBzdG9yZVB0cihzY3JhdGNoLCBhZGRyZXNzKTsKLSsgIH0KLSsg IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZVB0cihJbW1QdHIgaW1tLCBUIGFk ZHJlc3MpIHsKLSsgICAgc3RvcmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW1tLnZhbHVlKSksIGFk ZHJlc3MpOwotKyAgfQotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rICB2b2lkIHN0b3JlUHRy KEltbUdDUHRyIGltbSwgVCBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgICAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOwotKyAgICBzdG9yZVB0cihzY3JhdGNoLCBhZGRy ZXNzKTsKLSsgIH0KLSsgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXIgc3JjLCBBYnNvbHV0ZUFkZHJl c3MgZGVzdCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1t V29yZCgodWludHB0cl90KWRlc3QuYWRkciksIHNjcmF0Y2gpOwotKyAgICBhc19zdGQoc3JjLCBz Y3JhdGNoLCAwKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZVB0cihSZWdpc3Rl ciBzcmMsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgLy8gYXNfc3RkIChEUy1mb3Jt KSByZXF1aXJlcyA0LWJ5dGUgYWxpZ25lZCBvZmZzZXQuCi0rICAgIGlmIChpc19pbnROKGFkZHJl c3Mub2Zmc2V0LCAxNikgJiYgIShhZGRyZXNzLm9mZnNldCAmIDB4MykpIHsKLSsgICAgICByZXR1 cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19zdGQoc3JjLCBhZGRyZXNzLmJh c2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgaWYgKEhhc1BP V0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClhZGRyZXNzLm9mZnNldCwgMzQpKSB7Ci0rICAg ICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfcHN0ZChzcmMsIGFk ZHJlc3MuYmFzZSwgKGludDY0X3QpYWRkcmVzcy5vZmZzZXQsIC8qUj0qL2ZhbHNlKQotKyAgICAg ICAgICAgICAgLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZHgoc3JjLCBhZGRyZXNzLmJhc2UsIHNj cmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZVB0 cihSZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgewotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0 Y2gpOwotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmICEoYWRkcmVzcy5v ZmZzZXQgJiAweDMpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAg ICAgICAgYXNfc3RkKHNyYywgc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsK LSsgICAgfQotKyAgICBSZWdpc3RlciBzY3JhdGNoMiA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg bW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaDIpOwotKyAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZHgoc3JjLCBzY3JhdGNoLCBzY3JhdGNoMikuZ2V0T2Zm c2V0KCkpOwotKyAgfQotKwotKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICAvLyBNaXNjCi0rCi0rICB2b2lkIGhh bmRsZUZhaWx1cmVXaXRoSGFuZGxlclRhaWwoTGFiZWwqIHByb2ZpbGVyRXhpdFRhaWwsIExhYmVs KiBiYWlsb3V0VGFpbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCogcmV0dXJuVmFsdWVDaGVja09mZnNldCk7Ci0rCi0rICBpbmxpbmUgdm9pZCBpbmNyZW1l bnRJbnQzMlZhbHVlKGNvbnN0IEFkZHJlc3MmIGFkZHIpOwotKwotKyAgdm9pZCB6ZXJvRG91Ymxl KEZsb2F0UmVnaXN0ZXIgcmVnKSB7IGFzX3h4bHhvcihyZWcsIHJlZywgcmVnKTsgfQotKwotKyAg dm9pZCB3cml0ZUNvZGVQb2ludGVyKENvZGVMYWJlbCogbGFiZWwpIHsKLSsgICAgbGFiZWwtPnBh dGNoQXQoKS0+YmluZChjdXJyZW50T2Zmc2V0KCkpOwotKyAgICBsYWJlbC0+c2V0TGlua01vZGUo Q29kZUxhYmVsOjpSYXdQb2ludGVyKTsKLSsgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc2l6ZW9m KHZvaWQqKSk7Ci0rICAgIHdyaXRlSW5zdCgtMSk7Ci0rICAgIHdyaXRlSW5zdCgtMSk7Ci0rICB9 Ci0rICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRpb24oY29uc3QgVmFsdWUmIHZhbCkgewotKyAgICBp ZiAodmFsLmlzR0NUaGluZygpKSB7Ci0rICAgICAgZ2M6OkNlbGwqIGNlbGwgPSB2YWwudG9HQ1Ro aW5nKCk7Ci0rICAgICAgaWYgKGNlbGwgJiYgZ2M6OklzSW5zaWRlTnVyc2VyeShjZWxsKSkgewot KyAgICAgICAgZW1iZWRzTnVyc2VyeVBvaW50ZXJzXyA9IHRydWU7Ci0rICAgICAgfQotKyAgICAg IGRhdGFSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25lZChjdXJyZW50T2Zmc2V0KCkpOwotKyAgICB9 Ci0rICB9Ci0rICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRpb24oQ29kZU9mZnNldCBvZmYsIGNvbnN0 IFZhbHVlJiB2YWwpIHsKLSsgICAgaWYgKHZhbC5pc0dDVGhpbmcoKSkgewotKyAgICAgIGdjOjpD ZWxsKiBjZWxsID0gdmFsLnRvR0NUaGluZygpOwotKyAgICAgIGlmIChjZWxsICYmIGdjOjpJc0lu c2lkZU51cnNlcnkoY2VsbCkpIHsKLSsgICAgICAgIGVtYmVkc051cnNlcnlQb2ludGVyc18gPSB0 cnVlOwotKyAgICAgIH0KLSsgICAgICBkYXRhUmVsb2NhdGlvbnNfLndyaXRlVW5zaWduZWQob2Zm Lm9mZnNldCgpKTsKLSsgICAgfQotKyAgfQotKwotKyAgQ29kZU9mZnNldCB0b2dnbGVkSnVtcChM YWJlbCogbGFiZWwpIHsKLSsgICAgQ29kZU9mZnNldCByZXQobmV4dE9mZnNldCgpLmdldE9mZnNl dCgpKTsKLSsgICAganVtcChsYWJlbCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICB9Ci0rICBDb2Rl T2Zmc2V0IHRvZ2dsZWRDYWxsKEppdENvZGUqIHRhcmdldCwgYm9vbCBlbmFibGVkKTsKLSsgIC8v IDggaW5zdHJ1Y3Rpb25zIGZvciBsb2FkNjQgKyBtdGN0ciArIGJjdHJsID0gMTAgaW5zdHJ1Y3Rp b25zIHRvdGFsLgotKyAgc3RhdGljIHNpemVfdCBUb2dnbGVkQ2FsbFNpemUodWludDhfdCogY29k ZSkgeyByZXR1cm4gMTAgKiBzaXplb2YodWludDMyX3QpOyB9Ci0rCi0rICB2b2lkIGNoZWNrU3Rh Y2tBbGlnbm1lbnQoKSB7fQotKwotKyAgc3RhdGljIHZvaWQgY2FsY3VsYXRlQWxpZ25lZFN0YWNr UG9pbnRlcih2b2lkKiogc3RhY2tQb2ludGVyKSB7Ci0rICAgICpzdGFja1BvaW50ZXIgPSByZWlu dGVycHJldF9jYXN0PHZvaWQqPigodWludHB0cl90KCpzdGFja1BvaW50ZXIpKSAmCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KEFCSVN0YWNrQWxpZ25tZW50 IC0gMSkpOwotKyAgfQotKwotKyAgdm9pZCBsZWEoT3BlcmFuZCBhZGRyLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAgIC8vIHg4Ni1pc207IG9uIFBQQywgY29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBt YW51YWxseS4KLSsgICAgTU9aX0NSQVNIKCJQUEM2NDogbGVhIG5vdCBzdXBwb3J0ZWQ7IHVzZSBj b21wdXRlRWZmZWN0aXZlQWRkcmVzcyIpOwotKyAgfQotKwotKyAgdm9pZCBhYmlyZXQoKSB7IGFz X2JscigpOyB9Ci0rCi0rICB2b2lkIHByb2ZpbGVyRW50ZXJGcmFtZShSZWdpc3RlciBmcmFtZVB0 ciwgUmVnaXN0ZXIgc2NyYXRjaCk7Ci0rICB2b2lkIHByb2ZpbGVyRXhpdEZyYW1lKCk7Ci0rCi0r ICB2b2lkIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50MzJDaGVjaygKLSsgICAgICBGbG9hdFJl Z2lzdGVyIGlucHV0LCBSZWdpc3RlciBvdXRwdXQsIE1JUlR5cGUgZnJvbVR5cGUsIFRydW5jRmxh Z3MgZmxhZ3MsCi0rICAgICAgTGFiZWwqIHJlam9pbiwgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNj JiB0cmFwU2l0ZURlc2MpOwotKyAgdm9pZCBvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hl Y2soCi0rICAgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIE1JUlR5 cGUgZnJvbVR5cGUsCi0rICAgICAgVHJ1bmNGbGFncyBmbGFncywgTGFiZWwqIHJlam9pbiwgY29u c3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MpOwotKwotKyAgdm9pZCB3YXNtTG9h ZEltcGwoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBtZW1v cnlCYXNlLAotKyAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJT Y3JhdGNoLCBBbnlSZWdpc3RlciBvdXRwdXQpOwotKyAgdm9pZCB3YXNtU3RvcmVJbXBsKGNvbnN0 IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQW55UmVnaXN0ZXIgdmFsdWUsCi0rICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdp c3RlciBwdHJTY3JhdGNoKTsKLSsgIHZvaWQgd2FzbUxvYWRJNjRJbXBsKGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCwKLSsgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KTsKLSsgIHZvaWQgd2FzbVN0b3JlSTY0 SW1wbChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyNjQgdmFs dWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0 ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKTsKLSsKLSsgIC8vIExhc3QtYnl0ZSBwcm9iaW5n IGxvYWQgdG8gZW5mb3JjZSB3YXNtLXNwZWMgYXRvbWljaXR5IGZvciBtdWx0aS1ieXRlCi0rICAv LyB3YXNtIGFjY2Vzc2VzIG9uIFBPV0VSIElTQS4gUE9XRVIgcGVybWl0cyB1bmFsaWduZWQgcGFn ZS1zcGFubmluZwotKyAgLy8gYWNjZXNzZXMgdG8gY29tbWl0IG9uZSBoYWxmIGJlZm9yZSB0aGUg b3RoZXIgaGFsZiB0YWtlcyBhIERTSTsgd2FzbQotKyAgLy8gcmVxdWlyZXMgYXRvbWljaXR5LiBU b3VjaGluZyB0aGUgbGFzdCBieXRlIG9mIHRoZSB1cGNvbWluZyBhY2Nlc3MKLSsgIC8vIHdpdGgg YSAxLWJ5dGUgbGJ6eCB0cmlnZ2VycyBTSUdTRUdWICjihpIgd2FzbSB0cmFwIHZpYSB0aGUgc2ln bmFsCi0rICAvLyBoYW5kbGVyKSBiZWZvcmUgdGhlIGFjdHVhbCBhY2Nlc3MgZXhlY3V0ZXMg4oCU IFBPV0VSJ3MgcHJlY2lzZS0KLSsgIC8vIGludGVycnVwdCBtb2RlbCBndWFyYW50ZWVzIHRoZSBz dWJzZXF1ZW50IGFjY2VzcyBpcyBuZXZlcgotKyAgLy8gYXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVk IGlmIHRoZSBwcm9iZSBmYXVsdHMuCi0rICAvLwotKyAgLy8gV2FzbSBsaW5lYXIgbWVtb3J5IGlz IG9uZSBjb250aWd1b3VzIG1hcHBlZCByZWdpb24gZm9sbG93ZWQgYnkgYW4KLSsgIC8vIG1wcm90 ZWN0J2QgZ3VhcmQsIHNvIGxhc3QtYnl0ZS1tYXBwZWQg4oeSIGFsbC1ieXRlcy1tYXBwZWQsIGFu ZCBhCi0rICAvLyBzaW5nbGUtYnl0ZSBwcm9iZSBpcyBzdWZmaWNpZW50IHJlZ2FyZGxlc3Mgb2Yg YWNjZXNzIHNpemUuCi0rICAvLwotKyAgLy8gTm8tb3Agd2hlbiBIYXNQT1dFUjkoKSAocmVhbCBQ T1dFUjkvUE9XRVIxMCBzaWxpY29uIGhhbmRsZXMgcGFnZS0KLSsgIC8vIHNwYW5uaW5nIHVuYWxp Z25lZCBzdG9yZXMgYXRvbWljYWxseSBhdCB0aGUgwrVhcmNoIGxldmVsKSwgYW5kIHdoZW4KLSsg IC8vIGFjY2VzcyBzaXplIGlzIDEuIE5ldmVyIGNhbGxlZCBvbiB0aGUgYXRvbWljIHBhdGg6IGF0 b21pYyBvcHMgYXJlCi0rICAvLyBuYXR1cmFsbHkgYWxpZ25lZCBwZXIgd2FzbSBzcGVjICsgSVNB LWVuZm9yY2VkIGx3YXJ4IGFsaWdubWVudCwgc28KLSsgIC8vIHRoZXkgY2Fubm90IHNwYW4gcGFn ZXM7IG1pc2FsaWduZWQgYXRvbWljcyB0YWtlIGEgcHJlY2lzZSBTSUdCVVMKLSsgIC8vIGJlZm9y ZSBhbnkgY29tbWl0LgotKyAgLy8KLSsgIC8vIDIgaW5zdHJ1Y3Rpb25zIHdoZW4gZW1pdHRlZCAo YWRkaSArIGxiengpLgotKyAgdm9pZCB3YXNtUHJvYmVMYXN0Qnl0ZShjb25zdCB3YXNtOjpNZW1v cnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0cik7Ci0rfTsKLSsKLSt0eXBlZGVmIE1hY3JvQXNzZW1i bGVyUFBDNjRDb21wYXQgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYzsKLSsKLSt9ICAvLyBuYW1lc3Bh Y2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2VuZGlmIC8qIGppdF9wcGM2NF9NYWNy b0Fzc2VtYmxlcl9wcGM2NF9oICovCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Nb3Zl RW1pdHRlci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmNw cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uOTg5ZDNmNjFmMTIx Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0 LmNwcAotQEAgLTAsMCArMSwzNTcgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7 IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBz ZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBp cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNl LCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0 aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9N UEwvMi4wLy4gKi8KLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0Lmgi Ci0rCi0rI2luY2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCIKLSsKLSt1c2luZyBuYW1l c3BhY2UganM7Ci0rdXNpbmcgbmFtZXNwYWNlIGpzOjpqaXQ7Ci0rCi0rdm9pZCBNb3ZlRW1pdHRl clBQQzY0OjpicmVha0N5Y2xlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8sIE1vdmVPcDo6VHlw ZSB0eXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzbG90 SWQpIHsKLSsgIHN3aXRjaCAodHlwZSkgewotKyAgICBjYXNlIE1vdmVPcDo6RkxPQVQzMjoKLSsg ICAgICBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAgU2NyYXRjaEZsb2F0MzJTY29wZSBm cHNjcmF0Y2gzMihtYXNtKTsKLSsgICAgICAgIG1hc20ubG9hZEZsb2F0MzIoZ2V0QWRqdXN0ZWRB ZGRyZXNzKHRvKSwgZnBzY3JhdGNoMzIpOwotKyAgICAgICAgbWFzbS5zdG9yZUZsb2F0MzIoZnBz Y3JhdGNoMzIsIGN5Y2xlU2xvdChzbG90SWQpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAg bWFzbS5zdG9yZUZsb2F0MzIodG8uZmxvYXRSZWcoKSwgY3ljbGVTbG90KHNsb3RJZCkpOwotKyAg ICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OkRPVUJMRToKLSsgICAgICBp ZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRj aDY0KG1hc20pOwotKyAgICAgICAgbWFzbS5sb2FkRG91YmxlKGdldEFkanVzdGVkQWRkcmVzcyh0 byksIGZwc2NyYXRjaDY0KTsKLSsgICAgICAgIG1hc20uc3RvcmVEb3VibGUoZnBzY3JhdGNoNjQs IGN5Y2xlU2xvdChzbG90SWQpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5zdG9y ZURvdWJsZSh0by5mbG9hdFJlZygpLCBjeWNsZVNsb3Qoc2xvdElkKSk7Ci0rICAgICAgfQotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIE1vdmVPcDo6SU5UMzI6Ci0rICAgICAgaWYgKHRvLmlzTWVt b3J5KCkpIHsKLSsgICAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwot KyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICAgIG1h c20ubG9hZDMyKGdldEFkanVzdGVkQWRkcmVzcyh0byksIHNjcmF0Y2gpOwotKyAgICAgICAgbWFz bS5zdG9yZTMyKHNjcmF0Y2gsIGN5Y2xlU2xvdCgwKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAg ICAgIG1hc20uc3RvcmUzMih0by5yZWcoKSwgY3ljbGVTbG90KDApKTsKLSsgICAgICB9Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpHRU5FUkFMOgotKyAgICAgIGlmICh0by5pc01l bW9yeSgpKSB7Ci0rICAgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsK LSsgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgICBt YXNtLmxvYWRQdHIoZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSwgc2NyYXRjaCk7Ci0rICAgICAgICBt YXNtLnN0b3JlUHRyKHNjcmF0Y2gsIGN5Y2xlU2xvdCgwKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsg ICAgICAgIG1hc20uc3RvcmVQdHIodG8ucmVnKCksIGN5Y2xlU2xvdCgwKSk7Ci0rICAgICAgfQot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1vdmVPcDo6U0lNRDEyODoKLSsgICAgICBpZiAodG8u aXNNZW1vcnkoKSkgewotKyAgICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKG1hc20p OwotKyAgICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChnZXRBZGp1c3RlZEFkZHJlc3Mo dG8pLCBzY3JhdGNoKTsKLSsgICAgICAgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4KHNjcmF0 Y2gsIGN5Y2xlU2xvdChzbG90SWQpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5z dG9yZVVuYWxpZ25lZFNpbWQxMjgodG8uZmxvYXRSZWcoKSwgY3ljbGVTbG90KHNsb3RJZCkpOwot KyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0go IlVuZXhwZWN0ZWQgbW92ZSB0eXBlIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0ZXJQ UEM2NDo6Y29tcGxldGVDeWNsZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW92ZU9wZXJhbmQmIHRvLCBNb3ZlT3A6 OlR5cGUgdHlwZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3Qgc2xvdElkKSB7Ci0rICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBNb3ZlT3A6OkZMT0FU MzI6Ci0rICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hGbG9hdDMy U2NvcGUgZnBzY3JhdGNoMzIobWFzbSk7Ci0rICAgICAgICBtYXNtLmxvYWRGbG9hdDMyKGN5Y2xl U2xvdChzbG90SWQpLCBmcHNjcmF0Y2gzMik7Ci0rICAgICAgICBtYXNtLnN0b3JlRmxvYXQzMihm cHNjcmF0Y2gzMiwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsg ICAgICAgIG1hc20ubG9hZEZsb2F0MzIoY3ljbGVTbG90KHNsb3RJZCksIHRvLmZsb2F0UmVnKCkp OwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OkRPVUJMRToKLSsg ICAgICBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAgU2NyYXRjaERvdWJsZVNjb3BlIGZw c2NyYXRjaDY0KG1hc20pOwotKyAgICAgICAgbWFzbS5sb2FkRG91YmxlKGN5Y2xlU2xvdChzbG90 SWQpLCBmcHNjcmF0Y2g2NCk7Ci0rICAgICAgICBtYXNtLnN0b3JlRG91YmxlKGZwc2NyYXRjaDY0 LCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFz bS5sb2FkRG91YmxlKGN5Y2xlU2xvdChzbG90SWQpLCB0by5mbG9hdFJlZygpKTsKLSsgICAgICB9 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpJTlQzMjoKLSsgICAgICBNT1pfQVNT RVJUKHNsb3RJZCA9PSAwKTsKLSsgICAgICBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgICAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgICAgbWFzbS5sb2FkMzIoY3ljbGVTbG90 KDApLCBzY3JhdGNoKTsKLSsgICAgICAgIG1hc20uc3RvcmUzMihzY3JhdGNoLCBnZXRBZGp1c3Rl ZEFkZHJlc3ModG8pKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5sb2FkMzIoY3lj bGVTbG90KDApLCB0by5yZWcoKSk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IE1vdmVPcDo6R0VORVJBTDoKLSsgICAgICBNT1pfQVNTRVJUKHNsb3RJZCA9PSAwKTsKLSsgICAg ICBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMobWFzbSk7Ci0rICAgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgICAgICAgbWFzbS5sb2FkUHRyKGN5Y2xlU2xvdCgwKSwgc2NyYXRjaCk7Ci0rICAgICAg ICBtYXNtLnN0b3JlUHRyKHNjcmF0Y2gsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgICAg IH0gZWxzZSB7Ci0rICAgICAgICBtYXNtLmxvYWRQdHIoY3ljbGVTbG90KDApLCB0by5yZWcoKSk7 Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1vdmVPcDo6U0lNRDEyODoKLSsg ICAgICBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKG1hc20pOwotKyAgICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChjeWNsZVNs b3Qoc2xvdElkKSwgc2NyYXRjaCk7Ci0rICAgICAgICBtYXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEy OChzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgICB9IGVsc2UgewotKyAg ICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChjeWNsZVNsb3Qoc2xvdElkKSwgdG8uZmxv YXRSZWcoKSk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAg IE1PWl9DUkFTSCgiVW5leHBlY3RlZCBtb3ZlIHR5cGUiKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBN b3ZlRW1pdHRlclBQQzY0OjplbWl0KGNvbnN0IE1vdmVSZXNvbHZlciYgbW92ZXMpIHsKLSsgIGlm IChtb3Zlcy5udW1DeWNsZXMoKSkgewotKyAgICAvLyBTcGlsbFNsb3RTaXplIG11c3QgYmUgd2lk ZSBlbm91Z2ggZm9yIHRoZSB3aWRlc3QgY3ljbGVkIHZhbHVlCi0rICAgIC8vIChTSU1EMTI4ID0g MTYgYnl0ZXMpLiBUaGUgc3RyaWRlIGJlbG93IGFzc3VtZXMgdGhlIHNhbWUuIFNlZQotKyAgICAv LyBBcmNoaXRlY3R1cmUtcHBjNjQuaCBmb3IgdGhlIHJhdGlvbmFsZS4KLSsgICAgc3RhdGljX2Fz c2VydChTcGlsbFNsb3RTaXplID09IDE2KTsKLSsgICAgbWFzbS5yZXNlcnZlU3RhY2sobW92ZXMu bnVtQ3ljbGVzKCkgKiBTcGlsbFNsb3RTaXplKTsKLSsgICAgcHVzaGVkQXRDeWNsZV8gPSBtYXNt LmZyYW1lUHVzaGVkKCk7Ci0rICB9Ci0rCi0rICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1vdmVz Lm51bU1vdmVzKCk7IGkrKykgewotKyAgICBlbWl0KG1vdmVzLmdldE1vdmUoaSkpOwotKyAgfQot K30KLSsKLStBZGRyZXNzIE1vdmVFbWl0dGVyUFBDNjQ6OmN5Y2xlU2xvdCh1aW50MzJfdCBzbG90 LCB1aW50MzJfdCBzdWJzbG90KSBjb25zdCB7Ci0rICBpbnQzMl90IG9mZnNldCA9IG1hc20uZnJh bWVQdXNoZWQoKSAtIHB1c2hlZEF0Q3ljbGVfOwotKyAgLy8gU3RyaWRlIG11c3QgbWF0Y2ggdGhl IHBlci1jeWNsZSByZXNlcnZhdGlvbiBpbiBlbWl0KCk7IHVzaW5nIGEKLSsgIC8vIG5hcnJvd2Vy IHN0cmlkZSBjYXVzZXMgYWRqYWNlbnQgU0lNRDEyOCBzbG90cyB0byBvdmVybGFwLgotKyAgcmV0 dXJuIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBvZmZzZXQgKyBzbG90ICogU3BpbGxTbG90U2l6ZSAr IHN1YnNsb3QpOwotK30KLSsKLStpbnQzMl90IE1vdmVFbWl0dGVyUFBDNjQ6OmdldEFkanVzdGVk T2Zmc2V0KGNvbnN0IE1vdmVPcGVyYW5kJiBvcGVyYW5kKSB7Ci0rICBNT1pfQVNTRVJUKG9wZXJh bmQuaXNNZW1vcnlPckVmZmVjdGl2ZUFkZHJlc3MoKSk7Ci0rICBpZiAob3BlcmFuZC5iYXNlKCkg IT0gU3RhY2tQb2ludGVyKSB7Ci0rICAgIHJldHVybiBvcGVyYW5kLmRpc3AoKTsKLSsgIH0KLSsK LSsgIHJldHVybiBvcGVyYW5kLmRpc3AoKSArIG1hc20uZnJhbWVQdXNoZWQoKSAtIHB1c2hlZEF0 U3RhcnRfOwotK30KLSsKLStBZGRyZXNzIE1vdmVFbWl0dGVyUFBDNjQ6OmdldEFkanVzdGVkQWRk cmVzcyhjb25zdCBNb3ZlT3BlcmFuZCYgb3BlcmFuZCkgewotKyAgcmV0dXJuIEFkZHJlc3Mob3Bl cmFuZC5iYXNlKCksIGdldEFkanVzdGVkT2Zmc2V0KG9wZXJhbmQpKTsKLSt9Ci0rCi0rdm9pZCBN b3ZlRW1pdHRlclBQQzY0OjplbWl0TW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0bykgewotKyAg aWYgKGZyb20uaXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7 Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGZyb20ucmVnKCksIHRvLnJlZygpKTsKLSsgICAgfSBlbHNl IGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgbWFzbS5zdG9yZVB0cihmcm9tLnJlZygpLCBn ZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pfQ1JBU0go IkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKGZy b20uaXNNZW1vcnkoKSkgewotKyAgICBpZiAodG8uaXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgICBt YXNtLmxvYWRQdHIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0by5yZWcoKSk7Ci0rICAgIH0g ZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKG1hc20pOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICAgICAgbWFzbS5sb2FkUHRyKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgc2NyYXRjaCk7 Ci0rICAgICAgbWFzbS5zdG9yZVB0cihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsK LSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdE1vdmUgYXJndW1l bnRzLiIpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKGZyb20uaXNFZmZlY3RpdmVBZGRyZXNzKCkp IHsKLSsgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgICAgbWFzbS5jb21wdXRlRWZm ZWN0aXZlQWRkcmVzcyhnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLnJlZygpKTsKLSsgICAg fSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMobWFzbSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgICAgICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGdldEFkanVzdGVkQWRkcmVz cyhmcm9tKSwgc2NyYXRjaCk7Ci0rICAgICAgbWFzbS5zdG9yZVB0cihzY3JhdGNoLCBnZXRBZGp1 c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pfQ1JBU0goIkludmFs aWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBNT1pf Q1JBU0goIkludmFsaWQgZW1pdE1vdmUgYXJndW1lbnRzLiIpOwotKyAgfQotK30KLSsKLSt2b2lk IE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXRJbnQzMk1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5k JiB0bykgewotKyAgaWYgKGZyb20uaXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgaWYgKHRvLmlzR2Vu ZXJhbFJlZygpKSB7Ci0rICAgICAgbWFzbS5tb3ZlMzIoZnJvbS5yZWcoKSwgdG8ucmVnKCkpOwot KyAgICB9IGVsc2UgaWYgKHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICBtYXNtLnN0b3JlMzIoZnJv bS5yZWcoKSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg TU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUgYXJndW1lbnRzLiIpOwotKyAgICB9Ci0r ICB9IGVsc2UgaWYgKGZyb20uaXNNZW1vcnkoKSkgewotKyAgICBpZiAodG8uaXNHZW5lcmFsUmVn KCkpIHsKLSsgICAgICBtYXNtLmxvYWQzMihnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLnJl ZygpKTsKLSsgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgICAgICBtYXNtLmxvYWQzMihnZXRBZGp1c3RlZEFkZHJlc3MoZnJv bSksIHNjcmF0Y2gpOwotKyAgICAgIG1hc20uc3RvcmUzMihzY3JhdGNoLCBnZXRBZGp1c3RlZEFk ZHJlc3ModG8pKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1p dEludDMyTW92ZSBhcmd1bWVudHMuIik7Ci0rICAgIH0KLSsgIH0gZWxzZSBpZiAoZnJvbS5pc0Vm ZmVjdGl2ZUFkZHJlc3MoKSkgewotKyAgICBpZiAodG8uaXNHZW5lcmFsUmVnKCkpIHsKLSsgICAg ICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwg dG8ucmVnKCkpOwotKyAgICB9IGVsc2UgaWYgKHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3Mo Z2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBzY3JhdGNoKTsKLSsgICAgICBtYXNtLnN0b3JlMzIo c2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg TU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUgYXJndW1lbnRzLiIpOwotKyAgICB9Ci0r ICB9IGVsc2UgewotKyAgICBNT1pfQ1JBU0goIkludmFsaWQgZW1pdEludDMyTW92ZSBhcmd1bWVu dHMuIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6ZW1pdEZsb2F0MzJN b3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0bykgewotKyAgaWYgKGZyb20uaXNGbG9h dFJlZygpKSB7Ci0rICAgIGlmICh0by5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgICBtYXNtLm1vdmVG bG9hdDMyKGZyb20uZmxvYXRSZWcoKSwgdG8uZmxvYXRSZWcoKSk7Ci0rICAgIH0gZWxzZSB7Ci0r ICAgICAgTU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsKLSsgICAgICBtYXNtLnN0b3JlRmxvYXQz Mihmcm9tLmZsb2F0UmVnKCksIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgICB9Ci0rICB9 IGVsc2UgaWYgKHRvLmlzRmxvYXRSZWcoKSkgewotKyAgICBNT1pfQVNTRVJUKGZyb20uaXNNZW1v cnkoKSk7Ci0rICAgIG1hc20ubG9hZEZsb2F0MzIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0 by5mbG9hdFJlZygpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9BU1NFUlQoZnJvbS5pc01lbW9y eSgpKTsKLSsgICAgTU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsKLSsgICAgU2NyYXRjaEZsb2F0 MzJTY29wZSBmcHNjcmF0Y2gzMihtYXNtKTsKLSsgICAgbWFzbS5sb2FkRmxvYXQzMihnZXRBZGp1 c3RlZEFkZHJlc3MoZnJvbSksIGZwc2NyYXRjaDMyKTsKLSsgICAgbWFzbS5zdG9yZUZsb2F0MzIo ZnBzY3JhdGNoMzIsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgfQotK30KLSsKLSt2b2lk IE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXREb3VibGVNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9t LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW92ZU9wZXJh bmQmIHRvKSB7Ci0rICBpZiAoZnJvbS5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgaWYgKHRvLmlzRmxv YXRSZWcoKSkgewotKyAgICAgIG1hc20ubW92ZURvdWJsZShmcm9tLmZsb2F0UmVnKCksIHRvLmZs b2F0UmVnKCkpOwotKyAgICB9IGVsc2UgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgICAg Ly8gRlBSIC0+IEdQUjogdXNlIG1mdnNyZCBkaXJlY3RseS4KLSsgICAgICBtYXNtLmFzX21mdnNy ZCh0by5yZWcoKSwgZnJvbS5mbG9hdFJlZygpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pf QVNTRVJUKHRvLmlzTWVtb3J5KCkpOwotKyAgICAgIG1hc20uc3RvcmVEb3VibGUoZnJvbS5mbG9h dFJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgfQotKyAgfSBlbHNlIGlmICh0 by5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgaWYgKGZyb20uaXNNZW1vcnkoKSkgewotKyAgICAgIG1h c20ubG9hZERvdWJsZShnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLmZsb2F0UmVnKCkpOwot KyAgICB9IGVsc2UgewotKyAgICAgIC8vIEdQUiAtPiBGUFI6IHVzZSBtdHZzcmQgZGlyZWN0bHku Ci0rICAgICAgbWFzbS5hc19tdHZzcmQodG8uZmxvYXRSZWcoKSwgZnJvbS5yZWcoKSk7Ci0rICAg IH0KLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9BU1NFUlQoZnJvbS5pc01lbW9yeSgpKTsKLSsgICAg TU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsKLSsgICAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2Ny YXRjaDY0KG1hc20pOwotKyAgICBtYXNtLmxvYWREb3VibGUoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZy b20pLCBmcHNjcmF0Y2g2NCk7Ci0rICAgIG1hc20uc3RvcmVEb3VibGUoZnBzY3JhdGNoNjQsIGdl dEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgfQotK30KLSsKLSt2b2lkIE1vdmVFbWl0dGVyUFBD NjQ6OmVtaXRTaW1kMTI4TW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsKLSsg IGlmIChmcm9tLmlzRmxvYXRSZWcoKSkgewotKyAgICBpZiAodG8uaXNGbG9hdFJlZygpKSB7Ci0r ICAgICAgbWFzbS5tb3ZlU2ltZDEyOChmcm9tLmZsb2F0UmVnKCksIHRvLmZsb2F0UmVnKCkpOwot KyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7Ci0rICAgICAg bWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgoZnJvbS5mbG9hdFJlZygpLCBnZXRBZGp1c3RlZEFk ZHJlc3ModG8pKTsKLSsgICAgfQotKyAgfSBlbHNlIGlmICh0by5pc0Zsb2F0UmVnKCkpIHsKLSsg ICAgTU9aX0FTU0VSVChmcm9tLmlzTWVtb3J5KCkpOwotKyAgICBtYXNtLmxvYWRVbmFsaWduZWRT aW1kMTI4KGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgdG8uZmxvYXRSZWcoKSk7Ci0rICB9IGVs c2UgewotKyAgICBNT1pfQVNTRVJUKGZyb20uaXNNZW1vcnkoKSk7Ci0rICAgIE1PWl9BU1NFUlQo dG8uaXNNZW1vcnkoKSk7Ci0rICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsK LSsgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSks IHNjcmF0Y2gpOwotKyAgICBtYXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEyOChzY3JhdGNoLCBnZXRB ZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNb3ZlRW1pdHRlclBQQzY0 OjplbWl0KGNvbnN0IE1vdmVPcCYgbW92ZSkgewotKyAgY29uc3QgTW92ZU9wZXJhbmQmIGZyb20g PSBtb3ZlLmZyb20oKTsKLSsgIGNvbnN0IE1vdmVPcGVyYW5kJiB0byA9IG1vdmUudG8oKTsKLSsK LSsgIGlmIChtb3ZlLmlzQ3ljbGVFbmQoKSAmJiBtb3ZlLmlzQ3ljbGVCZWdpbigpKSB7Ci0rICAg IGJyZWFrQ3ljbGUoZnJvbSwgdG8sIG1vdmUuZW5kQ3ljbGVUeXBlKCksIG1vdmUuY3ljbGVCZWdp blNsb3QoKSk7Ci0rICAgIGNvbXBsZXRlQ3ljbGUoZnJvbSwgdG8sIG1vdmUudHlwZSgpLCBtb3Zl LmN5Y2xlRW5kU2xvdCgpKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgaWYgKG1vdmUuaXND eWNsZUVuZCgpKSB7Ci0rICAgIE1PWl9BU1NFUlQoaW5DeWNsZV8pOwotKyAgICBjb21wbGV0ZUN5 Y2xlKGZyb20sIHRvLCBtb3ZlLnR5cGUoKSwgbW92ZS5jeWNsZUVuZFNsb3QoKSk7Ci0rICAgIE1P Wl9BU1NFUlQoaW5DeWNsZV8gPiAwKTsKLSsgICAgaW5DeWNsZV8tLTsKLSsgICAgcmV0dXJuOwot KyAgfQotKwotKyAgaWYgKG1vdmUuaXNDeWNsZUJlZ2luKCkpIHsKLSsgICAgYnJlYWtDeWNsZShm cm9tLCB0bywgbW92ZS5lbmRDeWNsZVR5cGUoKSwgbW92ZS5jeWNsZUJlZ2luU2xvdCgpKTsKLSsg ICAgaW5DeWNsZV8rKzsKLSsgIH0KLSsKLSsgIHN3aXRjaCAobW92ZS50eXBlKCkpIHsKLSsgICAg Y2FzZSBNb3ZlT3A6OkZMT0FUMzI6Ci0rICAgICAgZW1pdEZsb2F0MzJNb3ZlKGZyb20sIHRvKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OkRPVUJMRToKLSsgICAgICBlbWl0RG91 YmxlTW92ZShmcm9tLCB0byk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpTSU1E MTI4OgotKyAgICAgIGVtaXRTaW1kMTI4TW92ZShmcm9tLCB0byk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgTW92ZU9wOjpJTlQzMjoKLSsgICAgICBlbWl0SW50MzJNb3ZlKGZyb20sIHRvKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OkdFTkVSQUw6Ci0rICAgICAgZW1pdE1v dmUoZnJvbSwgdG8pOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9D UkFTSCgiVW5leHBlY3RlZCBtb3ZlIHR5cGUiKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNb3ZlRW1p dHRlclBQQzY0Ojphc3NlcnREb25lKCkgeyBNT1pfQVNTRVJUKGluQ3ljbGVfID09IDApOyB9Ci0r Ci0rdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjpmaW5pc2goKSB7Ci0rICBhc3NlcnREb25lKCk7Ci0r Ci0rICBtYXNtLmZyZWVTdGFjayhtYXNtLmZyYW1lUHVzaGVkKCkgLSBwdXNoZWRBdFN0YXJ0Xyk7 Ci0rfQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuaCBi L2pzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAxMDA2 NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uYTlmYWEzNGRlNmJiCi0tLS0gL2Rldi9udWxsCi0rKysg Yi9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmgKLUBAIC0wLDAgKzEsNjQgQEAK LSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg Yy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3 PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBv ZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0 aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBv YnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVm IGppdF9wcGM2NF9Nb3ZlRW1pdHRlcl9wcGM2NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfTW92ZUVt aXR0ZXJfcHBjNjRfaAotKwotKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXIuaCIKLSsjaW5j bHVkZSAiaml0L01vdmVSZXNvbHZlci5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNl IGppdCB7Ci0rCi0rY2xhc3MgTW92ZUVtaXR0ZXJQUEM2NCB7Ci0rICB2b2lkIGVtaXREb3VibGVN b3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pOwotKyAg dm9pZCBlbWl0U2ltZDEyOE1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVP cGVyYW5kJiB0byk7Ci0rICB2b2lkIGJyZWFrQ3ljbGUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20s IGNvbnN0IE1vdmVPcGVyYW5kJiB0bywKLSsgICAgICAgICAgICAgICAgICBNb3ZlT3A6OlR5cGUg dHlwZSwgdWludDMyX3Qgc2xvdCk7Ci0rICB2b2lkIGNvbXBsZXRlQ3ljbGUoY29uc3QgTW92ZU9w ZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0bywKLSsgICAgICAgICAgICAgICAgICAg ICBNb3ZlT3A6OlR5cGUgdHlwZSwgdWludDMyX3Qgc2xvdCk7Ci0rCi0rIHByb3RlY3RlZDoKLSsg IHVpbnQzMl90IGluQ3ljbGVfOwotKyAgTWFjcm9Bc3NlbWJsZXImIG1hc207Ci0rCi0rICB1aW50 MzJfdCBwdXNoZWRBdFN0YXJ0XzsKLSsKLSsgIGludDMyX3QgcHVzaGVkQXRDeWNsZV87Ci0rCi0r ICB2b2lkIGFzc2VydERvbmUoKTsKLSsgIEFkZHJlc3MgY3ljbGVTbG90KHVpbnQzMl90IHNsb3Qs IHVpbnQzMl90IHN1YnNsb3QgPSAwKSBjb25zdDsKLSsgIGludDMyX3QgZ2V0QWRqdXN0ZWRPZmZz ZXQoY29uc3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQpOwotKyAgQWRkcmVzcyBnZXRBZGp1c3RlZEFk ZHJlc3MoY29uc3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQpOwotKwotKyAgdm9pZCBlbWl0TW92ZShj b25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQmIHRvKTsKLSsgIHZvaWQg ZW1pdEludDMyTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQm IHRvKTsKLSsgIHZvaWQgZW1pdEZsb2F0MzJNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBj b25zdCBNb3ZlT3BlcmFuZCYgdG8pOwotKyAgdm9pZCBlbWl0KGNvbnN0IE1vdmVPcCYgbW92ZSk7 Ci0rCi0rIHB1YmxpYzoKLSsgIGV4cGxpY2l0IE1vdmVFbWl0dGVyUFBDNjQoTWFjcm9Bc3NlbWJs ZXImIG1hc20pCi0rICAgICAgOiBpbkN5Y2xlXygwKSwKLSsgICAgICAgIG1hc20obWFzbSksCi0r ICAgICAgICBwdXNoZWRBdFN0YXJ0XyhtYXNtLmZyYW1lUHVzaGVkKCkpLAotKyAgICAgICAgcHVz aGVkQXRDeWNsZV8oLTEpIHt9Ci0rCi0rICB+TW92ZUVtaXR0ZXJQUEM2NCgpIHsgYXNzZXJ0RG9u ZSgpOyB9Ci0rCi0rICB2b2lkIGVtaXQoY29uc3QgTW92ZVJlc29sdmVyJiBtb3Zlcyk7Ci0rICB2 b2lkIGZpbmlzaCgpOwotKyAgLy8gc2V0U2NyYXRjaFJlZ2lzdGVyIGlzIHBhcnQgb2YgdGhlIGNy b3NzLWFyY2ggTW92ZUVtaXR0ZXIgaW50ZXJmYWNlCi0rICAvLyBidXQgd2UgbmV2ZXIgc3BpbGws IHNvIHRoZXJlJ3Mgbm8gc2NyYXRjaCB0byBzZXQuIE5vLW9wIGtlcHQgZm9yCi0rICAvLyBzaGFy ZWQtY29kZSBjb21wYXRpYmlsaXR5LgotKyAgdm9pZCBzZXRTY3JhdGNoUmVnaXN0ZXIoUmVnaXN0 ZXIgcmVnKSB7fQotK307Ci0rCi0rdHlwZWRlZiBNb3ZlRW1pdHRlclBQQzY0IE1vdmVFbWl0dGVy OwotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5k aWYgLyogaml0X3BwYzY0X01vdmVFbWl0dGVyX3BwYzY0X2ggKi8KLWRpZmYgLS1naXQgYS9qcy9z cmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaCBiL2pzL3NyYy9qaXQvcHBj NjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi5hYTg3NGRmZDY3MzIKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3Ny Yy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oCi1AQCAtMCwwICsxLDgzIEBA Ci0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7 IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0 dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMg b2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2Yg dGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4g b2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRl ZiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2lubF9oCi0rI2RlZmluZSBqaXRfcHBj NjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2lubF9oCi0rCi0rI2luY2x1ZGUgImppdC9CYXNlbGlu ZUZyYW1lLmgiCi0rI2luY2x1ZGUgImppdC9TaGFyZWRJQ0hlbHBlcnMuaCIKLSsKLSsjaW5jbHVk ZSAiaml0L01hY3JvQXNzZW1ibGVyLWlubC5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNw YWNlIGppdCB7Ci0rCi0raW5saW5lIHZvaWQgRW1pdEJhc2VsaW5lVGFpbENhbGxWTShUcmFtcG9s aW5lUHRyIHRhcmdldCwgTWFjcm9Bc3NlbWJsZXImIG1hc20sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmdTaXplKSB7Ci0rI2lmZGVmIERFQlVHCi0rICBS ZWdpc3RlciBzY3JhdGNoID0gUjIuc2NyYXRjaFJlZygpOwotKwotKyAgLy8gQ29tcHV0ZSBmcmFt ZSBzaXplLgotKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9pbnRlciwgc2NyYXRjaCk7Ci0rICBtYXNt LnN1YlB0cihTdGFja1BvaW50ZXIsIHNjcmF0Y2gpOwotKwotKyAgLy8gU3RvcmUgZnJhbWUgc2l6 ZSB3aXRob3V0IFZNRnVuY3Rpb24gYXJndW1lbnRzIGZvciBkZWJ1ZyBhc3NlcnRpb25zLgotKyAg bWFzbS5zdWJQdHIoSW1tMzIoYXJnU2l6ZSksIHNjcmF0Y2gpOwotKyAgQWRkcmVzcyBmcmFtZVNp emVBZGRyKEZyYW1lUG9pbnRlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZUZy YW1lOjpyZXZlcnNlT2Zmc2V0T2ZEZWJ1Z0ZyYW1lU2l6ZSgpKTsKLSsgIG1hc20uc3RvcmUzMihz Y3JhdGNoLCBmcmFtZVNpemVBZGRyKTsKLSsgIG1hc20uYWRkUHRyKEltbTMyKGFyZ1NpemUpLCBz Y3JhdGNoKTsKLSsjZW5kaWYKLSsKLSsgIC8vIFB1c2ggZnJhbWUgZGVzY3JpcHRvciBhbmQgcGVy Zm9ybSB0aGUgdGFpbCBjYWxsLgotKyAgbWFzbS5wdXNoKEZyYW1lRGVzY3JpcHRvcihGcmFtZVR5 cGU6OkJhc2VsaW5lSlMpKTsKLSsKLSsgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBpbiBMUiAo c2V0IGJ5IHRoZSBvcmlnaW5hbCBibC9iY3RybCBjYWxsKS4KLSsgIC8vIFRoZSBWTVdyYXBwZXIg Y29kZSB3aWxsIHB1c2ggaXQgdmlhIHB1c2hSZXR1cm5BZGRyZXNzKCkuCi0rCi0rICBtYXNtLmp1 bXAodGFyZ2V0KTsKLSt9Ci0rCi0raW5saW5lIHZvaWQgRW1pdEJhc2VsaW5lQ2FsbFZNKFRyYW1w b2xpbmVQdHIgdGFyZ2V0LCBNYWNyb0Fzc2VtYmxlciYgbWFzbSkgewotKyAgbWFzbS5wdXNoKEZy YW1lRGVzY3JpcHRvcihGcmFtZVR5cGU6OkJhc2VsaW5lU3R1YikpOwotKyAgbWFzbS5jYWxsKHRh cmdldCk7Ci0rfQotKwotK2lubGluZSB2b2lkIEVtaXRCYXNlbGluZUVudGVyU3R1YkZyYW1lKE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICBNT1pfQVNTRVJUKHNj cmF0Y2ggIT0gSUNUYWlsQ2FsbFJlZyk7Ci0rCi0rI2lmZGVmIERFQlVHCi0rICAvLyBDb21wdXRl IGZyYW1lIHNpemUuCi0rICBtYXNtLm1vdmVQdHIoRnJhbWVQb2ludGVyLCBzY3JhdGNoKTsKLSsg IG1hc20uc3ViUHRyKFN0YWNrUG9pbnRlciwgc2NyYXRjaCk7Ci0rCi0rICBBZGRyZXNzIGZyYW1l U2l6ZUFkZHIoRnJhbWVQb2ludGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5l RnJhbWU6OnJldmVyc2VPZmZzZXRPZkRlYnVnRnJhbWVTaXplKCkpOwotKyAgbWFzbS5zdG9yZTMy KHNjcmF0Y2gsIGZyYW1lU2l6ZUFkZHIpOwotKyNlbmRpZgotKwotKyAgLy8gTm90ZTogd2hlbiBt YWtpbmcgY2hhbmdlcyBoZXJlLCBkb24ndCBmb3JnZXQgdG8gdXBkYXRlCi0rICAvLyBCYXNlbGlu ZVN0dWJGcmFtZSBpZiBuZWVkZWQuCi0rCi0rICAvLyBQdXNoIGZyYW1lIGRlc2NyaXB0b3IgYW5k IHJldHVybiBhZGRyZXNzLgotKyAgLy8gTFIgaG9sZHMgdGhlIHJldHVybiBhZGRyZXNzOyByZWFk IGl0IGludG8gSUNUYWlsQ2FsbFJlZyB0byBwdXNoLgotKyAgbWFzbS5QdXNoKEZyYW1lRGVzY3Jp cHRvcihGcmFtZVR5cGU6OkJhc2VsaW5lSlMpKTsKLSsgIG1hc20ueHNfbWZscihJQ1RhaWxDYWxs UmVnKTsKLSsgIG1hc20uUHVzaChJQ1RhaWxDYWxsUmVnKTsKLSsKLSsgIC8vIFNhdmUgb2xkIGZy YW1lIHBvaW50ZXIsIHN0YWNrIHBvaW50ZXIgYW5kIHN0dWIgcmVnLgotKyAgbWFzbS5QdXNoKEZy YW1lUG9pbnRlcik7Ci0rICBtYXNtLm1vdmVQdHIoU3RhY2tQb2ludGVyLCBGcmFtZVBvaW50ZXIp OwotKyAgbWFzbS5QdXNoKElDU3R1YlJlZyk7Ci0rCi0rICAvLyBTdGFjayBzaG91bGQgcmVtYWlu IGFsaWduZWQuCi0rICBtYXNtLmFzc2VydFN0YWNrQWxpZ25tZW50KHNpemVvZihWYWx1ZSksIDAp OwotK30KLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0r I2VuZGlmIC8qIGppdF9wcGM2NF9TaGFyZWRJQ0hlbHBlcnNfcHBjNjRfaW5sX2ggKi8KLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC5oIGIvanMvc3Jj L2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LWluZGV4IDAwMDAwMDAwMDAwMC4uMzFiYTgzMGQyNjA5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9q cy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC5oCi1AQCAtMCwwICsxLDk3IEBA Ci0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7 IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0 dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMg b2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2Yg dGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4g b2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRl ZiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2gKLSsjZGVmaW5lIGppdF9wcGM2NF9T aGFyZWRJQ0hlbHBlcnNfcHBjNjRfaAotKwotKyNpbmNsdWRlICJqaXQvQmFzZWxpbmVJQy5oIgot KyNpbmNsdWRlICJqaXQvSml0RnJhbWVzLmgiCi0rI2luY2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxl ci5oIgotKyNpbmNsdWRlICJqaXQvU2hhcmVkSUNSZWdpc3RlcnMuaCIKLSsKLStuYW1lc3BhY2Ug anMgewotK25hbWVzcGFjZSBqaXQgewotKwotKy8vIERpc3RhbmNlIGZyb20gc3AgdG8gdGhlIHRv cCBWYWx1ZSBpbnNpZGUgYW4gSUMgc3R1YiAobm8gcmV0dXJuIGFkZHJlc3Mgb24KLSsvLyB0aGUg c3RhY2sgb24gUFBDNjQpLgotK3N0YXRpYyBjb25zdCBzaXplX3QgSUNTdGFja1ZhbHVlT2Zmc2V0 ID0gMDsKLSsKLStzdHJ1Y3QgQmFzZWxpbmVTdHViRnJhbWUgewotKyAgdWludHB0cl90IHNhdmVk RnJhbWU7Ci0rICB1aW50cHRyX3Qgc2F2ZWRTdHViOwotKyAgdWludHB0cl90IHJldHVybkFkZHJl c3M7Ci0rICB1aW50cHRyX3QgZGVzY3JpcHRvcjsKLSt9OwotKwotK2lubGluZSB2b2lkIEVtaXRS ZXN0b3JlVGFpbENhbGxSZWcoTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSsgIC8vIE9uIFBQQzY0 LCBMUiBhbHdheXMgaG9sZHMgdGhlIHJldHVybiBhZGRyZXNzIGFmdGVyIGEgYmwvYmN0cmwgY2Fs bC4KLSsgIC8vIE5vLW9wOiBMUiBpcyB0aGUgaGFyZHdhcmUgbGluayByZWdpc3Rlciwgbm90IGEg R1BSIG9uIHRoZSBzdGFjay4KLSt9Ci0rCi0raW5saW5lIHZvaWQgRW1pdFJlcHVzaFRhaWxDYWxs UmVnKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7Ci0rICAvLyBOby1vcDogTFIgYWxyZWFkeSBob2xk cyB0aGUgcmV0dXJuIGFkZHJlc3MuCi0rfQotKwotK2lubGluZSB2b2lkIEVtaXRDYWxsSUMoTWFj cm9Bc3NlbWJsZXImIG1hc20sIENvZGVPZmZzZXQqIGNhbGxPZmZzZXQpIHsKLSsgIC8vIFRoZSBz dHViIHBvaW50ZXIgbXVzdCBhbHJlYWR5IGJlIGluIElDU3R1YlJlZy4KLSsgIC8vIExvYWQgc3R1 YmNvZGUgcG9pbnRlciBmcm9tIHRoZSBJQ1N0dWIuCi0rICAvLyBSMiB3b24ndCBiZSBhY3RpdmUg d2hlbiB3ZSBjYWxsIElDcywgc28gd2UgY2FuIHVzZSBpdCBhcyBzY3JhdGNoLgotKyAgbWFzbS5s b2FkUHRyKEFkZHJlc3MoSUNTdHViUmVnLCBJQ1N0dWI6Om9mZnNldE9mU3R1YkNvZGUoKSksIFIy LnNjcmF0Y2hSZWcoKSk7Ci0rCi0rICAvLyBDYWxsIHRoZSBzdHViY29kZS4gT24gUFBDNjQgY2Fs bChSZWdpc3RlcikgZW1pdHMgbXRjdHIgKyBiY3RybCwKLSsgIC8vIHdoaWNoIHNldHMgTFIgdG8g dGhlIGFkZHJlc3MgYWZ0ZXIgYmN0cmwuCi0rICBtYXNtLmNhbGwoUjIuc2NyYXRjaFJlZygpKTsK LSsgICpjYWxsT2Zmc2V0ID0gQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSk7Ci0rfQot KwotK2lubGluZSB2b2lkIEVtaXRSZXR1cm5Gcm9tSUMoTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsK LSsgIC8vIFJldHVybiB2aWEgaGFyZHdhcmUgTFIgKHNldCBieSB0aGUgb3JpZ2luYWwgYmwvYmN0 cmwgY2FsbCkuCi0rICBtYXNtLmFzX2JscigpOwotK30KLSsKLStpbmxpbmUgdm9pZCBFbWl0QmFz ZWxpbmVMZWF2ZVN0dWJGcmFtZShNYWNyb0Fzc2VtYmxlciYgbWFzbSkgewotKyAgbWFzbS5sb2Fk UHRyKAotKyAgICAgIEFkZHJlc3MoRnJhbWVQb2ludGVyLCBCYXNlbGluZVN0dWJGcmFtZUxheW91 dDo6SUNTdHViT2Zmc2V0RnJvbUZQKSwKLSsgICAgICBJQ1N0dWJSZWcpOwotKwotKyAgbWFzbS5t b3ZlUHRyKEZyYW1lUG9pbnRlciwgU3RhY2tQb2ludGVyKTsKLSsgIG1hc20uUG9wKEZyYW1lUG9p bnRlcik7Ci0rCi0rICAvLyBMb2FkIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcmVzdG9yZSBpdCB0 byBMUi4KLSsgIG1hc20uUG9wKElDVGFpbENhbGxSZWcpOwotKyAgbWFzbS54c19tdGxyKElDVGFp bENhbGxSZWcpOwotKwotKyAgLy8gRGlzY2FyZCB0aGUgZnJhbWUgZGVzY3JpcHRvci4KLSsgIHsK LSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1hc20uUG9wKHNjcmF0Y2gpOwotKyAg fQotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgQWRkclR5cGU+Ci0raW5saW5lIHZvaWQgRW1p dFByZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIGNvbnN0IEFkZHJUeXBlJiBhZGRyLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JUlR5cGUgdHlwZSkgewotKyAgLy8gT24gUFBD NjQsIExSIGlzIGNsb2JiZXJlZCBieSBndWFyZGVkQ2FsbFByZUJhcnJpZXIuIFNhdmUgaXQgZmly c3QuCi0rICBtYXNtLnhzX21mbHIocjApOwotKyAgbWFzbS5wdXNoKHIwKTsKLSsgIG1hc20uZ3Vh cmRlZENhbGxQcmVCYXJyaWVyKGFkZHIsIHR5cGUpOwotKyAgbWFzbS5wb3AocjApOwotKyAgbWFz bS54c19tdGxyKHIwKTsKLSt9Ci0rCi0raW5saW5lIHZvaWQgRW1pdFN0dWJHdWFyZEZhaWx1cmUo TWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSsgIC8vIExvYWQgbmV4dCBzdHViIGludG8gSUNTdHVi UmVnLgotKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoSUNTdHViUmVnLCBJQ0NhY2hlSVJTdHViOjpv ZmZzZXRPZk5leHQoKSksIElDU3R1YlJlZyk7Ci0rCi0rICAvLyBSZXR1cm4gYWRkcmVzcyBpcyBp biBMUi4gSnVtcCB0byB0aGUgbmV4dCBzdHViY29kZS4KLSsgIG1hc20uanVtcChBZGRyZXNzKElD U3R1YlJlZywgSUNTdHViOjpvZmZzZXRPZlN0dWJDb2RlKCkpKTsKLSt9Ci0rCi0rfSAgLy8gbmFt ZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBqaXRfcHBjNjRf U2hhcmVkSUNIZWxwZXJzX3BwYzY0X2ggKi8KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0 L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDUmVn aXN0ZXJzLXBwYzY0LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAu LmRkZjY3MzQyZjg1NQotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9wcGM2NC9TaGFy ZWRJQ1JlZ2lzdGVycy1wcGM2NC5oCi1AQCAtMCwwICsxLDQ2IEBACi0rLyogLSotIE1vZGU6IEMr KzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAy IC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNv dXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVi bGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRp c3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRw Oi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRlZiBqaXRfcHBjNjRfU2hhcmVk SUNSZWdpc3RlcnNfcHBjNjRfaAotKyNkZWZpbmUgaml0X3BwYzY0X1NoYXJlZElDUmVnaXN0ZXJz X3BwYzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIgotKyNp bmNsdWRlICJqaXQvUmVnaXN0ZXJzLmgiCi0rI2luY2x1ZGUgImppdC9SZWdpc3RlclNldHMuaCIK LSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQgewotKwotKy8vIFZhbHVlT3BlcmFu ZHMgUjAsIFIxLCBhbmQgUjIuCi0rLy8gUjAgPT0gSlNSZXR1cm5SZWcsIGFuZCBSMiB1c2VzIHJl Z2lzdGVycyBub3QgcHJlc2VydmVkIGFjcm9zcyBjYWxscy4gUjEgdmFsdWUKLSsvLyBzaG91bGQg YmUgcHJlc2VydmVkIGFjcm9zcyBjYWxscy4KLStzdGF0aWMgY29uc3RleHByIFZhbHVlT3BlcmFu ZCBSMChyNSk7Ci0rc3RhdGljIGNvbnN0ZXhwciBWYWx1ZU9wZXJhbmQgUjEocjE1KTsKLStzdGF0 aWMgY29uc3RleHByIFZhbHVlT3BlcmFuZCBSMihyNCk7Ci0rCi0rLy8gSUNUYWlsQ2FsbFJlZyBh bmQgSUNTdHViUmVnLgotKy8vIE9uIFBQQzY0LCBMUiBpcyBub3QgYSBHUFIsIHNvIElDVGFpbENh bGxSZWcgbXVzdCBiZSBhIG5vcm1hbCBHUFIuCi0rLy8gUFBDNjQgRUxGdjIgaGFzIG5vIHZvbGF0 aWxlIG5vbi1hcmcgR1BScyAocjMtcjEwIGFyZSBhbGwgYXJnIHJlZ3MpLCBzbwotKy8vIHVzaW5n IGFuIGFyZyByZWdpc3RlciByaXNrcyBjbG9iYmVyaW5nIGJ5IEFCSSBjYWxscyB3aXRoIGVub3Vn aCBhcmd1bWVudHMuCi0rLy8gV2UgdXNlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgaW5zdGVhZCwg bWF0Y2hpbmcgTUlQUzY0L1JJU0MtViBzdHJhdGVneS4KLSsvLyBUaGVzZSBhcmUgZXhjbHVkZWQg ZnJvbSBCYXNlbGluZUlDQXZhaWxhYmxlR2VuZXJhbFJlZ3MuCi0rc3RhdGljIGNvbnN0ZXhwciBS ZWdpc3RlciBJQ1RhaWxDYWxsUmVnID0gcjI3OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg SUNTdHViUmVnID0gcjI2OwotKwotKy8vIEZsb2F0UmVnMCBtdXN0IGJlIGVxdWFsIHRvIFJldHVy bkZsb2F0UmVnLgotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBGbG9hdFJlZzAgPSB7 RmxvYXRSZWdpc3RlcnM6OmYxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9h dFJlZ2lzdGVyIEZsb2F0UmVnMSA9IHtGbG9hdFJlZ2lzdGVyczo6ZjIsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsK LStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgRmxvYXRSZWcyID0ge0Zsb2F0UmVnaXN0 ZXJzOjpmMywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBG bG9hdFJlZzMgPSB7RmxvYXRSZWdpc3RlcnM6OmY0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rCi0rfSAgLy8g bmFtZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBqaXRfcHBj NjRfU2hhcmVkSUNSZWdpc3RlcnNfcHBjNjRfaCAqLwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv cHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBw YzY0LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uOGIyOWVi M2FkZDA0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1w cGM2NC5jcHAKLUBAIC0wLDAgKzEsNzI5NiBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0 aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2 aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBG b3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExp Y2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3 aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEu b3JnL01QTC8yLjAvLiAqLwotKwotKyNpbmNsdWRlICJqaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0 LmgiCi0rCi0rI2luY2x1ZGUgPGNpbnR0eXBlcz4KLSsjaW5jbHVkZSA8Y21hdGg+Ci0rI2luY2x1 ZGUgPGNzdHJpbmc+Ci0rI2luY2x1ZGUgPGZsb2F0Lmg+Ci0rI2luY2x1ZGUgPGxpbWl0cz4KLSsK LSsjaW5jbHVkZSAiaml0L0F0b21pY09wZXJhdGlvbnMuaCIKLSsjaW5jbHVkZSAiaml0L3BwYzY0 L0Fzc2VtYmxlci1wcGM2NC5oIgotKyNpbmNsdWRlICJqcy9Db252ZXJzaW9ucy5oIgotKyNpbmNs dWRlICJ0aHJlYWRpbmcvTG9ja0d1YXJkLmgiCi0rI2luY2x1ZGUgInZtL0Zsb2F0MTYuaCIKLSsj aW5jbHVkZSAidm0vSlNDb250ZXh0LmgiCi0rI2luY2x1ZGUgInZtL1J1bnRpbWUuaCIKLSsjaW5j bHVkZSAid2FzbS9XYXNtSW5zdGFuY2UuaCIKLSsjaW5jbHVkZSAid2FzbS9XYXNtU2lnbmFsSGFu ZGxlcnMuaCIKLSsKLSsjZGVmaW5lIEk4KHYpIHN0YXRpY19jYXN0PGludDhfdD4odikKLSsjZGVm aW5lIEkxNih2KSBzdGF0aWNfY2FzdDxpbnQxNl90Pih2KQotKyNkZWZpbmUgVTE2KHYpIHN0YXRp Y19jYXN0PHVpbnQxNl90Pih2KQotKyNkZWZpbmUgSTMyKHYpIHN0YXRpY19jYXN0PGludDMyX3Q+ KHYpCi0rI2RlZmluZSBVMzIodikgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHYpCi0rI2RlZmluZSBJ NjQodikgc3RhdGljX2Nhc3Q8aW50NjRfdD4odikKLSsjZGVmaW5lIFU2NCh2KSBzdGF0aWNfY2Fz dDx1aW50NjRfdD4odikKLSsjZGVmaW5lIEkxMjgodikgc3RhdGljX2Nhc3Q8X19pbnQxMjhfdD4o dikKLSsjZGVmaW5lIFUxMjgodikgc3RhdGljX2Nhc3Q8X191aW50MTI4X3Q+KHYpCi0rCi0rbmFt ZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLStzdGF0aWMgaW50NjRfdCBNdWx0aXBs eUhpZ2hTaWduZWQoaW50NjRfdCB1LCBpbnQ2NF90IHYpIHsKLSsgIHVpbnQ2NF90IHUwLCB2MCwg dzA7Ci0rICBpbnQ2NF90IHUxLCB2MSwgdzEsIHcyLCB0OwotKwotKyAgdTAgPSB1ICYgMHhGRkZG RkZGRkw7Ci0rICB1MSA9IHUgPj4gMzI7Ci0rICB2MCA9IHYgJiAweEZGRkZGRkZGTDsKLSsgIHYx ID0gdiA+PiAzMjsKLSsKLSsgIHcwID0gdTAgKiB2MDsKLSsgIHQgPSB1MSAqIHYwICsgKHcwID4+ IDMyKTsKLSsgIHcxID0gdCAmIDB4RkZGRkZGRkZMOwotKyAgdzIgPSB0ID4+IDMyOwotKyAgdzEg PSB1MCAqIHYxICsgdzE7Ci0rCi0rICByZXR1cm4gdTEgKiB2MSArIHcyICsgKHcxID4+IDMyKTsK LSt9Ci0rCi0rc3RhdGljIHVpbnQ2NF90IE11bHRpcGx5SGlnaFVuc2lnbmVkKHVpbnQ2NF90IHUs IHVpbnQ2NF90IHYpIHsKLSsgIHVpbnQ2NF90IHUwLCB2MCwgdzA7Ci0rICB1aW50NjRfdCB1MSwg djEsIHcxLCB3MiwgdDsKLSsKLSsgIHUwID0gdSAmIDB4RkZGRkZGRkZMOwotKyAgdTEgPSB1ID4+ IDMyOwotKyAgdjAgPSB2ICYgMHhGRkZGRkZGRkw7Ci0rICB2MSA9IHYgPj4gMzI7Ci0rCi0rICB3 MCA9IHUwICogdjA7Ci0rICB0ID0gdTEgKiB2MCArICh3MCA+PiAzMik7Ci0rICB3MSA9IHQgJiAw eEZGRkZGRkZGTDsKLSsgIHcyID0gdCA+PiAzMjsKLSsgIHcxID0gdTAgKiB2MSArIHcxOwotKwot KyAgcmV0dXJuIHUxICogdjEgKyB3MiArICh3MSA+PiAzMik7Ci0rfQotKwotK2lubGluZSBjb25z dGV4cHIgdWludDMyX3QgUm90YXRlTGVmdDMyKHVpbnQzMl90IHZhbHVlLCB1aW50MzJfdCBzaGlm dCkgewotKyAgcmV0dXJuICh2YWx1ZSA8PCBzaGlmdCkgfCAodmFsdWUgPj4gKCgzMiAtIHNoaWZ0 KSAmIDMxKSk7Ci0rfQotKwotK2lubGluZSBjb25zdGV4cHIgdWludDY0X3QgUm90YXRlTGVmdDY0 KHVpbnQ2NF90IHZhbHVlLCB1aW50NjRfdCBzaGlmdCkgewotKyAgcmV0dXJuICh2YWx1ZSA8PCBz aGlmdCkgfCAodmFsdWUgPj4gKCg2NCAtIHNoaWZ0KSAmIDYzKSk7Ci0rfQotKwotKy8vIEdlbmVy YXRlIGEgNjQtYml0IG1hc2sgd2l0aCBiaXRzIG1iLi5tZSBzZXQgKFBQQyBudW1iZXJpbmc6IDAg PSBNU0IgPSBiaXQKLSsvLyA2MyBpbiBDKS4gIFdoZW4gbWIgPD0gbWUsIGEgY29udGlndW91cyBy YW5nZSBpcyBzZXQ7IHdoZW4gbWIgPiBtZSwgdGhlCi0rLy8gbWFzayB3cmFwcyBhcm91bmQgKGJp dHMgMC4ubWUgYW5kIG1iLi42MyBhcmUgc2V0KS4KLStzdGF0aWMgaW5saW5lIHVpbnQ2NF90IE1B U0s2NCh1bnNpZ25lZCBtYiwgdW5zaWduZWQgbWUpIHsKLSsgIE1PWl9BU1NFUlQobWIgPCA2NCAm JiBtZSA8IDY0KTsKLSsgIHVpbnQ2NF90IG1hc2tfYmVnaW4gPSB+MFVMTCA+PiBtYjsKLSsgIHVp bnQ2NF90IG1hc2tfZW5kID0gfjBVTEwgPDwgKDYzIC0gbWUpOwotKyAgaWYgKG1iIDw9IG1lKSB7 Ci0rICAgIHJldHVybiBtYXNrX2JlZ2luICYgbWFza19lbmQ7Ci0rICB9Ci0rICByZXR1cm4gbWFz a19iZWdpbiB8IG1hc2tfZW5kOwotK30KLSsKLStzdGF0aWMgaW5saW5lIHVpbnQzMl90IE1BU0sz Mih1bnNpZ25lZCBtYiwgdW5zaWduZWQgbWUpIHsKLSsgIE1PWl9BU1NFUlQobWIgPCAzMiAmJiBt ZSA8IDMyKTsKLSsgIHVpbnQzMl90IG1hc2tfYmVnaW4gPSB+MFUgPj4gbWI7Ci0rICB1aW50MzJf dCBtYXNrX2VuZCA9IH4wVSA8PCAoMzEgLSBtZSk7Ci0rICBpZiAobWIgPD0gbWUpIHsKLSsgICAg cmV0dXJuIG1hc2tfYmVnaW4gJiBtYXNrX2VuZDsKLSsgIH0KLSsgIHJldHVybiBtYXNrX2JlZ2lu IHwgbWFza19lbmQ7Ci0rfQotKwotKy8vIENvdW50IGxlYWRpbmcgemVyb3MuCi0rc3RhdGljIGlu bGluZSBpbnQgQ291bnRMZWFkaW5nWmVyb3M2NCh1aW50NjRfdCB2YWx1ZSkgewotKyAgaWYgKHZh bHVlID09IDApIHJldHVybiA2NDsKLSsgIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodmFsdWUpOwot K30KLSsKLStzdGF0aWMgaW5saW5lIGludCBDb3VudExlYWRpbmdaZXJvczMyKHVpbnQzMl90IHZh bHVlKSB7Ci0rICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIDMyOwotKyAgcmV0dXJuIF9fYnVpbHRp bl9jbHoodmFsdWUpOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGludCBDb3VudFRyYWlsaW5nWmVy b3M2NCh1aW50NjRfdCB2YWx1ZSkgewotKyAgaWYgKHZhbHVlID09IDApIHJldHVybiA2NDsKLSsg IHJldHVybiBfX2J1aWx0aW5fY3R6bGwodmFsdWUpOwotK30KLSsKLStzdGF0aWMgaW5saW5lIGlu dCBDb3VudFRyYWlsaW5nWmVyb3MzMih1aW50MzJfdCB2YWx1ZSkgewotKyAgaWYgKHZhbHVlID09 IDApIHJldHVybiAzMjsKLSsgIHJldHVybiBfX2J1aWx0aW5fY3R6KHZhbHVlKTsKLSt9Ci0rCi0r c3RhdGljIGlubGluZSBpbnQgUG9wQ291bnQ2NCh1aW50NjRfdCB2YWx1ZSkgewotKyAgcmV0dXJu IF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQg UG9wQ291bnQzMih1aW50MzJfdCB2YWx1ZSkgewotKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3Vu dCh2YWx1ZSk7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgUG9wQ291bnRQZXJCeXRl KHVpbnQ2NF90IHZhbHVlKSB7Ci0rICB1aW50NjRfdCByZXN1bHQgPSAwOwotKyAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgdWludDhfdCBieXRlID0gKHZhbHVlID4+IChpICog OCkpICYgMHhGRjsKLSsgICAgcmVzdWx0IHw9ICh1aW50NjRfdClfX2J1aWx0aW5fcG9wY291bnQo Ynl0ZSkgPDwgKGkgKiA4KTsKLSsgIH0KLSsgIHJldHVybiByZXN1bHQ7Ci0rfQotKwotKy8vIFBQ QzY0IEMgYXJndW1lbnQgc2xvdHM6IFBQQzY0IEVMRnYyIEFCSSBkb2VzIG5vdCByZXF1aXJlIEMg YXJndW1lbnQKLSsvLyBzbG90cyBvbiB0aGUgc3RhY2sgZm9yIHJlZ2lzdGVyLXBhc3NlZCBhcmd1 bWVudHMsIGJ1dCB3ZSByZXNlcnZlIHRoZQotKy8vIGxpbmsgYXJlYSAoMzIgYnl0ZXMpLgotK2Nv bnN0IGludCBrQ0FyZ1Nsb3RDb3VudCA9IDA7Ci0rY29uc3QgaW50IGtDQXJnc1Nsb3RzU2l6ZSA9 IGtDQXJnU2xvdENvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7Ci0rCi0rLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsvLyBQUEM2NCBTaW1JbnN0cnVjdGlvbi4KLSsKLStjbGFzcyBTaW1JbnN0cnVj dGlvbiB7Ci0rIHB1YmxpYzoKLSsgIGVudW0gewotKyAgICBrSW5zdHJTaXplID0gNCwKLSsgICAg a1BDUmVhZE9mZnNldCA9IDAKLSsgIH07Ci0rCi0rICBpbmxpbmUgSW5zdHIgaW5zdHJ1Y3Rpb25C aXRzKCkgY29uc3QgewotKyAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHIq Pih0aGlzKTsKLSsgIH0KLSsKLSsgIGlubGluZSB2b2lkIHNldEluc3RydWN0aW9uQml0cyhJbnN0 ciB2YWx1ZSkgewotKyAgICAqcmVpbnRlcnByZXRfY2FzdDxJbnN0cio+KHRoaXMpID0gdmFsdWU7 Ci0rICB9Ci0rCi0rICBpbmxpbmUgaW50IGJpdChpbnQgbnIpIGNvbnN0IHsgcmV0dXJuIChpbnN0 cnVjdGlvbkJpdHMoKSA+PiBucikgJiAxOyB9Ci0rCi0rICBpbmxpbmUgdWludDMyX3QgYml0cyhp bnQgaGksIGludCBsbykgY29uc3QgewotKyAgICByZXR1cm4gKGluc3RydWN0aW9uQml0cygpID4+ IGxvKSAmICgoMlUgPDwgKGhpIC0gbG8pKSAtIDEpOwotKyAgfQotKwotKyAgaW5saW5lIHVpbnQz Ml90IG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMzEsIDI2KTsgfQotKwotKyAgaW5saW5l IHVpbnQzMl90IHJ0VmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDI1LCAyMSk7IH0KLSsgIGlu bGluZSB1aW50MzJfdCByc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygyNSwgMjEpOyB9Ci0r ICBpbmxpbmUgdWludDMyX3QgcmFWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMjAsIDE2KTsg fQotKyAgaW5saW5lIHVpbnQzMl90IHJiVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDE1LCAx MSk7IH0KLSsgIGlubGluZSB1aW50MzJfdCByY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygx MCwgNik7IH0KLSsKLSsgIGlubGluZSB1aW50MzJfdCBib1ZhbHVlKCkgY29uc3QgeyByZXR1cm4g Yml0cygyNSwgMjEpOyB9Ci0rICBpbmxpbmUgdWludDMyX3QgYmlWYWx1ZSgpIGNvbnN0IHsgcmV0 dXJuIGJpdHMoMjAsIDE2KTsgfQotKwotKyAgLy8gRC1mb3JtIDE2LWJpdCBpbW1lZGlhdGUgKHNp Z24tZXh0ZW5kIHRvIGdldCBzaWduZWQgdmFsdWUpLgotKyAgaW5saW5lIGludDE2X3QgaW1tMTZW YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIEkxNihiaXRzKDE1LCAwKSk7IH0KLSsgIGlubGluZSB1aW50 MTZfdCB1aW1tMTZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFUxNihiaXRzKDE1LCAwKSk7IH0KLSsK LSsgIC8vIERTLWZvcm0gMTQtYml0IGRpc3BsYWNlbWVudCAoYml0cyAyLi4xNSwgNC1ieXRlIGFs aWduZWQpLgotKyAgaW5saW5lIGludDE2X3QgZHMxNFZhbHVlKCkgY29uc3QgewotKyAgICByZXR1 cm4gSTE2KGJpdHMoMTUsIDIpIDw8IDIpOwotKyAgfQotKwotKyAgLy8gQi1mb3JtIDE0LWJpdCBi cmFuY2ggZGlzcGxhY2VtZW50IChiaXRzIDIuLjE1LCA0LWJ5dGUgYWxpZ25lZCkuCi0rICBpbmxp bmUgaW50MzJfdCBiZDE2VmFsdWUoKSBjb25zdCB7Ci0rICAgIGludDE2X3QgcmF3ID0gSTE2KGJp dHMoMTUsIDIpIDw8IDIpOwotKyAgICByZXR1cm4gKGludDMyX3QpcmF3OwotKyAgfQotKwotKyAg Ly8gSS1mb3JtIDI0LWJpdCBicmFuY2ggb2Zmc2V0IChiaXRzIDIuLjI1LCBzaWduLWV4dGVuZGVk LCA0LWJ5dGUgYWxpZ25lZCkuCi0rICBpbmxpbmUgaW50MzJfdCBsaTI2VmFsdWUoKSBjb25zdCB7 Ci0rICAgIGludDMyX3QgcmF3ID0gSTMyKGJpdHMoMjUsIDIpIDw8IDIpOwotKyAgICAvLyBTaWdu LWV4dGVuZCBmcm9tIDI2IGJpdHMuCi0rICAgIHJldHVybiAocmF3IDw8IDYpID4+IDY7Ci0rICB9 Ci0rCi0rICAvLyBFeHRlbmRlZCBvcGNvZGUgZm9yIFgtZm9ybSAvIFhPLWZvcm0gKGJpdHMgMS4u MTApLgotKyAgaW5saW5lIHVpbnQzMl90IHhvVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDEw LCAxKTsgfQotKwotKyAgLy8gRXh0ZW5kZWQgb3Bjb2RlIGZvciBYTC1mb3JtIChiaXRzIDEuLjEw KS4KLSsgIGlubGluZSB1aW50MzJfdCB4bFZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygxMCwg MSk7IH0KLSsKLSsgIC8vIE1ELWZvcm0gU0ggZmllbGQ6IHNoWzA6NF0gaW4gaW5zdHJ1Y3Rpb24g Yml0cyAxNToxMSwgc2hbNV0gaW4gYml0IDEuCi0rICAvLyBBc3NlbWJsZXIgZW5jb2RlczogKChz aCAmIDB4MWYpIDw8IDExKSB8ICgoc2ggJiAweDIwKSA+PiA0KS4KLSsgIGlubGluZSB1aW50MzJf dCBtZFNIVmFsdWUoKSBjb25zdCB7Ci0rICAgIHJldHVybiBiaXRzKDE1LCAxMSkgfCAoYml0KDEp IDw8IDUpOwotKyAgfQotKyAgLy8gbWIvbWUgZm9yIE1ELWZvcm0gKHJsZGljbC9ybGRpY3Ivcmxk aWMvcmxkaW1pKTogNi1iaXQgZmllbGQgc3BsaXQgYXMKLSsgIC8vIG1iWzA6NF0gaW4gaW5zdHJ1 Y3Rpb24gYml0cyAxMDo2IGFuZCBtYls1XSBpbiBiaXQgNS4KLSsgIGlubGluZSB1aW50MzJfdCBt ZE1CVmFsdWUoKSBjb25zdCB7Ci0rICAgIHJldHVybiBiaXRzKDEwLCA2KSB8IChiaXQoNSkgPDwg NSk7Ci0rICB9Ci0rICBpbmxpbmUgdWludDMyX3QgbWRNRVZhbHVlKCkgY29uc3QgeyByZXR1cm4g bWRNQlZhbHVlKCk7IH0KLSsKLSsgIC8vIE1ELWZvcm0gWE8gKGJpdHMgMi4uNCkuCi0rICBpbmxp bmUgdWludDMyX3QgbWRYT1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cyg0LCAyKTsgfQotKwot KyAgLy8gTURTLWZvcm0gKHJsZGNsLCBybGRjcik6IG1iWzA6NF0gaW4gYml0cyAxMDo2LCBtYls1 XSBpbiBiaXQgNS4KLSsgIGlubGluZSB1aW50MzJfdCBtZHNNQlZhbHVlKCkgY29uc3QgewotKyAg ICByZXR1cm4gYml0cygxMCwgNikgfCAoYml0KDUpIDw8IDUpOwotKyAgfQotKwotKyAgLy8gTS1m b3JtIGZpZWxkcyAoMzItYml0IHJvdGF0ZS9tYXNrKS4KLSsgIGlubGluZSB1aW50MzJfdCBtU0hW YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTUsIDExKTsgfQotKyAgaW5saW5lIHVpbnQzMl90 IG1NQlZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygxMCwgNik7IH0KLSsgIGlubGluZSB1aW50 MzJfdCBtTUVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoNSwgMSk7IH0KLSsKLSsgIC8vIFJj IGJpdC4KLSsgIGlubGluZSBib29sIHJjQml0KCkgY29uc3QgeyByZXR1cm4gYml0KDApOyB9Ci0r Ci0rICAvLyBBQSBiaXQgZm9yIGJyYW5jaCBpbnN0cnVjdGlvbnMuCi0rICBpbmxpbmUgYm9vbCBh YUJpdCgpIGNvbnN0IHsgcmV0dXJuIGJpdCgxKTsgfQotKwotKyAgLy8gTEsgYml0IGZvciBicmFu Y2ggaW5zdHJ1Y3Rpb25zLgotKyAgaW5saW5lIGJvb2wgbGtCaXQoKSBjb25zdCB7IHJldHVybiBi aXQoMCk7IH0KLSsKLSsgIC8vIE9FIGJpdCBmb3IgWE8tZm9ybSBhcml0aG1ldGljLgotKyAgaW5s aW5lIGJvb2wgb2VCaXQoKSBjb25zdCB7IHJldHVybiBiaXQoMTApOyB9Ci0rCi0rICAvLyBMIGJp dCBmb3IgY29tcGFyZSBpbnN0cnVjdGlvbnMgKGJpdCAyMSkuCi0rICBpbmxpbmUgYm9vbCBsQml0 KCkgY29uc3QgeyByZXR1cm4gYml0KDIxKTsgfQotKwotKyAgLy8gQkYgZmllbGQgKGJpdHMgMjMu LjI1KSBmb3IgY29tcGFyZXMuCi0rICBpbmxpbmUgdWludDMyX3QgYmZWYWx1ZSgpIGNvbnN0IHsg cmV0dXJuIGJpdHMoMjUsIDIzKTsgfQotKwotKyAgYm9vbCBpc1RyYXAoKSBjb25zdCB7Ci0rICAg IHVpbnQzMl90IGluc3RyID0gaW5zdHJ1Y3Rpb25CaXRzKCk7Ci0rICAgIC8vIFBQQ190cmFwID0g MHg3RkUwMDAwOCAodHcgMzEsMCwwKS4KLSsgICAgLy8gRG9uJ3QgdHJlYXQgdGhlIGNhbGwtcmVk aXJlY3Rpb24gaW5zdHJ1Y3Rpb24gb3Igd2FzbSB0cmFwIGFzIGEKLSsgICAgLy8gZGVidWdnZXIg dHJhcC4KLSsgICAgaWYgKGluc3RyID09IGtDYWxsUmVkaXJJbnN0cikgcmV0dXJuIGZhbHNlOwot KyAgICBpZiAoaW5zdHIgPT0gMHg3RkUwMDAwOCkgcmV0dXJuIGZhbHNlOwotKyAgICAvLyBBbnkg b3RoZXIgdHcgaW5zdHJ1Y3Rpb24gd2l0aCBUTz0zMSBpcyBhIHRyYXAuCi0rICAgIGlmIChvcGNv ZGUoKSA9PSAzMSAmJiAoeG9WYWx1ZSgpID09IDQpKSByZXR1cm4gdHJ1ZTsKLSsgICAgcmV0dXJu IGZhbHNlOwotKyAgfQotKwotKyBwcml2YXRlOgotKyAgU2ltSW5zdHJ1Y3Rpb24oKSA9IGRlbGV0 ZTsKLSsgIFNpbUluc3RydWN0aW9uKGNvbnN0IFNpbUluc3RydWN0aW9uJiBvdGhlcikgPSBkZWxl dGU7Ci0rICB2b2lkIG9wZXJhdG9yPShjb25zdCBTaW1JbnN0cnVjdGlvbiYgb3RoZXIpID0gZGVs ZXRlOwotK307Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBJQ2FjaGUuCi0rCi0r Y2xhc3MgQ2FjaGVQYWdlIHsKLSsgcHVibGljOgotKyAgc3RhdGljIGNvbnN0IGludCBMSU5FX1ZB TElEID0gMDsKLSsgIHN0YXRpYyBjb25zdCBpbnQgTElORV9JTlZBTElEID0gMTsKLSsKLSsgIHN0 YXRpYyBjb25zdCBpbnQga1BhZ2VTaGlmdCA9IDEyOwotKyAgc3RhdGljIGNvbnN0IGludCBrUGFn ZVNpemUgPSAxIDw8IGtQYWdlU2hpZnQ7Ci0rICBzdGF0aWMgY29uc3QgaW50IGtQYWdlTWFzayA9 IGtQYWdlU2l6ZSAtIDE7Ci0rICBzdGF0aWMgY29uc3QgaW50IGtMaW5lU2hpZnQgPSAyOwotKyAg c3RhdGljIGNvbnN0IGludCBrTGluZUxlbmd0aCA9IDEgPDwga0xpbmVTaGlmdDsKLSsgIHN0YXRp YyBjb25zdCBpbnQga0xpbmVNYXNrID0ga0xpbmVMZW5ndGggLSAxOwotKwotKyAgQ2FjaGVQYWdl KCkgeyBtZW1zZXQoJnZhbGlkaXR5X21hcF8sIExJTkVfSU5WQUxJRCwgc2l6ZW9mKHZhbGlkaXR5 X21hcF8pKTsgfQotKwotKyAgY2hhciogdmFsaWRpdHlCeXRlKGludCBvZmZzZXQpIHsKLSsgICAg cmV0dXJuICZ2YWxpZGl0eV9tYXBfW29mZnNldCA+PiBrTGluZVNoaWZ0XTsKLSsgIH0KLSsKLSsg IGNoYXIqIGNhY2hlZERhdGEoaW50IG9mZnNldCkgeyByZXR1cm4gJmRhdGFfW29mZnNldF07IH0K LSsKLSsgcHJpdmF0ZToKLSsgIGNoYXIgZGF0YV9ba1BhZ2VTaXplXTsKLSsgIHN0YXRpYyBjb25z dCBpbnQga1ZhbGlkaXR5TWFwU2l6ZSA9IGtQYWdlU2l6ZSA+PiBrTGluZVNoaWZ0OwotKyAgY2hh ciB2YWxpZGl0eV9tYXBfW2tWYWxpZGl0eU1hcFNpemVdOwotK307Ci0rCi0rY2xhc3MgQXV0b0xv Y2tTaW11bGF0b3JDYWNoZSA6IHB1YmxpYyBMb2NrR3VhcmQ8TXV0ZXg+IHsKLSsgIHVzaW5nIEJh c2UgPSBMb2NrR3VhcmQ8TXV0ZXg+OwotKwotKyBwdWJsaWM6Ci0rICBleHBsaWNpdCBBdXRvTG9j a1NpbXVsYXRvckNhY2hlKCkKLSsgICAgICA6IEJhc2UoU2ltdWxhdG9yUHJvY2Vzczo6c2luZ2xl dG9uXy0+Y2FjaGVMb2NrXykge30KLSt9OwotKwotK21vemlsbGE6OkF0b21pYzxzaXplX3QsIG1v emlsbGE6OlJlbGVhc2VBY3F1aXJlPgotKyAgICBTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVDaGVj a2luZ0Rpc2FibGVDb3VudCgxKTsKLStTaW11bGF0b3JQcm9jZXNzKiBTaW11bGF0b3JQcm9jZXNz OjpzaW5nbGV0b25fID0gbnVsbHB0cjsKLSsKLStpbnQ2NF90IFNpbXVsYXRvcjo6U3RvcFNpbUF0 ID0gLTE7Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBTaW11bGF0b3IgQ3JlYXRl IC8gRGVzdHJveS4KLSsKLStTaW11bGF0b3IqIFNpbXVsYXRvcjo6Q3JlYXRlKCkgewotKyAgYXV0 byBzaW0gPSBNYWtlVW5pcXVlPFNpbXVsYXRvcj4oKTsKLSsgIGlmICghc2ltKSB7Ci0rICAgIHJl dHVybiBudWxscHRyOwotKyAgfQotKwotKyAgaWYgKCFzaW0tPmluaXQoKSkgewotKyAgICByZXR1 cm4gbnVsbHB0cjsKLSsgIH0KLSsKLSsgIGludDY0X3Qgc3RvcEF0OwotKyAgY2hhciogc3RvcEF0 U3RyID0gZ2V0ZW52KCJQUEM2NF9TSU1fU1RPUF9BVCIpOwotKyAgaWYgKHN0b3BBdFN0ciAmJiBz c2NhbmYoc3RvcEF0U3RyLCAiJSIgUFJJaTY0LCAmc3RvcEF0KSA9PSAxKSB7Ci0rICAgIGZwcmlu dGYoc3RkZXJyLCAiXG5TdG9wcGluZyBzaW11bGF0aW9uIGF0IGljb3VudCAlIiBQUklpNjQgIlxu Iiwgc3RvcEF0KTsKLSsgICAgU2ltdWxhdG9yOjpTdG9wU2ltQXQgPSBzdG9wQXQ7Ci0rICB9Ci0r Ci0rICByZXR1cm4gc2ltLnJlbGVhc2UoKTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OkRlc3Ry b3koU2ltdWxhdG9yKiBzaW0pIHsganNfZGVsZXRlKHNpbSk7IH0KLSsKLSsvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKy8vIERlYnVnZ2VyLgotKwotK2NsYXNzIHBwYzY0RGVidWdnZXIgewotKyBw dWJsaWM6Ci0rICBleHBsaWNpdCBwcGM2NERlYnVnZ2VyKFNpbXVsYXRvciogc2ltKSA6IHNpbV8o c2ltKSB7fQotKwotKyAgdm9pZCBzdG9wKFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICB2b2lk IGRlYnVnKCk7Ci0rICB2b2lkIHByaW50QWxsUmVncygpOwotKyAgdm9pZCBwcmludEFsbFJlZ3NJ bmNsdWRpbmdGUFUoKTsKLSsKLSsgcHJpdmF0ZToKLSsgIHN0YXRpYyBjb25zdCBJbnN0ciBrQnJl YWtwb2ludEluc3RyID0gMHg3RkUwMDAwODsgIC8vIFBQQ190cmFwCi0rICBzdGF0aWMgY29uc3Qg SW5zdHIga05vcEluc3RyID0gMHg2MDAwMDAwMDsgICAgICAgICAgLy8gUFBDX25vcAotKwotKyAg U2ltdWxhdG9yKiBzaW1fOwotKwotKyAgaW50NjRfdCBnZXRSZWdpc3RlclZhbHVlKGludCByZWdu dW0pOwotKyAgaW50NjRfdCBnZXRGUFVSZWdpc3RlclZhbHVlTG9uZyhpbnQgcmVnbnVtKTsKLSsg IGZsb2F0IGdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChpbnQgcmVnbnVtKTsKLSsgIGRvdWJsZSBn ZXRGUFVSZWdpc3RlclZhbHVlRG91YmxlKGludCByZWdudW0pOwotKyAgYm9vbCBnZXRWYWx1ZShj b25zdCBjaGFyKiBkZXNjLCBpbnQ2NF90KiB2YWx1ZSk7Ci0rCi0rICBib29sIHNldEJyZWFrcG9p bnQoU2ltSW5zdHJ1Y3Rpb24qIGJyZWFrcGMpOwotKyAgYm9vbCBkZWxldGVCcmVha3BvaW50KFNp bUluc3RydWN0aW9uKiBicmVha3BjKTsKLSsKLSsgIHZvaWQgdW5kb0JyZWFrcG9pbnRzKCk7Ci0r ICB2b2lkIHJlZG9CcmVha3BvaW50cygpOwotK307Ci0rCi0rW1ttYXliZV91bnVzZWRdXSBzdGF0 aWMgdm9pZCBVTklNUExFTUVOVEVEKCkgewotKyAgcHJpbnRmKCJVTklNUExFTUVOVEVEIGluc3Ry dWN0aW9uLlxuIik7Ci0rICBNT1pfQ1JBU0goKTsKLSt9Ci0rW1ttYXliZV91bnVzZWRdXSBzdGF0 aWMgdm9pZCBVTlJFQUNIQUJMRSgpIHsKLSsgIHByaW50ZigiVU5SRUFDSEFCTEUgaW5zdHJ1Y3Rp b24uXG4iKTsKLSsgIE1PWl9DUkFTSCgpOwotK30KLStbW21heWJlX3VudXNlZF1dIHN0YXRpYyB2 b2lkIFVOU1VQUE9SVEVEKCkgewotKyAgcHJpbnRmKCJVbnN1cHBvcnRlZCBpbnN0cnVjdGlvbi5c biIpOwotKyAgTU9aX0NSQVNIKCk7Ci0rfQotKwotK3ZvaWQgcHBjNjREZWJ1Z2dlcjo6c3RvcChT aW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IGNvZGUgPSAwOwotKyAgY2hhciog bXNnID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihzaW1fLT5nZXRfcGMoKSArCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uOjprSW5zdHJT aXplKTsKLSsgIGlmICghc2ltXy0+d2F0Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXykgewotKyAgICBz aW1fLT53YXRjaGVkU3RvcHNfW2NvZGVdLmRlc2NfID0gbXNnOwotKyAgfQotKyAgaWYgKGNvZGUg IT0ga01heFN0b3BDb2RlKSB7Ci0rICAgIHByaW50ZigiU2ltdWxhdG9yIGhpdCBzdG9wICV1OiAl c1xuIiwgY29kZSwgbXNnKTsKLSsgIH0gZWxzZSB7Ci0rICAgIHByaW50ZigiU2ltdWxhdG9yIGhp dCAlc1xuIiwgbXNnKTsKLSsgIH0KLSsgIHNpbV8tPnNldF9wYyhzaW1fLT5nZXRfcGMoKSArIDIg KiBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICBkZWJ1ZygpOwotK30KLSsKLStpbnQ2 NF90IHBwYzY0RGVidWdnZXI6OmdldFJlZ2lzdGVyVmFsdWUoaW50IHJlZ251bSkgewotKyAgaWYg KHJlZ251bSA9PSBrUENSZWdpc3RlcikgewotKyAgICByZXR1cm4gc2ltXy0+Z2V0X3BjKCk7Ci0r ICB9Ci0rICByZXR1cm4gc2ltXy0+Z2V0UmVnaXN0ZXIocmVnbnVtKTsKLSt9Ci0rCi0raW50NjRf dCBwcGM2NERlYnVnZ2VyOjpnZXRGUFVSZWdpc3RlclZhbHVlTG9uZyhpbnQgcmVnbnVtKSB7Ci0r ICByZXR1cm4gc2ltXy0+Z2V0RnB1UmVnaXN0ZXIocmVnbnVtKTsKLSt9Ci0rCi0rZmxvYXQgcHBj NjREZWJ1Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZUZsb2F0KGludCByZWdudW0pIHsKLSsgIHJl dHVybiBzaW1fLT5nZXRGcHVSZWdpc3RlckZsb2F0KHJlZ251bSk7Ci0rfQotKwotK2RvdWJsZSBw cGM2NERlYnVnZ2VyOjpnZXRGUFVSZWdpc3RlclZhbHVlRG91YmxlKGludCByZWdudW0pIHsKLSsg IHJldHVybiBzaW1fLT5nZXRGcHVSZWdpc3RlckRvdWJsZShyZWdudW0pOwotK30KLSsKLStib29s IHBwYzY0RGVidWdnZXI6OmdldFZhbHVlKGNvbnN0IGNoYXIqIGRlc2MsIGludDY0X3QqIHZhbHVl KSB7Ci0rICBSZWdpc3RlciByZWcgPSBSZWdpc3Rlcjo6RnJvbU5hbWUoZGVzYyk7Ci0rICBpZiAo cmVnICE9IEludmFsaWRSZWcpIHsKLSsgICAgKnZhbHVlID0gZ2V0UmVnaXN0ZXJWYWx1ZShyZWcu Y29kZSgpKTsKLSsgICAgcmV0dXJuIHRydWU7Ci0rICB9Ci0rCi0rICBpZiAoc3RybmNtcChkZXNj LCAiMHgiLCAyKSA9PSAwKSB7Ci0rICAgIHJldHVybiBzc2NhbmYoZGVzYyArIDIsICIlIiBQUkl4 NjQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPih2YWx1ZSkpID09Ci0rICAgICAgICAgICAx OwotKyAgfQotKyAgcmV0dXJuIHNzY2FuZihkZXNjLCAiJSIgUFJJdTY0LCByZWludGVycHJldF9j YXN0PHVpbnQ2NF90Kj4odmFsdWUpKSA9PSAxOwotK30KLSsKLStib29sIHBwYzY0RGVidWdnZXI6 OnNldEJyZWFrcG9pbnQoU2ltSW5zdHJ1Y3Rpb24qIGJyZWFrcGMpIHsKLSsgIGlmIChzaW1fLT5i cmVha19wY18gIT0gbnVsbHB0cikgewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rCi0rICBz aW1fLT5icmVha19wY18gPSBicmVha3BjOwotKyAgc2ltXy0+YnJlYWtfaW5zdHJfID0gYnJlYWtw Yy0+aW5zdHJ1Y3Rpb25CaXRzKCk7Ci0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rYm9vbCBwcGM2 NERlYnVnZ2VyOjpkZWxldGVCcmVha3BvaW50KFNpbUluc3RydWN0aW9uKiBicmVha3BjKSB7Ci0r ICBpZiAoc2ltXy0+YnJlYWtfcGNfICE9IG51bGxwdHIpIHsKLSsgICAgc2ltXy0+YnJlYWtfcGNf LT5zZXRJbnN0cnVjdGlvbkJpdHMoc2ltXy0+YnJlYWtfaW5zdHJfKTsKLSsgIH0KLSsKLSsgIHNp bV8tPmJyZWFrX3BjXyA9IG51bGxwdHI7Ci0rICBzaW1fLT5icmVha19pbnN0cl8gPSAwOwotKyAg cmV0dXJuIHRydWU7Ci0rfQotKwotK3ZvaWQgcHBjNjREZWJ1Z2dlcjo6dW5kb0JyZWFrcG9pbnRz KCkgewotKyAgaWYgKHNpbV8tPmJyZWFrX3BjXykgewotKyAgICBzaW1fLT5icmVha19wY18tPnNl dEluc3RydWN0aW9uQml0cyhzaW1fLT5icmVha19pbnN0cl8pOwotKyAgfQotK30KLSsKLSt2b2lk IHBwYzY0RGVidWdnZXI6OnJlZG9CcmVha3BvaW50cygpIHsKLSsgIGlmIChzaW1fLT5icmVha19w Y18pIHsKLSsgICAgc2ltXy0+YnJlYWtfcGNfLT5zZXRJbnN0cnVjdGlvbkJpdHMoa0JyZWFrcG9p bnRJbnN0cik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgcHBjNjREZWJ1Z2dlcjo6cHJpbnRBbGxSZWdz KCkgewotKyAgaW50NjRfdCB2YWx1ZTsKLSsgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSZWdp c3RlcnM6OlRvdGFsOyBpKyspIHsKLSsgICAgdmFsdWUgPSBnZXRSZWdpc3RlclZhbHVlKGkpOwot KyAgICBwcmludGYoIiUzczogMHglMDE2IiBQUkl4NjQgIiAlMjAiIFBSSWk2NCAiICAgIiwgUmVn aXN0ZXJzOjpHZXROYW1lKGkpLAotKyAgICAgICAgICAgdmFsdWUsIHZhbHVlKTsKLSsKLSsgICAg aWYgKGkgJSAyKSB7Ci0rICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICB9Ci0rICB9Ci0rICBwcmlu dGYoIlxuIik7Ci0rCi0rICB2YWx1ZSA9IGdldFJlZ2lzdGVyVmFsdWUoU2ltdWxhdG9yOjpwYyk7 Ci0rICBwcmludGYoIiAgcGM6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHZhbHVlKTsKLSsgIHByaW50 ZigiICBscjogMHglMDE2IiBQUkl4NjQgIlxuIiwgc2ltXy0+Z2V0TFIoKSk7Ci0rICBwcmludGYo IiBjdHI6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldENUUigpKTsKLSsgIHByaW50Zigi ICBjcjogMHglMDh4XG4iLCBzaW1fLT5nZXRDUigpKTsKLSsgIHByaW50ZigiIHhlcjogMHglMDE2 IiBQUkl4NjQgIlxuIiwgc2ltXy0+Z2V0WEVSKCkpOwotK30KLSsKLSt2b2lkIHBwYzY0RGVidWdn ZXI6OnByaW50QWxsUmVnc0luY2x1ZGluZ0ZQVSgpIHsKLSsgIHByaW50QWxsUmVncygpOwotKwot KyAgcHJpbnRmKCJcblxuIik7Ci0rICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgRmxvYXRSZWdp c3RlcnM6OlRvdGFsUGh5czsgaSsrKSB7Ci0rICAgIHByaW50ZigiJTNzOiAweCUwMTYiIFBSSXg2 NCAiXHRmbHQ6ICUtOC40Z1x0ZGJsOiAlLTE2LjRnXG4iLAotKyAgICAgICAgICAgRmxvYXRSZWdp c3RlcnM6OkdldE5hbWUoaSksIGdldEZQVVJlZ2lzdGVyVmFsdWVMb25nKGkpLAotKyAgICAgICAg ICAgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUZsb2F0KGkpLCBnZXRGUFVSZWdpc3RlclZhbHVlRG91Ymxl KGkpKTsKLSsgIH0KLSt9Ci0rCi0rc3RhdGljIGNoYXIqIFJlYWRMaW5lKGNvbnN0IGNoYXIqIHBy b21wdCkgewotKyAgVW5pcXVlQ2hhcnMgcmVzdWx0OwotKyAgY2hhciBsaW5lQnVmWzI1Nl07Ci0r ICBpbnQgb2Zmc2V0ID0gMDsKLSsgIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKLSsgIGZwcmludGYo c3Rkb3V0LCAiJXMiLCBwcm9tcHQpOwotKyAgZmZsdXNoKHN0ZG91dCk7Ci0rICB3aGlsZSAoa2Vl cEdvaW5nKSB7Ci0rICAgIGlmIChmZ2V0cyhsaW5lQnVmLCBzaXplb2YobGluZUJ1ZiksIHN0ZGlu KSA9PSBudWxscHRyKSB7Ci0rICAgICAgcmV0dXJuIG51bGxwdHI7Ci0rICAgIH0KLSsgICAgaW50 IGxlbiA9IHN0cmxlbihsaW5lQnVmKTsKLSsgICAgaWYgKGxlbiA+IDAgJiYgbGluZUJ1ZltsZW4g LSAxXSA9PSAnXG4nKSB7Ci0rICAgICAga2VlcEdvaW5nID0gZmFsc2U7Ci0rICAgIH0KLSsgICAg aWYgKCFyZXN1bHQpIHsKLSsgICAgICByZXN1bHQucmVzZXQoanNfcG9kX21hbGxvYzxjaGFyPihs ZW4gKyAxKSk7Ci0rICAgICAgaWYgKCFyZXN1bHQpIHsKLSsgICAgICAgIHJldHVybiBudWxscHRy OwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBpbnQgbmV3X2xlbiA9IG9mZnNldCAr IGxlbiArIDE7Ci0rICAgICAgY2hhciogbmV3X3Jlc3VsdCA9IGpzX3BvZF9tYWxsb2M8Y2hhcj4o bmV3X2xlbik7Ci0rICAgICAgaWYgKCFuZXdfcmVzdWx0KSB7Ci0rICAgICAgICByZXR1cm4gbnVs bHB0cjsKLSsgICAgICB9Ci0rICAgICAgbWVtY3B5KG5ld19yZXN1bHQsIHJlc3VsdC5nZXQoKSwg b2Zmc2V0ICogc2l6ZW9mKGNoYXIpKTsKLSsgICAgICByZXN1bHQucmVzZXQobmV3X3Jlc3VsdCk7 Ci0rICAgIH0KLSsgICAgbWVtY3B5KHJlc3VsdC5nZXQoKSArIG9mZnNldCwgbGluZUJ1ZiwgbGVu ICogc2l6ZW9mKGNoYXIpKTsKLSsgICAgb2Zmc2V0ICs9IGxlbjsKLSsgIH0KLSsKLSsgIE1PWl9B U1NFUlQocmVzdWx0KTsKLSsgIHJlc3VsdFtvZmZzZXRdID0gJ1wwJzsKLSsgIHJldHVybiByZXN1 bHQucmVsZWFzZSgpOwotK30KLSsKLStzdGF0aWMgdm9pZCBEaXNhc3NlbWJsZUluc3RydWN0aW9u KHVpbnQ2NF90IHBjKSB7Ci0rICBwcmludGYoIiAgMHglMDE2IiBQUkl4NjQgIjogICUwOHhcbiIs IHBjLAotKyAgICAgICAgICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocGMpKTsKLSt9Ci0r Ci0rdm9pZCBwcGM2NERlYnVnZ2VyOjpkZWJ1ZygpIHsKLSsgIGludHB0cl90IGxhc3RQQyA9IC0x OwotKyAgYm9vbCBkb25lID0gZmFsc2U7Ci0rCi0rI2RlZmluZSBDT01NQU5EX1NJWkUgNjMKLSsj ZGVmaW5lIEFSR19TSVpFIDI1NQotKwotKyNkZWZpbmUgU1RSKGEpICNhCi0rI2RlZmluZSBYU1RS KGEpIFNUUihhKQotKwotKyAgY2hhciBjbWRbQ09NTUFORF9TSVpFICsgMV07Ci0rICBjaGFyIGFy ZzFbQVJHX1NJWkUgKyAxXTsKLSsgIGNoYXIgYXJnMltBUkdfU0laRSArIDFdOwotKyAgY2hhciog YXJndlszXSA9IHtjbWQsIGFyZzEsIGFyZzJ9OwotKwotKyAgY21kW0NPTU1BTkRfU0laRV0gPSAw OwotKyAgYXJnMVtBUkdfU0laRV0gPSAwOwotKyAgYXJnMltBUkdfU0laRV0gPSAwOwotKwotKyAg dW5kb0JyZWFrcG9pbnRzKCk7Ci0rCi0rICB3aGlsZSAoIWRvbmUgJiYgKHNpbV8tPmdldF9wYygp ICE9IFNpbXVsYXRvcjo6ZW5kX3NpbV9wYykpIHsKLSsgICAgaWYgKGxhc3RQQyAhPSBzaW1fLT5n ZXRfcGMoKSkgewotKyAgICAgIERpc2Fzc2VtYmxlSW5zdHJ1Y3Rpb24oc2ltXy0+Z2V0X3BjKCkp OwotKyAgICAgIGxhc3RQQyA9IHNpbV8tPmdldF9wYygpOwotKyAgICB9Ci0rICAgIGNoYXIqIGxp bmUgPSBSZWFkTGluZSgic2ltPiAiKTsKLSsgICAgaWYgKGxpbmUgPT0gbnVsbHB0cikgewotKyAg ICAgIGJyZWFrOwotKyAgICB9IGVsc2UgewotKyAgICAgIGNoYXIqIGxhc3RfaW5wdXQgPSBzaW1f LT5sYXN0RGVidWdnZXJJbnB1dCgpOwotKyAgICAgIGlmIChzdHJjbXAobGluZSwgIlxuIikgPT0g MCAmJiBsYXN0X2lucHV0ICE9IG51bGxwdHIpIHsKLSsgICAgICAgIGxpbmUgPSBsYXN0X2lucHV0 OwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzaW1fLT5zZXRMYXN0RGVidWdnZXJJbnB1dChs aW5lKTsKLSsgICAgICB9Ci0rICAgICAgaW50IGFyZ2MgPSBzc2NhbmYobGluZSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiJSIgWFNUUihDT01NQU5EX1NJWkUpICJzICIKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgWFNUUihBUkdfU0laRSkgInMgIgotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBYU1RSKEFSR19TSVpFKSAicyIsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBhcmcxLCBhcmcyKTsKLSsgICAgICBpZiAoKHN0 cmNtcChjbWQsICJzaSIpID09IDApIHx8IChzdHJjbXAoY21kLCAic3RlcGkiKSA9PSAwKSkgewot KyAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyID0KLSsgICAgICAgICAgICByZWludGVycHJl dF9jYXN0PFNpbUluc3RydWN0aW9uKj4oc2ltXy0+Z2V0X3BjKCkpOwotKyAgICAgICAgaWYgKCFp bnN0ci0+aXNUcmFwKCkpIHsKLSsgICAgICAgICAgc2ltXy0+aW5zdHJ1Y3Rpb25EZWNvZGUoaW5z dHIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgcHJpbnRmKCIvIVxcIEp1bXBpbmcg b3ZlciBnZW5lcmF0ZWQgYnJlYWtwb2ludC5cbiIpOwotKyAgICAgICAgICBzaW1fLT5zZXRfcGMo c2ltXy0+Z2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAgICAgICB9 Ci0rICAgICAgICBzaW1fLT5pY291bnRfKys7Ci0rICAgICAgfSBlbHNlIGlmICgoc3RyY21wKGNt ZCwgImMiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgImNvbnQiKSA9PSAwKSkgewotKyAgICAgICAg c2ltXy0+aW5zdHJ1Y3Rpb25EZWNvZGUoCi0rICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxT aW1JbnN0cnVjdGlvbio+KHNpbV8tPmdldF9wYygpKSk7Ci0rICAgICAgICBzaW1fLT5pY291bnRf Kys7Ci0rICAgICAgICBkb25lID0gdHJ1ZTsKLSsgICAgICB9IGVsc2UgaWYgKChzdHJjbXAoY21k LCAicCIpID09IDApIHx8IChzdHJjbXAoY21kLCAicHJpbnQiKSA9PSAwKSkgewotKyAgICAgICAg aWYgKGFyZ2MgPT0gMikgewotKyAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotKyAgICAgICAgICBp ZiAoc3RyY21wKGFyZzEsICJhbGwiKSA9PSAwKSB7Ci0rICAgICAgICAgICAgcHJpbnRBbGxSZWdz KCk7Ci0rICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZzEsICJhbGxmIikgPT0gMCkgewot KyAgICAgICAgICAgIHByaW50QWxsUmVnc0luY2x1ZGluZ0ZQVSgpOwotKyAgICAgICAgICB9IGVs c2UgewotKyAgICAgICAgICAgIFJlZ2lzdGVyIHJlZyA9IFJlZ2lzdGVyOjpGcm9tTmFtZShhcmcx KTsKLSsgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6Q29kZSBmUmVnID0gRmxvYXRSZWdpc3Rl cnM6OkZyb21OYW1lKGFyZzEpOwotKyAgICAgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZFJlZykg ewotKyAgICAgICAgICAgICAgdmFsdWUgPSBnZXRSZWdpc3RlclZhbHVlKHJlZy5jb2RlKCkpOwot KyAgICAgICAgICAgICAgcHJpbnRmKCIlczogMHglMDE2IiBQUkl4NjQgIiAlMjAiIFBSSWk2NCAi IFxuIiwgYXJnMSwgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwotKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoZlJlZyAhPSBGbG9hdFJlZ2lzdGVyczo6SW52YWxpZCkgewotKyAg ICAgICAgICAgICAgcHJpbnRmKCIlM3M6IDB4JTAxNiIgUFJJeDY0ICJcdGZsdDogJS04LjRnXHRk Ymw6ICUtMTYuNGdcbiIsCi0rICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6Okdl dE5hbWUoZlJlZyksCi0rICAgICAgICAgICAgICAgICAgICAgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUxv bmcoZlJlZyksCi0rICAgICAgICAgICAgICAgICAgICAgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUZsb2F0 KGZSZWcpLAotKyAgICAgICAgICAgICAgICAgICAgIGdldEZQVVJlZ2lzdGVyVmFsdWVEb3VibGUo ZlJlZykpOwotKyAgICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgICBwcmludGYoIiVz IHVucmVjb2duaXplZFxuIiwgYXJnMSk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICB9Ci0r ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBwcmludGYoInByaW50IDxyZWdpc3Rlcj4gb3Ig cHJpbnQgPGZwdSByZWdpc3Rlcj4gc2luZ2xlXG4iKTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVs c2UgaWYgKHN0cmNtcChjbWQsICJzdGFjayIpID09IDAgfHwgc3RyY21wKGNtZCwgIm1lbSIpID09 IDApIHsKLSsgICAgICAgIGludDY0X3QqIGN1ciA9IG51bGxwdHI7Ci0rICAgICAgICBpbnQ2NF90 KiBlbmQgPSBudWxscHRyOwotKyAgICAgICAgaW50IG5leHRfYXJnID0gMTsKLSsKLSsgICAgICAg IGlmIChzdHJjbXAoY21kLCAic3RhY2siKSA9PSAwKSB7Ci0rICAgICAgICAgIGN1ciA9IHJlaW50 ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KHNpbV8tPmdldFJlZ2lzdGVyKFNpbXVsYXRvcjo6c3ApKTsK LSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGludDY0X3QgdmFsdWU7Ci0rICAgICAgICAg IGlmICghZ2V0VmFsdWUoYXJnMSwgJnZhbHVlKSkgewotKyAgICAgICAgICAgIHByaW50ZigiJXMg dW5yZWNvZ25pemVkXG4iLCBhcmcxKTsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAg ICAgfQotKyAgICAgICAgICBjdXIgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPih2YWx1ZSk7 Ci0rICAgICAgICAgIG5leHRfYXJnKys7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpbnQ2NF90 IHdvcmRzOwotKyAgICAgICAgaWYgKGFyZ2MgPT0gbmV4dF9hcmcpIHsKLSsgICAgICAgICAgd29y ZHMgPSAxMDsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGlmICghZ2V0VmFsdWUoYXJn dltuZXh0X2FyZ10sICZ3b3JkcykpIHsKLSsgICAgICAgICAgICB3b3JkcyA9IDEwOwotKyAgICAg ICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBlbmQgPSBjdXIgKyB3b3JkczsKLSsKLSsgICAg ICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKLSsgICAgICAgICAgcHJpbnRmKCIgICVwOiAgMHglMDE2 IiBQUkl4NjQgIiAlMjAiIFBSSWk2NCwgY3VyLCAqY3VyLCAqY3VyKTsKLSsgICAgICAgICAgcHJp bnRmKCJcbiIpOwotKyAgICAgICAgICBjdXIrKzsKLSsgICAgICAgIH0KLSsKLSsgICAgICB9IGVs c2UgaWYgKChzdHJjbXAoY21kLCAiZGlzYXNtIikgPT0gMCkgfHwgKHN0cmNtcChjbWQsICJkcGMi KSA9PSAwKSB8fAotKyAgICAgICAgICAgICAgICAgKHN0cmNtcChjbWQsICJkaSIpID09IDApKSB7 Ci0rICAgICAgICB1aW50OF90KiBjdXIgPSBudWxscHRyOwotKyAgICAgICAgdWludDhfdCogZW5k ID0gbnVsbHB0cjsKLSsKLSsgICAgICAgIGlmIChhcmdjID09IDEpIHsKLSsgICAgICAgICAgY3Vy ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2ltXy0+Z2V0X3BjKCkpOwotKyAgICAgICAg ICBlbmQgPSBjdXIgKyAoMTAgKiBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAgICAg ICB9IGVsc2UgaWYgKGFyZ2MgPT0gMikgewotKyAgICAgICAgICBSZWdpc3RlciByZWcgPSBSZWdp c3Rlcjo6RnJvbU5hbWUoYXJnMSk7Ci0rICAgICAgICAgIGlmIChyZWcgIT0gSW52YWxpZFJlZyB8 fCBzdHJuY21wKGFyZzEsICIweCIsIDIpID09IDApIHsKLSsgICAgICAgICAgICBpbnQ2NF90IHZh bHVlOwotKyAgICAgICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAmdmFsdWUpKSB7Ci0rICAgICAg ICAgICAgICBjdXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih2YWx1ZSk7Ci0rICAgICAg ICAgICAgICBlbmQgPSBjdXIgKyAoMTAgKiBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0r ICAgICAgICAgICAgfQotKyAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIGludDY0X3Qg dmFsdWU7Ci0rICAgICAgICAgICAgaWYgKGdldFZhbHVlKGFyZzEsICZ2YWx1ZSkpIHsKLSsgICAg ICAgICAgICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNpbV8tPmdldF9wYygp KTsKLSsgICAgICAgICAgICAgIGVuZCA9IGN1ciArICh2YWx1ZSAqIFNpbUluc3RydWN0aW9uOjpr SW5zdHJTaXplKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgIGludDY0X3QgdmFsdWUxOwotKyAgICAgICAgICBpbnQ2NF90IHZhbHVl MjsKLSsgICAgICAgICAgaWYgKGdldFZhbHVlKGFyZzEsICZ2YWx1ZTEpICYmIGdldFZhbHVlKGFy ZzIsICZ2YWx1ZTIpKSB7Ci0rICAgICAgICAgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50 OF90Kj4odmFsdWUxKTsKLSsgICAgICAgICAgICBlbmQgPSBjdXIgKyAodmFsdWUyICogU2ltSW5z dHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCi0rICAg ICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7Ci0rICAgICAgICAgIERpc2Fzc2VtYmxlSW5zdHJ1Y3Rp b24odWludDY0X3QoY3VyKSk7Ci0rICAgICAgICAgIGN1ciArPSBTaW1JbnN0cnVjdGlvbjo6a0lu c3RyU2l6ZTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJnZGIi KSA9PSAwKSB7Ci0rICAgICAgICBwcmludGYoInJlbGlucXVpc2hpbmcgY29udHJvbCB0byBnZGJc biIpOwotKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0rICAgICAgICBhc20oImludCAkMyIpOwot KyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCi0rICAgICAgICBhc20oImJyayAjMHhmMDAwIik7 Ci0rI2VuZGlmCi0rICAgICAgICBwcmludGYoInJlZ2FpbmluZyBjb250cm9sIGZyb20gZ2RiXG4i KTsKLSsgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJicmVhayIpID09IDApIHsKLSsgICAg ICAgIGlmIChhcmdjID09IDIpIHsKLSsgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKLSsgICAgICAg ICAgaWYgKGdldFZhbHVlKGFyZzEsICZ2YWx1ZSkpIHsKLSsgICAgICAgICAgICBpZiAoIXNldEJy ZWFrcG9pbnQocmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KHZhbHVlKSkpIHsKLSsg ICAgICAgICAgICAgIHByaW50Zigic2V0dGluZyBicmVha3BvaW50IGZhaWxlZFxuIik7Ci0rICAg ICAgICAgICAgfQotKyAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHByaW50ZigiJXMg dW5yZWNvZ25pemVkXG4iLCBhcmcxKTsKLSsgICAgICAgICAgfQotKyAgICAgICAgfSBlbHNlIHsK LSsgICAgICAgICAgcHJpbnRmKCJicmVhayA8YWRkcmVzcz5cbiIpOwotKyAgICAgICAgfQotKyAg ICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgImRlbCIpID09IDApIHsKLSsgICAgICAgIGlmICgh ZGVsZXRlQnJlYWtwb2ludChudWxscHRyKSkgewotKyAgICAgICAgICBwcmludGYoImRlbGV0aW5n IGJyZWFrcG9pbnQgZmFpbGVkXG4iKTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgaWYgKHN0 cmNtcChjbWQsICJmbGFncyIpID09IDApIHsKLSsgICAgICAgIHByaW50ZigiQ1I6IDB4JTA4eCAg IFhFUjogMHglMDE2IiBQUkl4NjQgIlxuIiwgc2ltXy0+Z2V0Q1IoKSwKLSsgICAgICAgICAgICAg ICBzaW1fLT5nZXRYRVIoKSk7Ci0rICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAic3RvcCIp ID09IDApIHsKLSsgICAgICAgIGludDY0X3QgdmFsdWU7Ci0rICAgICAgICBpbnRwdHJfdCBzdG9w X3BjID0gc2ltXy0+Z2V0X3BjKCkgLSAyICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemU7Ci0r ICAgICAgICBTaW1JbnN0cnVjdGlvbiogc3RvcF9pbnN0ciA9Ci0rICAgICAgICAgICAgcmVpbnRl cnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KHN0b3BfcGMpOwotKyAgICAgICAgU2ltSW5zdHJ1 Y3Rpb24qIG1zZ19hZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KAot KyAgICAgICAgICAgIHN0b3BfcGMgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAg ICAgICBpZiAoKGFyZ2MgPT0gMikgJiYgKHN0cmNtcChhcmcxLCAidW5zdG9wIikgPT0gMCkpIHsK LSsgICAgICAgICAgaWYgKHNpbV8tPmlzU3RvcEluc3RydWN0aW9uKHN0b3BfaW5zdHIpKSB7Ci0r ICAgICAgICAgICAgc3RvcF9pbnN0ci0+c2V0SW5zdHJ1Y3Rpb25CaXRzKGtOb3BJbnN0cik7Ci0r ICAgICAgICAgICAgbXNnX2FkZHJlc3MtPnNldEluc3RydWN0aW9uQml0cyhrTm9wSW5zdHIpOwot KyAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHByaW50ZigiTm90IGF0IGRlYnVnZ2Vy IHN0b3AuXG4iKTsKLSsgICAgICAgICAgfQotKyAgICAgICAgfSBlbHNlIGlmIChhcmdjID09IDMp IHsKLSsgICAgICAgICAgaWYgKHN0cmNtcChhcmcxLCAiaW5mbyIpID09IDApIHsKLSsgICAgICAg ICAgICBpZiAoc3RyY21wKGFyZzIsICJhbGwiKSA9PSAwKSB7Ci0rICAgICAgICAgICAgICBwcmlu dGYoIlN0b3AgaW5mb3JtYXRpb246XG4iKTsKLSsgICAgICAgICAgICAgIGZvciAodWludDMyX3Qg aSA9IGtNYXhXYXRjaHBvaW50Q29kZSArIDE7IGkgPD0ga01heFN0b3BDb2RlOwotKyAgICAgICAg ICAgICAgICAgICBpKyspIHsKLSsgICAgICAgICAgICAgICAgc2ltXy0+cHJpbnRTdG9wSW5mbyhp KTsKLSsgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICB9IGVsc2UgaWYgKGdldFZhbHVlKGFy ZzIsICZ2YWx1ZSkpIHsKLSsgICAgICAgICAgICAgIHNpbV8tPnByaW50U3RvcEluZm8odmFsdWUp OwotKyAgICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgICBwcmludGYoIlVucmVjb2du aXplZCBhcmd1bWVudC5cbiIpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgfSBlbHNlIGlm IChzdHJjbXAoYXJnMSwgImVuYWJsZSIpID09IDApIHsKLSsgICAgICAgICAgICBpZiAoc3RyY21w KGFyZzIsICJhbGwiKSA9PSAwKSB7Ci0rICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBr TWF4V2F0Y2hwb2ludENvZGUgKyAxOyBpIDw9IGtNYXhTdG9wQ29kZTsKLSsgICAgICAgICAgICAg ICAgICAgaSsrKSB7Ci0rICAgICAgICAgICAgICAgIHNpbV8tPmVuYWJsZVN0b3AoaSk7Ci0rICAg ICAgICAgICAgICB9Ci0rICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRWYWx1ZShhcmcyLCAmdmFs dWUpKSB7Ci0rICAgICAgICAgICAgICBzaW1fLT5lbmFibGVTdG9wKHZhbHVlKTsKLSsgICAgICAg ICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgcHJpbnRmKCJVbnJlY29nbml6ZWQgYXJndW1l bnQuXG4iKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFy ZzEsICJkaXNhYmxlIikgPT0gMCkgewotKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXJnMiwgImFs bCIpID09IDApIHsKLSsgICAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IGtNYXhXYXRjaHBv aW50Q29kZSArIDE7IGkgPD0ga01heFN0b3BDb2RlOwotKyAgICAgICAgICAgICAgICAgICBpKysp IHsKLSsgICAgICAgICAgICAgICAgc2ltXy0+ZGlzYWJsZVN0b3AoaSk7Ci0rICAgICAgICAgICAg ICB9Ci0rICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRWYWx1ZShhcmcyLCAmdmFsdWUpKSB7Ci0r ICAgICAgICAgICAgICBzaW1fLT5kaXNhYmxlU3RvcCh2YWx1ZSk7Ci0rICAgICAgICAgICAgfSBl bHNlIHsKLSsgICAgICAgICAgICAgIHByaW50ZigiVW5yZWNvZ25pemVkIGFyZ3VtZW50LlxuIik7 Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICB9Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICBwcmludGYoIldyb25nIHVzYWdlLiBVc2UgaGVscCBjb21tYW5kIGZvciBtb3JlIGluZm9y bWF0aW9uLlxuIik7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmICgoc3RyY21wKGNtZCwg ImgiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgImhlbHAiKSA9PSAwKSkgewotKyAgICAgICAgcHJp bnRmKCJjb250XG4iKTsKLSsgICAgICAgIHByaW50ZigiICBjb250aW51ZSBleGVjdXRpb24gKGFs aWFzICdjJylcbiIpOwotKyAgICAgICAgcHJpbnRmKCJzdGVwaVxuIik7Ci0rICAgICAgICBwcmlu dGYoIiAgc3RlcCBvbmUgaW5zdHJ1Y3Rpb24gKGFsaWFzICdzaScpXG4iKTsKLSsgICAgICAgIHBy aW50ZigicHJpbnQgPHJlZ2lzdGVyPlxuIik7Ci0rICAgICAgICBwcmludGYoIiAgcHJpbnQgcmVn aXN0ZXIgY29udGVudCAoYWxpYXMgJ3AnKVxuIik7Ci0rICAgICAgICBwcmludGYoIiAgdXNlIHJl Z2lzdGVyIG5hbWUgJ2FsbCcgdG8gcHJpbnQgYWxsIHJlZ2lzdGVyc1xuIik7Ci0rICAgICAgICBw cmludGYoInN0YWNrIFs8d29yZHM+XVxuIik7Ci0rICAgICAgICBwcmludGYoIiAgZHVtcCBzdGFj ayBjb250ZW50LCBkZWZhdWx0IGR1bXAgMTAgd29yZHMpXG4iKTsKLSsgICAgICAgIHByaW50Zigi bWVtIDxhZGRyZXNzPiBbPHdvcmRzPl1cbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIGR1bXAgbWVt b3J5IGNvbnRlbnQsIGRlZmF1bHQgZHVtcCAxMCB3b3JkcylcbiIpOwotKyAgICAgICAgcHJpbnRm KCJmbGFnc1xuIik7Ci0rICAgICAgICBwcmludGYoIiAgcHJpbnQgQ1IgYW5kIFhFUlxuIik7Ci0r ICAgICAgICBwcmludGYoImRpc2FzbSBbPGluc3RydWN0aW9ucz5dXG4iKTsKLSsgICAgICAgIHBy aW50ZigiZGlzYXNtIFs8YWRkcmVzcy9yZWdpc3Rlcj5dXG4iKTsKLSsgICAgICAgIHByaW50Zigi ZGlzYXNtIFtbPGFkZHJlc3MvcmVnaXN0ZXI+XSA8aW5zdHJ1Y3Rpb25zPl1cbiIpOwotKyAgICAg ICAgcHJpbnRmKCIgIGRpc2Fzc2VtYmxlIGNvZGUsIGRlZmF1bHQgaXMgMTAgaW5zdHJ1Y3Rpb25z XG4iKTsKLSsgICAgICAgIHByaW50ZigiICBmcm9tIHBjIChhbGlhcyAnZGknKVxuIik7Ci0rICAg ICAgICBwcmludGYoImdkYlxuIik7Ci0rICAgICAgICBwcmludGYoIiAgZW50ZXIgZ2RiXG4iKTsK LSsgICAgICAgIHByaW50ZigiYnJlYWsgPGFkZHJlc3M+XG4iKTsKLSsgICAgICAgIHByaW50Zigi ICBzZXQgYSBicmVhayBwb2ludCBvbiB0aGUgYWRkcmVzc1xuIik7Ci0rICAgICAgICBwcmludGYo ImRlbFxuIik7Ci0rICAgICAgICBwcmludGYoIiAgZGVsZXRlIHRoZSBicmVha3BvaW50XG4iKTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgcHJpbnRmKCJVbmtub3duIGNvbW1hbmQ6ICVzXG4i LCBjbWQpOwotKyAgICAgIH0KLSsgICAgfQotKyAgfQotKwotKyAgcmVkb0JyZWFrcG9pbnRzKCk7 Ci0rCi0rI3VuZGVmIENPTU1BTkRfU0laRQotKyN1bmRlZiBBUkdfU0laRQotKwotKyN1bmRlZiBT VFIKLSsjdW5kZWYgWFNUUgotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIElD YWNoZSBoZWxwZXJzLgotKwotK3N0YXRpYyBib29sIEFsbE9uT25lUGFnZSh1aW50cHRyX3Qgc3Rh cnQsIGludCBzaXplKSB7Ci0rICBpbnRwdHJfdCBzdGFydF9wYWdlID0gKHN0YXJ0ICYgfkNhY2hl UGFnZTo6a1BhZ2VNYXNrKTsKLSsgIGludHB0cl90IGVuZF9wYWdlID0gKChzdGFydCArIHNpemUp ICYgfkNhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKLSsgIHJldHVybiBzdGFydF9wYWdlID09IGVuZF9w YWdlOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0TGFzdERlYnVnZ2VySW5wdXQoY2hhciog aW5wdXQpIHsKLSsgIGpzX2ZyZWUobGFzdERlYnVnZ2VySW5wdXRfKTsKLSsgIGxhc3REZWJ1Z2dl cklucHV0XyA9IGlucHV0OwotK30KLSsKLStzdGF0aWMgQ2FjaGVQYWdlKiBHZXRDYWNoZVBhZ2VM b2NrZWQoU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlTWFwJiBpX2NhY2hlLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwYWdlKSB7Ci0rICBTaW11bGF0b3JQcm9j ZXNzOjpJQ2FjaGVNYXA6OkFkZFB0ciBwID0gaV9jYWNoZS5sb29rdXBGb3JBZGQocGFnZSk7Ci0r ICBpZiAocCkgewotKyAgICByZXR1cm4gcC0+dmFsdWUoKTsKLSsgIH0KLSsgIEF1dG9FbnRlck9P TVVuc2FmZVJlZ2lvbiBvb21VbnNhZmU7Ci0rICBDYWNoZVBhZ2UqIG5ld19wYWdlID0ganNfbmV3 PENhY2hlUGFnZT4oKTsKLSsgIGlmICghbmV3X3BhZ2UgfHwgIWlfY2FjaGUuYWRkKHAsIHBhZ2Us IG5ld19wYWdlKSkgewotKyAgICBvb21VbnNhZmUuY3Jhc2goIlNpbXVsYXRvciBDYWNoZVBhZ2Ui KTsKLSsgIH0KLSsgIHJldHVybiBuZXdfcGFnZTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgRmx1c2hP bmVQYWdlTG9ja2VkKFNpbXVsYXRvclByb2Nlc3M6OklDYWNoZU1hcCYgaV9jYWNoZSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cHRyX3Qgc3RhcnQsIGludCBzaXplKSB7Ci0r ICBNT1pfQVNTRVJUKHNpemUgPD0gQ2FjaGVQYWdlOjprUGFnZVNpemUpOwotKyAgTU9aX0FTU0VS VChBbGxPbk9uZVBhZ2Uoc3RhcnQsIHNpemUgLSAxKSk7Ci0rICBNT1pfQVNTRVJUKChzdGFydCAm IENhY2hlUGFnZTo6a0xpbmVNYXNrKSA9PSAwKTsKLSsgIE1PWl9BU1NFUlQoKHNpemUgJiBDYWNo ZVBhZ2U6OmtMaW5lTWFzaykgPT0gMCk7Ci0rICB2b2lkKiBwYWdlID0gcmVpbnRlcnByZXRfY2Fz dDx2b2lkKj4oc3RhcnQgJiAofkNhY2hlUGFnZTo6a1BhZ2VNYXNrKSk7Ci0rICBpbnQgb2Zmc2V0 ID0gKHN0YXJ0ICYgQ2FjaGVQYWdlOjprUGFnZU1hc2spOwotKyAgQ2FjaGVQYWdlKiBjYWNoZV9w YWdlID0gR2V0Q2FjaGVQYWdlTG9ja2VkKGlfY2FjaGUsIHBhZ2UpOwotKyAgY2hhciogdmFsaWRf Ynl0ZW1hcCA9IGNhY2hlX3BhZ2UtPnZhbGlkaXR5Qnl0ZShvZmZzZXQpOwotKyAgbWVtc2V0KHZh bGlkX2J5dGVtYXAsIENhY2hlUGFnZTo6TElORV9JTlZBTElELCBzaXplID4+IENhY2hlUGFnZTo6 a0xpbmVTaGlmdCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEZsdXNoSUNhY2hlTG9ja2VkKFNpbXVs YXRvclByb2Nlc3M6OklDYWNoZU1hcCYgaV9jYWNoZSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkKiBzdGFydF9hZGRyLCBzaXplX3Qgc2l6ZSkgewotKyAgaW50cHRyX3Qgc3Rh cnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdGFydF9hZGRyKTsKLSsgIGludCBpbnRy YV9saW5lID0gKHN0YXJ0ICYgQ2FjaGVQYWdlOjprTGluZU1hc2spOwotKyAgc3RhcnQgLT0gaW50 cmFfbGluZTsKLSsgIHNpemUgKz0gaW50cmFfbGluZTsKLSsgIHNpemUgPSAoKHNpemUgLSAxKSB8 IENhY2hlUGFnZTo6a0xpbmVNYXNrKSArIDE7Ci0rICBpbnQgb2Zmc2V0ID0gKHN0YXJ0ICYgQ2Fj aGVQYWdlOjprUGFnZU1hc2spOwotKyAgd2hpbGUgKCFBbGxPbk9uZVBhZ2Uoc3RhcnQsIHNpemUg LSAxKSkgewotKyAgICBpbnQgYnl0ZXNfdG9fZmx1c2ggPSBDYWNoZVBhZ2U6OmtQYWdlU2l6ZSAt IG9mZnNldDsKLSsgICAgRmx1c2hPbmVQYWdlTG9ja2VkKGlfY2FjaGUsIHN0YXJ0LCBieXRlc190 b19mbHVzaCk7Ci0rICAgIHN0YXJ0ICs9IGJ5dGVzX3RvX2ZsdXNoOwotKyAgICBzaXplIC09IGJ5 dGVzX3RvX2ZsdXNoOwotKyAgICBNT1pfQVNTRVJUKChzdGFydCAmIENhY2hlUGFnZTo6a1BhZ2VN YXNrKSA9PSAwKTsKLSsgICAgb2Zmc2V0ID0gMDsKLSsgIH0KLSsgIGlmIChzaXplICE9IDApIHsK LSsgICAgRmx1c2hPbmVQYWdlTG9ja2VkKGlfY2FjaGUsIHN0YXJ0LCBzaXplKTsKLSsgIH0KLSt9 Ci0rCi0rLyogc3RhdGljICovCi0rdm9pZCBTaW11bGF0b3JQcm9jZXNzOjpjaGVja0lDYWNoZUxv Y2tlZChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGludHB0cl90IGFkZHJlc3MgPSByZWlu dGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cik7Ci0rICB2b2lkKiBwYWdlID0gcmVpbnRlcnBy ZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyAmICh+Q2FjaGVQYWdlOjprUGFnZU1hc2spKTsKLSsgIHZv aWQqIGxpbmUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzICYgKH5DYWNoZVBhZ2U6 OmtMaW5lTWFzaykpOwotKyAgaW50IG9mZnNldCA9IChhZGRyZXNzICYgQ2FjaGVQYWdlOjprUGFn ZU1hc2spOwotKyAgQ2FjaGVQYWdlKiBjYWNoZV9wYWdlID0gR2V0Q2FjaGVQYWdlTG9ja2VkKGlj YWNoZSgpLCBwYWdlKTsKLSsgIGNoYXIqIGNhY2hlX3ZhbGlkX2J5dGUgPSBjYWNoZV9wYWdlLT52 YWxpZGl0eUJ5dGUob2Zmc2V0KTsKLSsgIGJvb2wgY2FjaGVfaGl0ID0gKCpjYWNoZV92YWxpZF9i eXRlID09IENhY2hlUGFnZTo6TElORV9WQUxJRCk7Ci0rICBjaGFyKiBjYWNoZWRfbGluZSA9IGNh Y2hlX3BhZ2UtPmNhY2hlZERhdGEob2Zmc2V0ICYgfkNhY2hlUGFnZTo6a0xpbmVNYXNrKTsKLSsK LSsgIGlmIChjYWNoZV9oaXQpIHsKLSsgICAgbW96aWxsYTo6RGVidWdPbmx5PGludD4gY21wcmV0 ID0KLSsgICAgICAgIG1lbWNtcChyZWludGVycHJldF9jYXN0PHZvaWQqPihpbnN0ciksIGNhY2hl X3BhZ2UtPmNhY2hlZERhdGEob2Zmc2V0KSwKLSsgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlv bjo6a0luc3RyU2l6ZSk7Ci0rICAgIE1PWl9BU1NFUlQoY21wcmV0ID09IDApOwotKyAgfSBlbHNl IHsKLSsgICAgbWVtY3B5KGNhY2hlZF9saW5lLCBsaW5lLCBDYWNoZVBhZ2U6OmtMaW5lTGVuZ3Ro KTsKLSsgICAgKmNhY2hlX3ZhbGlkX2J5dGUgPSBDYWNoZVBhZ2U6OkxJTkVfVkFMSUQ7Ci0rICB9 Ci0rfQotKwotK0hhc2hOdW1iZXIgU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlSGFzaGVyOjpoYXNo KGNvbnN0IExvb2t1cCYgbCkgewotKyAgcmV0dXJuIFUzMihyZWludGVycHJldF9jYXN0PHVpbnRw dHJfdD4obCkpID4+IDI7Ci0rfQotKwotK2Jvb2wgU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlSGFz aGVyOjptYXRjaChjb25zdCBLZXkmIGssIGNvbnN0IExvb2t1cCYgbCkgewotKyAgTU9aX0FTU0VS VCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaykgJiBDYWNoZVBhZ2U6OmtQYWdlTWFzaykg PT0gMCk7Ci0rICBNT1pfQVNTRVJUKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihsKSAmIENh Y2hlUGFnZTo6a1BhZ2VNYXNrKSA9PSAwKTsKLSsgIHJldHVybiBrID09IGw7Ci0rfQotKwotKy8q IHN0YXRpYyAqLwotK3ZvaWQgU2ltdWxhdG9yUHJvY2Vzczo6Rmx1c2hJQ2FjaGUodm9pZCogc3Rh cnRfYWRkciwgc2l6ZV90IHNpemUpIHsKLSsgIGlmICghSUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291 bnQpIHsKLSsgICAgQXV0b0xvY2tTaW11bGF0b3JDYWNoZSBhbHM7Ci0rICAgIGpzOjpqaXQ6OkZs dXNoSUNhY2hlTG9ja2VkKGljYWNoZSgpLCBzdGFydF9hZGRyLCBzaXplKTsKLSsgIH0KLSt9Ci0r Ci0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBSZWRpcmVjdGlvbi4KLSsKLStjbGFzcyBS ZWRpcmVjdGlvbiB7Ci0rICBmcmllbmQgY2xhc3MgU2ltdWxhdG9yUHJvY2VzczsKLSsKLSsgIFJl ZGlyZWN0aW9uKHZvaWQqIG5hdGl2ZUZ1bmN0aW9uLCBBQklGdW5jdGlvblR5cGUgdHlwZSkKLSsg ICAgICA6IG5hdGl2ZUZ1bmN0aW9uXyhuYXRpdmVGdW5jdGlvbiksCi0rICAgICAgICBzd2lJbnN0 cnVjdGlvbl8oa0NhbGxSZWRpckluc3RyKSwKLSsgICAgICAgIHR5cGVfKHR5cGUpLAotKyAgICAg ICAgbmV4dF8obnVsbHB0cikgewotKyAgICBuZXh0XyA9IFNpbXVsYXRvclByb2Nlc3M6OnJlZGly ZWN0aW9uKCk7Ci0rICAgIGlmICghU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNh YmxlQ291bnQpIHsKLSsgICAgICBGbHVzaElDYWNoZUxvY2tlZChTaW11bGF0b3JQcm9jZXNzOjpp Y2FjaGUoKSwgYWRkcmVzc09mU3dpSW5zdHJ1Y3Rpb24oKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAgIH0KLSsgICAgU2ltdWxhdG9y UHJvY2Vzczo6c2V0UmVkaXJlY3Rpb24odGhpcyk7Ci0rICB9Ci0rCi0rIHB1YmxpYzoKLSsgIHZv aWQqIGFkZHJlc3NPZlN3aUluc3RydWN0aW9uKCkgeyByZXR1cm4gJnN3aUluc3RydWN0aW9uXzsg fQotKyAgdm9pZCogbmF0aXZlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBuYXRpdmVGdW5jdGlv bl87IH0KLSsgIEFCSUZ1bmN0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZV87IH0K LSsKLSsgIHN0YXRpYyBSZWRpcmVjdGlvbiogR2V0KHZvaWQqIG5hdGl2ZUZ1bmN0aW9uLCBBQklG dW5jdGlvblR5cGUgdHlwZSkgewotKyAgICBBdXRvTG9ja1NpbXVsYXRvckNhY2hlIGFsczsKLSsK LSsgICAgUmVkaXJlY3Rpb24qIGN1cnJlbnQgPSBTaW11bGF0b3JQcm9jZXNzOjpyZWRpcmVjdGlv bigpOwotKyAgICBmb3IgKDsgY3VycmVudCAhPSBudWxscHRyOyBjdXJyZW50ID0gY3VycmVudC0+ bmV4dF8pIHsKLSsgICAgICBpZiAoY3VycmVudC0+bmF0aXZlRnVuY3Rpb25fID09IG5hdGl2ZUZ1 bmN0aW9uKSB7Ci0rICAgICAgICBNT1pfQVNTRVJUKGN1cnJlbnQtPnR5cGUoKSA9PSB0eXBlKTsK LSsgICAgICAgIHJldHVybiBjdXJyZW50OwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICBBdXRv RW50ZXJPT01VbnNhZmVSZWdpb24gb29tVW5zYWZlOwotKyAgICBSZWRpcmVjdGlvbiogcmVkaXIg PSBqc19wb2RfbWFsbG9jPFJlZGlyZWN0aW9uPigxKTsKLSsgICAgaWYgKCFyZWRpcikgewotKyAg ICAgIG9vbVVuc2FmZS5jcmFzaCgiU2ltdWxhdG9yIHJlZGlyZWN0aW9uIik7Ci0rICAgIH0KLSsg ICAgbmV3IChyZWRpcikgUmVkaXJlY3Rpb24obmF0aXZlRnVuY3Rpb24sIHR5cGUpOwotKyAgICBy ZXR1cm4gcmVkaXI7Ci0rICB9Ci0rCi0rICBzdGF0aWMgUmVkaXJlY3Rpb24qIEZyb21Td2lJbnN0 cnVjdGlvbihTaW1JbnN0cnVjdGlvbiogc3dpSW5zdHJ1Y3Rpb24pIHsKLSsgICAgdWludDhfdCog YWRkck9mU3dpID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc3dpSW5zdHJ1Y3Rpb24pOwot KyAgICB1aW50OF90KiBhZGRyT2ZSZWRpcmVjdGlvbiA9Ci0rICAgICAgICBhZGRyT2ZTd2kgLSBv ZmZzZXRvZihSZWRpcmVjdGlvbiwgc3dpSW5zdHJ1Y3Rpb25fKTsKLSsgICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8UmVkaXJlY3Rpb24qPihhZGRyT2ZSZWRpcmVjdGlvbik7Ci0rICB9Ci0rCi0r IHByaXZhdGU6Ci0rICB2b2lkKiBuYXRpdmVGdW5jdGlvbl87Ci0rICB1aW50MzJfdCBzd2lJbnN0 cnVjdGlvbl87Ci0rICBBQklGdW5jdGlvblR5cGUgdHlwZV87Ci0rICBSZWRpcmVjdGlvbiogbmV4 dF87Ci0rfTsKLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIFNpbXVsYXRvciBjb25z dHJ1Y3RvciAvIGRlc3RydWN0b3IgLyBpbml0LgotKwotK1NpbXVsYXRvcjo6U2ltdWxhdG9yKCkg ewotKyAgc3RhY2tfID0gbnVsbHB0cjsKLSsgIHN0YWNrTGltaXRfID0gMDsKLSsgIHBjX21vZGlm aWVkXyA9IGZhbHNlOwotKyAgaWNvdW50XyA9IDA7Ci0rICBicmVha19jb3VudF8gPSAwOwotKyAg YnJlYWtfcGNfID0gbnVsbHB0cjsKLSsgIGJyZWFrX2luc3RyXyA9IDA7Ci0rICBzaW5nbGVfc3Rl cHBpbmdfID0gZmFsc2U7Ci0rICBzaW5nbGVfc3RlcF9jYWxsYmFja18gPSBudWxscHRyOwotKyAg c2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXyA9IG51bGxwdHI7Ci0rCi0rICBmb3IgKGludCBpID0g MDsgaSA8IFJlZ2lzdGVyOjprTnVtU2ltdVJlZ2lzdGVyczsgaSsrKSB7Ci0rICAgIHJlZ2lzdGVy c19baV0gPSAwOwotKyAgfQotKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBTaW11bGF0b3I6OkZQVVJl Z2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzOyBpKyspIHsKLSsgICAgRlBVcmVnaXN0ZXJzX1tpXSA9 IDA7Ci0rICB9Ci0rCi0rICBMUl8gPSAwOwotKyAgQ1RSXyA9IDA7Ci0rICBDUl8gPSAwOwotKyAg WEVSXyA9IDA7Ci0rICBGUFNDUl8gPSAwOwotKyAgTExCaXRfID0gZmFsc2U7Ci0rICBMTEFkZHJf ID0gMDsKLSsgIGxhc3RMTFZhbHVlXyA9IDA7Ci0rCi0rICAvLyBJbml0aWFsaXplIFBDIGFuZCBM UiB0byBhIGtub3duIGJhZCB2YWx1ZSB0aGF0IHdpbGwgY2F1c2UgYW4KLSsgIC8vIGFjY2VzcyB2 aW9sYXRpb24gaWYgdGhlIHNpbXVsYXRvciBldmVyIHRyaWVzIHRvIGV4ZWN1dGUgaXQuCi0rICBy ZWdpc3RlcnNfW3BjXSA9IGJhZF9yYTsKLSsgIExSXyA9IGJhZF9yYTsKLSsKLSsgIGxhc3REZWJ1 Z2dlcklucHV0XyA9IG51bGxwdHI7Ci0rfQotKwotK2Jvb2wgU2ltdWxhdG9yOjppbml0KCkgewot KyAgc3RhdGljIGNvbnN0IHNpemVfdCBzdGFja1NpemUgPSAyICogMTAyNCAqIDEwMjQ7Ci0rICBz dGFja18gPSBqc19wb2RfbWFsbG9jPGNoYXI+KHN0YWNrU2l6ZSk7Ci0rICBpZiAoIXN0YWNrXykg ewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rCi0rICAvLyBMZWF2ZSBhIHNhZmV0eSBtYXJn aW4gb2YgMU1CIHRvIHByZXZlbnQgb3ZlcnJ1bm5pbmcgdGhlIHN0YWNrLgotKyAgc3RhY2tMaW1p dF8gPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhY2tfKSArIDEwMjQgKiAxMDI0Owot KwotKyAgLy8gVGhlIHNwIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIHRoZSBib3R0b20gKGhp Z2ggYWRkcmVzcykgb2YgdGhlCi0rICAvLyBhbGxvY2F0ZWQgc3RhY2sgYXJlYS4KLSsgIHJlZ2lz dGVyc19bc3BdID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihzdGFja18pICsgc3RhY2tTaXpl IC0gNjQ7Ci0rCi0rICAvLyBaZXJvLWluaXRpYWxpemUgVlIgbmFtZXNwYWNlLiBTaW11bGF0ZWQg UFBDNjQgZG9lcyBub3QgZ3VhcmFudGVlIGFueQotKyAgLy8gdmFsdWUgaW4gVlJzIGF0IGVudHJ5 LCBidXQgemVyb2luZyBhdm9pZHMgdW5pbml0aWFsaXplZC1yZWFkIGZhbHNlCi0rICAvLyBwb3Np dGl2ZXMgaW4gdG9vbHMgYW5kIG1ha2VzIHJlZ3Jlc3Npb24gdHJhY2VzIGRldGVybWluaXN0aWMu Ci0rICBtZW1zZXQoVlJyZWdpc3RlcnNfLCAwLCBzaXplb2YoVlJyZWdpc3RlcnNfKSk7Ci0rCi0r ICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rU2ltdWxhdG9yOjp+U2ltdWxhdG9yKCkgeyBqc19mcmVl KHN0YWNrXyk7IH0KLSsKLStTaW11bGF0b3JQcm9jZXNzOjpTaW11bGF0b3JQcm9jZXNzKCkKLSsg ICAgOiBjYWNoZUxvY2tfKG11dGV4aWQ6OlNpbXVsYXRvckNhY2hlTG9jayksIHJlZGlyZWN0aW9u XyhudWxscHRyKSB7Ci0rICBpZiAoZ2V0ZW52KCJQUEM2NF9TSU1fSUNBQ0hFX0NIRUNLUyIpKSB7 Ci0rICAgIElDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50ID0gMDsKLSsgIH0KLSt9Ci0rCi0rU2lt dWxhdG9yUHJvY2Vzczo6flNpbXVsYXRvclByb2Nlc3MoKSB7Ci0rICBSZWRpcmVjdGlvbiogciA9 IHJlZGlyZWN0aW9uXzsKLSsgIHdoaWxlIChyKSB7Ci0rICAgIFJlZGlyZWN0aW9uKiBuZXh0ID0g ci0+bmV4dF87Ci0rICAgIGpzX2RlbGV0ZShyKTsKLSsgICAgciA9IG5leHQ7Ci0rICB9Ci0rfQot KwotKy8qIHN0YXRpYyAqLwotK3ZvaWQqIFNpbXVsYXRvcjo6UmVkaXJlY3ROYXRpdmVGdW5jdGlv bih2b2lkKiBuYXRpdmVGdW5jdGlvbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQUJJRnVuY3Rpb25UeXBlIHR5cGUpIHsKLSsgIFJlZGlyZWN0aW9uKiByZWRpcmVj dGlvbiA9IFJlZGlyZWN0aW9uOjpHZXQobmF0aXZlRnVuY3Rpb24sIHR5cGUpOwotKyAgcmV0dXJu IHJlZGlyZWN0aW9uLT5hZGRyZXNzT2ZTd2lJbnN0cnVjdGlvbigpOwotK30KLSsKLStTaW11bGF0 b3IqIFNpbXVsYXRvcjo6Q3VycmVudCgpIHsKLSsgIEpTQ29udGV4dCogY3ggPSBUbHNDb250ZXh0 LmdldCgpOwotKyAgTU9aX0FTU0VSVChDdXJyZW50VGhyZWFkQ2FuQWNjZXNzUnVudGltZShjeC0+ cnVudGltZSgpKSk7Ci0rICByZXR1cm4gY3gtPnNpbXVsYXRvcigpOwotK30KLSsKLSsvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKy8vIFJlZ2lzdGVyIGFjY2Vzc29ycy4KLSsKLSt2b2lkIFNpbXVs YXRvcjo6c2V0UmVnaXN0ZXIoaW50IHJlZywgaW50NjRfdCB2YWx1ZSkgewotKyAgTU9aX0FTU0VS VCgocmVnID49IDApICYmIChyZWcgPCBSZWdpc3Rlcjo6a051bVNpbXVSZWdpc3RlcnMpKTsKLSsg IGlmIChyZWcgPT0gcGMpIHsKLSsgICAgcGNfbW9kaWZpZWRfID0gdHJ1ZTsKLSsgIH0KLSsgIHJl Z2lzdGVyc19bcmVnXSA9IHZhbHVlOwotK30KLSsKLStpbnQ2NF90IFNpbXVsYXRvcjo6Z2V0UmVn aXN0ZXIoaW50IHJlZykgY29uc3QgewotKyAgTU9aX0FTU0VSVCgocmVnID49IDApICYmIChyZWcg PCBSZWdpc3Rlcjo6a051bVNpbXVSZWdpc3RlcnMpKTsKLSsgIHJldHVybiByZWdpc3RlcnNfW3Jl Z10gKyAoKHJlZyA9PSBwYykgPyBTaW1JbnN0cnVjdGlvbjo6a1BDUmVhZE9mZnNldCA6IDApOwot K30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0RnB1UmVnaXN0ZXIoaW50IGZwdXJlZywgaW50NjRf dCB2YWx1ZSkgewotKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCi0rICAgICAgICAgICAg IChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0r ICBGUFVyZWdpc3RlcnNfW2ZwdXJlZ10gPSB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6 OnNldEZwdVJlZ2lzdGVyV29yZChpbnQgZnB1cmVnLCBpbnQzMl90IHZhbHVlKSB7Ci0rICBNT1pf QVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRv cjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKLSsgIGludDMyX3QqIHB3b3JkOwot KyAgcHdvcmQgPSByZWludGVycHJldF9jYXN0PGludDMyX3QqPigmRlBVcmVnaXN0ZXJzX1tmcHVy ZWddKTsKLSsgICpwd29yZCA9IHZhbHVlOwotK30KLSsKLSsvLyBQcm9tb3RlIGYzMiDihpIgZjY0 IHByZXNlcnZpbmcgTmFOIHBheWxvYWQsIGxpa2UgUFBDNjQncyBgbGZzYCBhbmQKLSsvLyBgeHNj dnNwZHBuYC4gVGhlIHBsYWluIEMgY2FzdCBgKGRvdWJsZSlmMzJfbmFuYCBpcyBwZXJtaXR0ZWQg YnkgdGhlCi0rLy8gc3RhbmRhcmQgdG8gcXVpZXQgYSBzaWduYWxpbmcgTmFOLCB3aGljaCBvbiB4 ODYvQVJNIGhvc3RzIHZpc2libHkKLSsvLyB0cmFuc2Zvcm1zIDB4N0ZBMDAwMDAgKHNOYU4pIGlu dG8gYSBxTmFOIHN1Y2ggYXMgMHg3RkUwMDAwMCDigJQgYnJlYWtpbmcKLSsvLyBldmVyeSB3YXNt IHRlc3QgdGhhdCBsb2FkcyBhIGNvbnN0YW50IHNOYU4gYml0IHBhdHRlcm4uIE1hbnVhbGx5Ci0r Ly8gcmVjb25zdHJ1Y3QgdGhlIGY2NCBOYU4gd2l0aCB0aGUgc2FtZSBzaWduICsgcGF5bG9hZCAo cGF5bG9hZCBzaGlmdGVkCi0rLy8gbGVmdCBieSAyOSB0byBmaWxsIHRoZSB3aWRlciBtYW50aXNz YSkuCi0rc3RhdGljIGRvdWJsZSBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKGZsb2F0IGYpIHsK LSsgIHVpbnQzMl90IGJpdHM7Ci0rICBtZW1jcHkoJmJpdHMsICZmLCBzaXplb2YoYml0cykpOwot KyAgaWYgKChiaXRzICYgMHg3RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmIChiaXRzICYgMHgw MDdGRkZGRnUpICE9IDB1KSB7Ci0rICAgIHVpbnQ2NF90IHNpZ24gPSB1aW50NjRfdChiaXRzID4+ IDMxKSAmIDF1OwotKyAgICB1aW50NjRfdCBwYXlsb2FkID0gdWludDY0X3QoYml0cyAmIDB4MDA3 RkZGRkZ1KTsKLSsgICAgdWludDY0X3QgZGJpdHMgPSAoc2lnbiA8PCA2MykgfCAodWludDY0X3Qo MHg3RkZ1KSA8PCA1MikgfCAocGF5bG9hZCA8PCAyOSk7Ci0rICAgIGRvdWJsZSBkOwotKyAgICBt ZW1jcHkoJmQsICZkYml0cywgc2l6ZW9mKGQpKTsKLSsgICAgcmV0dXJuIGQ7Ci0rICB9Ci0rICBy ZXR1cm4gKGRvdWJsZSlmOwotK30KLSsKLSsvLyBEZW1vdGUgZjY0IOKGkiBmMzIgcHJlc2Vydmlu ZyBOYU4gcGF5bG9hZCAobm9uLXNpZ25hbGluZzogbWF0Y2hlcyBQUEM2NAotKy8vIGBzdGZzYCAv IGB4c2N2ZHBzcG5gLCBhbmQgd2FzbSBgbGZzYC1lcXVpdmFsZW50IHN0b3JlcykuIFRydW5jYXRl cyB0aGUKLSsvLyBsb3dlciAyOSBiaXRzIG9mIHRoZSBmNjQgcGF5bG9hZCAodGhvc2UgYml0cyBj YW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4KLSsvLyB0aGUgbmFycm93ZXIgZjMyIG1hbnRpc3NhKTsg aWYgdGhlIHRydW5jYXRpb24gd291bGQgeWllbGQgYSBwYXlsb2FkIG9mCi0rLy8gemVybyAod2hp Y2ggd291bGQgZGVncmFkZSB0aGUgTmFOIHRvIGFuIEluZmluaXR5KSwgZm9yY2UgdGhlIExTQiBz bwotKy8vIHRoZSByZXN1bHQgaXMgc3RpbGwgYSBOYU4uIFRoaXMgaW50ZW50aW9uYWxseSBkb2Vz IE5PVCBzZXQgdGhlIHF1aWV0Ci0rLy8gYml0IOKAlCB0aGF0J3MgdGhlIGpvYiBvZiB0aGUgZXhw bGljaXQtcXVpZXRpbmcgb3AgYHhzY3ZkcHNwYCBhbmQKLSsvLyBmMzIuZGVtb3RlX2Y2NCdzIHdh c20tbGV2ZWwgbG93ZXJpbmcuCi0rc3RhdGljIGZsb2F0IGRlbW90ZURvdWJsZVByZXNlcnZpbmdO YU4oZG91YmxlIGQpIHsKLSsgIHVpbnQ2NF90IGJpdHM7Ci0rICBtZW1jcHkoJmJpdHMsICZkLCBz aXplb2YoYml0cykpOwotKyAgaWYgKChiaXRzICYgMHg3RkYwMDAwMDAwMDAwMDAwVUxMKSA9PSAw eDdGRjAwMDAwMDAwMDAwMDBVTEwgJiYKLSsgICAgICAoYml0cyAmIDB4MDAwRkZGRkZGRkZGRkZG RlVMTCkgIT0gMCkgewotKyAgICB1aW50MzJfdCBzaWduID0gdWludDMyX3QoYml0cyA+PiA2Mykg JiAxdTsKLSsgICAgdWludDMyX3QgcGF5bG9hZCA9IHVpbnQzMl90KChiaXRzID4+IDI5KSAmIDB4 MDA3RkZGRkZ1KTsKLSsgICAgaWYgKHBheWxvYWQgPT0gMCkgcGF5bG9hZCA9IDE7Ci0rICAgIHVp bnQzMl90IGZiaXRzID0gKHNpZ24gPDwgMzEpIHwgMHg3RjgwMDAwMHUgfCBwYXlsb2FkOwotKyAg ICBmbG9hdCBmOwotKyAgICBtZW1jcHkoJmYsICZmYml0cywgc2l6ZW9mKGYpKTsKLSsgICAgcmV0 dXJuIGY7Ci0rICB9Ci0rICByZXR1cm4gKGZsb2F0KWQ7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9y OjpzZXRGcHVSZWdpc3RlckZsb2F0KGludCBmcHVyZWcsIGZsb2F0IHZhbHVlKSB7Ci0rICBNT1pf QVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRv cjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKLSsgIC8vIEVMRnYyIEFCSTogc2lu Z2xlLXByZWNpc2lvbiB2YWx1ZXMgaW4gRlBScyBhcmUgc3RvcmVkIGFzIHRoZWlyCi0rICAvLyBk b3VibGUtcHJlY2lzaW9uIHJlcHJlc2VudGF0aW9uLiBQcm9tb3RlIGFuZCBzdG9yZSB0aGUgZnVs bCA4IGJ5dGVzLAotKyAgLy8gbm90IGp1c3QgdGhlIGxvdyA0LiAoT3RoZXJ3aXNlIHRoZSB1cHBl ciA0IGJ5dGVzIGFyZSBzdGFsZSwgbWF0Y2hpbmcKLSsgIC8vIHRoZSBsYXlvdXQgdGhhdCBmY3Rp ZC9mY2ZpZC9sZmQgd291bGQgcmVhZCBidXQgTk9UIHdoYXQgdGhlIEpJVCBhbmQKLSsgIC8vIHRo ZSBDIEFCSSBleHBlY3QgZm9yIGEgJ2Zsb2F0JyBwYXJhbWV0ZXIuKSBVc2UgdGhlIE5hTi1wcmVz ZXJ2aW5nCi0rICAvLyBoZWxwZXIgc28gYSBzaWduYWxpbmctTmFOIHJldHVybiB2YWx1ZSBpc24n dCBxdWlldGVkIGludG8gYSBxTmFOLgotKyAgZG91YmxlIHByb21vdGVkID0gcHJvbW90ZUZsb2F0 UHJlc2VydmluZ05hTih2YWx1ZSk7Ci0rICBtZW1jcHkoJkZQVXJlZ2lzdGVyc19bZnB1cmVnXSwg JnByb21vdGVkLCBzaXplb2YocHJvbW90ZWQpKTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OnNl dEZwdVJlZ2lzdGVyRG91YmxlKGludCBmcHVyZWcsIGRvdWJsZSB2YWx1ZSkgewotKyAgTU9aX0FT U0VSVCgoZnB1cmVnID49IDApICYmCi0rICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6 OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0rICAqbW96aWxsYTo6Qml0d2lzZUNh c3Q8ZG91YmxlKj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVnXSkgPSB2YWx1ZTsKLSt9Ci0rCi0raW50 NjRfdCBTaW11bGF0b3I6OmdldEZwdVJlZ2lzdGVyKGludCBmcHVyZWcpIGNvbnN0IHsKLSsgIE1P Wl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAmJgotKyAgICAgICAgICAgICAoZnB1cmVnIDwgU2ltdWxh dG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOwotKyAgcmV0dXJuIEZQVXJlZ2lz dGVyc19bZnB1cmVnXTsKLSt9Ci0rCi0raW50MzJfdCBTaW11bGF0b3I6OmdldEZwdVJlZ2lzdGVy V29yZChpbnQgZnB1cmVnKSBjb25zdCB7Ci0rICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYK LSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVS ZWdpc3RlcnMpKTsKLSsgIHJldHVybiAqbW96aWxsYTo6Qml0d2lzZUNhc3Q8aW50MzJfdCo+KCZG UFVyZWdpc3RlcnNfW2ZwdXJlZ10pOwotK30KLSsKLStpbnQzMl90IFNpbXVsYXRvcjo6Z2V0RnB1 UmVnaXN0ZXJTaWduZWRXb3JkKGludCBmcHVyZWcpIGNvbnN0IHsKLSsgIE1PWl9BU1NFUlQoKGZw dXJlZyA+PSAwKSAmJgotKyAgICAgICAgICAgICAoZnB1cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdp c3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOwotKyAgcmV0dXJuICptb3ppbGxhOjpCaXR3aXNlQ2Fz dDxpbnQzMl90Kj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVnXSk7Ci0rfQotKwotK2Zsb2F0IFNpbXVs YXRvcjo6Z2V0RnB1UmVnaXN0ZXJGbG9hdChpbnQgZnB1cmVnKSBjb25zdCB7Ci0rICBNT1pfQVNT RVJUKChmcHVyZWcgPj0gMCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6 RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKLSsgIC8vIEVMRnYyIEFCSTogc2luZ2xl LXByZWNpc2lvbiB2YWx1ZXMgYXJlIHBhc3NlZC9yZXR1cm5lZCBpbiBGUFJzIGFzIHRoZWlyCi0r ICAvLyBkb3VibGUtcHJlY2lzaW9uIHJlcHJlc2VudGF0aW9uLiBSZWFkIHRoZSBmdWxsIDggYnl0 ZXMgYXMgZG91YmxlLCB0aGVuCi0rICAvLyBuYXJyb3cgdG8gZmxvYXQg4oCUIG1hdGNoaW5nIHRo ZSBgZnJzcGAgdGhlIEMgY2FsbGVlIHdvdWxkIGRvLCBhbmQgbWF0Y2hpbmcKLSsgIC8vIHdoYXQg cmVhbCBQUEM2NCBoYXJkd2FyZSBzZWVzIHdoZW4gdGhlIEZQUiB3YXMgbG9hZGVkIHZpYSBgbGZz YC4gVXNlIHRoZQotKyAgLy8gTmFOLXByZXNlcnZpbmcgaGVscGVyIHNvIGEgc2lnbmFsaW5nLU5h TiBwYXJhbWV0ZXIgaXNuJ3QgcXVpZXRlZC4KLSsgIGRvdWJsZSBwcm9tb3RlZDsKLSsgIG1lbWNw eSgmcHJvbW90ZWQsICZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10sIHNpemVvZihwcm9tb3RlZCkpOwot KyAgcmV0dXJuIGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4ocHJvbW90ZWQpOwotK30KLSsKLStk b3VibGUgU2ltdWxhdG9yOjpnZXRGcHVSZWdpc3RlckRvdWJsZShpbnQgZnB1cmVnKSBjb25zdCB7 Ci0rICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8 IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKLSsgIHJldHVybiAq bW96aWxsYTo6Qml0d2lzZUNhc3Q8ZG91YmxlKj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVnXSk7Ci0r fQotKwotK3ZvaWQgU2ltdWxhdG9yOjpzZXRWUkJ5dGVzKGludCB2cmVnLCBjb25zdCB1aW50OF90 IGJ5dGVzWzE2XSkgewotKyAgTU9aX0FTU0VSVCgodnJlZyA+PSAwKSAmJiAodnJlZyA8IGtOdW1W UlJlZ2lzdGVycykpOwotKyAgbWVtY3B5KFZScmVnaXN0ZXJzX1t2cmVnXSwgYnl0ZXMsIDE2KTsK LSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OmdldFZSQnl0ZXMoaW50IHZyZWcsIHVpbnQ4X3QgYnl0 ZXNbMTZdKSBjb25zdCB7Ci0rICBNT1pfQVNTRVJUKCh2cmVnID49IDApICYmICh2cmVnIDwga051 bVZSUmVnaXN0ZXJzKSk7Ci0rICBtZW1jcHkoYnl0ZXMsIFZScmVnaXN0ZXJzX1t2cmVnXSwgMTYp OwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6Z2V0VlNSMTI4KGludCB2c3IsIHVpbnQ4X3QgYnl0 ZXNbMTZdKSBjb25zdCB7Ci0rICBNT1pfQVNTRVJUKCh2c3IgPj0gMCkgJiYgKHZzciA8IGtOdW1G UFVSZWdpc3RlcnMgKyBrTnVtVlJSZWdpc3RlcnMpKTsKLSsgIGlmICh2c3IgPCBrTnVtRlBVUmVn aXN0ZXJzKSB7Ci0rICAgIC8vIFZTUiAwLTMxOiBGUFIgdmlldy4gVGhlIEZQUiBzY2FsYXIgbGl2 ZXMgaW4gQkUgRFcwIG9mIHRoZSBWU1IsCi0rICAgIC8vIHdoaWNoIG9uIFBQQzY0TEUgcmVnaXN0 ZXIgc3RvcmFnZSBtYXBzIHRvIExFIGJ5dGVzIDgtMTUuCi0rICAgIC8vIERXMSBpcyB1bmRlZmlu ZWQgcGVyIElTQTsgd2UgbW9kZWwgaXQgYXMgemVyby4KLSsgICAgLy8gYGxmZCBmMCwobWVtKTsg eHhsb3IgPHZyPixmMCxmMDsgc3R4dnggPHZyPiwuLi5gIHdyaXRlcyB0aGUKLSsgICAgLy8gZG91 YmxlJ3MgOCBieXRlcyB0byB0aGUgSElHSCBoYWxmIG9mIHRoZSAxNi1ieXRlIHN0b3JlIChMRQot KyAgICAvLyBieXRlcyA4LTE1KS4KLSsgICAgaW50NjRfdCB2YWwgPSBGUFVyZWdpc3RlcnNfW3Zz cl07Ci0rICAgIG1lbXNldChieXRlcywgMCwgOCk7Ci0rICAgIG1lbWNweShieXRlcyArIDgsICZ2 YWwsIDgpOwotKyAgfSBlbHNlIHsKLSsgICAgbWVtY3B5KGJ5dGVzLCBWUnJlZ2lzdGVyc19bdnNy IC0ga051bUZQVVJlZ2lzdGVyc10sIDE2KTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6 OnNldFZTUjEyOChpbnQgdnNyLCBjb25zdCB1aW50OF90IGJ5dGVzWzE2XSkgewotKyAgTU9aX0FT U0VSVCgodnNyID49IDApICYmICh2c3IgPCBrTnVtRlBVUmVnaXN0ZXJzICsga051bVZSUmVnaXN0 ZXJzKSk7Ci0rICBpZiAodnNyIDwga051bUZQVVJlZ2lzdGVycykgewotKyAgICAvLyBGUFIgc2Nh bGFyIGF0IEJFIERXMCA9IExFIGJ5dGVzIDgtMTUuIERXMSBpcyBhcmNoaXRlY3R1cmFsbHkKLSsg ICAgLy8gZGlzY2FyZGVkIG9uIFZTUi10by1GUFIgd3JpdGVzLgotKyAgICBpbnQ2NF90IHZhbDsK LSsgICAgbWVtY3B5KCZ2YWwsIGJ5dGVzICsgOCwgOCk7Ci0rICAgIEZQVXJlZ2lzdGVyc19bdnNy XSA9IHZhbDsKLSsgIH0gZWxzZSB7Ci0rICAgIG1lbWNweShWUnJlZ2lzdGVyc19bdnNyIC0ga051 bUZQVVJlZ2lzdGVyc10sIGJ5dGVzLCAxNik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9y OjpzZXRDYWxsUmVzdWx0RG91YmxlKGRvdWJsZSByZXN1bHQpIHsKLSsgIHNldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjEsIHJlc3VsdCk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpz ZXRDYWxsUmVzdWx0RmxvYXQoZmxvYXQgcmVzdWx0KSB7Ci0rICBzZXRGcHVSZWdpc3RlckZsb2F0 KFNpbXVsYXRvcjo6ZjEsIHJlc3VsdCk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxs UmVzdWx0KGludDY0X3QgcmVzKSB7IHNldFJlZ2lzdGVyKHIzLCByZXMpOyB9Ci0rCi0rI2lmZGVm IFhQX0RBUldJTgotK3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxsUmVzdWx0KGludHB0cl90IHJlcykg ewotKyAgc2V0UmVnaXN0ZXIocjMsIEk2NChyZXMpKTsKLSt9Ci0rI2VuZGlmCi0rCi0rdm9pZCBT aW11bGF0b3I6OnNldENhbGxSZXN1bHQoX19pbnQxMjggcmVzKSB7Ci0rICBzZXRSZWdpc3Rlcihy MywgSTY0KHJlcykpOwotKyAgc2V0UmVnaXN0ZXIocjQsIEk2NChyZXMgPj4gNjQpKTsKLSt9Ci0r Ci0rdm9pZCBTaW11bGF0b3I6OnNldF9wYyhpbnQ2NF90IHZhbHVlKSB7Ci0rICBwY19tb2RpZmll ZF8gPSB0cnVlOwotKyAgcmVnaXN0ZXJzX1twY10gPSB2YWx1ZTsKLSt9Ci0rCi0rYm9vbCBTaW11 bGF0b3I6Omhhc19iYWRfcGMoKSBjb25zdCB7Ci0rICByZXR1cm4gKChyZWdpc3RlcnNfW3BjXSA9 PSBiYWRfcmEpIHx8IChyZWdpc3RlcnNfW3BjXSA9PSBlbmRfc2ltX3BjKSk7Ci0rfQotKwotK2lu dDY0X3QgU2ltdWxhdG9yOjpnZXRfcGMoKSBjb25zdCB7IHJldHVybiByZWdpc3RlcnNfW3BjXTsg fQotKwotK0pTOjpQcm9maWxpbmdGcmFtZUl0ZXJhdG9yOjpSZWdpc3RlclN0YXRlIFNpbXVsYXRv cjo6cmVnaXN0ZXJTdGF0ZSgpIHsKLSsgIHdhc206OlJlZ2lzdGVyU3RhdGUgc3RhdGU7Ci0rICBz dGF0ZS5wYyA9ICh2b2lkKilnZXRfcGMoKTsKLSsgIHN0YXRlLmZwID0gKHZvaWQqKWdldFJlZ2lz dGVyKGZwKTsKLSsgIHN0YXRlLnNwID0gKHZvaWQqKWdldFJlZ2lzdGVyKHNwKTsKLSsgIHN0YXRl LmxyID0gKHZvaWQqKWdldExSKCk7Ci0rICByZXR1cm4gc3RhdGU7Ci0rfQotKwotKy8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0rLy8gTWVtb3J5IGFjY2VzcyBoZWxwZXJzLgotKwotK3VpbnQ4X3Qg U2ltdWxhdG9yOjpyZWFkQlUodWludDY0X3QgYWRkcikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdG YXVsdChhZGRyLCAxKSkgewotKyAgICByZXR1cm4gMHhmZjsKLSsgIH0KLSsgIHVpbnQ4X3QqIHB0 ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGFkZHIpOwotKyAgcmV0dXJuICpwdHI7Ci0r fQotKwotK2ludDhfdCBTaW11bGF0b3I6OnJlYWRCKHVpbnQ2NF90IGFkZHIpIHsKLSsgIGlmICho YW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKLSsgICAgcmV0dXJuIC0xOwotKyAgfQotKyAg aW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KGFkZHIpOwotKyAgcmV0dXJu ICpwdHI7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZUIodWludDY0X3QgYWRkciwgdWlu dDhfdCB2YWx1ZSkgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAxKSkgewotKyAg ICByZXR1cm47Ci0rICB9Ci0rICB1aW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4 X3QqPihhZGRyKTsKLSsgICpwdHIgPSB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6Ondy aXRlQih1aW50NjRfdCBhZGRyLCBpbnQ4X3QgdmFsdWUpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2Vn RmF1bHQoYWRkciwgMSkpIHsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaW50OF90KiBwdHIgPSBy ZWludGVycHJldF9jYXN0PGludDhfdCo+KGFkZHIpOwotKyAgKnB0ciA9IHZhbHVlOwotK30KLSsK LSt1aW50MTZfdCBTaW11bGF0b3I6OnJlYWRIVSh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKLSsgICAg cmV0dXJuIDB4ZmZmZjsKLSsgIH0KLSsgIHVpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9jYXN0 PHVpbnQxNl90Kj4oYWRkcik7Ci0rICByZXR1cm4gKnB0cjsKLSt9Ci0rCi0raW50MTZfdCBTaW11 bGF0b3I6OnJlYWRIKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAg aWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAyKSkgewotKyAgICByZXR1cm4gLTE7Ci0rICB9 Ci0rICBpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDE2X3QqPihhZGRyKTsKLSsg IHJldHVybiAqcHRyOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6d3JpdGVIKHVpbnQ2NF90IGFk ZHIsIHVpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChoYW5k bGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgdWludDE2 X3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihhZGRyKTsKLSsgIExMQml0XyA9 IGZhbHNlOwotKyAgKnB0ciA9IHZhbHVlOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6d3JpdGVI KHVpbnQ2NF90IGFkZHIsIGludDE2X3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewot KyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCAyKSkgewotKyAgICByZXR1cm47Ci0rICB9 Ci0rICBpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDE2X3QqPihhZGRyKTsKLSsg IExMQml0XyA9IGZhbHNlOwotKyAgKnB0ciA9IHZhbHVlOwotK30KLSsKLSt1aW50MzJfdCBTaW11 bGF0b3I6OnJlYWRXVSh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsg IGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgNCkpIHsKLSsgICAgcmV0dXJuIC0xOwotKyAg fQotKyAgdWludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihhZGRyKTsK LSsgIHJldHVybiAqcHRyOwotK30KLSsKLStpbnQzMl90IFNpbXVsYXRvcjo6cmVhZFcodWludDY0 X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0Zh dWx0KGFkZHIsIDQpKSB7Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsgIGludDMyX3QqIHB0ciA9 IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGFkZHIpOwotKyAgcmV0dXJuICpwdHI7Ci0rfQot KwotK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZVcodWludDY0X3QgYWRkciwgdWludDMyX3QgdmFsdWUs IFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRy LCA0KSkgewotKyAgICByZXR1cm47Ci0rICB9Ci0rICB1aW50MzJfdCogcHRyID0gcmVpbnRlcnBy ZXRfY2FzdDx1aW50MzJfdCo+KGFkZHIpOwotKyAgTExCaXRfID0gZmFsc2U7Ci0rICAqcHRyID0g dmFsdWU7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZVcodWludDY0X3QgYWRkciwgaW50 MzJfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNl Z0ZhdWx0KGFkZHIsIDQpKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGludDMyX3QqIHB0ciA9 IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGFkZHIpOwotKyAgTExCaXRfID0gZmFsc2U7Ci0r ICAqcHRyID0gdmFsdWU7Ci0rfQotKwotK2ludDY0X3QgU2ltdWxhdG9yOjpyZWFkRFcodWludDY0 X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0Zh dWx0KGFkZHIsIDgpKSB7Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsgIGludDY0X3QqIHB0ciA9 IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KGFkZHIpOwotKyAgcmV0dXJuICpwdHI7Ci0rfQot KwotK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZURXKHVpbnQ2NF90IGFkZHIsIGludDY0X3QgdmFsdWUs IFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRy LCA4KSkgewotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpbnQ2NF90KiBwdHIgPSByZWludGVycHJl dF9jYXN0PGludDY0X3QqPihhZGRyKTsKLSsgIExMQml0XyA9IGZhbHNlOwotKyAgKnB0ciA9IHZh bHVlOwotK30KLSsKLStkb3VibGUgU2ltdWxhdG9yOjpyZWFkRCh1aW50NjRfdCBhZGRyLCBTaW1J bnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgOCkp IHsKLSsgICAgcmV0dXJuIE5BTjsKLSsgIH0KLSsgIGRvdWJsZSogcHRyID0gcmVpbnRlcnByZXRf Y2FzdDxkb3VibGUqPihhZGRyKTsKLSsgIHJldHVybiAqcHRyOwotK30KLSsKLSt2b2lkIFNpbXVs YXRvcjo6d3JpdGVEKHVpbnQ2NF90IGFkZHIsIGRvdWJsZSB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDgpKSB7Ci0rICAgIHJl dHVybjsKLSsgIH0KLSsgIGRvdWJsZSogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihh ZGRyKTsKLSsgIExMQml0XyA9IGZhbHNlOwotKyAgKnB0ciA9IHZhbHVlOwotK30KLSsKLSsvLyBC eXRlLXdpZGUgbG9hZC1yZXNlcnZlIC8gc3RvcmUtY29uZGl0aW9uYWwgKGxiYXJ4IC8gc3RiY3gu KS4KLSsvLyBCeXRlIGFjY2Vzc2VzIGhhdmUgbm8gYWxpZ25tZW50IHJlcXVpcmVtZW50LgotK3Vp bnQ4X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkQih1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKLSsgICAg cmV0dXJuIDA7Ci0rICB9Ci0rICB2b2xhdGlsZSB1aW50OF90KiBwdHIgPSByZWludGVycHJldF9j YXN0PHZvbGF0aWxlIHVpbnQ4X3QqPihhZGRyKTsKLSsgIHVpbnQ4X3QgdmFsdWUgPSAqcHRyOwot KyAgbGFzdExMVmFsdWVfID0gdmFsdWU7Ci0rICBMTEFkZHJfID0gYWRkcjsKLSsgIExMQml0XyA9 IHRydWU7Ci0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludCBTaW11bGF0b3I6OnN0b3JlQ29u ZGl0aW9uYWxCKHVpbnQ2NF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoYWRkciAh PSBMTEFkZHJfKSB7Ci0rICAgIHByaW50Zigic3RiY3guIHRvIGJhZCBhZGRyZXNzOiAweCUwMTYi IFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIKLSsgICAgICAgICAgICIsIGV4cGVjdGVkOiAw eCUwMTYiIFBSSXhQVFIgIlxuIiwKLSsgICAgICAgICAgIGFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8 aW50cHRyX3Q+KGluc3RyKSwgTExBZGRyXyk7Ci0rICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKyAg U2hhcmVkTWVtPHVpbnQ4X3QqPiBwdHIgPQotKyAgICAgIFNoYXJlZE1lbTx1aW50OF90Kj46OnNo YXJlZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihhZGRyKSk7Ci0rICBpZiAoIUxMQml0Xykg ewotKyAgICByZXR1cm4gMDsKLSsgIH0KLSsgIExMQml0XyA9IGZhbHNlOwotKyAgTExBZGRyXyA9 IDA7Ci0rICB1aW50OF90IGV4cGVjdGVkID0gdWludDhfdChsYXN0TExWYWx1ZV8pOwotKyAgdWlu dDhfdCBvbGQgPQotKyAgICAgIEF0b21pY09wZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNz dChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7Ci0rICByZXR1cm4gKG9sZCA9PSBleHBlY3RlZCkgPyAx IDogMDsKLSt9Ci0rCi0rLy8gSGFsZndvcmQtd2lkZSBsb2FkLXJlc2VydmUgLyBzdG9yZS1jb25k aXRpb25hbCAobGhhcnggLyBzdGhjeC4pLgotKy8vIDItYnl0ZSBhbGlnbmVkIHBlciBJU0EuCi0r dWludDE2X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkSCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVj dGlvbiogaW5zdHIpIHsKLSsgIGlmICgoYWRkciAmIDEpID09IDApIHsKLSsgICAgaWYgKGhhbmRs ZVdhc21TZWdGYXVsdChhZGRyLCAyKSkgewotKyAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAg IHZvbGF0aWxlIHVpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIHVpbnQx Nl90Kj4oYWRkcik7Ci0rICAgIHVpbnQxNl90IHZhbHVlID0gKnB0cjsKLSsgICAgbGFzdExMVmFs dWVfID0gdmFsdWU7Ci0rICAgIExMQWRkcl8gPSBhZGRyOwotKyAgICBMTEJpdF8gPSB0cnVlOwot KyAgICByZXR1cm4gdmFsdWU7Ci0rICB9Ci0rICBwcmludGYoIlVuYWxpZ25lZCBsaGFyeCBhdCAw eCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIgIlxuIiwgYWRkciwKLSsgICAgICAg ICByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cikpOwotKyAgTU9aX0NSQVNIKCk7Ci0r ICByZXR1cm4gMDsKLSt9Ci0rCi0raW50IFNpbXVsYXRvcjo6c3RvcmVDb25kaXRpb25hbEgodWlu dDY0X3QgYWRkciwgdWludDE2X3QgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoYWRkciAhPSBMTEFkZHJfKSB7 Ci0rICAgIHByaW50Zigic3RoY3guIHRvIGJhZCBhZGRyZXNzOiAweCUwMTYiIFBSSXg2NCAiLCBw Yz0weCUwMTYiIFBSSXhQVFIKLSsgICAgICAgICAgICIsIGV4cGVjdGVkOiAweCUwMTYiIFBSSXhQ VFIgIlxuIiwKLSsgICAgICAgICAgIGFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGlu c3RyKSwgTExBZGRyXyk7Ci0rICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKyAgaWYgKChhZGRyICYg MSkgPT0gMCkgewotKyAgICBTaGFyZWRNZW08dWludDE2X3QqPiBwdHIgPQotKyAgICAgICAgU2hh cmVkTWVtPHVpbnQxNl90Kj46OnNoYXJlZChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYWRk cikpOwotKyAgICBpZiAoIUxMQml0XykgewotKyAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAg IExMQml0XyA9IGZhbHNlOwotKyAgICBMTEFkZHJfID0gMDsKLSsgICAgdWludDE2X3QgZXhwZWN0 ZWQgPSB1aW50MTZfdChsYXN0TExWYWx1ZV8pOwotKyAgICB1aW50MTZfdCBvbGQgPQotKyAgICAg ICAgQXRvbWljT3BlcmF0aW9uczo6Y29tcGFyZUV4Y2hhbmdlU2VxQ3N0KHB0ciwgZXhwZWN0ZWQs IHZhbHVlKTsKLSsgICAgcmV0dXJuIChvbGQgPT0gZXhwZWN0ZWQpID8gMSA6IDA7Ci0rICB9Ci0r ICBwcmludGYoIlVuYWxpZ25lZCBzdGhjeC4gYXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2 IiBQUkl4UFRSICJcbiIsIGFkZHIsCi0rICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf dD4oaW5zdHIpKTsKLSsgIE1PWl9DUkFTSCgpOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK2ludDMy X3QgU2ltdWxhdG9yOjpsb2FkTGlua2VkVyh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiog aW5zdHIpIHsKLSsgIGlmICgoYWRkciAmIDMpID09IDApIHsKLSsgICAgaWYgKGhhbmRsZVdhc21T ZWdGYXVsdChhZGRyLCA0KSkgewotKyAgICAgIHJldHVybiAtMTsKLSsgICAgfQotKwotKyAgICB2 b2xhdGlsZSBpbnQzMl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHZvbGF0aWxlIGludDMyX3Qq PihhZGRyKTsKLSsgICAgaW50MzJfdCB2YWx1ZSA9ICpwdHI7Ci0rICAgIGxhc3RMTFZhbHVlXyA9 IHZhbHVlOwotKyAgICBMTEFkZHJfID0gYWRkcjsKLSsgICAgTExCaXRfID0gdHJ1ZTsKLSsgICAg cmV0dXJuIHZhbHVlOwotKyAgfQotKyAgcHJpbnRmKCJVbmFsaWduZWQgbHdhcnggYXQgMHglMDE2 IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIsIGFkZHIsCi0rICAgICAgICAgcmVp bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKLSsgIE1PWl9DUkFTSCgpOwotKyAgcmV0 dXJuIDA7Ci0rfQotKwotK2ludCBTaW11bGF0b3I6OnN0b3JlQ29uZGl0aW9uYWxXKHVpbnQ2NF90 IGFkZHIsIGludDMyX3QgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoYWRkciAhPSBMTEFkZHJfKSB7Ci0rICAg IHByaW50Zigic3R3Y3guIHRvIGJhZCBhZGRyZXNzOiAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUw MTYiIFBSSXhQVFIKLSsgICAgICAgICAgICIsIGV4cGVjdGVkOiAweCUwMTYiIFBSSXhQVFIgIlxu IiwKLSsgICAgICAgICAgIGFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwg TExBZGRyXyk7Ci0rICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKwotKyAgaWYgKChhZGRyICYgMykg PT0gMCkgewotKyAgICBTaGFyZWRNZW08aW50MzJfdCo+IHB0ciA9Ci0rICAgICAgICBTaGFyZWRN ZW08aW50MzJfdCo+OjpzaGFyZWQocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oYWRkcikpOwot KwotKyAgICBpZiAoIUxMQml0XykgewotKyAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAg IExMQml0XyA9IGZhbHNlOwotKyAgICBMTEFkZHJfID0gMDsKLSsgICAgaW50MzJfdCBleHBlY3Rl ZCA9IGludDMyX3QobGFzdExMVmFsdWVfKTsKLSsgICAgaW50MzJfdCBvbGQgPQotKyAgICAgICAg QXRvbWljT3BlcmF0aW9uczo6Y29tcGFyZUV4Y2hhbmdlU2VxQ3N0KHB0ciwgZXhwZWN0ZWQsIHZh bHVlKTsKLSsgICAgcmV0dXJuIChvbGQgPT0gZXhwZWN0ZWQpID8gMSA6IDA7Ci0rICB9Ci0rICBw cmludGYoIlVuYWxpZ25lZCBzdHdjeC4gYXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQ Ukl4UFRSICJcbiIsIGFkZHIsCi0rICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o aW5zdHIpKTsKLSsgIE1PWl9DUkFTSCgpOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK2ludDY0X3Qg U2ltdWxhdG9yOjpsb2FkTGlua2VkRCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5z dHIpIHsKLSsgIGlmICgoYWRkciAmIGtQb2ludGVyQWxpZ25tZW50TWFzaykgPT0gMCkgewotKyAg ICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDgpKSB7Ci0rICAgICAgcmV0dXJuIC0xOwot KyAgICB9Ci0rCi0rICAgIHZvbGF0aWxlIGludDY0X3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8 dm9sYXRpbGUgaW50NjRfdCo+KGFkZHIpOwotKyAgICBpbnQ2NF90IHZhbHVlID0gKnB0cjsKLSsg ICAgbGFzdExMVmFsdWVfID0gdmFsdWU7Ci0rICAgIExMQWRkcl8gPSBhZGRyOwotKyAgICBMTEJp dF8gPSB0cnVlOwotKyAgICByZXR1cm4gdmFsdWU7Ci0rICB9Ci0rICBwcmludGYoIlVuYWxpZ25l ZCBsZGFyeCBhdCAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIgIlxuIiwgYWRk ciwKLSsgICAgICAgICByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cikpOwotKyAgTU9a X0NSQVNIKCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0raW50IFNpbXVsYXRvcjo6c3RvcmVDb25k aXRpb25hbEQodWludDY0X3QgYWRkciwgaW50NjRfdCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChhZGRyICE9 IExMQWRkcl8pIHsKLSsgICAgcHJpbnRmKCJzdGRjeC4gdG8gYmFkIGFkZHJlc3M6IDB4JTAxNiIg UFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUgotKyAgICAgICAgICAgIiwgZXhwZWN0ZWQ6IDB4 JTAxNiIgUFJJeFBUUiAiXG4iLAotKyAgICAgICAgICAgYWRkciwgcmVpbnRlcnByZXRfY2FzdDxp bnRwdHJfdD4oaW5zdHIpLCBMTEFkZHJfKTsKLSsgICAgTU9aX0NSQVNIKCk7Ci0rICB9Ci0rCi0r ICBpZiAoKGFkZHIgJiBrUG9pbnRlckFsaWdubWVudE1hc2spID09IDApIHsKLSsgICAgU2hhcmVk TWVtPGludDY0X3QqPiBwdHIgPQotKyAgICAgICAgU2hhcmVkTWVtPGludDY0X3QqPjo6c2hhcmVk KHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KGFkZHIpKTsKLSsKLSsgICAgaWYgKCFMTEJpdF8p IHsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBMTEJpdF8gPSBmYWxzZTsKLSsg ICAgTExBZGRyXyA9IDA7Ci0rICAgIGludDY0X3QgZXhwZWN0ZWQgPSBsYXN0TExWYWx1ZV87Ci0r ICAgIGludDY0X3Qgb2xkID0KLSsgICAgICAgIEF0b21pY09wZXJhdGlvbnM6OmNvbXBhcmVFeGNo YW5nZVNlcUNzdChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7Ci0rICAgIHJldHVybiAob2xkID09IGV4 cGVjdGVkKSA/IDEgOiAwOwotKyAgfQotKyAgcHJpbnRmKCJVbmFsaWduZWQgc3RkY3guIGF0IDB4 JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAiXG4iLCBhZGRyLAotKyAgICAgICAg IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7Ci0rICBNT1pfQ1JBU0goKTsKLSsg IHJldHVybiAwOwotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIFN0YWNrIGxp bWl0IC8gcmVjdXJzaW9uIGhlbHBlcnMuCi0rCi0rdWludHB0cl90IFNpbXVsYXRvcjo6c3RhY2tM aW1pdCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrTGltaXRfOyB9Ci0rCi0rdWludHB0cl90KiBTaW11 bGF0b3I6OmFkZHJlc3NPZlN0YWNrTGltaXQoKSB7IHJldHVybiAmc3RhY2tMaW1pdF87IH0KLSsK LStib29sIFNpbXVsYXRvcjo6b3ZlclJlY3Vyc2VkKHVpbnRwdHJfdCBuZXdzcCkgY29uc3Qgewot KyAgaWYgKG5ld3NwID09IDApIHsKLSsgICAgbmV3c3AgPSBnZXRSZWdpc3RlcihzcCk7Ci0rICB9 Ci0rICByZXR1cm4gbmV3c3AgPD0gc3RhY2tMaW1pdCgpOwotK30KLSsKLStib29sIFNpbXVsYXRv cjo6b3ZlclJlY3Vyc2VkV2l0aEV4dHJhKHVpbnQzMl90IGV4dHJhKSBjb25zdCB7Ci0rICB1aW50 cHRyX3QgbmV3c3AgPSBnZXRSZWdpc3RlcihzcCkgLSBleHRyYTsKLSsgIHJldHVybiBuZXdzcCA8 PSBzdGFja0xpbWl0KCk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpmb3JtYXQoU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyLCBjb25zdCBjaGFyKiBmb3JtYXQpIHsKLSsgIHByaW50ZigiU2ltdWxhdG9y IGZvdW5kIHVuc3VwcG9ydGVkIGluc3RydWN0aW9uOlxuIDB4JTAxNiIgUFJJeFBUUgotKyAgICAg ICAgICI6ICUwOHggJXNcbiIsCi0rICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o aW5zdHIpLCBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCksIGZvcm1hdCk7Ci0rICBNT1pfQ1JBU0go KTsKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBzb2Z0d2FyZUludGVycnVw dCAtIGhhbmRsZSBrQ2FsbFJlZGlySW5zdHIgKFBQQ19zdG9wKSBhbmQgUFBDX3RyYXAuCi0rCi0r QUJJX0ZVTkNUSU9OX1RZUEVfU0lNX1BST1RPVFlQRVMKLSsKLSt2b2lkIFNpbXVsYXRvcjo6c29m dHdhcmVJbnRlcnJ1cHQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50MzJfdCBpbnN0 ckJpdHMgPSBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCk7Ci0rCi0rICBpZiAoaW5zdHJCaXRzID09 IGtDYWxsUmVkaXJJbnN0cikgewotKyAgICBSZWRpcmVjdGlvbiogcmVkaXJlY3Rpb24gPSBSZWRp cmVjdGlvbjo6RnJvbVN3aUluc3RydWN0aW9uKGluc3RyKTsKLSsgICAgdWludHB0cl90IG5hdGl2 ZUZuID0KLSsgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZWRpcmVjdGlvbi0+ bmF0aXZlRnVuY3Rpb24oKSk7Ci0rCi0rICAgIC8vIEdldCB0aGUgU1AgZm9yIHJlYWRpbmcgc3Rh Y2sgYXJndW1lbnRzLgotKyAgICBpbnQ2NF90KiBzcF8gPSByZWludGVycHJldF9jYXN0PGludDY0 X3QqPihnZXRSZWdpc3RlcihzcCkpOwotKyAgICAvLyBTa2lwIHBhc3QgdGhlIFBQQzY0IEVMRnYy IGxpbmsgYXJlYSAoNCBkb3VibGV3b3JkcyA9IDMyIGJ5dGVzKS4KLSsgICAgc3BfID0gcmVpbnRl cnByZXRfY2FzdDxpbnQ2NF90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNwXykgKyAz Mik7Ci0rCi0rICAgIC8vIFBQQzY0IEVMRnYyOiBpbnRlZ2VyIGFyZ3MgaW4gcjMtcjEwLCBGUCBh cmdzIGluIGYxLWYxMy4KLSsgICAgaW50NjRfdCBhMF8gPSBnZXRSZWdpc3RlcihyMyk7Ci0rICAg IGludDY0X3QgYTFfID0gZ2V0UmVnaXN0ZXIocjQpOwotKyAgICBpbnQ2NF90IGEyXyA9IGdldFJl Z2lzdGVyKHI1KTsKLSsgICAgaW50NjRfdCBhM18gPSBnZXRSZWdpc3RlcihyNik7Ci0rICAgIGlu dDY0X3QgYTRfID0gZ2V0UmVnaXN0ZXIocjcpOwotKyAgICBpbnQ2NF90IGE1XyA9IGdldFJlZ2lz dGVyKHI4KTsKLSsgICAgaW50NjRfdCBhNl8gPSBnZXRSZWdpc3RlcihyOSk7Ci0rICAgIGludDY0 X3QgYTdfID0gZ2V0UmVnaXN0ZXIocjEwKTsKLSsgICAgLy8gUFBDNjQgRUxGdjI6IEZQIGFyZ3Mg aW4gZjEtZjEzLCBtYXBwZWQgdG8gZjBfcy4uZjEyX3MgYW5kIGYwX2QuLmYxMl9kLgotKyAgICBm bG9hdCBmMF9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxKTsKLSsgICAgZmxv YXQgZjFfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMik7Ci0rICAgIGZsb2F0 IGYyX3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjMpOwotKyAgICBmbG9hdCBm M19zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY0KTsKLSsgICAgZmxvYXQgZjRf cyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmNSk7Ci0rICAgIGZsb2F0IGY1X3Mg PSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjYpOwotKyAgICBmbG9hdCBmNl9zID0g Z2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY3KTsKLSsgICAgZmxvYXQgZjdfcyA9IGdl dEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmOCk7Ci0rICAgIGZsb2F0IGY4X3MgPSBnZXRG cHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjkpOwotKyAgICBmbG9hdCBmOV9zID0gZ2V0RnB1 UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMCk7Ci0rICAgIGZsb2F0IGYxMF9zID0gZ2V0RnB1 UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMSk7Ci0rICAgIGZsb2F0IGYxMV9zID0gZ2V0RnB1 UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMik7Ci0rICAgIGZsb2F0IGYxMl9zID0gZ2V0RnB1 UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxMyk7Ci0rICAgIGRvdWJsZSBmMF9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMSk7Ci0rICAgIGRvdWJsZSBmMV9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMik7Ci0rICAgIGRvdWJsZSBmMl9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMyk7Ci0rICAgIGRvdWJsZSBmM19kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNCk7Ci0rICAgIGRvdWJsZSBmNF9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNSk7Ci0rICAgIGRvdWJsZSBmNV9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNik7Ci0rICAgIGRvdWJsZSBmNl9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmNyk7Ci0rICAgIGRvdWJsZSBmN19kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmOCk7Ci0rICAgIGRvdWJsZSBmOF9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmOSk7Ci0rICAgIGRvdWJsZSBmOV9kID0gZ2V0RnB1 UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMTApOwotKyAgICBkb3VibGUgZjEwX2QgPSBnZXRG cHVSZWdpc3RlckRvdWJsZShTaW11bGF0b3I6OmYxMSk7Ci0rICAgIGRvdWJsZSBmMTFfZCA9IGdl dEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEyKTsKLSsgICAgZG91YmxlIGYxMl9kID0g Z2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMTMpOwotKwotKyAgICAvLyBTdXBwcmVz cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgZm9yIGhpZ2hlciBGUCBhcmcgcmVnaXN0ZXJzLgot KyAgICAvLyBUaGV5IGV4aXN0IGZvciBBQkkgY29tcGxldGVuZXNzIGJ1dCBmZXcgZnVuY3Rpb24g dHlwZXMgdXNlID41IEZQIGFyZ3MuCi0rICAgICh2b2lkKWY0X3M7ICh2b2lkKWY1X3M7ICh2b2lk KWY2X3M7ICh2b2lkKWY3X3M7ICh2b2lkKWY4X3M7ICh2b2lkKWY5X3M7Ci0rICAgICh2b2lkKWYx MF9zOyAodm9pZClmMTFfczsgKHZvaWQpZjEyX3M7Ci0rICAgICh2b2lkKWY0X2Q7ICh2b2lkKWY1 X2Q7ICh2b2lkKWY2X2Q7ICh2b2lkKWY3X2Q7ICh2b2lkKWY4X2Q7ICh2b2lkKWY5X2Q7Ci0rICAg ICh2b2lkKWYxMF9kOyAodm9pZClmMTFfZDsgKHZvaWQpZjEyX2Q7Ci0rCi0rICAgIGludDY0X3Qg c2F2ZWRfbHIgPSBnZXRMUigpOwotKwotKyAgICBib29sIHN0YWNrX2FsaWduZWQgPSAoZ2V0UmVn aXN0ZXIoc3ApICYgKEFCSVN0YWNrQWxpZ25tZW50IC0gMSkpID09IDA7Ci0rICAgIGlmICghc3Rh Y2tfYWxpZ25lZCkgewotKyAgICAgIGZwcmludGYoc3RkZXJyLCAiUnVudGltZSBjYWxsIHdpdGgg dW5hbGlnbmVkIHN0YWNrIVxuIik7Ci0rICAgICAgTU9aX0NSQVNIKCk7Ci0rICAgIH0KLSsKLSsg ICAgaWYgKHNpbmdsZV9zdGVwcGluZ18pIHsKLSsgICAgICBzaW5nbGVfc3RlcF9jYWxsYmFja18o c2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgbnVsbHB0cik7Ci0rICAgIH0KLSsKLSsg ICAgc3dpdGNoIChyZWRpcmVjdGlvbi0+dHlwZSgpKSB7Ci0rICAgICAgQUJJX0ZVTkNUSU9OX1RZ UEVfUFBDNjRfU0lNX0RJU1BBVENICi0rCi0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9D UkFTSCgiVW5rbm93biBmdW5jdGlvbiB0eXBlLiIpOwotKyAgICB9Ci0rCi0rICAgIGlmIChzaW5n bGVfc3RlcHBpbmdfKSB7Ci0rICAgICAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVw X2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIpOwotKyAgICB9Ci0rCi0rICAgIHNldExSKHNh dmVkX2xyKTsKLSsgICAgc2V0X3BjKGdldExSKCkpOwotKyAgfSBlbHNlIGlmIChpbnN0ckJpdHMg PT0gMHg3RkUwMDAwOCkgewotKyAgICAvLyBQUENfdHJhcDogdXNlZCBmb3Igd2FzbSB0cmFwcy4K LSsgICAgdWludDhfdCogbmV3UEM7Ci0rICAgIGlmICh3YXNtOjpIYW5kbGVJbGxlZ2FsSW5zdHJ1 Y3Rpb24ocmVnaXN0ZXJTdGF0ZSgpLCAmbmV3UEMpKSB7Ci0rICAgICAgc2V0X3BjKGludDY0X3Qo bmV3UEMpKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgTU9aX0NSQVNIKCJVbmV4cGVj dGVkIHRyYXAgaW5zdHJ1Y3Rpb24iKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIE90aGVyIHRyYXAt bGlrZSBpbnN0cnVjdGlvbnM6IGVudGVyIGRlYnVnZ2VyLgotKyAgICBwcGM2NERlYnVnZ2VyIGRi Zyh0aGlzKTsKLSsgICAgZGJnLmRlYnVnKCk7Ci0rICB9Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0rLy8gU3RvcC9icmVha3BvaW50IGhlbHBlcnMuCi0rCi0rYm9vbCBTaW11bGF0 b3I6OmlzV2F0Y2hwb2ludCh1aW50MzJfdCBjb2RlKSB7Ci0rICByZXR1cm4gKGNvZGUgPD0ga01h eFdhdGNocG9pbnRDb2RlKTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OnByaW50V2F0Y2hwb2lu dCh1aW50MzJfdCBjb2RlKSB7Ci0rICBwcGM2NERlYnVnZ2VyIGRiZyh0aGlzKTsKLSsgICsrYnJl YWtfY291bnRfOwotKyAgcHJpbnRmKCJcbi0tLS0gYnJlYWsgJWQgbWFya2VyOiAlMjAiIFBSSWk2 NCAiICAoaW5zdHIgY291bnQ6ICUyMCIgUFJJaTY0Ci0rICAgICAgICAgIikgLS0tLVxuIiwKLSsg ICAgICAgICBjb2RlLCBicmVha19jb3VudF8sIGljb3VudF8pOwotKyAgZGJnLnByaW50QWxsUmVn cygpOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6aGFuZGxlU3RvcCh1aW50MzJfdCBjb2RlLCBT aW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChpc0VuYWJsZWRTdG9wKGNvZGUpKSB7Ci0r ICAgIHBwYzY0RGVidWdnZXIgZGJnKHRoaXMpOwotKyAgICBkYmcuc3RvcChpbnN0cik7Ci0rICB9 IGVsc2UgewotKyAgICBzZXRfcGMoZ2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6 ZSk7Ci0rICB9Ci0rfQotKwotK2Jvb2wgU2ltdWxhdG9yOjppc1N0b3BJbnN0cnVjdGlvbihTaW1J bnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHJldHVybiBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkg PT0ga0NhbGxSZWRpckluc3RyOwotK30KLSsKLStib29sIFNpbXVsYXRvcjo6aXNFbmFibGVkU3Rv cCh1aW50MzJfdCBjb2RlKSB7Ci0rICBNT1pfQVNTRVJUKGNvZGUgPD0ga01heFN0b3BDb2RlKTsK LSsgIE1PWl9BU1NFUlQoY29kZSA+IGtNYXhXYXRjaHBvaW50Q29kZSk7Ci0rICByZXR1cm4gISh3 YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XyAmIGtTdG9wRGlzYWJsZWRCaXQpOwotK30KLSsKLSt2 b2lkIFNpbXVsYXRvcjo6ZW5hYmxlU3RvcCh1aW50MzJfdCBjb2RlKSB7Ci0rICBpZiAoIWlzRW5h YmxlZFN0b3AoY29kZSkpIHsKLSsgICAgd2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gJj0gfmtT dG9wRGlzYWJsZWRCaXQ7Ci0rICB9Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpkaXNhYmxlU3Rv cCh1aW50MzJfdCBjb2RlKSB7Ci0rICBpZiAoaXNFbmFibGVkU3RvcChjb2RlKSkgewotKyAgICB3 YXRjaGVkU3RvcHNfW2NvZGVdLmNvdW50XyB8PSBrU3RvcERpc2FibGVkQml0OwotKyAgfQotK30K LSsKLSt2b2lkIFNpbXVsYXRvcjo6aW5jcmVhc2VTdG9wQ291bnRlcih1aW50MzJfdCBjb2RlKSB7 Ci0rICBNT1pfQVNTRVJUKGNvZGUgPD0ga01heFN0b3BDb2RlKTsKLSsgIGlmICgod2F0Y2hlZFN0 b3BzX1tjb2RlXS5jb3VudF8gJiB+KDEgPDwgMzEpKSA9PSAweDdmZmZmZmZmKSB7Ci0rICAgIHBy aW50ZigKLSsgICAgICAgICJTdG9wIGNvdW50ZXIgZm9yIGNvZGUgJWkgaGFzIG92ZXJmbG93ZWQu XG4iCi0rICAgICAgICAiRW5hYmxpbmcgdGhpcyBjb2RlIGFuZCByZXNldGluZyB0aGUgY291bnRl ciB0byAwLlxuIiwKLSsgICAgICAgIGNvZGUpOwotKyAgICB3YXRjaGVkU3RvcHNfW2NvZGVdLmNv dW50XyA9IDA7Ci0rICAgIGVuYWJsZVN0b3AoY29kZSk7Ci0rICB9IGVsc2UgewotKyAgICB3YXRj aGVkU3RvcHNfW2NvZGVdLmNvdW50XysrOwotKyAgfQotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6 cHJpbnRTdG9wSW5mbyh1aW50MzJfdCBjb2RlKSB7Ci0rICBpZiAoY29kZSA8PSBrTWF4V2F0Y2hw b2ludENvZGUpIHsKLSsgICAgcHJpbnRmKCJUaGF0IGlzIGEgd2F0Y2hwb2ludCwgbm90IGEgc3Rv cC5cbiIpOwotKyAgICByZXR1cm47Ci0rICB9IGVsc2UgaWYgKGNvZGUgPiBrTWF4U3RvcENvZGUp IHsKLSsgICAgcHJpbnRmKCJDb2RlIHRvbyBsYXJnZSwgb25seSAldSBzdG9wcyBjYW4gYmUgdXNl ZFxuIiwga01heFN0b3BDb2RlICsgMSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGNvbnN0IGNo YXIqIHN0YXRlID0gaXNFbmFibGVkU3RvcChjb2RlKSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCI7 Ci0rICBpbnQzMl90IGNvdW50ID0gd2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gJiB+a1N0b3BE aXNhYmxlZEJpdDsKLSsgIGlmIChjb3VudCAhPSAwKSB7Ci0rICAgIGlmICh3YXRjaGVkU3RvcHNf W2NvZGVdLmRlc2NfKSB7Ci0rICAgICAgcHJpbnRmKCJzdG9wICVpIC0gMHgleDogXHQlcywgXHRj b3VudGVyID0gJWksIFx0JXNcbiIsIGNvZGUsIGNvZGUsCi0rICAgICAgICAgICAgIHN0YXRlLCBj b3VudCwgd2F0Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg cHJpbnRmKCJzdG9wICVpIC0gMHgleDogXHQlcywgXHRjb3VudGVyID0gJWlcbiIsIGNvZGUsIGNv ZGUsIHN0YXRlLAotKyAgICAgICAgICAgICBjb3VudCk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBJbnN0cnVjdGlvbiBkZWNvZGVycy4KLSsvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKwotKy8vIENvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgZm9y IEQtZm9ybSBpbnN0cnVjdGlvbnMuCi0rLy8gSWYgUkE9PTAsIHRoZSBiYXNlIGlzIDAgKG5vdCBH UFJbMF0pLgotK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBERm9ybUVBKFNpbXVsYXRvciogc2ltLCBT aW1JbnN0cnVjdGlvbiogaW5zdHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 MTZfdCBvZmZzZXQpIHsKLSsgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgIGlu dDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBzaW0tPmdldFJlZ2lzdGVyKHJhKTsKLSsgIHJl dHVybiBiYXNlICsgb2Zmc2V0OwotK30KLSsKLSsvLyBDb21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNz IGZvciBEUy1mb3JtIGluc3RydWN0aW9ucy4KLStzdGF0aWMgaW5saW5lIGludDY0X3QgRFNGb3Jt RUEoU2ltdWxhdG9yKiBzaW0sIFNpbUluc3RydWN0aW9uKiBpbnN0ciwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50MTZfdCBvZmZzZXQpIHsKLSsgIHVpbnQzMl90IHJhID0gaW5z dHItPnJhVmFsdWUoKTsKLSsgIGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBzaW0tPmdl dFJlZ2lzdGVyKHJhKTsKLSsgIHJldHVybiBiYXNlICsgb2Zmc2V0OwotK30KLSsKLSsvLyBDb21w dXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBYLWZvcm0gaW5kZXhlZCBpbnN0cnVjdGlvbnMuCi0r Ly8gSWYgUkE9PTAsIGJhc2UgaXMgMCAobm90IEdQUlswXSkuCi0rc3RhdGljIGlubGluZSBpbnQ2 NF90IFhGb3JtRUEoU2ltdWxhdG9yKiBzaW0sIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAg dWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgdWludDMyX3QgcmIgPSBpbnN0ci0+ cmJWYWx1ZSgpOwotKyAgaW50NjRfdCBiYXNlID0gKHJhID09IDApID8gMCA6IHNpbS0+Z2V0UmVn aXN0ZXIocmEpOwotKyAgcmV0dXJuIGJhc2UgKyBzaW0tPmdldFJlZ2lzdGVyKHJiKTsKLSt9Ci0r Ci0rLy8gQ29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBmb3IgWC1mb3JtIGluZGV4ZWQgdXBkYXRl cyAoUkEgIT0gMCByZXF1aXJlZCkuCi0rc3RhdGljIGlubGluZSBpbnQ2NF90IFhGb3JtRUFVcGRh dGUoU2ltdWxhdG9yKiBzaW0sIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgdWludDMyX3Qg cmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgdWludDMyX3QgcmIgPSBpbnN0ci0+cmJWYWx1ZSgp OwotKyAgcmV0dXJuIHNpbS0+Z2V0UmVnaXN0ZXIocmEpICsgc2ltLT5nZXRSZWdpc3RlcihyYik7 Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2RlREZvcm1BTFU6IGFk ZGksIGFkZGlzLCBvcmksIG9yaXMsIHhvcmksIHhvcmlzLCBhbmRpLiwgYW5kaXMuLAotKy8vICAg ICAgICAgICAgICAgICBjbXBpLCBjbXBsaSwgc3ViZmljLCBhZGRpYywgYWRkaWMuLCBtdWxsaSwg dHdpCi0rCi0rdm9pZCBTaW11bGF0b3I6OmRlY29kZURGb3JtQUxVKFNpbUluc3RydWN0aW9uKiBp bnN0cikgewotKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOwotKyAgdWludDMy X3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwotKyAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1 ZSgpOwotKyAgaW50MTZfdCBzaSA9IGluc3RyLT5pbW0xNlZhbHVlKCk7Ci0rICB1aW50MTZfdCB1 aSA9IGluc3RyLT51aW1tMTZWYWx1ZSgpOwotKwotKyAgc3dpdGNoIChvcGNvZGUpIHsKLSsgICAg Y2FzZSAxNDogewotKyAgICAgIC8vIGFkZGk6IFJUID0gKFJBfDApICsgU0kKLSsgICAgICBpbnQ2 NF90IGJhc2UgPSAocmEgPT0gMCkgPyAwIDogZ2V0UmVnaXN0ZXIocmEpOwotKyAgICAgIHNldFJl Z2lzdGVyKHJ0LCBiYXNlICsgKGludDY0X3Qpc2kpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgMTU6IHsKLSsgICAgICAvLyBhZGRpczogUlQgPSAoUkF8MCkgKyAoU0kgPDwgMTYp Ci0rICAgICAgaW50NjRfdCBiYXNlID0gKHJhID09IDApID8gMCA6IGdldFJlZ2lzdGVyKHJhKTsK LSsgICAgICBzZXRSZWdpc3RlcihydCwgYmFzZSArICgoaW50NjRfdClzaSA8PCAxNikpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjQ6IHsKLSsgICAgICAvLyBvcmk6IFJBID0g UlMgfCBVSQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBnZXRSZWdpc3RlcihydCkgfCAodWludDY0 X3QpdWkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjU6IHsKLSsgICAgICAv LyBvcmlzOiBSQSA9IFJTIHwgKFVJIDw8IDE2KQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBnZXRS ZWdpc3RlcihydCkgfCAoKHVpbnQ2NF90KXVpIDw8IDE2KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSAyNjogewotKyAgICAgIC8vIHhvcmk6IFJBID0gUlMgXiBVSQotKyAgICAg IHNldFJlZ2lzdGVyKHJhLCBnZXRSZWdpc3RlcihydCkgXiAodWludDY0X3QpdWkpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjc6IHsKLSsgICAgICAvLyB4b3JpczogUkEgPSBS UyBeIChVSSA8PCAxNikKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgZ2V0UmVnaXN0ZXIocnQpIF4g KCh1aW50NjRfdCl1aSA8PCAxNikpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2Ug Mjg6IHsKLSsgICAgICAvLyBhbmRpLjogUkEgPSBSUyAmIFVJLCB1cGRhdGUgQ1IwCi0rICAgICAg aW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkgJiAodWludDY0X3QpdWk7Ci0rICAgICAg c2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyOTogewotKyAgICAgIC8vIGFuZGlzLjogUkEg PSBSUyAmIChVSSA8PCAxNiksIHVwZGF0ZSBDUjAKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdl dFJlZ2lzdGVyKHJ0KSAmICgodWludDY0X3QpdWkgPDwgMTYpOwotKyAgICAgIHNldFJlZ2lzdGVy KHJhLCByZXN1bHQpOwotKyAgICAgIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwot KyAgICB9Ci0rICAgIGNhc2UgMTE6IHsKLSsgICAgICAvLyBjbXBpOiBjb21wYXJlIFJBIHdpdGgg U0ksIHNpZ25lZAotKyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKLSsgICAg ICBib29sIGwgPSBpbnN0ci0+bEJpdCgpOwotKyAgICAgIGlmIChsKSB7Ci0rICAgICAgICAvLyA2 NC1iaXQgY29tcGFyZQotKyAgICAgICAgc2V0Q1JGaWVsZENtcChiZiwgZ2V0UmVnaXN0ZXIocmEp LCAoaW50NjRfdClzaSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIC8vIDMyLWJpdCBjb21w YXJlCi0rICAgICAgICBpbnQzMl90IHJhMzIgPSBJMzIoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAg ICAgIHNldENSRmllbGRDbXAoYmYsIChpbnQ2NF90KXJhMzIsIChpbnQ2NF90KShpbnQzMl90KXNp KTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxMDogewotKyAg ICAgIC8vIGNtcGxpOiBjb21wYXJlIFJBIHdpdGggVUksIHVuc2lnbmVkCi0rICAgICAgdWludDMy X3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgpOwotKyAgICAgIGJvb2wgbCA9IGluc3RyLT5sQml0KCk7 Ci0rICAgICAgaWYgKGwpIHsKLSsgICAgICAgIC8vIDY0LWJpdCB1bnNpZ25lZCBjb21wYXJlCi0r ICAgICAgICBzZXRDUkZpZWxkQ21wVShiZiwgVTY0KGdldFJlZ2lzdGVyKHJhKSksICh1aW50NjRf dCl1aSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIC8vIDMyLWJpdCB1bnNpZ25lZCBjb21w YXJlCi0rICAgICAgICB1aW50MzJfdCByYTMyID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAg ICAgICBzZXRDUkZpZWxkQ21wVShiZiwgKHVpbnQ2NF90KXJhMzIsICh1aW50NjRfdCl1aSk7Ci0r ICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODogewotKyAgICAgIC8v IHN1YmZpYzogUlQgPSBTSSAtIFJBLCBzZXQgQ0EKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBV NjQoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCBpbW0gPSBVNjQoKGludDY0X3Qp c2kpOwotKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IGltbSArIH5yYV92YWwgKyAxOwotKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgLy8gQ0EgaXMgc2V0IGlmIHRo ZXJlIGlzIGEgY2Fycnkgb3V0IG9mIHRoZSBhZGRpdGlvbiAoflJBICsgSU1NICsgMSkuCi0rICAg ICAgLy8gRXF1aXZhbGVudGx5LCBDQSA9IChJTU0gPj0gUkEpIGZvciB1bnNpZ25lZCBpbnRlcnBy ZXRhdGlvbiBvZiB0aGUKLSsgICAgICAvLyBmdWxsIDY0LWJpdCBzdWJ0cmFjdGlvbi4KLSsgICAg ICBib29sIGNhcnJ5ID0gKGltbSA+PSByYV92YWwpIHx8IChpbW0gPT0gMCAmJiByYV92YWwgPT0g MCk7Ci0rICAgICAgLy8gTW9yZSBwcmVjaXNlOiBjYXJyeSA9ICh+cmFfdmFsICsgaW1tKSB3b3Vs ZCBvdmVyZmxvdywgb3IgYWRkaW5nIDEKLSsgICAgICAvLyBvdmVyZmxvd3MuCi0rICAgICAgdWlu dDY0X3QgdG1wID0gfnJhX3ZhbCArIGltbTsKLSsgICAgICBjYXJyeSA9ICh0bXAgPCB+cmFfdmFs KSB8fCAodG1wIDwgaW1tKSB8fCAocmVzdWx0IDwgdG1wKTsKLSsgICAgICAvLyBTaW1wbGlmeTog Q0EgaWYgbm8gYm9ycm93LgotKyAgICAgIGNhcnJ5ID0gKFU2NCgoaW50NjRfdClzaSkgPj0gcmFf dmFsKTsKLSsgICAgICBpZiAocmFfdmFsID09IDApIGNhcnJ5ID0gdHJ1ZTsKLSsgICAgICAvLyBB Y3R1YWxseSwgc3ViZmljIENBOiBjYXJyeSBvdXQgb2YgflJBICsgSU1NICsgMS4KLSsgICAgICAv LyBDQSA9IChJTU0gPiBSQSAtIDEpIHdoZW4gUkEgIT0gMCwgQ0EgPSAxIHdoZW4gUkEgPT0gMC4K LSsgICAgICAvLyBPciBqdXN0OiB0aGUgdW5zaWduZWQgcmVzdWx0IG9mIChTSSAtIFJBKSBpcyB2 YWxpZCAobm8gYm9ycm93KS4KLSsgICAgICAvLyBMZXQncyBjb21wdXRlIGl0IGNvcnJlY3RseToK LSsgICAgICB7Ci0rICAgICAgICBfX3VpbnQxMjhfdCB3aWRlID0gKF9fdWludDEyOF90KSh+cmFf dmFsKSArIChfX3VpbnQxMjhfdClpbW0gKyAxOwotKyAgICAgICAgY2FycnkgPSAod2lkZSA+PiA2 NCkgIT0gMDsKLSsgICAgICB9Ci0rICAgICAgc2V0WEVSQ0EoY2FycnkpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rICAgIGNhc2UgMTI6IHsKLSsgICAgICAvLyBhZGRpYzogUlQgPSBSQSArIFNJ LCBzZXQgQ0EKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsK LSsgICAgICB1aW50NjRfdCBpbW0gPSBVNjQoKGludDY0X3Qpc2kpOwotKyAgICAgIHVpbnQ2NF90 IHJlc3VsdCA9IHJhX3ZhbCArIGltbTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3Vs dCkpOwotKyAgICAgIHNldFhFUkNBKHJlc3VsdCA8IHJhX3ZhbCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIH0KLSsgICAgY2FzZSAxMzogewotKyAgICAgIC8vIGFkZGljLjogUlQgPSBSQSArIFNJLCBz ZXQgQ0EsIHVwZGF0ZSBDUjAKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0 ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCBpbW0gPSBVNjQoKGludDY0X3Qpc2kpOwotKyAgICAg IHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGltbTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwg STY0KHJlc3VsdCkpOwotKyAgICAgIHNldFhFUkNBKHJlc3VsdCA8IHJhX3ZhbCk7Ci0rICAgICAg dXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDc6IHsKLSsgICAgICAvLyBtdWxsaTogUlQgPSBSQSAqIFNJIChsb3cgNjQgYml0cykKLSsgICAg ICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJhKSAqIChpbnQ2NF90KXNpOwotKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgMzogewotKyAgICAgIC8vIHR3aTogVHJhcCBXb3JkIEltbWVkaWF0ZS4gV2UgZG9uJ3QgaW1w bGVtZW50IHRyYXBwaW5nIGluIHRoZQotKyAgICAgIC8vIHNpbXVsYXRvcjsganVzdCBjb250aW51 ZS4KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFT SF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVERm9ybUFMVTogdW5oYW5kbGVkIG9wY29kZSAldSIsIG9w Y29kZSk7Ci0rICB9Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2Rl REZvcm1Mb2FkOiBsd3ooMzIpLCBsYnooMzQpLCBsaHooNDApLCBsaGEoNDIpLCBsZnMoNDgpLCBs ZmQoNTApCi0rLy8gICBhbmQgdXBkYXRlIHZhcmlhbnRzCi0rCi0rdm9pZCBTaW11bGF0b3I6OmRl Y29kZURGb3JtTG9hZChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IG9wY29k ZSA9IGluc3RyLT5vcGNvZGUoKTsKLSsgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsK LSsgIGludDE2X3Qgc2kgPSBpbnN0ci0+aW1tMTZWYWx1ZSgpOwotKyAgdWludDY0X3QgZWEgPSBE Rm9ybUVBKHRoaXMsIGluc3RyLCBzaSk7Ci0rCi0rICBzd2l0Y2ggKG9wY29kZSkgewotKyAgICBj YXNlIDMyOgotKyAgICAgIC8vIGx3egotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQocmVhZFdV KGVhLCBpbnN0cikpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAzMzogewotKyAgICAgIC8v IGx3enU6IFJBICE9IDAsIGxvYWQgYW5kIHVwZGF0ZSBSQQotKyAgICAgIHNldFJlZ2lzdGVyKHJ0 LCBVNjQocmVhZFdVKGVhLCBpbnN0cikpKTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFW YWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzNDoKLSsgICAg ICAvLyBsYnoKLSsgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRCVShlYSkpKTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSAzNTogewotKyAgICAgIC8vIGxienUKLSsgICAgICBzZXRSZWdp c3RlcihydCwgVTY0KHJlYWRCVShlYSkpKTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFW YWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0MDoKLSsgICAg ICAvLyBsaHoKLSsgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRIVShlYSwgaW5zdHIpKSk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgNDE6IHsKLSsgICAgICAvLyBsaHp1Ci0rICAgICAg c2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkSFUoZWEsIGluc3RyKSkpOwotKyAgICAgIHNldFJlZ2lz dGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIDQyOgotKyAgICAgIC8vIGxoYSAoaGFsZi13b3JkLCBzaWduLWV4dGVuZGVkKQotKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZWFkSChlYSwgaW5zdHIpKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSA0MzogewotKyAgICAgIC8vIGxoYXUKLSsgICAgICBzZXRSZWdpc3Rlcihy dCwgKGludDY0X3QpcmVhZEgoZWEsIGluc3RyKSk7Ci0rICAgICAgc2V0UmVnaXN0ZXIoaW5zdHIt PnJhVmFsdWUoKSwgZWEpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDg6IHsK LSsgICAgICAvLyBsZnM6IGxvYWQgZmxvYXQgc2luZ2xlLCB3aWRlbiB0byBkb3VibGUgaW4gRlBS IChOYU4tcHJlc2VydmluZzsKLSsgICAgICAvLyBtYXRjaGVzIFBvd2VyIElTQSBgbGZzYCB3aGlj aCB1c2VzIHhzY3ZzcGRwbiBzZW1hbnRpY3MpCi0rICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVs dChlYSwgNCkpIGJyZWFrOwotKyAgICAgIGZsb2F0IHZhbCA9ICpyZWludGVycHJldF9jYXN0PGZs b2F0Kj4oZWEpOwotKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQ cmVzZXJ2aW5nTmFOKHZhbCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDk6 IHsKLSsgICAgICAvLyBsZnN1Ci0rICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkp IGJyZWFrOwotKyAgICAgIGZsb2F0IHZhbCA9ICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEp OwotKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5n TmFOKHZhbCkpOwotKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDUwOiB7Ci0rICAgICAgLy8gbGZkOiBsb2Fk IGZsb2F0IGRvdWJsZQotKyAgICAgIGRvdWJsZSB2YWwgPSByZWFkRChlYSwgaW5zdHIpOwotKyAg ICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCB2YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9 Ci0rICAgIGNhc2UgNTE6IHsKLSsgICAgICAvLyBsZmR1Ci0rICAgICAgZG91YmxlIHZhbCA9IHJl YWREKGVhLCBpbnN0cik7Ci0rICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHZhbCk7Ci0r ICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgIGJyZWFrOwot KyAgICB9Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRl Y29kZURGb3JtTG9hZDogdW5oYW5kbGVkIG9wY29kZSAldSIsIG9wY29kZSk7Ci0rICB9Ci0rfQot KwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2RlREZvcm1TdG9yZTogc3R3KDM2 KSwgc3R3dSgzNyksIHN0YigzOCksIHN0aCg0NCksIHN0ZnMoNTIpLCBzdGZkKDU0KQotKy8vICAg YW5kIHVwZGF0ZSB2YXJpYW50cwotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVERm9ybVN0b3Jl KFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9w Y29kZSgpOwotKyAgdWludDMyX3QgcnMgPSBpbnN0ci0+cnNWYWx1ZSgpOwotKyAgaW50MTZfdCBz aSA9IGluc3RyLT5pbW0xNlZhbHVlKCk7Ci0rCi0rICAvLyBGb3Igc3RvcmVzLCB0aGUgZWZmZWN0 aXZlIGFkZHJlc3MgY2FsY3VsYXRpb24gZGlmZmVycyBmb3IgdXBkYXRlIGZvcm1zOgotKyAgLy8g LSBOb24tdXBkYXRlOiBFQSA9IChSQXwwKSArIEQKLSsgIC8vIC0gVXBkYXRlOiBFQSA9IFJBICsg RCAoUkEgbXVzdCBub3QgYmUgMCkKLSsgIGJvb2wgaXNVcGRhdGUgPSBmYWxzZTsKLSsgIHN3aXRj aCAob3Bjb2RlKSB7Ci0rICAgIGNhc2UgMzc6IGNhc2UgMzk6IGNhc2UgNDU6IGNhc2UgNTM6IGNh c2UgNTU6Ci0rICAgICAgaXNVcGRhdGUgPSB0cnVlOwotKyAgICAgIGJyZWFrOwotKyAgfQotKwot KyAgdWludDY0X3QgZWE7Ci0rICBpZiAoaXNVcGRhdGUpIHsKLSsgICAgZWEgPSBnZXRSZWdpc3Rl cihpbnN0ci0+cmFWYWx1ZSgpKSArIChpbnQ2NF90KXNpOwotKyAgfSBlbHNlIHsKLSsgICAgZWEg PSBERm9ybUVBKHRoaXMsIGluc3RyLCBzaSk7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKG9wY29kZSkg ewotKyAgICBjYXNlIDM2OgotKyAgICAgIC8vIHN0dwotKyAgICAgIHdyaXRlVyhlYSwgSTMyKGdl dFJlZ2lzdGVyKHJzKSksIGluc3RyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAzODoKLSsg ICAgICAvLyBzdGIKLSsgICAgICB3cml0ZUIoZWEsICh1aW50OF90KShnZXRSZWdpc3Rlcihycykg JiAweEZGKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgMzk6Ci0rICAgICAgLy8gc3RidQot KyAgICAgIHdyaXRlQihlYSwgKHVpbnQ4X3QpKGdldFJlZ2lzdGVyKHJzKSAmIDB4RkYpKTsKLSsg ICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgNDQ6Ci0rICAgICAgLy8gc3RoCi0rICAgICAgd3JpdGVIKGVhLCBVMTYoZ2V0UmVn aXN0ZXIocnMpKSwgaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDQ1OgotKyAgICAg IC8vIHN0aHUKLSsgICAgICB3cml0ZUgoZWEsIFUxNihnZXRSZWdpc3RlcihycykpLCBpbnN0cik7 Ci0rICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIDUyOiB7Ci0rICAgICAgLy8gc3RmczogY29udmVydCBkb3VibGUgaW4gRlBS IHRvIHNpbmdsZSBhbmQgc3RvcmUgKE5hTi1wcmVzZXJ2aW5nOwotKyAgICAgIC8vIG1hdGNoZXMg UG93ZXIgSVNBIGBzdGZzYCB3aGljaCB1c2VzIHhzY3ZkcHNwbiBzZW1hbnRpY3MpCi0rICAgICAg ZG91YmxlIGR2YWwgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShycyk7Ci0rICAgICAgZmxvYXQgZnZh bCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZHZhbCk7Ci0rICAgICAgaWYgKGhhbmRsZVdh c21TZWdGYXVsdChlYSwgNCkpIGJyZWFrOwotKyAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0 Kj4oZWEpID0gZnZhbDsKLSsgICAgICBMTEJpdF8gPSBmYWxzZTsKLSsgICAgICBicmVhazsKLSsg ICAgfQotKyAgICBjYXNlIDUzOiB7Ci0rICAgICAgLy8gc3Rmc3UKLSsgICAgICBkb3VibGUgZHZh bCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJzKTsKLSsgICAgICBmbG9hdCBmdmFsID0gZGVtb3Rl RG91YmxlUHJlc2VydmluZ05hTihkdmFsKTsKLSsgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0 KGVhLCA0KSkgYnJlYWs7Ci0rICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihlYSkgPSBm dmFsOwotKyAgICAgIExMQml0XyA9IGZhbHNlOwotKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5y YVZhbHVlKCksIGVhKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDU0OgotKyAg ICAgIC8vIHN0ZmQKLSsgICAgICB3cml0ZUQoZWEsIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJzKSwg aW5zdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDU1OgotKyAgICAgIC8vIHN0ZmR1Ci0r ICAgICAgd3JpdGVEKGVhLCBnZXRGcHVSZWdpc3RlckRvdWJsZShycyksIGluc3RyKTsKLSsgICAg ICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZURGb3JtU3Rv cmU6IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNvZGUpOwotKyAgfQotK30KLSsKLSsvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZURTRm9ybTogbGQoNTgvMCksIGx3YSg1OC8yKSwg c3RkKDYyLzApLCBzdGR1KDYyLzEpCi0rCi0rdm9pZCBTaW11bGF0b3I6OmRlY29kZURTRm9ybShT aW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNv ZGUoKTsKLSsgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsgIGludDE2X3QgZHMg PSBpbnN0ci0+ZHMxNFZhbHVlKCk7Ci0rICB1aW50MzJfdCB4byA9IGluc3RyLT5iaXRzKDEsIDAp OwotKwotKyAgaWYgKG9wY29kZSA9PSA1OCkgewotKyAgICB1aW50NjRfdCBlYSA9IERTRm9ybUVB KHRoaXMsIGluc3RyLCBkcyk7Ci0rICAgIHN3aXRjaCAoeG8pIHsKLSsgICAgICBjYXNlIDA6Ci0r ICAgICAgICAvLyBsZAotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIp KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgMTogewotKyAgICAgICAgLy8gbGR1Ci0r ICAgICAgICBzZXRSZWdpc3RlcihydCwgcmVhZERXKGVhLCBpbnN0cikpOwotKyAgICAgICAgc2V0 UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg fQotKyAgICAgIGNhc2UgMjoKLSsgICAgICAgIC8vIGx3YSAobG9hZCB3b3JkIGFsZ2VicmFpYywg c2lnbi1leHRlbmRlZCB0byA2NCkKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCly ZWFkVyhlYSwgaW5zdHIpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0rICAg ICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlRFNGb3JtOiBvcGNvZGUgNTgsIHhv PSV1IiwgeG8pOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKG9wY29kZSA9PSA2MikgewotKyAgICAv LyBGb3Igc3RkL3N0ZHUsIEVBIHVzZXMgUkEgZGlyZWN0bHkgKG5vIFJBfDAgcnVsZSkuCi0rICAg IHVpbnQ2NF90IGVhOwotKyAgICBpZiAoeG8gPT0gMSkgewotKyAgICAgIC8vIHN0ZHU6IHVwZGF0 ZSBmb3JtCi0rICAgICAgZWEgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKSArIChpbnQ2 NF90KWRzOwotKyAgICB9IGVsc2UgewotKyAgICAgIGVhID0gRFNGb3JtRUEodGhpcywgaW5zdHIs IGRzKTsKLSsgICAgfQotKyAgICBzd2l0Y2ggKHhvKSB7Ci0rICAgICAgY2FzZSAwOgotKyAgICAg ICAgLy8gc3RkCi0rICAgICAgICB3cml0ZURXKGVhLCBnZXRSZWdpc3RlcihydCksIGluc3RyKTsK LSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgMToKLSsgICAgICAgIC8vIHN0ZHUKLSsgICAg ICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lzdGVyKHJ0KSwgaW5zdHIpOwotKyAgICAgICAgc2V0UmVn aXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgZGVm YXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVEU0Zvcm06IG9w Y29kZSA2MiwgeG89JXUiLCB4byk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9DUkFT SF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVEU0Zvcm06IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNv ZGUpOwotKyAgfQotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZVhG b3JtOiBNYWpvciBvcGNvZGUgMzEgKFgtZm9ybSwgWE8tZm9ybSwgZXRjLikKLSsvLyBUaGlzIGlz IHRoZSBsYXJnZXN0IGRlY29kZXIgY292ZXJpbmcgbW9zdCBBTFUsIGluZGV4ZWQgbG9hZC9zdG9y ZSwgU1BSLAotKy8vIGFuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLgotKwotK3ZvaWQgU2ltdWxhdG9y OjpkZWNvZGVYRm9ybShTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IHhvID0g aW5zdHItPnhvVmFsdWUoKTsKLSsgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsg IHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgIHVpbnQzMl90IHJiID0gaW5zdHIt PnJiVmFsdWUoKTsKLSsgIGJvb2wgcmMgPSBpbnN0ci0+cmNCaXQoKTsKLSsKLSsgIC8vIE1hbnkg aW5zdHJ1Y3Rpb25zIHNoYXJlIG1ham9yIG9wY29kZSAzMS4gU3dpdGNoIG9uIGV4dGVuZGVkIG9w Y29kZS4KLSsgIC8vIEZvciBYTy1mb3JtIHdpdGggT0U9MSwgdGhlIHhvVmFsdWUoKSBpbmNsdWRl cyBiaXQgMTAsIHNvCi0rICAvLyBhZGRvICgyNjYgfCA1MTIgPSA3NzgpIGV0Yy4gYXJlIHNlcGFy YXRlIGNhc2VzLgotKwotKyAgLy8gRmlyc3QgY2hlY2sgZm9yIGlzZWwgd2hpY2ggdXNlcyBiaXRz IDEtNSA9IDE1IChYTyA9IDE1IGluIGJpdHMgMS4uNSkuCi0rICBpZiAoKHhvICYgMHgxRikgPT0g MTUpIHsKLSsgICAgLy8gaXNlbDogaWYgQ1JbQkNdIHRoZW4gUlQ9UkEgZWxzZSBSVD1SQgotKyAg ICAvLyBCQyBpcyBpbiBiaXRzIDYuLjEwICh0aGUgcmMgZmllbGQgcG9zaXRpb24pLgotKyAgICB1 aW50MzJfdCBiYyA9IGluc3RyLT5yY1ZhbHVlKCk7Ci0rICAgIHVpbnQzMl90IGNyRmllbGQgPSBi YyAvIDQ7Ci0rICAgIHVpbnQzMl90IGNyQml0ID0gYmMgJSA0OwotKyAgICB1aW50OF90IGNyRmll bGRWYWwgPSBnZXRDUkZpZWxkKGNyRmllbGQpOwotKyAgICAvLyBQUEMgQ1IgZmllbGQgYml0czog Yml0Mz1MVCg4KSwgYml0Mj1HVCg0KSwgYml0MT1FUSgyKSwgYml0MD1TTygxKQotKyAgICAvLyBC aXQgbnVtYmVyaW5nIHdpdGhpbiBmaWVsZDogMD1MVCwgMT1HVCwgMj1FUSwgMz1TTwotKyAgICBi b29sIGJpdFNldDsKLSsgICAgc3dpdGNoIChjckJpdCkgewotKyAgICAgIGNhc2UgMDogYml0U2V0 ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZExUKSAhPSAwOyBicmVhazsKLSsgICAgICBjYXNlIDE6 IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAg Y2FzZSAyOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7IGJyZWFrOwot KyAgICAgIGNhc2UgMzogYml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZFNPKSAhPSAwOyBi cmVhazsKLSsgICAgICBkZWZhdWx0OiBiaXRTZXQgPSBmYWxzZTsgYnJlYWs7Ci0rICAgIH0KLSsg ICAgaW50NjRfdCByYVZhbCA9IChyYSA9PSAwKSA/IDAgOiBnZXRSZWdpc3RlcihyYSk7Ci0rICAg IGludDY0X3QgcmJWYWwgPSBnZXRSZWdpc3RlcihyYik7Ci0rICAgIHNldFJlZ2lzdGVyKHJ0LCBi aXRTZXQgPyByYVZhbCA6IHJiVmFsKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgc3dpdGNo ICh4bykgewotKyAgICAvLyAtLS0gQXJpdGhtZXRpYyAtLS0KLSsgICAgY2FzZSAyNjY6IHsKLSsg ICAgICAvLyBhZGQKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJhKSArIGdl dFJlZ2lzdGVyKHJiKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKLSsgICAgICBp ZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgNzc4OiB7Ci0rICAgICAgLy8gYWRkbwotKyAgICAgIGludDY0X3QgcmFfdmFsID0gZ2V0UmVn aXN0ZXIocmEpOwotKyAgICAgIGludDY0X3QgcmJfdmFsID0gZ2V0UmVnaXN0ZXIocmIpOwotKyAg ICAgIGludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgcmJfdmFsOwotKyAgICAgIHNldFJlZ2lzdGVy KHJ0LCByZXN1bHQpOwotKyAgICAgIC8vIE92ZXJmbG93IGlmIHNpZ25zIG9mIGlucHV0cyBhcmUg c2FtZSBidXQgcmVzdWx0IHNpZ24gZGlmZmVycy4KLSsgICAgICBib29sIG92ID0gKChyYV92YWwg XiByZXN1bHQpICYgKHJiX3ZhbCBeIHJlc3VsdCkpIDwgMDsKLSsgICAgICBzZXRYRVJPVihvdik7 Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKyAgICBjYXNlIDEwOiB7Ci0rICAgICAgLy8gYWRkYwotKyAgICAgIHVpbnQ2NF90IHJhX3Zh bCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChn ZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIHJiX3Zh bDsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOwotKyAgICAgIHNldFhFUkNB KHJlc3VsdCA8IHJhX3ZhbCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkp OwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTM4OiB7Ci0rICAgICAgLy8gYWRk ZTogUlQgPSBSQSArIFJCICsgQ0EKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVn aXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIp KTsKLSsgICAgICB1aW50NjRfdCBjYSA9IGdldFhFUkNBKCkgPyAxVUxMIDogMFVMTDsKLSsgICAg ICB1aW50NjRfdCByZXN1bHQgPSByYV92YWwgKyByYl92YWwgKyBjYTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgSTY0KHJlc3VsdCkpOwotKyAgICAgIC8vIENhcnJ5LW91dDogd2hlbiBjYT09MCwg b25seSB0aGUgcmErcmIgd3JhcCBtYXR0ZXJzOyB3aGVuIGNhPT0xLAotKyAgICAgIC8vIGFuIGFk ZGl0aW9uYWwgd3JhcCBvY2N1cnMgaWZmIHJlc3VsdCA8PSByYV92YWwuCi0rICAgICAgYm9vbCBu ZXdDQSA9IGNhID8gKHJlc3VsdCA8PSByYV92YWwpIDogKHJlc3VsdCA8IHJhX3ZhbCk7Ci0rICAg ICAgc2V0WEVSQ0EobmV3Q0EpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKEk2NChyZXN1bHQp KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDIzNDogewotKyAgICAgIC8vIGFk ZG1lOiBSVCA9IFJBICsgQ0EgLSAxCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJl Z2lzdGVyKHJhKSk7Ci0rICAgICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgpID8gMVVMTCA6IDBV TEw7Ci0rICAgICAgdWludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgY2EgKyB+MFVMTDsgIC8vICsg Q0EgKyAoLTEpCi0rICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsgICAgICAv LyBDQSBpZiBjYXJyeSBvdXQgb2YgKFJBICsgQ0EgKyAweEZGRkZGRkZGRkZGRkZGRkYpCi0rICAg ICAgYm9vbCBuZXdDQSA9IChyYV92YWwgIT0gMCkgfHwgKGNhICE9IDApOwotKyAgICAgIHNldFhF UkNBKG5ld0NBKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMDI6IHsKLSsgICAgICAvLyBhZGR6ZTogUlQg PSBSQSArIENBCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7 Ci0rICAgICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgpID8gMVVMTCA6IDBVTEw7Ci0rICAgICAg dWludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgY2E7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2 NChyZXN1bHQpKTsKLSsgICAgICBzZXRYRVJDQShyZXN1bHQgPCByYV92YWwpOwotKyAgICAgIGlm IChyYykgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDQwOiB7Ci0rICAgICAgLy8gc3ViZjogUlQgPSBSQiAtIFJBCi0rICAgICAgaW50NjRf dCByZXN1bHQgPSBnZXRSZWdpc3RlcihyYikgLSBnZXRSZWdpc3RlcihyYSk7Ci0rICAgICAgc2V0 UmVnaXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDU1MjogewotKyAgICAgIC8vIHN1YmZv OiBSVCA9IFJCIC0gUkEsIHNldCBPVgotKyAgICAgIGludDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0 ZXIocmEpOwotKyAgICAgIGludDY0X3QgcmJfdmFsID0gZ2V0UmVnaXN0ZXIocmIpOwotKyAgICAg IGludDY0X3QgcmVzdWx0ID0gcmJfdmFsIC0gcmFfdmFsOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0 LCByZXN1bHQpOwotKyAgICAgIGJvb2wgb3YgPSAoKHJiX3ZhbCBeIHJhX3ZhbCkgJiAocmJfdmFs IF4gcmVzdWx0KSkgPCAwOwotKyAgICAgIHNldFhFUk9WKG92KTsKLSsgICAgICBpZiAocmMpIHVw ZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODogewot KyAgICAgIC8vIHN1YmZjOiBSVCA9IH5SQSArIFJCICsgMQotKyAgICAgIHVpbnQ2NF90IHJhX3Zh bCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChn ZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IH5yYV92YWwgKyByYl92 YWwgKyAxOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgLy8g Q0EgPSBubyBib3Jyb3cgPSAoUkIgPj0gUkEgdW5zaWduZWQpCi0rICAgICAgc2V0WEVSQ0EocmJf dmFsID49IHJhX3ZhbCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTM2OiB7Ci0rICAgICAgLy8gc3ViZmU6 IFJUID0gflJBICsgUkIgKyBDQQotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdp c3RlcihyYSkpOwotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikp OwotKyAgICAgIHVpbnQ2NF90IGNhID0gZ2V0WEVSQ0EoKSA/IDFVTEwgOiAwVUxMOwotKyAgICAg IHVpbnQ2NF90IHJlc3VsdCA9IH5yYV92YWwgKyByYl92YWwgKyBjYTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgSTY0KHJlc3VsdCkpOwotKyAgICAgIF9fdWludDEyOF90IHdpZGUgPSAoX191aW50 MTI4X3QpKH5yYV92YWwpICsgKF9fdWludDEyOF90KXJiX3ZhbCArIGNhOwotKyAgICAgIHNldFhF UkNBKCh3aWRlID4+IDY0KSAhPSAwKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChJNjQocmVz dWx0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMzI6IHsKLSsgICAgICAv LyBzdWJmemU6IFJUID0gflJBICsgQ0EKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0 UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCBjYSA9IGdldFhFUkNBKCkgPyAxVUxMIDog MFVMTDsKLSsgICAgICB1aW50NjRfdCByZXN1bHQgPSB+cmFfdmFsICsgY2E7Ci0rICAgICAgc2V0 UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsgICAgICBzZXRYRVJDQShjYSA+IHJhX3ZhbCk7 ICAvLyBDQSBpZiB+UkEgKyBDQSBvdmVyZmxvd3MKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChJ NjQocmVzdWx0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxMDQ6IHsKLSsg ICAgICAvLyBuZWc6IFJUID0gLVJBCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSAtZ2V0UmVnaXN0 ZXIocmEpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwotKyAgICAgIGlmIChyYykg dXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0t IE11bHRpcGx5IC0tLQotKyAgICBjYXNlIDIzMzogewotKyAgICAgIC8vIG11bGxkOiBSVCA9IFJB ICogUkIgKGxvdyA2NCBiaXRzKQotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIo cmEpICogZ2V0UmVnaXN0ZXIocmIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwot KyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgY2FzZSA3NDU6IHsKLSsgICAgICAvLyBtdWxsZG86IFJUID0gUkEgKiBSQiwgc2V0IE9W Ci0rICAgICAgaW50NjRfdCByYV92YWwgPSBnZXRSZWdpc3RlcihyYSk7Ci0rICAgICAgaW50NjRf dCByYl92YWwgPSBnZXRSZWdpc3RlcihyYik7Ci0rICAgICAgaW50NjRfdCByZXN1bHQgPSByYV92 YWwgKiByYl92YWw7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgLy8g T1YgaWYgaGlnaCBwYXJ0IG9mIGZ1bGwgMTI4LWJpdCBwcm9kdWN0IGlzIG5vdCBhbGwtc2lnbi4K LSsgICAgICBpbnQ2NF90IGhpID0gTXVsdGlwbHlIaWdoU2lnbmVkKHJhX3ZhbCwgcmJfdmFsKTsK LSsgICAgICBib29sIG92ID0gKGhpICE9IChyZXN1bHQgPj4gNjMpKTsKLSsgICAgICBzZXRYRVJP Vihvdik7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIDIzNTogewotKyAgICAgIC8vIG11bGx3OiBSVCA9IHNpZ25fZXh0 KFJBWzMyOjYzXSAqIFJCWzMyOjYzXSkKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90 KUkzMihnZXRSZWdpc3RlcihyYSkpICoKLSsgICAgICAgICAgICAgICAgICAgICAgIChpbnQ2NF90 KUkzMihnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwot KyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgY2FzZSA3NDc6IHsKLSsgICAgICAvLyBtdWxsd28KLSsgICAgICBpbnQ2NF90IHJhX3Zh bCA9IEkzMihnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIGludDY0X3QgcmJfdmFsID0gSTMyKGdl dFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgaW50NjRfdCByZXN1bHQgPSByYV92YWwgKiByYl92YWw7 Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgYm9vbCBvdiA9IChyZXN1 bHQgIT0gKGludDY0X3QpSTMyKHJlc3VsdCkpOwotKyAgICAgIHNldFhFUk9WKG92KTsKLSsgICAg ICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgNzM6IHsKLSsgICAgICAvLyBtdWxoZDogUlQgPSBoaWdoIDY0IGJpdHMgb2YgUkEgKiBS QiAoc2lnbmVkKQotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBNdWx0aXBseUhpZ2hTaWduZWQoZ2V0 UmVnaXN0ZXIocmEpLCBnZXRSZWdpc3RlcihyYikpKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNS MChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgOTog ewotKyAgICAgIC8vIG11bGhkdTogUlQgPSBoaWdoIDY0IGJpdHMgb2YgUkEgKiBSQiAodW5zaWdu ZWQpCi0rICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChNdWx0aXBseUhpZ2hVbnNpZ25lZChVNjQo Z2V0UmVnaXN0ZXIocmEpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFU2NChnZXRSZWdpc3RlcihyYikpKSkpOwotKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA3 NTogewotKyAgICAgIC8vIG11bGh3OiBSVCA9IGhpZ2ggMzIgYml0cyBvZiAoUkFbMzI6NjNdICog UkJbMzI6NjNdKSwgc2lnbmVkCi0rICAgICAgaW50NjRfdCByZXN1bHQgPQotKyAgICAgICAgICAo aW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmEpKSAqIChpbnQ2NF90KUkzMihnZXRSZWdpc3Rlcihy YikpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQgPj4gMzIpOwotKyAgICAgIGlmIChy YykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsg ICAgY2FzZSAxMTogewotKyAgICAgIC8vIG11bGh3dTogUlQgPSBoaWdoIDMyIGJpdHMsIHVuc2ln bmVkCi0rICAgICAgdWludDY0X3QgcmVzdWx0ID0KLSsgICAgICAgICAgKHVpbnQ2NF90KVUzMihn ZXRSZWdpc3RlcihyYSkpICogKHVpbnQ2NF90KVUzMihnZXRSZWdpc3RlcihyYikpOwotKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0ID4+IDMyKSk7Ci0rICAgICAgaWYgKHJjKSB1cGRh dGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAv LyAtLS0gRGl2aWRlIC0tLQotKyAgICBjYXNlIDQ4OTogewotKyAgICAgIC8vIGRpdmQ6IFJUID0g UkEgLyBSQiAoc2lnbmVkLCA2NC1iaXQpCi0rICAgICAgaW50NjRfdCByYV92YWwgPSBnZXRSZWdp c3RlcihyYSk7Ci0rICAgICAgaW50NjRfdCByYl92YWwgPSBnZXRSZWdpc3RlcihyYik7Ci0rICAg ICAgaWYgKHJiX3ZhbCA9PSAwIHx8IChyYV92YWwgPT0gSU5UNjRfTUlOICYmIHJiX3ZhbCA9PSAt MSkpIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAg ICAgICAgc2V0UmVnaXN0ZXIocnQsIHJhX3ZhbCAvIHJiX3ZhbCk7Ci0rICAgICAgfQotKyAgICAg IGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSAxMDAxOiB7Ci0rICAgICAgLy8gZGl2ZG8KLSsgICAgICBpbnQ2NF90IHJh X3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsKLSsgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lz dGVyKHJiKTsKLSsgICAgICBib29sIG92ID0gKHJiX3ZhbCA9PSAwKSB8fCAocmFfdmFsID09IElO VDY0X01JTiAmJiByYl92YWwgPT0gLTEpOwotKyAgICAgIGlmIChvdikgewotKyAgICAgICAgc2V0 UmVnaXN0ZXIocnQsIDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3Rlcihy dCwgcmFfdmFsIC8gcmJfdmFsKTsKLSsgICAgICB9Ci0rICAgICAgc2V0WEVST1Yob3YpOwotKyAg ICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIH0KLSsgICAgY2FzZSA0NTc6IHsKLSsgICAgICAvLyBkaXZkdTogdW5zaWduZWQgNjQtYml0 IGRpdmlkZQotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOwot KyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIGlm IChyYl92YWwgPT0gMCkgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOwotKyAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJhX3ZhbCAvIHJiX3ZhbCkpOwot KyAgICAgIH0KLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgOTY5OiB7Ci0rICAgICAgLy8gZGl2ZHVvCi0r ICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgdWlu dDY0X3QgcmJfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgYm9vbCBvdiA9IChy Yl92YWwgPT0gMCk7Ci0rICAgICAgaWYgKG92KSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwg MCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmFfdmFs IC8gcmJfdmFsKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFhFUk9WKG92KTsKLSsgICAgICBpZiAo cmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgNDkxOiB7Ci0rICAgICAgLy8gZGl2dzogc2lnbmVkIDMyLWJpdCBkaXZpZGUKLSsg ICAgICBpbnQzMl90IHJhX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIGludDMy X3QgcmJfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgaWYgKHJiX3ZhbCA9PSAw IHx8IChyYV92YWwgPT0gSU5UMzJfTUlOICYmIHJiX3ZhbCA9PSAtMSkpIHsKLSsgICAgICAgIHNl dFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc2V0UmVnaXN0ZXIo cnQsIChpbnQ2NF90KShyYV92YWwgLyByYl92YWwpKTsKLSsgICAgICB9Ci0rICAgICAgaWYgKHJj KSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDEwMDM6IHsKLSsgICAgICAvLyBkaXZ3bwotKyAgICAgIGludDMyX3QgcmFfdmFsID0g STMyKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgaW50MzJfdCByYl92YWwgPSBJMzIoZ2V0UmVn aXN0ZXIocmIpKTsKLSsgICAgICBib29sIG92ID0gKHJiX3ZhbCA9PSAwKSB8fCAocmFfdmFsID09 IElOVDMyX01JTiAmJiByYl92YWwgPT0gLTEpOwotKyAgICAgIGlmIChvdikgewotKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3Rl cihydCwgKGludDY0X3QpKHJhX3ZhbCAvIHJiX3ZhbCkpOwotKyAgICAgIH0KLSsgICAgICBzZXRY RVJPVihvdik7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ1OTogewotKyAgICAgIC8vIGRpdnd1OiB1 bnNpZ25lZCAzMi1iaXQgZGl2aWRlCi0rICAgICAgdWludDMyX3QgcmFfdmFsID0gVTMyKGdldFJl Z2lzdGVyKHJhKSk7Ci0rICAgICAgdWludDMyX3QgcmJfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJi KSk7Ci0rICAgICAgaWYgKHJiX3ZhbCA9PSAwKSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwg MCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCko cmFfdmFsIC8gcmJfdmFsKSk7Ci0rICAgICAgfQotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdl dFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA5NzE6IHsK LSsgICAgICAvLyBkaXZ3dW8KLSsgICAgICB1aW50MzJfdCByYV92YWwgPSBVMzIoZ2V0UmVnaXN0 ZXIocmEpKTsKLSsgICAgICB1aW50MzJfdCByYl92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocmIpKTsK LSsgICAgICBib29sIG92ID0gKHJiX3ZhbCA9PSAwKTsKLSsgICAgICBpZiAob3YpIHsKLSsgICAg ICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc2V0UmVn aXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwgLyByYl92YWwpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0WEVST1Yob3YpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFBPV0VSOSBtb2R1bG8gKElT QSAzLjApIC0tLQotKyAgICAvLyBSZXN1bHQgb2YgInVuZGVmaW5lZCIgZGl2aXNpb24gKHJiX3Zh bCA9PSAwLCBvciBzaWduZWQgSU5UX01JTiAvIC0xKQotKyAgICAvLyBpcyBpbXBsZW1lbnRhdGlv bi1kZWZpbmVkIHBlciBQb3dlciBJU0E7IG1hdGNoaW5nIHRoZSBkaXZYIGJlaGF2aW91cgotKyAg ICAvLyBhYm92ZSwgd2UgeWllbGQgMCBpbiB0aG9zZSBjYXNlcy4gUmMgaGFzIG5vIGVuY29kaW5n IGZvciB0aGVzZSBvcHMuCi0rICAgIGNhc2UgNzc5OiB7Ci0rICAgICAgLy8gbW9kc3c6IFJUID0g UkEgJSBSQiAoc2lnbmVkLCAzMi1iaXQpCi0rICAgICAgaW50MzJfdCByYV92YWwgPSBJMzIoZ2V0 UmVnaXN0ZXIocmEpKTsKLSsgICAgICBpbnQzMl90IHJiX3ZhbCA9IEkzMihnZXRSZWdpc3Rlcihy YikpOwotKyAgICAgIGlmIChyYl92YWwgPT0gMCB8fCAocmFfdmFsID09IElOVDMyX01JTiAmJiBy Yl92YWwgPT0gLTEpKSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7Ci0rICAgICAgfSBl bHNlIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsICUgcmJfdmFs KSk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjY3OiB7Ci0r ICAgICAgLy8gbW9kdXc6IFJUID0gUkEgJSBSQiAodW5zaWduZWQsIDMyLWJpdCkKLSsgICAgICB1 aW50MzJfdCByYV92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50MzJfdCBy Yl92YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBpZiAocmJfdmFsID09IDApIHsK LSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwgJSByYl92YWwpKTsKLSsgICAgICB9Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA3Nzc6IHsKLSsgICAgICAvLyBtb2RzZDog UlQgPSBSQSAlIFJCIChzaWduZWQsIDY0LWJpdCkKLSsgICAgICBpbnQ2NF90IHJhX3ZhbCA9IGdl dFJlZ2lzdGVyKHJhKTsKLSsgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lzdGVyKHJiKTsK LSsgICAgICBpZiAocmJfdmFsID09IDAgfHwgKHJhX3ZhbCA9PSBJTlQ2NF9NSU4gJiYgcmJfdmFs ID09IC0xKSkgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOwotKyAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgcmFfdmFsICUgcmJfdmFsKTsKLSsgICAgICB9Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyNjU6IHsKLSsgICAgICAvLyBtb2R1ZDog UlQgPSBSQSAlIFJCICh1bnNpZ25lZCwgNjQtYml0KQotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9 IFU2NChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRS ZWdpc3RlcihyYikpOwotKyAgICAgIGlmIChyYl92YWwgPT0gMCkgewotKyAgICAgICAgc2V0UmVn aXN0ZXIocnQsIDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwg STY0KHJhX3ZhbCAlIHJiX3ZhbCkpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQot KwotKyAgICAvLyAtLS0gTG9naWNhbCAtLS0KLSsgICAgY2FzZSAyODogewotKyAgICAgIC8vIGFu ZDogUkEgPSBSUyAmIFJCCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkg JiBnZXRSZWdpc3RlcihyYik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAg ICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDYwOiB7Ci0rICAgICAgLy8gYW5kYzogUkEgPSBSUyAmIH5SQgotKyAgICAgIGludDY0 X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpICYgfmdldFJlZ2lzdGVyKHJiKTsKLSsgICAgICBz ZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQp OwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDQ0OiB7Ci0rICAgICAgLy8gb3I6 IFJBID0gUlMgfCBSQgotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpIHwg Z2V0UmVnaXN0ZXIocmIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAg IGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAg Y2FzZSA0MTI6IHsKLSsgICAgICAvLyBvcmM6IFJBID0gUlMgfCB+UkIKLSsgICAgICBpbnQ2NF90 IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJ0KSB8IH5nZXRSZWdpc3RlcihyYik7Ci0rICAgICAgc2V0 UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDMxNjogewotKyAgICAgIC8vIHhvcjog UkEgPSBSUyBeIFJCCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkgXiBn ZXRSZWdpc3RlcihyYik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAg aWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIDQ3NjogewotKyAgICAgIC8vIG5hbmQ6IFJBID0gfihSUyAmIFJCKQotKyAgICAgIGludDY0 X3QgcmVzdWx0ID0gfihnZXRSZWdpc3RlcihydCkgJiBnZXRSZWdpc3RlcihyYikpOwotKyAgICAg IHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3Vs dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxMjQ6IHsKLSsgICAgICAvLyBu b3I6IFJBID0gfihSUyB8IFJCKQotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gfihnZXRSZWdpc3Rl cihydCkgfCBnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQp OwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSAyODQ6IHsKLSsgICAgICAvLyBlcXY6IFJBID0gfihSUyBeIFJCKQotKyAg ICAgIGludDY0X3QgcmVzdWx0ID0gfihnZXRSZWdpc3RlcihydCkgXiBnZXRSZWdpc3RlcihyYikp OwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFNoaWZ0 cyAtLS0KLSsgICAgY2FzZSAyNzogewotKyAgICAgIC8vIHNsZDogUkEgPSBSUyA8PCBSQls1ODo2 M10gaWYgUkJbNTddPT0wLCBlbHNlIFJBPTAKLSsgICAgICB1aW50NjRfdCBzaGlmdCA9IFU2NChn ZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHVpbnQ2NF90IHJzX3ZhbCA9IFU2NChnZXRSZWdpc3Rl cihydCkpOwotKyAgICAgIGludDY0X3QgcmVzdWx0OwotKyAgICAgIGlmIChzaGlmdCAmIDB4NDAp IHsKLSsgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHJlc3Vs dCA9IEk2NChyc192YWwgPDwgKHNoaWZ0ICYgMHgzRikpOwotKyAgICAgIH0KLSsgICAgICBzZXRS ZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjQ6IHsKLSsgICAgICAvLyBzbHc6IFJB ID0gUlNbMzI6NjNdIDw8IFJCWzU5OjYzXSBpZiBSQls1OF09PTAsIGVsc2UgUkE9MCAoMzItYml0 KQotKyAgICAgIHVpbnQzMl90IHNoaWZ0ID0gVTMyKGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAg dWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgdWludDMyX3Qg cmVzdWx0OwotKyAgICAgIGlmIChzaGlmdCAmIDB4MjApIHsKLSsgICAgICAgIHJlc3VsdCA9IDA7 Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA8PCAoc2hpZnQgJiAw eDFGKTsKLSsgICAgICB9Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIChpbnQ2NF90KShpbnQzMl90 KXJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDUzOTogewotKyAgICAgIC8vIHNyZDogUkEg PSBSUyA+PiBSQls1ODo2M10gaWYgUkJbNTddPT0wLCBlbHNlIFJBPTAgKGxvZ2ljYWwpCi0rICAg ICAgdWludDY0X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICB1aW50NjRf dCByc192YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBpbnQ2NF90IHJlc3VsdDsK LSsgICAgICBpZiAoc2hpZnQgJiAweDQwKSB7Ci0rICAgICAgICByZXN1bHQgPSAwOwotKyAgICAg IH0gZWxzZSB7Ci0rICAgICAgICByZXN1bHQgPSBJNjQocnNfdmFsID4+IChzaGlmdCAmIDB4M0Yp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYg KHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDUzNjogewotKyAgICAgIC8vIHNydzogUkEgPSBSU1szMjo2M10gPj4gUkJbNTk6NjNdIGxvZ2lj YWwgKDMyLWJpdCkKLSsgICAgICB1aW50MzJfdCBzaGlmdCA9IFUzMihnZXRSZWdpc3RlcihyYikp OwotKyAgICAgIHVpbnQzMl90IHJzX3ZhbCA9IFUzMihnZXRSZWdpc3RlcihydCkpOwotKyAgICAg IHVpbnQzMl90IHJlc3VsdDsKLSsgICAgICBpZiAoc2hpZnQgJiAweDIwKSB7Ci0rICAgICAgICBy ZXN1bHQgPSAwOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICByZXN1bHQgPSByc192YWwgPj4g KHNoaWZ0ICYgMHgxRik7Ci0rICAgICAgfQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAoaW50NjRf dCkoaW50MzJfdClyZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVy KHJhKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA3OTQ6IHsKLSsgICAgICAv LyBzcmFkOiBSQSA9IFJTID4+IFJCWzU4OjYzXSBhcml0aG1ldGljICg2NC1iaXQpLCBzZXQgQ0EK LSsgICAgICB1aW50NjRfdCBzaGlmdCA9IFU2NChnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIGlu dDY0X3QgcnNfdmFsID0gZ2V0UmVnaXN0ZXIocnQpOwotKyAgICAgIGludDY0X3QgcmVzdWx0Owot KyAgICAgIGJvb2wgY2Fycnk7Ci0rICAgICAgaWYgKHNoaWZ0ICYgMHg0MCkgewotKyAgICAgICAg cmVzdWx0ID0gcnNfdmFsID4+IDYzOyAgLy8gYWxsIHNpZ24gYml0cwotKyAgICAgICAgY2Fycnkg PSAocnNfdmFsIDwgMCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHVpbnQzMl90IHNoID0g c2hpZnQgJiAweDNGOwotKyAgICAgICAgcmVzdWx0ID0gcnNfdmFsID4+IHNoOwotKyAgICAgICAg Ly8gQ0EgPSAxIGlmIFJTIGlzIG5lZ2F0aXZlIGFuZCBhbnkgMS1iaXRzIHdlcmUgc2hpZnRlZCBv dXQuCi0rICAgICAgICBjYXJyeSA9IChyc192YWwgPCAwKSAmJiAoKHJzX3ZhbCAmICgoMVVMTCA8 PCBzaCkgLSAxKSkgIT0gMCk7Ci0rICAgICAgfQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1 bHQpOwotKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChy ZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNzkyOiB7Ci0rICAgICAg Ly8gc3JhdzogUkEgPSBSU1szMjo2M10gPj4gUkJbNTk6NjNdIGFyaXRobWV0aWMgKDMyLWJpdCks IHNldCBDQQotKyAgICAgIHVpbnQzMl90IHNoaWZ0ID0gVTMyKGdldFJlZ2lzdGVyKHJiKSk7Ci0r ICAgICAgaW50MzJfdCByc192YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBpbnQz Ml90IHJlc3VsdDsKLSsgICAgICBib29sIGNhcnJ5OwotKyAgICAgIGlmIChzaGlmdCAmIDB4MjAp IHsKLSsgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+PiAzMTsKLSsgICAgICAgIGNhcnJ5ID0gKHJz X3ZhbCA8IDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICB1aW50MzJfdCBzaCA9IHNoaWZ0 ICYgMHgxRjsKLSsgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+PiBzaDsKLSsgICAgICAgIGNhcnJ5 ID0gKHJzX3ZhbCA8IDApICYmICgocnNfdmFsICYgKCgxVSA8PCBzaCkgLSAxKSkgIT0gMCk7Ci0r ICAgICAgfQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAoaW50NjRfdClyZXN1bHQpOwotKyAgICAg IHNldFhFUkNBKGNhcnJ5KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3Rlcihy YSkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODI2OgotKyAgICBjYXNlIDgy NzogewotKyAgICAgIC8vIHNyYWRpIFJBLCBSUywgU0g6IFJBID0gRVhUUyhSUykgPj4gc2ggYXJp dGhtZXRpYyAoNjQtYml0KSwgc2V0IENBLgotKyAgICAgIC8vIFhTLWZvcm0sIFhPPTQxMyAoOS1i aXQsIGJpdHMgMjEtMjkpLCBzaFs1XSBhdCBiaXQgMzAsIFJjIGF0IGJpdCAzMS4KLSsgICAgICAv LyBPdXIgeG9WYWx1ZSgpIGV4dHJhY3RzIGJpdHMgMTA6MSAoMTAgYml0cykKLSsgICAgICAvLyB3 aGljaCB5aWVsZHMgNDEzKjIgKyBzaFs1XSA9IDgyNiAoc2hbNV09MCkgb3IgODI3IChzaFs1XT0x KS4KLSsgICAgICAvLyBzaFswOjRdIGF0IGluc3RydWN0aW9uIGJpdHMgMTU6MTEgKD0gcmFWYWx1 ZSBmaWVsZCBwb3NpdGlvbiwgYnV0Ci0rICAgICAgLy8gZm9yIHRoaXMgWFMtZm9ybSB0aGV5J3Jl IHRoZSBTSFswOjRdIHN1YmZpZWxkKS4KLSsgICAgICB1aW50MzJfdCBzaCA9IGluc3RyLT5iaXRz KDE1LCAxMSkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KTsKLSsgICAgICBpbnQ2NF90IHJzX3ZhbCA9 IGdldFJlZ2lzdGVyKHJ0KTsKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IChzaCA9PSAwKSA/IHJz X3ZhbCA6IChyc192YWwgPj4gc2gpOwotKyAgICAgIC8vIENBIDo9IHJzX3ZhbCA8IDAgJiYgYW55 IGJpdHMgc2hpZnRlZCBvdXQgYXJlIDEuCi0rICAgICAgYm9vbCBjYXJyeSA9IChyc192YWwgPCAw KSAmJiBzaCA+IDAgJiYKLSsgICAgICAgICAgICAgICAgICAgKChVNjQocnNfdmFsKSAmICgoMVVM TCA8PCBzaCkgLSAxKSkgIT0gMCk7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0r ICAgICAgc2V0WEVSQ0EoY2FycnkpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4MjQ6IHsKLSsgICAgICAvLyBzcmF3 aTogUkEgPSBSU1szMjo2M10gPj4gU0ggYXJpdGhtZXRpYyAoMzItYml0KSwgc2V0IENBCi0rICAg ICAgdWludDMyX3Qgc2ggPSBpbnN0ci0+Yml0cygxNSwgMTEpOwotKyAgICAgIGludDMyX3QgcnNf dmFsID0gSTMyKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgaW50MzJfdCByZXN1bHQgPSByc192 YWwgPj4gc2g7Ci0rICAgICAgYm9vbCBjYXJyeSA9IChyc192YWwgPCAwKSAmJiBzaCA+IDAgJiYK LSsgICAgICAgICAgICAgICAgICAgKChVMzIocnNfdmFsKSAmICgoMVUgPDwgc2gpIC0gMSkpICE9 IDApOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAoaW50NjRfdClyZXN1bHQpOwotKyAgICAgIHNl dFhFUkNBKGNhcnJ5KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkp OwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBFeHRlbmQgLyBjb3VudCAt LS0KLSsgICAgY2FzZSA5NTQ6IHsKLSsgICAgICAvLyBleHRzYjogUkEgPSBzaWduX2V4dChSU1s1 Njo2M10pCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSAoaW50NjRfdCkoaW50OF90KShnZXRSZWdp c3RlcihydCkgJiAweEZGKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAg ICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgOTIyOiB7Ci0rICAgICAgLy8gZXh0c2g6IFJBID0gc2lnbl9leHQoUlNbNDg6NjNdKQot KyAgICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0X3QpKGludDE2X3QpKGdldFJlZ2lzdGVyKHJ0 KSAmIDB4RkZGRik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYg KHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDk4NjogewotKyAgICAgIC8vIGV4dHN3OiBSQSA9IHNpZ25fZXh0KFJTWzMyOjYzXSkKLSsgICAg ICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KShpbnQzMl90KShnZXRSZWdpc3RlcihydCkgJiAw eEZGRkZGRkZGKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAo cmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2Ug NTg6IHsKLSsgICAgICAvLyBjbnRsemQ6IFJBID0gY291bnQgbGVhZGluZyB6ZXJvcyBvZiBSUyAo NjQtYml0KQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBDb3VudExlYWRpbmdaZXJvczY0KFU2NChn ZXRSZWdpc3RlcihydCkpKSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIo cmEpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI2OiB7Ci0rICAgICAgLy8g Y250bHp3OiBSQSA9IGNvdW50IGxlYWRpbmcgemVyb3Mgb2YgUlNbMzI6NjNdICgzMi1iaXQpCi0r ICAgICAgc2V0UmVnaXN0ZXIocmEsIENvdW50TGVhZGluZ1plcm9zMzIoVTMyKGdldFJlZ2lzdGVy KHJ0KSkpKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNTcwOiB7Ci0rICAgICAgLy8gY250dHpkCi0r ICAgICAgc2V0UmVnaXN0ZXIocmEsIENvdW50VHJhaWxpbmdaZXJvczY0KFU2NChnZXRSZWdpc3Rl cihydCkpKSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDUzODogewotKyAgICAgIC8vIGNudHR6dwot KyAgICAgIHNldFJlZ2lzdGVyKHJhLCBDb3VudFRyYWlsaW5nWmVyb3MzMihVMzIoZ2V0UmVnaXN0 ZXIocnQpKSkpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJhKSk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MDY6IHsKLSsgICAgICAvLyBwb3BjbnRk Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIFBvcENvdW50NjQoVTY0KGdldFJlZ2lzdGVyKHJ0KSkp KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDM3ODogewotKyAgICAgIC8vIHBv cGNudHc6IHBvcGNvdW50IGVhY2ggMzItYml0IGhhbGYgaW5kZXBlbmRlbnRseSwgc3VtIGluIGVh Y2ggaGFsZgotKyAgICAgIHVpbnQ2NF90IHZhbCA9IFU2NChnZXRSZWdpc3RlcihydCkpOwotKyAg ICAgIHVpbnQzMl90IGxvID0gUG9wQ291bnQzMihVMzIodmFsKSk7Ci0rICAgICAgdWludDMyX3Qg aGkgPSBQb3BDb3VudDMyKFUzMih2YWwgPj4gMzIpKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwg STY0KCgodWludDY0X3QpaGkgPDwgMzIpIHwgbG8pKTsKLSsgICAgICBicmVhazsKLSsgICAgfQot KyAgICBjYXNlIDEyMjogewotKyAgICAgIC8vIHBvcGNudGI6IHBvcGNvdW50IGVhY2ggYnl0ZSBp bmRlcGVuZGVudGx5Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIEk2NChQb3BDb3VudFBlckJ5dGUo VTY0KGdldFJlZ2lzdGVyKHJ0KSkpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2Fz ZSAxODc6IHsKLSsgICAgICAvLyBicmQgKFBPV0VSMTApOiBSQSA9IGJ5dGUtcmV2ZXJzZShSUykg ZnVsbCA2NC1iaXQgZG91Ymxld29yZC4KLSsgICAgICBzZXRSZWdpc3RlcihyYSwgSTY0KF9fYnVp bHRpbl9ic3dhcDY0KFU2NChnZXRSZWdpc3RlcihydCkpKSkpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgMjE5OiB7Ci0rICAgICAgLy8gYnJoIChQT1dFUjEwKTogYnl0ZS1yZXZl cnNlIGVhY2ggb2YgdGhlIDQgaGFsZndvcmRzIGluIFJTLgotKyAgICAgIHVpbnQ2NF90IHYgPSBV NjQoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICB1aW50NjRfdCBvdXQgPSAoKHYgJiAweEZGMDBG RjAwRkYwMEZGMDBVTEwpID4+IDgpIHwKLSsgICAgICAgICAgICAgICAgICAgICAoKHYgJiAweDAw RkYwMEZGMDBGRjAwRkZVTEwpIDw8IDgpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBJNjQob3V0 KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxNTU6IHsKLSsgICAgICAvLyBi cncgKFBPV0VSMTApOiBieXRlLXJldmVyc2UgZWFjaCBvZiB0aGUgMiB3b3JkcyBpbiBSUy4KLSsg ICAgICB1aW50NjRfdCB2ID0gVTY0KGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgdWludDY0X3Qg b3V0ID0gKCh1aW50NjRfdClfX2J1aWx0aW5fYnN3YXAzMigodWludDMyX3QpKHYgPj4gMzIpKSA8 PCAzMikgfAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClfX2J1aWx0aW5fYnN3YXAz MigodWludDMyX3Qpdik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIEk2NChvdXQpKTsKLSsgICAg ICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gQ29tcGFyZSAoWC1mb3JtKSAtLS0KLSsg ICAgY2FzZSAwOiB7Ci0rICAgICAgLy8gY21wIChjbXB3L2NtcGQpOiBzaWduZWQgY29tcGFyZQot KyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKLSsgICAgICBib29sIGwgPSBp bnN0ci0+bEJpdCgpOwotKyAgICAgIGlmIChsKSB7Ci0rICAgICAgICBzZXRDUkZpZWxkQ21wKGJm LCBnZXRSZWdpc3RlcihyYSksIGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsg ICAgICAgIHNldENSRmllbGRDbXAoYmYsIChpbnQ2NF90KUkzMihnZXRSZWdpc3RlcihyYSkpLAot KyAgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmIpKSk7Ci0r ICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzI6IHsKLSsgICAgICAv LyBjbXBsIChjbXBsdy9jbXBsZCk6IHVuc2lnbmVkIGNvbXBhcmUKLSsgICAgICB1aW50MzJfdCBi ZiA9IGluc3RyLT5iZlZhbHVlKCk7Ci0rICAgICAgYm9vbCBsID0gaW5zdHItPmxCaXQoKTsKLSsg ICAgICBpZiAobCkgewotKyAgICAgICAgc2V0Q1JGaWVsZENtcFUoYmYsIFU2NChnZXRSZWdpc3Rl cihyYSkpLCBVNjQoZ2V0UmVnaXN0ZXIocmIpKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAg IHNldENSRmllbGRDbXBVKGJmLCAodWludDY0X3QpVTMyKGdldFJlZ2lzdGVyKHJhKSksCi0rICAg ICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpVTMyKGdldFJlZ2lzdGVyKHJiKSkpOwotKyAg ICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gVHJhcCAtLS0KLSsg ICAgY2FzZSA0OiB7Ci0rICAgICAgLy8gdHc6IFRyYXAgV29yZC4gVGhlIEpJVCB1c2VzIHRoaXMg Zm9yIGRlYnVnZ2luZyAvIHRhZ2dpbmcuCi0rICAgICAgLy8gSW4gdGhlIHNpbXVsYXRvciB3ZSBq dXN0IHRyZWF0IGl0IGFzIGEgTk9QICh0aGUgSklUIHVzZXMgdGFnZ2VkCi0rICAgICAgLy8gdHJh cCB3b3JkcyB0aGF0IGFyZSBuZXZlciBhY3R1YWxseSByZWFjaGVkIGR1cmluZyBub3JtYWwgZXhl Y3V0aW9uLAotKyAgICAgIC8vIHRoZXkgc2VydmUgYXMgbWV0YWRhdGEgZm9yIHRoZSBwYXRjaGVy KS4KLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gU1BSIC0tLQotKyAgICBj YXNlIDMzOTogewotKyAgICAgIC8vIG1mc3ByOiBSVCA9IFNQUgotKyAgICAgIC8vIFNQUiBlbmNv ZGluZzogc3ByWzQ6MF0gYXQgYml0cyAxNi4uMjAsIHNwcls5OjVdIGF0IGJpdHMgMTEuLjE1Ci0r ICAgICAgdWludDMyX3Qgc3ByX2xvID0gaW5zdHItPnJhVmFsdWUoKTsgIC8vIGJpdHMgMTYuLjIw Ci0rICAgICAgdWludDMyX3Qgc3ByX2hpID0gaW5zdHItPnJiVmFsdWUoKTsgIC8vIGJpdHMgMTEu LjE1Ci0rICAgICAgdWludDMyX3Qgc3ByID0gKHNwcl9sbykgfCAoc3ByX2hpIDw8IDUpOwotKyAg ICAgIHN3aXRjaCAoc3ByKSB7Ci0rICAgICAgICBjYXNlIDg6ICAvLyBMUgotKyAgICAgICAgICBz ZXRSZWdpc3RlcihydCwgZ2V0TFIoKSk7Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgY2Fz ZSA5OiAgLy8gQ1RSCi0rICAgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCBnZXRDVFIoKSk7Ci0rICAg ICAgICAgIGJyZWFrOwotKyAgICAgICAgY2FzZSAxOiAgLy8gWEVSCi0rICAgICAgICAgIHNldFJl Z2lzdGVyKHJ0LCBJNjQoZ2V0WEVSKCkpKTsKLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICBk ZWZhdWx0OgotKyAgICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigibWZzcHI6IHVuaGFu ZGxlZCBTUFIgJXUiLCBzcHIpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDQ2NzogewotKyAgICAgIC8vIG10c3ByOiBTUFIgPSBSUwotKyAgICAgIHVpbnQzMl90 IHNwcl9sbyA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICAgICAgdWludDMyX3Qgc3ByX2hpID0gaW5z dHItPnJiVmFsdWUoKTsKLSsgICAgICB1aW50MzJfdCBzcHIgPSAoc3ByX2xvKSB8IChzcHJfaGkg PDwgNSk7Ci0rICAgICAgaW50NjRfdCB2YWwgPSBnZXRSZWdpc3RlcihydCk7Ci0rICAgICAgc3dp dGNoIChzcHIpIHsKLSsgICAgICAgIGNhc2UgODogIC8vIExSCi0rICAgICAgICAgIHNldExSKHZh bCk7Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgY2FzZSA5OiAgLy8gQ1RSCi0rICAgICAg ICAgIHNldENUUih2YWwpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIGNhc2UgMTogIC8v IFhFUgotKyAgICAgICAgICBzZXRYRVIoVTY0KHZhbCkpOwotKyAgICAgICAgICBicmVhazsKLSsg ICAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJtdHNw cjogdW5oYW5kbGVkIFNQUiAldSIsIHNwcik7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgMTk6IHsKLSsgICAgICAvLyBtZm9jcmY6IHJlYWQgb25lIENSIGZpZWxk IHNlbGVjdGVkIGJ5IHRoZSBGWE0gYml0bWFzayBpbnRvIFJULgotKyAgICAgIC8vIChQbGFpbiBt ZmNyIHNoYXJlcyB0aGlzIFhPIHdpdGggRlhNPTA7IHdlIG1vZGVsIGJvdGggYnkgcmVhZGluZwot KyAgICAgIC8vIHRoZSBmdWxsIENSIOKAlCB0aGUgSklUIG9ubHkgZW1pdHMgbWZvY3JmIGFuZCB0 aGUgYml0cyBvdXRzaWRlIHRoZQotKyAgICAgIC8vIHNlbGVjdGVkIGZpZWxkIGFyZSBzcGVjJ2Qg InVuZGVmaW5lZCIsIHNvIHJlYWRpbmcgdGhlIGZ1bGwgQ1IgaXMKLSsgICAgICAvLyBhIHZhbGlk IGltcGxlbWVudGF0aW9uLikKLSsgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpZ2V0Q1Io KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxNDQ6IHsKLSsgICAgICAvLyBt dGNyZjogbW92ZSB0byBDUiBmaWVsZHMKLSsgICAgICAvLyBGWE0gZmllbGQgaXMgaW4gYml0cyAx Mi4uMTkuCi0rICAgICAgdWludDMyX3QgZnhtID0gaW5zdHItPmJpdHMoMTksIDEyKTsKLSsgICAg ICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICB1aW50MzJf dCBjciA9IGdldENSKCk7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsg ICAgICAgIGlmIChmeG0gJiAoMHg4MCA+PiBpKSkgewotKyAgICAgICAgICB1aW50MzJfdCBzaGlm dCA9IDQgKiAoNyAtIGkpOwotKyAgICAgICAgICBjciA9IChjciAmIH4oMHhGdSA8PCBzaGlmdCkp IHwgKHJzX3ZhbCAmICgweEZ1IDw8IHNoaWZ0KSk7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAg ICAgIHNldENSKGNyKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDU3Njogewot KyAgICAgIC8vIG1jcnhyeDogbW92ZSBYRVJbT1YsT1YzMixDQSxDQTMyXSB0byBDUiBmaWVsZCBC RgotKyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKLSsgICAgICB1aW50OF90 IGZpZWxkID0gMDsKLSsgICAgICBpZiAoZ2V0WEVST1YoKSkgZmllbGQgfD0gMHg4OwotKyAgICAg IC8vIE9WMzIgYXQgYml0IDE5IG9mIFhFUgotKyAgICAgIGlmICgoZ2V0WEVSKCkgPj4ga1hFUk9W MzJCaXQpICYgMSkgZmllbGQgfD0gMHg0OwotKyAgICAgIGlmIChnZXRYRVJDQSgpKSBmaWVsZCB8 PSAweDI7Ci0rICAgICAgaWYgKChnZXRYRVIoKSA+PiBrWEVSQ0EzMkJpdCkgJiAxKSBmaWVsZCB8 PSAweDE7Ci0rICAgICAgc2V0Q1JGaWVsZChiZiwgZmllbGQpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgMzg0OgotKyAgICBjYXNlIDQxNjogewotKyAgICAgIC8vIFBPV0VSMTAg c2V0YmMvc2V0YmNyOiBSVCA9IChDUltCSV09PU4pID8gMSA6IDAKLSsgICAgICAvLyBCSSBhdCBi aXRzIDExLi4xNTsgeG89Mzg0IChzZXRiYywgTj0xKSwgeG89NDE2IChzZXRiY3IsIE49MCkuCi0r ICAgICAgdWludDMyX3QgYmkgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgIHVpbnQzMl90IGNy RmllbGQgPSBiaSAvIDQ7Ci0rICAgICAgdWludDMyX3QgY3JCaXQgPSBiaSAlIDQ7Ci0rICAgICAg dWludDhfdCBjckZpZWxkVmFsID0gZ2V0Q1JGaWVsZChjckZpZWxkKTsKLSsgICAgICBib29sIGJp dFNldDsKLSsgICAgICBzd2l0Y2ggKGNyQml0KSB7Ci0rICAgICAgICBjYXNlIDA6IGJpdFNldCA9 IChjckZpZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAgICBjYXNlIDE6 IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAg ICBjYXNlIDI6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRFUSkgIT0gMDsgYnJlYWs7 Ci0rICAgICAgICBjYXNlIDM6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRTTykgIT0g MDsgYnJlYWs7Ci0rICAgICAgICBkZWZhdWx0OiBiaXRTZXQgPSBmYWxzZTsgYnJlYWs7Ci0rICAg ICAgfQotKyAgICAgIGJvb2wgd2FudCA9ICh4byA9PSAzODQpID8gYml0U2V0IDogIWJpdFNldDsK LSsgICAgICBzZXRSZWdpc3RlcihydCwgd2FudCA/IDEgOiAwKTsKLSsgICAgICBicmVhazsKLSsg ICAgfQotKwotKyAgICAvLyAtLS0gSW5kZXhlZCBsb2FkcyAtLS0KLSsgICAgY2FzZSAyMTogewot KyAgICAgIC8vIGxkeDogUlQgPSBbUkF8MCArIFJCXSwgOCBieXRlcwotKyAgICAgIHVpbnQ2NF90 IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlYWRE VyhlYSwgaW5zdHIpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDUzOiB7Ci0r ICAgICAgLy8gbGR1eDogUlQgPSBbUkEgKyBSQl0sIHVwZGF0ZSBSQQotKyAgICAgIHVpbnQ2NF90 IGVhID0gWEZvcm1FQVVwZGF0ZSh0aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IHJlYWREVyhlYSwgaW5zdHIpKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgZWEpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjM6IHsKLSsgICAgICAvLyBsd3p4OiBSVCA9IHpl cm9fZXh0KFtSQXwwICsgUkJdLCA0IGJ5dGVzKQotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1F QSh0aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkV1UoZWEsIGlu c3RyKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzQxOiB7Ci0rICAgICAg Ly8gbHdheDogUlQgPSBzaWduX2V4dChbUkF8MCArIFJCXSwgNCBieXRlcykKLSsgICAgICB1aW50 NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCAo aW50NjRfdClyZWFkVyhlYSwgaW5zdHIpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIDg3OiB7Ci0rICAgICAgLy8gbGJ6eAotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0 aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkQlUoZWEpKSk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyNzk6IHsKLSsgICAgICAvLyBsaHp4Ci0r ICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgVTY0KHJlYWRIVShlYSwgaW5zdHIpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgY2FzZSAzNDM6IHsKLSsgICAgICAvLyBsaGF4Ci0rICAgICAgdWludDY0X3QgZWEgPSBY Rm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpcmVh ZEgoZWEsIGluc3RyKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MzU6IHsK LSsgICAgICAvLyBsZnN4OiBsb2FkIGZsb2F0IHNpbmdsZSBpbmRleGVkLCB3aWRlbiB0byBkb3Vi bGUgKE5hTi1wcmVzZXJ2aW5nKQotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBp bnN0cik7Ci0rICAgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSB7Ci0rICAgICAg ICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKTsKLSsgICAgICAgIHNl dEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKHZhbCkpOwot KyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDU5OTogewotKyAgICAg IC8vIGxmZHg6IGxvYWQgZmxvYXQgZG91YmxlIGluZGV4ZWQKLSsgICAgICB1aW50NjRfdCBlYSA9 IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBy ZWFkRChlYSwgaW5zdHIpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDg1NTog ewotKyAgICAgIC8vIGxmaXdheDogbG9hZCBmbG9hdCBhcyBpbnRlZ2VyIHdvcmQgYWxnZWJyYWlj Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBpbnQz Ml90IHZhbCA9IHJlYWRXKGVhLCBpbnN0cik7Ci0rICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIChp bnQ2NF90KXZhbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4ODc6IHsKLSsg ICAgICAvLyBsZml3eng6IGxvYWQgZmxvYXQgYXMgaW50ZWdlciB3b3JkIHplcm8KLSsgICAgICB1 aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHVpbnQzMl90IHZhbCA9 IHJlYWRXVShlYSwgaW5zdHIpOwotKyAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCAoaW50NjRfdCko dWludDY0X3QpdmFsKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gSW5k ZXhlZCBzdG9yZXMgLS0tCi0rICAgIGNhc2UgMTQ5OiB7Ci0rICAgICAgLy8gc3RkeAotKyAgICAg IHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgd3JpdGVEVyhlYSwg Z2V0UmVnaXN0ZXIocnQpLCBpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2Fz ZSAxNTE6IHsKLSsgICAgICAvLyBzdHd4Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKLSsgICAgICB3cml0ZVcoZWEsIEkzMihnZXRSZWdpc3RlcihydCkpLCBpbnN0 cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMTU6IHsKLSsgICAgICAvLyBz dGJ4Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICB3 cml0ZUIoZWEsICh1aW50OF90KShnZXRSZWdpc3RlcihydCkgJiAweEZGKSk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0MDc6IHsKLSsgICAgICAvLyBzdGh4Ci0rICAgICAgdWlu dDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICB3cml0ZUgoZWEsIFUxNihn ZXRSZWdpc3RlcihydCkpLCBpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2Fz ZSA2NjM6IHsKLSsgICAgICAvLyBzdGZzeDogc3RvcmUgZmxvYXQgc2luZ2xlIGluZGV4ZWQgKE5h Ti1wcmVzZXJ2aW5nKQotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7 Ci0rICAgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSB7Ci0rICAgICAgICBmbG9h dCBmdmFsID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihnZXRGcHVSZWdpc3RlckRvdWJsZShy dCkpOwotKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihlYSkgPSBmdmFsOwotKyAg ICAgICAgTExCaXRfID0gZmFsc2U7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgNzI3OiB7Ci0rICAgICAgLy8gc3RmZHg6IHN0b3JlIGZsb2F0IGRvdWJsZSBpbmRl eGVkCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICB3 cml0ZUQoZWEsIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJ0KSwgaW5zdHIpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBCeXRlLXJldmVyc2VkIHN0b3JlcyAtLS0KLSsgICAg Y2FzZSA2NjI6IHsKLSsgICAgICAvLyBzdHdicngKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3Jt RUEodGhpcywgaW5zdHIpOwotKyAgICAgIHVpbnQzMl90IHZhbCA9IFUzMihnZXRSZWdpc3Rlcihy dCkpOwotKyAgICAgIHdyaXRlVyhlYSwgKGludDMyX3QpX19idWlsdGluX2Jzd2FwMzIodmFsKSwg aW5zdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBBdG9taWMgbG9h ZC9zdG9yZSAtLS0KLSsgICAgLy8KLSsgICAgLy8gTG9hZC1yZXNlcnZlIGFuZCBzdG9yZS1jb25k aXRpb25hbC4gU3ViLXdvcmQgdmFyaWFudHMKLSsgICAgLy8gKGxiYXJ4L2xoYXJ4L3N0YmN4Li9z dGhjeC4pIHdlcmUgYWRkZWQgaW4gSVNBIHYyLjA2IChQT1dFUjcrKS4KLSsgICAgLy8gV29yZC9k b3VibGV3b3JkIHZhcmlhbnRzIChsd2FyeC9zdHdjeC4vbGRhcngvc3RkY3guKSBnbyBiYWNrCi0r ICAgIC8vIHRvIHRoZSBiYXNlIElTQS4KLSsgICAgY2FzZSA1MjogewotKyAgICAgIC8vIGxiYXJ4 IFJULCBSQSwgUkIsIEVICi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3Ry KTsKLSsgICAgICB1aW50OF90IHZhbCA9IGxvYWRMaW5rZWRCKGVhLCBpbnN0cik7Ci0rICAgICAg c2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KXZhbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsg ICAgY2FzZSAxMTY6IHsKLSsgICAgICAvLyBsaGFyeCBSVCwgUkEsIFJCLCBFSAotKyAgICAgIHVp bnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgdWludDE2X3QgdmFsID0g bG9hZExpbmtlZEgoZWEsIGluc3RyKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3Qp dmFsKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDY5NDogewotKyAgICAgIC8v IHN0YmN4LiBSUywgUkEsIFJCOiBhbHdheXMgUmM9MS4KLSsgICAgICB1aW50NjRfdCBlYSA9IFhG b3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHVpbnQ4X3QgdmFsID0gdWludDhfdChnZXRSZWdp c3RlcihydCkpOwotKyAgICAgIGludCByZXN1bHQgPSBzdG9yZUNvbmRpdGlvbmFsQihlYSwgdmFs LCBpbnN0cik7Ci0rICAgICAgaWYgKHJlc3VsdCkgewotKyAgICAgICAgc2V0Q1JGaWVsZCgwLCBr Q1JGaWVsZEVRIHwgKGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKSk7Ci0rICAgICAgfSBlbHNlIHsK LSsgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRTTyAqIGdldFhFUlNPKCkpOwotKyAgICAg IH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDcyNjogewotKyAgICAgIC8vIHN0 aGN4LiBSUywgUkEsIFJCOiBhbHdheXMgUmM9MS4KLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3Jt RUEodGhpcywgaW5zdHIpOwotKyAgICAgIHVpbnQxNl90IHZhbCA9IHVpbnQxNl90KGdldFJlZ2lz dGVyKHJ0KSk7Ci0rICAgICAgaW50IHJlc3VsdCA9IHN0b3JlQ29uZGl0aW9uYWxIKGVhLCB2YWws IGluc3RyKTsKLSsgICAgICBpZiAocmVzdWx0KSB7Ci0rICAgICAgICBzZXRDUkZpZWxkKDAsIGtD UkZpZWxkRVEgfCAoa0NSRmllbGRTTyAqIGdldFhFUlNPKCkpKTsKLSsgICAgICB9IGVsc2Ugewot KyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSk7Ci0rICAgICAg fQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjA6IHsKLSsgICAgICAvLyBsd2Fy eAotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgaW50 MzJfdCB2YWwgPSBsb2FkTGlua2VkVyhlYSwgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0 LCAoaW50NjRfdCl2YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTUwOiB7 Ci0rICAgICAgLy8gc3R3Y3guCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGlu c3RyKTsKLSsgICAgICBpbnQzMl90IHZhbCA9IEkzMihnZXRSZWdpc3RlcihydCkpOwotKyAgICAg IGludCByZXN1bHQgPSBzdG9yZUNvbmRpdGlvbmFsVyhlYSwgdmFsLCBpbnN0cik7Ci0rICAgICAg Ly8gc3R3Y3guIGFsd2F5cyB1cGRhdGVzIENSMDogRVEgaWYgc3RvcmUgc3VjY2VlZGVkLCBlbHNl IGNsZWFyLgotKyAgICAgIGlmIChyZXN1bHQpIHsKLSsgICAgICAgIHNldENSRmllbGQoMCwga0NS RmllbGRFUSB8IChrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSkpOwotKyAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKTsKLSsgICAgICB9 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4NDogewotKyAgICAgIC8vIGxkYXJ4 Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBpbnQ2 NF90IHZhbCA9IGxvYWRMaW5rZWREKGVhLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IHZhbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMTQ6IHsKLSsgICAgICAv LyBzdGRjeC4KLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAg ICAgIGludDY0X3QgdmFsID0gZ2V0UmVnaXN0ZXIocnQpOwotKyAgICAgIGludCByZXN1bHQgPSBz dG9yZUNvbmRpdGlvbmFsRChlYSwgdmFsLCBpbnN0cik7Ci0rICAgICAgaWYgKHJlc3VsdCkgewot KyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZEVRIHwgKGtDUkZpZWxkU08gKiBnZXRYRVJT TygpKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRT TyAqIGdldFhFUlNPKCkpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAg ICAvLyAtLS0gU3luY2hyb25pemF0aW9uIC0tLQotKyAgICBjYXNlIDU5ODoKLSsgICAgICAvLyBz eW5jIC8gbHdzeW5jIC8gcHRlc3luYzogbm8tb3AgaW4gc2ltdWxhdG9yCi0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2UgODU0OgotKyAgICAgIC8vIGVpZWlvOiBuby1vcCBpbiBzaW11bGF0b3IKLSsg ICAgICBicmVhazsKLSsKLSsgICAgLy8gLS0tIEdQUiA8LT4gVlNSIG1vdmUgKG1ham9yIG9wY29k ZSAzMSwgWFgxLWZvcm0pIC0tLQotKyAgICAvLwotKyAgICAvLyBUd28gc3ViLWVuY29kaW5nczoK LSsgICAgLy8gICBtdHZzciogWFQsUkF7LFJCfTogWFgxRm9ybSDigJQgWFQgYXQgYml0cyAyNToy MSAoNSkgKyBUWCBhdCBiaXQgMCAoMSk7Ci0rICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFJB IGF0IGJpdHMgMjA6MTY7IFJCIChpZiBhbnkpIGF0IGJpdHMgMTU6MTEuCi0rICAgIC8vICAgbWZ2 c3IqIFJBLFhTOiAgICAgIFhYMUZvcm1NZnZzciDigJQgWFMgYXQgYml0cyAyNToyMSAoNSkgKyBT WCBhdCBiaXQgMCAoMSk7Ci0rICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFJBIChHUFIgZGVz dCkgYXQgYml0cyAyMDoxNi4KLSsgICAgLy8KLSsgICAgLy8gVGhlIG9yaWdpbmFsIGRlY29kZXIg dHJlYXRlZCAicnNWYWx1ZSgpIiAoYml0cyAyNToyMSA9IFZTUiBmaWVsZCkgYXMgYQotKyAgICAv LyBHUFIgaW5kZXgg4oCUIGRvdWJseSB3cm9uZzogdGhlIEdQUiBzaWRlIGxpdmVzIGF0IGJpdHMg MjA6MTYgKD0gcmFWYWx1ZSgpKQotKyAgICAvLyBhbmQgdGhlIFZTUiBzaWRlIGlzIDYgYml0cyAo NS1iaXQgZmllbGQgKyBleHRlbnNpb24gYml0IGF0IGJpdCAwKS4gRml4ZWQKLSsgICAgLy8gaGVy ZSBhbmQgZXh0ZW5kZWQgZm9yIHRoZSBmdWxsIFZTUiBuYW1lc3BhY2UgKDAtNjMpLgotKyAgICAv LyBUaGUgSVNBIG5hbWVzIGVhY2ggZmllbGQgaW4gQkUuICJYVC5EVzAiIGlzIHRoZSBCRSBkb3Vi bGV3b3JkIHdoaWNoIG9uCi0rICAgIC8vIFBQQzY0TEUgcmVnaXN0ZXIgc3RvcmFnZSBsaXZlcyBh dCBMRSBieXRlcyA4LTE1IChvdXIgYnl0ZXNbXSBpcyBMRS1uYXR1cmFsOgotKyAgICAvLyBieXRl c1swXSA9IGxvd2VzdCBhZGRyZXNzKS4gV2l0aCBgbXR2c3JkIC8gbWZ2c3JkIC8gbXR2c3JkZCAv IG1mdnNybGQKLSsgICAgLy8gLyBzdHh2eGA6IG10dnNyZCBvZiAweDExMjIzMzQ0NTU2Njc3ODgg cHJvZHVjZXMgYDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCi0rICAgIC8vIDg4IDc3IDY2IDU1IDQ0 IDMzIDIyIDExYCBpbiBtZW1vcnkgKExFIGJ5dGVzIDgtMTUgaG9sZCB0aGUgR1BSIGJpdHMgd2l0 aAotKyAgICAvLyBMU0IgYXQgYnl0ZSA4KS4gTWF0Y2hpbmcgc2VtYW50aWNzIGhlcmUgbWVhbnMg dGhlIHNpbSByZXNwZWN0cwotKyAgICAvLyB0aGUgZnVsbCBQb3dlciBJU0EsIG5vdCBhIHNlbGYt Y29uc2lzdGVudCBMRS1yZXZlcnNlZAotKyAgICAvLyBjb252ZW50aW9uLgotKyAgICBjYXNlIDUx OiB7Ci0rICAgICAgLy8gbWZ2c3JkIFJBLCBYUzogR1BSW1JBXSA9IFhTLkRXMCA9IExFIGJ5dGVz IDguLjE1LgotKyAgICAgIGludCB4cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5i aXQoMCkgPDwgNSkpOyAgLy8gVCArIFNYKFRYKQotKyAgICAgIHVpbnQ4X3QgYnl0ZXNbMTZdOwot KyAgICAgIGdldFZTUjEyOCh4cywgYnl0ZXMpOwotKyAgICAgIGludDY0X3QgdmFsOwotKyAgICAg IG1lbWNweSgmdmFsLCBieXRlcyArIDgsIDgpOwotKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5y YVZhbHVlKCksIHZhbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMTE6IHsK LSsgICAgICAvLyBtdHZzcndhIFhULCBSQTogWFQuRFcwID0gc2lnbl9leHRfNjQoUkFbMzI6NjNd KTsgWFQuRFcxID0gMC4KLSsgICAgICAvLyBQT1dFUjgrIChJU0EgMi4wNykuIENvbWJpbmVzIGV4 dHN3ICsgbXR2c3JkLiBMRSBsYXlvdXQ6IGJ5dGVzCi0rICAgICAgLy8gOC0xNSDihpAgc2lnbi1l eHRlbmRlZCBsb3cgMzIgb2YgUkE7IGJ5dGVzIDAtNyDihpAgMC4KLSsgICAgICBpbnQgeHQgPSBp bnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50 OF90IGJ5dGVzWzE2XTsKLSsgICAgICBpbnQ2NF90IHZhbCA9IChpbnQ2NF90KShpbnQzMl90KWdl dFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCkpOwotKyAgICAgIG1lbXNldChieXRlcywgMCwgOCk7 Ci0rICAgICAgbWVtY3B5KGJ5dGVzICsgOCwgJnZhbCwgOCk7Ci0rICAgICAgc2V0VlNSMTI4KHh0 LCBieXRlcyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAxNzk6IHsKLSsgICAg ICAvLyBtdHZzcmQgWFQsIFJBOiBYVC5EVzAgPSBSQTsgWFQuRFcxID0gMC4KLSsgICAgICAvLyBM RSBsYXlvdXQ6IGJ5dGVzIDgtMTUg4oaQIFJBLCBieXRlcyAwLTcg4oaQIDAuCi0rICAgICAgaW50 IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAg ICAgdWludDhfdCBieXRlc1sxNl07Ci0rICAgICAgaW50NjRfdCB2YWwgPSBnZXRSZWdpc3Rlcihp bnN0ci0+cmFWYWx1ZSgpKTsKLSsgICAgICBtZW1zZXQoYnl0ZXMsIDAsIDgpOwotKyAgICAgIG1l bWNweShieXRlcyArIDgsICZ2YWwsIDgpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjQzOiB7Ci0rICAgICAgLy8gbXR2c3J3 eiBYVCwgUkE6IFhULkRXMCA9IHplcm9fZXh0KFJBWzMyOjYzXSk7IFhULkRXMSA9IDAuCi0rICAg ICAgLy8gVGhlIDMyLWJpdCB2YWx1ZSBsaXZlcyBpbiB0aGUgbG93IDMyIGJpdHMgb2YgRFcwID0g QkUgd29yZCAxLAotKyAgICAgIC8vIHdoaWNoIG9uIExFIHN0b3JhZ2UgaXMgTEUgYnl0ZXMgOC4u MTEgKExFIHdvcmQgMik7IExFIGJ5dGVzCi0rICAgICAgLy8gMTIuLjE1ID0gMCAodXBwZXIgaGFs ZiBvZiBEVzAgPSBCRSB3b3JkIDAgPSB6ZXJvLWV4dGVuZGVkKS4KLSsgICAgICBpbnQgeHQgPSBp bnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50 OF90IGJ5dGVzWzE2XTsKLSsgICAgICB1aW50MzJfdCBsbyA9IFUzMihnZXRSZWdpc3RlcihpbnN0 ci0+cmFWYWx1ZSgpKSk7Ci0rICAgICAgbWVtc2V0KGJ5dGVzLCAwLCAxNik7Ci0rICAgICAgYnl0 ZXNbOF0gID0gKHVpbnQ4X3QpKGxvKTsKLSsgICAgICBieXRlc1s5XSAgPSAodWludDhfdCkobG8g Pj4gOCk7Ci0rICAgICAgYnl0ZXNbMTBdID0gKHVpbnQ4X3QpKGxvID4+IDE2KTsKLSsgICAgICBi eXRlc1sxMV0gPSAodWludDhfdCkobG8gPj4gMjQpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnl0 ZXMpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzA3OiB7Ci0rICAgICAgLy8g bWZ2c3JsZCBSQSwgWFM6IEdQUltSQV0gPSBYUy5EVzEgPSBMRSBieXRlcyAwLi43LgotKyAgICAg IC8vIFBPV0VSOS4KLSsgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0 ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50OF90IGJ5dGVzWzE2XTsKLSsgICAgICBnZXRW U1IxMjgoeHMsIGJ5dGVzKTsKLSsgICAgICBpbnQ2NF90IHZhbDsKLSsgICAgICBtZW1jcHkoJnZh bCwgYnl0ZXMsIDgpOwotKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIHZhbCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0MDM6IHsKLSsgICAgICAvLyBtdHZz cndzIFhULCBSQSAoUE9XRVI5KTogc3BsYXQgbG93IDMyIGJpdHMgb2YgUkEgaW50byBhbGwgZm91 cgotKyAgICAgIC8vIHdvcmQgZWxlbWVudHMgb2YgWFQuIFRoZSBzYW1lIDMyLWJpdCB2YWx1ZSBh cHBlYXJzIGluIGxhbmVzIDAuLjMsCi0rICAgICAgLy8gc28gdGhlIGJ5dGUgbGF5b3V0IGlzIGlk ZW50aWNhbCBpbiBMRSBhbmQgQkUg4oCUCi0rICAgICAgLy8gYnl0ZXMgMC4uMTUgPSBsbyB8IGxv IHwgbG8gfCBsby4KLSsgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0 ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50OF90IGJ5dGVzWzE2XTsKLSsgICAgICB1aW50 MzJfdCBsbyA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKSk7Ci0rICAgICAgdWlu dDY0X3QgdmFsID0gKCh1aW50NjRfdClsbyA8PCAzMikgfCBsbzsKLSsgICAgICBtZW1jcHkoYnl0 ZXMsICZ2YWwsIDgpOwotKyAgICAgIG1lbWNweShieXRlcyArIDgsICZ2YWwsIDgpOwotKyAgICAg IHNldFZTUjEyOCh4dCwgYnl0ZXMpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2Ug NDM1OiB7Ci0rICAgICAgLy8gbXR2c3JkZCBYVCwgUkEsIFJCOiBYVC5EVzAgPSBSQTsgWFQuRFcx ID0gUkIuIFBPV0VSOS4KLSsgICAgICAvLyBMRTogYnl0ZXMgOC0xNSDihpAgUkEsIGJ5dGVzIDAt NyDihpAgUkIuCi0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHIt PmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBieXRlc1sxNl07Ci0rICAgICAgaW50NjRf dCBkdzAgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKTsKLSsgICAgICBpbnQ2NF90IGR3 MSA9IGdldFJlZ2lzdGVyKGluc3RyLT5yYlZhbHVlKCkpOwotKyAgICAgIG1lbWNweShieXRlcywg ICAgICZkdzEsIDgpOwotKyAgICAgIG1lbWNweShieXRlcyArIDgsICZkdzAsIDgpOwotKyAgICAg IHNldFZTUjEyOCh4dCwgYnl0ZXMpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8v IC0tLSBWTVggdmVjdG9yIG1lbW9yeSAobWFqb3Igb3Bjb2RlIDMxKSAtLS0KLSsgICAgLy8KLSsg ICAgLy8gbHZ4IC8gc3R2eCAvIGx2eGwgLyBzdHZ4bC4KLSsgICAgLy8gICBFQSA9IChSQXwwKSAr IFJCOyBFQSA9IEVBICYgfjB4RiAoYWxpZ25tZW50KQotKyAgICAvLyAgIGx2eDogIFZSVFswOjEy N10gPC0gTUVNKEVBLCAxNikgICAgICAgYnl0ZXNbMF0gPSAqKEVBKzApCi0rICAgIC8vICAgc3R2 eDogTUVNKEVBLCAxNikgPC0gVlJTWzA6MTI3XSAgICAgICAqKEVBKzApID0gYnl0ZXNbMF0KLSsg ICAgLy8gbHZ4bCAvIHN0dnhsIGFyZSBpZGVudGljYWwgaW4gZWZmZWN0IHRvIGx2eCAvIHN0dngg KHRoZSAibCIgZm9ybQotKyAgICAvLyBoaW50cyAibGVhc3QgcmVjZW50bHkgdXNlZCI7IHNlbWFu dGljYWxseSBpbmRpc3Rpbmd1aXNoYWJsZSkuCi0rICAgIGNhc2UgMTAzOiB7Ci0rICAgICAgLy8g bHZ4OiBWUlQgPSBNRU0oRUEgJiB+MHhGLCAxNiBieXRlcykKLSsgICAgICB1aW50NjRfdCBlYSA9 IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVpbnQ2NF90KDB4Rik7Ci0rICAgICAgaWYgKGhhbmRs ZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBtZW1jcHkoVlJyZWdpc3RlcnNf W3J0XSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oZWEpLCAxNik7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMzE6IHsKLSsgICAgICAvLyBzdHZ4OiBNRU0oRUEgJiB+ MHhGLCAxNiBieXRlcykgPSBWUlMKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywg aW5zdHIpICYgfnVpbnQ2NF90KDB4Rik7Ci0rICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChl YSwgMTYpKSBicmVhazsKLSsgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZWEp LCBWUnJlZ2lzdGVyc19bcnRdLCAxNik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2Fz ZSAzNTk6IHsKLSsgICAgICAvLyBsdnhsOiBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIHRvIGx2eAot KyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cikgJiB+dWludDY0X3QoMHhG KTsKLSsgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikpIGJyZWFrOwotKyAgICAg IG1lbWNweShWUnJlZ2lzdGVyc19bcnRdLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihl YSksIDE2KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ4NzogewotKyAgICAg IC8vIHN0dnhsOiBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIHRvIHN0dngKLSsgICAgICB1aW50NjRf dCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVpbnQ2NF90KDB4Rik7Ci0rICAgICAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBtZW1jcHkocmVpbnRl cnByZXRfY2FzdDx2b2lkKj4oZWEpLCBWUnJlZ2lzdGVyc19bcnRdLCAxNik7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFZTWCB2ZWN0b3IgbWVtb3J5IGluZGV4ZWQgKG1h am9yIG9wY29kZSAzMSkgLS0tCi0rICAgIC8vCi0rICAgIC8vIFRoZXNlIG9wcyB0YWtlIGEgNi1i aXQgVlNSIHJlZ2lzdGVyLAotKyAgICAvLyBlbmNvZGVkIGFzIDUtYml0IFQvUyArIDEtYml0IFRY L1NYIGV4dGVuc2lvbiBhdCBpbnN0cnVjdGlvbiBMU0IKLSsgICAgLy8gYml0IDAgKD0gb3VyIGlu c3RyLT5iaXQoMCkpLiBFQSA9IChSQXwwKSArIFJCLiAxNi1ieXRlIGFjY2VzcywKLSsgICAgLy8g bm90IGZvcmNlZC1hbGlnbmVkIChoYXJkd2FyZSBtYXkgaGFuZGxlIG1pc2FsaWduZWQgdmlhIHN1 Yi1hY2Nlc3MKLSsgICAgLy8gb3IgYWxpZ25tZW50IGludGVycnVwdCBwZXIgaW1wbCkuCi0rICAg IC8vCi0rICAgIC8vIEJ5dGUtb3JkZXIgbm90ZTogbHh2eC9zdHh2eCBwZXJmb3JtIGEgbmF0dXJh bCAxNi1ieXRlIExFCi0rICAgIC8vIG1lbWNweS4gbHh2ZDJ4L3N0eHZkMnggb24gcmVhbCBQUEM2 NCBMRSBoYXJkd2FyZSBsb2FkL3N0b3JlCi0rICAgIC8vIGRvdWJsZXdvcmRzIGluIEJFLXBhaXIg b3JkZXIg4oCUIGkuZS4gbHh2ZDJ4IHBsYWNlcyBtZW1vcnkgYnl0ZXMKLSsgICAgLy8gMC03IGlu IHRoZSByZWdpc3RlcidzIEJFLURXMCAoPSBMRSBieXRlcyA4LTE1KSBhbmQgYnl0ZXMgOC0xNQot KyAgICAvLyBpbiBCRS1EVzEgKD0gTEUgYnl0ZXMgMC03KS4gVGhlIEpJVCBicmFja2V0cyBldmVy eSB3YXNtIFNJTUQKLSsgICAgLy8gbG9hZC9zdG9yZSB3aXRoIGEgY29tcGVuc2F0aW5nIHh4cGVy bWRpIERNPTIgc28gdGhlIG5ldCBlZmZlY3QKLSsgICAgLy8gaXMgYSBuYXR1cmFsIExFIGJ5dGUg b3JkZXIuIFRoZSBjb25zdGFudCBwb29sIGVtaXRzIHRoZSBzYW1lCi0rICAgIC8vIGx4dmQyeCAr IHh4cGVybWRpIHNlcXVlbmNlIChwZXIgUGF0Y2hDb25zdGFudFBvb2xMb2FkKSBidXQKLSsgICAg Ly8gYXNzdW1lcyB0aGUgaGFyZHdhcmUgc2VtYW50aWNzLCBub3QgYSBwbGFpbiBtZW1jcHkuIFNv IHRoZSBzaW0KLSsgICAgLy8gbXVzdCBtYXRjaCByZWFsLWhhcmR3YXJlIGx4dmQyeC9zdHh2ZDJ4 IHNlbWFudGljcyBpbmNsdWRpbmcgdGhlCi0rICAgIC8vIEJFLURXIGJ5dGUgb3JkZXIg4oCUIG90 aGVyd2lzZSB0aGUgcG9zdC1sb2FkIHh4cGVybWRpIHVuc3dhcHMKLSsgICAgLy8gYnl0ZXMgdGhh dCB3ZXJlIG5ldmVyIHN3YXBwZWQsIGFuZCBjb25zdGFudC1wb29sIFNpbWQxMjggbG9hZHMKLSsg ICAgLy8gKGUuZy4gc2h1ZmZsZSBtYXNrcykgY29tZSBvdXQgd2l0aCBoYWx2ZXMgdHJhbnNwb3Nl ZC4KLSsgICAgY2FzZSAyNjg6IHsKLSsgICAgICAvLyBseHZ4OiBYVCA9IE1FTSgoUkF8MCkrUkIs IDE2KQotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAg aWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBpbnQgeHQgPSBp bnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50 OF90IGJ1ZlsxNl07Ci0rICAgICAgbWVtY3B5KGJ1ZiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2 b2lkKj4oZWEpLCAxNik7Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBidWYpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rICAgIGNhc2UgMzk2OiB7Ci0rICAgICAgLy8gc3R4dng6IE1FTSgoUkF8MCkr UkIsIDE2KSA9IFhTCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsK LSsgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikpIGJyZWFrOwotKyAgICAgIGlu dCB4cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAg ICAgIHVpbnQ4X3QgYnVmWzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeHMsIGJ1Zik7Ci0rICAgICAg bWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVhKSwgYnVmLCAxNik7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4MTM6IHsKLSsgICAgICAvLyBseHNpaHp4IFhULCBSQSwg UkI6IFA5IChJU0EgMy4wKS4gTG9hZCBoYWxmd29yZCB0byBWU1IgJiB6ZXJvLAotKyAgICAgIC8v IGluZGV4ZWQuIE1FTShFQSwgMikgKExFLW5hdHVyYWwgaGFsZndvcmQpIGlzIHBsYWNlZCBpbiBk d1swXQotKyAgICAgIC8vIGxvdyAxNiBiaXRzOyB0aGUgcmVzdCBvZiB0aGUgVlNSIGlzIHplcm9l ZC4gSW4gc2ltIExFLWJ5dGUKLSsgICAgICAvLyBzdG9yYWdlLCB0aGF0IGlzIGJ5dGVzWzguLjld IChsb3cgYnl0ZSBhdCBieXRlc1s4XSkuCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKLSsgICAgICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAyKSkgYnJlYWs7 Ci0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8 PCA1KSk7Ci0rICAgICAgdWludDE2X3QgaGFsZndvcmQgPSByZWFkSChlYSwgaW5zdHIpOwotKyAg ICAgIHVpbnQ4X3QgYnVmWzE2XTsKLSsgICAgICBtZW1zZXQoYnVmLCAwLCAxNik7Ci0rICAgICAg YnVmWzhdID0gKHVpbnQ4X3QpKGhhbGZ3b3JkICYgMHhGRik7Ci0rICAgICAgYnVmWzldID0gKHVp bnQ4X3QpKChoYWxmd29yZCA+PiA4KSAmIDB4RkYpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnVm KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDk0MTogewotKyAgICAgIC8vIHN0 eHNpaHggWFMsIFJBLCBSQjogUDkgKElTQSAzLjApLiBTdG9yZSBoYWxmd29yZCBmcm9tIFZTUiwK LSsgICAgICAvLyBpbmRleGVkLiBkd1swXSBsb3cgMTYgYml0cyAoc2ltIGJ5dGVzWzguLjldIGlu IGhvc3QtTEUgb3JkZXIpCi0rICAgICAgLy8gYXJlIHdyaXR0ZW4gYXMgYSBoYWxmd29yZCBhdCBN RU0oRUEsIDIpLgotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0r ICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMikpIGJyZWFrOwotKyAgICAgIGludCB4 cyA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAg IHVpbnQ4X3QgYnVmWzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeHMsIGJ1Zik7Ci0rICAgICAgdWlu dDE2X3QgaGFsZndvcmQgPQotKyAgICAgICAgICAodWludDE2X3QpYnVmWzhdIHwgKCh1aW50MTZf dClidWZbOV0gPDwgOCk7Ci0rICAgICAgd3JpdGVIKGVhLCBoYWxmd29yZCwgaW5zdHIpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODQ0OiB7Ci0rICAgICAgLy8gbHh2ZDJ4OiBY VCA9IE1FTSgoUkF8MCkrUkIsIDE2KSB3aXRoIEJFLURXIGJ5dGUgb3JkZXJpbmcuCi0rICAgICAg Ly8gTWVtb3J5IGJ5dGVzIDAtNyBsYW5kIGluIEJFLURXMCAoPSBMRSBieXRlcyA4LTE1KTsgbWVt b3J5Ci0rICAgICAgLy8gYnl0ZXMgOC0xNSBsYW5kIGluIEJFLURXMSAoPSBMRSBieXRlcyAwLTcp LgotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBpbnQgeHQgPSBpbnQo aW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50OF90 IG1lbVsxNl0sIGJ1ZlsxNl07Ci0rICAgICAgbWVtY3B5KG1lbSwgcmVpbnRlcnByZXRfY2FzdDxj b25zdCB2b2lkKj4oZWEpLCAxNik7Ci0rICAgICAgbWVtY3B5KGJ1ZiwgbWVtICsgOCwgOCk7Ci0r ICAgICAgbWVtY3B5KGJ1ZiArIDgsIG1lbSwgOCk7Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBidWYp OwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgOTcyOiB7Ci0rICAgICAgLy8gc3R4 dmQyeDogTUVNKChSQXwwKStSQiwgMTYpID0gWFMgd2l0aCBCRS1EVyBieXRlIG9yZGVyaW5nLgot KyAgICAgIC8vIEludmVyc2Ugb2YgbHh2ZDJ4OiByZWdpc3RlciBMRSBieXRlcyAwLTcg4oaSIG1l bW9yeSBieXRlcyA4LTE1OwotKyAgICAgIC8vIExFIGJ5dGVzIDgtMTUg4oaSIG1lbW9yeSBieXRl cyAwLTcuCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAg ICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCAxNikpIGJyZWFrOwotKyAgICAgIGludCB4cyA9 IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIHVp bnQ4X3QgYnVmWzE2XSwgbWVtWzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeHMsIGJ1Zik7Ci0rICAg ICAgbWVtY3B5KG1lbSwgYnVmICsgOCwgOCk7Ci0rICAgICAgbWVtY3B5KG1lbSArIDgsIGJ1Ziwg OCk7Ci0rICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVhKSwgbWVtLCAxNik7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JB U0hfVU5TQUZFX1BSSU5URigKLSsgICAgICAgICAgImRlY29kZVhGb3JtOiB1bmltcGxlbWVudGVk IFhPPSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG8sCi0rICAgICAgICAgIGluc3RyLT5pbnN0 cnVjdGlvbkJpdHMoKSk7Ci0rICB9Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0r Ly8gZGVjb2RlUm90YXRlTWFzazogcmx3aW5tKDIxKSwgcmx3bm0oMjMpLCBybHdpbWkoMjApLAot Ky8vICAgcmxkaWNsKDMwKSwgcmxkaWNyKDMwKSwgcmxkaWMoMzApLCBybGRpbWkoMzApLCBybGRj bCgzMCksIHJsZGNyKDMwKQotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVSb3RhdGVNYXNrKFNp bUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29k ZSgpOwotKwotKyAgaWYgKG9wY29kZSA9PSAyMSkgewotKyAgICAvLyBybHdpbm06IFJBID0gUk9U TDMyKFJTLFNIKSAmIE1BU0soTUIsTUUpLCBSYwotKyAgICB1aW50MzJfdCByc192YWwgPSBVMzIo Z2V0UmVnaXN0ZXIoaW5zdHItPnJzVmFsdWUoKSkpOwotKyAgICB1aW50MzJfdCBzaCA9IGluc3Ry LT5tU0hWYWx1ZSgpOwotKyAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tTUJWYWx1ZSgpOwotKyAg ICB1aW50MzJfdCBtZSA9IGluc3RyLT5tTUVWYWx1ZSgpOwotKyAgICB1aW50MzJfdCByb3RhdGVk ID0gUm90YXRlTGVmdDMyKHJzX3ZhbCwgc2gpOwotKyAgICB1aW50MzJfdCBtYXNrID0gTUFTSzMy KG1iLCBtZSk7Ci0rICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0X3QpKHVpbnQ2NF90KShyb3Rh dGVkICYgbWFzayk7Ci0rICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIHJlc3VsdCk7 Ci0rICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICB9IGVsc2Ug aWYgKG9wY29kZSA9PSAyMykgewotKyAgICAvLyBybHdubTogUkEgPSBST1RMMzIoUlMsUkJbMjc6 MzFdKSAmIE1BU0soTUIsTUUpLCBSYwotKyAgICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVn aXN0ZXIoaW5zdHItPnJzVmFsdWUoKSkpOwotKyAgICB1aW50MzJfdCBzaCA9IFUzMihnZXRSZWdp c3RlcihpbnN0ci0+cmJWYWx1ZSgpKSkgJiAweDFGOwotKyAgICB1aW50MzJfdCBtYiA9IGluc3Ry LT5tTUJWYWx1ZSgpOwotKyAgICB1aW50MzJfdCBtZSA9IGluc3RyLT5tTUVWYWx1ZSgpOwotKyAg ICB1aW50MzJfdCByb3RhdGVkID0gUm90YXRlTGVmdDMyKHJzX3ZhbCwgc2gpOwotKyAgICB1aW50 MzJfdCBtYXNrID0gTUFTSzMyKG1iLCBtZSk7Ci0rICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0 X3QpKHVpbnQ2NF90KShyb3RhdGVkICYgbWFzayk7Ci0rICAgIHNldFJlZ2lzdGVyKGluc3RyLT5y YVZhbHVlKCksIHJlc3VsdCk7Ci0rICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJl c3VsdCk7Ci0rICB9IGVsc2UgaWYgKG9wY29kZSA9PSAyMCkgewotKyAgICAvLyBybHdpbWk6IFJB ID0gKFJPVEwzMihSUyxTSCkgJiBNQVNLKSB8IChSQSAmIH5NQVNLKSwgUmMKLSsgICAgdWludDMy X3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKGluc3RyLT5yc1ZhbHVlKCkpKTsKLSsgICAgdWlu dDMyX3Qgc2ggPSBpbnN0ci0+bVNIVmFsdWUoKTsKLSsgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+ bU1CVmFsdWUoKTsKLSsgICAgdWludDMyX3QgbWUgPSBpbnN0ci0+bU1FVmFsdWUoKTsKLSsgICAg dWludDMyX3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQzMihyc192YWwsIHNoKTsKLSsgICAgdWludDMy X3QgbWFzayA9IE1BU0szMihtYiwgbWUpOwotKyAgICB1aW50MzJfdCByYV92YWwgPSBVMzIoZ2V0 UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkpOwotKyAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2 NF90KSh1aW50NjRfdCkoKHJvdGF0ZWQgJiBtYXNrKSB8IChyYV92YWwgJiB+bWFzaykpOwotKyAg ICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCByZXN1bHQpOwotKyAgICBpZiAoaW5zdHIt PnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gMzAp IHsKLSsgICAgLy8gTUQtZm9ybSAvIE1EUy1mb3JtOiA2NC1iaXQgcm90YXRlL21hc2sKLSsgICAg dWludDMyX3QgcnMgPSBpbnN0ci0+cnNWYWx1ZSgpOwotKyAgICB1aW50NjRfdCByc192YWwgPSBV NjQoZ2V0UmVnaXN0ZXIocnMpKTsKLSsgICAgdWludDMyX3QgcmFfcmVnID0gaW5zdHItPnJhVmFs dWUoKTsKLSsKLSsgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHN1Yi1vcGNvZGU6IGJpdHMgMi4uNCBm b3IgTUQtZm9ybSwgYml0IDQgZm9yIE1EUy4KLSsgICAgLy8gTUQ6IGJpdHMgMi4uNAotKyAgICAv LyBNRFM6IGJpdCA0IChybGRjbCBoYXMgYml0ND0wLCBiaXQzLi4yPTAwIHdpdGggYml0MT0xOyBy bGRjciBoYXMKLSsgICAgLy8gICAgICBiaXQ0PTAsIGJpdDMuLjI9MDEgd2l0aCBiaXQxPTEpLiBB Y3R1YWxseToKLSsgICAgLy8gICBybGRpY2w6ICAzMCB8IE1ELVhPPTAgKGJpdHMgMi4uNCA9IDAw MCksIGJpdDE9MAotKyAgICAvLyAgIHJsZGljcjogIDMwIHwgTUQtWE89MSAoYml0cyAyLi40ID0g MDAxKSwgYml0MT0wCi0rICAgIC8vICAgcmxkaWM6ICAgMzAgfCBNRC1YTz0yIChiaXRzIDIuLjQg PSAwMTApLCBiaXQxPTAKLSsgICAgLy8gICBybGRpbWk6ICAzMCB8IE1ELVhPPTMgKGJpdHMgMi4u NCA9IDAxMSksIGJpdDE9MAotKyAgICAvLyAgIHJsZGNsOiAgIDMwIHwgTURTLCBiaXQ0PTAsIGJp dDMuLjE9MDAwLCBiaXQwPVJjID0+IGJpdHMgMS4uND0xMDAwCi0rICAgIC8vICAgICAgICAgICAg QWN0dWFsbHkgcmxkY2w6IGJpdHMgMS4uNCA9IDEwMDAsIGkuZS4gYml0KDQpPTEsYml0KDMpPTAs Ci0rICAgIC8vICAgICAgICAgICAgYml0KDIpPTAsYml0KDEpPTAKLSsgICAgLy8gICBybGRjcjog ICAzMCB8IE1EUywgYml0cyAxLi40ID0gMTAwMQotKyAgICAvLwotKyAgICAvLyBMZXQncyBjaGVj ayBiaXQgNCBmaXJzdDogaWYgYml0KDQpPT0xLCBpdCdzIE1EUy1mb3JtIChybGRjbC9ybGRjciku Ci0rICAgIGlmIChpbnN0ci0+Yml0KDQpKSB7Ci0rICAgICAgLy8gTURTLWZvcm06IHNoaWZ0IGFt b3VudCBmcm9tIFJCIHJlZ2lzdGVyCi0rICAgICAgdWludDMyX3Qgc2ggPSBVMzIoZ2V0UmVnaXN0 ZXIoaW5zdHItPnJiVmFsdWUoKSkpICYgMHgzRjsKLSsgICAgICB1aW50NjRfdCByb3RhdGVkID0g Um90YXRlTGVmdDY0KHJzX3ZhbCwgc2gpOwotKyAgICAgIHVpbnQzMl90IG1iID0gaW5zdHItPm1k c01CVmFsdWUoKTsKLSsKLSsgICAgICBpZiAoIWluc3RyLT5iaXQoMSkpIHsKLSsgICAgICAgIC8v IHJsZGNsOiBSQSA9IFJPVEw2NChSUywgUkJbNTg6NjNdKSAmIE1BU0sobWIsIDYzKQotKyAgICAg ICAgdWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMpOwotKyAgICAgICAgaW50NjRfdCByZXN1 bHQgPSBJNjQocm90YXRlZCAmIG1hc2spOwotKyAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCBy ZXN1bHQpOwotKyAgICAgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgLy8gcmxkY3I6IFJBID0gUk9UTDY0KFJTLCBSQls1 ODo2M10pICYgTUFTSygwLCBtZSkKLSsgICAgICAgIHVpbnQzMl90IG1lID0gaW5zdHItPm1kc01C VmFsdWUoKTsKLSsgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQoMCwgbWUpOwotKyAgICAg ICAgaW50NjRfdCByZXN1bHQgPSBJNjQocm90YXRlZCAmIG1hc2spOwotKyAgICAgICAgc2V0UmVn aXN0ZXIocmFfcmVnLCByZXN1bHQpOwotKyAgICAgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRh dGVDUjAocmVzdWx0KTsKLSsgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgLy8gTUQtZm9y bQotKyAgICAgIHVpbnQzMl90IHNoID0gaW5zdHItPm1kU0hWYWx1ZSgpOwotKyAgICAgIHVpbnQ2 NF90IHJvdGF0ZWQgPSBSb3RhdGVMZWZ0NjQocnNfdmFsLCBzaCk7Ci0rICAgICAgdWludDMyX3Qg eG9fbWQgPSBpbnN0ci0+Yml0cygzLCAyKTsKLSsKLSsgICAgICBzd2l0Y2ggKHhvX21kKSB7Ci0r ICAgICAgICBjYXNlIDA6IHsKLSsgICAgICAgICAgLy8gcmxkaWNsOiBSQSA9IFJPVEw2NChSUywg U0gpICYgTUFTSyhtYiwgNjMpCi0rICAgICAgICAgIHVpbnQzMl90IG1iID0gaW5zdHItPm1kTUJW YWx1ZSgpOwotKyAgICAgICAgICB1aW50NjRfdCBtYXNrID0gTUFTSzY0KG1iLCA2Myk7Ci0rICAg ICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKLSsgICAgICAgICAg c2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOwotKyAgICAgICAgICBpZiAoaW5zdHItPnJjQml0 KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsg ICAgICAgIGNhc2UgMTogewotKyAgICAgICAgICAvLyBybGRpY3I6IFJBID0gUk9UTDY0KFJTLCBT SCkgJiBNQVNLKDAsIG1lKQotKyAgICAgICAgICB1aW50MzJfdCBtZSA9IGluc3RyLT5tZE1FVmFs dWUoKTsKLSsgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2NCgwLCBtZSk7Ci0rICAgICAg ICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKLSsgICAgICAgICAgc2V0 UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOwotKyAgICAgICAgICBpZiAoaW5zdHItPnJjQml0KCkp IHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAg ICAgIGNhc2UgMjogewotKyAgICAgICAgICAvLyBybGRpYzogUkEgPSBST1RMNjQoUlMsIFNIKSAm IE1BU0sobWIsIH5TSCkKLSsgICAgICAgICAgLy8gQWN0dWFsbHk6IE1BU0sobWIsIDYzLVNIKQot KyAgICAgICAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tZE1CVmFsdWUoKTsKLSsgICAgICAgICAg dWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMgLSBzaCk7Ci0rICAgICAgICAgIGludDY0X3Qg cmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKLSsgICAgICAgICAgc2V0UmVnaXN0ZXIocmFf cmVnLCByZXN1bHQpOwotKyAgICAgICAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChy ZXN1bHQpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgICAgIGNhc2UgMzog ewotKyAgICAgICAgICAvLyBybGRpbWk6IFJBID0gKFJPVEw2NChSUyxTSCkgJiBNQVNLKSB8IChS QSAmIH5NQVNLKQotKyAgICAgICAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tZE1CVmFsdWUoKTsK LSsgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMgLSBzaCk7Ci0rICAgICAg ICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYV9yZWcpKTsKLSsgICAgICAg ICAgaW50NjRfdCByZXN1bHQgPSBJNjQoKHJvdGF0ZWQgJiBtYXNrKSB8IChyYV92YWwgJiB+bWFz aykpOwotKyAgICAgICAgICBzZXRSZWdpc3RlcihyYV9yZWcsIHJlc3VsdCk7Ci0rICAgICAgICAg IGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgICAgIGJyZWFr OwotKyAgICAgICAgfQotKyAgICAgICAgZGVmYXVsdDoKLSsgICAgICAgICAgTU9aX0NSQVNIX1VO U0FGRV9QUklOVEYoImRlY29kZVJvdGF0ZU1hc2s6IE1EIHhvPSV1IiwgeG9fbWQpOwotKyAgICAg IH0KLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRl Y29kZVJvdGF0ZU1hc2s6IG9wY29kZT0ldSIsIG9wY29kZSk7Ci0rICB9Ci0rfQotKwotKy8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gQ1ItYml0IGFjY2Vzc29ycyB1c2VkIGJ5IHRoZSBYTC1m b3JtIENSLWxvZ2ljIG9wcyAoY3JhbmQsIGNyYW5kYywgY3JvciwKLSsvLyBjcm9yYywgY3J4b3Is IGNyZXF2KS4gQml0IGluZGV4IGlzIGluIEJJRio0K3ggZm9ybTogZmllbGQ9Yi80LCBiaXQ9YiU0 Ci0rLy8gd2hlcmUgMD1MVCwgMT1HVCwgMj1FUSwgMz1TTy4KLStzdGF0aWMgaW5saW5lIHVpbnQ4 X3QgQ1JCaXRNYXNrKHVpbnQzMl90IGJpdEluRmllbGQpIHsKLSsgIHN3aXRjaCAoYml0SW5GaWVs ZCkgewotKyAgICBjYXNlIDA6IHJldHVybiBrQ1JGaWVsZExUOwotKyAgICBjYXNlIDE6IHJldHVy biBrQ1JGaWVsZEdUOwotKyAgICBjYXNlIDI6IHJldHVybiBrQ1JGaWVsZEVROwotKyAgICBjYXNl IDM6IHJldHVybiBrQ1JGaWVsZFNPOwotKyAgfQotKyAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRp YyBpbmxpbmUgYm9vbCBHZXRDUkJpdChTaW11bGF0b3ImIHMsIHVpbnQzMl90IGIpIHsKLSsgIHJl dHVybiAocy5nZXRDUkZpZWxkKGIgLyA0KSAmIENSQml0TWFzayhiICUgNCkpICE9IDA7Ci0rfQot KwotK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRDUkJpdChTaW11bGF0b3ImIHMsIHVpbnQzMl90IGIs IGJvb2wgdmFsKSB7Ci0rICB1aW50OF90IGZ2ID0gcy5nZXRDUkZpZWxkKGIgLyA0KTsKLSsgIHVp bnQ4X3QgbWFzayA9IENSQml0TWFzayhiICUgNCk7Ci0rICBzLnNldENSRmllbGQoYiAvIDQsIHZh bCA/IChmdiB8IG1hc2spIDogKGZ2ICYgfm1hc2spKTsKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsvLyBkZWNvZGVCcmFuY2g6IGIoMTgpLCBiYygxNiksIFhMLWZvcm0oMTkpCi0r Ci0rdm9pZCBTaW11bGF0b3I6OmRlY29kZUJyYW5jaChTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsK LSsgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKLSsKLSsgIGlmIChvcGNvZGUg PT0gMTgpIHsKLSsgICAgLy8gYiAvIGJsOiBJLWZvcm0gdW5jb25kaXRpb25hbCBicmFuY2gKLSsg ICAgaW50MzJfdCBvZmZzZXQgPSBpbnN0ci0+bGkyNlZhbHVlKCk7Ci0rICAgIGJvb2wgbGsgPSBp bnN0ci0+bGtCaXQoKTsKLSsgICAgYm9vbCBhYSA9IGluc3RyLT5hYUJpdCgpOwotKwotKyAgICBp bnQ2NF90IHRhcmdldDsKLSsgICAgaWYgKGFhKSB7Ci0rICAgICAgdGFyZ2V0ID0gKGludDY0X3Qp b2Zmc2V0OwotKyAgICB9IGVsc2UgewotKyAgICAgIHRhcmdldCA9IGdldF9wYygpICsgKGludDY0 X3Qpb2Zmc2V0OwotKyAgICB9Ci0rCi0rICAgIGlmIChsaykgewotKyAgICAgIHNldExSKGdldF9w YygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICB9Ci0rCi0rICAgIHNldF9w Yyh0YXJnZXQpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBpZiAob3Bjb2RlID09IDE2KSB7 Ci0rICAgIC8vIGJjIC8gYmNsOiBCLWZvcm0gY29uZGl0aW9uYWwgYnJhbmNoCi0rICAgIHVpbnQz Ml90IGJvID0gaW5zdHItPmJvVmFsdWUoKTsKLSsgICAgdWludDMyX3QgYmkgPSBpbnN0ci0+YmlW YWx1ZSgpOwotKyAgICBpbnQzMl90IGJkID0gaW5zdHItPmJkMTZWYWx1ZSgpOwotKyAgICBib29s IGxrID0gaW5zdHItPmxrQml0KCk7Ci0rICAgIGJvb2wgYWEgPSBpbnN0ci0+YWFCaXQoKTsKLSsK LSsgICAgLy8gRGVjcmVtZW50IENUUiBpZiBCT1syXSAoYml0IDIgb2YgQk8sIHdoaWNoIGlzIGJv ICYgMHgwNCkgaXMgY2xlYXIuCi0rICAgIGlmICghKGJvICYgMHgwNCkpIHsKLSsgICAgICBzZXRD VFIoZ2V0Q1RSKCkgLSAxKTsKLSsgICAgfQotKwotKyAgICAvLyBFdmFsdWF0ZSBDVFIgY29uZGl0 aW9uLgotKyAgICBib29sIGN0cl9vayA9IChibyAmIDB4MDQpIHx8Ci0rICAgICAgICAgICAgICAg ICAgKChnZXRDVFIoKSAhPSAwKSBeICgoYm8gJiAweDAyKSAhPSAwKSk7Ci0rCi0rICAgIC8vIEV2 YWx1YXRlIENSIGNvbmRpdGlvbi4KLSsgICAgdWludDMyX3QgY3JGaWVsZCA9IGJpIC8gNDsKLSsg ICAgdWludDMyX3QgY3JCaXQgPSBiaSAlIDQ7Ci0rICAgIHVpbnQ4X3QgY3JGaWVsZFZhbCA9IGdl dENSRmllbGQoY3JGaWVsZCk7Ci0rICAgIGJvb2wgY3JCaXRTZXQ7Ci0rICAgIHN3aXRjaCAoY3JC aXQpIHsKLSsgICAgICBjYXNlIDA6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZExU KSAhPSAwOyBicmVhazsKLSsgICAgICBjYXNlIDE6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBr Q1JGaWVsZEdUKSAhPSAwOyBicmVhazsKLSsgICAgICBjYXNlIDI6IGNyQml0U2V0ID0gKGNyRmll bGRWYWwgJiBrQ1JGaWVsZEVRKSAhPSAwOyBicmVhazsKLSsgICAgICBjYXNlIDM6IGNyQml0U2V0 ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZFNPKSAhPSAwOyBicmVhazsKLSsgICAgICBkZWZhdWx0 OiBjckJpdFNldCA9IGZhbHNlOyBicmVhazsKLSsgICAgfQotKyAgICBib29sIGNvbmRfb2sgPSAo Ym8gJiAweDEwKSB8fCAoY3JCaXRTZXQgPT0gKChibyAmIDB4MDgpICE9IDApKTsKLSsKLSsgICAg aWYgKGN0cl9vayAmJiBjb25kX29rKSB7Ci0rICAgICAgaW50NjRfdCB0YXJnZXQ7Ci0rICAgICAg aWYgKGFhKSB7Ci0rICAgICAgICB0YXJnZXQgPSAoaW50NjRfdCliZDsKLSsgICAgICB9IGVsc2Ug ewotKyAgICAgICAgdGFyZ2V0ID0gZ2V0X3BjKCkgKyAoaW50NjRfdCliZDsKLSsgICAgICB9Ci0r ICAgICAgaWYgKGxrKSB7Ci0rICAgICAgICBzZXRMUihnZXRfcGMoKSArIFNpbUluc3RydWN0aW9u OjprSW5zdHJTaXplKTsKLSsgICAgICB9Ci0rICAgICAgc2V0X3BjKHRhcmdldCk7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgLy8gQnJhbmNoIG5vdCB0YWtlbi4KLSsgICAgICBzZXRfcGMoZ2V0X3Bj KCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAgIH0KLSsgICAgcmV0dXJuOwot KyAgfQotKwotKyAgaWYgKG9wY29kZSA9PSAxOSkgewotKyAgICAvLyBYTC1mb3JtOiBiY2xyLCBi Y2N0ciwgY3JhbmQsIGNyYW5kYywgY3JvciwgY3JvcmMsIGNyeG9yLCBjcmVxdiwKLSsgICAgLy8g ICAgICAgICAgbWNyZiwgaXN5bmMKLSsgICAgdWludDMyX3QgeGwgPSBpbnN0ci0+eGxWYWx1ZSgp OwotKwotKyAgICBzd2l0Y2ggKHhsKSB7Ci0rICAgICAgY2FzZSAxNjogewotKyAgICAgICAgLy8g YmNscjogY29uZGl0aW9uYWwgYnJhbmNoIHRvIExSCi0rICAgICAgICB1aW50MzJfdCBibyA9IGlu c3RyLT5ib1ZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiaSA9IGluc3RyLT5iaVZhbHVlKCk7 Ci0rICAgICAgICBib29sIGxrID0gaW5zdHItPmxrQml0KCk7Ci0rCi0rICAgICAgICBpZiAoIShi byAmIDB4MDQpKSB7Ci0rICAgICAgICAgIHNldENUUihnZXRDVFIoKSAtIDEpOwotKyAgICAgICAg fQotKwotKyAgICAgICAgYm9vbCBjdHJfb2sgPSAoYm8gJiAweDA0KSB8fAotKyAgICAgICAgICAg ICAgICAgICAgICAoKGdldENUUigpICE9IDApIF4gKChibyAmIDB4MDIpICE9IDApKTsKLSsKLSsg ICAgICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7Ci0rICAgICAgICB1aW50MzJfdCBjckJp dCA9IGJpICUgNDsKLSsgICAgICAgIHVpbnQ4X3QgY3JGaWVsZFZhbCA9IGdldENSRmllbGQoY3JG aWVsZCk7Ci0rICAgICAgICBib29sIGNyQml0U2V0OwotKyAgICAgICAgc3dpdGNoIChjckJpdCkg ewotKyAgICAgICAgICBjYXNlIDA6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZExU KSAhPSAwOyBicmVhazsKLSsgICAgICAgICAgY2FzZSAxOiBjckJpdFNldCA9IChjckZpZWxkVmFs ICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAgICAgIGNhc2UgMjogY3JCaXRTZXQg PSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7IGJyZWFrOwotKyAgICAgICAgICBjYXNl IDM6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZFNPKSAhPSAwOyBicmVhazsKLSsg ICAgICAgICAgZGVmYXVsdDogY3JCaXRTZXQgPSBmYWxzZTsgYnJlYWs7Ci0rICAgICAgICB9Ci0r ICAgICAgICBib29sIGNvbmRfb2sgPSAoYm8gJiAweDEwKSB8fCAoY3JCaXRTZXQgPT0gKChibyAm IDB4MDgpICE9IDApKTsKLSsKLSsgICAgICAgIGlmIChjdHJfb2sgJiYgY29uZF9vaykgewotKyAg ICAgICAgICBpbnQ2NF90IHRhcmdldCA9IGdldExSKCkgJiB+M0xMOwotKyAgICAgICAgICBpZiAo bGspIHsKLSsgICAgICAgICAgICBzZXRMUihnZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5z dHJTaXplKTsKLSsgICAgICAgICAgfQotKyAgICAgICAgICBzZXRfcGModGFyZ2V0KTsKLSsgICAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIHNldF9wYyhnZXRfcGMoKSArIFNpbUluc3RydWN0aW9u OjprSW5zdHJTaXplKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsg ICAgICBjYXNlIDUyODogewotKyAgICAgICAgLy8gYmNjdHI6IGNvbmRpdGlvbmFsIGJyYW5jaCB0 byBDVFIKLSsgICAgICAgIHVpbnQzMl90IGJvID0gaW5zdHItPmJvVmFsdWUoKTsKLSsgICAgICAg IHVpbnQzMl90IGJpID0gaW5zdHItPmJpVmFsdWUoKTsKLSsgICAgICAgIGJvb2wgbGsgPSBpbnN0 ci0+bGtCaXQoKTsKLSsKLSsgICAgICAgIC8vIENUUiBpcyBub3QgZGVjcmVtZW50ZWQgZm9yIGJj Y3RyLgotKyAgICAgICAgdWludDMyX3QgY3JGaWVsZCA9IGJpIC8gNDsKLSsgICAgICAgIHVpbnQz Ml90IGNyQml0ID0gYmkgJSA0OwotKyAgICAgICAgdWludDhfdCBjckZpZWxkVmFsID0gZ2V0Q1JG aWVsZChjckZpZWxkKTsKLSsgICAgICAgIGJvb2wgY3JCaXRTZXQ7Ci0rICAgICAgICBzd2l0Y2gg KGNyQml0KSB7Ci0rICAgICAgICAgIGNhc2UgMDogY3JCaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtD UkZpZWxkTFQpICE9IDA7IGJyZWFrOwotKyAgICAgICAgICBjYXNlIDE6IGNyQml0U2V0ID0gKGNy RmllbGRWYWwgJiBrQ1JGaWVsZEdUKSAhPSAwOyBicmVhazsKLSsgICAgICAgICAgY2FzZSAyOiBj ckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRFUSkgIT0gMDsgYnJlYWs7Ci0rICAgICAg ICAgIGNhc2UgMzogY3JCaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkU08pICE9IDA7IGJy ZWFrOwotKyAgICAgICAgICBkZWZhdWx0OiBjckJpdFNldCA9IGZhbHNlOyBicmVhazsKLSsgICAg ICAgIH0KLSsgICAgICAgIGJvb2wgY29uZF9vayA9IChibyAmIDB4MTApIHx8IChjckJpdFNldCA9 PSAoKGJvICYgMHgwOCkgIT0gMCkpOwotKwotKyAgICAgICAgaWYgKGNvbmRfb2spIHsKLSsgICAg ICAgICAgaW50NjRfdCB0YXJnZXQgPSBnZXRDVFIoKSAmIH4zTEw7Ci0rICAgICAgICAgIGlmIChs aykgewotKyAgICAgICAgICAgIHNldExSKGdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0 clNpemUpOwotKyAgICAgICAgICB9Ci0rICAgICAgICAgIHNldF9wYyh0YXJnZXQpOwotKyAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgc2V0X3BjKGdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246 OmtJbnN0clNpemUpOwotKyAgICAgICAgfQotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAg ICAgIGNhc2UgMjU3OiB7Ci0rICAgICAgICAvLyBjcmFuZDogQ1JbQlRdID0gQ1JbQkFdICYgQ1Jb QkJdCi0rICAgICAgICB1aW50MzJfdCBidCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICAgICAgICB1 aW50MzJfdCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiYiA9IGlu c3RyLT5yYlZhbHVlKCk7Ci0rICAgICAgICBTZXRDUkJpdCgqdGhpcywgYnQsIEdldENSQml0KCp0 aGlzLCBiYSkgJiYgR2V0Q1JCaXQoKnRoaXMsIGJiKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAg ICB9Ci0rICAgICAgY2FzZSAxMjk6IHsKLSsgICAgICAgIC8vIGNyYW5kYzogQ1JbQlRdID0gQ1Jb QkFdICYgfkNSW0JCXQotKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwot KyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgICAgdWludDMy X3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOwotKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBH ZXRDUkJpdCgqdGhpcywgYmEpICYmICFHZXRDUkJpdCgqdGhpcywgYmIpKTsKLSsgICAgICAgIGJy ZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDQ0OTogewotKyAgICAgICAgLy8gY3JvcjogQ1Jb QlRdID0gQ1JbQkFdIHwgQ1JbQkJdCi0rICAgICAgICB1aW50MzJfdCBidCA9IGluc3RyLT5ydFZh bHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICAgICAg ICB1aW50MzJfdCBiYiA9IGluc3RyLT5yYlZhbHVlKCk7Ci0rICAgICAgICBTZXRDUkJpdCgqdGhp cywgYnQsIEdldENSQml0KCp0aGlzLCBiYSkgfHwgR2V0Q1JCaXQoKnRoaXMsIGJiKSk7Ci0rICAg ICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA0MTc6IHsKLSsgICAgICAgIC8vIGNy b3JjOiBDUltCVF0gPSBDUltCQV0gfCB+Q1JbQkJdCi0rICAgICAgICB1aW50MzJfdCBidCA9IGlu c3RyLT5ydFZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiYSA9IGluc3RyLT5yYVZhbHVlKCk7 Ci0rICAgICAgICB1aW50MzJfdCBiYiA9IGluc3RyLT5yYlZhbHVlKCk7Ci0rICAgICAgICBTZXRD UkJpdCgqdGhpcywgYnQsIEdldENSQml0KCp0aGlzLCBiYSkgfHwgIUdldENSQml0KCp0aGlzLCBi YikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTkzOiB7Ci0rICAg ICAgICAvLyBjcnhvcjogQ1JbQlRdID0gQ1JbQkFdIF4gQ1JbQkJdCi0rICAgICAgICB1aW50MzJf dCBidCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiYSA9IGluc3RyLT5y YVZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiYiA9IGluc3RyLT5yYlZhbHVlKCk7Ci0rICAg ICAgICBTZXRDUkJpdCgqdGhpcywgYnQsIEdldENSQml0KCp0aGlzLCBiYSkgXiBHZXRDUkJpdCgq dGhpcywgYmIpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDI4OTog ewotKyAgICAgICAgLy8gY3JlcXY6IENSW0JUXSA9IH4oQ1JbQkFdIF4gQ1JbQkJdKQotKyAgICAg ICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmEg PSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1 ZSgpOwotKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCAhKEdldENSQml0KCp0aGlzLCBiYSkg XiBHZXRDUkJpdCgqdGhpcywgYmIpKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAg ICAgY2FzZSAxNTA6IHsKLSsgICAgICAgIC8vIGlzeW5jOiBuby1vcCBpbiBzaW11bGF0b3IKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDM3MDogewotKyAgICAgICAgLy8g UFBDX3N0b3AgKDB4NEMwMDAyRTQpIGRlY29kZWQgYXMgWEwtZm9ybSBvcGNvZGUgMTksIFhMPTM3 MC4KLSsgICAgICAgIC8vIFRoaXMgaXMgb3VyIGtDYWxsUmVkaXJJbnN0ci4gSGFuZGxlIHZpYSBz b2Z0d2FyZUludGVycnVwdC4KLSsgICAgICAgIHNvZnR3YXJlSW50ZXJydXB0KGluc3RyKTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDI6IHsKLSsgICAgICAgIC8vIFBP V0VSOSBhZGRwY2lzIHJULCBEIChEWC1mb3JtKS4gQ29tcHV0ZXMgclQgPSAoQ0lBICsgNCkgKwot KyAgICAgICAgLy8gKHNleHQxNihEKSA8PCAxNikuIFRoZSAxNi1iaXQgc2lnbmVkIGRpc3BsYWNl bWVudCBEIGlzIHNwbGl0Ci0rICAgICAgICAvLyBhY3Jvc3MgdGhyZWUgc3ViLWZpZWxkczoKLSsg ICAgICAgIC8vICAgZDAgPSBiaXRzIExFIDYuLjE1ICgxMCBiaXRzKSDigJQgRFsxNTo2XQotKyAg ICAgICAgLy8gICBkMSA9IGJpdHMgTEUgMTYuLjIwICg1IGJpdHMpICDigJQgRFs1OjFdCi0rICAg ICAgICAvLyAgIGQyID0gYml0ICBMRSAwICAgICAgKDEgYml0KSAgIOKAlCBEWzBdCi0rICAgICAg ICAvLyAoTWlycm9ycyB0aGUgZW5jb2RlciBpbiBBc3NlbWJsZXItcHBjNjQuY3BwOmFzX2FkZHBj aXMuKQotKyAgICAgICAgdWludDMyX3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwotKyAgICAgICAg dWludDMyX3QgZDAgPSBpbnN0ci0+Yml0cygxNSwgNik7Ci0rICAgICAgICB1aW50MzJfdCBkMSA9 IGluc3RyLT5iaXRzKDIwLCAxNik7Ci0rICAgICAgICB1aW50MzJfdCBkMiA9IGluc3RyLT5iaXQo MCk7Ci0rICAgICAgICBpbnQxNl90IEQgPSAoaW50MTZfdCkoKGQwIDw8IDYpIHwgKGQxIDw8IDEp IHwgZDIpOwotKyAgICAgICAgaW50NjRfdCBjaWEgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+ KGluc3RyKTsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCBjaWEgKyBTaW1JbnN0cnVjdGlvbjo6 a0luc3RyU2l6ZSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxp bnQ2NF90PihEKSA8PCAxNikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGRl ZmF1bHQ6Ci0rICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlQnJhbmNoOiBY TCBvcGNvZGUgMTksIHhsPSV1IiwgeGwpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsK LSsgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVCcmFuY2g6IG9wY29kZT0ldSIsIG9w Y29kZSk7Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2RlRlA6IE1h am9yIG9wY29kZXMgNTkgKEEtZm9ybSBzaW5nbGUpIGFuZCA2MyAoWC1mb3JtIC8gQS1mb3JtIGRv dWJsZSkKLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZGVjb2RlRlAoU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KSB7Ci0rICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0ci0+b3Bjb2RlKCk7Ci0rICB1aW50MzJfdCBy dCA9IGluc3RyLT5ydFZhbHVlKCk7ICAvLyBGUlQKLSsgIHVpbnQzMl90IHJhID0gaW5zdHItPnJh VmFsdWUoKTsgIC8vIEZSQQotKyAgdWludDMyX3QgcmIgPSBpbnN0ci0+cmJWYWx1ZSgpOyAgLy8g RlJCCi0rICB1aW50MzJfdCByY19yZWcgPSBpbnN0ci0+cmNWYWx1ZSgpOyAgLy8gRlJDIChBLWZv cm0pCi0rCi0rICBpZiAob3Bjb2RlID09IDYzKSB7Ci0rICAgIC8vIFgtZm9ybSBhbmQgQS1mb3Jt IGRvdWJsZS1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zLgotKyAgICAvLyBGb3IgQS1mb3JtLCB0aGUg c3ViLW9wY29kZSBpcyBpbiBiaXRzIDEuLjUuCi0rICAgIC8vIEZvciBYLWZvcm0sIHRoZSBzdWIt b3Bjb2RlIGlzIGluIGJpdHMgMS4uMTAuCi0rICAgIHVpbnQzMl90IHhvX2EgPSBpbnN0ci0+Yml0 cyg1LCAxKTsgIC8vIEEtZm9ybSBzdWItb3Bjb2RlCi0rICAgIHVpbnQzMl90IHhvX3ggPSBpbnN0 ci0+Yml0cygxMCwgMSk7IC8vIFgtZm9ybSBzdWItb3Bjb2RlCi0rCi0rICAgIC8vIFRyeSBBLWZv cm0gZmlyc3QgKDUtYml0IHN1Yi1vcGNvZGUgaW4gYml0cyAxLi41KS4KLSsgICAgc3dpdGNoICh4 b19hKSB7Ci0rICAgICAgY2FzZSAyMTogewotKyAgICAgICAgLy8gZmFkZAotKyAgICAgICAgZG91 YmxlIHJlc3VsdCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSArIGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJiKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOwotKyAg ICAgICAgcmV0dXJuOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDIwOiB7Ci0rICAgICAgICAvLyBm c3ViCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpIC0g Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUo cnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMjU6 IHsKLSsgICAgICAgIC8vIGZtdWw6IEZSVCA9IEZSQSAqIEZSQyAobm90ZTogRlJDLCBub3QgRlJC ISkKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgKiBn ZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3Vi bGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIGNhc2Ug MTg6IHsKLSsgICAgICAgIC8vIGZkaXYKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSBnZXRGcHVS ZWdpc3RlckRvdWJsZShyYSkgLyBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICBz ZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAg ICB9Ci0rICAgICAgY2FzZSAyMjogewotKyAgICAgICAgLy8gZnNxcnQKLSsgICAgICAgIGRvdWJs ZSByZXN1bHQgPSBzcXJ0KGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSk7Ci0rICAgICAgICBzZXRG cHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgICB9 Ci0rICAgICAgY2FzZSAyOTogewotKyAgICAgICAgLy8gZm1hZGQ6IEZSVCA9IEZSQSAqIEZSQyAr IEZSQgotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IHN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJhKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3Rl ckRvdWJsZShyY19yZWcpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZw dVJlZ2lzdGVyRG91YmxlKHJiKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwg cmVzdWx0KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAzMDogewot KyAgICAgICAgLy8gZm5tc3ViOiBGUlQgPSAtKEZSQSAqIEZSQyAtIEZSQikKLSsgICAgICAgIGRv dWJsZSByZXN1bHQgPSAtKHN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJjX3Jl ZyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsK LSsgICAgICAgIHJldHVybjsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyODogewotKyAgICAgICAg Ly8gZm1zdWI6IEZSVCA9IEZSQSAqIEZSQyAtIEZSQgotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9 IHN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC1nZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAgICAg ICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0r ICAgICAgfQotKyAgICAgIGNhc2UgMzE6IHsKLSsgICAgICAgIC8vIGZubWFkZDogRlJUID0gLShG UkEgKiBGUkMgKyBGUkIpCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gLShzdGQ6OmZtYShnZXRG cHVSZWdpc3RlckRvdWJsZShyYSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVS ZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgICB9Ci0r ICAgICAgY2FzZSAyMzogewotKyAgICAgICAgLy8gZnNlbDogRlJUID0gKEZSQSA+PSAwKSA/IEZS QyA6IEZSQgotKyAgICAgICAgZG91YmxlIGZyYSA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKTsK LSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAoZnJhID49IDAuMCkgPyBnZXRGcHVS ZWdpc3RlckRvdWJsZShyY19yZWcpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSk7Ci0rICAgICAgICByZXR1 cm47Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMjY6IHsKLSsgICAgICAgIC8vIGZyc3FydGU6IEZS VCA9IDEuMCAvIHNxcnQoRlJCKSAoZXN0aW1hdGUpCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0g MS4wIC8gc3FydChnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAgICAgICAgc2V0RnB1UmVn aXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAg ICB9Ci0rCi0rICAgIC8vIFgtZm9ybSAoMTAtYml0IHN1Yi1vcGNvZGUpLgotKyAgICBzd2l0Y2gg KHhvX3gpIHsKLSsgICAgICBjYXNlIDcyOiB7Ci0rICAgICAgICAvLyBmbXI6IEZSVCA9IEZSQgot KyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJi KSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA0MDogewotKyAgICAg ICAgLy8gZm5lZzogRlJUID0gLUZSQgotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQs IC1nZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQot KyAgICAgIGNhc2UgMjY0OiB7Ci0rICAgICAgICAvLyBmYWJzOiBGUlQgPSB8RlJCfAotKyAgICAg ICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIGZhYnMoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIp KSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAxMzY6IHsKLSsgICAg ICAgIC8vIGZuYWJzOiBGUlQgPSAtfEZSQnwKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91Ymxl KHJ0LCAtZmFicyhnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpKTsKLSsgICAgICAgIGJyZWFrOwot KyAgICAgIH0KLSsgICAgICBjYXNlIDg6IHsKLSsgICAgICAgIC8vIGZjcHNnbjogRlJUID0gc2ln bihGUkEpIHx8IG1hZ25pdHVkZShGUkIpCi0rICAgICAgICBkb3VibGUgZnJhID0gZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmEpOwotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJiKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBzdGQ6OmNvcHlzaWdu KGZyYiwgZnJhKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAwOiB7 Ci0rICAgICAgICAvLyBmY21wdTogY29tcGFyZSBGUkEsIEZSQiB1bm9yZGVyZWQKLSsgICAgICAg IHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKLSsgICAgICAgIGRvdWJsZSBmcmEgPSBn ZXRGcHVSZWdpc3RlckRvdWJsZShyYSk7Ci0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgdWludDhfdCBmaWVsZCA9IDA7Ci0rICAgICAgICBp ZiAoc3RkOjppc25hbihmcmEpIHx8IHN0ZDo6aXNuYW4oZnJiKSkgewotKyAgICAgICAgICBmaWVs ZCA9IGtDUkZpZWxkU087Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYSA8IGZyYikgewotKyAgICAg ICAgICBmaWVsZCA9IGtDUkZpZWxkTFQ7Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYSA+IGZyYikg ewotKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkR1Q7Ci0rICAgICAgICB9IGVsc2UgewotKyAg ICAgICAgICBmaWVsZCA9IGtDUkZpZWxkRVE7Ci0rICAgICAgICB9Ci0rICAgICAgICBzZXRDUkZp ZWxkKGJmLCBmaWVsZCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAz MjogewotKyAgICAgICAgLy8gZmNtcG86IGNvbXBhcmUgRlJBLCBGUkIgb3JkZXJlZAotKyAgICAg ICAgdWludDMyX3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgpOwotKyAgICAgICAgZG91YmxlIGZyYSA9 IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKTsKLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVS ZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICB1aW50OF90IGZpZWxkID0gMDsKLSsgICAgICAg IGlmIChzdGQ6OmlzbmFuKGZyYSkgfHwgc3RkOjppc25hbihmcmIpKSB7Ci0rICAgICAgICAgIGZp ZWxkID0ga0NSRmllbGRTTzsKLSsgICAgICAgIH0gZWxzZSBpZiAoZnJhIDwgZnJiKSB7Ci0rICAg ICAgICAgIGZpZWxkID0ga0NSRmllbGRMVDsKLSsgICAgICAgIH0gZWxzZSBpZiAoZnJhID4gZnJi KSB7Ci0rICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRHVDsKLSsgICAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICAgIGZpZWxkID0ga0NSRmllbGRFUTsKLSsgICAgICAgIH0KLSsgICAgICAgIHNldENS RmllbGQoYmYsIGZpZWxkKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICAvLyBG b3IgZmN0aWQqIGFuZCBmY3RpdyogdGhlIElTQSBzcGVjaWZpZXMgdGhhdCBiaXQgMjMgb2YgRlBT Q1IgKFZYQ1ZJLAotKyAgICAgIC8vICJpbnZhbGlkIG9wIGZvciBpbnRlZ2VyIGNvbnZlcnQiKSBp cyBzZXQgd2hlbiB0aGUgc291cmNlIGlzIE5hTiwgK0luZiwKLSsgICAgICAvLyAtSW5mLCBvciBv dXQgb2YgdGhlIGRlc3RpbmF0aW9uJ3MgcmFuZ2UuIFdhc20ncyBvdXQtb2YtcmFuZ2UgdHJhcAot KyAgICAgIC8vIHNlcXVlbmNlIGlzIGBtdGZzYjAgMjM7IGZjdGlkejsgbWZ2c3JkOyBtY3JmcyBj cjAsNTsgYnQgU09CaXQsdHJhcGAsCi0rICAgICAgLy8gc28gdGhlIHNpbXVsYXRvciBNVVNUIHVw ZGF0ZSBWWENWSSBoZXJlIGZvciB0aGUgdHJhcCB0byBmaXJlLiBXaXRoCi0rICAgICAgLy8gRlBT Q1JfIGluIHRoZSBsb3ctaGFsZiBQUEMgbGF5b3V0IChQUEMgYml0IE4g4oaSIGludDY0IGJpdCAo MzEtTikpLAotKyAgICAgIC8vIFZYQ1ZJIGxpdmVzIGF0IGludDY0IGJpdCAoMzEtMjMpID0gOC4K LSsgICAgICBjYXNlIDgxNDogewotKyAgICAgICAgLy8gZmN0aWQ6IGNvbnZlcnQgZG91YmxlIHRv IGludDY0IChjdXJyZW50IHJvdW5kaW5nKQotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKTsKLSsgICAgICAgIGludDY0X3QgcmVzdWx0OwotKyAgICAgICAgYm9v bCBpbnZhbGlkID0gZmFsc2U7Ci0rICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7Ci0rICAg ICAgICAgIHJlc3VsdCA9IElOVDY0X01JTjsKLSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0r ICAgICAgICB9IGVsc2UgaWYgKGZyYiA+PSAtKGRvdWJsZSlJTlQ2NF9NSU4gfHwgZnJiIDwgKGRv dWJsZSlJTlQ2NF9NSU4pIHsKLSsgICAgICAgICAgcmVzdWx0ID0gKGZyYiA8IDApID8gSU5UNjRf TUlOIDogSU5UNjRfTUFYOwotKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICAgIHN3aXRjaCAoRlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7Ci0rICAg ICAgICAgICAgY2FzZSBSTjogcmVzdWx0ID0gKGludDY0X3QpbGxyaW50KGZyYik7IGJyZWFrOwot KyAgICAgICAgICAgIGNhc2UgUlo6IHJlc3VsdCA9IChpbnQ2NF90KWZyYjsgYnJlYWs7Ci0rICAg ICAgICAgICAgY2FzZSBSUDogcmVzdWx0ID0gKGludDY0X3QpY2VpbChmcmIpOyBicmVhazsKLSsg ICAgICAgICAgICBjYXNlIFJNOiByZXN1bHQgPSAoaW50NjRfdClmbG9vcihmcmIpOyBicmVhazsK LSsgICAgICAgICAgICBkZWZhdWx0OiByZXN1bHQgPSAoaW50NjRfdClmcmI7IGJyZWFrOwotKyAg ICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgx VUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQgMjMgaW4gbG93LWhhbGYgbGF5b3V0ICovCi0r ICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAg ICAgIH0KLSsgICAgICBjYXNlIDgxNTogewotKyAgICAgICAgLy8gZmN0aWR6OiBjb252ZXJ0IGRv dWJsZSB0byBpbnQ2NCAocm91bmQgdG93YXJkIHplcm8pCi0rICAgICAgICBkb3VibGUgZnJiID0g Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgaW50NjRfdCByZXN1bHQ7Ci0rICAg ICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKLSsgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikp IHsKLSsgICAgICAgICAgcmVzdWx0ID0gSU5UNjRfTUlOOwotKyAgICAgICAgICBpbnZhbGlkID0g dHJ1ZTsKLSsgICAgICAgIH0gZWxzZSBpZiAoZnJiID49IC0oZG91YmxlKUlOVDY0X01JTikgewot KyAgICAgICAgICByZXN1bHQgPSBJTlQ2NF9NQVg7Ci0rICAgICAgICAgIGludmFsaWQgPSB0cnVl OwotKyAgICAgICAgfSBlbHNlIGlmIChmcmIgPCAoZG91YmxlKUlOVDY0X01JTikgewotKyAgICAg ICAgICByZXN1bHQgPSBJTlQ2NF9NSU47Ci0rICAgICAgICAgIGludmFsaWQgPSB0cnVlOwotKyAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgcmVzdWx0ID0gKGludDY0X3QpZnJiOwotKyAgICAg ICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZY Q1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLwotKyAgICAgICAgc2V0RnB1UmVn aXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2Fz ZSA5NDI6IHsKLSsgICAgICAgIC8vIGZjdGlkdTogY29udmVydCBkb3VibGUgdG8gdWludDY0IChj dXJyZW50IHJvdW5kaW5nKS4KLSsgICAgICAgIC8vIFZYQ1ZJIGlzIHNpZ25hbGVkIHdoZW4gc291 cmNlIGlzIE5hTiwgwrFJbmYsIG9yIHRoZSByb3VuZGVkIHZhbHVlCi0rICAgICAgICAvLyBpcyBv dXRzaWRlIFswLCAyXjY0LTFdLiBOb3RhYmx5LAotKyAgICAgICAgLy8gYSBuZWdhdGl2ZSBzb3Vy Y2Ugd2hvc2Ugcm91bmRlZCB2YWx1ZSBpcyAwIChlLmcuIC0wLjQgaW4gUk4sIG9yCi0rICAgICAg ICAvLyBhbnkgdmFsdWUgaW4gKC0xLCAwKSBpbiBSWikgaXMgTk9UIGludmFsaWQuCi0rICAgICAg ICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgdWludDY0 X3QgcmVzdWx0OwotKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7Ci0rICAgICAgICBpZiAo c3RkOjppc25hbihmcmIpKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgICAgIGlu dmFsaWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIGlmIChmcmIgPj0gLTIuMCAqIChkb3VibGUp SU5UNjRfTUlOIC8qIDJeNjQgKi8pIHsKLSsgICAgICAgICAgcmVzdWx0ID0gVUlOVDY0X01BWDsK LSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAg ICBkb3VibGUgcm91bmRlZDsKLSsgICAgICAgICAgc3dpdGNoIChGUFNDUl8gJiBrRlBTQ1JSTk1h c2spIHsKLSsgICAgICAgICAgICBjYXNlIFJOOiByb3VuZGVkID0gbmVhcmJ5aW50KGZyYik7IGJy ZWFrOwotKyAgICAgICAgICAgIGNhc2UgUlo6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsK LSsgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVkID0gY2VpbChmcmIpOyBicmVhazsKLSsgICAg ICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxvb3IoZnJiKTsgYnJlYWs7Ci0rICAgICAgICAg ICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZyYik7IGJyZWFrOwotKyAgICAgICAgICB9Ci0r ICAgICAgICAgIGlmIChyb3VuZGVkIDwgMC4wKSB7Ci0rICAgICAgICAgICAgcmVzdWx0ID0gMDsK LSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAg ICAgICAgICByZXN1bHQgPSAodWludDY0X3Qpcm91bmRlZDsKLSsgICAgICAgICAgfQotKyAgICAg ICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZY Q1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLwotKyAgICAgICAgc2V0RnB1UmVn aXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAg ICBjYXNlIDk0MzogewotKyAgICAgICAgLy8gZmN0aWR1ejogY29udmVydCBkb3VibGUgdG8gdWlu dDY0IChyb3VuZCB0b3dhcmQgemVybykuCi0rICAgICAgICAvLyBTYW1lIFZYQ1ZJIHJ1bGUgYXMg ZmN0aWR1IGJ1dCByb3VuZGluZyBpcyBmaXhlZCB0byB0cnVuY2F0ZQotKyAgICAgICAgLy8gdG93 YXJkIHplcm8uIFNvdXJjZSBpbiAoLTEsIDApIHRydW5jYXRlcyB0byAwIOKAlCBWQUxJRC4KLSsg ICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICB1 aW50NjRfdCByZXN1bHQ7Ci0rICAgICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKLSsgICAgICAg IGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKLSsgICAgICAgICAgcmVzdWx0ID0gMDsKLSsgICAgICAg ICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYiA+PSAtMi4wICogKGRv dWJsZSlJTlQ2NF9NSU4gLyogMl42NCAqLykgewotKyAgICAgICAgICByZXN1bHQgPSBVSU5UNjRf TUFYOwotKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgIH0gZWxzZSBpZiAoZnJi IDw9IC0xLjApIHsKLSsgICAgICAgICAgLy8gVHJ1bmNhdGVkIHZhbHVlIGlzIG5lZ2F0aXZlIOKA lCBpbnZhbGlkIGZvciB1bnNpZ25lZC4KLSsgICAgICAgICAgcmVzdWx0ID0gMDsKLSsgICAgICAg ICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAvLyBTb3Vy Y2UgaXMgaW4gKC0xLCAyXjY0KTsgdHJ1bmNhdGlvbiB0b3dhcmQgemVybyB5aWVsZHMgYSB2YWx1 ZQotKyAgICAgICAgICAvLyBpbiBbMCwgMl42NCkuCi0rICAgICAgICAgIHJlc3VsdCA9ICh1aW50 NjRfdCl0cnVuYyhmcmIpOwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NS XyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91 dCAqLwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsgICAgICAg IGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDE0OiB7Ci0rICAgICAgICAvLyBmY3Rpdzog Y29udmVydCBkb3VibGUgdG8gaW50MzIgKGN1cnJlbnQgcm91bmRpbmcpLgotKyAgICAgICAgLy8g SW52YWxpZCByYW5nZTogcm91bmRlZCB2YWx1ZSA8IElOVDMyX01JTiBvciA+IElOVDMyX01BWC4g VGhlCi0rICAgICAgICAvLyBkb3VibGUtcHJlY2lzaW9uIGJvdW5kYXJ5IG9uIHRoZSBuZWdhdGl2 ZSBzaWRlIGlzIElOVDMyX01JTi0xID0KLSsgICAgICAgIC8vIC0yXjMxLTEgPSAtMjE0NzQ4MzY0 OS4wIChleGFjdGx5IHJlcHJlc2VudGFibGU7IGRvdWJsZXMgaW4KLSsgICAgICAgIC8vICgtMl4z MS0xLCAtMl4zMSkgYWxsIHJvdW5kLXRvLW5lYXJlc3QgdG8gLTJeMzEgd2hpY2ggaXMgdmFsaWQp LgotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKLSsgICAg ICAgIGludDMyX3QgcmVzdWx0OwotKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7Ci0rICAg ICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IElOVDMyX01J TjsKLSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICBkb3VibGUgcm91bmRlZDsKLSsgICAgICAgICAgc3dpdGNoIChGUFNDUl8gJiBrRlBTQ1JS Tk1hc2spIHsKLSsgICAgICAgICAgICBjYXNlIFJOOiByb3VuZGVkID0gbmVhcmJ5aW50KGZyYik7 IGJyZWFrOwotKyAgICAgICAgICAgIGNhc2UgUlo6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVh azsKLSsgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVkID0gY2VpbChmcmIpOyBicmVhazsKLSsg ICAgICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxvb3IoZnJiKTsgYnJlYWs7Ci0rICAgICAg ICAgICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZyYik7IGJyZWFrOwotKyAgICAgICAgICB9 Ci0rICAgICAgICAgIGlmIChyb3VuZGVkID4gKGRvdWJsZSlJTlQzMl9NQVgpIHsKLSsgICAgICAg ICAgICByZXN1bHQgPSBJTlQzMl9NQVg7Ci0rICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0r ICAgICAgICAgIH0gZWxzZSBpZiAocm91bmRlZCA8IChkb3VibGUpSU5UMzJfTUlOKSB7Ci0rICAg ICAgICAgICAgcmVzdWx0ID0gSU5UMzJfTUlOOwotKyAgICAgICAgICAgIGludmFsaWQgPSB0cnVl OwotKyAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHJlc3VsdCA9IChpbnQzMl90KXJv dW5kZWQ7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChpbnZhbGlkKSBG UFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBs YXlvdXQgKi8KLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCAoaW50NjRfdClyZXN1bHQpOwot KyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTU6IHsKLSsgICAgICAgIC8v IGZjdGl3ejogY29udmVydCBkb3VibGUgdG8gaW50MzIgKHJvdW5kIHRvd2FyZCB6ZXJvKS4KLSsg ICAgICAgIC8vIFRydW5jYXRpb24gb2YgYSB2YWx1ZSBpbiAoLTJeMzEtMSwgSU5UMzJfTUlOKSB0 b3dhcmQgemVybyBnaXZlcwotKyAgICAgICAgLy8gSU5UMzJfTUlOIOKAlCB2YWxpZC4gT25seSBg ZnJiIDw9IC0yXjMxLTFgIChpLmUuIGBmcmIgPCBJTlQzMl9NSU4tMSsxYAotKyAgICAgICAgLy8g PSBgZnJiIDwgLTIxNDc0ODM2NDhgIC4uLiB3YWl0LCBzaW1wbGVzdDogY2hlY2sgdHJ1bmNhdGVk IHZhbHVlIGluCi0rICAgICAgICAvLyByYW5nZSBBRlRFUiB0cnVuY2F0aW9uLikKLSsgICAgICAg IGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICBpbnQzMl90 IHJlc3VsdDsKLSsgICAgICAgIGJvb2wgaW52YWxpZCA9IGZhbHNlOwotKyAgICAgICAgaWYgKHN0 ZDo6aXNuYW4oZnJiKSkgewotKyAgICAgICAgICByZXN1bHQgPSBJTlQzMl9NSU47Ci0rICAgICAg ICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgZG91Ymxl IHRydW5jYXRlZCA9IHRydW5jKGZyYik7Ci0rICAgICAgICAgIGlmICh0cnVuY2F0ZWQgPiAoZG91 YmxlKUlOVDMyX01BWCkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IElOVDMyX01BWDsKLSsgICAg ICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgICAgfSBlbHNlIGlmICh0cnVuY2F0ZWQg PCAoZG91YmxlKUlOVDMyX01JTikgewotKyAgICAgICAgICAgIHJlc3VsdCA9IElOVDMyX01JTjsK LSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAg ICAgICAgICByZXN1bHQgPSAoaW50MzJfdCl0cnVuY2F0ZWQ7Ci0rICAgICAgICAgIH0KLSsgICAg ICAgIH0KLSsgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBW WENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KLSsgICAgICAgIHNldEZwdVJl Z2lzdGVyKHJ0LCAoaW50NjRfdClyZXN1bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQot KyAgICAgIGNhc2UgMTQyOiB7Ci0rICAgICAgICAvLyBmY3Rpd3U6IGNvbnZlcnQgZG91YmxlIHRv IHVpbnQzMiAoY3VycmVudCByb3VuZGluZykuIFRoZSBjaGVjayBpcwotKyAgICAgICAgLy8gb24g dGhlIFJPVU5ERUQgdmFsdWU6IFZYQ1ZJIGlmZiByb3VuZGVkIDwgMCBvciByb3VuZGVkID4gVUlO VDMyX01BWC4KLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7 Ci0rICAgICAgICB1aW50MzJfdCByZXN1bHQ7Ci0rICAgICAgICBib29sIGludmFsaWQgPSBmYWxz ZTsKLSsgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKLSsgICAgICAgICAgcmVzdWx0ID0g MDsKLSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICBkb3VibGUgcm91bmRlZDsKLSsgICAgICAgICAgc3dpdGNoIChGUFNDUl8gJiBrRlBTQ1JS Tk1hc2spIHsKLSsgICAgICAgICAgICBjYXNlIFJOOiByb3VuZGVkID0gbmVhcmJ5aW50KGZyYik7 IGJyZWFrOwotKyAgICAgICAgICAgIGNhc2UgUlo6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVh azsKLSsgICAgICAgICAgICBjYXNlIFJQOiByb3VuZGVkID0gY2VpbChmcmIpOyBicmVhazsKLSsg ICAgICAgICAgICBjYXNlIFJNOiByb3VuZGVkID0gZmxvb3IoZnJiKTsgYnJlYWs7Ci0rICAgICAg ICAgICAgZGVmYXVsdDogcm91bmRlZCA9IHRydW5jKGZyYik7IGJyZWFrOwotKyAgICAgICAgICB9 Ci0rICAgICAgICAgIGlmIChyb3VuZGVkIDwgMC4wKSB7Ci0rICAgICAgICAgICAgcmVzdWx0ID0g MDsKLSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgICAgfSBlbHNlIGlmIChy b3VuZGVkID4gKGRvdWJsZSlVSU5UMzJfTUFYKSB7Ci0rICAgICAgICAgICAgcmVzdWx0ID0gVUlO VDMyX01BWDsKLSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgICAgfSBlbHNl IHsKLSsgICAgICAgICAgICByZXN1bHQgPSAodWludDMyX3Qpcm91bmRlZDsKLSsgICAgICAgICAg fQotKyAgICAgICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4 KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLwotKyAgICAgICAg c2V0RnB1UmVnaXN0ZXIocnQsIChpbnQ2NF90KSh1aW50NjRfdClyZXN1bHQpOwotKyAgICAgICAg YnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTQzOiB7Ci0rICAgICAgICAvLyBmY3Rpd3V6 OiBjb252ZXJ0IGRvdWJsZSB0byB1aW50MzIgKHJvdW5kIHRvd2FyZCB6ZXJvKS4KLSsgICAgICAg IC8vIFNvdXJjZSBpbiAoLTEsIDApIHRydW5jYXRlcyB0byAwIOKAlCBWQUxJRC4KLSsgICAgICAg IGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICB1aW50MzJf dCByZXN1bHQ7Ci0rICAgICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKLSsgICAgICAgIGlmIChz dGQ6OmlzbmFuKGZyYikpIHsKLSsgICAgICAgICAgcmVzdWx0ID0gMDsKLSsgICAgICAgICAgaW52 YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBkb3VibGUgdHJ1bmNh dGVkID0gdHJ1bmMoZnJiKTsKLSsgICAgICAgICAgaWYgKHRydW5jYXRlZCA+IChkb3VibGUpVUlO VDMyX01BWCkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IFVJTlQzMl9NQVg7Ci0rICAgICAgICAg ICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSBpZiAodHJ1bmNhdGVkIDwgMC4w KSB7Ci0rICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1 ZTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICByZXN1bHQgPSAodWludDMyX3Qp dHJ1bmNhdGVkOwotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoaW52YWxp ZCkgRlBTQ1JfIHw9ICgxVUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQgMjMgaW4gbG93LWhh bGYgbGF5b3V0ICovCi0rICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgKGludDY0X3QpKHVpbnQ2 NF90KXJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA4NDY6 IHsKLSsgICAgICAgIC8vIGZjZmlkOiBjb252ZXJ0IGludDY0IGluIEZQUiB0byBkb3VibGUKLSsg ICAgICAgIGludDY0X3QgdmFsID0gZ2V0RnB1UmVnaXN0ZXIocmIpOwotKyAgICAgICAgc2V0RnB1 UmVnaXN0ZXJEb3VibGUocnQsIChkb3VibGUpdmFsKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAg IH0KLSsgICAgICBjYXNlIDk3NDogewotKyAgICAgICAgLy8gZmNmaWR1OiBjb252ZXJ0IHVpbnQ2 NCBpbiBGUFIgdG8gZG91YmxlCi0rICAgICAgICB1aW50NjRfdCB2YWwgPSBVNjQoZ2V0RnB1UmVn aXN0ZXIocmIpKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAoZG91YmxlKXZh bCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAxMjogewotKyAgICAg ICAgLy8gZnJzcDogcm91bmQgZG91YmxlIHRvIHNpbmdsZSBwcmVjaXNpb24gKHRoZW4gcmUtZXh0 ZW5kIGluIEZQUikuCi0rICAgICAgICAvLyBzTmFOIGlucHV0cyBhcmUgcXVpZXRlZCAodGhlIHJl c3VsdCBwYXlsb2FkIE1TQiBpcyBzZXQpLgotKyAgICAgICAgLy8gd2FzbSBmMzIuZGVtb3RlX2Y2 NCBsb3dlcnMgdG8gdGhpcyBvcCB3aGVuCi0rICAgICAgICAvLyBub3QgdXNpbmcgeHNjdmRwc3Ag ZGlyZWN0bHkuCi0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIp OwotKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihmcmIp OwotKyAgICAgICAgdWludDMyX3QgZmJpdHM7Ci0rICAgICAgICBtZW1jcHkoJmZiaXRzLCAmcmVz dWx0LCBzaXplb2YoZmJpdHMpKTsKLSsgICAgICAgIGlmICgoZmJpdHMgJiAweDdGODAwMDAwdSkg PT0gMHg3RjgwMDAwMHUgJiYKLSsgICAgICAgICAgICAoZmJpdHMgJiAweDAwN0ZGRkZGdSkgIT0g MCkgewotKyAgICAgICAgICBmYml0cyB8PSAweDAwNDAwMDAwdTsKLSsgICAgICAgICAgbWVtY3B5 KCZyZXN1bHQsICZmYml0cywgc2l6ZW9mKHJlc3VsdCkpOwotKyAgICAgICAgfQotKyAgICAgICAg c2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHByb21vdGVGbG9hdFByZXNlcnZpbmdOYU4ocmVzdWx0 KSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAzOTI6IHsKLSsgICAg ICAgIC8vIGZyaW46IHJvdW5kIHRvIG5lYXJlc3QgaW50ZWdlciAodGllcyBhd2F5IGZyb20gemVy bykKLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAg ICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcm91bmQoZnJiKSk7Ci0rICAgICAgICBicmVh azsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA0MjQ6IHsKLSsgICAgICAgIC8vIGZyaXo6IHJvdW5k IHRvd2FyZCB6ZXJvCi0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmIpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHRydW5jKGZyYikpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgNDU2OiB7Ci0rICAgICAgICAvLyBm cmlwOiByb3VuZCB0b3dhcmQgK2luZmluaXR5IChjZWlsKS4gWE89NDU2LgotKyAgICAgICAgZG91 YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKLSsgICAgICAgIHNldEZwdVJlZ2lz dGVyRG91YmxlKHJ0LCBjZWlsKGZyYikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAg ICAgIGNhc2UgNDg4OiB7Ci0rICAgICAgICAvLyBmcmltOiByb3VuZCB0b3dhcmQgLWluZmluaXR5 IChmbG9vcikuIFhPPTQ4OC4KLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRv dWJsZShyYik7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgZmxvb3IoZnJiKSk7 Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA1ODM6IHsKLSsgICAgICAg IC8vIG1mZnM6IEZSVCA9IEZQU0NSIChhcyBkb3VibGUgYml0IHBhdHRlcm4pCi0rICAgICAgICBz ZXRGcHVSZWdpc3RlcihydCwgSTY0KEZQU0NSXykpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg fQotKyAgICAgIC8vIEZQU0NSIGlzIHRyZWF0ZWQgYXMgYSAzMi1iaXQgcmVnaXN0ZXIgc3RvcmVk IGluIHRoZSBsb3cgMzIgYml0cyBvZgotKyAgICAgIC8vIEZQU0NSXyAodWludDY0X3QpLCB3aXRo IFBQQyBiaXQgbnVtYmVyaW5nOiBQUEMgYml0IE4gKHdoZXJlIGJpdCAwIGlzCi0rICAgICAgLy8g dGhlIE1TQikgbGl2ZXMgYXQgaW50NjQgYml0ICgzMS1OKS4gRmllbGQgRiAoNCBiaXRzKSBjb3Zl cnMgUFBDIGJpdHMKLSsgICAgICAvLyA0Ri4uNEYrMyDihpIgaW50NjQgYml0LUxTQiAoMjgtNEYp IHRvIGJpdC1NU0IgKDMxLTRGKS4gVGhpcyBtYXRjaGVzCi0rICAgICAgLy8gbWNyZnMsIG10ZnNm aSwga0ZQU0NSUk5NYXNrICh3aGljaCBjaGVja3MgYml0cyAzMC0zMSBQUEMgPSBpbnQ2NCBiaXRz Ci0rICAgICAgLy8gMC0xKSwgYW5kIG1mZnMgKHdoaWNoIGNvcGllcyBGUFNDUiBpbnRvIEZQUiBi aXRzIDMyLi42MyBQUEMgPSBpbnQ2NAotKyAgICAgIC8vIGJpdHMgMC4uMzEpLiBFYXJsaWVyIG10 ZnNiMC9tdGZzYjEgdXNlZCAoNjMtYnQpIHdoaWNoIHBsYWNlZCBiaXRzIGluCi0rICAgICAgLy8g dGhlIGhpZ2ggaGFsZiBvZiBGUFNDUl8gd2hlcmUgbWNyZnMgZXRjLiB3b3VsZCBuZXZlciBzZWUg dGhlbSDigJQgc28KLSsgICAgICAvLyB0aGUgd2FzbSB0cmFwIHNlcXVlbmNlIGBtdGZzYjAgMjM7 IGZjdGlkejsgbWNyZnMgY3IwLDU7IGJ0IFNPLG9vbEVudHJ5YAotKyAgICAgIC8vIGNvdWxkIG5v dCBkZXRlY3QgVlhDVkkuCi0rICAgICAgY2FzZSA3MDogewotKyAgICAgICAgLy8gbXRmc2IwOiBj bGVhciBGUFNDUiBiaXQuIFhPPTcwLgotKyAgICAgICAgLy8gKENhc2VzIDM4IGFuZCA3MCBoYWQg dGhlIGxhYmVscyBzd2FwcGVkLCBzbyB3YXNtJ3MKLSsgICAgICAgIC8vIGBtdGZzYjAgMjM7IGZj dGlkejsgbWNyZnMgY3IwLDU7IGJ0IFNPLHRyYXBgIHNlcXVlbmNlIGFjY2lkZW50YWxseQotKyAg ICAgICAgLy8gU0VUIFZYQ1ZJIGJlZm9yZSB0aGUgY29udmVydCByYW4sIGNhdXNpbmcgZXZlcnkg ZmN0aWQqIHRvIHRyYXAuKQotKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgp OwotKyAgICAgICAgRlBTQ1JfICY9IH4oMVVMTCA8PCAoMzEgLSBidCkpOwotKyAgICAgICAgYnJl YWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgNjQ6IHsKLSsgICAgICAgIC8vIG1jcmZzOiBjb3B5 IEZQU0NSIGZpZWxkIHRvIENSIGZpZWxkCi0rICAgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5i ZlZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJfdCBiZmEgPSBpbnN0ci0+Yml0cygyMCwgMTgpOwot KyAgICAgICAgdWludDMyX3Qgc2hpZnQgPSA0ICogKDcgLSBiZmEpOwotKyAgICAgICAgdWludDhf dCB2YWwgPSAoRlBTQ1JfID4+IHNoaWZ0KSAmIDB4RjsKLSsgICAgICAgIHNldENSRmllbGQoYmYs IHZhbCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgZGVmYXVsdDoKLSsgICAg ICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAotKyAgICAgICAgICAgICJkZWNvZGVGUDogb3Bj b2RlIDYzLCB4b194PSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG9feCwKLSsgICAgICAgICAg ICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKG9wY29k ZSA9PSA1OSkgewotKyAgICAvLyBBLWZvcm0gc2luZ2xlLXByZWNpc2lvbiBpbnN0cnVjdGlvbnMu Ci0rICAgIHVpbnQzMl90IHhvX2EgPSBpbnN0ci0+Yml0cyg1LCAxKTsKLSsKLSsgICAgc3dpdGNo ICh4b19hKSB7Ci0rICAgICAgY2FzZSAyMTogewotKyAgICAgICAgLy8gZmFkZHMKLSsgICAgICAg IGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgoZmxvYXQpKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJh KSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyYikpKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1 bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMjA6IHsKLSsgICAg ICAgIC8vIGZzdWJzCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KShn ZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgLQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVS ZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsg ICAgICBjYXNlIDI1OiB7Ci0rICAgICAgICAvLyBmbXVsczogRlJUID0gKGZsb2F0KShGUkEgKiBG UkMpCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KShnZXRGcHVSZWdp c3RlckRvdWJsZShyYSkgKgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0 ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAg Y2FzZSAxODogewotKyAgICAgICAgLy8gZmRpdnMKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSAo ZG91YmxlKSgoZmxvYXQpKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSAvCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpKTsK LSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOwotKyAgICAgICAgYnJl YWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMjI6IHsKLSsgICAgICAgIC8vIGZzcXJ0cwotKyAg ICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUpc3FydGYoKGZsb2F0KWdldEZwdVJlZ2lzdGVy RG91YmxlKHJiKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsK LSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDI5OiB7Ci0rICAgICAgICAv LyBmbWFkZHMKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgoZmxvYXQpc3RkOjpm bWEoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyYikpKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1 bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMzA6IHsKLSsgICAg ICAgIC8vIGZubXN1YnMKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKSgtKGZsb2F0 KXN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJjX3Jl ZyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJs ZShydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDI4 OiB7Ci0rICAgICAgICAvLyBmbXN1YnMKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91Ymxl KSgoZmxvYXQpc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJs ZShyY19yZWcpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3Rl ckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBj YXNlIDMxOiB7Ci0rICAgICAgICAvLyBmbm1hZGRzCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0g KGRvdWJsZSkoLShmbG9hdClzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyY19yZWcpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBzZXRG cHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0K LSsgICAgICBkZWZhdWx0OiB7Ci0rICAgICAgICAvLyBUcnkgWC1mb3JtIHN1Yi1vcGNvZGVzIGZv ciBvcGNvZGUgNTkgKGUuZy4sIGZjZmlkcywgZmNmaWR1cykuCi0rICAgICAgICB1aW50MzJfdCB4 b194ID0gaW5zdHItPmJpdHMoMTAsIDEpOwotKyAgICAgICAgc3dpdGNoICh4b194KSB7Ci0rICAg ICAgICAgIGNhc2UgODQ2OiB7Ci0rICAgICAgICAgICAgLy8gZmNmaWRzOiBjb252ZXJ0IGludDY0 IHRvIGZsb2F0IHNpbmdsZSAocmVzdWx0IHN0b3JlZCBhcyBkb3VibGUpCi0rICAgICAgICAgICAg aW50NjRfdCB2YWwgPSBnZXRGcHVSZWdpc3RlcihyYik7Ci0rICAgICAgICAgICAgc2V0RnB1UmVn aXN0ZXJEb3VibGUocnQsIChkb3VibGUpKGZsb2F0KXZhbCk7Ci0rICAgICAgICAgICAgYnJlYWs7 Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgY2FzZSA5NzQ6IHsKLSsgICAgICAgICAgICAvLyBm Y2ZpZHVzOiBjb252ZXJ0IHVpbnQ2NCB0byBmbG9hdCBzaW5nbGUKLSsgICAgICAgICAgICB1aW50 NjRfdCB2YWwgPSBVNjQoZ2V0RnB1UmVnaXN0ZXIocmIpKTsKLSsgICAgICAgICAgICBzZXRGcHVS ZWdpc3RlckRvdWJsZShydCwgKGRvdWJsZSkoZmxvYXQpdmFsKTsKLSsgICAgICAgICAgICBicmVh azsKLSsgICAgICAgICAgfQotKyAgICAgICAgICBkZWZhdWx0OgotKyAgICAgICAgICAgIE1PWl9D UkFTSF9VTlNBRkVfUFJJTlRGKAotKyAgICAgICAgICAgICAgICAiZGVjb2RlRlA6IG9wY29kZSA1 OSwgeG9fYT0ldSB4b194PSV1IiwgeG9fYSwgeG9feCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBi cmVhazsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9DUkFTSF9VTlNB RkVfUFJJTlRGKCJkZWNvZGVGUDogb3Bjb2RlPSV1Iiwgb3Bjb2RlKTsKLSsgIH0KLSt9Ci0rCi0r Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBkZWNvZGVWTVg6IE1ham9yIG9wY29kZSA0IChB bHRpVmVjL1ZNWCB2ZWN0b3Igb3BzIG9uIFZSMC1WUjMxKS4KLSsvLwotKy8vIFZSLWZvcm0gKFZY LWZvcm0pOiBiaXRzIDAtNSA9IHByaW1hcnkgb3Bjb2RlICg0KSwgYml0cyA2LTEwID0gVlJULAot Ky8vIGJpdHMgMTEtMTUgPSBWUkEsIGJpdHMgMTYtMjAgPSBWUkIsIGJpdHMgMjEtMzEgPSBYTyAo MTEgYml0cykuCi0rLy8gWE8gZXh0cmFjdGVkIHZpYSBgaW5zdHJ1Y3Rpb25CaXRzKCkgJiAweDdG RmAuCi0rLy8KLSsvLyBIZWxwZXJzIGJlbG93IHBhY2svdW5wYWNrIGVhY2ggVlIgdmlhIHRoZSBW UnJlZ2lzdGVyc18gYnl0ZSBzdG9yYWdlCi0rLy8gKDE2IGJ5dGVzLCBiaWctZW5kaWFuIFBQQyBu dW1iZXJpbmc6IGJ5dGVzWzBdIGlzIHRoZSBtb3N0LXNpZ25pZmljYW50Ci0rLy8gYnl0ZSBvZiB0 aGUgYXJjaGl0ZWN0dXJhbCByZWdpc3RlciwgYnV0IG9uIFBQQzY0IExFIHdhc20gdGhlIGxhbmUK LSsvLyBvcmRlcmluZyBpcyB3aGF0IHRoZSBKSVQgZXhwZWN0cykuIEFsbCBvcHMgaGVyZSB1c2Ug Ynl0ZS1sZXZlbAotKy8vIGFjY2Vzc29ycyBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgZXhpc3Rp bmcgVk1YIG1lbW9yeSBvcHMuCi0rCi0rdm9pZCBTaW11bGF0b3I6OmRlY29kZVZNWChTaW1JbnN0 cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IHhvID0gaW5zdHItPmluc3RydWN0aW9uQml0 cygpICYgMHg3RkZ1OwotKyAgdWludDMyX3QgdnJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsgICAvLyBi aXRzIDYuLjEwCi0rICB1aW50MzJfdCB2cmEgPSBpbnN0ci0+cmFWYWx1ZSgpOyAgIC8vIGJpdHMg MTEuLjE1Ci0rICB1aW50MzJfdCB2cmIgPSBpbnN0ci0+cmJWYWx1ZSgpOyAgIC8vIGJpdHMgMTYu LjIwCi0rICB1aW50MzJfdCB1aW1tID0gaW5zdHItPnJhVmFsdWUoKTsgIC8vIFZBLWZvcm06IDUt Yml0IGltbWVkaWF0ZSBhdCBiaXRzIDExLi4xNQotKwotKyAgdWludDhfdCBhWzE2XSwgYlsxNl0s IHJbMTZdOwotKyAgZ2V0VlJCeXRlcyh2cmEsIGEpOwotKyAgZ2V0VlJCeXRlcyh2cmIsIGIpOwot KwotKyAgLy8gSGVscGVycyBmb3IgdHJlYXRpbmcgdGhlIGJ5dGUgc3RvcmFnZSBhcyB0eXBlZCBs YW5lIGFycmF5cy4KLSsgIC8vIFRoZSBQUEM2NExFIHdhc20gU0lNRCBsb3dlcmluZyBzdG9yZXMg ZWFjaCBsYW5lJ3MgYnl0ZXMgaW4KLSsgIC8vIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHNvIGxhbmUg aSBvZiBhbiBOLWJ5dGUgZWxlbWVudCBvY2N1cGllcyBieXRlcwotKyAgLy8gKGkqTikgLi4gKGkq TiArIE4gLSAxKSB3aXRoIHRoZSBMU0IgYXQgYnl0ZSAoaSpOKS4gRm9yIGV4YW1wbGUsCi0rICAv LyBhIHYxMjguY29uc3QgaTMyeDQgMHgxMjM0NTY3OCBoYXMgYnl0ZXMgWzc4IDU2IDM0IDEyIOKA pl0uCi0rICAjZGVmaW5lIExBTkVfVTgoYnVmLCBpKSAgKCh1aW50OF90KShidWYpWyhpKV0pCi0r ICAjZGVmaW5lIExBTkVfUzgoYnVmLCBpKSAgKChpbnQ4X3QpKGJ1ZilbKGkpXSkKLSsgICNkZWZp bmUgTEFORV9VMTYoYnVmLCBpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICgodWludDE2X3QpKCh1aW50MTZfdCkoYnVmKVsoaSkgKiAyXSB8ICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICAgICgodWludDE2X3QpKGJ1ZilbKGkpICogMiArIDFd IDw8IDgpKSkKLSsgICNkZWZpbmUgTEFORV9TMTYoYnVmLCBpKSAoKGludDE2X3QpTEFORV9VMTYo YnVmLCBpKSkKLSsgICNkZWZpbmUgTEFORV9VMzIoYnVmLCBpKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICgodWludDMyX3QpKCh1aW50MzJfdCkoYnVmKVsoaSkg KiA0XSB8ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICgodWludDMyX3Qp KGJ1ZilbKGkpICogNCArIDFdIDw8IDgpIHwgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICgo dWludDMyX3QpKGJ1ZilbKGkpICogNCArIDJdIDw8IDE2KSB8ICAgICAgICBcCi0rICAgICAgICAg ICAgICAgICgodWludDMyX3QpKGJ1ZilbKGkpICogNCArIDNdIDw8IDI0KSkpCi0rICAjZGVmaW5l IExBTkVfUzMyKGJ1ZiwgaSkgKChpbnQzMl90KUxBTkVfVTMyKGJ1ZiwgaSkpCi0rICAjZGVmaW5l IExBTkVfVTY0KGJ1ZiwgaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAoKHVpbnQ2NF90KSgodWludDY0X3QpKGJ1ZilbKGkpICogOF0gfCAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyAxXSA8 PCA4KSB8ICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAq IDggKyAyXSA8PCAxNikgfCAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShi dWYpWyhpKSAqIDggKyAzXSA8PCAyNCkgfCAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVp bnQ2NF90KShidWYpWyhpKSAqIDggKyA0XSA8PCAzMikgfCAgICAgICAgXAotKyAgICAgICAgICAg ICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyA1XSA8PCA0MCkgfCAgICAgICAgXAotKyAg ICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyA2XSA8PCA0OCkgfCAgICAg ICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQ2NF90KShidWYpWyhpKSAqIDggKyA3XSA8PCA1 NikpKQotKyAgI2RlZmluZSBMQU5FX1M2NChidWYsIGkpICgoaW50NjRfdClMQU5FX1U2NChidWYs IGkpKQotKyAgI2RlZmluZSBTRVRfTEFORV9VOChidWYsIGksIHYpICBkbyB7IChidWYpWyhpKV0g PSAodWludDhfdCkodik7IH0gd2hpbGUgKDApCi0rICAjZGVmaW5lIFNFVF9MQU5FX1UxNihidWYs IGksIHYpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgKGJ1ZilbKGkpICogMl0gICAgID0gKHVpbnQ4X3QpKCh1aW50MTZfdCkodikgJiAweEZGKTsg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiAyICsgMV0gPSAodWludDhfdCko KCh1aW50MTZfdCkodikgPj4gOCkgJiAweEZGKTsgICAgICAgICAgXAotKyAgICB9IHdoaWxlICgw KQotKyAgI2RlZmluZSBTRVRfTEFORV9VMzIoYnVmLCBpLCB2KSBkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChidWYpWyhpKSAqIDRdICAgICA9ICh1 aW50OF90KSgodWludDMyX3QpKHYpICYgMHhGRik7ICAgICAgICAgICAgICAgICBcCi0rICAgICAg KGJ1ZilbKGkpICogNCArIDFdID0gKHVpbnQ4X3QpKCgodWludDMyX3QpKHYpID4+IDgpICYgMHhG Rik7ICAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA0ICsgMl0gPSAodWludDhfdCkoKCh1 aW50MzJfdCkodikgPj4gMTYpICYgMHhGRik7ICAgICAgICAgXAotKyAgICAgIChidWYpWyhpKSAq IDQgKyAzXSA9ICh1aW50OF90KSgoKHVpbnQzMl90KSh2KSA+PiAyNCkgJiAweEZGKTsgICAgICAg ICBcCi0rICAgIH0gd2hpbGUgKDApCi0rICAjZGVmaW5lIFNFVF9MQU5FX1U2NChidWYsIGksIHYp IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgKGJ1 ZilbKGkpICogOF0gICAgID0gKHVpbnQ4X3QpKCh1aW50NjRfdCkodikgJiAweEZGKTsgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA4ICsgMV0gPSAodWludDhfdCkoKCh1aW50 NjRfdCkodikgPj4gOCkgJiAweEZGKTsgICAgICAgICAgXAotKyAgICAgIChidWYpWyhpKSAqIDgg KyAyXSA9ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2KSA+PiAxNikgJiAweEZGKTsgICAgICAgICBc Ci0rICAgICAgKGJ1ZilbKGkpICogOCArIDNdID0gKHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+ IDI0KSAmIDB4RkYpOyAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA4ICsgNF0gPSAodWlu dDhfdCkoKCh1aW50NjRfdCkodikgPj4gMzIpICYgMHhGRik7ICAgICAgICAgXAotKyAgICAgIChi dWYpWyhpKSAqIDggKyA1XSA9ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2KSA+PiA0MCkgJiAweEZG KTsgICAgICAgICBcCi0rICAgICAgKGJ1ZilbKGkpICogOCArIDZdID0gKHVpbnQ4X3QpKCgodWlu dDY0X3QpKHYpID4+IDQ4KSAmIDB4RkYpOyAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA4 ICsgN10gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gNTYpICYgMHhGRik7ICAgICAgICAg XAotKyAgICB9IHdoaWxlICgwKQotKwotKyAgLy8gLS0tIFZBLWZvcm0gcHJlLWRpc3BhdGNoIC0t LQotKyAgLy8KLSsgIC8vIFZBLWZvcm0gaGFzIGEgNi1iaXQgWE8gYXQgYml0cyAyNi0zMSBhbmQg YSA1LWJpdCBWUkMgYXQgYml0cyAyMS0yNS4KLSsgIC8vIGRlY29kZVZNWCdzIDExLWJpdCBYTyBt YXNrIGNvbmZsYXRlcyBWUkMgd2l0aAotKyAgLy8gWE8sIHNvIGEgcGxhaW4gYHN3aXRjaCAoeG8p YCBvdmVyIDExLWJpdCB2YWx1ZXMgb25seSBtYXRjaGVzIHdoZW4KLSsgIC8vIFZSQyA9PSAwLiBQ ZWVsIG9mZiB0aGUgdGhyZWUgVkEtZm9ybSBvcHMgYWN0dWFsbHkgdXNlZCBieSB0aGUgSklUCi0r ICAvLyAodm1sYWRkdWhtLCB2c2VsLCB2cGVybSkgYmVmb3JlIHRoZSBtYWluIHN3aXRjaCBzbyBh bnkgVlJDIHZhbHVlCi0rICAvLyB3b3Jrcy4gdnNsZG9pIChYTz00NCkgaXMgVlgtZm9ybSB3aXRo IFNIIGF0IGJpdHMgMjItMjUsIG5vdCBWQSDigJQKLSsgIC8vIGhhbmRsZWQgaW4gdGhlIHN3aXRj aCBiZWxvdy4KLSsgIHsKLSsgICAgdWludDMyX3QgdmFfeG8gPSB4byAmIDB4M0Z1OwotKyAgICBp ZiAodmFfeG8gPT0gMzIgfHwgdmFfeG8gPT0gMzMgfHwgdmFfeG8gPT0gMzQgfHwgdmFfeG8gPT0g MzggfHwKLSsgICAgICAgIHZhX3hvID09IDQwIHx8IHZhX3hvID09IDQyIHx8IHZhX3hvID09IDQz KSB7Ci0rICAgICAgdWludDMyX3QgdnJjID0gKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiA2 KSAmIDB4MUY7Ci0rICAgICAgdWludDhfdCBjdlsxNl07Ci0rICAgICAgZ2V0VlJCeXRlcyh2cmMs IGN2KTsKLSsgICAgICBpZiAodmFfeG8gPT0gMzIpIHsKLSsgICAgICAgIC8vIHZtaGFkZHNocyBW VCxWQSxWQixWQyA6IFZUW2ldID0gc2F0X3MxNigKLSsgICAgICAgIC8vICAgKHMzMilWQS5oW2ld ICogKHMzMilWQi5oW2ldID4+IDE1ICsgKHMzMilWQy5oW2ldKQotKyAgICAgICAgLy8gKG5vIHJv dW5kaW5nIHRlcm0g4oCUIHVzZSB2bWhyYWRkc2hzIGZvciB0aGUgcm91bmRlZCBmb3JtKS4KLSsg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICAgIGludDMyX3Qg cHJvZCA9IChpbnQzMl90KUxBTkVfUzE2KGEsIGkpICogKGludDMyX3QpTEFORV9TMTYoYiwgaSk7 Ci0rICAgICAgICAgIGludDMyX3Qgc3VtID0gKHByb2QgPj4gMTUpICsgKGludDMyX3QpTEFORV9T MTYoY3YsIGkpOwotKyAgICAgICAgICBpZiAoc3VtID4gSU5UMTZfTUFYKSBzdW0gPSBJTlQxNl9N QVg7Ci0rICAgICAgICAgIGlmIChzdW0gPCBJTlQxNl9NSU4pIHN1bSA9IElOVDE2X01JTjsKLSsg ICAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdClzdW0pOwotKyAg ICAgICAgfQotKyAgICAgIH0gZWxzZSBpZiAodmFfeG8gPT0gMzMpIHsKLSsgICAgICAgIC8vIHZt aHJhZGRzaHMgVlQsVkEsVkIsVkMgOiByb3VuZGVkIFExNSBtdWx0aXBseS1hZGQtc2F0dXJhdGUu Ci0rICAgICAgICAvLyAgIFZUW2ldID0gc2F0X3MxNigoKHMzMilWQS5oW2ldICogKHMzMilWQi5o W2ldICsgMHg0MDAwKQotKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgPj4gMTUgKyAoczMy KVZDLmhbaV0pCi0rICAgICAgICAvLyBVc2VkIGJ5IHdhc20gaTE2eDgucTE1bXVscl9zYXRfcyAo VkMgaXMgemVybykuCi0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAg ICAgICAgICBpbnQzMl90IHByb2QgPSAoaW50MzJfdClMQU5FX1MxNihhLCBpKSAqIChpbnQzMl90 KUxBTkVfUzE2KGIsIGkpOwotKyAgICAgICAgICBpbnQzMl90IHN1bSA9ICgocHJvZCArIDB4NDAw MCkgPj4gMTUpICsgKGludDMyX3QpTEFORV9TMTYoY3YsIGkpOwotKyAgICAgICAgICBpZiAoc3Vt ID4gSU5UMTZfTUFYKSBzdW0gPSBJTlQxNl9NQVg7Ci0rICAgICAgICAgIGlmIChzdW0gPCBJTlQx Nl9NSU4pIHN1bSA9IElOVDE2X01JTjsKLSsgICAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1 aW50MTZfdCkoaW50MTZfdClzdW0pOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSBpZiAodmFf eG8gPT0gMzQpIHsKLSsgICAgICAgIC8vIHZtbGFkZHVobSBWVCxWQSxWQixWQyA6IFZUID0gbG93 MTYoVkEqVkIgKyBWQykKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0r ICAgICAgICAgIHVpbnQxNl90IHByb2QgPSBMQU5FX1UxNihhLCBpKSAqIExBTkVfVTE2KGIsIGkp OwotKyAgICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgcHJvZCArIExBTkVfVTE2KGN2LCBpKSk7 Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmICh2YV94byA9PSA0MCkgewotKyAgICAgICAg Ly8gdm1zdW1zaG0gVlQsVkEsVkIsVkMgOiBwYWlyd2lzZSBtdWx0aXBseS1zdW0gb2Ygc2lnbmVk IGhhbGZ3b3JkcwotKyAgICAgICAgLy8gaW50byBpMzIgbGFuZXMsIG1vZHVsbyBpMzIgd3JhcC4K LSsgICAgICAgIC8vICAgVlQuaTMyW2tdID0gVkMuaTMyW2tdICsgVkEuaTE2WzJrXSpWQi5pMTZb MmtdCi0rICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICArIFZBLmkxNlsyaysxXSpW Qi5pMTZbMmsrMV0KLSsgICAgICAgIC8vIFVzZWQgYnkgd2FzbSBpMzJ4NC5kb3RfaTE2eDhfcyB3 aXRoIFZDID0gMCwgYW5kIGJ5Ci0rICAgICAgICAvLyBpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2 eDhfcyB3aXRoIFZCID0gc3BsYXQoMSkgYW5kIFZDID0gMC4KLSsgICAgICAgIGZvciAoaW50IGsg PSAwOyBrIDwgNDsgaysrKSB7Ci0rICAgICAgICAgIGludDMyX3QgYTAgPSAoaW50MzJfdClMQU5F X1MxNihhLCAyICogayk7Ci0rICAgICAgICAgIGludDMyX3QgYTEgPSAoaW50MzJfdClMQU5FX1Mx NihhLCAyICogayArIDEpOwotKyAgICAgICAgICBpbnQzMl90IGIwID0gKGludDMyX3QpTEFORV9T MTYoYiwgMiAqIGspOwotKyAgICAgICAgICBpbnQzMl90IGIxID0gKGludDMyX3QpTEFORV9TMTYo YiwgMiAqIGsgKyAxKTsKLSsgICAgICAgICAgaW50MzJfdCBjICA9IExBTkVfUzMyKGN2LCBrKTsK LSsgICAgICAgICAgaW50MzJfdCByZXN1bHQgPSAoaW50MzJfdCkoKHVpbnQzMl90KWMgKyAodWlu dDMyX3QpKGEwICogYjApICsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVpbnQzMl90KShhMSAqIGIxKSk7Ci0rICAgICAgICAgIFNFVF9MQU5FX1UzMihyLCBrLCAodWlu dDMyX3QpcmVzdWx0KTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgaWYgKHZhX3hvID09IDM4 KSB7Ci0rICAgICAgICAvLyB2bXN1bXVobSBWVCxWQSxWQixWQyA6IHNhbWUgYXMgdm1zdW1zaG0g YnV0IHVuc2lnbmVkIGhhbGZ3b3Jkcy4KLSsgICAgICAgIC8vICAgVlQudTMyW2tdID0gVkMudTMy W2tdICsgVkEudTE2WzJrXSpWQi51MTZbMmtdCi0rICAgICAgICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICArIFZBLnUxNlsyaysxXSpWQi51MTZbMmsrMV0KLSsgICAgICAgIC8vIFVzZWQgYnkg d2FzbSBpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfdSB3aXRoIFZCID0gc3BsYXQoMSkKLSsg ICAgICAgIC8vIGFuZCBWQyA9IDAuCi0rICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsr KykgewotKyAgICAgICAgICB1aW50MzJfdCBhMCA9ICh1aW50MzJfdClMQU5FX1UxNihhLCAyICog ayk7Ci0rICAgICAgICAgIHVpbnQzMl90IGExID0gKHVpbnQzMl90KUxBTkVfVTE2KGEsIDIgKiBr ICsgMSk7Ci0rICAgICAgICAgIHVpbnQzMl90IGIwID0gKHVpbnQzMl90KUxBTkVfVTE2KGIsIDIg KiBrKTsKLSsgICAgICAgICAgdWludDMyX3QgYjEgPSAodWludDMyX3QpTEFORV9VMTYoYiwgMiAq IGsgKyAxKTsKLSsgICAgICAgICAgdWludDMyX3QgYyAgPSBMQU5FX1UzMihjdiwgayk7Ci0rICAg ICAgICAgIHVpbnQzMl90IHJlc3VsdCA9IGMgKyBhMCAqIGIwICsgYTEgKiBiMTsKLSsgICAgICAg ICAgU0VUX0xBTkVfVTMyKHIsIGssIHJlc3VsdCk7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNl IGlmICh2YV94byA9PSA0MikgewotKyAgICAgICAgLy8gdnNlbCBWVCxWQSxWQixWQyA6IFZUW2ld ID0gKFZDW2ldICYgVkJbaV0pIHwgKH5WQ1tpXSAmIFZBW2ldKQotKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICAgIHJbaV0gPSAodWludDhfdCkoKGN2W2ld ICYgYltpXSkgfCAofmN2W2ldICYgYVtpXSkpOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICAvLyB2cGVybSBWVCxWQSxWQixWQzsgZW1waXJpY2FsIExFOgotKyAgICAgICAg Ly8gICByW0xFX2ldID0gKFZDW0xFX2ldIDwgMTYpID8gVkFbTEVfKDE1LVZDW2ldKV0KLSsgICAg ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFZCW0xFXygzMS1WQ1tpXSldCi0r ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgICAgdWludDhf dCBpZHggPSBjdltpXSAmIDB4MUY7Ci0rICAgICAgICAgIHJbaV0gPSAoaWR4IDwgMTYpID8gYVsx NSAtIGlkeF0gOiBiWzMxIC0gaWR4XTsKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOwotKyAgICAgIGdvdG8gdm14X2RvbmU7Ci0rICAgIH0KLSsgIH0KLSsK LSsgIHN3aXRjaCAoeG8pIHsKLSsgICAgLy8gPT09IEludGVnZXIgYWRkIChtb2R1bG8pID09PQot KyAgICBjYXNlIDA6ICAgIC8vIHZhZGR1Ym0KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkgKyBMQU5F X1U4KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgY2FzZSA2NDogICAvLyB2YWRkdWhtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4 OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSArIExB TkVfVTE2KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKLSsgICAgY2FzZSAxMjg6ICAvLyB2YWRkdXdtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1UzMihhLCBpKSAr IExBTkVfVTMyKGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKLSsgICAgY2FzZSAxOTI6ICAvLyB2YWRkdWRtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBMQU5FX1U2NChhLCBp KSArIExBTkVfVTY0KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKLSsKLSsgICAgLy8gPT09IEludGVnZXIgc3ViIChtb2R1bG8pID09PQotKyAgICBj YXNlIDEwMjQ6IC8vIHZzdWJ1Ym0KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkgLSBMQU5FX1U4KGIs IGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAg Y2FzZSAxMDg4OiAvLyB2c3VidWhtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSAtIExBTkVfVTE2 KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsg ICAgY2FzZSAxMTUyOiAvLyB2c3VidXdtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp KyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1UzMihhLCBpKSAtIExBTkVf VTMyKGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgY2FzZSAxMjE2OiAvLyB2c3VidWRtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBMQU5FX1U2NChhLCBpKSAtIExB TkVfVTY0KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKLSsKLSsgICAgLy8gPT09IEludGVnZXIgYWRkIChzYXR1cmF0aW5nLCBzaWduZWQpID09PQot KyAgICBjYXNlIDc2ODogIC8vIHZhZGRzYnMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKLSsgICAgICAgIGludCBzID0gKGludClMQU5FX1M4KGEsIGkpICsgKGludClMQU5F X1M4KGIsIGkpOwotKyAgICAgICAgaWYgKHMgPiBJTlQ4X01BWCkgcyA9IElOVDhfTUFYOwotKyAg ICAgICAgaWYgKHMgPCBJTlQ4X01JTikgcyA9IElOVDhfTUlOOwotKyAgICAgICAgU0VUX0xBTkVf VTgociwgaSwgKHVpbnQ4X3Qpcyk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCBy KTsgYnJlYWs7Ci0rICAgIGNhc2UgODMyOiAgLy8gdmFkZHNocwotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9TMTYoYSwgaSkg KyAoaW50KUxBTkVfUzE2KGIsIGkpOwotKyAgICAgICAgaWYgKHMgPiBJTlQxNl9NQVgpIHMgPSBJ TlQxNl9NQVg7Ci0rICAgICAgICBpZiAocyA8IElOVDE2X01JTikgcyA9IElOVDE2X01JTjsKLSsg ICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3Qpcyk7Ci0rICAgICAgfQotKyAgICAg IHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgODk2OiAgLy8gdmFkZHN3cwot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBpbnQ2NF90IHMg PSAoaW50NjRfdClMQU5FX1MzMihhLCBpKSArIChpbnQ2NF90KUxBTkVfUzMyKGIsIGkpOwotKyAg ICAgICAgaWYgKHMgPiBJTlQzMl9NQVgpIHMgPSBJTlQzMl9NQVg7Ci0rICAgICAgICBpZiAocyA8 IElOVDMyX01JTikgcyA9IElOVDMyX01JTjsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAo dWludDMyX3Qpcyk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rCi0rICAgIC8vID09PSBJbnRlZ2VyIGFkZCAoc2F0dXJhdGluZywgdW5zaWduZWQpID09PQot KyAgICBjYXNlIDUxMjogIC8vIHZhZGR1YnMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKLSsgICAgICAgIHVuc2lnbmVkIHMgPSAodW5zaWduZWQpTEFORV9VOChhLCBpKSAr ICh1bnNpZ25lZClMQU5FX1U4KGIsIGkpOwotKyAgICAgICAgaWYgKHMgPiBVSU5UOF9NQVgpIHMg PSBVSU5UOF9NQVg7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCAodWludDhfdClzKTsKLSsg ICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA1NzY6 ICAvLyB2YWRkdWhzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAg ICAgIHVuc2lnbmVkIHMgPSAodW5zaWduZWQpTEFORV9VMTYoYSwgaSkgKyAodW5zaWduZWQpTEFO RV9VMTYoYiwgaSk7Ci0rICAgICAgICBpZiAocyA+IFVJTlQxNl9NQVgpIHMgPSBVSU5UMTZfTUFY OwotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdClzKTsKLSsgICAgICB9Ci0r ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA2NDA6ICAvLyB2YWRk dXdzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIHVpbnQ2 NF90IHMgPSAodWludDY0X3QpTEFORV9VMzIoYSwgaSkgKyAodWludDY0X3QpTEFORV9VMzIoYiwg aSk7Ci0rICAgICAgICBpZiAocyA+IFVJTlQzMl9NQVgpIHMgPSBVSU5UMzJfTUFYOwotKyAgICAg ICAgU0VUX0xBTkVfVTMyKHIsIGksICh1aW50MzJfdClzKTsKLSsgICAgICB9Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IEludGVnZXIgc3ViIChzYXR1 cmF0aW5nLCBzaWduZWQpID09PQotKyAgICBjYXNlIDE3OTI6IC8vIHZzdWJzYnMKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIGludCBzID0gKGludClMQU5F X1M4KGEsIGkpIC0gKGludClMQU5FX1M4KGIsIGkpOwotKyAgICAgICAgaWYgKHMgPiBJTlQ4X01B WCkgcyA9IElOVDhfTUFYOwotKyAgICAgICAgaWYgKHMgPCBJTlQ4X01JTikgcyA9IElOVDhfTUlO OwotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3Qpcyk7Ci0rICAgICAgfQotKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTg1NjogLy8gdnN1YnNo cwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBpbnQgcyA9 IChpbnQpTEFORV9TMTYoYSwgaSkgLSAoaW50KUxBTkVfUzE2KGIsIGkpOwotKyAgICAgICAgaWYg KHMgPiBJTlQxNl9NQVgpIHMgPSBJTlQxNl9NQVg7Ci0rICAgICAgICBpZiAocyA8IElOVDE2X01J TikgcyA9IElOVDE2X01JTjsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3Qp cyk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAg IC8vID09PSBJbnRlZ2VyIHN1YiAoc2F0dXJhdGluZywgdW5zaWduZWQpID09PQotKyAgICBjYXNl IDE1MzY6IC8vIHZzdWJ1YnMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsK LSsgICAgICAgIGludCBzID0gKGludClMQU5FX1U4KGEsIGkpIC0gKGludClMQU5FX1U4KGIsIGkp OwotKyAgICAgICAgaWYgKHMgPCAwKSBzID0gMDsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGks ICh1aW50OF90KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OwotKyAgICBjYXNlIDE2MDA6IC8vIHZzdWJ1aHMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDg7IGkrKykgewotKyAgICAgICAgaW50IHMgPSAoaW50KUxBTkVfVTE2KGEsIGkpIC0gKGludClM QU5FX1UxNihiLCBpKTsKLSsgICAgICAgIGlmIChzIDwgMCkgcyA9IDA7Ci0rICAgICAgICBTRVRf TEFORV9VMTYociwgaSwgKHVpbnQxNl90KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVz KHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gQXZlcmFnZSB1bnNpZ25lZCAocm91bmRl ZDogKGErYisxKT4+MSkgPT09Ci0rICAgIGNhc2UgMTAyNjogLy8gdmF2Z3ViCi0rICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLAot KyAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZClMQU5FX1U4KGEsIGkpICsgTEFORV9VOChi LCBpKSArIDEpID4+IDEpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOwotKyAgICBjYXNlIDEwOTA6IC8vIHZhdmd1aAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwKLSsgICAgICAgICAgICAg ICAgICAgICAoKHVuc2lnbmVkKUxBTkVfVTE2KGEsIGkpICsgTEFORV9VMTYoYiwgaSkgKyAxKSA+ PiAxKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsKLSsg ICAgLy8gPT09IFZlY3RvciBtdWx0aXBseSBwZXItbGFuZSAoaTMyeDQubXVsKSA9PT0KLSsgICAg Y2FzZSAxMzc6IHsgLy8gdm11bHV3bTogcGVyLWxhbmUgaTMyIG11bHRpcGx5IChsb3cgMzIgYml0 cykKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTMyKHIsIGksIExBTkVfVTMyKGEsIGkpICogTEFORV9VMzIoYiwgaSkpOwotKyAgICAgIH0K LSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09 PSBQT1dFUjEwIHZtdWxsZDogcGVyLWxhbmUgaTY0IG11bHRpcGx5IChsb3cgNjQgYml0cykgPT09 Ci0rICAgIGNhc2UgNDU3OiB7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK LSsgICAgICAgIHVpbnQ2NF90IGF2ID0gMCwgYnYgPSAwOwotKyAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCA4OyBqKyspIHsKLSsgICAgICAgICAgYXYgfD0gKCh1aW50NjRfdClhW2kgKiA4ICsg al0pIDw8IChqICogOCk7Ci0rICAgICAgICAgIGJ2IHw9ICgodWludDY0X3QpYltpICogOCArIGpd KSA8PCAoaiAqIDgpOwotKyAgICAgICAgfQotKyAgICAgICAgdWludDY0X3QgcHJvZCA9IGF2ICog YnY7ICAvLyBsb3cgNjQgYml0cywgbW9kdWxvIHdyYXAKLSsgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgODsgaisrKSB7Ci0rICAgICAgICAgIHJbaSAqIDggKyBqXSA9ICh1aW50OF90KShwcm9k ID4+IChqICogOCkpOwotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSB2bXVsZS92bXVsbyogKG11bHRp cGx5IGV2ZW4vb2RkIGxhbmVzLCB3aWRlbmluZykgPT09Ci0rICAgIC8vCi0rICAgIC8vIEFsbCBY TyB2YWx1ZXMgYmVsb3cgd2VyZSB2ZXJpZmllZCBieSBkaXNhc3NlbWJsaW5nIHRoZQotKyAgICAv LyBQUENfdm11bGUqL1BQQ192bXVsbyogY29uc3RhbnRzIGZyb20gQXNzZW1ibGVyLXBwYzY0Lmgg d2l0aAotKyAgICAvLyBgYXMgLW1wcGM2NCAtbWxpdHRsZWAgKyBgb2JqZHVtcCAtTXBvd2VyOSAt ZGAuIFRoZSBwcmV2aW91cwotKyAgICAvLyB2ZXJzaW9uIGhhZCBhbGwgMTIgWE8gbGFiZWxzIHN3 YXBwZWQgd2l0aCBlYWNoIG90aGVyJ3Mgc2VtYW50aWMKLSsgICAgLy8gcGFpciAoc28gdGhlIEpJ VCdzIHZtdWxlc2Igd2FzIGRlY29kZWQgYXMgdm11bG9zYiBhbmQgdmljZQotKyAgICAvLyB2ZXJz YSksIGNhdXNpbmcgaTh4MTbihpJpMTZ4OCBleHRtdWwgdG8gcHJvZHVjZSB3cm9uZyBoYWxmd29y ZHMuCi0rICAgIC8vCi0rICAgIC8vICAgUFBDX3ZtdWxvdWIgPSAweDEwMDAwMDA4IOKGkiBYTz04 ICAgICB2bXVsb3ViIChMRSBldmVuLWJ5dGUgcGFpcnMpCi0rICAgIC8vICAgUFBDX3ZtdWxvdWgg PSAweDEwMDAwMDQ4IOKGkiBYTz03MiAgICB2bXVsb3VoCi0rICAgIC8vICAgUFBDX3ZtdWxvdXcg PSAweDEwMDAwMDg4IOKGkiBYTz0xMzYgICB2bXVsb3V3Ci0rICAgIC8vICAgUFBDX3ZtdWxvc2Ig PSAweDEwMDAwMTA4IOKGkiBYTz0yNjQgICB2bXVsb3NiCi0rICAgIC8vICAgUFBDX3ZtdWxvc2gg PSAweDEwMDAwMTQ4IOKGkiBYTz0zMjggICB2bXVsb3NoCi0rICAgIC8vICAgUFBDX3ZtdWxvc3cg PSAweDEwMDAwMTg4IOKGkiBYTz0zOTIgICB2bXVsb3N3Ci0rICAgIC8vICAgUFBDX3ZtdWxldWIg PSAweDEwMDAwMjA4IOKGkiBYTz01MjAgICB2bXVsZXViIChMRSBvZGQtYnl0ZSBwYWlycykKLSsg ICAgLy8gICBQUENfdm11bGV1aCA9IDB4MTAwMDAyNDgg4oaSIFhPPTU4NCAgIHZtdWxldWgKLSsg ICAgLy8gICBQUENfdm11bGV1dyA9IDB4MTAwMDAyODgg4oaSIFhPPTY0OCAgIHZtdWxldXcKLSsg ICAgLy8gICBQUENfdm11bGVzYiA9IDB4MTAwMDAzMDgg4oaSIFhPPTc3NiAgIHZtdWxlc2IKLSsg ICAgLy8gICBQUENfdm11bGVzaCA9IDB4MTAwMDAzNDgg4oaSIFhPPTg0MCAgIHZtdWxlc2gKLSsg ICAgLy8gICBQUENfdm11bGVzdyA9IDB4MTAwMDAzODgg4oaSIFhPPTkwNCAgIHZtdWxlc3cKLSsg ICAgLy8KLSsgICAgLy8gTGFuZSBpbmRleGluZyBvbiBMRSBzdG9yYWdlOiAiQkUtZXZlbiBieXRl IGkiIGlzIHN0b3JlZCBhdCBMRQotKyAgICAvLyBieXRlIGluZGV4ICgxNSAtIDJpKTsgc2luY2Ug b3VyIExBTkVfUzggdXNlcyBMRSBieXRlIGluZGV4LCB0aGUKLSsgICAgLy8gIkJFLWV2ZW4iID0g IkxFLW9kZCIgbWFwcGluZyBnaXZlcyBgMippICsgMWAgZm9yIHZtdWxlLCBgMippYAotKyAgICAv LyBmb3Igdm11bG8uIFRoZSBKSVQncyBleHRtdWwgaGVscGVycyBlbWl0IGB2bXVsZXNiICsgdm11 bG9zYiArCi0rICAgIC8vIHZtcmdsaGAgdG8gcGFjayBib3RoIGhhbHZlczsgZ2V0dGluZyB0aGUg c2VtYW50aWNzIHN3YXBwZWQgaGVyZQotKyAgICAvLyBwcm9kdWNlcyB0aGUgcmlnaHQgcmVzdWx0 IHJlZ2lzdGVyIGJ1dCB3aXRoIHRoZSBoYWx2ZXMgaW4gdGhlCi0rICAgIC8vIHdyb25nIG1lcmdl IG9yZGVyLCBicmVha2luZyBleHRtdWwuCi0rICAgIGNhc2UgNzc2OiB7IC8vIHZtdWxlc2I6IHNp Z25lZCBCRS1ldmVuIGJ5dGUg4oaSIGhhbGZ3b3JkICg4IHJlc3VsdHMpCi0rICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLAotKyAg ICAgICAgICAgICAgICAgICAgIChpbnQxNl90KUxBTkVfUzgoYSwgMiAqIGkgKyAxKSAqCi0rICAg ICAgICAgICAgICAgICAgICAgKGludDE2X3QpTEFORV9TOChiLCAyICogaSArIDEpKTsKLSsgICAg ICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDUyMDogeyAvLyB2bXVsZXViOiB1bnNpZ25lZCBCRS1ldmVuIGJ5dGUg4oaSIGhhbGZ3b3JkCi0r ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1Ux NihyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdClMQU5FX1U4KGEsIDIgKiBp ICsgMSkgKgotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdClMQU5FX1U4KGIsIDIgKiBp ICsgMSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgODQwOiB7IC8vIHZtdWxlc2g6IHNpZ25lZCBCRS1ldmVuIGhhbGZ3b3Jk IOKGkiB3b3JkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAg IFNFVF9MQU5FX1UzMihyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KUxBTkVf UzE2KGEsIDIgKiBpICsgMSkgKgotKyAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KUxBTkVf UzE2KGIsIDIgKiBpICsgMSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7 IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNTg0OiB7IC8vIHZtdWxldWg6IHVuc2lnbmVkIEJF LWV2ZW4gaGFsZndvcmQg4oaSIHdvcmQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr KykgewotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAg KHVpbnQzMl90KUxBTkVfVTE2KGEsIDIgKiBpICsgMSkgKgotKyAgICAgICAgICAgICAgICAgICAg ICh1aW50MzJfdClMQU5FX1UxNihiLCAyICogaSArIDEpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDkwNDogeyAvLyB2bXVs ZXN3OiBzaWduZWQgQkUtZXZlbiB3b3JkIOKGkiBkd29yZCAoUE9XRVI4KQotKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKLSsg ICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClMQU5FX1MzMihhLCAyICogaSArIDEpICoKLSsg ICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClMQU5FX1MzMihiLCAyICogaSArIDEpKTsKLSsg ICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIDY0ODogeyAvLyB2bXVsZXV3OiB1bnNpZ25lZCBCRS1ldmVuIHdvcmQg4oaSIGR3b3JkIChQ T1dFUjgpCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNF VF9MQU5FX1U2NChyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClMQU5FX1Uz MihhLCAyICogaSArIDEpICoKLSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpTEFORV9V MzIoYiwgMiAqIGkgKyAxKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyNjQ6IHsgLy8gdm11bG9zYjogc2lnbmVkIEJFLW9k ZCBieXRlIOKGkiBoYWxmd29yZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7 Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAoaW50 MTZfdClMQU5FX1M4KGEsIDIgKiBpKSAqCi0rICAgICAgICAgICAgICAgICAgICAgKGludDE2X3Qp TEFORV9TOChiLCAyICogaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7 IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODogeyAvLyB2bXVsb3ViOiB1bnNpZ25lZCBCRS1v ZGQgYnl0ZQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBT RVRfTEFORV9VMTYociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpTEFORV9V OChhLCAyICogaSkgKgotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdClMQU5FX1U4KGIs IDIgKiBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0r ICAgIH0KLSsgICAgY2FzZSAzMjg6IHsgLy8gdm11bG9zaDogc2lnbmVkIEJFLW9kZCBoYWxmd29y ZCDihpIgd29yZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAg ICBTRVRfTEFORV9VMzIociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClMQU5F X1MxNihhLCAyICogaSkgKgotKyAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KUxBTkVfUzE2 KGIsIDIgKiBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rICAgIH0KLSsgICAgY2FzZSA3MjogeyAvLyB2bXVsb3VoOiB1bnNpZ25lZCBCRS1vZGQgaGFs ZndvcmQg4oaSIHdvcmQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAg ICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90 KUxBTkVfVTE2KGEsIDIgKiBpKSAqCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KUxB TkVfVTE2KGIsIDIgKiBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzOTI6IHsgLy8gdm11bG9zdzogc2lnbmVkIEJFLW9k ZCB3b3JkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNF VF9MQU5FX1U2NChyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgIChpbnQ2NF90KUxBTkVfUzMy KGEsIDIgKiBpKSAqCi0rICAgICAgICAgICAgICAgICAgICAgKGludDY0X3QpTEFORV9TMzIoYiwg MiAqIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsg ICAgfQotKyAgICBjYXNlIDEzNjogeyAvLyB2bXVsb3V3OiB1bnNpZ25lZCBCRS1vZGQgd29yZAot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9V NjQociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpTEFORV9VMzIoYSwgMiAq IGkpICoKLSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpTEFORV9VMzIoYiwgMiAqIGkp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQot KwotKyAgICAvLyA9PT0gUGVyLWxhbmUgcm90YXRlIGxlZnQgKHZybHtiLGgsdyxkfSkgPT09Ci0r ICAgIGNhc2UgNDogICAgLy8gdnJsYgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkr KykgewotKyAgICAgICAgdWludDhfdCB2ID0gTEFORV9VOChhLCBpKTsKLSsgICAgICAgIHVpbnQz Ml90IHMgPSBMQU5FX1U4KGIsIGkpICYgNzsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1 aW50OF90KSgodiA8PCBzKSB8ICh2ID4+ICgoOCAtIHMpICYgNykpKSk7Ci0rICAgICAgfQotKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNjg6ICAgLy8gdnJsaAot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICB1aW50MTZfdCB2 ID0gTEFORV9VMTYoYSwgaSk7Ci0rICAgICAgICB1aW50MzJfdCBzID0gTEFORV9VMTYoYiwgaSkg JiAxNTsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3QpKCh2IDw8IHMpIHwg KHYgPj4gKCgxNiAtIHMpICYgMTUpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDEzMjogIC8vIHZybHcKLSsgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgdWludDMyX3QgdiA9IExBTkVfVTMyKGEsIGkp OwotKyAgICAgICAgdWludDMyX3QgcyA9IExBTkVfVTMyKGIsIGkpICYgMzE7Ci0rICAgICAgICBT RVRfTEFORV9VMzIociwgaSwgKHYgPDwgcykgfCAodiA+PiAoKDMyIC0gcykgJiAzMSkpKTsKLSsg ICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAxOTY6 ICAvLyB2cmxkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAg IHVpbnQ2NF90IHYgPSBMQU5FX1U2NChhLCBpKTsKLSsgICAgICAgIHVpbnQzMl90IHMgPSBMQU5F X1U2NChiLCBpKSAmIDYzOwotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksICh2IDw8IHMpIHwg KHYgPj4gKCg2NCAtIHMpICYgNjMpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBNaW4gLyBNYXggc2lnbmVkID09PQotKyAgICBj YXNlIDI1ODogIC8vIHZtYXhzYgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykg ewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3RkOjptYXgoTEFORV9TOChhLCBpKSwgTEFO RV9TOChiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OwotKyAgICBjYXNlIDMyMjogIC8vIHZtYXhzaAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgc3RkOjptYXgoTEFORV9TMTYo YSwgaSksIExBTkVfUzE2KGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMzg2OiAgLy8gdm1heHN3Ci0rICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBzdGQ6Om1h eChMQU5FX1MzMihhLCBpKSwgTEFORV9TMzIoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA0NTA6ICAvLyB2bWF4c2QKLSsgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIs IGksIHN0ZDo6bWF4KExBTkVfUzY0KGEsIGkpLCBMQU5FX1M2NChiLCBpKSkpOwotKyAgICAgIH0K LSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDc3MDogIC8vIHZt aW5zYgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgICAgU0VU X0xBTkVfVTgociwgaSwgc3RkOjptaW4oTEFORV9TOChhLCBpKSwgTEFORV9TOChiLCBpKSkpOwot KyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDgz NDogIC8vIHZtaW5zaAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VMTYociwgaSwgc3RkOjptaW4oTEFORV9TMTYoYSwgaSksIExBTkVfUzE2 KGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0r ICAgIGNhc2UgODk4OiAgLy8gdm1pbnN3Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp KyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBzdGQ6Om1pbihMQU5FX1MzMihhLCBp KSwgTEFORV9TMzIoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKLSsgICAgY2FzZSA5NjI6ICAvLyB2bWluc2QKLSsgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIHN0ZDo6bWluKExB TkVfUzY0KGEsIGkpLCBMQU5FX1M2NChiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gTWluIC8gTWF4IHVuc2lnbmVkID09 PQotKyAgICBjYXNlIDI6ICAgIC8vIHZtYXh1YgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MTY7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3RkOjptYXgoTEFORV9VOChh LCBpKSwgTEFORV9VOChiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwg cik7IGJyZWFrOwotKyAgICBjYXNlIDY2OiAgIC8vIHZtYXh1aAotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgc3RkOjptYXgo TEFORV9VMTYoYSwgaSksIExBTkVfVTE2KGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTMwOiAgLy8gdm1heHV3Ci0rICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBp LCBzdGQ6Om1heChMQU5FX1UzMihhLCBpKSwgTEFORV9VMzIoYiwgaSkpKTsKLSsgICAgICB9Ci0r ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAxOTQ6ICAvLyB2bWF4 dWQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksIHN0ZDo6bWF4KExBTkVfVTY0KGEsIGkpLCBMQU5FX1U2NChiLCBpKSkpOwot KyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDUx NDogIC8vIHZtaW51YgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAg ICAgICAgU0VUX0xBTkVfVTgociwgaSwgc3RkOjptaW4oTEFORV9VOChhLCBpKSwgTEFORV9VOChi LCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAg ICBjYXNlIDU3ODogIC8vIHZtaW51aAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsr KSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgc3RkOjptaW4oTEFORV9VMTYoYSwgaSks IExBTkVfVTE2KGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIGNhc2UgNjQyOiAgLy8gdm1pbnV3Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBzdGQ6Om1pbihMQU5F X1UzMihhLCBpKSwgTEFORV9VMzIoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA3MDY6ICAvLyB2bWludWQKLSsgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIHN0 ZDo6bWluKExBTkVfVTY0KGEsIGkpLCBMQU5FX1U2NChiLCBpKSkpOwotKyAgICAgIH0KLSsgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gVmVjdG9yIGNvbXBh cmUgKGVxLCBndCBzaWduZWQsIGd0IHVuc2lnbmVkLCBuZSBQT1dFUjkpID09PQotKyAgICAvLwot KyAgICAvLyBBbGwgdmNtcCogb3BzIHNldCBwZXItbGFuZSBhbGwtMXMgb24gdHJ1ZSwgYWxsLTBz IG9uIGZhbHNlLiBUaGUKLSsgICAgLy8gcmVjb3JkIGZvcm0gKFJjPTEsIFhPIE1TQiBiaXQgc2V0 OyBYT19yZWMgPSBYT19iYXNlICsgMTAyNCkgbXVzdAotKyAgICAvLyBhZGRpdGlvbmFsbHkgd3Jp dGUgQ1I2OgotKyAgICAvLyAgIENSNi5MVCA9IDEgaWZmIEFMTCBsYW5lcyBhcmUgdHJ1ZTsKLSsg ICAgLy8gICBDUjYuR1QgPSAwIChhbHdheXMpOwotKyAgICAvLyAgIENSNi5FUSA9IDEgaWZmIE5P IGxhbmUgaXMgdHJ1ZTsKLSsgICAgLy8gICBDUjYuU08gPSAwIChhbHdheXMpLgotKyAgICAvLyBg aTh4MTYuYWxsX3RydWVgIGV0Yy4gaW4gd2FzbSByZWx5IG9uIENSNi5FUSB2aWEgYG1mb2NyZiBj cjZgOyB0aGUKLSsgICAgLy8gcHJldmlvdXMgc2ltdWxhdG9yIGltcGxlbWVudGF0aW9uIGxlZnQg Q1I2IHVudG91Y2hlZCwgc28gdGhlCi0rICAgIC8vIHByZWRpY2F0ZSB3YXMgYWx3YXlzIHdyb25n LgotKyAgICAvLwotKyAgICAvLyBIZWxwZXI6IGNvdW50IHRydWUgbGFuZXMgYnkgbG9va2luZyBh dCBieXRlIDAgb2YgZWFjaCBsYW5lIChhbGwKLSsgICAgLy8gYnl0ZXMgd2l0aGluIGEgInRydWUi IGxhbmUgYXJlIDB4RkYgc28gYnl0ZSAwIGlzIGEgc291bmQgcHJveHkpLgotKyAgICAjZGVmaW5l IFZDTVBfRE9ORShsYW5lc18sIGxhbmVfYnl0ZXNfKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgIGlmICh4byA+PSAxMDI0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGludCBudW1UcnVlXyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBmb3IgKGlu dCBpXyA9IDA7IGlfIDwgKGxhbmVzXyk7IGlfKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICBpZiAocltpXyAqIChsYW5lX2J5dGVzXyldID09IDB4RkYpIG51bVRy dWVfKys7ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICB1aW50OF90IGZpZWxkXyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKG51bVRydWVfID09IChsYW5lc18pKSBmaWVsZF8g fD0ga0NSRmllbGRMVDsgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmIChudW1UcnVl XyA9PSAwKSBmaWVsZF8gfD0ga0NSRmllbGRFUTsgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICBzZXRDUkZpZWxkKDYsIGZpZWxkXyk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSB3aGls ZSAoMCkKLSsKLSsgICAgY2FzZSA2OiAgICAvLyB2Y21wZXF1YiAoUmM9MCkKLSsgICAgY2FzZSAx MDMwOiAvLyB2Y21wZXF1Yi4gKHJlY29yZCwgQ1I2IHVwZGF0ZWQpCi0rICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4 KGEsIGkpID09IExBTkVfVTgoYiwgaSkgPyAweEZGIDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZD TVBfRE9ORSgxNiwgMSk7IGJyZWFrOwotKyAgICBjYXNlIDcwOiAgIC8vIHZjbXBlcXVoCi0rICAg IGNhc2UgMTA5NDogLy8gdmNtcGVxdWguCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBp KyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSA9PSBMQU5F X1UxNihiLCBpKSA/IDB4RkZGRiA6IDApOwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUoOCwg Mik7IGJyZWFrOwotKyAgICBjYXNlIDEzNDogIC8vIHZjbXBlcXV3Ci0rICAgIGNhc2UgMTE1ODog Ly8gdmNtcGVxdXcuCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAg ICAgIFNFVF9MQU5FX1UzMihyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgIExBTkVfVTMyKGEs IGkpID09IExBTkVfVTMyKGIsIGkpID8gMHhGRkZGRkZGRnUgOiAwKTsKLSsgICAgICB9Ci0rICAg ICAgVkNNUF9ET05FKDQsIDQpOyBicmVhazsKLSsgICAgY2FzZSAxOTk6ICAvLyB2Y21wZXF1ZAot KyAgICBjYXNlIDEyMjM6IC8vIHZjbXBlcXVkLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKLSsgICAgICAgICAgICAgICAg ICAgICBMQU5FX1U2NChhLCBpKSA9PSBMQU5FX1U2NChiLCBpKQotKyAgICAgICAgICAgICAgICAg ICAgICAgICA/IFVJTlQ2NF9NQVgKLSsgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKTsKLSsg ICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDIsIDgpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IENv bXBhcmUgZ3JlYXRlci10aGFuIHNpZ25lZCA9PT0KLSsgICAgY2FzZSA3NzQ6ICAvLyB2Y21wZ3Rz YgotKyAgICBjYXNlIDE3OTg6IC8vIHZjbXBndHNiLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9TOChhLCBpKSA+ IExBTkVfUzgoYiwgaSkgPyAweEZGIDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9ORSgx NiwgMSk7IGJyZWFrOwotKyAgICBjYXNlIDgzODogIC8vIHZjbXBndHNoCi0rICAgIGNhc2UgMTg2 MjogLy8gdmNtcGd0c2guCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsg ICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1MxNihhLCBpKSA+IExBTkVfUzE2KGIsIGkp ID8gMHhGRkZGIDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9ORSg4LCAyKTsgYnJlYWs7 Ci0rICAgIGNhc2UgOTAyOiAgLy8gdmNtcGd0c3cKLSsgICAgY2FzZSAxOTI2OiAvLyB2Y21wZ3Rz dy4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTMyKHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgTEFORV9TMzIoYSwgaSkgPiBMQU5F X1MzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9O RSg0LCA0KTsgYnJlYWs7Ci0rICAgIGNhc2UgOTY3OiAgLy8gdmNtcGd0c2QKLSsgICAgY2FzZSAx OTkxOiAvLyB2Y21wZ3RzZC4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewot KyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgTEFORV9T NjQoYSwgaSkgPiBMQU5FX1M2NChiLCBpKSA/IFVJTlQ2NF9NQVggOiAwKTsKLSsgICAgICB9Ci0r ICAgICAgVkNNUF9ET05FKDIsIDgpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IENvbXBhcmUgZ3Jl YXRlci10aGFuIHVuc2lnbmVkID09PQotKyAgICBjYXNlIDUxODogIC8vIHZjbXBndHViCi0rICAg IGNhc2UgMTU0MjogLy8gdmNtcGd0dWIuCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsg aSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEsIGkpID4gTEFORV9V OChiLCBpKSA/IDB4RkYgOiAwKTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDE2LCAxKTsg YnJlYWs7Ci0rICAgIGNhc2UgNTgyOiAgLy8gdmNtcGd0dWgKLSsgICAgY2FzZSAxNjA2OiAvLyB2 Y21wZ3R1aC4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAg U0VUX0xBTkVfVTE2KHIsIGksIExBTkVfVTE2KGEsIGkpID4gTEFORV9VMTYoYiwgaSkgPyAweEZG RkYgOiAwKTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDgsIDIpOyBicmVhazsKLSsgICAg Y2FzZSA2NDY6ICAvLyB2Y21wZ3R1dwotKyAgICBjYXNlIDE2NzA6IC8vIHZjbXBndHV3LgotKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIo ciwgaSwKLSsgICAgICAgICAgICAgICAgICAgICBMQU5FX1UzMihhLCBpKSA+IExBTkVfVTMyKGIs IGkpID8gMHhGRkZGRkZGRnUgOiAwKTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDQsIDQp OyBicmVhazsKLSsgICAgY2FzZSA3MTE6ICAvLyB2Y21wZ3R1ZAotKyAgICBjYXNlIDE3MzU6IC8v IHZjbXBndHVkLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAg ICBTRVRfTEFORV9VNjQociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICBMQU5FX1U2NChhLCBp KSA+IExBTkVfVTY0KGIsIGkpID8gVUlOVDY0X01BWCA6IDApOwotKyAgICAgIH0KLSsgICAgICBW Q01QX0RPTkUoMiwgOCk7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gU3BsYXQgZnJvbSBpbW1lZGlh dGUgKDUtYml0IHNpZ25lZCBzcGxhdCBpbnRvIGFsbCBsYW5lcykgPT09Ci0rICAgIC8vIElTQSBk ZWZpbmVzIFVJTSBpbiBCRSBlbGVtZW50IG51bWJlcmluZy4gRm9yIExFIHN0b3JhZ2UsIEJFIGVs ZW1lbnQgaSA9IExFIGVsZW1lbnQgKE4tMS1pKS4KLSsgICAgY2FzZSA1MjQ6ICAvLyB2c3BsdGI6 IFZSVFsqXSA9IFZSQltCRS1ieXRlLVVJTV07IHVpbW0gZnJvbSBWUkEgZmllbGQgKGJpdHMgMTEu LjE1KQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgICAgU0VU X0xBTkVfVTgociwgaSwgTEFORV9VOChiLCAxNSAtICh1aW1tICYgMHhGKSkpOwotKyAgICAgIH0K LSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDU4ODogIC8vIHZz cGx0aAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRf TEFORV9VMTYociwgaSwgTEFORV9VMTYoYiwgNyAtICh1aW1tICYgMHg3KSkpOwotKyAgICAgIH0K LSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDY1MjogIC8vIHZz cGx0dwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRf TEFORV9VMzIociwgaSwgTEFORV9VMzIoYiwgMyAtICh1aW1tICYgMHgzKSkpOwotKyAgICAgIH0K LSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gU3BsYXQg NS1iaXQgc2lnbmVkIGltbWVkaWF0ZSB0byBhbGwgYnl0ZSBsYW5lcyA9PT0KLSsgICAgY2FzZSA3 ODA6IHsgIC8vIHZzcGx0aXNiIFZSVCwgU0lNTTUKLSsgICAgICBpbnQzMl90IHNpbW01ID0gKGlu dDMyX3QpKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYgMHgxRik7Ci0rICAgICAg aWYgKHNpbW01ICYgMHgxMCkgc2ltbTUgfD0gfjB4MUY7Ci0rICAgICAgdWludDhfdCBiID0gKHVp bnQ4X3QpKGludDhfdClzaW1tNTsKLSsgICAgICBtZW1zZXQociwgYiwgMTYpOwotKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFNwbGF0IDUt Yml0IHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIGhhbGZ3b3JkIGxhbmVzID09PQotKyAgICBjYXNl IDg0NDogeyAgLy8gdnNwbHRpc2ggVlJULCBTSU1NNQotKyAgICAgIC8vIFNJTU01IG9jY3VwaWVz IGJpdHMgMTEuLjE1IG9mIHRoZSBpbnN0cnVjdGlvbiAoVlJBIGZpZWxkKS4gSXQKLSsgICAgICAv LyBpcyBzaWduLWV4dGVuZGVkIHRvIDE2IGJpdHMgYW5kIHJlcGxpY2F0ZWQgYWNyb3NzIGFsbCA4 IGhhbGZ3b3JkCi0rICAgICAgLy8gbGFuZXMgb2YgVlJULiBSYW5nZTogWy0xNiwgMTVdLgotKyAg ICAgIGludDMyX3Qgc2ltbTUgPSAoaW50MzJfdCkoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+ PiAxNikgJiAweDFGKTsKLSsgICAgICBpZiAoc2ltbTUgJiAweDEwKSBzaW1tNSB8PSB+MHgxRjsg IC8vIHNpZ24tZXh0ZW5kIGJpdCA0Ci0rICAgICAgaW50MTZfdCBodyA9IChpbnQxNl90KXNpbW01 OwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFO RV9VMTYociwgaSwgKHVpbnQxNl90KWh3KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gU3BsYXQgNS1iaXQgc2lnbmVk IGltbWVkaWF0ZSB0byBhbGwgd29yZCBsYW5lcyA9PT0KLSsgICAgY2FzZSA5MDg6IHsgIC8vIHZz cGx0aXN3IFZSVCwgU0lNTTUKLSsgICAgICBpbnQzMl90IHNpbW01ID0gKGludDMyX3QpKChpbnN0 ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYgMHgxRik7Ci0rICAgICAgaWYgKHNpbW01ICYg MHgxMCkgc2ltbTUgfD0gfjB4MUY7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3Qpc2ltbTUpOwotKyAgICAg IH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8v ID09PSBNZXJnZSAoaW50ZXJsZWF2ZSkgPT09Ci0rICAgIC8vCi0rICAgIC8vIFRoZSBJU0EgZGVm aW5lcyB2bXJnaCogLyB2bXJnbCogaW4gQkUgbnVtYmVyaW5nOyB0aGUKLSsgICAgLy8gZW1waXJp Y2FsIExFIHN0b3JhZ2UgYmVoYXZpb3VyIGlzOgotKyAgICAvLyAgIHZtcmdoKiBWVCxWQSxWQjog Zm9yIGkgaW4gMC4uTi8yLTEsCi0rICAgIC8vICAgICBWVC5sYW5lX0xFWzJpXSAgID0gVkIubGFu ZV9MRVsoTi8yKSArIGldCi0rICAgIC8vICAgICBWVC5sYW5lX0xFWzJpKzFdID0gVkEubGFuZV9M RVsoTi8yKSArIGldCi0rICAgIC8vICAgdm1yZ2wqIFZULFZBLFZCOiBmb3IgaSBpbiAwLi5OLzIt MSwKLSsgICAgLy8gICAgIFZULmxhbmVfTEVbMmldICAgPSBWQi5sYW5lX0xFW2ldCi0rICAgIC8v ICAgICBWVC5sYW5lX0xFWzJpKzFdID0gVkEubGFuZV9MRVtpXQotKyAgICAvLyBpLmUuIHRoZSBW QiBvcGVyYW5kIGdvZXMgdG8gdGhlIGV2ZW4gcmVzdWx0IHBvc2l0aW9ucyAocmV2ZXJzZWQKLSsg ICAgLy8gZnJvbSB3aGF0IGEgbmHDr3ZlIEJFIHJlYWRpbmcgd291bGQgc3VnZ2VzdCkgYW5kIHRo ZSAiaGlnaCIgZm9ybQotKyAgICAvLyBzZWxlY3RzIHRoZSB1cHBlci1oYWxmIG9mIExFIHN0b3Jh Z2UuCi0rICAgIC8vCi0rICAgIC8vIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIGhhZCBib3RoIHRo ZSBvcGVyYW5kIG9yZGVyIHN3YXBwZWQgQU5ECi0rICAgIC8vIHRoZSBoaWdoL2xvdyBoYWx2ZXMg c3dhcHBlZCAoY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIsIHNvCi0rICAgIC8vIEpJVC1vbmx5 LXZpc2libGUgb3BzIHRoYXQgcm91bmQtdHJpcHBlZCB0aHJvdWdoIHZtcmcqIGhhcHBlbmVkCi0r ICAgIC8vIHRvIHByb2R1Y2UgdGhlIHJpZ2h0IGFuc3dlciwgYnV0IHdhc20tdmlzaWJsZSBleHRt dWwgZXhwb3NlZAotKyAgICAvLyB0aGUgYnVnKS4KLSsgICAgY2FzZSAxMjogICAvLyB2bXJnaGIK LSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVf VTgociwgMiAqIGksIExBTkVfVTgoYiwgOCArIGkpKTsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIs IDIgKiBpICsgMSwgTEFORV9VOChhLCA4ICsgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDc2OiAgIC8vIHZtcmdoaAotKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgMiAq IGksIExBTkVfVTE2KGIsIDQgKyBpKSk7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgMiAqIGkg KyAxLCBMQU5FX1UxNihhLCA0ICsgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDE0MDogIC8vIHZtcmdodwotKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgMiAqIGksIExB TkVfVTMyKGIsIDIgKyBpKSk7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgMiAqIGkgKyAxLCBM QU5FX1UzMihhLCAyICsgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7 IGJyZWFrOwotKyAgICBjYXNlIDI2ODogIC8vIHZtcmdsYgotKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCAyICogaSwgTEFORV9VOChi LCBpKSk7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCAyICogaSArIDEsIExBTkVfVTgoYSwgaSkp OwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNl IDMzMjogIC8vIHZtcmdsaAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0r ICAgICAgICBTRVRfTEFORV9VMTYociwgMiAqIGksIExBTkVfVTE2KGIsIGkpKTsKLSsgICAgICAg IFNFVF9MQU5FX1UxNihyLCAyICogaSArIDEsIExBTkVfVTE2KGEsIGkpKTsKLSsgICAgICB9Ci0r ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAzOTY6ICAvLyB2bXJn bHcKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTMyKHIsIDIgKiBpLCBMQU5FX1UzMihiLCBpKSk7Ci0rICAgICAgICBTRVRfTEFORV9VMzIo ciwgMiAqIGkgKyAxLCBMQU5FX1UzMihhLCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0 ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBQZXItbGFuZSBzaGlmdCBsZWZ0IChj b3VudCBmcm9tIFZSQiwgbG93IE4gYml0cyBwZXIgZWxlbWVudCkgPT09Ci0rICAgIGNhc2UgMjYw OiAgLy8gdnNsYgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAg ICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBpKSA8PCAoTEFORV9VOChiLCBpKSAmIDcp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2Fz ZSAzMjQ6ICAvLyB2c2xoCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsg ICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSA8PCAoTEFORV9VMTYoYiwg aSkgJiAxNSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICBjYXNlIDM4ODogIC8vIHZzbHcKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkr KykgewotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksIExBTkVfVTMyKGEsIGkpIDw8IChMQU5F X1UzMihiLCBpKSAmIDMxKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIGNhc2UgMTQ3NjogLy8gdnNsZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgTEFORV9VNjQoYSwgaSkg PDwgKExBTkVfVTY0KGIsIGkpICYgNjMpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IFBlci1sYW5lIHNoaWZ0IHJpZ2h0IHVuc2ln bmVkID09PQotKyAgICBjYXNlIDUxNjogIC8vIHZzcmIKLSsgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkg Pj4gKExBTkVfVTgoYiwgaSkgJiA3KSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNTgwOiAgLy8gdnNyaAotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYo YSwgaSkgPj4gKExBTkVfVTE2KGIsIGkpICYgMTUpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA2NDQ6ICAvLyB2c3J3Ci0rICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBM QU5FX1UzMihhLCBpKSA+PiAoTEFORV9VMzIoYiwgaSkgJiAzMSkpOwotKyAgICAgIH0KLSsgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDE3MzI6IC8vIHZzcmQKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0 KHIsIGksIExBTkVfVTY0KGEsIGkpID4+IChMQU5FX1U2NChiLCBpKSAmIDYzKSk7Ci0rICAgICAg fQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBQZXIt bGFuZSBzaGlmdCByaWdodCBhbGdlYnJhaWMgKHNpZ25lZCkgPT09Ci0rICAgIGNhc2UgNzcyOiAg Ly8gdnNyYWIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAg IFNFVF9MQU5FX1U4KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAodWludDhfdCkoTEFORV9T OChhLCBpKSA+PiAoTEFORV9VOChiLCBpKSAmIDcpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgODM2OiAgLy8gdnNyYWgKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGks Ci0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KShMQU5FX1MxNihhLCBpKSA+PiAoTEFO RV9VMTYoYiwgaSkgJiAxNSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKLSsgICAgY2FzZSA5MDA6ICAvLyB2c3JhdwotKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKLSsgICAgICAgICAg ICAgICAgICAgICAodWludDMyX3QpKExBTkVfUzMyKGEsIGkpID4+IChMQU5FX1UzMihiLCBpKSAm IDMxKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAg ICBjYXNlIDk2NDogIC8vIHZzcmFkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgICh1 aW50NjRfdCkoTEFORV9TNjQoYSwgaSkgPj4gKExBTkVfVTY0KGIsIGkpICYgNjMpKSk7Ci0rICAg ICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBQ T1dFUjkgcGVyLWxhbmUgaW50ZWdlciBuZWdhdGUgKHN1Ym9wIGluIFZSQSBmaWVsZCkgPT09Ci0r ICAgIC8vIFBQQ192bmVndyA9IDB4MTAwNjA2MDIg4oaSIFhPPTB4NjAyPTE1MzgsIFZSQT02Ci0r ICAgIC8vIFBQQ192bmVnZCA9IDB4MTAwNzA2MDIg4oaSIFhPPTB4NjAyPTE1MzgsIFZSQT03Ci0r ICAgIGNhc2UgMTUzODoKLSsgICAgICBpZiAodnJhID09IDYpIHsgIC8vIHZuZWd3Ci0rICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgICBTRVRfTEFORV9VMzIo ciwgaSwgKHVpbnQzMl90KSgtTEFORV9TMzIoYiwgaSkpKTsKLSsgICAgICAgIH0KLSsgICAgICB9 IGVsc2UgaWYgKHZyYSA9PSA3KSB7ICAvLyB2bmVnZAotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspIHsKLSsgICAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksICh1aW50NjRfdCko LUxBTkVfUzY0KGIsIGkpKSk7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAg IE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVWTVggWE89MTUzODogdW5rbm93biBzdWJv cCAldSIsIHZyYSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rCi0rICAgIC8vID09PSBQT1dFUjEwIHZleHRyYWN0e2IsaCx3LGR9bSAoWE89MTYwMj0weDY0 MikgPT09Ci0rICAgIC8vIFJUIChHUFIpIGdldHMgdGhlIHdhc20tc3BlYyBiaXRtYXNrIGluIGxv dyAxNi84LzQvMiBiaXRzLiBVSU0gYXQKLSsgICAgLy8gYml0cyAxMS4uMTUgKD0gc2ltIGB2cmFg KSBzZWxlY3RzIGxhbmUgd2lkdGg6IDg9Ynl0ZSwgOT1oYWxmd29yZCwKLSsgICAgLy8gMTA9d29y ZCwgMTE9ZG91Ymxld29yZC4KLSsgICAgY2FzZSAxNjAyOiB7Ci0rICAgICAgdWludDY0X3QgcmVz dWx0ID0gMDsKLSsgICAgICBzd2l0Y2ggKHZyYSkgewotKyAgICAgICAgY2FzZSA4OiAgLy8gdmV4 dHJhY3RibTogMTYgYnl0ZSBsYW5lcwotKyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKLSsgICAgICAgICAgICBpZiAoYltpXSAmIDB4ODApIHJlc3VsdCB8PSAoMVVMTCA8 PCBpKTsKLSsgICAgICAgICAgfQotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIGNhc2UgOTog IC8vIHZleHRyYWN0aG06IDggaGFsZndvcmQgbGFuZXM7IE1TQiBsaXZlcyBhdCBieXRlIDJpKzEK LSsgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgICAgICBp ZiAoYlsyICogaSArIDFdICYgMHg4MCkgcmVzdWx0IHw9ICgxVUxMIDw8IGkpOwotKyAgICAgICAg ICB9Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgY2FzZSAxMDogIC8vIHZleHRyYWN0d206 IDQgd29yZCBsYW5lczsgTVNCIGF0IGJ5dGUgNGkrMwotKyAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgICAgIGlmIChiWzQgKiBpICsgM10gJiAweDgwKSBy ZXN1bHQgfD0gKDFVTEwgPDwgaSk7Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgYnJlYWs7Ci0r ICAgICAgICBjYXNlIDExOiAgLy8gdmV4dHJhY3RkbTogMiBkd29yZCBsYW5lczsgTVNCIGF0IGJ5 dGUgOGkrNwotKyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAg ICAgICAgIGlmIChiWzggKiBpICsgN10gJiAweDgwKSByZXN1bHQgfD0gKDFVTEwgPDwgaSk7Ci0r ICAgICAgICAgIH0KLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICBkZWZhdWx0OgotKyAgICAg ICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlVk1YIFhPPTE2MDI6IHVua25vd24g VUlNICV1IiwgdnJhKTsKLSsgICAgICB9Ci0rICAgICAgLy8gdnJ0IGlzIHRoZSBHUFIgdGFyZ2V0 IChSVCBmaWVsZCBhdCBiaXRzIDYuLjEwKS4KLSsgICAgICBzZXRSZWdpc3RlcihpbnQodnJ0KSwg aW50NjRfdChyZXN1bHQpKTsKLSsgICAgICBnb3RvIHZteF9kb25lOyAgLy8gU2tpcCB0aGUgdHJh aWxpbmcgc2V0VlJCeXRlcyB1c2VkIGJ5IFZSLXRhcmdldGluZyBvcHMuCi0rICAgIH0KLSsKLSsg ICAgLy8gPT09IFBPV0VSOSB2aW5zZXJ0YiAoWE89NzgxKSAvIHZpbnNlcnRoIChYTz04NDUpID09 PQotKyAgICAvLyBJbnNlcnQgYnl0ZS9oYWxmd29yZCBmcm9tIGEgVlIgKE5PVCBhIEdQUikgYXQg YW4gaW1tZWRpYXRlIGJ5dGUKLSsgICAgLy8gcG9zaXRpb24gVUlNIChCRSkuCi0rICAgIC8vICAg dmluc2VydGI6IFZSVC5ieXRlW1VJTV0gICAoQkUpIOKGkCBWUkIuYnl0ZVs3XSAoQkUpCi0rICAg IC8vICAgdmluc2VydGg6IFZSVC5ieXRlW1VJTV0gICAoQkUpIOKGkCBWUkIuYnl0ZVs2XSAoQkUp Ci0rICAgIC8vICAgICAgICAgICAgIFZSVC5ieXRlW1VJTSsxXSAoQkUpIOKGkCBWUkIuYnl0ZVs3 XSAoQkUpCi0rICAgIC8vIEJFIGJ5dGUgaSDihpQgTEUgYnl0ZSAoMTUtaSkuIFNvIFZSQi5ieXRl WzZdIChCRSkgPSBMRSBieXRlIDkgb2YKLSsgICAgLy8gVlJCLCBWUkIuYnl0ZVs3XSAoQkUpID0g TEUgYnl0ZSA4LiAoQnl0ZS1wYWlyIG9yZGVyIG1hdHRlcnMuKQotKyAgICBjYXNlIDc4MTogICAg Ly8gdmluc2VydGIKLSsgICAgY2FzZSA4NDU6IHsgIC8vIHZpbnNlcnRoCi0rICAgICAgZ2V0VlJC eXRlcyh2cnQsIHIpOyAgLy8gc3RhcnQgZnJvbSBjdXJyZW50IFZSVAotKyAgICAgIGlmICh4byA9 PSA4NDUpIHsKLSsgICAgICAgIC8vIHZpbnNlcnRoOiBjb3B5IDItYnl0ZSBoYWxmd29yZCAoQkUg Ynl0ZXMgNi4uNyBvZiBWUkIpLgotKyAgICAgICAgclsxNSAtIHVpbW1dICAgICA9IGJbOV07ICAv LyBCRSBieXRlIFVJTSAgIOKGkCBWUkIgQkUgYnl0ZSA2Ci0rICAgICAgICByWzE0IC0gdWltbV0g ICAgID0gYls4XTsgIC8vIEJFIGJ5dGUgVUlNKzEg4oaQIFZSQiBCRSBieXRlIDcKLSsgICAgICB9 IGVsc2UgewotKyAgICAgICAgLy8gdmluc2VydGI6IGNvcHkgYSBzaW5nbGUgYnl0ZSAoQkUgYnl0 ZSA3IG9mIFZSQikuCi0rICAgICAgICByWzE1IC0gdWltbV0gICAgID0gYls4XTsgIC8vIEJFIGJ5 dGUgVUlNICAg4oaQIFZSQiBCRSBieXRlIDcKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVI5IHZleHRyYWN0dWIg KFhPPTUyNSkgLyB2ZXh0cmFjdHVoIChYTz01ODkpID09PQotKyAgICAvLyBFeHRyYWN0IG9uZSBi eXRlL2hhbGZ3b3JkIGZyb20gVlJCIGF0IGltbWVkaWF0ZSBCRSBwb3NpdGlvbiBVSU0KLSsgICAg Ly8gYW5kIHBsYWNlIGl0IGF0IEJFIGJ5dGUgNyBvZiBWUlQsIHdpdGggYWxsIG90aGVyIGJ5dGVz IG9mIFZSVAotKyAgICAvLyB6ZXJvZWQuIENvbXBhbmlvbiB0byB2aW5zZXJ0Yi9oOyBjaG9vc2Vz IGFuIGltbWVkaWF0ZSBCRSBwb3NpdGlvbgotKyAgICAvLyBhbmQgbGFuZHMgdGhlIHJlc3VsdCBh dCB0aGUgbG93IGJ5dGUgb2YgVlJUICg9IGxvdyBieXRlIG9mIG1mdnNyZCkuCi0rICAgIC8vICAg dmV4dHJhY3R1YjogVlJULmJ5dGVbN10gKEJFKSDihpAgVlJCLmJ5dGVbVUlNXSAoQkUpLCByZXN0 ID0gMAotKyAgICAvLyAgIHZleHRyYWN0dWg6IFZSVC5ieXRlWzZdIChCRSkg4oaQIFZSQi5ieXRl W1VJTV0gICAoQkUpCi0rICAgIC8vICAgICAgICAgICAgICAgVlJULmJ5dGVbN10gKEJFKSDihpAg VlJCLmJ5dGVbVUlNKzFdIChCRSksIHJlc3QgPSAwCi0rICAgIGNhc2UgNTI1OiAgICAvLyB2ZXh0 cmFjdHViCi0rICAgIGNhc2UgNTg5OiB7ICAvLyB2ZXh0cmFjdHVoCi0rICAgICAgbWVtc2V0KHIs IDAsIHNpemVvZihyKSk7Ci0rICAgICAgaWYgKHhvID09IDU4OSkgewotKyAgICAgICAgcls5XSA9 IGJbMTUgLSB1aW1tXTsgIC8vIFZSVCBCRSBieXRlIDYg4oaQIFZSQiBCRSBieXRlIFVJTQotKyAg ICAgICAgcls4XSA9IGJbMTQgLSB1aW1tXTsgIC8vIFZSVCBCRSBieXRlIDcg4oaQIFZSQiBCRSBi eXRlIFVJTSsxCi0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHJbOF0gPSBiWzE1IC0gdWltbV07 ICAvLyBWUlQgQkUgYnl0ZSA3IOKGkCBWUkIgQkUgYnl0ZSBVSU0KLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVIx MCB2aW5zYnJ4IChYTz03ODMpIC8gdmluc2hyeCAoWE89ODQ3KSA9PT0KLSsgICAgLy8gUmlnaHQt aW5kZXhlZCAoTEUtbmF0dXJhbCkgYnl0ZS9oYWxmd29yZCBpbnNlcnQgZnJvbSBHUFIuIFJBJ3MK LSsgICAgLy8gbG93IDQgYml0cyBzdXBwbHkgdGhlIGJ5dGUgcG9zaXRpb24gKG1vZCAxNik7IGZv ciB2aW5zaHJ4IHRoZQotKyAgICAvLyBwb3NpdGlvbiBpcyBhbHNvIG1hc2tlZCB0byBldmVuICgm IDB4RSkgc28gdGhlIGhhbGZ3b3JkIGlzCi0rICAgIC8vIDItYnl0ZSBhbGlnbmVkLiBSQidzIGxv dyA4IC8gMTYgYml0cyBhcmUgaW5zZXJ0ZWQ7IG90aGVyIGJ5dGVzCi0rICAgIC8vIG9mIFZSVCBh cmUgdW5jaGFuZ2VkLiBSQSBhbmQgUkIgYXJlIEdQUnMgKE5PVCBWUnMpIOKAlCBzaW0ncwotKyAg ICAvLyBwcmUtZmV0Y2hlZCBgYWAgYW5kIGBiYCBmcm9tIGdldFZSQnl0ZXMgYXJlIHVudXNlZCBo ZXJlLgotKyAgICBjYXNlIDc4MzogICAgLy8gdmluc2JyeAotKyAgICBjYXNlIDg0NzogeyAgLy8g dmluc2hyeAotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihpbnQodnJh KSkpOwotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihpbnQodnJiKSkp OwotKyAgICAgIGdldFZSQnl0ZXModnJ0LCByKTsgIC8vIHN0YXJ0IGZyb20gY3VycmVudCBWUlQK LSsgICAgICBjb25zdCBib29sIGlzSGFsZiA9ICh4byA9PSA4NDcpOwotKyAgICAgIGNvbnN0IHVp bnQzMl90IHBvcyA9IGlzSGFsZiA/IHVpbnQzMl90KHJhX3ZhbCAmIDB4RVVMTCkKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1aW50MzJfdChyYV92YWwgJiAweEZVTEwpOwot KyAgICAgIHJbcG9zXSA9ICh1aW50OF90KShyYl92YWwgJiAweEZGVUxMKTsKLSsgICAgICBpZiAo aXNIYWxmKSB7Ci0rICAgICAgICByW3BvcyArIDFdID0gKHVpbnQ4X3QpKChyYl92YWwgPj4gOCkg JiAweEZGVUxMKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVIxMCB2aW5zdyAoWE89MjA3KSAvIHZpbnNkIChY Tz00NjMpID09PQotKyAgICAvLyBWUlRbVUlNKjg6VUlNKjgrTi0xXSAoQkUgYml0cykg4oaQIFJC IGxvdyBOIGJpdHMsIHdoZXJlIE4gPSAzMiBvciA2NC4KLSsgICAgLy8gUkIgaXMgYSBHUFIgKHRo ZSBgdnJiYCBmaWVsZCBhdCBzaW0gYml0cyAxNS4uMTEpLiBVSU0gaXMgYXQgc2ltCi0rICAgIC8v IGJpdHMgMjAuLjE2ICg9IHRoZSBgdWltbWAgLyBgdnJhYCBkZWNvZGUpLiBPdGhlciBieXRlcyBv ZiBWUlQgYXJlCi0rICAgIC8vIHVuY2hhbmdlZCwgc28gd2UgcmVhZCBWUlQgZmlyc3QgdGhlbiBw YXRjaCBVSU0uLlVJTSsoTi84LTEpLgotKyAgICBjYXNlIDIwNzogICAgLy8gdmluc3cKLSsgICAg Y2FzZSA0NjM6IHsgIC8vIHZpbnNkCi0rICAgICAgdWludDY0X3QgcmJfdmFsID0gVTY0KGdldFJl Z2lzdGVyKGludCh2cmIpKSk7Ci0rICAgICAgZ2V0VlJCeXRlcyh2cnQsIHIpOyAgLy8gc3RhcnQg ZnJvbSBjdXJyZW50IFZSVAotKyAgICAgIGNvbnN0IGludCB3aWR0aCA9ICh4byA9PSA0NjMpID8g OCA6IDQ7ICAvLyBieXRlcwotKyAgICAgIC8vIEJFIGJ5dGUgVUlNK2kgb2YgVlJUID0gTEUgYnl0 ZSAoMTUgLSBVSU0gLSBpKS4KLSsgICAgICAvLyBGb3Igdmluc2QsIFJCLmR3b3JkWzBdIChCRSkg PSBiaXRzIDU2Li42MyBvZiByYl92YWwgKGhvc3QgTFNCIGVuZAotKyAgICAgIC8vIG9mIHRoZSBH UFIg4oCUIHJlY2FsbCBVNjQoKSBwdXRzIHRoZSBjYW5vbmljYWwgNjQtYml0IHZhbHVlIGluIGEK LSsgICAgICAvLyBob3N0IHVpbnQ2NF90IHdpdGggYml0IDYzID0gTVNCKS4KLSsgICAgICAvLyBG b3Igdmluc3csIHNvdXJjZSBpcyBSQlszMjo2M10gPSBsb3cgMzIgYml0cyBvZiByYl92YWwuCi0r ICAgICAgdWludDY0X3Qgc3JjID0gKHdpZHRoID09IDgpID8gcmJfdmFsIDogKHJiX3ZhbCAmIDB4 RkZGRkZGRkZVTEwpOwotKyAgICAgIGNvbnN0IGludCBzcmNNc2JTaGlmdCA9ICh3aWR0aCAqIDgp IC0gODsgIC8vIDU2IG9yIDI0Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsr KSB7Ci0rICAgICAgICByWzE1IC0gdWltbSAtIGldID0gKHVpbnQ4X3QpKHNyYyA+PiAoc3JjTXNi U2hpZnQgLSA4ICogaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBQT1dFUjgrIHZicGVybXEgKFhPPTEzNTY9MHg1 NEMpOiBwZXItYnl0ZSBiaXQgcGVybXV0ZSA9PT0KLSsgICAgLy8gRm9yIGVhY2ggaSBpbiAwLi4x NSwgdGFrZSBWUkIgQkUtYnl0ZSBpICg9IHNpbSBiWzE1LWldKTsgaWYgaXRzCi0rICAgIC8vIGhp Z2ggYml0IGlzIHNldCwgcGVybVtpXT0wOyBlbHNlIHBlcm1baV0gPSBiaXQgYXQgQkUgcG9zaXRp b24KLSsgICAgLy8gKGxvdyA3IGJpdHMpIG9mIFZSQS4gSVNBIHNheXMgcGVybVswLi4xNV0gZ28g aW50byBWUlQuZHdbMV0gbG93Ci0rICAgIC8vIDE2IGJpdHMsIGJ1dCBvbiByZWFsIExFIHNpbGlj b24gdGhlIGJpdG1hcCBpcyBvYnNlcnZhYmxlIGluIGR3WzBdCi0rICAgIC8vIGxvdyAxNiBiaXRz IOKAlCBpLmUuLCByZWNvdmVyYWJsZSB2aWEgbWZ2c3JkLiBNYXRjaCB0aGF0IG9ic2VydmFibGUK LSsgICAgLy8gYmVoYXZpb3VyOiB3cml0ZSB0aGUgYml0bWFwIGludG8gc2ltIGJ5dGVzWzguLjld ICh3aGVyZSBtZnZzcmQKLSsgICAgLy8gcmVhZHMgZHdbMF0gZnJvbSksIHplcm8gdGhlIHJlc3Qu Ci0rICAgIGNhc2UgMTM1NjogewotKyAgICAgIHVpbnQ4X3QgcGVybVsxNl07Ci0rICAgICAgZm9y IChpbnQgayA9IDA7IGsgPCAxNjsgaysrKSB7Ci0rICAgICAgICB1aW50OF90IGN0bCA9IGJbMTUg LSBrXTsKLSsgICAgICAgIGlmIChjdGwgJiAweDgwKSB7Ci0rICAgICAgICAgIHBlcm1ba10gPSAw OwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgaW50IHAgPSBjdGwgJiAweDdGOwotKyAg ICAgICAgICBpbnQgbGVfaWR4ID0gMTUgLSAocCAvIDgpOwotKyAgICAgICAgICBpbnQgYml0X2lu X2J5dGUgPSA3IC0gKHAgJSA4KTsKLSsgICAgICAgICAgcGVybVtrXSA9IChhW2xlX2lkeF0gPj4g Yml0X2luX2J5dGUpICYgMTsKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgdWludDhfdCBs byA9IDAsIGhpID0gMDsKLSsgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgaGkgPSAo aGkgPDwgMSkgfCBwZXJtW2tdOwotKyAgICAgIGZvciAoaW50IGsgPSA4OyBrIDwgMTY7IGsrKykg bG8gPSAobG8gPDwgMSkgfCBwZXJtW2tdOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7 IGkrKykgcltpXSA9IDA7Ci0rICAgICAgcls4XSA9IGxvOwotKyAgICAgIHJbOV0gPSBoaTsKLSsg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIFZBLWZv cm0gb3BzIHZtbGFkZHVobSAoWE89MzQpLCB2c2VsIChYTz00MiksIHZwZXJtIChYTz00MykgYXJl Ci0rICAgIC8vIHBlZWxlZCBvZmYgaW4gdGhlIHByZS1kaXNwYXRjaCBhYm92ZSAoc2VlICJWQS1m b3JtIHByZS1kaXNwYXRjaCIKLSsgICAgLy8gY29tbWVudCBuZWFyIHRoZSB0b3Agb2YgdGhpcyBm dW5jdGlvbiksIHNpbmNlIHRoZSAxMS1iaXQgWE8KLSsgICAgLy8gbWFzayBjb25mbGF0ZXMgVlJD IGludG8gdGhlIGNhc2UgbGFiZWwuCi0rCi0rICAgIC8vID09PSBVbnBhY2sgaGlnaCBzaWduZWQg KEJFLW51bWJlcmluZyA9IExFIGluZGljZXMgOC4uMTUpID09PQotKyAgICAvLyB2dXBraHNiOiBW UlRbaV0gPSBzaWduX2V4dGVuZF90b18xNihWUkFbaSswLi43XSkuIE9uIExFIHN0b3JhZ2Ugd2l0 aAotKyAgICAvLyBCRS1uYW1lZCAiaGlnaCIgYmVpbmcgdGhlIGxvdy1pbmRleGVkIGJ5dGVzLCB2 dXBraHNiIHNpZ24tZXh0ZW5kcyB0aGUKLSsgICAgLy8gbG93IDggYnl0ZXMgb2YgVlJBIGludG8g OCBoYWxmd29yZHMuIFBQQzY0TEUgd2FzbSBjYWxscyB0aGVzZSB0aGUKLSsgICAgLy8gImhpZ2gi IGxhbmVzIHBlciBQUEMgY29udmVudGlvbjsgdGhlIEpJVCBjb21wZW5zYXRlcyBpbnRlcm5hbGx5 IHZpYQotKyAgICAvLyB0aGUgdnVwa2xzYi92dXBraHNiIHN3YXAgZG9jdW1lbnRlZCBpbiBNYWNy b0Fzc2VtYmxlci1wcGM2NC1pbmwuaC4KLSsgICAgY2FzZSA1MjY6ICAvLyB2dXBraHNiIChoaWdo IHNpZ25lZCBieXRlIOKGkiBoYWxmd29yZCkKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7 IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdClM QU5FX1M4KGIsIDggKyBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIGNhc2UgNTkwOiAgLy8gdnVwa2hzaCAoaGlnaCBzaWduZWQgaGFsZndvcmQg 4oaSIHdvcmQpCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAg IFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3QpKGludDMyX3QpTEFORV9TMTYoYiwgNCArIGkp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2Fz ZSAxNjE0OiAvLyB2dXBraHN3IChoaWdoIHNpZ25lZCB3b3JkIOKGkiBkd29yZCkgUE9XRVI4Kwot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9V NjQociwgaSwgKHVpbnQ2NF90KShpbnQ2NF90KUxBTkVfUzMyKGIsIDIgKyBpKSk7Ci0rICAgICAg fQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNjU0OiAgLy8g dnVwa2xzYiAobG93IHNpZ25lZCBieXRlIOKGkiBoYWxmd29yZCkg4oCUIFBQQyBMRTogdGFrZXMg aGlnaCBsYW5lcwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAg ICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KShpbnQxNl90KUxBTkVfUzgoYiwgaSkpOwot KyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDcx ODogIC8vIHZ1cGtsc2ggKGxvdyBzaWduZWQgaGFsZndvcmQg4oaSIHdvcmQpCi0rICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAo dWludDMyX3QpKGludDMyX3QpTEFORV9TMTYoYiwgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDE3NDI6IC8vIHZ1cGtsc3cgKGxvdyBz aWduZWQgd29yZCDihpIgZHdvcmQpCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCAodWludDY0X3QpKGludDY0X3QpTEFORV9T MzIoYiwgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KwotKyAgICAvLyA9PT0gUGFjayAoc2F0dXJhdGUgb3IgbW9kdWxvKSA9PT0KLSsgICAgLy8KLSsg ICAgLy8gdnBrKiBkZWZpbml0aW9ucyBhcmUgQkUtc3BlY2lmaWVkOgotKyAgICAvLyBWVC5ieXRl WzAuLjddID0gc2F0dXJhdGUoVkEuaGFsZndvcmRbMC4uN10pLCBWVC5ieXRlWzguLjE1XSA9Ci0r ICAgIC8vIHNhdHVyYXRlKFZCLmhhbGZ3b3JkWzAuLjddKSAoQkUtbnVtYmVyZWQgdGhyb3VnaG91 dCkuIE9uCi0rICAgIC8vIFBQQzY0TEUgcmVnaXN0ZXIgc3RvcmFnZSB0aGF0IGludmVydHMgdG86 IExFIGJ5dGVzIDAtNyA9IFZCJ3MKLSsgICAgLy8gc2F0dXJhdGVkIGhhbGZ3b3JkcywgTEUgYnl0 ZXMgOC0xNSA9IFZBJ3MuCi0rICAgIC8vCi0rICAgIC8vICAgdnBrc2h1cyA9IFhPIDI3MCAgIChz MTYg4oaSIHU4IHNhdCkKLSsgICAgLy8gICB2cGtzaHNzID0gWE8gMzk4ICAgKHMxNiDihpIgczgg c2F0KQotKyAgICAvLyAgIHZwa3N3dXMgPSBYTyAzMzQgICAoczMyIOKGkiB1MTYgc2F0KQotKyAg ICAvLyAgIHZwa3N3c3MgPSBYTyA0NjIgICAoczMyIOKGkiBzMTYgc2F0KQotKyAgICAvLyBUaGUg c2ltIHByZXZpb3VzbHkgaGFkIHRocmVlIG9mIHRoZXNlIGZvdXIgbGFiZWxzIHJvdGF0ZWQKLSsg ICAgLy8gKDI3MD12cGtzaHNzLCAzMzQ9dnBrc2h1cywgMzk4PXZwa3N3dXMpIHNvIGV2ZXJ5IGk4 eDE2L2kxNng4Ci0rICAgIC8vIG5hcnJvd18qIGNhbGwgc2lsZW50bHkgdXNlZCB0aGUgd3Jvbmcg c2F0dXJhdGlvbiBraW5kIG9yCi0rICAgIC8vIGxhbmUgd2lkdGgg4oCUIHZwa3Noc3Mgd2FzIGNv bXBsZXRlbHkgYWJzZW50LgotKyAgICBjYXNlIDM5ODogeyAvLyB2cGtzaHNzIChzaWduZWQgaGFs ZndvcmQg4oaSIHNpZ25lZCBieXRlKQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsr KSB7Ci0rICAgICAgICBpbnQgdiA9IExBTkVfUzE2KGIsIGkpOwotKyAgICAgICAgaWYgKHYgPiBJ TlQ4X01BWCkgdiA9IElOVDhfTUFYOwotKyAgICAgICAgaWYgKHYgPCBJTlQ4X01JTikgdiA9IElO VDhfTUlOOwotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3QpKGludDhfdCl2KTsK LSsgICAgICB9Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAg IGludCB2ID0gTEFORV9TMTYoYSwgaSk7Ci0rICAgICAgICBpZiAodiA+IElOVDhfTUFYKSB2ID0g SU5UOF9NQVg7Ci0rICAgICAgICBpZiAodiA8IElOVDhfTUlOKSB2ID0gSU5UOF9NSU47Ci0rICAg ICAgICBTRVRfTEFORV9VOChyLCA4ICsgaSwgKHVpbnQ4X3QpKGludDhfdCl2KTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ2 MjogeyAvLyB2cGtzd3NzIChzaWduZWQgd29yZCDihpIgc2lnbmVkIGhhbGZ3b3JkKQotKyAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBpbnQ2NF90IHYgPSBMQU5F X1MzMihiLCBpKTsKLSsgICAgICAgIGlmICh2ID4gSU5UMTZfTUFYKSB2ID0gSU5UMTZfTUFYOwot KyAgICAgICAgaWYgKHYgPCBJTlQxNl9NSU4pIHYgPSBJTlQxNl9NSU47Ci0rICAgICAgICBTRVRf TEFORV9VMTYociwgaSwgKHVpbnQxNl90KShpbnQxNl90KXYpOwotKyAgICAgIH0KLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgaW50NjRfdCB2ID0gTEFORV9T MzIoYSwgaSk7Ci0rICAgICAgICBpZiAodiA+IElOVDE2X01BWCkgdiA9IElOVDE2X01BWDsKLSsg ICAgICAgIGlmICh2IDwgSU5UMTZfTUlOKSB2ID0gSU5UMTZfTUlOOwotKyAgICAgICAgU0VUX0xB TkVfVTE2KHIsIDQgKyBpLCAodWludDE2X3QpKGludDE2X3Qpdik7Ci0rICAgICAgfQotKyAgICAg IHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyNzA6IHsgLy8g dnBrc2h1cyAoc2lnbmVkIGhhbGZ3b3JkIOKGkiB1bnNpZ25lZCBieXRlLCBzYXQpCi0rICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIGludCB2ID0gTEFORV9TMTYo YiwgaSk7Ci0rICAgICAgICBpZiAodiA+IFVJTlQ4X01BWCkgdiA9IFVJTlQ4X01BWDsKLSsgICAg ICAgIGlmICh2IDwgMCkgdiA9IDA7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCAodWludDhf dCl2KTsKLSsgICAgICB9Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsg ICAgICAgIGludCB2ID0gTEFORV9TMTYoYSwgaSk7Ci0rICAgICAgICBpZiAodiA+IFVJTlQ4X01B WCkgdiA9IFVJTlQ4X01BWDsKLSsgICAgICAgIGlmICh2IDwgMCkgdiA9IDA7Ci0rICAgICAgICBT RVRfTEFORV9VOChyLCA4ICsgaSwgKHVpbnQ4X3Qpdik7Ci0rICAgICAgfQotKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzMzQ6IHsgLy8gdnBrc3d1 cyAoc2lnbmVkIHdvcmQg4oaSIHVuc2lnbmVkIGhhbGZ3b3JkLCBzYXQpCi0rICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIGludDY0X3QgdiA9IExBTkVfUzMyKGIs IGkpOwotKyAgICAgICAgaWYgKHYgPiBVSU5UMTZfTUFYKSB2ID0gVUlOVDE2X01BWDsKLSsgICAg ICAgIGlmICh2IDwgMCkgdiA9IDA7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQx Nl90KXYpOwotKyAgICAgIH0KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewot KyAgICAgICAgaW50NjRfdCB2ID0gTEFORV9TMzIoYSwgaSk7Ci0rICAgICAgICBpZiAodiA+IFVJ TlQxNl9NQVgpIHYgPSBVSU5UMTZfTUFYOwotKyAgICAgICAgaWYgKHYgPCAwKSB2ID0gMDsKLSsg ICAgICAgIFNFVF9MQU5FX1UxNihyLCA0ICsgaSwgKHVpbnQxNl90KXYpOwotKyAgICAgIH0KLSsg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBQ T1dFUjkgY29tcGFyZSBub3QtZXF1YWwgKHZjbXBuZXtiLGgsd30pIOKAlCBSYz0wIGFuZCBSYz0x ID09PQotKyAgICBjYXNlIDc6ICAgIC8vIHZjbXBuZWIKLSsgICAgY2FzZSAxMDMxOiAvLyB2Y21w bmViLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgICAgU0VU X0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBpKSAhPSBMQU5FX1U4KGIsIGkpID8gMHhGRiA6IDAp OwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUoMTYsIDEpOyBicmVhazsKLSsgICAgY2FzZSA3 MTogICAvLyB2Y21wbmVoCi0rICAgIGNhc2UgMTA5NTogLy8gdmNtcG5laC4KLSsgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIExB TkVfVTE2KGEsIGkpICE9IExBTkVfVTE2KGIsIGkpID8gMHhGRkZGIDogMCk7Ci0rICAgICAgfQot KyAgICAgIFZDTVBfRE9ORSg4LCAyKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTM1OiAgLy8gdmNtcG5l dwotKyAgICBjYXNlIDExNTk6IC8vIHZjbXBuZXcuCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAotKyAgICAgICAgICAgICAg ICAgICAgIExBTkVfVTMyKGEsIGkpICE9IExBTkVfVTMyKGIsIGkpID8gMHhGRkZGRkZGRnUgOiAw KTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDQsIDQpOyBicmVhazsKLSsgICAgI3VuZGVm IFZDTVBfRE9ORQotKwotKyAgICAvLyA9PT0gUG9wdWxhdGlvbiBjb3VudCBwZXIgYnl0ZSAoUE9X RVI4KSA9PT0KLSsgICAgY2FzZSAxNzk1OiB7IC8vIHZwb3BjbnRiIChYTyAweDcwMyA9IDE3OTUp LiBWUkEgZmllbGQgdW51c2VkLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykg ewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3QpX19idWlsdGluX3BvcGNvdW50 KExBTkVfVTgoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gdnNsZG9pOiBWUlQgPSAoVlJBIHx8IFZSQikg c2hpZnRlZCBsZWZ0IGJ5IFNIIGJ5dGVzIChTSCBhdCBiaXRzIDIyLi4yNSkgPT09Ci0rICAgIGNh c2UgNDQ6IGNhc2UgNDU6IGNhc2UgNDY6IGNhc2UgNDc6IHsKLSsgICAgICAvLyBTSCBpcyBhdCBi aXRzIDIyLi4yNSAoUFBDKSDihpIgTFNCIGJpdHMgNi4uOSBvZiB0aGUgaW5zdHJ1Y3Rpb24g4oaS Ci0rICAgICAgLy8gKGluc3RydWN0aW9uQml0cyA+PiA2KSAmIDB4Ri4gT3VyIFhPIG1hc2sgYWxy ZWFkeSBib3R0b21zLW91dCBhdAotKyAgICAgIC8vIGJpdCAwLCBzbyBleHRyYWN0IGZyb20gdGhl IHJhdyBpbnN0cnVjdGlvbi4KLSsgICAgICB1aW50MzJfdCBzaCA9IChpbnN0ci0+aW5zdHJ1Y3Rp b25CaXRzKCkgPj4gNikgJiAweEY7Ci0rICAgICAgdWludDhfdCBjYXRbMzJdOwotKyAgICAgIG1l bWNweShjYXQsIGEsIDE2KTsKLSsgICAgICBtZW1jcHkoY2F0ICsgMTYsIGIsIDE2KTsKLSsgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIHJbaV0gPSBjYXRbc2gg KyBpXTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAg fQotKwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAot KyAgICAgICAgICAiZGVjb2RlVk1YOiB1bmltcGxlbWVudGVkIFhPPSV1IChpbnN0cnVjdGlvbiAw eCUwOHgpIiwgeG8sCi0rICAgICAgICAgIGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSk7Ci0rICB9 Ci0rCi0rdm14X2RvbmU6Ci0rICAjdW5kZWYgTEFORV9VOAotKyAgI3VuZGVmIExBTkVfUzgKLSsg ICN1bmRlZiBMQU5FX1UxNgotKyAgI3VuZGVmIExBTkVfUzE2Ci0rICAjdW5kZWYgTEFORV9VMzIK LSsgICN1bmRlZiBMQU5FX1MzMgotKyAgI3VuZGVmIExBTkVfVTY0Ci0rICAjdW5kZWYgTEFORV9T NjQKLSsgICN1bmRlZiBTRVRfTEFORV9VOAotKyAgI3VuZGVmIFNFVF9MQU5FX1UxNgotKyAgI3Vu ZGVmIFNFVF9MQU5FX1UzMgotKyAgI3VuZGVmIFNFVF9MQU5FX1U2NAotKyAgOyAgLy8gZW1wdHkg c3RtdCBmb3IgbGFiZWwKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBkZWNv ZGVWU1g6IE1ham9yIG9wY29kZSA2MCAoWFgxLWZvcm0sIFhYMi1mb3JtKQotKy8vIG1mdnNyZCwg bXR2c3JkLCBtdHZzcnd6LCBtdHZzcndzLCB4c2N2ZHBzcCwgeHNjdmRwc3BuLCB4c2N2c3BkcCwK LSsvLyB4c2N2c3BkcG4sIHh4YnJkCi0rCi0rdm9pZCBTaW11bGF0b3I6OmRlY29kZVZTWChTaW1J bnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIC8vIFZTWCBtYWpvciBvcGNvZGUgNjAgY292ZXJzIFhY MS9YWDIvWFgzL1hYNCBmb3Jtcy4gV2UgZGlzcGF0Y2ggWFg0Ci0rICAvLyAoeHhzZWwpIGZpcnN0 IGJlY2F1c2UgaXRzIFhPIGlzIG9ubHkgMiBiaXRzIChhdCBJU0EgMjYtMjcgPSBzaW0KLSsgIC8v IGJpdHMgNS00KSwgYW5kIHRoZSBYQyByZWdpc3RlciBmaWVsZCBhdCBJU0EgMjEtMjUgd291bGQg b3RoZXJ3aXNlCi0rICAvLyBwcm9kdWNlIDMyIGRpZmZlcmVudCA5LWJpdCBYTyB2YWx1ZXMgdG8g ZW51bWVyYXRlIGluIHRoZSBzd2l0Y2guCi0rICAvLyBQZWVsIG9mZiBhbnkgaW5zdHJ1Y3Rpb24g d2l0aCBYWDQgWE89MyAoeHhzZWwpLiBObyBYWDIvWFgzIG9wIGN1cnJlbnRseQotKyAgLy8gZW1p dHRlZCBieSB0aGUgSklUIGhhcyBzaW0gYml0cyAoNSw0KSA9PSAzLgotKyAgaWYgKGluc3RyLT5i aXRzKDUsIDQpID09IDMpIHsKLSsgICAgLy8geHhzZWwgWFQsWEEsWEIsWEMgIChWQS1saWtlIFhY NC1mb3JtKS4KLSsgICAgLy8gICBYVFtpXSA9IChYQVtpXSAmIH5YQ1tpXSkgfCAoWEJbaV0gJiBY Q1tpXSkKLSsgICAgLy8gUmVnaXN0ZXIgZmllbGRzOiBYQS9YQi9YVCBwZXItYnl0ZTsgWEMgYXQg SVNBIGJpdHMgMjEtMjUgKHNpbQotKyAgICAvLyBiaXRzIDEwLTYpIHdpdGggQ1ggZXh0ZW5zaW9u IGF0IElTQSBiaXQgMjggKHNpbSBiaXQgMykuCi0rICAgIGludCB4YSA9IGludChpbnN0ci0+cmFW YWx1ZSgpIHwgKGluc3RyLT5iaXQoMikgPDwgNSkpOwotKyAgICBpbnQgeGIgPSBpbnQoaW5zdHIt PnJiVmFsdWUoKSB8IChpbnN0ci0+Yml0KDEpIDw8IDUpKTsKLSsgICAgaW50IHh0ID0gaW50KGlu c3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgIGludCB4YyA9IGlu dChpbnN0ci0+Yml0cygxMCwgNikgfCAoaW5zdHItPmJpdCgzKSA8PCA1KSk7Ci0rICAgIHVpbnQ4 X3QgYWJbMTZdLCBiYlsxNl0sIGNiWzE2XSwgcmVzdWx0WzE2XTsKLSsgICAgZ2V0VlNSMTI4KHhh LCBhYik7Ci0rICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICBnZXRWU1IxMjgoeGMsIGNiKTsK LSsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgcmVzdWx0W2ldID0g KHVpbnQ4X3QpKChhYltpXSAmIH5jYltpXSkgfCAoYmJbaV0gJiBjYltpXSkpOwotKyAgICB9Ci0r ICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgLy8g VGhlIHJlbWFpbmluZyBmb3JtcyAoWFgxL1hYMi9YWDMpIHNoYXJlIGEgOS1iaXQgWE8gYXQgSVNB IGJpdHMKLSsgIC8vIDIxLTI5IChzaW0gYml0cyAxMC0yKS4gRm9yIFhYMyB0aGlzIGlzICg4LWJp dCBYTyA8PCAxKSB8IEFYOyBmb3IKLSsgIC8vIFhYMiB0aGUgZnVsbCA5IGJpdHMgYXJlIHRoZSBY TyAobm8gQVggZmllbGQpLgotKyAgdWludDMyX3QgeG8gPSBpbnN0ci0+Yml0cygxMCwgMik7Ci0r ICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICB1aW50MzJfdCByYiA9IGluc3Ry LT5yYlZhbHVlKCk7Ci0rCi0rICBzd2l0Y2ggKHhvKSB7Ci0rICAgIC8vIHhzY3ZkcHNwIC8geHNj dmRwc3BuIC8geHNjdnNwZHAgLyB4c2N2c3BkcG4gLyB4eGJyZCBhcmUKLSsgICAgLy8gWFgyLWZv cm06IFhUL1hCIGFyZSBlYWNoIDYtYml0ICg1LWJpdCBmaWVsZCArIFRYL0JYIGV4dGVuc2lvbiBh dAotKyAgICAvLyBzaW0gYml0cyAwLzEpLiBQb3N0LVBoYXNlLTIgdGhlIEpJVCBlbWl0cyB0aGVz ZSB3aXRoIFNpbWQxMjgKLSsgICAgLy8gdGFyZ2V0cyAoZW5jb2RpbmcgMzItNjMpLCB3aGljaCBy ZXF1aXJlIHRoZSBleHRlbnNpb24gYml0IHRvCi0rICAgIC8vIHNlbGVjdCBWUi1zcGFjZSBpbnN0 ZWFkIG9mIEZQUi1zcGFjZS4gVGhlIHByZXZpb3VzIGNvZGUgdXNlZAotKyAgICAvLyBvbmx5IHRo ZSA1LWJpdCBmaWVsZCwgc28gYW55IFZSLXNwYWNlIHRhcmdldCBzaWxlbnRseSBjbG9iYmVyZWQK LSsgICAgLy8gRlBSIDAuLjMxIGFuZCB0aGUgcG9zdC1zcGxhdCBmYml0cyBpbiBzcGxhdFg0IG5l dmVyIHJlYWNoZWQgdGhlCi0rICAgIC8vIHZlY3RvciBsYW5lcy4KLSsgICAgY2FzZSAyNjU6IHsK LSsgICAgICAvLyB4c2N2ZHBzcDogZG91Ymxl4oaSc2luZ2xlIHdpdGggc05hTiBxdWlldGluZy4g VGhlIElTQSBzYXlzCi0rICAgICAgLy8gcmVzdWx0IGxhbmRzIGF0IFhUWzA6MzFdIChCRSB3b3Jk IDAgPSBMRSBieXRlcyAxMi4uMTUpIGFuZAotKyAgICAgIC8vIFhUWzMyOjEyN10gaXMgInVuZGVm aW5lZCIuIFJlYWwgUE9XRVI5IHNpbGljb24gYWN0dWFsbHkKLSsgICAgICAvLyBkdXBsaWNhdGVz IHRoZSByZXN1bHQgaW50byBCRSB3b3JkIDEgYXMgd2VsbCwgc28gdGhlIGJ5dGVzCi0rICAgICAg Ly8gYXQgTEUgOC4uMTEgaG9sZCB0aGUgc2FtZSBzaW5nbGUuIFRoZSBKSVQncwotKyAgICAgIC8v IHJlcGxhY2VMYW5lRmxvYXQzMng0IGxvd2VyaW5nIGRlcGVuZHMgb24gdGhpczogaXQgZm9sbG93 cwotKyAgICAgIC8vIHhzY3ZkcHNwbiB3aXRoIGB4eGluc2VydHcg4oCmLCAxMmAsIHdoaWNoIHJl YWRzIFhCLndvcmRbMV0KLSsgICAgICAvLyAoTEUgYnl0ZXMgOC4uMTEpLiBaZXJvaW5nIHRob3Nl IGJ5dGVzIGhlcmUgd291bGQgc2lsZW50bHkKLSsgICAgICAvLyBsb3NlIHRoZSBzaW5nbGUgdW5k ZXIgc2ltLiBNaXJyb3IgSFcuCi0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQo MCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9u Qml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl07Ci0rICAgICAg Z2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgLy8gU291cmNlIGRvdWJsZSBhdCBCRSBEVzAgPSBM RSBieXRlcyA4Li4xNSBvZiB4Yi4KLSsgICAgICB1aW50NjRfdCBkYml0cyA9IDA7Ci0rICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIGRiaXRzIHw9ICgodWludDY0X3QpYmJbOCArIGld KSA8PCAoaSAqIDgpOwotKyAgICAgIGRvdWJsZSBmcmI7Ci0rICAgICAgbWVtY3B5KCZmcmIsICZk Yml0cywgc2l6ZW9mKGZyYikpOwotKyAgICAgIGZsb2F0IHJlc3VsdCA9IGRlbW90ZURvdWJsZVBy ZXNlcnZpbmdOYU4oZnJiKTsKLSsgICAgICB1aW50MzJfdCBmYml0czsKLSsgICAgICBtZW1jcHko JmZiaXRzLCAmcmVzdWx0LCBzaXplb2YoZmJpdHMpKTsKLSsgICAgICBpZiAoKGZiaXRzICYgMHg3 RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmIChmYml0cyAmIDB4MDA3RkZGRkZ1KSAhPSAwKSB7 Ci0rICAgICAgICBmYml0cyB8PSAweDAwNDAwMDAwdTsKLSsgICAgICB9Ci0rICAgICAgdWludDhf dCBvdXRbMTZdOwotKyAgICAgIG1lbXNldChvdXQsIDAsIDgpOwotKyAgICAgIC8vIEJFIHdvcmQg MSAoTEUgOC4uMTEpIGFuZCBCRSB3b3JkIDAgKExFIDEyLi4xNSkgYm90aCA9IGZiaXRzLgotKyAg ICAgIGZvciAoaW50IG9mZiA6IHs4LCAxMn0pIHsKLSsgICAgICAgIG91dFtvZmZdICAgICA9ICh1 aW50OF90KShmYml0cyk7Ci0rICAgICAgICBvdXRbb2ZmICsgMV0gPSAodWludDhfdCkoZmJpdHMg Pj4gOCk7Ci0rICAgICAgICBvdXRbb2ZmICsgMl0gPSAodWludDhfdCkoZmJpdHMgPj4gMTYpOwot KyAgICAgICAgb3V0W29mZiArIDNdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDI0KTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgMjY3OiB7Ci0rICAgICAgLy8geHNjdmRwc3BuOiBzYW1lIGFzIHhzY3ZkcHNwIGJ1dCBu b24tc2lnbmFsaW5nLiBTYW1lIEhXLW9ic2VydmVkCi0rICAgICAgLy8gd29yZC0xIGR1cGxpY2F0 aW9uIChzZWUgeHNjdmRwc3AgY29tbWVudCBhYm92ZSkuCi0rICAgICAgaW50IHh0ID0gaW50KHJ0 IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5z dHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBi YlsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgdWludDY0X3QgZGJpdHMg PSAwOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBkYml0cyB8PSAoKHVpbnQ2 NF90KWJiWzggKyBpXSkgPDwgKGkgKiA4KTsKLSsgICAgICBkb3VibGUgZnJiOwotKyAgICAgIG1l bWNweSgmZnJiLCAmZGJpdHMsIHNpemVvZihmcmIpKTsKLSsgICAgICBmbG9hdCByZXN1bHQgPSBk ZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGZyYik7Ci0rICAgICAgdWludDMyX3QgZmJpdHM7Ci0r ICAgICAgbWVtY3B5KCZmYml0cywgJnJlc3VsdCwgc2l6ZW9mKGZiaXRzKSk7Ci0rICAgICAgdWlu dDhfdCBvdXRbMTZdOwotKyAgICAgIG1lbXNldChvdXQsIDAsIDgpOwotKyAgICAgIGZvciAoaW50 IG9mZiA6IHs4LCAxMn0pIHsKLSsgICAgICAgIG91dFtvZmZdICAgICA9ICh1aW50OF90KShmYml0 cyk7Ci0rICAgICAgICBvdXRbb2ZmICsgMV0gPSAodWludDhfdCkoZmJpdHMgPj4gOCk7Ci0rICAg ICAgICBvdXRbb2ZmICsgMl0gPSAodWludDhfdCkoZmJpdHMgPj4gMTYpOwotKyAgICAgICAgb3V0 W29mZiArIDNdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDI0KTsKLSsgICAgICB9Ci0rICAgICAgc2V0 VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzkzOiB7 Ci0rICAgICAgLy8geHZjdmRwc3A6IGNvbnZlcnQgdHdvIGRvdWJsZXMgdG8gdHdvIHNpbmdsZXMs IHJlcGxpY2F0aW5nIGVhY2gKLSsgICAgICAvLyByZXN1bHQgYWNyb3NzIGl0cyBkd29yZC4gQkUg d29yZHMgPSBbcyhCRV9kdzApLCBzKEJFX2R3MCksCi0rICAgICAgLy8gcyhCRV9kdzEpLCBzKEJF X2R3MSldLiBTSUdOQUxJTkcgZm9ybSBwZXIgSVNBOiBzTmFOIGlucHV0cyBhcmUKLSsgICAgICAv LyBxdWlldGVkIChoaWdoLW9yZGVyIGZyYWN0aW9uIGJpdCBzZXQgaW4gcmVzdWx0KS4KLSsgICAg ICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhi ID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsK LSsgICAgICB1aW50OF90IGJiWzE2XSwgb3V0WzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJi KTsKLSsgICAgICB1aW50MzJfdCBmYml0c1syXTsKLSsgICAgICAvLyBCRV9kdzAgPSBMRSBieXRl cyA4Li4xNSwgQkVfZHcxID0gTEUgYnl0ZXMgMC4uNy4KLSsgICAgICBmb3IgKGludCBkdyA9IDA7 IGR3IDwgMjsgZHcrKykgewotKyAgICAgICAgaW50IGxlT2ZmID0gKGR3ID09IDApID8gOCA6IDA7 Ci0rICAgICAgICB1aW50NjRfdCBkYml0cyA9IDA7Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDg7IGkrKykgewotKyAgICAgICAgICBkYml0cyB8PSAoKHVpbnQ2NF90KWJiW2xlT2ZmICsg aV0pIDw8IChpICogOCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBkb3VibGUgZnJiOwotKyAgICAg ICAgbWVtY3B5KCZmcmIsICZkYml0cywgc2l6ZW9mKGZyYikpOwotKyAgICAgICAgZmxvYXQgcmVz dWx0ID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihmcmIpOwotKyAgICAgICAgbWVtY3B5KCZm Yml0c1tkd10sICZyZXN1bHQsIHNpemVvZih1aW50MzJfdCkpOwotKyAgICAgICAgaWYgKChmYml0 c1tkd10gJiAweDdGODAwMDAwdSkgPT0gMHg3RjgwMDAwMHUgJiYKLSsgICAgICAgICAgICAoZmJp dHNbZHddICYgMHgwMDdGRkZGRnUpICE9IDApIHsKLSsgICAgICAgICAgZmJpdHNbZHddIHw9IDB4 MDA0MDAwMDB1OyAgLy8gcXVpZXQgc05hTiByZXN1bHQKLSsgICAgICAgIH0KLSsgICAgICB9Ci0r ICAgICAgLy8gTEUgd29yZHM6IFtzKGR3MSksIHMoZHcxKSwgcyhkdzApLCBzKGR3MCldCi0rICAg ICAgLy8gKExFIHdvcmQgMCA9IEJFIHdvcmQgMyA9IHMoZHcxKTsgTEUgd29yZCAzID0gQkUgd29y ZCAwID0gcyhkdzApKS4KLSsgICAgICB1aW50MzJfdCBsZVdvcmRzWzRdID0ge2ZiaXRzWzFdLCBm Yml0c1sxXSwgZmJpdHNbMF0sIGZiaXRzWzBdfTsKLSsgICAgICBmb3IgKGludCB3ID0gMDsgdyA8 IDQ7IHcrKykgewotKyAgICAgICAgb3V0W3cgKiA0XSAgICAgPSAodWludDhfdClsZVdvcmRzW3dd OwotKyAgICAgICAgb3V0W3cgKiA0ICsgMV0gPSAodWludDhfdCkobGVXb3Jkc1t3XSA+PiA4KTsK LSsgICAgICAgIG91dFt3ICogNCArIDJdID0gKHVpbnQ4X3QpKGxlV29yZHNbd10gPj4gMTYpOwot KyAgICAgICAgb3V0W3cgKiA0ICsgM10gPSAodWludDhfdCkobGVXb3Jkc1t3XSA+PiAyNCk7Ci0r ICAgICAgfQotKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKyAgICBjYXNlIDIxNjogICAgLy8geHZjdmRwc3h3czogZG91YmxlIOKGkiBzaWduZWQgd29y ZCwgc2F0dXJhdGluZywgUlRaICh2ZWN0b3IpCi0rICAgIGNhc2UgMjAwOiB7ICAvLyB4dmN2ZHB1 eHdzOiBkb3VibGUg4oaSIHVuc2lnbmVkIHdvcmQsIHNhdHVyYXRpbmcsIFJUWiAodmVjdG9yKQot KyAgICAgIC8vICAgc3JjMSA6PSBYQi5kd29yZF9CRVswXTsgc3JjMiA6PSBYQi5kd29yZF9CRVsx XQotKyAgICAgIC8vICAgcjEgOj0gQ29udmVydERQdG9TYXQoc3JjMSk7IHIyIDo9IENvbnZlcnRE UHRvU2F0KHNyYzIpCi0rICAgICAgLy8gICBYVC53b3JkX0JFWzBdIDo9IHIxOyBYVC53b3JkX0JF WzFdIDo9IHIxIChyZXBsaWNhdGVkKQotKyAgICAgIC8vICAgWFQud29yZF9CRVsyXSA6PSByMjsg WFQud29yZF9CRVszXSA6PSByMiAocmVwbGljYXRlZCkKLSsgICAgICAvLyBTYXR1cmF0aW9uOiBz aWduZWQgY2xhbXBzIHRvIFtJTlQzMl9NSU4sIElOVDMyX01BWF0gd2l0aCBOYU7ihpJJTlQzMl9N SU47Ci0rICAgICAgLy8gICAgICAgICAgICAgdW5zaWduZWQgY2xhbXBzIHRvIFswLCBVSU5UMzJf TUFYXSB3aXRoIE5hTuKGkjAgYW5kIG5lZ+KGkjAuCi0rICAgICAgLy8gQkVfZHcwID0gTEUgYnl0 ZXMgOC4uMTU7IEJFX2R3MSA9IExFIGJ5dGVzIDAuLjcuCi0rICAgICAgYm9vbCBpc1NpZ25lZCA9 ICh4byA9PSAyMTYpOwotKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8 IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMo KSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZdOwotKyAg ICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAgIGNvbnN0IGludCBzcmNPZmZzZXRzWzJdID0g ezgsIDB9OyAgIC8vIEJFX2R3MCAoTEUgOC4uMTUpLCBCRV9kdzEgKExFIDAuLjcpCi0rICAgICAg dWludDMyX3QgcmVzdWx0c1syXTsKLSsgICAgICBmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IDI7 IGxhbmUrKykgewotKyAgICAgICAgdWludDY0X3QgZGJpdHMgPSAwOwotKyAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCA4OyBqKyspIHsKLSsgICAgICAgICAgZGJpdHMgfD0gKCh1aW50NjRfdCli YltzcmNPZmZzZXRzW2xhbmVdICsgal0pIDw8IChqICogOCk7Ci0rICAgICAgICB9Ci0rICAgICAg ICBkb3VibGUgZHZhbDsKLSsgICAgICAgIG1lbWNweSgmZHZhbCwgJmRiaXRzLCBzaXplb2YoZHZh bCkpOwotKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZHZhbCkpIHsKLSsgICAgICAgICAgcmVzdWx0 c1tsYW5lXSA9IGlzU2lnbmVkID8gMHg4MDAwMDAwMHUgOiAwdTsKLSsgICAgICAgIH0gZWxzZSBp ZiAoaXNTaWduZWQpIHsKLSsgICAgICAgICAgaWYgKGR2YWwgPj0gMjE0NzQ4MzY0Ny4wKSB7Ci0r ICAgICAgICAgICAgcmVzdWx0c1tsYW5lXSA9IDB4N0ZGRkZGRkZ1OwotKyAgICAgICAgICB9IGVs c2UgaWYgKGR2YWwgPD0gLTIxNDc0ODM2NDguMCkgewotKyAgICAgICAgICAgIHJlc3VsdHNbbGFu ZV0gPSAweDgwMDAwMDAwdTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICByZXN1 bHRzW2xhbmVdID0gKHVpbnQzMl90KShpbnQzMl90KWR2YWw7ICAvLyBSVFoKLSsgICAgICAgICAg fQotKyAgICAgICAgfSBlbHNlIHsgIC8vIHVuc2lnbmVkCi0rICAgICAgICAgIGlmIChkdmFsIDw9 IDAuMCkgewotKyAgICAgICAgICAgIHJlc3VsdHNbbGFuZV0gPSAwdTsKLSsgICAgICAgICAgfSBl bHNlIGlmIChkdmFsID49IDQyOTQ5NjcyOTUuMCkgewotKyAgICAgICAgICAgIHJlc3VsdHNbbGFu ZV0gPSAweEZGRkZGRkZGdTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICByZXN1 bHRzW2xhbmVdID0gKHVpbnQzMl90KWR2YWw7ICAvLyBSVFoKLSsgICAgICAgICAgfQotKyAgICAg ICAgfQotKyAgICAgIH0KLSsgICAgICAvLyBSZXBsaWNhdGVkIGxheW91dDogQkUgd29yZHMgW3Ix LCByMSwgcjIsIHIyXTsgaW4gTEUgYnl0ZXMKLSsgICAgICAvLyBbcjIsIHIyLCByMSwgcjFdIChM RSB3b3JkIDAgPSBCRSB3b3JkIDMgPSByMiwgTEUgd29yZCAzID0gQkUgd29yZCAwID0gcjEpLgot KyAgICAgIHVpbnQzMl90IGxlV29yZHNbNF0gPSB7cmVzdWx0c1sxXSwgcmVzdWx0c1sxXSwgcmVz dWx0c1swXSwgcmVzdWx0c1swXX07Ci0rICAgICAgZm9yIChpbnQgdyA9IDA7IHcgPCA0OyB3Kysp IHsKLSsgICAgICAgIG91dFt3ICogNF0gICAgID0gKHVpbnQ4X3QpbGVXb3Jkc1t3XTsKLSsgICAg ICAgIG91dFt3ICogNCArIDFdID0gKHVpbnQ4X3QpKGxlV29yZHNbd10gPj4gOCk7Ci0rICAgICAg ICBvdXRbdyAqIDQgKyAyXSA9ICh1aW50OF90KShsZVdvcmRzW3ddID4+IDE2KTsKLSsgICAgICAg IG91dFt3ICogNCArIDNdID0gKHVpbnQ4X3QpKGxlV29yZHNbd10gPj4gMjQpOwotKyAgICAgIH0K LSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAg Y2FzZSAyNDg6ICAgIC8vIHh2Y3ZzeHdkcDogc2lnbmVkIHdvcmQg4oaSIGRvdWJsZSAodmVjdG9y KQotKyAgICBjYXNlIDIzMjogeyAgLy8geHZjdnV4d2RwOiB1bnNpZ25lZCB3b3JkIOKGkiBkb3Vi bGUgKHZlY3RvcikKLSsgICAgICAvLyAgIHNyYzEgOj0gWEIud29yZF9CRVswXTsgc3JjMiA6PSBY Qi53b3JkX0JFWzJdCi0rICAgICAgLy8gICBYVC5kd29yZF9CRVswXSA6PSBDb252ZXJ0KHNyYzEp OyBYVC5kd29yZF9CRVsxXSA6PSBDb252ZXJ0KHNyYzIpCi0rICAgICAgLy8gQkUgd29yZCAwID0g TEUgYnl0ZXMgMTIuLjE1OyBCRSB3b3JkIDIgPSBMRSBieXRlcyA0Li43LgotKyAgICAgIC8vIE91 dHB1dCBCRSBkd29yZCAwID0gTEUgYnl0ZXMgOC4uMTU7IEJFIGR3b3JkIDEgPSBMRSBieXRlcyAw Li43LgotKyAgICAgIC8vIE5vIE5hTiBoYW5kbGluZyBuZWVkZWQgKGludGVnZXIgc291cmNlKS4K LSsgICAgICBib29sIGlzU2lnbmVkID0gKHhvID09IDI0OCk7Ci0rICAgICAgaW50IHh0ID0gaW50 KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgo aW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhf dCBiYlsxNl0sIG91dFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgY29u c3QgaW50IHNyY09mZnNldHNbMl0gPSB7MTIsIDR9OwotKyAgICAgIGNvbnN0IGludCBkc3RPZmZz ZXRzWzJdID0gezgsIDB9OwotKyAgICAgIGZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgMjsgbGFu ZSsrKSB7Ci0rICAgICAgICB1aW50MzJfdCBiaXRzID0gKHVpbnQzMl90KWJiW3NyY09mZnNldHNb bGFuZV1dIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW3NyY09mZnNl dHNbbGFuZV0gKyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJf dCliYltzcmNPZmZzZXRzW2xhbmVdICsgMl0gPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KWJiW3NyY09mZnNldHNbbGFuZV0gKyAzXSA8PCAyNCk7Ci0rICAgICAg ICBkb3VibGUgZHZhbCA9IGlzU2lnbmVkID8gKGRvdWJsZSkoaW50MzJfdCliaXRzIDogKGRvdWJs ZSliaXRzOwotKyAgICAgICAgdWludDY0X3QgZGJpdHM7Ci0rICAgICAgICBtZW1jcHkoJmRiaXRz LCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7 IGkrKykgewotKyAgICAgICAgICBvdXRbZHN0T2Zmc2V0c1tsYW5lXSArIGldID0gKHVpbnQ4X3Qp KGRiaXRzID4+IChpICogOCkpOwotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBzZXRWU1Ix MjgoeHQsIG91dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0NTc6IHsKLSsg ICAgICAvLyB4dmN2c3BkcDogY29udmVydCB0d28gc2luZ2xlcyB0byB0d28gZG91Ymxlcy4gU0lH TkFMSU5HIGZvcm0KLSsgICAgICAvLyBwZXIgSVNBOiBzTmFOIGlucHV0cyBhcmUgcXVpZXRlZCBp biB0aGUgcmVzdWx0IChiaXQgNTEgc2V0KS4KLSsgICAgICAvLyAgIHNyYzEgOj0gWEIud29yZF9C RVswXTsgc3JjMiA6PSBYQi53b3JkX0JFWzJdCi0rICAgICAgLy8gICBYVC5kd29yZF9CRVswXSA6 PSBDb252ZXJ0U1B0b0RQKHNyYzEpCi0rICAgICAgLy8gICBYVC5kd29yZF9CRVsxXSA6PSBDb252 ZXJ0U1B0b0RQKHNyYzIpCi0rICAgICAgLy8gQkUgd29yZCAwID0gTEUgYnl0ZXMgMTIuLjE1OyBC RSB3b3JkIDIgPSBMRSBieXRlcyA0Li43LgotKyAgICAgIC8vIE91dHB1dCBCRSBkd29yZCAwID0g TEUgYnl0ZXMgOC4uMTU7IEJFIGR3b3JkIDEgPSBMRSBieXRlcyAwLi43LgotKyAgICAgIGludCB4 dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQo cmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAg IHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAg ICAgIC8vIHNyYzEgZnJvbSBCRSB3b3JkIDAgKExFIDEyLi4xNSksIG91dHB1dCBkd29yZCBhdCBM RSA4Li4xNS4KLSsgICAgICAvLyBzcmMyIGZyb20gQkUgd29yZCAyIChMRSA0Li43KSwgICBvdXRw dXQgZHdvcmQgYXQgTEUgMC4uNy4KLSsgICAgICBjb25zdCBpbnQgc3JjT2Zmc2V0c1syXSA9IHsx MiwgNH07ICAgLy8gTEUgYnl0ZSBvZmZzZXRzIG9mIHdvcmRfQkVbMF0sIHdvcmRfQkVbMl0KLSsg ICAgICBjb25zdCBpbnQgZHN0T2Zmc2V0c1syXSA9IHs4LCAwfTsgICAgLy8gTEUgYnl0ZSBvZmZz ZXRzIG9mIGR3b3JkX0JFWzBdLCBkd29yZF9CRVsxXQotKyAgICAgIGZvciAoaW50IGxhbmUgPSAw OyBsYW5lIDwgMjsgbGFuZSsrKSB7Ci0rICAgICAgICB1aW50MzJfdCBmYml0cyA9ICh1aW50MzJf dCliYltzcmNPZmZzZXRzW2xhbmVdXSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICgodWlu dDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIDFdIDw8IDgpIHwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgMl0gPDwgMTYpIHwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsg M10gPDwgMjQpOwotKyAgICAgICAgZmxvYXQgZnZhbDsKLSsgICAgICAgIG1lbWNweSgmZnZhbCwg JmZiaXRzLCBzaXplb2YoZnZhbCkpOwotKyAgICAgICAgZG91YmxlIGR2YWwgPSBwcm9tb3RlRmxv YXRQcmVzZXJ2aW5nTmFOKGZ2YWwpOwotKyAgICAgICAgdWludDY0X3QgZGJpdHM7Ci0rICAgICAg ICBtZW1jcHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7Ci0rICAgICAgICBpZiAoKGRi aXRzICYgMHg3RkYwMDAwMDAwMDAwMDAwVUxMKSA9PSAweDdGRjAwMDAwMDAwMDAwMDBVTEwgJiYK LSsgICAgICAgICAgICAoZGJpdHMgJiAweDAwMEZGRkZGRkZGRkZGRkZVTEwpICE9IDApIHsKLSsg ICAgICAgICAgZGJpdHMgfD0gMHgwMDA4MDAwMDAwMDAwMDAwVUxMOyAgLy8gcXVpZXQgc05hTiBy ZXN1bHQKLSsgICAgICAgIH0KLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7 Ci0rICAgICAgICAgIG91dFtkc3RPZmZzZXRzW2xhbmVdICsgaV0gPSAodWludDhfdCkoZGJpdHMg Pj4gKGkgKiA4KSk7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHNldFZTUjEyOCh4dCwg b3V0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDMyOTogewotKyAgICAgIC8v IHhzY3ZzcGRwOiBzaW5nbGXihpJkb3VibGUgZnJvbSBCRSB3b3JkIDAgb2YgWEIuIFNJR05BTElO RyBmb3JtOwotKyAgICAgIC8vIGFuIHNOYU4gaW5wdXQgeWllbGRzIGEgcU5hTiByZXN1bHQgd2l0 aCB0aGUgaGlnaC1vcmRlcgotKyAgICAgIC8vIGZyYWN0aW9uIGJpdCAocXVpZXQgYml0KSBzZXQu Ci0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAg IGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkg PDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7 Ci0rICAgICAgLy8gQkUgd29yZCAwID0gTEUgYnl0ZXMgMTIuLjE1IG9mIHhiLgotKyAgICAgIHVp bnQzMl90IGZiaXRzID0gKHVpbnQzMl90KWJiWzEyXSB8Ci0rICAgICAgICAgICAgICAgICAgICAg ICAoKHVpbnQzMl90KWJiWzEzXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAoKHVp bnQzMl90KWJiWzE0XSA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJf dCliYlsxNV0gPDwgMjQpOwotKyAgICAgIGZsb2F0IGZ2YWw7Ci0rICAgICAgbWVtY3B5KCZmdmFs LCAmZmJpdHMsIHNpemVvZihmdmFsKSk7Ci0rICAgICAgZG91YmxlIGR2YWwgPSBwcm9tb3RlRmxv YXRQcmVzZXJ2aW5nTmFOKGZ2YWwpOwotKyAgICAgIHVpbnQ2NF90IGRiaXRzOwotKyAgICAgIG1l bWNweSgmZGJpdHMsICZkdmFsLCBzaXplb2YoZGJpdHMpKTsKLSsgICAgICAvLyBRdWlldCBhbnkg TmFOIHJlc3VsdCAoc2lnbmFsaW5nIGZvcm0pOiBzZXQgYml0IDUxIG9mIG1hbnRpc3NhLgotKyAg ICAgIGlmICgoZGJpdHMgJiAweDdGRjAwMDAwMDAwMDAwMDBVTEwpID09IDB4N0ZGMDAwMDAwMDAw MDAwMFVMTCAmJgotKyAgICAgICAgICAoZGJpdHMgJiAweDAwMEZGRkZGRkZGRkZGRkZVTEwpICE9 IDApIHsKLSsgICAgICAgIGRiaXRzIHw9IDB4MDAwODAwMDAwMDAwMDAwMFVMTDsKLSsgICAgICB9 Ci0rICAgICAgdWludDhfdCBvdXRbMTZdOwotKyAgICAgIG1lbXNldChvdXQsIDAsIDgpOwotKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBvdXRbOCArIGldID0gKHVpbnQ4X3QpKGRi aXRzID4+IChpICogOCkpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIDMzMTogewotKyAgICAgIC8vIHhzY3ZzcGRwbjogbm9uLXNp Z25hbGluZyB2YXJpYW50IG9mIHhzY3ZzcGRwLgotKyAgICAgIGludCB4dCA9IGludChydCB8IChp bnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5p bnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYmJbMTZd OwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAgIHVpbnQzMl90IGZiaXRzID0gKHVp bnQzMl90KWJiWzEyXSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiWzEz XSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiWzE0XSA8PCAx NikgfAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxNV0gPDwgMjQpOwot KyAgICAgIGZsb2F0IGZ2YWw7Ci0rICAgICAgbWVtY3B5KCZmdmFsLCAmZmJpdHMsIHNpemVvZihm dmFsKSk7Ci0rICAgICAgZG91YmxlIGR2YWwgPSBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKGZ2 YWwpOwotKyAgICAgIHVpbnQ2NF90IGRiaXRzOwotKyAgICAgIG1lbWNweSgmZGJpdHMsICZkdmFs LCBzaXplb2YoZGJpdHMpKTsKLSsgICAgICB1aW50OF90IG91dFsxNl07Ci0rICAgICAgbWVtc2V0 KG91dCwgMCwgOCk7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIG91dFs4ICsg aV0gPSAodWludDhfdCkoZGJpdHMgPj4gKGkgKiA4KSk7Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBv dXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzQ3OiB7Ci0rICAgICAgLy8g UE9XRVI5IFhYMi1mb3JtIG9wcyBzaGFyaW5nIFhPPTM0NzsgZGlzYW1iaWd1YXRlZCBieSB0aGUg NS1iaXQKLSsgICAgICAvLyBBIGltbWVkaWF0ZSAoc2ltIGJpdHMgMjAuLjE2KToKLSsgICAgICAv LyAgIEE9MCAgLT4geHN4ZXhwZHAgIChleHRyYWN0IGJpYXNlZCBleHBvbmVudCBpbnRvIDExIExT QnMgb2YgWFQuZHcwKQotKyAgICAgIC8vICAgQT0xNiAtPiB4c2N2aHBkcCAgKEZQMTYgLT4gRlA2 NCkKLSsgICAgICAvLyAgIEE9MTcgLT4geHNjdmRwaHAgIChGUDY0IC0+IEZQMTYpCi0rICAgICAg Ly8gSGFsZiBwbGFjZW1lbnQ6IHRoZSBGUDE2IHZhbHVlIGxpdmVzIGF0IExFIGJ5dGVzIDguLjkg b2YKLSsgICAgICAvLyB0aGUgVlNSICg9IEJFIGJpdHMgNDguLjYzIG9mCi0rICAgICAgLy8gZHdv cmRbMF0pLCB3aXRoIHRoZSByZXN0IG9mIGR3b3JkWzBdIHplcm9lZC4gVGhpcyBtYXRjaGVzIHRo ZQotKyAgICAgIC8vIGx4c2loenggbGF5b3V0IGFscmVhZHkgdXNlZCBieSB0aGUgSklULgotKyAg ICAgIHVpbnQzMl90IGFJbW0gPSAoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4 MUY7Ci0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAg ICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYg MSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl0sIG91dFsxNl07Ci0rICAgICAgZ2V0VlNS MTI4KHhiLCBiYik7Ci0rICAgICAgbWVtc2V0KG91dCwgMCwgMTYpOwotKyAgICAgIGlmIChhSW1t ID09IDE3KSB7Ci0rICAgICAgICAvLyB4c2N2ZHBocDogcmVhZCBGUDY0IGZyb20gQkUgMC4uNjMg b2YgWEIgKExFIGJ5dGVzIDguLjE1KSwKLSsgICAgICAgIC8vIGNvbnZlcnQgdG8gRlAxNiwgcGxh Y2UgYXQgTEUgYnl0ZXMgOC4uOSBvZiBYVC4KLSsgICAgICAgIGRvdWJsZSBkOwotKyAgICAgICAg bWVtY3B5KCZkLCBiYiArIDgsIDgpOwotKyAgICAgICAgdWludDE2X3QgaCA9IGpzOjpmbG9hdDE2 KGQpLnRvUmF3Qml0cygpOwotKyAgICAgICAgb3V0WzhdID0gKHVpbnQ4X3QpKGggJiAweEZGKTsK LSsgICAgICAgIG91dFs5XSA9ICh1aW50OF90KSgoaCA+PiA4KSAmIDB4RkYpOwotKyAgICAgIH0g ZWxzZSBpZiAoYUltbSA9PSAxNikgewotKyAgICAgICAgLy8geHNjdmhwZHA6IHJlYWQgRlAxNiBm cm9tIExFIGJ5dGVzIDguLjkgb2YgWEIsIGNvbnZlcnQgdG8gRlA2NCwKLSsgICAgICAgIC8vIHBs YWNlIGF0IExFIGJ5dGVzIDguLjE1IG9mIFhULgotKyAgICAgICAgdWludDE2X3QgaCA9ICh1aW50 MTZfdCliYls4XSB8ICgodWludDE2X3QpYmJbOV0gPDwgOCk7Ci0rICAgICAgICBkb3VibGUgZCA9 IHN0YXRpY19jYXN0PGRvdWJsZT4oanM6OmZsb2F0MTY6OmZyb21SYXdCaXRzKGgpKTsKLSsgICAg ICAgIG1lbWNweShvdXQgKyA4LCAmZCwgOCk7Ci0rICAgICAgfSBlbHNlIGlmIChhSW1tID09IDAp IHsKLSsgICAgICAgIC8vIHhzeGV4cGRwOiByZWFkIEZQNjQgZnJvbSBMRSBieXRlcyA4Li4xNSBv ZiBYQiwgZXh0cmFjdCBiaWFzZWQKLSsgICAgICAgIC8vIGV4cG9uZW50IChiaXRzIDEuLjExIG9m IHRoZSBJRUVFLTc1NCBkb3VibGUgPSBiaXRzIDUyLi42MiBvZgotKyAgICAgICAgLy8gdGhlIDY0 LWJpdCBwYXR0ZXJuKSwgcGxhY2UgaW50byBYVC5kdzAgd2l0aCByZXN0IHplcm9lZC4KLSsgICAg ICAgIHVpbnQ2NF90IGJpdHMgPSAwOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBp KyspIGJpdHMgfD0gdWludDY0X3QoYmJbOCArIGldKSA8PCAoaSAqIDgpOwotKyAgICAgICAgdWlu dDY0X3QgZXhwID0gKGJpdHMgPj4gNTIpICYgMHg3RkY7Ci0rICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDg7IGkrKykgb3V0WzggKyBpXSA9ICh1aW50OF90KShleHAgPj4gKGkgKiA4KSk7Ci0r ICAgICAgfSBlbHNlIHsKLSsgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAotKyAgICAg ICAgICAgICJkZWNvZGVWU1ggWE89MzQ3IHdpdGggdW5leHBlY3RlZCBBPSV1IChpbnN0ciAweCUw OHgpIiwKLSsgICAgICAgICAgICBhSW1tLCBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOwotKyAg ICAgIH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgY2FzZSA0NzU6IHsKLSsgICAgICAvLyB4eGJyZDogYnl0ZS1yZXZlcnNlIGVhY2ggZG91 Ymxld29yZC4KLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7 Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4g MSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGJiWzE2XSwgb3V0WzE2XTsKLSsgICAgICBn ZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgb3V0 W2ldID0gYmJbNyAtIGldOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBvdXRb OCArIGldID0gYmJbMTUgLSBpXTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFhYMy1mb3JtIHNjYWxhcjogeHNtYXhqZHAg LyB4c21pbmpkcCAoUE9XRVI5KSA9PT0KLSsgICAgLy8KLSsgICAgLy8geHN7bWF4LG1pbn1qZHAg WFQsIFhBLCBYQi4gU2NhbGFyIGlucHV0cyBhdCBCRSBiaXRzIDAuLjYzIG9mCi0rICAgIC8vIFhB IC8gWEIgKD0gTEUgYnl0ZXMgOC4uMTUpOyByZXN1bHQgbGFuZHMgYXQgQkUgMC4uNjMgb2YgWFQK LSsgICAgLy8gKHVwcGVyIGJpdHMgInVuZGVmaW5lZCIgcGVyIElTQSkuCi0rICAgIC8vCi0rICAg IC8vIFNlbWFudGljcyBtYXRjaCBFQ01BLTI2MiBNYXRoLnttYXgsbWlufSAvIHdhc20gZjY0Lntt YXgsbWlufToKLSsgICAgLy8gICAtIE5hTjogaWYgQSBpcyBOYU4gcmV0dXJuIEE7IGVsc2UgaWYg QiBpcyBOYU4gcmV0dXJuIEIuIHNOYU4KLSsgICAgLy8gICAgIHBheWxvYWQgcHJlc2VydmVkIGJp dC1mb3ItYml0IChOT1QgcXVpZXRlZCkuCi0rICAgIC8vICAgLSDCsTAgdGllOiBzaWduZWQtemVy byBvcmRlcmluZy4geHNtYXhqZHAgcmV0dXJucyArMCBmb3IgYW55Ci0rICAgIC8vICAgICBtaXgg b2YgKC0wLCArMCk7IHhzbWluamRwIHJldHVybnMgLTAuCi0rICAgIC8vICAgLSBPdGhlcndpc2U6 IHN0YW5kYXJkIElFRUUgbWF4IC8gbWluLgotKyAgICBjYXNlIDI4ODogY2FzZSAyODk6ICAgIC8v IHhzbWF4amRwICAoWE84PTE0NCDihpIgOS1iaXQgMjg4LzI4OSkKLSsgICAgY2FzZSAzMDQ6IGNh c2UgMzA1OiB7ICAvLyB4c21pbmpkcCAgKFhPOD0xNTIg4oaSIDktYml0IDMwNC8zMDUpCi0rICAg ICAgaW50IHhhID0gaW50KGluc3RyLT5yYVZhbHVlKCkgfCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7 Ci0rICAgICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8 PCA1KSk7Ci0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJp dCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBhYlsxNl0sIGJiWzE2XSwgb3V0WzE2XTsKLSsg ICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAg ICBkb3VibGUgYSwgYjsKLSsgICAgICBtZW1jcHkoJmEsIGFiICsgOCwgOCk7Ci0rICAgICAgbWVt Y3B5KCZiLCBiYiArIDgsIDgpOwotKyAgICAgIGJvb2wgaXNNYXggPSAoeG8gPj4gMSkgPT0gMTQ0 OwotKyAgICAgIGRvdWJsZSByOwotKyAgICAgIGlmIChzdGQ6OmlzbmFuKGEpKSB7Ci0rICAgICAg ICByID0gYTsKLSsgICAgICB9IGVsc2UgaWYgKHN0ZDo6aXNuYW4oYikpIHsKLSsgICAgICAgIHIg PSBiOwotKyAgICAgIH0gZWxzZSBpZiAoYSA9PSAwLjAgJiYgYiA9PSAwLjApIHsKLSsgICAgICAg IC8vIFNpZ25lZC16ZXJvIG9yZGVyaW5nOiBtYXggcGlja3MgKzAsIG1pbiBwaWNrcyAtMC4KLSsg ICAgICAgIGlmIChpc01heCkgewotKyAgICAgICAgICByID0gc3RkOjpzaWduYml0KGEpID8gYiA6 IGE7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICByID0gc3RkOjpzaWduYml0KGEpID8g YSA6IGI7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHIgPSBpc01heCA/ IHN0ZDo6bWF4KGEsIGIpIDogc3RkOjptaW4oYSwgYik7Ci0rICAgICAgfQotKyAgICAgIG1lbXNl dChvdXQsIDAsIDgpOwotKyAgICAgIG1lbWNweShvdXQgKyA4LCAmciwgOCk7Ci0rICAgICAgc2V0 VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBW U1ggWFgzLWZvcm06IHh4cGVybWRpIC0tLQotKyAgICAvLwotKyAgICAvLyB4eHBlcm1kaSBYVCwg WEEsIFhCLCBETToKLSsgICAgLy8gICBYVC5EVzAgPSBYQS5EVyhETVswXSkKLSsgICAgLy8gICBY VC5EVzEgPSBYQi5EVyhETVsxXSkKLSsgICAgLy8gSW4gQkUsIERXMCBpcyBNU0Itc2lkZSwgRFcx IGlzIExTQi1zaWRlLiBPbiBQUEM2NExFIHJlZ2lzdGVyCi0rICAgIC8vIHN0b3JhZ2UsIERXMCA9 IExFIGJ5dGVzIDgtMTUgYW5kIERXMSA9IExFIGJ5dGVzIDAtNy4gVGhlIHNpbSdzCi0rICAgIC8v IHByZXZpb3VzIGltcGxlbWVudGF0aW9uIHVzZWQgdGhlIHJldmVyc2VkICJEVzAgPSBMRSAwLTci Ci0rICAgIC8vIGNvbnZlbnRpb24gd2hpY2ggY2FuY2VsbGVkIGZvciBzZWxmLXN3YXAgcm91bmQt dHJpcHMgYnV0Ci0rICAgIC8vIHByb2R1Y2VkIHdyb25nIGhhbHZlcyB3aGVuIGNoYWluZWQgd2l0 aCBJU0EtY29ycmVjdCBvcHMKLSsgICAgLy8gKG10dnNyZCwgeHhzcGx0dywgbWZ2c3JkKS4KLSsg ICAgY2FzZSAyMDogY2FzZSAyMTogICAgICAgLy8geHhwZXJtZGkgRE09MAotKyAgICBjYXNlIDg0 OiBjYXNlIDg1OiAgICAgICAvLyB4eHBlcm1kaSBETT0xCi0rICAgIGNhc2UgMTQ4OiBjYXNlIDE0 OTogICAgIC8vIHh4cGVybWRpIERNPTIgKD0geHhzd2FwZCB3aGVuIFhBPT1YQikKLSsgICAgY2Fz ZSAyMTI6IGNhc2UgMjEzOiB7ICAgLy8geHhwZXJtZGkgRE09MwotKyAgICAgIHVpbnQ4X3QgZG1f aGkgPSAoeG8gPj4gNykgJiAxOyAgLy8gRE1bMF0KLSsgICAgICB1aW50OF90IGRtX2xvID0gKHhv ID4+IDYpICYgMTsgIC8vIERNWzFdCi0rICAgICAgaW50IHhhID0gaW50KGluc3RyLT5yYVZhbHVl KCkgfCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KGluc3RyLT5y YlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7Ci0rICAgICAgaW50IHh0ID0gaW50KGlu c3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCB4 YV9ieXRlc1sxNl0sIHhiX2J5dGVzWzE2XSwgcmVzdWx0WzE2XTsKLSsgICAgICBnZXRWU1IxMjgo eGEsIHhhX2J5dGVzKTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIHhiX2J5dGVzKTsKLSsgICAgICAv LyBEVzAgaW4gTEUgc3RvcmFnZSBpcyBieXRlcyA4LTE1OyBEVzEgaXMgYnl0ZXMgMC03LgotKyAg ICAgIC8vICAgWFQuRFcwIChyZXN1bHRbOC4uMTVdKSA9IFhBLkRXKGRtX2hpKQotKyAgICAgIC8v ICAgWFQuRFcxIChyZXN1bHRbMC4uN10pICA9IFhCLkRXKGRtX2xvKQotKyAgICAgIC8vIERXKDAp IGlzIGF0IExFIDgsIERXKDEpIGlzIGF0IExFIDAuCi0rICAgICAgbWVtY3B5KHJlc3VsdCArIDgs IHhhX2J5dGVzICsgKGRtX2hpID8gMCA6IDgpLCA4KTsKLSsgICAgICBtZW1jcHkocmVzdWx0LCAg ICAgeGJfYnl0ZXMgKyAoZG1fbG8gPyAwIDogOCksIDgpOwotKyAgICAgIHNldFZTUjEyOCh4dCwg cmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gVlNYIGxvZ2lj YWwgKFhYMy1mb3JtLCBwcmltYXJ5IG9wY29kZSA2MCkgLS0tCi0rICAgIC8vCi0rICAgIC8vIEVh Y2ggdGFrZXMgdHdvIDYtYml0IFZTUiBzb3VyY2VzIFhBL1hCIGFuZCB3cml0ZXMgNi1iaXQgVlNS Ci0rICAgIC8vIGRlc3RpbmF0aW9uIFhULiA4LWJpdCBJU0EgWE8gYXQgYml0cyAyMS0yODsgb3Vy Ci0rICAgIC8vIDktYml0IFhPIGV4dHJhY3Rpb24gKGJpdHMgMTA6MikgaW5jbHVkZXMgdGhlIEFY IGJpdCBhdCBwb3NpdGlvbiAwLAotKyAgICAvLyBzbyBlYWNoIG9wIGFwcGVhcnMgYXMgdHdvIGNv bnNlY3V0aXZlIHZhbHVlcyAoQVg9MCBhbmQgQVg9MSkuCi0rICAgIC8vCi0rICAgIC8vICAgeHhs YW5kIFhULFhBLFhCICAgICBYTz0xMzAgICg5LWJpdDogMjYwLCAyNjEpICBYVCA9IFhBICYgWEIK LSsgICAgLy8gICB4eGxhbmRjIFhULFhBLFhCICAgIFhPPTEzOCAgKDI3NiwgMjc3KSAgICAgICAg IFhUID0gWEEgJiB+WEIKLSsgICAgLy8gICB4eGxvciBYVCxYQSxYQiAgICAgIFhPPTE0NiAgKDI5 MiwgMjkzKSAgICAgICAgIFhUID0gWEEgfCBYQgotKyAgICAvLyAgIHh4bHhvciBYVCxYQSxYQiAg ICAgWE89MTU0ICAoMzA4LCAzMDkpICAgICAgICAgWFQgPSBYQSBeIFhCCi0rICAgIC8vICAgeHhs bm9yIFhULFhBLFhCICAgICBYTz0xNjIgICgzMjQsIDMyNSkgICAgICAgICBYVCA9IH4oWEEgfCBY QikKLSsgICAgLy8gICB4eGxvcmMgWFQsWEEsWEIgICAgIFhPPTE3MCAgKDM0MCwgMzQxKSAgICAg ICAgIFhUID0gWEEgfCB+WEIKLSsgICAgLy8gICB4eGxuYW5kIFhULFhBLFhCICAgIFhPPTE3OCAg KDM1NiwgMzU3KSAgICAgICAgIFhUID0gfihYQSAmIFhCKQotKyAgICAvLyAgIHh4bGVxdiBYVCxY QSxYQiAgICAgWE89MTg2ICAoMzcyLCAzNzMpICAgICAgICAgWFQgPSB+KFhBIF4gWEIpCi0rICAg IC8vCi0rICAgIC8vIFRoZSBlbmNvZGluZyBjb25zdGFudHMgaW4gQXNzZW1ibGVyLXBwYzY0Lmgg bWF0Y2g6IFBQQ194eGxvcj0weEYwMDAwNDkwCi0rICAgIC8vIGhhcyBiaXRzIDQsNywxMCBzZXQg aW4gaXRzIGJhc2UgKFhPPTE0NiBpbiB0aGUgOC1iaXQgZmllbGQpLCB3aGljaAotKyAgICAvLyB1 bmRlciB0aGUgc2ltdWxhdG9yJ3MgOS1iaXQgZXh0cmFjdGlvbiBnaXZlcyAyKjE0Nj0yOTIgKEFY PTAgZGVmYXVsdCkuCi0rICAgIGNhc2UgMjYwOiBjYXNlIDI2MTogIC8vIHh4bGFuZAotKyAgICBj YXNlIDI3NjogY2FzZSAyNzc6ICAvLyB4eGxhbmRjCi0rICAgIGNhc2UgMjkyOiBjYXNlIDI5Mzog IC8vIHh4bG9yCi0rICAgIGNhc2UgMzA4OiBjYXNlIDMwOTogIC8vIHh4bHhvcgotKyAgICBjYXNl IDMyNDogY2FzZSAzMjU6ICAvLyB4eGxub3IKLSsgICAgY2FzZSAzNDA6IGNhc2UgMzQxOiAgLy8g eHhsb3JjCi0rICAgIGNhc2UgMzU2OiBjYXNlIDM1NzogIC8vIHh4bG5hbmQKLSsgICAgY2FzZSAz NzI6IGNhc2UgMzczOiAgLy8geHhsZXF2Ci0rICAgIHsKLSsgICAgICBpbnQgeGEgPSBpbnQoaW5z dHItPnJhVmFsdWUoKSB8IChpbnN0ci0+Yml0KDIpIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBp bnQoaW5zdHItPnJiVmFsdWUoKSB8IChpbnN0ci0+Yml0KDEpIDw8IDUpKTsKLSsgICAgICBpbnQg eHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAg ICB1aW50OF90IGFfYnl0ZXNbMTZdLCBiX2J5dGVzWzE2XSwgcmVzdWx0WzE2XTsKLSsgICAgICBn ZXRWU1IxMjgoeGEsIGFfYnl0ZXMpOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYl9ieXRlcyk7Ci0r ICAgICAgLy8gRGlzcGF0Y2ggb24gdGhlIDgtYml0IElTQSBYTyAoaWdub3JpbmcgQVggYml0IGF0 IHBvc2l0aW9uIDApLgotKyAgICAgIHVpbnQzMl90IHhvOCA9IHhvID4+IDE7Ci0rICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICB1aW50OF90IGEgPSBhX2J5dGVz W2ldLCBiID0gYl9ieXRlc1tpXTsKLSsgICAgICAgIHN3aXRjaCAoeG84KSB7Ci0rICAgICAgICAg IGNhc2UgMTMwOiByZXN1bHRbaV0gPSBhICYgYjsgICAgICAgIGJyZWFrOyAgLy8geHhsYW5kCi0r ICAgICAgICAgIGNhc2UgMTM4OiByZXN1bHRbaV0gPSBhICYgfmI7ICAgICAgIGJyZWFrOyAgLy8g eHhsYW5kYwotKyAgICAgICAgICBjYXNlIDE0NjogcmVzdWx0W2ldID0gYSB8IGI7ICAgICAgICBi cmVhazsgIC8vIHh4bG9yCi0rICAgICAgICAgIGNhc2UgMTU0OiByZXN1bHRbaV0gPSBhIF4gYjsg ICAgICAgIGJyZWFrOyAgLy8geHhseG9yCi0rICAgICAgICAgIGNhc2UgMTYyOiByZXN1bHRbaV0g PSAodWludDhfdCl+KGEgfCBiKTsgIGJyZWFrOyAgLy8geHhsbm9yCi0rICAgICAgICAgIGNhc2Ug MTcwOiByZXN1bHRbaV0gPSBhIHwgKHVpbnQ4X3QpfmI7ICAgIGJyZWFrOyAgLy8geHhsb3JjCi0r ICAgICAgICAgIGNhc2UgMTc4OiByZXN1bHRbaV0gPSAodWludDhfdCl+KGEgJiBiKTsgIGJyZWFr OyAgLy8geHhsbmFuZAotKyAgICAgICAgICBjYXNlIDE4NjogcmVzdWx0W2ldID0gKHVpbnQ4X3Qp fihhIF4gYik7ICBicmVhazsgIC8vIHh4bGVxdgotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAg ICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAg Ly8gPT09IFhYMi1mb3JtOiB4eHNwbHR3IChzcGxhdCB3b3JkIGZyb20gVlJCW1VJTV0gdG8gYWxs IDQgbGFuZXMpID09PQotKyAgICAvLwotKyAgICAvLyB4eHNwbHR3OiBVSU0gc2VsZWN0cyBvbmUg b2YgZm91ciB3b3JkcyBpbiBCRSBudW1iZXJpbmcuIFVJTT0wCi0rICAgIC8vIOKGkiBCRSB3b3Jk IDAgKE1TQiBzaWRlIG9mIHRoZSAxMjggYml0cykuIE9uIFBQQzY0TEUgcmVnaXN0ZXIKLSsgICAg Ly8gc3RvcmFnZSB0aGF0IG1hcHMgdG8gTEUgd29yZCAoMyAtIFVJTSkuIFdpdGggdGhlIGlucHV0 Ci0rICAgIC8vIHsweDExMTExMTExLCAweDIyMjIyMjIyLCAweDMzMzMzMzMzLCAweDQ0NDQ0NDQ0 fTogVUlNPTAKLSsgICAgLy8gc3BsYXRzIDB4NDQ0NDQ0NDQgKD0gTEUgd29yZCAzKSwgVUlNPTMg c3BsYXRzIDB4MTExMTExMTEKLSsgICAgLy8gKD0gTEUgd29yZCAwKS4gVGhlIEpJVCBlbWl0cyB4 eHNwbHR3IFVJTT0xIGFmdGVyIG10dnNyZCBvbiB0aGUKLSsgICAgLy8gUE9XRVI4IHNwbGF0WDQg cGF0aCDigJQgbXR2c3JkIHB1dHMgdGhlIEdQUidzIGxvdyAzMiBiaXRzIGluIEJFCi0rICAgIC8v IHdvcmQgMSAoPSBMRSB3b3JkIDIgb24gSFcpLCBzbyB4eHNwbHR3IFVJTT0xIHBpY2tzIHVwIGV4 YWN0bHkKLSsgICAgLy8gdGhhdCB3b3JkIGFuZCBzcGxhdHMgaXQgdG8gZXZlcnkgbGFuZS4KLSsg ICAgY2FzZSAxNjQ6IHsgIC8vIHh4c3BsdHcKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5z dHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5z dHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50MzJfdCB1aW0gPSAo aW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4MzsKLSsgICAgICB1aW50MzJfdCBs ZUlkeCA9IDMgLSB1aW07ICAvLyBCRSB3b3JkIFVJTSDihpIgTEUgd29yZCAoMy1VSU0pCi0rICAg ICAgdWludDhfdCBiYlsxNl0sIHJlc3VsdFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7 Ci0rICAgICAgdWludDMyX3Qgd29yZCA9ICh1aW50MzJfdCliYltsZUlkeCAqIDRdIHwKLSsgICAg ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltsZUlkeCAqIDQgKyAxXSA8PCA4KSB8Ci0r ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbbGVJZHggKiA0ICsgMl0gPDwgMTYp IHwKLSsgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltsZUlkeCAqIDQgKyAzXSA8 PCAyNCk7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIHJl c3VsdFtpICogNF0gICAgID0gKHVpbnQ4X3QpKHdvcmQgJiAweEZGKTsKLSsgICAgICAgIHJlc3Vs dFtpICogNCArIDFdID0gKHVpbnQ4X3QpKCh3b3JkID4+IDgpICYgMHhGRik7Ci0rICAgICAgICBy ZXN1bHRbaSAqIDQgKyAyXSA9ICh1aW50OF90KSgod29yZCA+PiAxNikgJiAweEZGKTsKLSsgICAg ICAgIHJlc3VsdFtpICogNCArIDNdID0gKHVpbnQ4X3QpKCh3b3JkID4+IDI0KSAmIDB4RkYpOwot KyAgICAgIH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIH0KLSsKLSsgICAgLy8gPT09IFhYMi1mb3JtOiB4eGV4dHJhY3R1dyAoZXh0cmFjdCB3b3Jk IGF0IEJFIGJ5dGUgVUlNLCBwbGFjZSBhdCBCRSB3b3JkIDEpID09PQotKyAgICAvLwotKyAgICAv LyB4eGV4dHJhY3R1dyBYVCwgWEIsIFVJTToKLSsgICAgLy8gICBCeXRlcyBbNDo3XSBvZiBYVCBy ZWNlaXZlIGJ5dGVzIFtVSU06VUlNKzNdIG9mIFhCLiBCeXRlcyBbMDozXQotKyAgICAvLyAgIGFu ZCBbODoxNV0gb2YgWFQgYXJlIHNldCB0byB6ZXJvLgotKyAgICAvLyBVSU0g4oiIIHswLCA0LCA4 LCAxMn0gKGNhbGxlciByZXNwb25zaWJsZSBmb3IgYWxpZ25tZW50KS4KLSsgICAgLy8gQkUgYnl0 ZSBpIOKGlCBMRSBieXRlICgxNS1pKSwgc28gdGhlIHdvcmQgYXQgWEIgQkUgYnl0ZXMgVUlNLi5V SU0rMwotKyAgICAvLyBzaXRzIGF0IFhCIExFIGJ5dGVzICgxMi1VSU0pLi4oMTUtVUlNKSwgYW5k IGxhbmRzIGF0IFhUIExFIGJ5dGVzCi0rICAgIC8vIDguLjExICg9IFhUIEJFIHdvcmQgMSkuCi0r ICAgIGNhc2UgMTY1OiB7ICAvLyB4eGV4dHJhY3R1dwotKyAgICAgIGludCB4dCA9IGludChydCB8 IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3Ry LT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQzMl90IHVp bSA9IChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYgMHhGOwotKyAgICAgIHVpbnQ4 X3QgYmJbMTZdLCByZXN1bHRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAg IG1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKLSsgICAgICAvLyByZXN1bHQuTEVb OC4uMTFdID0gWEIuTEVbKDEyLVVJTSkuLigxNS1VSU0pXSAocHJlc2VydmVzIGJ5dGUgb3JkZXIp LgotKyAgICAgIG1lbWNweShyZXN1bHQgKyA4LCBiYiArICgxMiAtIHVpbSksIDQpOwotKyAgICAg IHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBj YXNlIDE4MDogewotKyAgICAgIC8vIHh4c3BsdGliIFhULCBJTU04IChQT1dFUjksIElTQSAzLjAp OiBzcGxhdCA4LWJpdCBpbW1lZGlhdGUgdG8KLSsgICAgICAvLyBhbGwgMTYgYnl0ZXMgb2YgWFQu IFRoZSBlbmNvZGVyIHdyaXRlcyBgaW1tOCA8PCAxMWAsIHNvIElNTTgKLSsgICAgICAvLyBvY2N1 cGllcyBMRSBiaXRzIDExLi4xODsgVFggYml0IGF0IExFIGJpdCAwIHNlbGVjdHMgdXBwZXIgVlNS LgotKyAgICAgIHVpbnQzMl90IGltbTggPSBpbnN0ci0+Yml0cygxOCwgMTEpOwotKyAgICAgIGlu dCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAg ICAgIHVpbnQ4X3QgeHRfYnl0ZXNbMTZdOwotKyAgICAgIG1lbXNldCh4dF9ieXRlcywgKHVpbnQ4 X3QpaW1tOCwgMTYpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgeHRfYnl0ZXMpOwotKyAgICAgIGJy ZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTgxOiB7Ci0rICAgICAgLy8geHhpbnNlcnR3IFhULCBY QiwgVUlNIChQT1dFUjksIElTQSAzLjApOiBjb3B5IFhCWzMyLi42M10gKHRoZQotKyAgICAgIC8v IGxvdyAzMiBiaXRzIG9mIFhCJ3MgQkUgZG91Ymxld29yZCAwLCB3aGljaCBsaXZlcyBhdCBMRSBi eXRlcwotKyAgICAgIC8vIDgtMTEgb2YgWEIpIGludG8gWFQgYXQgQkUgYnl0ZSBwb3NpdGlvbiBV SU0uIFVJTSDiiIggezAsNCw4LDEyfTsKLSsgICAgICAvLyBkZXN0IG9jY3VwaWVzIFhUIExFIGJ5 dGVzICgxMi1VSU0pLi4oMTUtVUlNKS4gT3RoZXIgYnl0ZXMgb2YKLSsgICAgICAvLyBYVCBhcmUg cHJlc2VydmVkLiBVSU0gYXQgUFBDIGJpdHMgMTEtMTUgPSBMRSBiaXRzIDE2LTIwOyBUWC9CWAot KyAgICAgIC8vIGF0IExFIGJpdHMgMC8xLgotKyAgICAgIHVpbnQzMl90IHVpbSA9IGluc3RyLT5i aXRzKDIwLCAxNik7Ci0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5z dHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZhbHVlKCkg fCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCB4Yl9ieXRlc1sxNl0sIHh0 X2J5dGVzWzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIHhiX2J5dGVzKTsKLSsgICAgICBnZXRW U1IxMjgoeHQsIHh0X2J5dGVzKTsKLSsgICAgICBtZW1jcHkoeHRfYnl0ZXMgKyAoMTIgLSB1aW0p LCB4Yl9ieXRlcyArIDgsIDQpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgeHRfYnl0ZXMpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBYWDItZm9ybTogeHZhYnNzcCAvIHh2 YWJzZHAgKHZlY3RvciBhYnNvbHV0ZSB2YWx1ZSkgPT09Ci0rICAgIGNhc2UgNDA4OiBjYXNlIDQw OTogY2FzZSA0MTA6IGNhc2UgNDExOiB7ICAvLyB4dmFic3NwICsgQVgvQlggYml0cwotKyAgICAg IGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIg PSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwot KyAgICAgIHVpbnQ4X3QgYmJbMTZdLCByZXN1bHRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4Yiwg YmIpOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICB1aW50 MzJfdCBiaXRzID0gKHVpbnQzMl90KWJiW2kgKiA0XSB8Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgKCh1aW50MzJfdCliYltpICogNCArIDFdIDw8IDgpIHwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgMl0gPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAoKHVpbnQzMl90KWJiW2kgKiA0ICsgM10gPDwgMjQpOwotKyAgICAgICAgYml0cyAm PSAweDdGRkZGRkZGdTsgIC8vIGNsZWFyIHNpZ24gYml0Ci0rICAgICAgICByZXN1bHRbaSAqIDRd ICAgICA9ICh1aW50OF90KShiaXRzICYgMHhGRik7Ci0rICAgICAgICByZXN1bHRbaSAqIDQgKyAx XSA9ICh1aW50OF90KSgoYml0cyA+PiA4KSAmIDB4RkYpOwotKyAgICAgICAgcmVzdWx0W2kgKiA0 ICsgMl0gPSAodWludDhfdCkoKGJpdHMgPj4gMTYpICYgMHhGRik7Ci0rICAgICAgICByZXN1bHRb aSAqIDQgKyAzXSA9ICh1aW50OF90KSgoYml0cyA+PiAyNCkgJiAweEZGKTsKLSsgICAgICB9Ci0r ICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgNDcyOiBjYXNlIDQ3MzogY2FzZSA0NzQ6IHsgICAgICAgICAgICAvLyB4dmFic2RwICg0 NzUgdXNlZCBieSB4eGJyZCkKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25C aXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2 XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDI7IGkrKykgewotKyAgICAgICAgdWludDY0X3QgYml0cyA9IDA7Ci0rICAgICAgICBmb3IgKGlu dCBrID0gMDsgayA8IDg7IGsrKykgYml0cyB8PSAoKHVpbnQ2NF90KWJiW2kgKiA4ICsga10pIDw8 IChrICogOCk7Ci0rICAgICAgICBiaXRzICY9IDB4N0ZGRkZGRkZGRkZGRkZGRlVMTDsKLSsgICAg ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSByZXN1bHRbaSAqIDggKyBrXSA9ICh1aW50 OF90KSgoYml0cyA+PiAoayAqIDgpKSAmIDB4RkYpOwotKyAgICAgIH0KLSsgICAgICBzZXRWU1Ix MjgoeHQsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFhY Mi1mb3JtIHVuYXJ5IHZlY3RvciBmbG9hdCBvcHMgKHNpbmdsZSBYQiBvcGVyYW5kLCBubyBBWCkg PT09Ci0rICAgIC8vCi0rICAgIC8vIEVuY29kaW5nOiBvcGNvZGUgNjAsIGJpdHMgNi0xMD1YVCwg MTEtMTUgcmVzZXJ2ZWQsIDE2LTIwPVhCLAotKyAgICAvLyAyMS0yOSA9IDktYml0IFhPIChmdWxs IGZpZWxkKSwgMzA9QlgsIDMxPVRYLiBFeHRyYWN0aW9uIGdpdmVzIHVzCi0rICAgIC8vIHhvID0g WE85IGRpcmVjdGx5IChubyBBWCBiaXQpLiBFdmVyeSBvcCBiZWxvdyBoYXMgYSB1bmlxdWUgWE85 LgotKyAgICAvLwotKyAgICAvLyAgIHh2c3FydHNwICBYTzk9MTM5ICBQUENfeHZzcXJ0c3A9MHhG MDAwMDIyQwotKyAgICAvLyAgIHh2c3FydGRwICBYTzk9MjAzICBQUENfeHZzcXJ0ZHA9MHhGMDAw MDMyQwotKyAgICAvLyAgIHh2bmVnc3AgICBYTzk9NDQxICBQUENfeHZuZWdzcD0weEYwMDAwNkU0 Ci0rICAgIC8vICAgeHZuZWdkcCAgIFhPOT01MDUgIFBQQ194dm5lZ2RwPTB4RjAwMDA3RTQKLSsg ICAgLy8gICB4dnJzcGlwICAgWE85PTE2OSAgUFBDX3h2cnNwaXA9MHhGMDAwMDJBNCAgIChyb3Vu ZCAraW5mID0gY2VpbCkKLSsgICAgLy8gICB4dnJzcGl6ICAgWE85PTE1MyAgUFBDX3h2cnNwaXo9 MHhGMDAwMDI2NCAgIChyb3VuZCB0b3dhcmQgMCA9IHRydW5jKQotKyAgICAvLyAgIHh2cnNwaW0g ICBYTzk9MTg1ICBQUENfeHZyc3BpbT0weEYwMDAwMkU0ICAgKHJvdW5kIC1pbmYgPSBmbG9vcikK LSsgICAgLy8gICB4dnJzcGljICAgWE85PTE3MSAgUFBDX3h2cnNwaWM9MHhGMDAwMDJBQyAgIChy b3VuZCBwZXIgRlBTQ1IpCi0rICAgIC8vICAgeHZyZHBpcCAgIFhPOT0yMzMgIFBQQ194dnJkcGlw PTB4RjAwMDAzQTQKLSsgICAgLy8gICB4dnJkcGl6ICAgWE85PTIxNyAgUFBDX3h2cmRwaXo9MHhG MDAwMDM2NAotKyAgICAvLyAgIHh2cmRwaW0gICBYTzk9MjQ5ICBQUENfeHZyZHBpbT0weEYwMDAw M0U0Ci0rICAgIC8vICAgeHZyZHBpYyAgIFhPOT0yMzUgIFBQQ194dnJkcGljPTB4RjAwMDAzQUMK LSsgICAgLy8gICB4dmN2c3BzeHdzIFhPOT0xNTIgUFBDX3h2Y3ZzcHN4d3M9MHhGMDAwMDI2MCAg KGYzMiDihpIgczMyLCBzYXQpCi0rICAgIC8vICAgeHZjdnNwdXh3cyBYTzk9MTM2IFBQQ194dmN2 c3B1eHdzPTB4RjAwMDAyMjAgIChmMzIg4oaSIHUzMiwgc2F0KQotKyAgICAvLyAgIHh2Y3ZzeHdz cCBYTzk9MTg0ICBQUENfeHZjdnN4d3NwPTB4RjAwMDAyRTAgICAoczMyIOKGkiBmMzIpCi0rICAg IC8vICAgeHZjdnV4d3NwIFhPOT0xNjggIFBQQ194dmN2dXh3c3A9MHhGMDAwMDJBMCAgICh1MzIg 4oaSIGYzMikKLSsgICAgY2FzZSAxMzk6IGNhc2UgMjAzOiAgICAgLy8geHZzcXJ0c3AgLyB4dnNx cnRkcAotKyAgICBjYXNlIDQ0MTogY2FzZSA1MDU6ICAgICAvLyB4dm5lZ3NwIC8geHZuZWdkcAot KyAgICBjYXNlIDE2OTogY2FzZSAyMzM6ICAgICAvLyB4dnJzcGlwIC8geHZyZHBpcCAoY2VpbCkK LSsgICAgY2FzZSAxNTM6IGNhc2UgMjE3OiAgICAgLy8geHZyc3BpeiAvIHh2cmRwaXogKHRydW5j KQotKyAgICBjYXNlIDE4NTogY2FzZSAyNDk6ICAgICAvLyB4dnJzcGltIC8geHZyZHBpbSAoZmxv b3IpCi0rICAgIGNhc2UgMTcxOiBjYXNlIDIzNTogICAgIC8vIHh2cnNwaWMgLyB4dnJkcGljIChy b3VuZC10by1uZWFyZXN0KQotKyAgICBjYXNlIDEzNjogY2FzZSAxNTI6ICAgICAvLyB4dmN2c3B1 eHdzIC8geHZjdnNwc3h3cwotKyAgICBjYXNlIDE2ODogY2FzZSAxODQ6IHsgICAvLyB4dmN2dXh3 c3AgLyB4dmN2c3h3c3AKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8 PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRz KCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsK LSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICBib29sIGlzU3AgPSAoeG8gPT0gMTM5 IHx8IHhvID09IDQ0MSB8fCB4byA9PSAxNjkgfHwgeG8gPT0gMTUzIHx8Ci0rICAgICAgICAgICAg ICAgICAgIHhvID09IDE4NSB8fCB4byA9PSAxNzEgfHwgeG8gPT0gMTM2IHx8IHhvID09IDE1MiB8 fAotKyAgICAgICAgICAgICAgICAgICB4byA9PSAxNjggfHwgeG8gPT0gMTg0KTsKLSsgICAgICBh dXRvIGdldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGkpIC0+IGZsb2F0IHsKLSsgICAgICAg IHVpbnQzMl90IGIgPSAodWludDMyX3QpYnVmW2kgKiA0XSB8Ci0rICAgICAgICAgICAgICAgICAg ICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAg ICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAyXSA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAg ICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgM10gPDwgMjQpOwotKyAgICAgICAgZmxvYXQgZjsg bWVtY3B5KCZmLCAmYiwgc2l6ZW9mKGYpKTsgcmV0dXJuIGY7Ci0rICAgICAgfTsKLSsgICAgICBh dXRvIHNldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGksIGZsb2F0IGYpIHsKLSsgICAgICAg IHVpbnQzMl90IGI7IG1lbWNweSgmYiwgJmYsIHNpemVvZihiKSk7Ci0rICAgICAgICBidWZbaSo0 XT0odWludDhfdCliOyBidWZbaSo0KzFdPSh1aW50OF90KShiPj44KTsKLSsgICAgICAgIGJ1Zltp KjQrMl09KHVpbnQ4X3QpKGI+PjE2KTsgYnVmW2kqNCszXT0odWludDhfdCkoYj4+MjQpOwotKyAg ICAgIH07Ci0rICAgICAgYXV0byBnZXRGNjQgPSBbXSh1aW50OF90KiBidWYsIGludCBpKSAtPiBk b3VibGUgewotKyAgICAgICAgdWludDY0X3QgYiA9IDA7Ci0rICAgICAgICBmb3IgKGludCBrPTA7 azw4O2srKykgYiB8PSAoKHVpbnQ2NF90KWJ1ZltpKjgra10pPDwoayo4KTsKLSsgICAgICAgIGRv dWJsZSBkOyBtZW1jcHkoJmQsICZiLCBzaXplb2YoZCkpOyByZXR1cm4gZDsKLSsgICAgICB9Owot KyAgICAgIGF1dG8gc2V0RjY0ID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgZG91YmxlIGQpIHsK LSsgICAgICAgIHVpbnQ2NF90IGI7IG1lbWNweSgmYiwgJmQsIHNpemVvZihiKSk7Ci0rICAgICAg ICBmb3IgKGludCBrPTA7azw4O2srKykgYnVmW2kqOCtrXT0odWludDhfdCkoYj4+KGsqOCkpOwot KyAgICAgIH07Ci0rICAgICAgLy8gSW50ZWdlciBsYW5lIHJlYWQvd3JpdGUgKHVzZWQgYnkgY29u dmVyc2lvbiBvcHMpLgotKyAgICAgIGF1dG8gc2V0VTMyID0gW10odWludDhfdCogYnVmLCBpbnQg aSwgdWludDMyX3QgdikgewotKyAgICAgICAgYnVmW2kqNF09KHVpbnQ4X3QpdjsgYnVmW2kqNCsx XT0odWludDhfdCkodj4+OCk7Ci0rICAgICAgICBidWZbaSo0KzJdPSh1aW50OF90KSh2Pj4xNik7 IGJ1ZltpKjQrM109KHVpbnQ4X3QpKHY+PjI0KTsKLSsgICAgICB9OwotKyAgICAgIC8vIFNhdHVy YXRlZCBmbG9hdOKGkmludCBjb252ZXJzaW9uIHBlciBQb3dlciBJU0EgdjMuMEI6IGlucHV0IE5h TiBtYXBzCi0rICAgICAgLy8gdG8gMDsgb3V0LW9mLXJhbmdlIHNhdHVyYXRlcyB0byB0aGUgZXh0 cmVtZSBvZiB0aGUgZGVzdGluYXRpb24gdHlwZS4KLSsgICAgICBhdXRvIGZwMnN4dyA9IFtdKGRv dWJsZSBmKSAtPiB1aW50MzJfdCB7Ci0rICAgICAgICBpZiAoc3RkOjppc25hbihmKSkgcmV0dXJu IDA7Ci0rICAgICAgICBpZiAoZiA+PSAoZG91YmxlKUlOVDMyX01BWCkgcmV0dXJuICh1aW50MzJf dClJTlQzMl9NQVg7Ci0rICAgICAgICBpZiAoZiA8PSAoZG91YmxlKUlOVDMyX01JTikgcmV0dXJu ICh1aW50MzJfdClJTlQzMl9NSU47Ci0rICAgICAgICByZXR1cm4gKHVpbnQzMl90KShpbnQzMl90 KXN0ZDo6dHJ1bmMoZik7Ci0rICAgICAgfTsKLSsgICAgICBhdXRvIGZwMnV4dyA9IFtdKGRvdWJs ZSBmKSAtPiB1aW50MzJfdCB7Ci0rICAgICAgICBpZiAoc3RkOjppc25hbihmKSkgcmV0dXJuIDA7 Ci0rICAgICAgICBpZiAoZiA+PSAoZG91YmxlKVVJTlQzMl9NQVgpIHJldHVybiBVSU5UMzJfTUFY OwotKyAgICAgICAgaWYgKGYgPD0gMC4wKSByZXR1cm4gMDsKLSsgICAgICAgIHJldHVybiAodWlu dDMyX3Qpc3RkOjp0cnVuYyhmKTsKLSsgICAgICB9OwotKwotKyAgICAgIGlmIChpc1NwKSB7Ci0r ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgICBmbG9hdCB2 ID0gZ2V0RjMyKGJiLCBpKTsKLSsgICAgICAgICAgZmxvYXQgb3V0ID0gMC4wZjsKLSsgICAgICAg ICAgdWludDMyX3QgaW91dCA9IDA7Ci0rICAgICAgICAgIGJvb2wgaXNJbnQgPSBmYWxzZTsKLSsg ICAgICAgICAgc3dpdGNoICh4bykgewotKyAgICAgICAgICAgIGNhc2UgMTM5OiBvdXQgPSBzdGQ6 OnNxcnQodik7IGJyZWFrOyAgICAgICAgICAgICAgICAvLyB4dnNxcnRzcAotKyAgICAgICAgICAg IGNhc2UgNDQxOiBvdXQgPSAtdjsgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4 dm5lZ3NwCi0rICAgICAgICAgICAgY2FzZSAxNjk6IG91dCA9IHN0ZDo6Y2VpbCh2KTsgYnJlYWs7 ICAgICAgICAgICAgICAgIC8vIHh2cnNwaXAKLSsgICAgICAgICAgICBjYXNlIDE1Mzogb3V0ID0g c3RkOjp0cnVuYyh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgLy8geHZyc3BpegotKyAgICAgICAg ICAgIGNhc2UgMTg1OiBvdXQgPSBzdGQ6OmZsb29yKHYpOyBicmVhazsgICAgICAgICAgICAgICAv LyB4dnJzcGltCi0rICAgICAgICAgICAgY2FzZSAxNzE6IG91dCA9IHN0ZDo6bmVhcmJ5aW50KHYp OyBicmVhazsgICAgICAgICAgIC8vIHh2cnNwaWMKLSsgICAgICAgICAgICBjYXNlIDE1MjogaW91 dCA9IGZwMnN4dyh2KTsgaXNJbnQgPSB0cnVlOyBicmVhazsgICAgLy8geHZjdnNwc3h3cwotKyAg ICAgICAgICAgIGNhc2UgMTM2OiBpb3V0ID0gZnAydXh3KHYpOyBpc0ludCA9IHRydWU7IGJyZWFr OyAgICAvLyB4dmN2c3B1eHdzCi0rICAgICAgICAgICAgY2FzZSAxODQ6IHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4dmN2c3h3c3AKLSsgICAgICAgICAgICAg IHVpbnQzMl90IGJpdHMgPSAodWludDMyX3QpYmJbaSo0XSB8Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrMV08PDgpIHwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCsyXTw8MTYpIHwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCszXTw8MjQpOwotKyAgICAgICAgICAg ICAgb3V0ID0gKGZsb2F0KShpbnQzMl90KWJpdHM7Ci0rICAgICAgICAgICAgICBicmVhazsKLSsg ICAgICAgICAgICB9Ci0rICAgICAgICAgICAgY2FzZSAxNjg6IHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyB4dmN2dXh3c3AKLSsgICAgICAgICAgICAgIHVpbnQz Ml90IGJpdHMgPSAodWludDMyX3QpYmJbaSo0XSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCh1aW50MzJfdCliYltpKjQrMV08PDgpIHwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCsyXTw8MTYpIHwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKHVpbnQzMl90KWJiW2kqNCszXTw8MjQpOwotKyAgICAgICAgICAgICAgb3V0 ID0gKGZsb2F0KSh1aW50MzJfdCliaXRzOwotKyAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAg ICAgICAgfQotKyAgICAgICAgICB9Ci0rICAgICAgICAgIGlmIChpc0ludCkgc2V0VTMyKHJlc3Vs dCwgaSwgaW91dCk7Ci0rICAgICAgICAgIGVsc2Ugc2V0RjMyKHJlc3VsdCwgaSwgb3V0KTsKLSsg ICAgICAgIH0KLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsKLSsgICAgICAgICAgZG91YmxlIHYgPSBnZXRGNjQoYmIsIGkpOwotKyAgICAgICAg ICBkb3VibGUgb3V0ID0gMC4wOwotKyAgICAgICAgICBzd2l0Y2ggKHhvKSB7Ci0rICAgICAgICAg ICAgY2FzZSAyMDM6IG91dCA9IHN0ZDo6c3FydCh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgIC8v IHh2c3FydGRwCi0rICAgICAgICAgICAgY2FzZSA1MDU6IG91dCA9IC12OyBicmVhazsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIHh2bmVnZHAKLSsgICAgICAgICAgICBjYXNlIDIzMzogb3V0 ID0gc3RkOjpjZWlsKHYpOyBicmVhazsgICAgICAgICAgICAgICAgLy8geHZyZHBpcAotKyAgICAg ICAgICAgIGNhc2UgMjE3OiBvdXQgPSBzdGQ6OnRydW5jKHYpOyBicmVhazsgICAgICAgICAgICAg ICAvLyB4dnJkcGl6Ci0rICAgICAgICAgICAgY2FzZSAyNDk6IG91dCA9IHN0ZDo6Zmxvb3Iodik7 IGJyZWFrOyAgICAgICAgICAgICAgIC8vIHh2cmRwaW0KLSsgICAgICAgICAgICBjYXNlIDIzNTog b3V0ID0gc3RkOjpuZWFyYnlpbnQodik7IGJyZWFrOyAgICAgICAgICAgLy8geHZyZHBpYwotKyAg ICAgICAgICB9Ci0rICAgICAgICAgIHNldEY2NChyZXN1bHQsIGksIG91dCk7Ci0rICAgICAgICB9 Ci0rICAgICAgfQotKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKLSsgICAgICBicmVhazsK LSsgICAgfQotKwotKyAgICAvLyA9PT0gWFgzLWZvcm0gdmVjdG9yIGZsb2F0IGNvbXBhcmUgKGVx LCBndCwgZ2UpID09PQotKyAgICAvLyBUaGUgd2FzbSBTSU1EIGNvbXBhcmVzIGVtaXQgdGhlc2Ug YW5kIHVzZSB0aGUgcmVzdWx0IGFzIGEgYml0bWFzay4KLSsgICAgLy8gUGVyIFBvd2VyIElTQTog cmVzdWx0IGlzIGFsbC0xcyBmb3IgdHJ1ZSBsYW5lcywgYWxsLTBzIGZvciBmYWxzZQotKyAgICAv LyAoZm9yIHRoZSBub24tcmVjb3JkaW5nIGZvcm07IGJpdCAwIG9mIFhPIHNlbGVjdHMgcmVjb3Jk IGZvcm0gd2hpY2gKLSsgICAgLy8gd2UgZG9uJ3QgbW9kZWwg4oCUIHdhc20gZG9lc24ndCByZWFk IENSNiBoZXJlKS4KLSsgICAgLy8gRW5jb2RpbmdzOgotKyAgICAvLyAgIDB4RjAwMDAyMTggeHZj bXBlcXNwIChYTzg9NjcpIOKGkiBYTzkgPSAxMzQvMTM1ICgrQVgpLgotKyAgICAvLyAgIDB4RjAw MDAyNTggeHZjbXBndHNwIChYTzg9NzUpIOKGkiBYTzkgPSAxNTAvMTUxLgotKyAgICAvLyAgIDB4 RjAwMDAyOTggeHZjbXBnZXNwIChYTzg9ODMpIOKGkiBYTzkgPSAxNjYvMTY3LgotKyAgICAvLyAg IDB4RjAwMDAzMTggeHZjbXBlcWRwIChYTzg9OTkpIOKGkiBYTzkgPSAxOTgvMTk5LgotKyAgICAv LyAgIDB4RjAwMDAzNTggeHZjbXBndGRwIChYTzg9MTA3KSDihpIgWE85ID0gMjE0LzIxNS4KLSsg ICAgLy8gICAweEYwMDAwMzk4IHh2Y21wZ2VkcCAoWE84PTExNSkg4oaSIFhPOSA9IDIzMC8yMzEu Ci0rICAgIC8vIFJjPTEgcmVjb3JkIGZvcm0gZmxpcHMgSVNBIGJpdCAyMSAoc2ltIGJpdCAxMCks IHlpZWxkaW5nIFhPOSsyNTYKLSsgICAgLy8gKG5vdCBhZGphY2VudCB0byB0aGUgUmM9MCBzbG90 KS4gd2FzbSBuZXZlciBlbWl0cyB0aGUgcmVjb3JkIGZvcm0uCi0rICAgIGNhc2UgMTM0OiBjYXNl IDEzNTogICAgLy8geHZjbXBlcXNwIChYTzg9NjcpCi0rICAgIGNhc2UgMTk4OiBjYXNlIDE5OTog ICAgLy8geHZjbXBlcWRwIChYTzg9OTkpCi0rICAgIGNhc2UgMTUwOiBjYXNlIDE1MTogICAgLy8g eHZjbXBndHNwIChYTzg9NzUpCi0rICAgIGNhc2UgMjE0OiBjYXNlIDIxNTogICAgLy8geHZjbXBn dGRwIChYTzg9MTA3KQotKyAgICBjYXNlIDE2NjogY2FzZSAxNjc6ICAgIC8vIHh2Y21wZ2VzcCAo WE84PTgzKQotKyAgICBjYXNlIDIzMDogY2FzZSAyMzE6IHsgIC8vIHh2Y21wZ2VkcCAoWE84PTEx NSkKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAg ICAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgIGludCB4YSA9IGludChy YSB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDIpICYgMSkgPDwgNSk7Ci0rICAgICAg aW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8 PCA1KTsKLSsgICAgICB1aW50OF90IGFiWzE2XSwgYmJbMTZdLCByZXN1bHRbMTZdOwotKyAgICAg IGdldFZTUjEyOCh4YSwgYWIpOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAgIHVp bnQzMl90IG9wOCA9IHhvID4+IDE7ICAvLyBjYW5vbmljYWwgOC1iaXQgWE8KLSsgICAgICBib29s IGlzRjMyID0gKG9wOCA9PSA2NyB8fCBvcDggPT0gNzUgfHwgb3A4ID09IDgzKTsKLSsgICAgICBi b29sIGlzRXEgID0gKG9wOCA9PSA2NyB8fCBvcDggPT0gOTkpOwotKyAgICAgIGJvb2wgaXNHdCAg PSAob3A4ID09IDc1IHx8IG9wOCA9PSAxMDcpOwotKyAgICAgIGJvb2wgaXNHZSAgPSAob3A4ID09 IDgzIHx8IG9wOCA9PSAxMTUpOwotKyAgICAgICh2b2lkKWlzR2U7Ci0rICAgICAgYXV0byBjbXBG MzIgPSBbJl0oaW50IGkpIC0+IGJvb2wgewotKyAgICAgICAgdWludDMyX3QgYUJpdHMgPSAodWlu dDMyX3QpYWJbaSAqIDRdIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClh YltpICogNCArIDFdIDw8IDgpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJf dClhYltpICogNCArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICgodWlu dDMyX3QpYWJbaSAqIDQgKyAzXSA8PCAyNCk7Ci0rICAgICAgICB1aW50MzJfdCBiQml0cyA9ICh1 aW50MzJfdCliYltpICogNF0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90 KWJiW2kgKiA0ICsgMV0gPDwgOCkgfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQz Ml90KWJiW2kgKiA0ICsgMl0gPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdCliYltpICogNCArIDNdIDw8IDI0KTsKLSsgICAgICAgIGZsb2F0IGZhLCBmYjsKLSsg ICAgICAgIG1lbWNweSgmZmEsICZhQml0cywgc2l6ZW9mKGZhKSk7Ci0rICAgICAgICBtZW1jcHko JmZiLCAmYkJpdHMsIHNpemVvZihmYikpOwotKyAgICAgICAgaWYgKGlzRXEpIHJldHVybiBmYSA9 PSBmYjsKLSsgICAgICAgIGlmIChpc0d0KSByZXR1cm4gZmEgPiBmYjsKLSsgICAgICAgIHJldHVy biBmYSA+PSBmYjsKLSsgICAgICB9OwotKyAgICAgIGF1dG8gY21wRjY0ID0gWyZdKGludCBpKSAt PiBib29sIHsKLSsgICAgICAgIHVpbnQ2NF90IGFCaXRzID0gMCwgYkJpdHMgPSAwOwotKyAgICAg ICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIGFCaXRzIHw9ICgodWludDY0X3QpYWJbaSAq IDggKyBrXSkgPDwgKGsgKiA4KTsKLSsgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysr KSBiQml0cyB8PSAoKHVpbnQ2NF90KWJiW2kgKiA4ICsga10pIDw8IChrICogOCk7Ci0rICAgICAg ICBkb3VibGUgZmEsIGZiOwotKyAgICAgICAgbWVtY3B5KCZmYSwgJmFCaXRzLCBzaXplb2YoZmEp KTsKLSsgICAgICAgIG1lbWNweSgmZmIsICZiQml0cywgc2l6ZW9mKGZiKSk7Ci0rICAgICAgICBp ZiAoaXNFcSkgcmV0dXJuIGZhID09IGZiOwotKyAgICAgICAgaWYgKGlzR3QpIHJldHVybiBmYSA+ IGZiOwotKyAgICAgICAgcmV0dXJuIGZhID49IGZiOwotKyAgICAgIH07Ci0rICAgICAgaWYgKGlz RjMyKSB7Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAg ICB1aW50MzJfdCBtYXNrID0gY21wRjMyKGkpID8gMHhGRkZGRkZGRnUgOiAwOwotKyAgICAgICAg ICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykgewotKyAgICAgICAgICAgIHJlc3VsdFtpICog NCArIGtdID0gKHVpbnQ4X3QpKChtYXNrID4+IChrICogOCkpICYgMHhGRik7Ci0rICAgICAgICAg IH0KLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspIHsKLSsgICAgICAgICAgdWludDY0X3QgbWFzayA9IGNtcEY2NChpKSA/IFVJ TlQ2NF9NQVggOiAwOwotKyAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgewot KyAgICAgICAgICAgIHJlc3VsdFtpICogOCArIGtdID0gKHVpbnQ4X3QpKChtYXNrID4+IChrICog OCkpICYgMHhGRik7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAg c2V0VlNSMTI4KHh0LCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8v ID09PSBYWDMtZm9ybSB2ZWN0b3IgZmxvYXQgYXJpdGhtZXRpYyA9PT0KLSsgICAgLy8gRW5jb2Rp bmc6IGJpdHMgNi0xMD1YVCwgMTEtMTU9WEEsIDE2LTIwPVhCLCAyMS0yOD1YTyAoOCBiaXRzKSwg Mjk9QVgsCi0rICAgIC8vIDMwPUJYLCAzMT1UWC4gV2UgZGlzcGF0Y2hlZCBhYm92ZSB1c2luZyBg Yml0cygxMCwgMilgIHdoaWNoIGlzIGJpdHMKLSsgICAgLy8gMjEtMjkgKDkgYml0cykg4oCUIHRo YXQgaW5jbHVkZXMgdGhlIEFYIHJlZ2lzdGVyLWV4dGVuc2lvbiBiaXQsIHdoaWNoCi0rICAgIC8v IGNoYW5nZXMgZm9yIGV2ZXJ5IFhBIGluIHswLi4zMX0gdnMgezMyLi42M30uIFRvIG1hdGNoIGFs bCA0Ci0rICAgIC8vIChBWCxCWCkgY29tYmluYXRpb25zIG9mIGFuIFhYMyBvcCB3ZSB1c2UgYGNh c2UgeG8zIHwgMHwxfDJ8M2Agd2hlcmUKLSsgICAgLy8geG8zID0gKDgtYml0IFhPKSA8PCAxIChi ZWNhdXNlIFhPIG9jY3VwaWVzIGJpdHMgMS4uOCBvZiBvdXIgOS1iaXQKLSsgICAgLy8gZXh0cmFj dGlvbikuIEhlbHBlciBtYWNybzogZWFjaCBjYXNlIGNvdmVycyBmb3VyIGxhYmVscy4KLSsgICAg I2RlZmluZSBYWDNfQ0FTRV9CQVNFKG5hbWUpIFwKLSsgICAgICBjYXNlICgobmFtZSkgfCAwKTog Y2FzZSAoKG5hbWUpIHwgMSk6Ci0rICAgIGNhc2UgMTI4OiAgY2FzZSAxMjk6ICAvLyB4dmFkZHNw OiA0IMOXIGYzMiBhZGQgKFhPPTY0IOKGkiBiaXRzIDEuLjggPSAxMjgpCi0rICAgIGNhc2UgMTky OiAgY2FzZSAxOTM6ICAvLyB4dmFkZGRwCi0rICAgIGNhc2UgMTQ0OiAgY2FzZSAxNDU6ICAvLyB4 dnN1YnNwCi0rICAgIGNhc2UgMjA4OiAgY2FzZSAyMDk6ICAvLyB4dnN1YmRwCi0rICAgIGNhc2Ug MTYwOiAgY2FzZSAxNjE6ICAvLyB4dm11bHNwCi0rICAgIGNhc2UgMjI0OiAgY2FzZSAyMjU6ICAv LyB4dm11bGRwCi0rICAgIGNhc2UgMTc2OiAgY2FzZSAxNzc6ICAvLyB4dmRpdnNwCi0rICAgIGNh c2UgMjQwOiAgY2FzZSAyNDE6ICAvLyB4dmRpdmRwCi0rICAgIGNhc2UgMzg0OiAgY2FzZSAzODU6 ICAvLyB4dm1heHNwCi0rICAgIGNhc2UgNDQ4OiAgY2FzZSA0NDk6ICAvLyB4dm1heGRwCi0rICAg IGNhc2UgNDAwOiAgY2FzZSA0MDE6ICAvLyB4dm1pbnNwCi0rICAgIGNhc2UgNDY0OiAgY2FzZSA0 NjU6ICAvLyB4dm1pbmRwCi0rICAgIHsKLSsgICAgICAvLyBSZS1leHRyYWN0IHRoZSBjYW5vbmlj YWwgOC1iaXQgWFgzIFhPLgotKyAgICAgIHVpbnQzMl90IHhvMyA9ICh4byA+PiAxKTsKLSsgICAg ICAodm9pZCl4bzM7Ci0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwg NSkpOwotKyAgICAgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgICAgICBpbnQg eGEgPSBpbnQocmEgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAyKSAmIDEpIDw8IDUp OwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+ IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBhYlsxNl0sIGJiWzE2XSwgcmJfYnl0ZXNb MTZdOwotKyAgICAgIGdldFZTUjEyOCh4YSwgYWIpOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIp OwotKwotKyAgICAgIGF1dG8gZ2V0RjMyID0gW10odWludDhfdCogYnVmLCBpbnQgaSkgLT4gZmxv YXQgewotKyAgICAgICAgdWludDMyX3QgYml0cyA9ICh1aW50MzJfdClidWZbaSAqIDRdIHwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDFdIDw8IDgpIHwK LSsgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDJdIDw8IDE2 KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAzXSA8 PCAyNCk7Ci0rICAgICAgICBmbG9hdCBmOwotKyAgICAgICAgbWVtY3B5KCZmLCAmYml0cywgc2l6 ZW9mKGYpKTsKLSsgICAgICAgIHJldHVybiBmOwotKyAgICAgIH07Ci0rICAgICAgYXV0byBzZXRG MzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBmbG9hdCBmKSB7Ci0rICAgICAgICB1aW50MzJf dCBiaXRzOwotKyAgICAgICAgbWVtY3B5KCZiaXRzLCAmZiwgc2l6ZW9mKGJpdHMpKTsKLSsgICAg ICAgIGJ1ZltpICogNF0gICAgID0gKHVpbnQ4X3QpKGJpdHMgJiAweEZGKTsKLSsgICAgICAgIGJ1 ZltpICogNCArIDFdID0gKHVpbnQ4X3QpKChiaXRzID4+IDgpICYgMHhGRik7Ci0rICAgICAgICBi dWZbaSAqIDQgKyAyXSA9ICh1aW50OF90KSgoYml0cyA+PiAxNikgJiAweEZGKTsKLSsgICAgICAg IGJ1ZltpICogNCArIDNdID0gKHVpbnQ4X3QpKChiaXRzID4+IDI0KSAmIDB4RkYpOwotKyAgICAg IH07Ci0rICAgICAgYXV0byBnZXRGNjQgPSBbXSh1aW50OF90KiBidWYsIGludCBpKSAtPiBkb3Vi bGUgewotKyAgICAgICAgdWludDY0X3QgYml0cyA9IDA7Ci0rICAgICAgICBmb3IgKGludCBrID0g MDsgayA8IDg7IGsrKykgYml0cyB8PSAoKHVpbnQ2NF90KWJ1ZltpICogOCArIGtdKSA8PCAoayAq IDgpOwotKyAgICAgICAgZG91YmxlIGQ7Ci0rICAgICAgICBtZW1jcHkoJmQsICZiaXRzLCBzaXpl b2YoZCkpOwotKyAgICAgICAgcmV0dXJuIGQ7Ci0rICAgICAgfTsKLSsgICAgICBhdXRvIHNldEY2 NCA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGksIGRvdWJsZSBkKSB7Ci0rICAgICAgICB1aW50NjRf dCBiaXRzOwotKyAgICAgICAgbWVtY3B5KCZiaXRzLCAmZCwgc2l6ZW9mKGJpdHMpKTsKLSsgICAg ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSBidWZbaSAqIDggKyBrXSA9ICh1aW50OF90 KSgoYml0cyA+PiAoayAqIDgpKSAmIDB4RkYpOwotKyAgICAgIH07Ci0rCi0rICAgICAgLy8gRGlz cGF0Y2ggb24gdGhlIGNhbm9uaWNhbCA4LWJpdCBYWDMgWE8gKGJpdHMgMjEuLjI4IFBQQyA9IHhv Pj4xKS4KLSsgICAgICBzd2l0Y2ggKHhvMykgewotKyAgICAgICAgY2FzZSA2NDogIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKSBzZXRGMzIocmJfYnl0ZXMsIGksIGdldEYzMihhYiwgaSkgKyBn ZXRGMzIoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmFkZHNwCi0rICAgICAgICBjYXNlIDk2OiAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHNldEY2NChyYl9ieXRlcywgaSwgZ2V0RjY0KGFiLCBp KSArIGdldEY2NChiYiwgaSkpOyBicmVhazsgIC8vIHh2YWRkZHAKLSsgICAgICAgIGNhc2UgNzI6 ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgc2V0RjMyKHJiX2J5dGVzLCBpLCBnZXRGMzIo YWIsIGkpIC0gZ2V0RjMyKGJiLCBpKSk7IGJyZWFrOyAgLy8geHZzdWJzcAotKyAgICAgICAgY2Fz ZSAxMDQ6IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSBzZXRGNjQocmJfYnl0ZXMsIGksIGdl dEY2NChhYiwgaSkgLSBnZXRGNjQoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dnN1YmRwCi0rICAgICAg ICBjYXNlIDgwOiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHNldEYzMihyYl9ieXRlcywg aSwgZ2V0RjMyKGFiLCBpKSAqIGdldEYzMihiYiwgaSkpOyBicmVhazsgIC8vIHh2bXVsc3AKLSsg ICAgICAgIGNhc2UgMTEyOiBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgc2V0RjY0KHJiX2J5 dGVzLCBpLCBnZXRGNjQoYWIsIGkpICogZ2V0RjY0KGJiLCBpKSk7IGJyZWFrOyAgLy8geHZtdWxk cAotKyAgICAgICAgY2FzZSA4ODogIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSBzZXRGMzIo cmJfYnl0ZXMsIGksIGdldEYzMihhYiwgaSkgLyBnZXRGMzIoYmIsIGkpKTsgYnJlYWs7ICAvLyB4 dmRpdnNwCi0rICAgICAgICBjYXNlIDEyMDogZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHNl dEY2NChyYl9ieXRlcywgaSwgZ2V0RjY0KGFiLCBpKSAvIGdldEY2NChiYiwgaSkpOyBicmVhazsg IC8vIHh2ZGl2ZHAKLSsgICAgICAgIC8vIHh2bWlue3NwLGRwfSAvIHh2bWF4e3NwLGRwfToKLSsg ICAgICAgIC8vICAgSWYgYm90aCBvcGVyYW5kcyBhcmUgTmFOLCByZXN1bHQgaXMgdGhlIE5hTiBm cm9tIFhBLgotKyAgICAgICAgLy8gICBJZiBleGFjdGx5IG9uZSBvcGVyYW5kIGlzIE5hTiwgcmVz dWx0IGlzIHRoZSBOT04tTmFOIG9wZXJhbmQuCi0rICAgICAgICAvLyAgIEZvciAwIC8gLTAsIHRy ZWF0IC0wIDwgKzAgKHNpZ25lZC16ZXJvIG9yZGVyaW5nKTogeHZtaW5zcCgrMCwtMCkKLSsgICAg ICAgIC8vICAgPSAtMCwgeHZtYXhzcCgrMCwtMCkgPSArMCwgaW4gZWl0aGVyIG9wZXJhbmQgb3Jk ZXIuCi0rICAgICAgICAvLyAgIE90aGVyd2lzZSwgcmVzdWx0IGlzIElFRUUgbWluL21heChhLCBi KS4KLSsgICAgICAgIC8vIFRoaXMgZGlmZmVycyBmcm9tIElFRUUgNzU0ICh3aGljaCBwcm9wYWdh dGVzIE5hTikgYW5kIGlzCi0rICAgICAgICAvLyByZWxpZWQgdXBvbiBieSB3YXNtIHJlbGF4ZWRf bWluL21heCAoYnVnMTk0NjYxOC5qcykgYW5kIGJ5Ci0rICAgICAgICAvLyB3YXNtIGYzMng0Lm1p bigwLC0wKSByZXR1cm5pbmcgLTAgKHNpbWRfZjMyeDQud2FzdC5qcykuCi0rICAgICAgICAjZGVm aW5lIFhWX01BWChULCBhLCBiKSBbXShUIGFfLCBUIGJfKSAtPiBUIHsgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgYm9vbCBhbiA9IHN0ZDo6aXNuYW4oYV8pLCBibiA9IHN0 ZDo6aXNuYW4oYl8pOyAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBpZiAoYW4g JiYgYm4pIHJldHVybiBhXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICBpZiAoYW4pIHJldHVybiBiXzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBpZiAoYm4pIHJl dHVybiBhXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICBpZiAoYV8gPT0gMC4wICYmIGJfID09IDAuMCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIC8qIC0wIGlzIHNt YWxsZXIgdGhhbiArMDsgbWF4IHBpY2tzICswLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnNpZ25iaXQoYV8pID8gYl8gOiBhXzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYV8sIGJfKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgfShhLCBiKQotKyAgICAgICAgI2Rl ZmluZSBYVl9NSU4oVCwgYSwgYikgW10oVCBhXywgVCBiXykgLT4gVCB7ICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgIGJvb2wgYW4gPSBzdGQ6OmlzbmFuKGFfKSwgYm4gPSBz dGQ6OmlzbmFuKGJfKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKGFu ICYmIGJuKSByZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgaWYgKGFuKSByZXR1cm4gYl87ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKGJuKSBy ZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgaWYgKGFfID09IDAuMCAmJiBiXyA9PSAwLjApIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAvKiAtMCBpcyBz bWFsbGVyIHRoYW4gKzA7IG1pbiBwaWNrcyAtMC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICByZXR1cm4gc3RkOjpzaWduYml0KGFfKSA/IGFfIDogYl87ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGFfLCBiXyk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0oYSwgYikKLSsgICAgICAgIGNh c2UgMTkyOiBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeyAgLy8geHZtYXhzcAotKyAgICAg ICAgICBmbG9hdCBhID0gZ2V0RjMyKGFiLCBpKSwgYiA9IGdldEYzMihiYiwgaSk7Ci0rICAgICAg ICAgIHNldEYzMihyYl9ieXRlcywgaSwgWFZfTUFYKGZsb2F0LCBhLCBiKSk7Ci0rICAgICAgICB9 IGJyZWFrOwotKyAgICAgICAgY2FzZSAyMjQ6IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7 ICAvLyB4dm1heGRwCi0rICAgICAgICAgIGRvdWJsZSBhID0gZ2V0RjY0KGFiLCBpKSwgYiA9IGdl dEY2NChiYiwgaSk7Ci0rICAgICAgICAgIHNldEY2NChyYl9ieXRlcywgaSwgWFZfTUFYKGRvdWJs ZSwgYSwgYikpOwotKyAgICAgICAgfSBicmVhazsKLSsgICAgICAgIGNhc2UgMjAwOiBmb3IgKGlu dCBpID0gMDsgaSA8IDQ7IGkrKykgeyAgLy8geHZtaW5zcAotKyAgICAgICAgICBmbG9hdCBhID0g Z2V0RjMyKGFiLCBpKSwgYiA9IGdldEYzMihiYiwgaSk7Ci0rICAgICAgICAgIHNldEYzMihyYl9i eXRlcywgaSwgWFZfTUlOKGZsb2F0LCBhLCBiKSk7Ci0rICAgICAgICB9IGJyZWFrOwotKyAgICAg ICAgY2FzZSAyMzI6IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7ICAvLyB4dm1pbmRwCi0r ICAgICAgICAgIGRvdWJsZSBhID0gZ2V0RjY0KGFiLCBpKSwgYiA9IGdldEY2NChiYiwgaSk7Ci0r ICAgICAgICAgIHNldEY2NChyYl9ieXRlcywgaSwgWFZfTUlOKGRvdWJsZSwgYSwgYikpOwotKyAg ICAgICAgfSBicmVhazsKLSsgICAgICAgICN1bmRlZiBYVl9NQVgKLSsgICAgICAgICN1bmRlZiBY Vl9NSU4KLSsgICAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJ TlRGKAotKyAgICAgICAgICAgICAgInh2IGZsb2F0IGRpc3BhdGNoIG1pc3NpbmcgOC1iaXQgWE89 JXUgKGluc3RyIDB4JTA4eCkiLAotKyAgICAgICAgICAgICAgeG8zLCBpbnN0ci0+aW5zdHJ1Y3Rp b25CaXRzKCkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIHJiX2J5dGVzKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gWFgzLWZvcm0gZnVzZWQgbXVsdGlw bHktYWRkICgzLXNvdXJjZTogWFQgaXMgYWxzbyBpbnB1dCkgPT09Ci0rICAgIC8vCi0rICAgIC8v ICAgeHZtYWRkYXNwIFhULFhBLFhCOiAgWFQgPSAoWEEgKiBYQikgKyBYVCAgICAgICAoZnVzZWQg bWFkZCkKLSsgICAgLy8gICB4dm1hZGRhZHAgWFQsWEEsWEI6ICBzYW1lIGZvciBmNjQKLSsgICAg Ly8gICB4dm5tc3ViYXNwIFhULFhBLFhCOiBYVCA9IC0oKFhBICogWEIpIC0gWFQpID0gWFQgLSAo WEEgKiBYQikKLSsgICAgLy8gICB4dm5tc3ViYWRwIFhULFhBLFhCOiBzYW1lIGZvciBmNjQKLSsg ICAgLy8KLSsgICAgLy8gRW5jb2RpbmdzIChlYWNoICtBWCk6IFhPOCDihpIgWE85IHBhaXJzCi0r ICAgIC8vICAgeHZtYWRkYXNwICBQUENfeHZtYWRkYXNwPTB4RjAwMDAyMDggICBYTzg9NjUgIOKG kiBYTzkgMTMwLzEzMQotKyAgICAvLyAgIHh2bWFkZGFkcCAgUFBDX3h2bWFkZGFkcD0weEYwMDAw MzA4ICAgWE84PTk3ICDihpIgWE85IDE5NC8xOTUKLSsgICAgLy8gICB4dm5tc3ViYXNwIFBQQ194 dm5tc3ViYXNwPTB4RjAwMDA2ODggIFhPOD0yMDkg4oaSIFhPOSA0MTgvNDE5Ci0rICAgIC8vICAg eHZubXN1YmFkcCBQUENfeHZubXN1YmFkcD0weEYwMDAwNzg4ICBYTzg9MjQxIOKGkiBYTzkgNDgy LzQ4MwotKyAgICAvLyBzdGQ6OmZtYSBnaXZlcyBJRUVFLWNvcnJlY3Qgc2luZ2xlLXJvdW5kaW5n IGJlaGF2aW91ciBtYXRjaGluZyB0aGUKLSsgICAgLy8gUG93ZXIgSVNBIGRlZmluaXRpb24gb2Yg dGhlc2UgZnVzZWQgZm9ybXMuCi0rICAgIGNhc2UgMTMwOiBjYXNlIDEzMTogICAgICAvLyB4dm1h ZGRhc3AKLSsgICAgY2FzZSAxOTQ6IGNhc2UgMTk1OiAgICAgIC8vIHh2bWFkZGFkcAotKyAgICBj YXNlIDQxODogY2FzZSA0MTk6ICAgICAgLy8geHZubXN1YmFzcAotKyAgICBjYXNlIDQ4MjogY2Fz ZSA0ODM6IHsgICAgLy8geHZubXN1YmFkcAotKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0 ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7 Ci0rICAgICAgaW50IHhhID0gaW50KHJhIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4g MikgJiAxKSA8PCA1KTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVj dGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsx Nl0sIHRiWzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKLSsgICAgICBnZXRWU1IxMjgo eGIsIGJiKTsKLSsgICAgICBnZXRWU1IxMjgoeHQsIHRiKTsgIC8vIFhUIGlzIGFsc28gYW4gaW5w dXQgKGFjY3VtdWxhdG9yKS4KLSsgICAgICBib29sIGlzU3AgPSAoeG8gPT0gMTMwIHx8IHhvID09 IDEzMSB8fCB4byA9PSA0MTggfHwgeG8gPT0gNDE5KTsKLSsgICAgICBib29sIGlzTm1zdWIgPSAo eG8gPT0gNDE4IHx8IHhvID09IDQxOSB8fCB4byA9PSA0ODIgfHwgeG8gPT0gNDgzKTsKLSsgICAg ICBhdXRvIHJkRjMyID0gW10odWludDhfdCogYnVmLCBpbnQgaSkgLT4gZmxvYXQgewotKyAgICAg ICAgdWludDMyX3QgYiA9ICh1aW50MzJfdClidWZbaSAqIDRdIHwKLSsgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDFdIDw8IDgpIHwKLSsgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAgICAgICAg ICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAzXSA8PCAyNCk7Ci0rICAgICAgICBmbG9hdCBm OyBtZW1jcHkoJmYsICZiLCBzaXplb2YoZikpOyByZXR1cm4gZjsKLSsgICAgICB9OwotKyAgICAg IGF1dG8gd3JGMzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBmbG9hdCBmKSB7Ci0rICAgICAg ICB1aW50MzJfdCBiOyBtZW1jcHkoJmIsICZmLCBzaXplb2YoYikpOwotKyAgICAgICAgYnVmW2kq NF09KHVpbnQ4X3QpYjsgYnVmW2kqNCsxXT0odWludDhfdCkoYj4+OCk7Ci0rICAgICAgICBidWZb aSo0KzJdPSh1aW50OF90KShiPj4xNik7IGJ1ZltpKjQrM109KHVpbnQ4X3QpKGI+PjI0KTsKLSsg ICAgICB9OwotKyAgICAgIGF1dG8gcmRGNjQgPSBbXSh1aW50OF90KiBidWYsIGludCBpKSAtPiBk b3VibGUgewotKyAgICAgICAgdWludDY0X3QgYiA9IDA7Ci0rICAgICAgICBmb3IgKGludCBrPTA7 azw4O2srKykgYiB8PSAoKHVpbnQ2NF90KWJ1ZltpKjgra10pPDwoayo4KTsKLSsgICAgICAgIGRv dWJsZSBkOyBtZW1jcHkoJmQsICZiLCBzaXplb2YoZCkpOyByZXR1cm4gZDsKLSsgICAgICB9Owot KyAgICAgIGF1dG8gd3JGNjQgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBkb3VibGUgZCkgewot KyAgICAgICAgdWludDY0X3QgYjsgbWVtY3B5KCZiLCAmZCwgc2l6ZW9mKGIpKTsKLSsgICAgICAg IGZvciAoaW50IGs9MDtrPDg7aysrKSBidWZbaSo4K2tdPSh1aW50OF90KShiPj4oayo4KSk7Ci0r ICAgICAgfTsKLSsgICAgICB1aW50OF90IHJlc3VsdFsxNl07Ci0rICAgICAgaWYgKGlzU3ApIHsK LSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICAgIGZsb2F0 IGEgPSByZEYzMihhYiwgaSksIGIgPSByZEYzMihiYiwgaSksIHQgPSByZEYzMih0YiwgaSk7Ci0r ICAgICAgICAgIC8vIG1hZGQ6ICB0ICsgYSpiIDsgIG5tc3ViOiAtKGEqYiAtIHQpID0gdCAtIGEq YiA9IHN0ZDo6Zm1hKGEsYiwtdCkgbmVnYXRlZC4KLSsgICAgICAgICAgZmxvYXQgb3V0ID0gaXNO bXN1YiA/IC1zdGQ6OmZtYShhLCBiLCAtdCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6ICBzdGQ6OmZtYShhLCBiLCB0KTsKLSsgICAgICAgICAgd3JGMzIocmVzdWx0LCBpLCBvdXQp OwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDI7IGkrKykgewotKyAgICAgICAgICBkb3VibGUgYSA9IHJkRjY0KGFiLCBpKSwgYiA9IHJk RjY0KGJiLCBpKSwgdCA9IHJkRjY0KHRiLCBpKTsKLSsgICAgICAgICAgZG91YmxlIG91dCA9IGlz Tm1zdWIgPyAtc3RkOjpmbWEoYSwgYiwgLXQpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogIHN0ZDo6Zm1hKGEsIGIsIHQpOwotKyAgICAgICAgICB3ckY2NChyZXN1bHQsIGksIG91 dCk7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFT SF9VTlNBRkVfUFJJTlRGKAotKyAgICAgICAgICAiZGVjb2RlVlNYOiB1bmltcGxlbWVudGVkIFhP PSV1IChpbnN0cnVjdGlvbiAweCUwOHgpIiwgeG8sCi0rICAgICAgICAgIGluc3RyLT5pbnN0cnVj dGlvbkJpdHMoKSk7Ci0rICB9Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8g UG93ZXIgSVNBIHYzLjEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb25zIChQT1dFUjEwKS4KLSsvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKy8vCi0rLy8gQSBwcmVmaXhlZCBpbnN0cnVjdGlvbiBpcyA4IGJ5 dGVzOiBhIDQtYnl0ZSBwcmVmaXggd29yZCAocHJpbWFyeSBvcGNvZGUgMSkKLSsvLyBmb2xsb3dl ZCBieSBhIDQtYnl0ZSBzdWZmaXggd29yZC4gUHJlZml4IGFuZCBzdWZmaXggbXVzdCBsaWUgaW4g dGhlIHNhbWUKLSsvLyA2NC1ieXRlIGFsaWduZWQgYmxvY2sg4oCUIHRoZSBKSVQgbXVzdCBndWFy YW50ZWUgdGhpcyB3aGVuIGVtaXR0aW5nOyB0aGUgc2ltCi0rLy8gYXNzZXJ0cy4KLSsvLwotKy8v IFByZWZpeCB3b3JkIGxheW91dCAoQkUgYml0IG51bWJlcmluZyk6Ci0rLy8gICBbMC4uNV0gICBw cmltYXJ5IG9wY29kZSA9IDEKLSsvLyAgIFs2Li43XSAgIFR5cGUgKDAwID0gOExTLCAxMCA9IE1M UyDigJQgb25seSBmb3JtcyB3ZSBpbXBsZW1lbnQpCi0rLy8gICBbOC4uMTBdICByZXNlcnZlZCAo bXVzdCBiZSAwKQotKy8vICAgWzExXSAgICAgUiAoMSA9IFBDLXJlbGF0aXZlOyBSQSBtdXN0IGJl IDApCi0rLy8gICBbMTIuLjEzXSByZXNlcnZlZCAobXVzdCBiZSAwKQotKy8vICAgWzE0Li4zMV0g ZDAgKGhpZ2ggMTggYml0cyBvZiB0aGUgMzQtYml0IHNpZ25lZCBpbW1lZGlhdGUpCi0rLy8KLSsv LyBTdWZmaXggd29yZCAoTUxTLzhMUyBmb3JtLCBHUFItdGFyZ2V0IGluc3RydWN0aW9ucyBsaWtl IHBhZGRpL3BsZCk6Ci0rLy8gICBbMC4uNV0gICBzdWZmaXggcHJpbWFyeSBvcGNvZGUgKHNlbGVj dHMgdGhlIGFjdHVhbCBpbnN0cnVjdGlvbikKLSsvLyAgIFs2Li4xMF0gIFJUIChvciBSUyBmb3Ig c3RvcmVzKQotKy8vICAgWzExLi4xNV0gUkEKLSsvLyAgIFsxNi4uMzFdIGQxIChsb3cgMTYgYml0 cyBvZiBpbW1lZGlhdGUpCi0rLy8KLSsvLyBTdWZmaXggd29yZCAoOExTIHBseHYgcXVpcmspOiB0 aGUgc3VmZml4IG9wY29kZSBmaWVsZCBpcyBvbmx5IDUgYml0cwotKy8vIHdpZGUgYW5kIGJpdCBb NV0gaG9sZHMgVFgsIHRoZSBoaWdoIGJpdCBvZiB0aGUgNi1iaXQgWFQgVlNSIG51bWJlcjoKLSsv LyAgIFswLi40XSAgIHBseHYgc3VmZml4IG9wY29kZSA9IDExMDAxICg9IDI1KQotKy8vICAgWzVd ICAgICAgVFgKLSsvLyAgIFs2Li4xMF0gIFQKLSsvLyAgIFsxMS4uMTVdIFJBCi0rLy8gICBbMTYu LjMxXSBkMQotKy8vIENvbWJpbmVkOiBYVCA9IChUWCA8PCA1KSB8IFQuIChFcXVpdmFsZW50OiBm dWxsIDYtYml0IGZpZWxkIGF0IFswLi41XQotKy8vIGlzIDBiMTEwMDEoVFgpIOKAlCB2YWx1ZXMg NTAgb3IgNTEgaW4gb3VyIExFIGJpdHMgMzEuLjI2LikKLSsvLwotKy8vIENvbWJpbmVkIGltbWVk aWF0ZTogU0kgPSBzaWduX2V4dGVuZCgoZDAgPDwgMTYpIHwgZDEsIDM0KS4KLSsvLyBFQSB3aGVu IFI9MTogYWRkcmVzcy1vZi1wcmVmaXggKyBTSS4gKFJBIG11c3QgYmUgMC4pCi0rLy8gRUEgd2hl biBSPTA6IChSQSA9PSAwID8gMCA6IEdQUltSQV0pICsgU0kuCi0rLy8KLSsvLyBTdWZmaXggb3Bj b2RlcyBpbXBsZW1lbnRlZCBoZXJlOgotKy8vICAgTUxTIChUeXBlIDIpIC8gc3VmZml4PTE0ICBw YWRkaQotKy8vICAgTUxTIChUeXBlIDIpIC8gc3VmZml4PTQ4ICBwbGZzICAgKGxvYWQgRlAgc2lu Z2xlLCB3aWRlbnMgdG8gZG91YmxlKQotKy8vICAgTUxTIChUeXBlIDIpIC8gc3VmZml4PTUwICBw bGZkICAgKGxvYWQgRlAgZG91YmxlKQotKy8vICAgOExTIChUeXBlIDApIC8gc3VmZml4PTU3ICBw bGQKLSsvLyAgIDhMUyAoVHlwZSAwKSAvIDUtYml0IHN1ZmZpeD0yNSwgYml0IDI2ID0gVFggIHBs eHYKLSsvLwotKy8vIFZlcmlmaWNhdGlvbiByZWNpcGUgd2hlbiBhZGRpbmcgbW9yZTogYXNzZW1i bGUgd2l0aCBgZ2NjIC1tY3B1PXBvd2VyMTAKLSsvLyAtY2AgKG9yIGNsYW5nKSBhbmQgY29tcGFy ZSB0aGUgZW1pdHRlZCBieXRlcyBhZ2FpbnN0IHRoZSBlbmNvZGVyOyBlbmNvZGUKLSsvLyBpbiBh IHNtYWxsIGlubGluZS1hc20gcHJvZ3JhbSBhbmQgc3RlcCB0aHJvdWdoIHVuZGVyIHRoaXMgc2lt LgotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVQcmVmaXhlZChTaW1JbnN0cnVjdGlvbiogcHJl Zml4KSB7Ci0rICAvLyBQcmVmaXggYW5kIHN1ZmZpeCBtdXN0IHJlc2lkZSBpbiB0aGUgc2FtZSA2 NC1ieXRlIGJsb2NrLgotKyAgdWludDY0X3QgcHJlZml4QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8 dWludDY0X3Q+KHByZWZpeCk7Ci0rICBNT1pfQVNTRVJUKChwcmVmaXhBZGRyICYgNjMpIDw9IDU2 LAotKyAgICAgICAgICAgICAiUE9XRVIxMCBwcmVmaXhlZCBpbnN0cnVjdGlvbiBjcm9zc2VzIDY0 LWJ5dGUgYm91bmRhcnkiKTsKLSsKLSsgIFNpbUluc3RydWN0aW9uKiBzdWZmaXggPSByZWludGVy cHJldF9jYXN0PFNpbUluc3RydWN0aW9uKj4oCi0rICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50 OF90Kj4ocHJlZml4KSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKLSsKLSsgIHVpbnQz Ml90IHR5cGUgPSBwcmVmaXgtPmJpdHMoMjUsIDI0KTsKLSsgIHVpbnQzMl90IFIgPSBwcmVmaXgt PmJpdCgyMCk7Ci0rICB1aW50MzJfdCBkMCA9IHByZWZpeC0+Yml0cygxNywgMCk7ICAvLyAxOCBi aXRzCi0rICB1aW50MzJfdCBzdWZmaXhPcDYgPSBzdWZmaXgtPmJpdHMoMzEsIDI2KTsgIC8vIDYt Yml0IGZvcm0gKHBhZGRpLCBwbGQpCi0rICB1aW50MzJfdCBzdWZmaXhPcDUgPSBzdWZmaXgtPmJp dHMoMzEsIDI3KTsgIC8vIDUtYml0IGZvcm0gKHBseHYpCi0rICB1aW50MzJfdCBwbHh2VFggPSBz dWZmaXgtPmJpdCgyNik7Ci0rICB1aW50MzJfdCBydCA9IHN1ZmZpeC0+cnRWYWx1ZSgpOwotKyAg dWludDMyX3QgcmEgPSBzdWZmaXgtPnJhVmFsdWUoKTsKLSsgIHVpbnQzMl90IGQxID0gc3VmZml4 LT51aW1tMTZWYWx1ZSgpOwotKwotKyAgLy8gUmVhc3NlbWJsZSAzNC1iaXQgc2lnbmVkIGRpc3Bs YWNlbWVudC4KLSsgIGludDY0X3QgaW1tMzQgPSAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oZDApIDw8 IDE2KSB8IGQxOwotKyAgaW1tMzQgPSAoaW1tMzQgPDwgMzApID4+IDMwOyAgLy8gc2lnbi1leHRl bmQgZnJvbSBiaXQgMzMKLSsKLSsgIC8vIFI9MSBmb3JtcyByZXF1aXJlIFJBPTAgcGVyIHRoZSBJ U0EuCi0rICBNT1pfQVNTRVJUKCFSIHx8IHJhID09IDAsCi0rICAgICAgICAgICAgICJQT1dFUjEw IHByZWZpeGVkIFI9MSBmb3JtIHJlcXVpcmVzIFJBPTAiKTsKLSsKLSsgIC8vIFR5cGUgMiA9IE1M UywgVHlwZSAwID0gOExTLiBPdGhlciB0eXBlcyBhcmUgcmVzZXJ2ZWQgaGVyZS4KLSsgIGlmICh0 eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDE0KSB7Ci0rICAgIC8vIHBhZGRpIFJULCBSQSwgU0ks IFIgKE1MUykKLSsgICAgaW50NjRfdCBiYXNlID0gUiA/IHN0YXRpY19jYXN0PGludDY0X3Q+KHBy ZWZpeEFkZHIpCi0rICAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdp c3RlcihyYSkpOwotKyAgICBzZXRSZWdpc3RlcihydCwgYmFzZSArIGltbTM0KTsKLSsgIH0gZWxz ZSBpZiAodHlwZSA9PSAwICYmIHN1ZmZpeE9wNiA9PSA1NykgewotKyAgICAvLyBwbGQgUlQsIEQo UkEpLCBSICg4TFMpCi0rICAgIHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIgKyBzdGF0aWNf Y2FzdDx1aW50NjRfdD4oaW1tMzQpCi0rICAgICAgICAgICAgICAgICAgICA6IChyYSA9PSAwID8g MCA6IGdldFJlZ2lzdGVyKHJhKSkgKwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKLSsgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEs IDgpKSB7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgcHJlZml4KSk7Ci0rICAg IH0KLSsgIH0gZWxzZSBpZiAodHlwZSA9PSAyICYmIHN1ZmZpeE9wNiA9PSA1MCkgewotKyAgICAv LyBwbGZkIEZSVCwgRChSQSksIFIgKE1MUykg4oCUIGxvYWQgOC1ieXRlIGRvdWJsZSBpbnRvIEZQ Ui4KLSsgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2 NF90PihpbW0zNCkKLSsgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVn aXN0ZXIocmEpKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50 NjRfdD4oaW1tMzQpOwotKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgOCkpIHsKLSsg ICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVhZEQoZWEsIHByZWZpeCkpOwotKyAgICB9 Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYgPT0gNDgpIHsKLSsgICAgLy8g cGxmcyBGUlQsIEQoUkEpLCBSIChNTFMpIOKAlCBsb2FkIDQtYnl0ZSBzaW5nbGUsIHdpZGVuIE5h Ti1wcmVzZXJ2aW5nLgotKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGlj X2Nhc3Q8dWludDY0X3Q+KGltbTM0KQotKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/ IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp Y19jYXN0PHVpbnQ2NF90PihpbW0zNCk7Ci0rICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVh LCA0KSkgewotKyAgICAgIGZsb2F0IHZhbCA9ICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEp OwotKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5n TmFOKHZhbCkpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMCAmJiBzdWZmaXhPcDUg PT0gMjUpIHsKLSsgICAgLy8gcGx4diBYVCwgRChSQSksIFIgKDhMUykg4oCUIFhUID0gKFRYIDw8 IDUpIHwgVCwgVFggYXQgc3VmZml4IGJpdCAyNi4KLSsgICAgaW50IHh0ID0gc3RhdGljX2Nhc3Q8 aW50PihydCB8IChwbHh2VFggPDwgNSkpOwotKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhB ZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQotKyAgICAgICAgICAgICAgICAgICAg OiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7Ci0rICAgIGlmICghaGFuZGxlV2Fz bVNlZ0ZhdWx0KGVhLCAxNikpIHsKLSsgICAgICB1aW50OF90IGJ1ZlsxNl07Ci0rICAgICAgbWVt Y3B5KGJ1ZiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oZWEpLCAxNik7Ci0rICAgICAg c2V0VlNSMTI4KHh0LCBidWYpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMCAmJiBz dWZmaXhPcDYgPT0gNjEpIHsKLSsgICAgLy8gcHN0ZCBSUywgRChSQSksIFIgKDhMUykg4oCUIHN0 b3JlIGRvdWJsZXdvcmQuCi0rICAgIHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIgKyBzdGF0 aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpCi0rICAgICAgICAgICAgICAgICAgICA6IChyYSA9PSAw ID8gMCA6IGdldFJlZ2lzdGVyKHJhKSkgKwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKLSsgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQo ZWEsIDgpKSB7Ci0rICAgICAgd3JpdGVEVyhlYSwgZ2V0UmVnaXN0ZXIocnQpLCBwcmVmaXgpOwot KyAgICB9Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYgPT0gNTQpIHsKLSsg ICAgLy8gcHN0ZmQgRlJTLCBEKFJBKSwgUiAoTUxTKSDigJQgc3RvcmUgZG91YmxlLgotKyAgICB1 aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0 KQotKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkp ICsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0z NCk7Ci0rICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA4KSkgewotKyAgICAgIHdyaXRl RChlYSwgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnQpLCBwcmVmaXgpOwotKyAgICB9Ci0rICB9IGVs c2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYgPT0gNTIpIHsKLSsgICAgLy8gcHN0ZnMgRlJT LCBEKFJBKSwgUiAoTUxTKSDigJQgc3RvcmUgc2luZ2xlIChuYXJyb3cgZnJvbSBkb3VibGUgaW4g RlBSKS4KLSsgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVp bnQ2NF90PihpbW0zNCkKLSsgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0 UmVnaXN0ZXIocmEpKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1 aW50NjRfdD4oaW1tMzQpOwotKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIHsK LSsgICAgICBkb3VibGUgZHZhbCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJ0KTsKLSsgICAgICAq cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKSA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4o ZHZhbCk7Ci0rICAgIH0KLSsgIH0gZWxzZSBpZiAodHlwZSA9PSAwICYmIHN1ZmZpeE9wNSA9PSAy NykgewotKyAgICAvLyBwc3R4diBYUywgRChSQSksIFIgKDhMUykg4oCUIFhTID0gKFNYIDw8IDUp IHwgUywgU1ggYXQgc3VmZml4IGJpdCAyNi4KLSsgICAgaW50IHhzID0gc3RhdGljX2Nhc3Q8aW50 PihydCB8IChwbHh2VFggPDwgNSkpOwotKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRy ICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQotKyAgICAgICAgICAgICAgICAgICAgOiAo cmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7Ci0rICAgIGlmICghaGFuZGxlV2FzbVNl Z0ZhdWx0KGVhLCAxNikpIHsKLSsgICAgICB1aW50OF90IGJ1ZlsxNl07Ci0rICAgICAgZ2V0VlNS MTI4KHhzLCBidWYpOwotKyAgICAgIG1lbWNweShyZWludGVycHJldF9jYXN0PHZvaWQqPihlYSks IGJ1ZiwgMTYpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQ1JBU0hfVU5TQUZFX1BS SU5URigKLSsgICAgICAgICJkZWNvZGVQcmVmaXhlZDogdW5pbXBsZW1lbnRlZCB0eXBlPSV1ICIK LSsgICAgICAgICIocHJlZml4IDB4JTA4eCwgc3VmZml4IDB4JTA4eCkiLAotKyAgICAgICAgdHlw ZSwgcHJlZml4LT5pbnN0cnVjdGlvbkJpdHMoKSwgc3VmZml4LT5pbnN0cnVjdGlvbkJpdHMoKSk7 Ci0rICB9Ci0rCi0rICAvLyBBZHZhbmNlIHBhc3QgdGhlIGZ1bGwgOC1ieXRlIHByZWZpeGVkIGlu c3RydWN0aW9uIHVubGVzcyBhIGhhbmRsZXIKLSsgIC8vIGFscmVhZHkgcmVkaXJlY3RlZCB0aGUg UEMuIFRoZSBjYWxsZXIgKGluc3RydWN0aW9uRGVjb2RlKSByZXR1cm5zCi0rICAvLyBpbW1lZGlh dGVseSBhZnRlciB1cywgc28gaXRzIDQtYnl0ZSB0cmFpbGluZyBhZHZhbmNlIGlzIHNraXBwZWQu Ci0rICBpZiAoIXBjX21vZGlmaWVkXykgewotKyAgICBzZXRfcGMoc3RhdGljX2Nhc3Q8aW50NjRf dD4ocHJlZml4QWRkcikgKyAyICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgfQot K30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFRvcC1sZXZlbCBpbnN0cnVjdGlv biBkZWNvZGVyLgotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rdm9pZCBTaW11bGF0b3I6 Omluc3RydWN0aW9uRGVjb2RlKFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKCFTaW11 bGF0b3JQcm9jZXNzOjpJQ2FjaGVDaGVja2luZ0Rpc2FibGVDb3VudCkgewotKyAgICBBdXRvTG9j a1NpbXVsYXRvckNhY2hlIGFsczsKLSsgICAgU2ltdWxhdG9yUHJvY2Vzczo6Y2hlY2tJQ2FjaGVM b2NrZWQoaW5zdHIpOwotKyAgfQotKyAgcGNfbW9kaWZpZWRfID0gZmFsc2U7Ci0rCi0rICB1aW50 MzJfdCBpbnN0ckJpdHMgPSBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCk7Ci0rCi0rICAvLyBDaGVj ayBmb3Iga0NhbGxSZWRpckluc3RyIGZpcnN0IChQUENfc3RvcCA9IDB4NEMwMDAyRTQpLgotKyAg aWYgKGluc3RyQml0cyA9PSBrQ2FsbFJlZGlySW5zdHIpIHsKLSsgICAgc29mdHdhcmVJbnRlcnJ1 cHQoaW5zdHIpOwotKyAgICBpZiAoIXBjX21vZGlmaWVkXykgewotKyAgICAgIHNldF9wYyhyZWlu dGVycHJldF9jYXN0PGludDY0X3Q+KGluc3RyKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXpl KTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBDaGVjayBmb3IgUFBDX3Ry YXAgKDB4N0ZFMDAwMDgpLgotKyAgaWYgKGluc3RyQml0cyA9PSAweDdGRTAwMDA4KSB7Ci0rICAg IHNvZnR3YXJlSW50ZXJydXB0KGluc3RyKTsKLSsgICAgaWYgKCFwY19tb2RpZmllZF8pIHsKLSsg ICAgICBzZXRfcGMocmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihpbnN0cikgKyBTaW1JbnN0cnVj dGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAgIH0KLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgdWlu dDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOwotKwotKyAgLy8gUG93ZXIgSVNBIHYzLjEg cHJlZml4ZWQgaW5zdHJ1Y3Rpb25zOiBwcmltYXJ5IG9wY29kZSAxIG1hcmtzIGEKLSsgIC8vIDQt Ynl0ZSBwcmVmaXggd29yZCBmb2xsb3dlZCBieSBhIDQtYnl0ZSBzdWZmaXggd29yZC4gZGVjb2Rl UHJlZml4ZWQKLSsgIC8vIGFkdmFuY2VzIHRoZSBQQyBieSB0aGUgZnVsbCA4IGJ5dGVzIChvciBs ZWF2ZXMgaXQgbW9kaWZpZWQgZm9yCi0rICAvLyBQQy1yZWxhdGl2ZSBzaWRlLWVmZmVjdHMpLgot KyAgaWYgKG9wY29kZSA9PSAxKSB7Ci0rICAgIGRlY29kZVByZWZpeGVkKGluc3RyKTsKLSsgICAg cmV0dXJuOwotKyAgfQotKwotKyAgc3dpdGNoIChvcGNvZGUpIHsKLSsgICAgLy8gRC1mb3JtIEFM VQotKyAgICBjYXNlIDM6ICAgLy8gdHdpCi0rICAgIGNhc2UgNzogICAvLyBtdWxsaQotKyAgICBj YXNlIDg6ICAgLy8gc3ViZmljCi0rICAgIGNhc2UgMTA6ICAvLyBjbXBsaQotKyAgICBjYXNlIDEx OiAgLy8gY21waQotKyAgICBjYXNlIDEyOiAgLy8gYWRkaWMKLSsgICAgY2FzZSAxMzogIC8vIGFk ZGljLgotKyAgICBjYXNlIDE0OiAgLy8gYWRkaQotKyAgICBjYXNlIDE1OiAgLy8gYWRkaXMKLSsg ICAgY2FzZSAyNDogIC8vIG9yaQotKyAgICBjYXNlIDI1OiAgLy8gb3JpcwotKyAgICBjYXNlIDI2 OiAgLy8geG9yaQotKyAgICBjYXNlIDI3OiAgLy8geG9yaXMKLSsgICAgY2FzZSAyODogIC8vIGFu ZGkuCi0rICAgIGNhc2UgMjk6ICAvLyBhbmRpcy4KLSsgICAgICBkZWNvZGVERm9ybUFMVShpbnN0 cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIEQtZm9ybSBsb2FkcwotKyAgICBjYXNlIDMy OiAgLy8gbHd6Ci0rICAgIGNhc2UgMzM6ICAvLyBsd3p1Ci0rICAgIGNhc2UgMzQ6ICAvLyBsYnoK LSsgICAgY2FzZSAzNTogIC8vIGxienUKLSsgICAgY2FzZSA0MDogIC8vIGxoegotKyAgICBjYXNl IDQxOiAgLy8gbGh6dQotKyAgICBjYXNlIDQyOiAgLy8gbGhhCi0rICAgIGNhc2UgNDM6ICAvLyBs aGF1Ci0rICAgIGNhc2UgNDg6ICAvLyBsZnMKLSsgICAgY2FzZSA0OTogIC8vIGxmc3UKLSsgICAg Y2FzZSA1MDogIC8vIGxmZAotKyAgICBjYXNlIDUxOiAgLy8gbGZkdQotKyAgICAgIGRlY29kZURG b3JtTG9hZChpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIEQtZm9ybSBzdG9yZXMK LSsgICAgY2FzZSAzNjogIC8vIHN0dwotKyAgICBjYXNlIDM4OiAgLy8gc3RiCi0rICAgIGNhc2Ug Mzk6ICAvLyBzdGJ1Ci0rICAgIGNhc2UgNDQ6ICAvLyBzdGgKLSsgICAgY2FzZSA0NTogIC8vIHN0 aHUKLSsgICAgY2FzZSA1MjogIC8vIHN0ZnMKLSsgICAgY2FzZSA1MzogIC8vIHN0ZnN1Ci0rICAg IGNhc2UgNTQ6ICAvLyBzdGZkCi0rICAgIGNhc2UgNTU6ICAvLyBzdGZkdQotKyAgICAgIGRlY29k ZURGb3JtU3RvcmUoaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBEUy1mb3JtCi0r ICAgIGNhc2UgNTg6ICAvLyBsZCwgbGR1LCBsd2EKLSsgICAgY2FzZSA2MjogIC8vIHN0ZCwgc3Rk dQotKyAgICAgIGRlY29kZURTRm9ybShpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8v IEItZm9ybSBjb25kaXRpb25hbCBicmFuY2gKLSsgICAgY2FzZSAxNjoKLSsgICAgICBkZWNvZGVC cmFuY2goaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBTQyAoc3lzdGVtIGNhbGwp IC0gdW51c2VkIGluIEpJVAotKyAgICBjYXNlIDE3OgotKyAgICAgIE1PWl9DUkFTSCgiU2ltdWxh dG9yOiBzYyBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIik7Ci0rICAgICAgYnJlYWs7Ci0rCi0r ICAgIC8vIEktZm9ybSB1bmNvbmRpdGlvbmFsIGJyYW5jaAotKyAgICBjYXNlIDE4OgotKyAgICAg IGRlY29kZUJyYW5jaChpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIFhMLWZvcm0g KGJyYW5jaCB0byBMUi9DVFIsIENSIG9wZXJhdGlvbnMpCi0rICAgIGNhc2UgMTk6Ci0rICAgICAg ZGVjb2RlQnJhbmNoKGluc3RyKTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgLy8gTS1mb3JtIC8g TUQtZm9ybSByb3RhdGUvbWFzawotKyAgICBjYXNlIDIwOiAgLy8gcmx3aW1pCi0rICAgIGNhc2Ug MjE6ICAvLyBybHdpbm0KLSsgICAgY2FzZSAyMzogIC8vIHJsd25tCi0rICAgIGNhc2UgMzA6ICAv LyBybGRpY2wsIHJsZGljciwgcmxkaWMsIHJsZGltaSwgcmxkY2wsIHJsZGNyCi0rICAgICAgZGVj b2RlUm90YXRlTWFzayhpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIFZNWCAoQWx0 aVZlYykg4oCUIHByaW1hcnkgb3Bjb2RlIDQuIFZlY3RvciBhcml0aG1ldGljIC8gY29tcGFyZSAv IHNoaWZ0IC8KLSsgICAgLy8gc3BsYXQgLyBtZXJnZSAvIHBhY2sgLyB1bnBhY2sgb24gVlIwLVZS MzEuIFRoZSB3YXNtIFNJTUQgbG93ZXJpbmcKLSsgICAgLy8gZW1pdHMgdGhlc2UgZGlyZWN0bHkg KFNpbWQxMjggbGl2ZXMgaW4gdGhlIFZSIG5hbWVzcGFjZSkuCi0rICAgIGNhc2UgNDoKLSsgICAg ICBkZWNvZGVWTVgoaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBYLWZvcm0gLyBY Ty1mb3JtCi0rICAgIGNhc2UgMzE6Ci0rICAgICAgZGVjb2RlWEZvcm0oaW5zdHIpOwotKyAgICAg IGJyZWFrOwotKwotKyAgICAvLyBGUCBzaW5nbGUgKEEtZm9ybSkKLSsgICAgY2FzZSA1OToKLSsg ICAgICBkZWNvZGVGUChpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIFZTWCAoWFgx LWZvcm0pCi0rICAgIGNhc2UgNjA6Ci0rICAgICAgZGVjb2RlVlNYKGluc3RyKTsKLSsgICAgICBi cmVhazsKLSsKLSsgICAgLy8gRlAgZG91YmxlIChYLWZvcm0gLyBBLWZvcm0pCi0rICAgIGNhc2Ug NjM6Ci0rICAgICAgZGVjb2RlRlAoaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICBkZWZh dWx0OgotKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKAotKyAgICAgICAgICAiaW5zdHJ1 Y3Rpb25EZWNvZGU6IHVuc3VwcG9ydGVkIG9wY29kZSAldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIs Ci0rICAgICAgICAgIG9wY29kZSwgaW5zdHJCaXRzKTsKLSsgIH0KLSsKLSsgIGlmICghcGNfbW9k aWZpZWRfKSB7Ci0rICAgIHNldF9wYyhyZWludGVycHJldF9jYXN0PGludDY0X3Q+KGluc3RyKSAr IFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKLSsgIH0KLSt9Ci0rCi0rLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsvLyBTaW5nbGUtc3RlcHBpbmcgLyBleGVjdXRlIGxvb3AuCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZW5hYmxlX3NpbmdsZV9zdGVw cGluZyhTaW5nbGVTdGVwQ2FsbGJhY2sgY2IsIHZvaWQqIGFyZykgewotKyAgc2luZ2xlX3N0ZXBw aW5nXyA9IHRydWU7Ci0rICBzaW5nbGVfc3RlcF9jYWxsYmFja18gPSBjYjsKLSsgIHNpbmdsZV9z dGVwX2NhbGxiYWNrX2FyZ18gPSBhcmc7Ci0rICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xl X3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgKHZvaWQqKWdldF9wYygpKTsKLSt9Ci0rCi0rdm9p ZCBTaW11bGF0b3I6OmRpc2FibGVfc2luZ2xlX3N0ZXBwaW5nKCkgewotKyAgaWYgKCFzaW5nbGVf c3RlcHBpbmdfKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIHNpbmdsZV9zdGVwX2NhbGxiYWNr XyhzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfLCB0aGlzLCAodm9pZCopZ2V0X3BjKCkpOwotKyAg c2luZ2xlX3N0ZXBwaW5nXyA9IGZhbHNlOwotKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfID0gbnVs bHB0cjsKLSsgIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18gPSBudWxscHRyOwotK30KLSsKLSt0 ZW1wbGF0ZSA8Ym9vbCBlbmFibGVTdG9wU2ltQXQ+Ci0rdm9pZCBTaW11bGF0b3I6OmV4ZWN1dGUo KSB7Ci0rICBpZiAoc2luZ2xlX3N0ZXBwaW5nXyAmJiBnZXRlbnYoIlBQQzY0X1RSQUNFX1NJTSIp KSB7Ci0rICAgIGZwcmludGYoc3RkZXJyLCAiW3NpbV0gZW50ZXIgZXhlY3V0ZSBwYz0weCVseCBs cj0weCVseCBmcD0weCVseCBzcD0weCVseFxuIiwKLSsgICAgICAgICAgICAobG9uZylnZXRfcGMo KSwgKGxvbmcpZ2V0TFIoKSwgKGxvbmcpZ2V0UmVnaXN0ZXIoZnApLAotKyAgICAgICAgICAgIChs b25nKWdldFJlZ2lzdGVyKHNwKSk7Ci0rICB9Ci0rICBpZiAoc2luZ2xlX3N0ZXBwaW5nXykgewot KyAgICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhp cywgbnVsbHB0cik7Ci0rICB9Ci0rCi0rICBpbnQ2NF90IHByb2dyYW1fY291bnRlciA9IGdldF9w YygpOwotKwotKyAgd2hpbGUgKHByb2dyYW1fY291bnRlciAhPSBlbmRfc2ltX3BjKSB7Ci0rICAg IGlmIChlbmFibGVTdG9wU2ltQXQgJiYgKGljb3VudF8gPT0gU2ltdWxhdG9yOjpTdG9wU2ltQXQp KSB7Ci0rICAgICAgcHBjNjREZWJ1Z2dlciBkYmcodGhpcyk7Ci0rICAgICAgZGJnLmRlYnVnKCk7 Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaWYgKHNpbmdsZV9zdGVwcGluZ18pIHsKLSsgICAgICAg IGlmIChnZXRlbnYoIlBQQzY0X1RSQUNFX1NJTSIpKSB7Ci0rICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLAotKyAgICAgICAgICAgICAgICAgICJbc2ltXSBzdGVwIGljb3VudD0lbGx1IHBjPTB4JWx4 IGluc3RyPTB4JTA4eCBscj0weCVseCBmcD0weCVseCBzcD0weCVseFxuIiwKLSsgICAgICAgICAg ICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWljb3VudF8sIChsb25nKXByb2dyYW1fY291bnRl ciwKLSsgICAgICAgICAgICAgICAgICAqKHVpbnQzMl90Kilwcm9ncmFtX2NvdW50ZXIsIChsb25n KWdldExSKCksCi0rICAgICAgICAgICAgICAgICAgKGxvbmcpZ2V0UmVnaXN0ZXIoZnApLCAobG9u ZylnZXRSZWdpc3RlcihzcCkpOwotKyAgICAgICAgfQotKyAgICAgICAgc2luZ2xlX3N0ZXBfY2Fs bGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQqKXByb2dyYW1fY291bnRlcik7Ci0rICAgICAgfQotKyAgICAg IFNpbUluc3RydWN0aW9uKiBpbnN0ciA9Ci0rICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2lt SW5zdHJ1Y3Rpb24qPihwcm9ncmFtX2NvdW50ZXIpOwotKyAgICAgIGluc3RydWN0aW9uRGVjb2Rl KGluc3RyKTsKLSsgICAgICBpY291bnRfKys7Ci0rICAgIH0KLSsgICAgcHJvZ3JhbV9jb3VudGVy ID0gZ2V0X3BjKCk7Ci0rICB9Ci0rCi0rICBpZiAoc2luZ2xlX3N0ZXBwaW5nXykgewotKyAgICBz aW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgbnVs bHB0cik7Ci0rICB9Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gY2FsbElu dGVybmFsIC8gY2FsbC4KLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotK3ZvaWQgU2ltdWxh dG9yOjpjYWxsSW50ZXJuYWwodWludDhfdCogZW50cnkpIHsKLSsgIC8vIFByZXBhcmUgdG8gZXhl Y3V0ZSB0aGUgY29kZSBhdCBlbnRyeS4KLSsgIHNldFJlZ2lzdGVyKHBjLCByZWludGVycHJldF9j YXN0PGludDY0X3Q+KGVudHJ5KSk7Ci0rICAvLyBUaGUgc2ltdWxhdGlvbiBzdG9wcyB3aGVuIHJl dHVybmluZyB0byB0aGlzIGNhbGwgcG9pbnQgKExSID09IGVuZF9zaW1fcGMpLgotKyAgc2V0TFIo ZW5kX3NpbV9wYyk7Ci0rCi0rICAvLyBSZW1lbWJlciB0aGUgdmFsdWVzIG9mIGNhbGxlZS1zYXZl ZCByZWdpc3RlcnMgKHIxNC1yMzEgaW4gRUxGdjIpLgotKyAgaW50NjRfdCByMTRfdmFsID0gZ2V0 UmVnaXN0ZXIocjE0KTsKLSsgIGludDY0X3QgcjE1X3ZhbCA9IGdldFJlZ2lzdGVyKHIxNSk7Ci0r ICBpbnQ2NF90IHIxNl92YWwgPSBnZXRSZWdpc3RlcihyMTYpOwotKyAgaW50NjRfdCByMTdfdmFs ID0gZ2V0UmVnaXN0ZXIocjE3KTsKLSsgIGludDY0X3QgcjE4X3ZhbCA9IGdldFJlZ2lzdGVyKHIx OCk7Ci0rICBpbnQ2NF90IHIxOV92YWwgPSBnZXRSZWdpc3RlcihyMTkpOwotKyAgaW50NjRfdCBy MjBfdmFsID0gZ2V0UmVnaXN0ZXIocjIwKTsKLSsgIGludDY0X3QgcjIxX3ZhbCA9IGdldFJlZ2lz dGVyKHIyMSk7Ci0rICBpbnQ2NF90IHIyMl92YWwgPSBnZXRSZWdpc3RlcihyMjIpOwotKyAgaW50 NjRfdCByMjNfdmFsID0gZ2V0UmVnaXN0ZXIocjIzKTsKLSsgIGludDY0X3QgcjI0X3ZhbCA9IGdl dFJlZ2lzdGVyKHIyNCk7Ci0rICBpbnQ2NF90IHIyNV92YWwgPSBnZXRSZWdpc3RlcihyMjUpOwot KyAgaW50NjRfdCByMjZfdmFsID0gZ2V0UmVnaXN0ZXIocjI2KTsKLSsgIGludDY0X3QgcjI3X3Zh bCA9IGdldFJlZ2lzdGVyKHIyNyk7Ci0rICBpbnQ2NF90IHIyOF92YWwgPSBnZXRSZWdpc3Rlcihy MjgpOwotKyAgaW50NjRfdCByMjlfdmFsID0gZ2V0UmVnaXN0ZXIocjI5KTsKLSsgIGludDY0X3Qg cjMwX3ZhbCA9IGdldFJlZ2lzdGVyKHIzMCk7Ci0rICBpbnQ2NF90IHIzMV92YWwgPSBnZXRSZWdp c3RlcihyMzEpOwotKyAgaW50NjRfdCBzcF92YWwgPSBnZXRSZWdpc3RlcihzcCk7Ci0rCi0rI2lm ZGVmIERFQlVHCi0rICAvLyBTZXQgdXAgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyB3aXRoIGEga25v d24gdmFsdWUgdG8gZGV0ZWN0IGNsb2JiZXJzLgotKyAgLy8gREVCVUctb25seTogaW4gcmVsZWFz ZSB0aGlzIHdvdWxkIHNpbGVudGx5IGNvcnJ1cHQgZXZlcnkgSlMtaml0LWVudHJ5Ci0rICAvLyBz dHViIGZyYW1lLCBzaW5jZSB0aGUgc3R1YiBzYXZlcyByMTQtcjMxIHRvIGl0cyBzdGFjayBlYXJs eSBvbi4gQW55Ci0rICAvLyBzaW5nbGUtc3RlcC1wcm9maWxpbmcgc2FtcGxlIHRha2VuIGxhdGVy IChvciBhbnkgdW53aW5kIHRocm91Z2ggdGhlCi0rICAvLyBzdHViJ3Mgc2F2ZWQgQ1NSIGFyZWEp IHRoZW4gZGVyZWZlcmVuY2VzIGBpY291bnRfYCBhcyBhIGZyYW1lCi0rICAvLyBwb2ludGVyIGFu ZCBjcmFzaGVzIOKAlCBzZWUgZS5nLiB3YXNtL3Byb2ZpbGluZy5qcywgaW9uLWVycm9yLSouanMs Ci0rICAvLyBpb24tbGF6eS10YWJsZXMuanMsIGlvbi1jYWxsZXJmcC10YWcuanMsIHJldHVybi1j YWxsLXByb2ZpbGluZy5qcywKLSsgIC8vIGV4dGVybnJlZi1nbG9iYWwtcG9zdGJhcnJpZXIuanMs IGJ1aWx0aW4tbW9kdWxlcy9pOHZlY211bC5qcywKLSsgIC8vIGFzbS5qcy90ZXN0QnVnMTM1NzA1 My5qcyAoYWxsIHNpbmdsZS1zdGVwLXByb2ZpbGluZyB0ZXN0cykuIEluCi0rICAvLyBkZWJ1ZyBi dWlsZHMgdGhlIHZhbHVlIGNvbGxpZGVzIHdpdGggdGhlIHNhbWUgY2FsbHNpdGVzIGJ1dCB0aGUK LSsgIC8vIE1PWl9BU1NFUlRzIGJlbG93IGNhdGNoIGFueSBhY3R1YWwgQUJJIHZpb2xhdGlvbiwg d2hpY2ggaXMgdGhlCi0rICAvLyBlbnRpcmUgcG9pbnQuCi0rICBpbnQ2NF90IGNhbGxlZV9zYXZl ZF92YWx1ZSA9IGljb3VudF87Ci0rICBzZXRSZWdpc3RlcihyMTQsIGNhbGxlZV9zYXZlZF92YWx1 ZSk7Ci0rICBzZXRSZWdpc3RlcihyMTUsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdp c3RlcihyMTYsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMTcsIGNhbGxl ZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMTgsIGNhbGxlZV9zYXZlZF92YWx1ZSk7 Ci0rICBzZXRSZWdpc3RlcihyMTksIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3Rl cihyMjAsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjEsIGNhbGxlZV9z YXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjIsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0r ICBzZXRSZWdpc3RlcihyMjMsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3Rlcihy MjQsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjUsIGNhbGxlZV9zYXZl ZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjYsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBz ZXRSZWdpc3RlcihyMjcsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjgs IGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMjksIGNhbGxlZV9zYXZlZF92 YWx1ZSk7Ci0rICBzZXRSZWdpc3RlcihyMzAsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rICBzZXRS ZWdpc3RlcihyMzEsIGNhbGxlZV9zYXZlZF92YWx1ZSk7Ci0rI2VuZGlmCi0rCi0rICAvLyBTdGFy dCB0aGUgc2ltdWxhdGlvbi4KLSsgIGlmIChTaW11bGF0b3I6OlN0b3BTaW1BdCAhPSAtMSkgewot KyAgICBleGVjdXRlPHRydWU+KCk7Ci0rICB9IGVsc2UgewotKyAgICBleGVjdXRlPGZhbHNlPigp OwotKyAgfQotKwotKyNpZmRlZiBERUJVRwotKyAgLy8gQ2hlY2sgdGhhdCB0aGUgY2FsbGVlLXNh dmVkIHJlZ2lzdGVycyBoYXZlIGJlZW4gcHJlc2VydmVkLgotKyAgTU9aX0FTU0VSVChjYWxsZWVf c2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE0KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9z YXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTUpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3Nh dmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxNikpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2 ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE3KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZl ZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTgpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVk X3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxOSkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRf dmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjIwKSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92 YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjEpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3Zh bHVlID09IGdldFJlZ2lzdGVyKHIyMikpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFs dWUgPT0gZ2V0UmVnaXN0ZXIocjIzKSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1 ZSA9PSBnZXRSZWdpc3RlcihyMjQpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVl ID09IGdldFJlZ2lzdGVyKHIyNSkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUg PT0gZ2V0UmVnaXN0ZXIocjI2KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9 PSBnZXRSZWdpc3RlcihyMjcpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09 IGdldFJlZ2lzdGVyKHIyOCkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0g Z2V0UmVnaXN0ZXIocjI5KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBn ZXRSZWdpc3RlcihyMzApKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdl dFJlZ2lzdGVyKHIzMSkpOwotKyNlbmRpZgotKwotKyAgLy8gUmVzdG9yZSBjYWxsZWUtc2F2ZWQg cmVnaXN0ZXJzLgotKyAgc2V0UmVnaXN0ZXIocjE0LCByMTRfdmFsKTsKLSsgIHNldFJlZ2lzdGVy KHIxNSwgcjE1X3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMTYsIHIxNl92YWwpOwotKyAgc2V0UmVn aXN0ZXIocjE3LCByMTdfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIxOCwgcjE4X3ZhbCk7Ci0rICBz ZXRSZWdpc3RlcihyMTksIHIxOV92YWwpOwotKyAgc2V0UmVnaXN0ZXIocjIwLCByMjBfdmFsKTsK LSsgIHNldFJlZ2lzdGVyKHIyMSwgcjIxX3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMjIsIHIyMl92 YWwpOwotKyAgc2V0UmVnaXN0ZXIocjIzLCByMjNfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIyNCwg cjI0X3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMjUsIHIyNV92YWwpOwotKyAgc2V0UmVnaXN0ZXIo cjI2LCByMjZfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIyNywgcjI3X3ZhbCk7Ci0rICBzZXRSZWdp c3RlcihyMjgsIHIyOF92YWwpOwotKyAgc2V0UmVnaXN0ZXIocjI5LCByMjlfdmFsKTsKLSsgIHNl dFJlZ2lzdGVyKHIzMCwgcjMwX3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMzEsIHIzMV92YWwpOwot KyAgc2V0UmVnaXN0ZXIoc3AsIHNwX3ZhbCk7Ci0rfQotKwotK2ludDY0X3QgU2ltdWxhdG9yOjpj YWxsKHVpbnQ4X3QqIGVudHJ5LCBpbnQgYXJndW1lbnRfY291bnQsIC4uLikgewotKyAgdmFfbGlz dCBwYXJhbWV0ZXJzOwotKyAgdmFfc3RhcnQocGFyYW1ldGVycywgYXJndW1lbnRfY291bnQpOwot KwotKyAgaW50NjRfdCBvcmlnaW5hbF9zdGFjayA9IGdldFJlZ2lzdGVyKHNwKTsKLSsgIC8vIENv bXB1dGUgcG9zaXRpb24gb2Ygc3RhY2sgb24gZW50cnkgdG8gZ2VuZXJhdGVkIGNvZGUuCi0rICBp bnQ2NF90IGVudHJ5X3N0YWNrID0gb3JpZ2luYWxfc3RhY2s7Ci0rICBpZiAoYXJndW1lbnRfY291 bnQgPiBrQ0FyZ1Nsb3RDb3VudCkgewotKyAgICBlbnRyeV9zdGFjayA9IGVudHJ5X3N0YWNrIC0g YXJndW1lbnRfY291bnQgKiBzaXplb2YoaW50NjRfdCk7Ci0rICB9IGVsc2UgewotKyAgICBlbnRy eV9zdGFjayA9IGVudHJ5X3N0YWNrIC0ga0NBcmdzU2xvdHNTaXplOwotKyAgfQotKwotKyAgZW50 cnlfc3RhY2sgJj0gflU2NChBQklTdGFja0FsaWdubWVudCAtIDEpOwotKwotKyAgaW50cHRyX3Qq IHN0YWNrX2FyZ3VtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KGVudHJ5X3N0YWNr KTsKLSsKLSsgIC8vIFBQQzY0IEVMRnYyOiBmaXJzdCA4IGludGVnZXIgYXJncyBnbyBpbiByMy1y MTAuCi0rICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50X2NvdW50OyBpKyspIHsKLSsgICAg anM6OmppdDo6UmVnaXN0ZXIgYXJnUmVnOwotKyAgICBpZiAoR2V0SW50QXJnUmVnKGksICZhcmdS ZWcpKSB7Ci0rICAgICAgc2V0UmVnaXN0ZXIoYXJnUmVnLmNvZGUoKSwgdmFfYXJnKHBhcmFtZXRl cnMsIGludDY0X3QpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBzdGFja19hcmd1bWVudFtpXSA9 IHZhX2FyZyhwYXJhbWV0ZXJzLCBpbnQ2NF90KTsKLSsgICAgfQotKyAgfQotKwotKyAgdmFfZW5k KHBhcmFtZXRlcnMpOwotKyAgc2V0UmVnaXN0ZXIoc3AsIGVudHJ5X3N0YWNrKTsKLSsKLSsgIGNh bGxJbnRlcm5hbChlbnRyeSk7Ci0rCi0rICBNT1pfQVNTRVJUKGVudHJ5X3N0YWNrID09IGdldFJl Z2lzdGVyKHNwKSk7Ci0rICBzZXRSZWdpc3RlcihzcCwgb3JpZ2luYWxfc3RhY2spOwotKwotKyAg aW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihyMyk7Ci0rICByZXR1cm4gcmVzdWx0OwotK30K LSsKLSt1aW50cHRyX3QgU2ltdWxhdG9yOjpwdXNoQWRkcmVzcyh1aW50cHRyX3QgYWRkcmVzcykg ewotKyAgaW50NjRfdCBuZXdfc3AgPSBnZXRSZWdpc3RlcihzcCkgLSBzaXplb2YodWludHB0cl90 KTsKLSsgIHVpbnRwdHJfdCogc3RhY2tfc2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90 Kj4obmV3X3NwKTsKLSsgICpzdGFja19zbG90ID0gYWRkcmVzczsKLSsgIHNldFJlZ2lzdGVyKHNw LCBuZXdfc3ApOwotKyAgcmV0dXJuIG5ld19zcDsKLSt9Ci0rCi0rdWludHB0cl90IFNpbXVsYXRv cjo6cG9wQWRkcmVzcygpIHsKLSsgIGludDY0X3QgY3VycmVudF9zcCA9IGdldFJlZ2lzdGVyKHNw KTsKLSsgIHVpbnRwdHJfdCogc3RhY2tfc2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90 Kj4oY3VycmVudF9zcCk7Ci0rICB1aW50cHRyX3QgYWRkcmVzcyA9ICpzdGFja19zbG90OwotKyAg c2V0UmVnaXN0ZXIoc3AsIGN1cnJlbnRfc3AgKyBzaXplb2YodWludHB0cl90KSk7Ci0rICByZXR1 cm4gYWRkcmVzczsKLSt9Ci0rCi0rfSAgLy8gbmFtZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFj ZSBqcwotKwotK2pzOjpqaXQ6OlNpbXVsYXRvciogSlNDb250ZXh0OjpzaW11bGF0b3IoKSBjb25z dCB7IHJldHVybiBzaW11bGF0b3JfOyB9Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9T aW11bGF0b3ItcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmgKLW5l dyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmM3YTNmMzc2N2Q2MQotLS0t IC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuaAotQEAg LTAsMCArMSw1NTYgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10 YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBz dHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAu IElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICog ZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4g Ki8KLSsKLSsjaWZuZGVmIGppdF9wcGM2NF9TaW11bGF0b3JfcHBjNjRfaAotKyNkZWZpbmUgaml0 X3BwYzY0X1NpbXVsYXRvcl9wcGM2NF9oCi0rCi0rI2lmZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAot KwotKyMgIGluY2x1ZGUgIm1vemlsbGEvQXRvbWljcy5oIgotKwotKyMgIGluY2x1ZGUgImppdC9J b25UeXBlcy5oIgotKyMgIGluY2x1ZGUgImpzL1Byb2ZpbGluZ0ZyYW1lSXRlcmF0b3IuaCIKLSsj ICBpbmNsdWRlICJ0aHJlYWRpbmcvVGhyZWFkLmgiCi0rIyAgaW5jbHVkZSAidm0vTXV0ZXhJRHMu aCIKLSsjICBpbmNsdWRlICJ3YXNtL1dhc21TaWduYWxIYW5kbGVycy5oIgotKwotK25hbWVzcGFj ZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rY2xhc3MgSml0QWN0aXZhdGlvbjsKLStjbGFz cyBTaW11bGF0b3I7Ci0rY2xhc3MgUmVkaXJlY3Rpb247Ci0rY2xhc3MgQ2FjaGVQYWdlOwotK2Ns YXNzIEF1dG9Mb2NrU2ltdWxhdG9yOwotKwotK3R5cGVkZWYgdm9pZCAoKlNpbmdsZVN0ZXBDYWxs YmFjaykodm9pZCogYXJnLCBTaW11bGF0b3IqIHNpbSwgdm9pZCogcGMpOwotKwotK2NvbnN0IGlu dHB0cl90IGtQb2ludGVyQWxpZ25tZW50ID0gODsKLStjb25zdCBpbnRwdHJfdCBrUG9pbnRlckFs aWdubWVudE1hc2sgPSBrUG9pbnRlckFsaWdubWVudCAtIDE7Ci0rY29uc3QgaW50cHRyX3Qga0Rv dWJsZUFsaWdubWVudCA9IDg7Ci0rY29uc3QgaW50cHRyX3Qga0RvdWJsZUFsaWdubWVudE1hc2sg PSBrRG91YmxlQWxpZ25tZW50IC0gMTsKLSsKLStjb25zdCBpbnQga051bUdQUmVnaXN0ZXJzID0g MzI7Ci0rY29uc3QgaW50IGtQQ1JlZ2lzdGVyID0gMzI7Ci0rY29uc3QgaW50IGtOdW1GUFVSZWdp c3RlcnMgPSAzMjsKLStjb25zdCBpbnQga051bVZSUmVnaXN0ZXJzID0gMzI7ICAvLyBWUjAtVlIz MSAoQWx0aXZlYy9WTVg7ID0gVlNSMzItNjMgaW4gVlNYKQotKwotKy8vIFBQQzY0IENvbmRpdGlv biBSZWdpc3RlcjogOCBmaWVsZHMgb2YgNCBiaXRzIGVhY2guCi0rLy8gRWFjaCBmaWVsZDogYml0 Mz1MVCwgYml0Mj1HVCwgYml0MT1FUSwgYml0MD1TTyAoaW4gUFBDIGJpZy1lbmRpYW4gbnVtYmVy aW5nCi0rLy8gd2l0aGluIGEgZmllbGQsIGJ1dCBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbiBuaWJi bGUgb3JkZXIgaW4gb3VyIHVpbnQzMl90KS4KLStjb25zdCBpbnQga051bUNSRmllbGRzID0gODsK LSsKLSsvLyBDUiBmaWVsZCBiaXQgcG9zaXRpb25zICh3aXRoaW4gYSA0LWJpdCBmaWVsZCkuCi0r Y29uc3QgdWludDhfdCBrQ1JGaWVsZExUID0gMHg4OwotK2NvbnN0IHVpbnQ4X3Qga0NSRmllbGRH VCA9IDB4NDsKLStjb25zdCB1aW50OF90IGtDUkZpZWxkRVEgPSAweDI7Ci0rY29uc3QgdWludDhf dCBrQ1JGaWVsZFNPID0gMHgxOwotKwotKy8vIFhFUiByZWdpc3RlciBiaXQgcG9zaXRpb25zLgot K2NvbnN0IGludCBrWEVSU09CaXQgPSAzMTsKLStjb25zdCBpbnQga1hFUk9WQml0ID0gMzA7Ci0r Y29uc3QgaW50IGtYRVJDQUJpdCA9IDI5OwotK2NvbnN0IGludCBrWEVST1YzMkJpdCA9IDE5Owot K2NvbnN0IGludCBrWEVSQ0EzMkJpdCA9IDE4OwotKwotKy8vIEZQU0NSIHJvdW5kaW5nIG1vZGUg Yml0cyAoYml0cyA2Mjo2Mywgc3RvcmVkIGluIGxvdyBiaXRzIG9mIG91ciB1aW50NjRfdCkuCi0r Y29uc3QgdWludDY0X3Qga0ZQU0NSUk5NYXNrID0gMHgzOwotKwotKy8vIEZQVSByb3VuZGluZyBt b2RlcyBtYXRjaGluZyBQUEM2NCBGUFNDUiBSTiBmaWVsZC4KLStlbnVtIEZQVVJvdW5kaW5nTW9k ZSB7Ci0rICBSTiA9IDAsICAvLyBSb3VuZCB0byBOZWFyZXN0ICh0aWVzIHRvIGV2ZW4pCi0rICBS WiA9IDEsICAvLyBSb3VuZCB0b3dhcmQgWmVybwotKyAgUlAgPSAyLCAgLy8gUm91bmQgdG93YXJk ICtJbmZpbml0eQotKyAgUk0gPSAzLCAgLy8gUm91bmQgdG93YXJkIC1JbmZpbml0eQotK307Ci0r Ci0rLy8gRlBVIGludmFsaWQgcmVzdWx0IGNvbnN0YW50cy4KLStjb25zdCB1aW50MzJfdCBrRlBV SW52YWxpZFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigxIDw8IDMxKSAtIDE7Ci0rY29u c3QgaW50MzJfdCBrRlBVSW52YWxpZFJlc3VsdE5lZ2F0aXZlID0gc3RhdGljX2Nhc3Q8aW50MzJf dD4oMXUgPDwgMzEpOwotK2NvbnN0IHVpbnQ2NF90IGtGUFU2NEludmFsaWRSZXN1bHQgPQotKyAg ICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDYzKSAt IDE7Ci0rY29uc3QgaW50NjRfdCBrRlBVNjRJbnZhbGlkUmVzdWx0TmVnYXRpdmUgPQotKyAgICBz dGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgNjMpOwotKwot Ky8vIEJyZWFrcG9pbnQvc3RvcCBjb2RlIHJhbmdlcy4KLStjb25zdCB1aW50MzJfdCBrTWF4V2F0 Y2hwb2ludENvZGUgPSAzMTsKLStjb25zdCB1aW50MzJfdCBrTWF4U3RvcENvZGUgPSAxMjc7Ci0r Y29uc3QgdWludDMyX3Qga1dhc21UcmFwQ29kZSA9IDY7Ci0rCi0rLy8gUmVkaXJlY3Rpb24gaW5z dHJ1Y3Rpb246IFBQQ19zdG9wICgweDRDMDAwMkU0KS4KLSsvLyBEaXN0aW5jdCBmcm9tIFBQQ190 cmFwICgweDdGRTAwMDA4KSB1c2VkIGZvciB3YXNtIHRyYXBzLgotK2NvbnN0IHVpbnQzMl90IGtD YWxsUmVkaXJJbnN0ciA9IDB4NEMwMDAyRTQ7Ci0rCi0rdHlwZWRlZiB1aW50MzJfdCBJbnN0cjsK LStjbGFzcyBTaW1JbnN0cnVjdGlvbjsKLSsKLStjbGFzcyBTaW11bGF0b3IgewotKyAgZnJpZW5k IGNsYXNzIHBwYzY0RGVidWdnZXI7Ci0rCi0rIHB1YmxpYzoKLSsgIGVudW0gUmVnaXN0ZXIgewot KyAgICBub19yZWcgPSAtMSwKLSsgICAgcjAgPSAwLAotKyAgICByMSwKLSsgICAgcjIsCi0rICAg IHIzLAotKyAgICByNCwKLSsgICAgcjUsCi0rICAgIHI2LAotKyAgICByNywKLSsgICAgcjgsCi0r ICAgIHI5LAotKyAgICByMTAsCi0rICAgIHIxMSwKLSsgICAgcjEyLAotKyAgICByMTMsCi0rICAg IHIxNCwKLSsgICAgcjE1LAotKyAgICByMTYsCi0rICAgIHIxNywKLSsgICAgcjE4LAotKyAgICBy MTksCi0rICAgIHIyMCwKLSsgICAgcjIxLAotKyAgICByMjIsCi0rICAgIHIyMywKLSsgICAgcjI0 LAotKyAgICByMjUsCi0rICAgIHIyNiwKLSsgICAgcjI3LAotKyAgICByMjgsCi0rICAgIHIyOSwK LSsgICAgcjMwLAotKyAgICByMzEsCi0rICAgIHBjLAotKyAgICBrTnVtU2ltdVJlZ2lzdGVycywK LSsgICAgLy8gQWxpYXNlcwotKyAgICBzcCA9IHIxLAotKyAgICBmcCA9IHIzMSwKLSsgIH07Ci0r Ci0rICBlbnVtIEZQVVJlZ2lzdGVyIHsKLSsgICAgZjAgPSAwLAotKyAgICBmMSwKLSsgICAgZjIs Ci0rICAgIGYzLAotKyAgICBmNCwKLSsgICAgZjUsCi0rICAgIGY2LAotKyAgICBmNywKLSsgICAg ZjgsCi0rICAgIGY5LAotKyAgICBmMTAsCi0rICAgIGYxMSwKLSsgICAgZjEyLAotKyAgICBmMTMs Ci0rICAgIGYxNCwKLSsgICAgZjE1LAotKyAgICBmMTYsCi0rICAgIGYxNywKLSsgICAgZjE4LAot KyAgICBmMTksCi0rICAgIGYyMCwKLSsgICAgZjIxLAotKyAgICBmMjIsCi0rICAgIGYyMywKLSsg ICAgZjI0LAotKyAgICBmMjUsCi0rICAgIGYyNiwKLSsgICAgZjI3LAotKyAgICBmMjgsCi0rICAg IGYyOSwKLSsgICAgZjMwLAotKyAgICBmMzEsCi0rICAgIGtOdW1GUFVSZWdpc3RlcnMKLSsgIH07 Ci0rCi0rICBzdGF0aWMgU2ltdWxhdG9yKiBDcmVhdGUoKTsKLSsgIHN0YXRpYyB2b2lkIERlc3Ry b3koU2ltdWxhdG9yKiBzaW11bGF0b3IpOwotKwotKyAgU2ltdWxhdG9yKCk7Ci0rICB+U2ltdWxh dG9yKCk7Ci0rCi0rICBzdGF0aWMgU2ltdWxhdG9yKiBDdXJyZW50KCk7Ci0rCi0rICBzdGF0aWMg aW5saW5lIHVpbnRwdHJfdCBTdGFja0xpbWl0KCkgewotKyAgICByZXR1cm4gU2ltdWxhdG9yOjpD dXJyZW50KCktPnN0YWNrTGltaXQoKTsKLSsgIH0KLSsKLSsgIHVpbnRwdHJfdCogYWRkcmVzc09m U3RhY2tMaW1pdCgpOwotKwotKyAgLy8gR1BSIGFjY2Vzc29ycy4KLSsgIHZvaWQgc2V0UmVnaXN0 ZXIoaW50IHJlZywgaW50NjRfdCB2YWx1ZSk7Ci0rICBpbnQ2NF90IGdldFJlZ2lzdGVyKGludCBy ZWcpIGNvbnN0OwotKwotKyAgLy8gRlBSIGFjY2Vzc29ycy4KLSsgIHZvaWQgc2V0RnB1UmVnaXN0 ZXIoaW50IGZwdXJlZywgaW50NjRfdCB2YWx1ZSk7Ci0rICB2b2lkIHNldEZwdVJlZ2lzdGVyV29y ZChpbnQgZnB1cmVnLCBpbnQzMl90IHZhbHVlKTsKLSsgIHZvaWQgc2V0RnB1UmVnaXN0ZXJGbG9h dChpbnQgZnB1cmVnLCBmbG9hdCB2YWx1ZSk7Ci0rICB2b2lkIHNldEZwdVJlZ2lzdGVyRG91Ymxl KGludCBmcHVyZWcsIGRvdWJsZSB2YWx1ZSk7Ci0rICBpbnQ2NF90IGdldEZwdVJlZ2lzdGVyKGlu dCBmcHVyZWcpIGNvbnN0OwotKyAgaW50MzJfdCBnZXRGcHVSZWdpc3RlcldvcmQoaW50IGZwdXJl ZykgY29uc3Q7Ci0rICBpbnQzMl90IGdldEZwdVJlZ2lzdGVyU2lnbmVkV29yZChpbnQgZnB1cmVn KSBjb25zdDsKLSsgIGZsb2F0IGdldEZwdVJlZ2lzdGVyRmxvYXQoaW50IGZwdXJlZykgY29uc3Q7 Ci0rICBkb3VibGUgZ2V0RnB1UmVnaXN0ZXJEb3VibGUoaW50IGZwdXJlZykgY29uc3Q7Ci0rCi0r ICAvLyBWUiBhY2Nlc3NvcnMgKEFsdGl2ZWMvVk1YIHJlZ2lzdGVycyBWUjAtVlIzMSkuIFRoZSBi eXRlcyBhcnJheSBpcyB0aGUKLSsgIC8vIGdyb3VuZCB0cnV0aDogYnl0ZXNbMF0gaXMgdGhlIG1v c3Qtc2lnbmlmaWNhbnQtYnl0ZSBvbiBQUEM2NCBiaWctZW5kaWFuCi0rICAvLyBudW1iZXJpbmcs IGkuZS4sIFZTUltNU0IuLkxTQl0gbWFwcGVkIGFzIGJ5dGVzWzAuLjE1XS4gQ2FsbGVycyB0aGF0 IHdhbnQKLSsgIC8vIHR5cGVkIHZpZXdzIChsYW5lIDAgZXRjLikgc2hvdWxkIGV4dHJhY3QgZnJv bSB0aGUgYnl0ZXMgYXJyYXkgYWNjb3JkaW5nCi0rICAvLyB0byB0aGUgSVNBJ3MgbGFuZSBudW1i ZXJpbmcgZm9yIHRoYXQgaW5zdHJ1Y3Rpb24uCi0rICB2b2lkIHNldFZSQnl0ZXMoaW50IHZyZWcs IGNvbnN0IHVpbnQ4X3QgYnl0ZXNbMTZdKTsKLSsgIHZvaWQgZ2V0VlJCeXRlcyhpbnQgdnJlZywg dWludDhfdCBieXRlc1sxNl0pIGNvbnN0OwotKwotKyAgLy8gVlNSIChWZWN0b3ItU2NhbGFyIFJl Z2lzdGVyKSBhY2Nlc3NvcnM6IHVuaWZpZWQgNjQtcmVnaXN0ZXIgbmFtZXNwYWNlCi0rICAvLyB3 aGVyZSBWU1IgMC0zMSBhbGlhc2VzIEZQUiAwLTMxIChEVzAgaXMgdGhlIEZQUiB2YWx1ZSwgRFcx IGlzCi0rICAvLyBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIOKAlCB3ZSBtb2RlbCBpdCBhcyB6 ZXJvIG9uIHJlYWQsIGlnbm9yZWQgb24KLSsgIC8vIHdyaXRlKSBhbmQgVlNSIDMyLTYzIGFsaWFz ZXMgVlIgMC0zMS4gVXNlZCBieSBWU1ggaW5zdHJ1Y3Rpb25zCi0rICAvLyAoeHhwZXJtZGksIHh4 bG9yLCB4eGx4b3IsIG10dnNyZCwgbWZ2c3JkLCAuLi4pLgotKyAgdm9pZCBnZXRWU1IxMjgoaW50 IHZzciwgdWludDhfdCBieXRlc1sxNl0pIGNvbnN0OwotKyAgdm9pZCBzZXRWU1IxMjgoaW50IHZz ciwgY29uc3QgdWludDhfdCBieXRlc1sxNl0pOwotKwotKyAgLy8gU1BSIGFjY2Vzc29ycy4KLSsg IGludDY0X3QgZ2V0TFIoKSBjb25zdCB7IHJldHVybiBMUl87IH0KLSsgIHZvaWQgc2V0TFIoaW50 NjRfdCB2YWx1ZSkgeyBMUl8gPSB2YWx1ZTsgfQotKyAgaW50NjRfdCBnZXRDVFIoKSBjb25zdCB7 IHJldHVybiBDVFJfOyB9Ci0rICB2b2lkIHNldENUUihpbnQ2NF90IHZhbHVlKSB7IENUUl8gPSB2 YWx1ZTsgfQotKyAgdWludDMyX3QgZ2V0Q1IoKSBjb25zdCB7IHJldHVybiBDUl87IH0KLSsgIHZv aWQgc2V0Q1IodWludDMyX3QgdmFsdWUpIHsgQ1JfID0gdmFsdWU7IH0KLSsgIHVpbnQ2NF90IGdl dFhFUigpIGNvbnN0IHsgcmV0dXJuIFhFUl87IH0KLSsgIHZvaWQgc2V0WEVSKHVpbnQ2NF90IHZh bHVlKSB7IFhFUl8gPSB2YWx1ZTsgfQotKyAgdWludDY0X3QgZ2V0RlBTQ1IoKSBjb25zdCB7IHJl dHVybiBGUFNDUl87IH0KLSsgIHZvaWQgc2V0RlBTQ1IodWludDY0X3QgdmFsdWUpIHsgRlBTQ1Jf ID0gdmFsdWU7IH0KLSsKLSsgIC8vIENSIGZpZWxkIGFjY2Vzc29yczogZmllbGQgMCBpcyB0aGUg bW9zdCBzaWduaWZpY2FudCBuaWJibGUgKGJpdHMgMzE6MjgpLgotKyAgdWludDhfdCBnZXRDUkZp ZWxkKGludCBmaWVsZCkgY29uc3QgewotKyAgICByZXR1cm4gKENSXyA+PiAoNCAqICg3IC0gZmll bGQpKSkgJiAweEY7Ci0rICB9Ci0rICB2b2lkIHNldENSRmllbGQoaW50IGZpZWxkLCB1aW50OF90 IHZhbCkgewotKyAgICB1aW50MzJfdCBzaGlmdCA9IDQgKiAoNyAtIGZpZWxkKTsKLSsgICAgQ1Jf ID0gKENSXyAmIH4oMHhGdSA8PCBzaGlmdCkpIHwgKCh2YWwgJiAweEZ1KSA8PCBzaGlmdCk7Ci0r ICB9Ci0rCi0rICAvLyBYRVIgYml0IGFjY2Vzc29ycy4KLSsgIGJvb2wgZ2V0WEVSU08oKSBjb25z dCB7IHJldHVybiAoWEVSXyA+PiBrWEVSU09CaXQpICYgMTsgfQotKyAgdm9pZCBzZXRYRVJTTyhi b29sIHYpIHsKLSsgICAgWEVSXyA9IChYRVJfICYgfigxdWxsIDw8IGtYRVJTT0JpdCkpIHwgKCh1 aW50NjRfdCl2IDw8IGtYRVJTT0JpdCk7Ci0rICB9Ci0rICBib29sIGdldFhFUk9WKCkgY29uc3Qg eyByZXR1cm4gKFhFUl8gPj4ga1hFUk9WQml0KSAmIDE7IH0KLSsgIHZvaWQgc2V0WEVST1YoYm9v bCB2KSB7Ci0rICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVsbCA8PCBrWEVST1ZCaXQpKSB8ICgodWlu dDY0X3QpdiA8PCBrWEVST1ZCaXQpOwotKyAgICAvLyBNaXJyb3IgdG8gT1YzMi4gUmVhbCBQT1dF Ujkgc2lsaWNvbiBzZXRzIE9WMzIgPT0gT1YgZm9yIGJvdGggMzItYml0Ci0rICAgIC8vIGFuZCA2 NC1iaXQgb3ZlcmZsb3cgb3BzOiBtdWxsZG8oMiwgMl42MikgcHJvZHVjZXMgT1Y9T1YzMj0xOwot KyAgICAvLyBtdWxsZG8oMl4zMCwgNCkgcHJvZHVjZXMgT1Y9T1YzMj0wLiBUaGUgSklUJ3MKLSsg ICAgLy8gUE9XRVI5IE92ZXJmbG93IHBhdGggaXMgYG11bGxkbyArIG1jcnhyeCArIGJjIE92ZXJm bG93YCwgd2hlcmUKLSsgICAgLy8gbWNyeHJ4IHBsYWNlcyBPVjMyIGluIHRoZSBHVCBzbG90IGFu ZCB0aGUgT3ZlcmZsb3cgY29uZGl0aW9uIHRlc3RzCi0rICAgIC8vIEdUIOKAlCBzbyBPVjMyIG11 c3QgYmUgbGl2ZSBvciBuby1vdmVyZmxvdyBpcyByZXBvcnRlZCBldmVuIHdoZW4KLSsgICAgLy8g T1Y9MS4gV2l0aG91dCB0aGlzIG1pcnJvciwgQmlnSW50IGZhc3QtcGF0aCBtdWwgc2lsZW50bHkg d3JhcHMuCi0rICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVsbCA8PCBrWEVST1YzMkJpdCkpIHwgKCh1 aW50NjRfdCl2IDw8IGtYRVJPVjMyQml0KTsKLSsgICAgaWYgKHYpIHNldFhFUlNPKHRydWUpOwot KyAgfQotKyAgYm9vbCBnZXRYRVJDQSgpIGNvbnN0IHsgcmV0dXJuIChYRVJfID4+IGtYRVJDQUJp dCkgJiAxOyB9Ci0rICB2b2lkIHNldFhFUkNBKGJvb2wgdikgewotKyAgICBYRVJfID0gKFhFUl8g JiB+KDF1bGwgPDwga1hFUkNBQml0KSkgfCAoKHVpbnQ2NF90KXYgPDwga1hFUkNBQml0KTsKLSsg IH0KLSsKLSsgIC8vIFBDIGFjY2Vzc29ycy4KLSsgIHZvaWQgc2V0X3BjKGludDY0X3QgdmFsdWUp OwotKyAgaW50NjRfdCBnZXRfcGMoKSBjb25zdDsKLSsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotKyAgVCBnZXRfcGNfYXMoKSBjb25zdCB7Ci0rICAgIHJldHVybiByZWludGVycHJldF9jYXN0 PFQ+KGdldF9wYygpKTsKLSsgIH0KLSsKLSsgIHZvaWQgZW5hYmxlX3NpbmdsZV9zdGVwcGluZyhT aW5nbGVTdGVwQ2FsbGJhY2sgY2IsIHZvaWQqIGFyZyk7Ci0rICB2b2lkIGRpc2FibGVfc2luZ2xl X3N0ZXBwaW5nKCk7Ci0rCi0rICB1aW50cHRyX3Qgc3RhY2tMaW1pdCgpIGNvbnN0OwotKyAgYm9v bCBvdmVyUmVjdXJzZWQodWludHB0cl90IG5ld3NwID0gMCkgY29uc3Q7Ci0rICBib29sIG92ZXJS ZWN1cnNlZFdpdGhFeHRyYSh1aW50MzJfdCBleHRyYSkgY29uc3Q7Ci0rCi0rICB0ZW1wbGF0ZSA8 Ym9vbCBlbmFibGVTdG9wU2ltQXQ+Ci0rICB2b2lkIGV4ZWN1dGUoKTsKLSsKLSsgIGludDY0X3Qg Y2FsbCh1aW50OF90KiBlbnRyeSwgaW50IGFyZ3VtZW50X2NvdW50LCAuLi4pOwotKwotKyAgdWlu dHB0cl90IHB1c2hBZGRyZXNzKHVpbnRwdHJfdCBhZGRyZXNzKTsKLSsgIHVpbnRwdHJfdCBwb3BB ZGRyZXNzKCk7Ci0rCi0rICB2b2lkIHNldExhc3REZWJ1Z2dlcklucHV0KGNoYXIqIGlucHV0KTsK LSsgIGNoYXIqIGxhc3REZWJ1Z2dlcklucHV0KCkgeyByZXR1cm4gbGFzdERlYnVnZ2VySW5wdXRf OyB9Ci0rCi0rICBib29sIGhhc19iYWRfcGMoKSBjb25zdDsKLSsKLSsgIC8vIFVwZGF0ZSBDUiBm aWVsZCAwIGZyb20gYSA2NC1iaXQgcmVzdWx0LgotKyAgdm9pZCB1cGRhdGVDUjAoaW50NjRfdCBy ZXN1bHQpIHsKLSsgICAgdWludDhfdCBmaWVsZCA9IGtDUkZpZWxkU08gKiBnZXRYRVJTTygpOwot KyAgICBpZiAocmVzdWx0IDwgMCkKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZExUOwotKyAgICBl bHNlIGlmIChyZXN1bHQgPiAwKQotKyAgICAgIGZpZWxkIHw9IGtDUkZpZWxkR1Q7Ci0rICAgIGVs c2UKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEVROwotKyAgICBzZXRDUkZpZWxkKDAsIGZpZWxk KTsKLSsgIH0KLSsKLSsgIC8vIFVwZGF0ZSBDUiBmaWVsZCAwIGZyb20gYSAzMi1iaXQgcmVzdWx0 IChzaWduLWV4dGVuZGVkIGNvbXBhcmlzb24pLgotKyAgdm9pZCB1cGRhdGVDUjBfMzIoaW50MzJf dCByZXN1bHQpIHsKLSsgICAgdWludDhfdCBmaWVsZCA9IGtDUkZpZWxkU08gKiBnZXRYRVJTTygp OwotKyAgICBpZiAocmVzdWx0IDwgMCkKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZExUOwotKyAg ICBlbHNlIGlmIChyZXN1bHQgPiAwKQotKyAgICAgIGZpZWxkIHw9IGtDUkZpZWxkR1Q7Ci0rICAg IGVsc2UKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEVROwotKyAgICBzZXRDUkZpZWxkKDAsIGZp ZWxkKTsKLSsgIH0KLSsKLSsgIC8vIENvbXBhcmUgYW5kIHNldCBhbiBhcmJpdHJhcnkgQ1IgZmll bGQuCi0rICB2b2lkIHNldENSRmllbGRDbXAoaW50IGZpZWxkLCBpbnQ2NF90IGxocywgaW50NjRf dCByaHMpIHsKLSsgICAgdWludDhfdCB2YWwgPSBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKTsKLSsg ICAgaWYgKGxocyA8IHJocykKLSsgICAgICB2YWwgfD0ga0NSRmllbGRMVDsKLSsgICAgZWxzZSBp ZiAobGhzID4gcmhzKQotKyAgICAgIHZhbCB8PSBrQ1JGaWVsZEdUOwotKyAgICBlbHNlCi0rICAg ICAgdmFsIHw9IGtDUkZpZWxkRVE7Ci0rICAgIHNldENSRmllbGQoZmllbGQsIHZhbCk7Ci0rICB9 Ci0rCi0rICB2b2lkIHNldENSRmllbGRDbXBVKGludCBmaWVsZCwgdWludDY0X3QgbGhzLCB1aW50 NjRfdCByaHMpIHsKLSsgICAgdWludDhfdCB2YWwgPSBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKTsK LSsgICAgaWYgKGxocyA8IHJocykKLSsgICAgICB2YWwgfD0ga0NSRmllbGRMVDsKLSsgICAgZWxz ZSBpZiAobGhzID4gcmhzKQotKyAgICAgIHZhbCB8PSBrQ1JGaWVsZEdUOwotKyAgICBlbHNlCi0r ICAgICAgdmFsIHw9IGtDUkZpZWxkRVE7Ci0rICAgIHNldENSRmllbGQoZmllbGQsIHZhbCk7Ci0r ICB9Ci0rCi0rIHByaXZhdGU6Ci0rICBlbnVtIFNwZWNpYWxWYWx1ZXMgewotKyAgICAvLyBQUEM2 NCBtYXNrcyB0aGUgbG93IDIgYml0cyBvZiBicmFuY2ggdGFyZ2V0cywgc28gdGhlc2UgbXVzdCBi ZQotKyAgICAvLyA0LWJ5dGUgYWxpZ25lZCB0byBzdXJ2aXZlIHRoZSAmIH4zIG1hc2sgaW4gYmxy L2JjY3RyLgotKyAgICBiYWRfcmEgPSAtNCwKLSsgICAgZW5kX3NpbV9wYyA9IC04LAotKyAgICBV bnByZWRpY3RhYmxlID0gMHhiYWRiZWFmCi0rICB9OwotKwotKyAgYm9vbCBpbml0KCk7Ci0rCi0r ICB2b2lkIGZvcm1hdChTaW1JbnN0cnVjdGlvbiogaW5zdHIsIGNvbnN0IGNoYXIqIGZvcm1hdCk7 Ci0rCi0rICAvLyBNZW1vcnkgYWNjZXNzLgotKyAgaW5saW5lIHVpbnQ4X3QgcmVhZEJVKHVpbnQ2 NF90IGFkZHIpOwotKyAgaW5saW5lIGludDhfdCByZWFkQih1aW50NjRfdCBhZGRyKTsKLSsgIGlu bGluZSB2b2lkIHdyaXRlQih1aW50NjRfdCBhZGRyLCB1aW50OF90IHZhbHVlKTsKLSsgIGlubGlu ZSB2b2lkIHdyaXRlQih1aW50NjRfdCBhZGRyLCBpbnQ4X3QgdmFsdWUpOwotKwotKyAgaW5saW5l IHVpbnQxNl90IHJlYWRIVSh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwot KyAgaW5saW5lIGludDE2X3QgcmVhZEgodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKTsKLSsgIGlubGluZSB2b2lkIHdyaXRlSCh1aW50NjRfdCBhZGRyLCB1aW50MTZfdCB2YWx1 ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGluZSB2b2lkIHdyaXRlSCh1aW50NjRf dCBhZGRyLCBpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKwotKyAgaW5s aW5lIHVpbnQzMl90IHJlYWRXVSh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIp OwotKyAgaW5saW5lIGludDMyX3QgcmVhZFcodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKTsKLSsgIGlubGluZSB2b2lkIHdyaXRlVyh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCB2 YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGluZSB2b2lkIHdyaXRlVyh1aW50 NjRfdCBhZGRyLCBpbnQzMl90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKwotKyAg aW5saW5lIGludDY0X3QgcmVhZERXKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0 cik7Ci0rICBpbmxpbmUgdm9pZCB3cml0ZURXKHVpbnQ2NF90IGFkZHIsIGludDY0X3QgdmFsdWUs IFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rCi0rICBpbmxpbmUgZG91YmxlIHJlYWREKHVpbnQ2 NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICBpbmxpbmUgdm9pZCB3cml0ZUQo dWludDY0X3QgYWRkciwgZG91YmxlIHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKwot KyAgaW5saW5lIHVpbnQ4X3QgbG9hZExpbmtlZEIodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKTsKLSsgIGlubGluZSBpbnQgc3RvcmVDb25kaXRpb25hbEIodWludDY0X3QgYWRk ciwgdWludDhfdCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5z dHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGluZSB1aW50MTZfdCBsb2FkTGlua2VkSCh1aW50NjRf dCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgaW5saW5lIGludCBzdG9yZUNvbmRp dGlvbmFsSCh1aW50NjRfdCBhZGRyLCB1aW50MTZfdCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGluZSBpbnQzMl90 IGxvYWRMaW5rZWRXKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICBp bmxpbmUgaW50IHN0b3JlQ29uZGl0aW9uYWxXKHVpbnQ2NF90IGFkZHIsIGludDMyX3QgdmFsdWUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cik7 Ci0rICBpbmxpbmUgaW50NjRfdCBsb2FkTGlua2VkRCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVj dGlvbiogaW5zdHIpOwotKyAgaW5saW5lIGludCBzdG9yZUNvbmRpdGlvbmFsRCh1aW50NjRfdCBh ZGRyLCBpbnQ2NF90IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1J bnN0cnVjdGlvbiogaW5zdHIpOwotKwotKyAgLy8gSW5zdHJ1Y3Rpb24gZGVjb2RlcnMuCi0rICB2 b2lkIGRlY29kZURGb3JtQUxVKFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICB2b2lkIGRlY29k ZURGb3JtTG9hZChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNvZGVERm9ybVN0 b3JlKFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICB2b2lkIGRlY29kZURTRm9ybShTaW1JbnN0 cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNvZGVYRm9ybShTaW1JbnN0cnVjdGlvbiogaW5z dHIpOwotKyAgdm9pZCBkZWNvZGVSb3RhdGVNYXNrKFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0r ICB2b2lkIGRlY29kZUJyYW5jaChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNv ZGVGUChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNvZGVWU1goU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKTsKLSsgIHZvaWQgZGVjb2RlVk1YKFNpbUluc3RydWN0aW9uKiBpbnN0cik7 Ci0rICAvLyBQb3dlciBJU0EgdjMuMSBwcmVmaXhlZCBpbnN0cnVjdGlvbnMuIGBwcmVmaXhgIHBv aW50cyBhdCB0aGUKLSsgIC8vIDQtYnl0ZSBwcmVmaXggd29yZDsgdGhlIHN1ZmZpeCBpcyByZWFk IGZyb20gYHByZWZpeCArIDRgLgotKyAgdm9pZCBkZWNvZGVQcmVmaXhlZChTaW1JbnN0cnVjdGlv biogcHJlZml4KTsKLSsKLSsgIHZvaWQgc29mdHdhcmVJbnRlcnJ1cHQoU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKTsKLSsKLSsgIC8vIFN0b3AvYnJlYWtwb2ludCBoZWxwZXJzLgotKyAgYm9vbCBpc1dh dGNocG9pbnQodWludDMyX3QgY29kZSk7Ci0rICB2b2lkIHByaW50V2F0Y2hwb2ludCh1aW50MzJf dCBjb2RlKTsKLSsgIHZvaWQgaGFuZGxlU3RvcCh1aW50MzJfdCBjb2RlLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpOwotKyAgYm9vbCBpc1N0b3BJbnN0cnVjdGlvbihTaW1JbnN0cnVjdGlvbiogaW5z dHIpOwotKyAgYm9vbCBpc0VuYWJsZWRTdG9wKHVpbnQzMl90IGNvZGUpOwotKyAgdm9pZCBlbmFi bGVTdG9wKHVpbnQzMl90IGNvZGUpOwotKyAgdm9pZCBkaXNhYmxlU3RvcCh1aW50MzJfdCBjb2Rl KTsKLSsgIHZvaWQgaW5jcmVhc2VTdG9wQ291bnRlcih1aW50MzJfdCBjb2RlKTsKLSsgIHZvaWQg cHJpbnRTdG9wSW5mbyh1aW50MzJfdCBjb2RlKTsKLSsKLSsgIEpTOjpQcm9maWxpbmdGcmFtZUl0 ZXJhdG9yOjpSZWdpc3RlclN0YXRlIHJlZ2lzdGVyU3RhdGUoKTsKLSsKLSsgIGJvb2wgTU9aX0FM V0FZU19JTkxJTkUgaGFuZGxlV2FzbVNlZ0ZhdWx0KHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIG51 bUJ5dGVzKSB7Ci0rICAgIGlmIChNT1pfTElLRUxZKCFqczo6d2FzbTo6Q29kZUV4aXN0cykpIHsK LSsgICAgICByZXR1cm4gZmFsc2U7Ci0rICAgIH0KLSsgICAgdWludDhfdCogbmV3UEM7Ci0rICAg IGlmICghanM6Ondhc206Ok1lbW9yeUFjY2Vzc1RyYXBzKHJlZ2lzdGVyU3RhdGUoKSwgKHVpbnQ4 X3QqKWFkZHIsIG51bUJ5dGVzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbmV3UEMpKSB7Ci0rICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICB9Ci0rICAgIExMQml0XyA9 IGZhbHNlOwotKyAgICBzZXRfcGMoaW50NjRfdChuZXdQQykpOwotKyAgICByZXR1cm4gdHJ1ZTsK LSsgIH0KLSsKLSsgIHZvaWQgaW5zdHJ1Y3Rpb25EZWNvZGUoU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KTsKLSsKLSsgcHVibGljOgotKyAgc3RhdGljIGludDY0X3QgU3RvcFNpbUF0OwotKwotKyAgc3Rh dGljIHZvaWQqIFJlZGlyZWN0TmF0aXZlRnVuY3Rpb24odm9pZCogbmF0aXZlRnVuY3Rpb24sCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQklGdW5jdGlvblR5cGUgdHlw ZSk7Ci0rCi0rIHByaXZhdGU6Ci0rICB2b2lkIHNldENhbGxSZXN1bHREb3VibGUoZG91YmxlIHJl c3VsdCk7Ci0rICB2b2lkIHNldENhbGxSZXN1bHRGbG9hdChmbG9hdCByZXN1bHQpOwotKyAgdm9p ZCBzZXRDYWxsUmVzdWx0KGludDY0X3QgcmVzKTsKLSsjICBpZmRlZiBYUF9EQVJXSU4KLSsgIHZv aWQgc2V0Q2FsbFJlc3VsdChpbnRwdHJfdCByZXMpOwotKyMgIGVuZGlmCi0rICB2b2lkIHNldENh bGxSZXN1bHQoX19pbnQxMjggcmVzKTsKLSsKLSsgIHZvaWQgY2FsbEludGVybmFsKHVpbnQ4X3Qq IGVudHJ5KTsKLSsKLSsgIC8vIEFyY2hpdGVjdHVyZSBzdGF0ZS4KLSsgIGludDY0X3QgcmVnaXN0 ZXJzX1trTnVtU2ltdVJlZ2lzdGVyc107Ci0rICBpbnQ2NF90IEZQVXJlZ2lzdGVyc19ba051bUZQ VVJlZ2lzdGVyc107Ci0rICAvLyBWUiBuYW1lc3BhY2UgKEFsdGl2ZWMvVk1YIHJlZ2lzdGVycyBW UjAtVlIzMSA9PSBWU1IzMi02MykuIFN0b3JlZCBhcwotKyAgLy8gMTYgcmF3IGJ5dGVzIHBlciBy ZWdpc3RlciB0byBwcmVzZXJ2ZSBleGFjdCBhcmNoaXRlY3R1cmFsIGJ5dGUgb3JkZXIKLSsgIC8v IGluZGVwZW5kZW50IG9mIGhvc3QgZW5kaWFubmVzcy4gQWNjZXNzb3JzIGRlZmluZWQgYmVsb3c7 IHRoZSBieXRlcwotKyAgLy8gYXJyYXkgaXMgdGhlIGdyb3VuZCB0cnV0aC4KLSsgIHVpbnQ4X3Qg VlJyZWdpc3RlcnNfW2tOdW1WUlJlZ2lzdGVyc11bMTZdOwotKwotKyAgLy8gUFBDNjQgU3BlY2lh bCBQdXJwb3NlIFJlZ2lzdGVycy4KLSsgIGludDY0X3QgTFJfOwotKyAgaW50NjRfdCBDVFJfOwot KyAgdWludDMyX3QgQ1JfOwotKyAgdWludDY0X3QgWEVSXzsKLSsgIHVpbnQ2NF90IEZQU0NSXzsK LSsKLSsgIC8vIEF0b21pY3MuCi0rICBib29sIExMQml0XzsKLSsgIHVpbnRwdHJfdCBMTEFkZHJf OwotKyAgaW50NjRfdCBsYXN0TExWYWx1ZV87Ci0rCi0rICAvLyBTaW11bGF0b3Igc3VwcG9ydC4K LSsgIGNoYXIqIHN0YWNrXzsKLSsgIHVpbnRwdHJfdCBzdGFja0xpbWl0XzsKLSsgIGJvb2wgcGNf bW9kaWZpZWRfOwotKyAgaW50NjRfdCBpY291bnRfOwotKyAgaW50NjRfdCBicmVha19jb3VudF87 Ci0rCi0rICBjaGFyKiBsYXN0RGVidWdnZXJJbnB1dF87Ci0rCi0rICBTaW1JbnN0cnVjdGlvbiog YnJlYWtfcGNfOwotKyAgSW5zdHIgYnJlYWtfaW5zdHJfOwotKwotKyAgYm9vbCBzaW5nbGVfc3Rl cHBpbmdfOwotKyAgU2luZ2xlU3RlcENhbGxiYWNrIHNpbmdsZV9zdGVwX2NhbGxiYWNrXzsKLSsg IHZvaWQqIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ187Ci0rCi0rICBzdGF0aWMgY29uc3QgdWlu dDMyX3Qga051bU9mV2F0Y2hlZFN0b3BzID0gMjU2OwotKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90 IGtTdG9wRGlzYWJsZWRCaXQgPSAxVSA8PCAzMTsKLSsKLSsgIHN0cnVjdCBTdG9wQ291bnRBbmRE ZXNjIHsKLSsgICAgdWludDMyX3QgY291bnRfOwotKyAgICBjaGFyKiBkZXNjXzsKLSsgIH07Ci0r ICBTdG9wQ291bnRBbmREZXNjIHdhdGNoZWRTdG9wc19ba051bU9mV2F0Y2hlZFN0b3BzXTsKLSt9 OwotKwotKy8vIFByb2Nlc3Mtd2lkZSBzaW11bGF0b3Igc3RhdGUuCi0rY2xhc3MgU2ltdWxhdG9y UHJvY2VzcyB7Ci0rICBmcmllbmQgY2xhc3MgUmVkaXJlY3Rpb247Ci0rICBmcmllbmQgY2xhc3Mg QXV0b0xvY2tTaW11bGF0b3JDYWNoZTsKLSsKLSsgcHJpdmF0ZToKLSsgIHN0cnVjdCBJQ2FjaGVI YXNoZXIgewotKyAgICB0eXBlZGVmIHZvaWQqIEtleTsKLSsgICAgdHlwZWRlZiB2b2lkKiBMb29r dXA7Ci0rICAgIHN0YXRpYyBIYXNoTnVtYmVyIGhhc2goY29uc3QgTG9va3VwJiBsKTsKLSsgICAg c3RhdGljIGJvb2wgbWF0Y2goY29uc3QgS2V5JiBrLCBjb25zdCBMb29rdXAmIGwpOwotKyAgfTsK LSsKLSsgcHVibGljOgotKyAgdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBDYWNoZVBhZ2UqLCBJQ2Fj aGVIYXNoZXIsIFN5c3RlbUFsbG9jUG9saWN5PiBJQ2FjaGVNYXA7Ci0rCi0rICBzdGF0aWMgbW96 aWxsYTo6QXRvbWljPHNpemVfdCwgbW96aWxsYTo6UmVsZWFzZUFjcXVpcmU+Ci0rICAgICAgSUNh Y2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQ7Ci0rICBzdGF0aWMgdm9pZCBGbHVzaElDYWNoZSh2b2lk KiBzdGFydCwgc2l6ZV90IHNpemUpOwotKyAgc3RhdGljIHZvaWQgY2hlY2tJQ2FjaGVMb2NrZWQo U2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsKLSsgIHN0YXRpYyBib29sIGluaXRpYWxpemUoKSB7 Ci0rICAgIHNpbmdsZXRvbl8gPSBqc19uZXc8U2ltdWxhdG9yUHJvY2Vzcz4oKTsKLSsgICAgcmV0 dXJuIHNpbmdsZXRvbl87Ci0rICB9Ci0rICBzdGF0aWMgdm9pZCBkZXN0cm95KCkgewotKyAgICBq c19kZWxldGUoc2luZ2xldG9uXyk7Ci0rICAgIHNpbmdsZXRvbl8gPSBudWxscHRyOwotKyAgfQot KwotKyAgU2ltdWxhdG9yUHJvY2VzcygpOwotKyAgflNpbXVsYXRvclByb2Nlc3MoKTsKLSsKLSsg cHJpdmF0ZToKLSsgIHN0YXRpYyBTaW11bGF0b3JQcm9jZXNzKiBzaW5nbGV0b25fOwotKwotKyAg TXV0ZXggY2FjaGVMb2NrXzsKLSsgIFJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbl87Ci0rICBJQ2Fj aGVNYXAgaWNhY2hlXzsKLSsKLSsgcHVibGljOgotKyAgc3RhdGljIElDYWNoZU1hcCYgaWNhY2hl KCkgewotKyAgICBzaW5nbGV0b25fLT5jYWNoZUxvY2tfLmFzc2VydE93bmVkQnlDdXJyZW50VGhy ZWFkKCk7Ci0rICAgIHJldHVybiBzaW5nbGV0b25fLT5pY2FjaGVfOwotKyAgfQotKwotKyAgc3Rh dGljIFJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbigpIHsKLSsgICAgc2luZ2xldG9uXy0+Y2FjaGVM b2NrXy5hc3NlcnRPd25lZEJ5Q3VycmVudFRocmVhZCgpOwotKyAgICByZXR1cm4gc2luZ2xldG9u Xy0+cmVkaXJlY3Rpb25fOwotKyAgfQotKwotKyAgc3RhdGljIHZvaWQgc2V0UmVkaXJlY3Rpb24o anM6OmppdDo6UmVkaXJlY3Rpb24qIHJlZGlyZWN0aW9uKSB7Ci0rICAgIHNpbmdsZXRvbl8tPmNh Y2hlTG9ja18uYXNzZXJ0T3duZWRCeUN1cnJlbnRUaHJlYWQoKTsKLSsgICAgc2luZ2xldG9uXy0+ cmVkaXJlY3Rpb25fID0gcmVkaXJlY3Rpb247Ci0rICB9Ci0rfTsKLSsKLSt9ICAvLyBuYW1lc3Bh Y2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2VuZGlmIC8qIEpTX1NJTVVMQVRPUl9Q UEM2NCAqLwotKwotKyNlbmRpZiAvKiBqaXRfcHBjNjRfU2ltdWxhdG9yX3BwYzY0X2ggKi8KLWRp ZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1RyYW1wb2xpbmUtcHBjNjQuY3BwIGIvanMvc3Jj L2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWlu ZGV4IDAwMDAwMDAwMDAwMC4uNTE1YTkzMWM4NmIwCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9z cmMvaml0L3BwYzY0L1RyYW1wb2xpbmUtcHBjNjQuY3BwCi1AQCAtMCwwICsxLDY0OCBAQAotKy8q IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh c2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6 Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo ZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBN UEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFp biBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpbmNsdWRlICJq aXQvQmFpbG91dHMuaCIKLSsjaW5jbHVkZSAiaml0L0Jhc2VsaW5lRnJhbWUuaCIKLSsjaW5jbHVk ZSAiaml0L0NhbGxlZVRva2VuLmgiCi0rI2luY2x1ZGUgImppdC9KaXRGcmFtZXMuaCIKLSsjaW5j bHVkZSAiaml0L0ppdFJ1bnRpbWUuaCIKLSsjaW5jbHVkZSAiaml0L1BlcmZTcGV3ZXIuaCIKLSsj aW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC5oIgotKyNpbmNsdWRlICJq aXQvVk1GdW5jdGlvbnMuaCIKLSsjaW5jbHVkZSAidm0vSml0QWN0aXZhdGlvbi5oIgotKyNpbmNs dWRlICJ2bS9KU0NvbnRleHQuaCIKLSsKLSsjaW5jbHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLWlu bC5oIgotKwotK3VzaW5nIG5hbWVzcGFjZSBqczsKLSt1c2luZyBuYW1lc3BhY2UganM6OmppdDsK LSsKLSsvLyBGbG9hdCAoU2luZ2xlK0RvdWJsZSkgYW5kIGFsbCBHUFJzLiBTaW1kMTI4IGV4Y2x1 ZGVkIOKAlCBJb24gY29tcGlsZXMgSlMKLSsvLyAobm8gdjEyOCB0eXBlKSwgc28gU0lNRCByZWdz IGFyZSBuZXZlciBsaXZlIGF0IGJhaWxvdXQgLyBpbnZhbGlkYXRvciAvCi0rLy8gcHJlQmFycmll ciBlbnRyeS4gSW5jbHVkaW5nIHRoZW0gd291bGQgZm9yY2UgdGhlIGJhaWxvdXQgZnJhbWUncwot Ky8vIEZQVUFycmF5IHRvIGhvbGQgdjEyOCBzbG90cyB0aGF0IElvbiBuZXZlciB3cml0ZXMuCi0r c3RhdGljIGNvbnN0IExpdmVSZWdpc3RlclNldCBBbGxSZWdzID0gTGl2ZVJlZ2lzdGVyU2V0KAot KyAgICBHZW5lcmFsUmVnaXN0ZXJTZXQoUmVnaXN0ZXJzOjpBbGxNYXNrKSwKLSsgICAgRmxvYXRS ZWdpc3RlclNldChGbG9hdFJlZ2lzdGVyczo6QWxsU2luZ2xlTWFzayB8Ci0rICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbERvdWJsZU1hc2spKTsKLSsKLStzdGF0aWNfYXNz ZXJ0KHNpemVvZih1aW50cHRyX3QpID09IHNpemVvZih1aW50NjRfdCksICJOb3QgNjQtYml0IGNs ZWFuLiIpOwotKwotKy8vIFBQQzY0IEVMRnYyIGNhbGxlZS1zYXZlZDogR1BScyByMTQtcjMxLCBG UFJzIGYxNC1mMzEsIFZScyBWUjIwLVZSMzEsIExSLgotKy8vIFdlIGFsc28gc2F2ZSByZWdfdnAg KHIxMCAvIEludEFyZ1JlZzcpIHNvIHdlIGNhbiB1c2UgaXQgYWZ0ZXIgdGhlIEpJVCBjYWxsLgot Ky8vCi0rLy8gTGF5b3V0IGlzIGFsaWduYXMoMTYpIHNvIHRoYXQgYWZ0ZXIgYHJlc2VydmVTdGFj ayhzaXplb2YoRW50ZXJKSVRSZWdzKSlgCi0rLy8gdGhlIFNQLXJlbGF0aXZlIG9mZnNldCBvZiBl dmVyeSBWUiBzbG90IGlzIDE2LWJ5dGUgYWxpZ25lZCwgc2F0aXNmeWluZwotKy8vIHRoZSAxNi1i eXRlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBzdHh2ZDJ4IC8gc3R2eCAoc3R2eCBpcyB0ZWNo bmljYWxseQotKy8vIGFsaWdubWVudC10b2xlcmFudCwgYnV0IHdlJ2QgcmF0aGVyIGFsaWduIGJ5 IGNvbnN0cnVjdGlvbikuIFBhZGRpbmcgYXQKLSsvLyB0aGUgZW5kIGtlZXBzIHNpemVvZiBhIG11 bHRpcGxlIG9mIDE2IHNvIFNQIHN0YXlzIHF1YWR3b3JkLWFsaWduZWQgcGVyCi0rLy8gdGhlIEVM RnYyIHN0YWNrLXBvaW50ZXIgcnVsZS4KLStzdHJ1Y3QgYWxpZ25hcygxNikgRW50ZXJKSVRSZWdz IHsKLSsgIC8vIFZSMjAtVlIzMSBmaXJzdCBzbyB0aGVpciBTUC1yZWxhdGl2ZSBvZmZzZXRzIGFy ZSAwLCAxNiwgMzIsIC4uLiDigJQgYWxsCi0rICAvLyAxNi1ieXRlIGFsaWduZWQgcmVnYXJkbGVz cyBvZiB3aGF0IGZvbGxvd3MuCi0rICB1aW50OF90IHZyMjBbMTZdOwotKyAgdWludDhfdCB2cjIx WzE2XTsKLSsgIHVpbnQ4X3QgdnIyMlsxNl07Ci0rICB1aW50OF90IHZyMjNbMTZdOwotKyAgdWlu dDhfdCB2cjI0WzE2XTsKLSsgIHVpbnQ4X3QgdnIyNVsxNl07Ci0rICB1aW50OF90IHZyMjZbMTZd OwotKyAgdWludDhfdCB2cjI3WzE2XTsKLSsgIHVpbnQ4X3QgdnIyOFsxNl07Ci0rICB1aW50OF90 IHZyMjlbMTZdOwotKyAgdWludDhfdCB2cjMwWzE2XTsKLSsgIHVpbnQ4X3QgdnIzMVsxNl07Ci0r Ci0rICBkb3VibGUgZjMxOwotKyAgZG91YmxlIGYzMDsKLSsgIGRvdWJsZSBmMjk7Ci0rICBkb3Vi bGUgZjI4OwotKyAgZG91YmxlIGYyNzsKLSsgIGRvdWJsZSBmMjY7Ci0rICBkb3VibGUgZjI1Owot KyAgZG91YmxlIGYyNDsKLSsgIGRvdWJsZSBmMjM7Ci0rICBkb3VibGUgZjIyOwotKyAgZG91Ymxl IGYyMTsKLSsgIGRvdWJsZSBmMjA7Ci0rICBkb3VibGUgZjE5OwotKyAgZG91YmxlIGYxODsKLSsg IGRvdWJsZSBmMTc7Ci0rICBkb3VibGUgZjE2OwotKyAgZG91YmxlIGYxNTsKLSsgIGRvdWJsZSBm MTQ7Ci0rCi0rICB1aW50NjRfdCByMzE7ICAvLyBGcmFtZVBvaW50ZXIKLSsgIHVpbnQ2NF90IHIz MDsKLSsgIHVpbnQ2NF90IHIyOTsKLSsgIHVpbnQ2NF90IHIyODsKLSsgIHVpbnQ2NF90IHIyNzsK LSsgIHVpbnQ2NF90IHIyNjsKLSsgIHVpbnQ2NF90IHIyNTsKLSsgIHVpbnQ2NF90IHIyNDsKLSsg IHVpbnQ2NF90IHIyMzsKLSsgIHVpbnQ2NF90IHIyMjsKLSsgIHVpbnQ2NF90IHIyMTsKLSsgIHVp bnQ2NF90IHIyMDsKLSsgIHVpbnQ2NF90IHIxOTsKLSsgIHVpbnQ2NF90IHIxODsKLSsgIHVpbnQ2 NF90IHIxNzsKLSsgIHVpbnQ2NF90IHIxNjsKLSsgIHVpbnQ2NF90IHIxNTsKLSsgIHVpbnQ2NF90 IHIxNDsKLSsgIHVpbnQ2NF90IHIyOyAgLy8gVE9DIHBvaW50ZXIKLSsgIHVpbnQ2NF90IGxyOwot KyAgLy8gU2F2ZSByZWdfdnAgKHIxMCkgb24gc3RhY2sgc28gd2UgY2FuIHVzZSBpdCBhZnRlciB0 aGUgSklUIGNhbGwgcmV0dXJucy4KLSsgIHVpbnQ2NF90IHIxMDsKLSt9OwotKy8vIGFsaWduYXMo MTYpIG9uIHRoZSBzdHJ1Y3QgZW5zdXJlcyBzaXplb2YgaXMgYSBtdWx0aXBsZSBvZiAxNiwgd2hp Y2gga2VlcHMKLSsvLyBTUCBxdWFkd29yZC1hbGlnbmVkIGFmdGVyIGByZXNlcnZlU3RhY2soc2l6 ZW9mKEVudGVySklUUmVncykpYC4gVGhlCi0rLy8gZXhpc3RpbmcgZmllbGRzIHRvdGFsIDMxMiBi eXRlczsgd2l0aCB0aGUgMTkyIGJ5dGVzIG9mIFZSIHNsb3RzIHdlIGFyZQotKy8vIGF0IDUwNCwg d2hpY2ggYWxpZ25hcygxNikgYnVtcHMgdG8gNTEyLgotK3N0YXRpY19hc3NlcnQoKHNpemVvZihF bnRlckpJVFJlZ3MpICUgMTYpID09IDAsCi0rICAgICAgICAgICAgICAiRW50ZXJKSVRSZWdzIG11 c3QgYmUgMTYtYnl0ZSBhbGlnbmVkIHRvIGtlZXAgU1AgYWxpZ25lZCIpOwotKwotK3N0YXRpYyB2 b2lkIEdlbmVyYXRlUmV0dXJuKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7Ci0rICBNT1pfQVNTRVJU KG1hc20uZnJhbWVQdXNoZWQoKSA9PSBzaXplb2YoRW50ZXJKSVRSZWdzKSk7Ci0rCi0rICAvLyBS ZXN0b3JlIG5vbi12b2xhdGlsZSBHUFJzLgotKyAgbWFzbS5hc19sZChyMTQsIFN0YWNrUG9pbnRl ciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTQpKTsKLSsgIG1hc20uYXNfbGQocjE1LCBTdGFj a1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE1KSk7Ci0rICBtYXNtLmFzX2xkKHIx NiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxNikpOwotKyAgbWFzbS5h c19sZChyMTcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTcpKTsKLSsg IG1hc20uYXNfbGQocjE4LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE4 KSk7Ci0rICBtYXNtLmFzX2xkKHIxOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIxOSkpOwotKyAgbWFzbS5hc19sZChyMjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCByMjApKTsKLSsgIG1hc20uYXNfbGQocjIxLCBTdGFja1BvaW50ZXIsIG9mZnNl dG9mKEVudGVySklUUmVncywgcjIxKSk7Ci0rICBtYXNtLmFzX2xkKHIyMiwgU3RhY2tQb2ludGVy LCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMikpOwotKyAgbWFzbS5hc19sZChyMjMsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjMpKTsKLSsgIG1hc20uYXNfbGQocjI0 LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI0KSk7Ci0rICBtYXNtLmFz X2xkKHIyNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNSkpOwotKyAg bWFzbS5hc19sZChyMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjYp KTsKLSsgIG1hc20uYXNfbGQocjI3LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjI3KSk7Ci0rICBtYXNtLmFzX2xkKHIyOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIHIyOCkpOwotKyAgbWFzbS5hc19sZChyMjksIFN0YWNrUG9pbnRlciwgb2Zmc2V0 b2YoRW50ZXJKSVRSZWdzLCByMjkpKTsKLSsgIG1hc20uYXNfbGQocjMwLCBTdGFja1BvaW50ZXIs IG9mZnNldG9mKEVudGVySklUUmVncywgcjMwKSk7Ci0rICBtYXNtLmFzX2xkKHIzMSwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIzMSkpOwotKyAgbWFzbS5hc19sZChyMiwg U3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyKSk7Ci0rCi0rICAvLyBSZXN0 b3JlIExSLgotKyAgbWFzbS5hc19sZChyMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGxyKSk7Ci0rICBtYXNtLnhzX210bHIocjApOwotKwotKyAgLy8gUmVzdG9yZSBub24t dm9sYXRpbGUgRlBScy4KLSsgIG1hc20uYXNfbGZkKGYxNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRv ZihFbnRlckpJVFJlZ3MsIGYxNCkpOwotKyAgbWFzbS5hc19sZmQoZjE1LCBTdGFja1BvaW50ZXIs IG9mZnNldG9mKEVudGVySklUUmVncywgZjE1KSk7Ci0rICBtYXNtLmFzX2xmZChmMTYsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTYpKTsKLSsgIG1hc20uYXNfbGZkKGYx NywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNykpOwotKyAgbWFzbS5h c19sZmQoZjE4LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjE4KSk7Ci0r ICBtYXNtLmFzX2xmZChmMTksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MTkpKTsKLSsgIG1hc20uYXNfbGZkKGYyMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYyMCkpOwotKyAgbWFzbS5hc19sZmQoZjIxLCBTdGFja1BvaW50ZXIsIG9mZnNldG9m KEVudGVySklUUmVncywgZjIxKSk7Ci0rICBtYXNtLmFzX2xmZChmMjIsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjIpKTsKLSsgIG1hc20uYXNfbGZkKGYyMywgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMykpOwotKyAgbWFzbS5hc19sZmQoZjI0 LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjI0KSk7Ci0rICBtYXNtLmFz X2xmZChmMjUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjUpKTsKLSsg IG1hc20uYXNfbGZkKGYyNiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYy NikpOwotKyAgbWFzbS5hc19sZmQoZjI3LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgZjI3KSk7Ci0rICBtYXNtLmFzX2xmZChmMjgsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjgpKTsKLSsgIG1hc20uYXNfbGZkKGYyOSwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyOSkpOwotKyAgbWFzbS5hc19sZmQoZjMwLCBTdGFja1Bv aW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjMwKSk7Ci0rICBtYXNtLmFzX2xmZChmMzEs IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMzEpKTsKLSsKLSsgIC8vIFJl c3RvcmUgY2FsbGVlLXNhdmVkIFZSMjAtVlIzMSAoRUxGdjIpLiBsdnggdXNlcyBpbmRleGVkIGFk ZHJlc3NpbmcKLSsgIC8vIChSQSArIFJCKSwgYW5kIHIwJ3MgdmFsdWUgaXMgdXNlZCBoZXJlIGFz IFJCIChSQSA9IFN0YWNrUG9pbnRlciBpcwotKyAgLy8gbm9uLXplcm8sIHNvIGl0cyB2YWx1ZSBp cyBhZGRlZCkuIHIwIGlzIG5vbi1hbGxvY2F0YWJsZS4KLSsjZGVmaW5lIFJFU1RPUkVfVlIoTikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgbWFz bS54c19saShyMCwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCB2ciMjTikpOyAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBtYXNtLmFzX2x2eChOLCBTdGFja1BvaW50ZXIsIHIwKQotKyAgUkVTVE9S RV9WUigyMCk7IFJFU1RPUkVfVlIoMjEpOyBSRVNUT1JFX1ZSKDIyKTsgUkVTVE9SRV9WUigyMyk7 Ci0rICBSRVNUT1JFX1ZSKDI0KTsgUkVTVE9SRV9WUigyNSk7IFJFU1RPUkVfVlIoMjYpOyBSRVNU T1JFX1ZSKDI3KTsKLSsgIFJFU1RPUkVfVlIoMjgpOyBSRVNUT1JFX1ZSKDI5KTsgUkVTVE9SRV9W UigzMCk7IFJFU1RPUkVfVlIoMzEpOwotKyN1bmRlZiBSRVNUT1JFX1ZSCi0rCi0rICBtYXNtLmZy ZWVTdGFjayhzaXplb2YoRW50ZXJKSVRSZWdzKSk7Ci0rCi0rICBtYXNtLmFzX2JscigpOwotK30K LSsKLStzdGF0aWMgdm9pZCBHZW5lcmF0ZVByb2xvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7 Ci0rICAvLyBTYXZlIExSIGZpcnN0IChQUEM2NCBMUiBpcyBTUFIsIG5vdCBHUFIpLgotKyAgbWFz bS54c19tZmxyKHIwKTsKLSsKLSsgIC8vIEVMRnYyIHByb2xvZ3VlIGNvbnZlbnRpb246IHNhdmUg TFIgYXQgY2FsbGVyJ3MgZnJhbWUgW1NQKzE2XSBCRUZPUkUKLSsgIC8vIGRlY3JlbWVudGluZyBT UC4gRXh0ZXJuYWwgdW53aW5kZXJzIChnZGIsIHBlcmYsIGxpYnVud2luZCkgd2FsayB0aGUKLSsg IC8vIHN0YWNrIGJ5IHJlYWRpbmcgTFItc2F2ZSBzbG90cyBhdCBbU1ArMTZdIG9mIGV2ZXJ5IGZy YW1lOyB3aXRob3V0Ci0rICAvLyB0aGlzIHdyaXRlIHRoZXknZCBmaW5kIGp1bmsgYXQgb3VyIGNh bGxlcidzIHNsb3QuIENvc3RzIDEgZXh0cmEKLSsgIC8vIGluc3RydWN0aW9uOyB3ZSBzdGlsbCBr ZWVwIHRoZSBpbi1mcmFtZSBzYXZlIGJlbG93IGZvciBjbGVhbgotKyAgLy8gcmVzdG9yZSBzeW1t ZXRyeS4KLSsgIG1hc20uYXNfc3RkKHIwLCBTdGFja1BvaW50ZXIsIDE2KTsKLSsKLSsgIG1hc20u cmVzZXJ2ZVN0YWNrKHNpemVvZihFbnRlckpJVFJlZ3MpKTsKLSsKLSsgIC8vIFNhdmUgTFIgKGFs c28ga2VwdCBpbiBvdXIgb3duIGZyYW1lIGZvciB0aGUgY2xlYW4gcmVzdG9yZSBpbgotKyAgLy8g R2VuZXJhdGVSZXR1cm4g4oCUIHNlZSBjb21tZW50IHRoZXJlKS4KLSsgIG1hc20uYXNfc3RkKHIw LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgbHIpKTsKLSsKLSsgIC8vIFNh dmUgbm9uLXZvbGF0aWxlIEdQUnMuCi0rICBtYXNtLmFzX3N0ZChyMiwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyKSk7Ci0rICBtYXNtLmFzX3N0ZChyMTQsIFN0YWNrUG9p bnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTQpKTsKLSsgIG1hc20uYXNfc3RkKHIxNSwg U3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxNSkpOwotKyAgbWFzbS5hc19z dGQocjE2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE2KSk7Ci0rICBt YXNtLmFzX3N0ZChyMTcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTcp KTsKLSsgIG1hc20uYXNfc3RkKHIxOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIxOCkpOwotKyAgbWFzbS5hc19zdGQocjE5LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVu dGVySklUUmVncywgcjE5KSk7Ci0rICBtYXNtLmFzX3N0ZChyMjAsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMjApKTsKLSsgIG1hc20uYXNfc3RkKHIyMSwgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMSkpOwotKyAgbWFzbS5hc19zdGQocjIyLCBT dGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIyKSk7Ci0rICBtYXNtLmFzX3N0 ZChyMjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjMpKTsKLSsgIG1h c20uYXNfc3RkKHIyNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNCkp OwotKyAgbWFzbS5hc19zdGQocjI1LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjI1KSk7Ci0rICBtYXNtLmFzX3N0ZChyMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCByMjYpKTsKLSsgIG1hc20uYXNfc3RkKHIyNywgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIHIyNykpOwotKyAgbWFzbS5hc19zdGQocjI4LCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI4KSk7Ci0rICBtYXNtLmFzX3N0ZChyMjksIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjkpKTsKLSsgIG1hc20uYXNfc3Rk KHIzMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIzMCkpOwotKyAgbWFz bS5hc19zdGQocjMxLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjMxKSk7 Ci0rCi0rICAvLyBTYXZlIHJlZ192cCAocjEwKSBzbyB3ZSBjYW4gcmV0cmlldmUgaXQgYWZ0ZXIg dGhlIEpJVCBjYWxsLgotKyAgbWFzbS5hc19zdGQocjEwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9m KEVudGVySklUUmVncywgcjEwKSk7Ci0rCi0rICAvLyBTYXZlIG5vbi12b2xhdGlsZSBGUFJzLgot KyAgbWFzbS5hc19zdGZkKGYxNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3Ms IGYxNCkpOwotKyAgbWFzbS5hc19zdGZkKGYxNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIGYxNSkpOwotKyAgbWFzbS5hc19zdGZkKGYxNiwgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIGYxNikpOwotKyAgbWFzbS5hc19zdGZkKGYxNywgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNykpOwotKyAgbWFzbS5hc19zdGZkKGYxOCwg U3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxOCkpOwotKyAgbWFzbS5hc19z dGZkKGYxOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxOSkpOwotKyAg bWFzbS5hc19zdGZkKGYyMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYy MCkpOwotKyAgbWFzbS5hc19zdGZkKGYyMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYyMSkpOwotKyAgbWFzbS5hc19zdGZkKGYyMiwgU3RhY2tQb2ludGVyLCBvZmZzZXRv ZihFbnRlckpJVFJlZ3MsIGYyMikpOwotKyAgbWFzbS5hc19zdGZkKGYyMywgU3RhY2tQb2ludGVy LCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMykpOwotKyAgbWFzbS5hc19zdGZkKGYyNCwgU3Rh Y2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNCkpOwotKyAgbWFzbS5hc19zdGZk KGYyNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNSkpOwotKyAgbWFz bS5hc19zdGZkKGYyNiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNikp OwotKyAgbWFzbS5hc19zdGZkKGYyNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIGYyNykpOwotKyAgbWFzbS5hc19zdGZkKGYyOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihF bnRlckpJVFJlZ3MsIGYyOCkpOwotKyAgbWFzbS5hc19zdGZkKGYyOSwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyOSkpOwotKyAgbWFzbS5hc19zdGZkKGYzMCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYzMCkpOwotKyAgbWFzbS5hc19zdGZkKGYz MSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYzMSkpOwotKwotKyAgLy8g U2F2ZSBjYWxsZWUtc2F2ZWQgVlIyMC1WUjMxIChFTEZ2MikuIFRoZSBKSVQgZnJlZWx5IHVzZXMg Vk1YIHJlZ2lzdGVycwotKyAgLy8gdmlhIEVtaXRWbXhCaW5hcnkgZXRjLjsgd2l0aG91dCB0aGlz IHNhdmUgdGhlIEMgY2FsbGVyJ3MgVlIyMC1WUjMxCi0rICAvLyBjb250ZW50cyB3b3VsZCBiZSB0 cmFzaGVkIG9uIHJldHVybi4gc3R2eCB1c2VzIGluZGV4ZWQgYWRkcmVzc2luZyDigJQKLSsgIC8v IHIwIGhvbGRzIHRoZSBvZmZzZXQgKG5vbi1hbGxvY2F0YWJsZSBpbiBKSVQgcmVnYWxsb2M7IHNh ZmUgdG8gdXNlIGFzCi0rICAvLyBhIGZyZWUgdGVtcCBoZXJlKS4KLSsjZGVmaW5lIFNBVkVfVlIo TikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgbWFzbS54c19saShyMCwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCB2ciMjTikpOyAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBtYXNtLmFzX3N0dngoTiwgU3RhY2tQb2ludGVyLCByMCkKLSsg IFNBVkVfVlIoMjApOyBTQVZFX1ZSKDIxKTsgU0FWRV9WUigyMik7IFNBVkVfVlIoMjMpOwotKyAg U0FWRV9WUigyNCk7IFNBVkVfVlIoMjUpOyBTQVZFX1ZSKDI2KTsgU0FWRV9WUigyNyk7Ci0rICBT QVZFX1ZSKDI4KTsgU0FWRV9WUigyOSk7IFNBVkVfVlIoMzApOyBTQVZFX1ZSKDMxKTsKLSsjdW5k ZWYgU0FWRV9WUgotK30KLSsKLSt2b2lkIEppdFJ1bnRpbWU6OmdlbmVyYXRlRW50ZXJKSVQoSlND b250ZXh0KiBjeCwgTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSsgIEF1dG9DcmVhdGVkQnkgYWNi KG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUVudGVySklUIik7Ci0rCi0rICBlbnRlckpJVE9m ZnNldF8gPSBzdGFydFRyYW1wb2xpbmVDb2RlKG1hc20pOwotKwotKyAgLy8gRW50ZXJKaXRDb2Rl IHNpZ25hdHVyZTogKHZvaWQqIGNvZGUsIHVuc2lnbmVkIGFyZ2MsIFZhbHVlKiBhcmd2LAotKyAg Ly8gICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycHJldGVyRnJhbWUqIGZwLCBDYWxsZWVU b2tlbiBjYWxsZWVUb2tlbiwKLSsgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVj dCogZW52Q2hhaW4sIHNpemVfdCBudW1TdGFja1ZhbHVlcywKLSsgIC8vICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZSogdnApCi0rICBjb25zdCBSZWdpc3RlciByZWdfY29kZSA9IEludEFy Z1JlZzA7ICAgICAgICAgICAgICAgICAgICAgICAvLyByMwotKyAgY29uc3QgUmVnaXN0ZXIgcmVn X2FyZ2MgPSBJbnRBcmdSZWcxOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcjQKLSsgIGNvbnN0 IFJlZ2lzdGVyIHJlZ19hcmd2ID0gSW50QXJnUmVnMjsgICAgICAgICAgICAgICAgICAgICAgIC8v IHI1Ci0rICBjb25zdCBtb3ppbGxhOjpEZWJ1Z09ubHk8UmVnaXN0ZXI+IHJlZ19mcmFtZSA9IElu dEFyZ1JlZzM7ICAvLyByNgotKyAgY29uc3QgUmVnaXN0ZXIgcmVnX3Rva2VuID0gSW50QXJnUmVn NDsgICAgICAgICAgICAgICAgICAgICAgLy8gcjcKLSsgIGNvbnN0IFJlZ2lzdGVyIHJlZ19jaGFp biA9IEludEFyZ1JlZzU7ICAgICAgICAgICAgICAgICAgICAgIC8vIHI4Ci0rICBjb25zdCBSZWdp c3RlciByZWdfdmFsdWVzID0gSW50QXJnUmVnNjsgICAgICAgICAgICAgICAgICAgICAvLyByOQot KyAgY29uc3QgUmVnaXN0ZXIgcmVnX3ZwID0gSW50QXJnUmVnNzsgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gcjEwCi0rCi0rICBNT1pfQVNTRVJUKE9zckZyYW1lUmVnID09IHJlZ19mcmFtZSk7 Ci0rCi0rICBHZW5lcmF0ZVByb2xvZ3VlKG1hc20pOwotKwotKyAgLy8gU2F2ZSBzdGFjayBwb2lu dGVyIGFzIGJhc2VsaW5lIGZyYW1lLgotKyAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwgRnJh bWVQb2ludGVyKTsKLSsKLSsgIC8vIFVzZSBub24tdm9sYXRpbGUgc2NyYXRjaCByZWdpc3RlcnMg Zm9yIGdlbmVyYXRlRW50ZXJKaXRTaGFyZWQuCi0rICAvLyByMTQsIHIxNSwgcjE3IGFyZSBub24t dm9sYXRpbGUgYW5kIG5vdCBzcGVjaWFsLXB1cnBvc2UgaW4gSklULgotKyAgZ2VuZXJhdGVFbnRl ckppdFNoYXJlZChtYXNtLCByZWdfYXJnYywgcmVnX2FyZ3YsIHJlZ190b2tlbiwgcjE0LCByMTUs IHIxNyk7Ci0rCi0rICAvLyBQdXNoIHRoZSBkZXNjcmlwdG9yLgotKyAgbWFzbS51bmJveEludDMy KEFkZHJlc3MocmVnX3ZwLCAwKSwgcjE0KTsKLSsgIG1hc20ucHVzaEZyYW1lRGVzY3JpcHRvckZv ckppdENhbGwoRnJhbWVUeXBlOjpDcHBUb0pTSml0LCByMTQsIHIxNCk7Ci0rCi0rICBDb2RlTGFi ZWwgcmV0dXJuTGFiZWw7Ci0rICBMYWJlbCBvb21SZXR1cm5MYWJlbDsKLSsgIHsKLSsgICAgLy8g SGFuZGxlIEludGVycHJldGVyIC0+IEJhc2VsaW5lIE9TUi4KLSsgICAgQWxsb2NhdGFibGVHZW5l cmFsUmVnaXN0ZXJTZXQgcmVncyhHZW5lcmFsUmVnaXN0ZXJTZXQ6OkFsbCgpKTsKLSsgICAgTU9a X0FTU0VSVCghcmVncy5oYXMoRnJhbWVQb2ludGVyKSk7Ci0rICAgIHJlZ3MudGFrZShPc3JGcmFt ZVJlZyk7Ci0rICAgIHJlZ3MudGFrZShyZWdfY29kZSk7Ci0rICAgIE1PWl9BU1NFUlQoIXJlZ3Mu aGFzKFJldHVyblJlZyksICJSZXR1cm5SZWcgbWF0Y2hlcyByZWdfY29kZSIpOwotKwotKyAgICBM YWJlbCBub3RPc3I7Ci0rICAgIG1hc20uYnJhbmNoVGVzdFB0cihBc3NlbWJsZXI6Olplcm8sIE9z ckZyYW1lUmVnLCBPc3JGcmFtZVJlZywgJm5vdE9zcik7Ci0rCi0rICAgIFJlZ2lzdGVyIG51bVN0 YWNrVmFsdWVzID0gcmVnX3ZhbHVlczsKLSsgICAgcmVncy50YWtlKG51bVN0YWNrVmFsdWVzKTsK LSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHJlZ3MudGFrZUFueSgpOwotKwotKyAgICAvLyBQdXNo IHJldHVybiBhZGRyZXNzLgotKyAgICBtYXNtLnN1YlB0cihJbW0zMihzaXplb2YodWludHB0cl90 KSksIFN0YWNrUG9pbnRlcik7Ci0rICAgIG1hc20ubW92KCZyZXR1cm5MYWJlbCwgc2NyYXRjaCk7 Ci0rICAgIG1hc20uc3RvcmVQdHIoc2NyYXRjaCwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApKTsK LSsKLSsgICAgLy8gUHVzaCBwcmV2aW91cyBmcmFtZSBwb2ludGVyLgotKyAgICBtYXNtLnN1YlB0 cihJbW0zMihzaXplb2YodWludHB0cl90KSksIFN0YWNrUG9pbnRlcik7Ci0rICAgIG1hc20uc3Rv cmVQdHIoRnJhbWVQb2ludGVyLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOwotKwotKyAgICAv LyBSZXNlcnZlIGZyYW1lLgotKyAgICBSZWdpc3RlciBmcmFtZVB0ciA9IEZyYW1lUG9pbnRlcjsK LSsgICAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwgZnJhbWVQdHIpOwotKyAgICBtYXNtLnN1 YlB0cihJbW0zMihCYXNlbGluZUZyYW1lOjpTaXplKCkpLCBTdGFja1BvaW50ZXIpOwotKwotKyAg ICBSZWdpc3RlciBmcmFtZVB0clNjcmF0Y2ggPSByZWdzLnRha2VBbnkoKTsKLSsgICAgbWFzbS5t b3ZlUHRyKFN0YWNrUG9pbnRlciwgZnJhbWVQdHJTY3JhdGNoKTsKLSsKLSsgICAgLy8gUmVzZXJ2 ZSBzcGFjZSBmb3IgbG9jYWxzIGFuZCBzdGFjayB2YWx1ZXMuCi0rICAgIG1hc20ueF9zbGRpKHNj cmF0Y2gsIG51bVN0YWNrVmFsdWVzLCAzKTsKLSsgICAgbWFzbS5zdWJQdHIoc2NyYXRjaCwgU3Rh Y2tQb2ludGVyKTsKLSsKLSsgICAgLy8gRW50ZXIgZXhpdCBmcmFtZS4KLSsgICAgbWFzbS5yZXNl cnZlU3RhY2soMyAqIHNpemVvZih1aW50cHRyX3QpKTsKLSsgICAgbWFzbS5zdG9yZVB0cihJbW1X b3JkKE1ha2VGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBlOjpCYXNlbGluZUpTKSksCi0rICAgICAg ICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDIgKiBzaXplb2YodWludHB0cl90KSkp OwotKyAgICBtYXNtLnN0b3JlUHRyKEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhTdGFja1BvaW50 ZXIsIHNpemVvZih1aW50cHRyX3QpKSk7Ci0rICAgIG1hc20uc3RvcmVQdHIoRnJhbWVQb2ludGVy LCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOwotKwotKyAgICAvLyBObyBHQyB0aGluZ3MgdG8g bWFyaywgcHVzaCBhIGJhcmUgdG9rZW4uCi0rICAgIG1hc20ubG9hZEpTQ29udGV4dChzY3JhdGNo KTsKLSsgICAgbWFzbS5lbnRlckZha2VFeGl0RnJhbWUoc2NyYXRjaCwgc2NyYXRjaCwgRXhpdEZy YW1lVHlwZTo6QmFyZSk7Ci0rCi0rICAgIG1hc20ucmVzZXJ2ZVN0YWNrKDIgKiBzaXplb2YodWlu dHB0cl90KSk7Ci0rICAgIG1hc20uc3RvcmVQdHIoZnJhbWVQdHIsIEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBzaXplb2YodWludHB0cl90KSkpOwotKyAgICBtYXNtLnN0b3JlUHRyKHJlZ19jb2RlLCBB ZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOwotKwotKyAgICB1c2luZyBGbiA9IHZvaWQgKCopKEJh c2VsaW5lRnJhbWUqIGZyYW1lLCBJbnRlcnByZXRlckZyYW1lKiBpbnRlcnBGcmFtZSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1TdGFja1ZhbHVlcyk7Ci0rICAgIG1hc20u c2V0dXBVbmFsaWduZWRBQklDYWxsKHNjcmF0Y2gpOwotKyAgICBtYXNtLnBhc3NBQklBcmcoZnJh bWVQdHJTY3JhdGNoKTsKLSsgICAgbWFzbS5wYXNzQUJJQXJnKE9zckZyYW1lUmVnKTsKLSsgICAg bWFzbS5wYXNzQUJJQXJnKG51bVN0YWNrVmFsdWVzKTsKLSsgICAgbWFzbS5jYWxsV2l0aEFCSTxG biwgaml0OjpJbml0QmFzZWxpbmVGcmFtZUZvck9zcj4oCi0rICAgICAgICBBQklUeXBlOjpHZW5l cmFsLCBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJOjpEb250Q2hlY2tIYXNFeGl0RnJhbWUpOwotKwot KyAgICByZWdzLmFkZChPc3JGcmFtZVJlZyk7Ci0rICAgIFJlZ2lzdGVyIGppdGNvZGUgPSByZWdz LnRha2VBbnkoKTsKLSsgICAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSwg aml0Y29kZSk7Ci0rICAgIG1hc20ubG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgc2l6ZW9m KHVpbnRwdHJfdCkpLCBmcmFtZVB0cik7Ci0rICAgIG1hc20uZnJlZVN0YWNrKDIgKiBzaXplb2Yo dWludHB0cl90KSk7Ci0rCi0rICAgIG1hc20uZnJlZVN0YWNrKEV4aXRGcmFtZUxheW91dDo6U2l6 ZVdpdGhGb290ZXIoKSk7Ci0rCi0rICAgIC8vIElmIE9TUi1pbmcsIHRoZW4gZW1pdCBpbnN0cnVt ZW50YXRpb24gZm9yIHNldHRpbmcgbGFzdFByb2ZpbGVyRnJhbWUKLSsgICAgLy8gaWYgcHJvZmls ZXIgaW5zdHJ1bWVudGF0aW9uIGlzIGVuYWJsZWQuCi0rICAgIHsKLSsgICAgICBMYWJlbCBza2lw UHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uOwotKyAgICAgIEFic29sdXRlQWRkcmVzcyBhZGRyZXNz T2ZFbmFibGVkKAotKyAgICAgICAgICBjeC0+cnVudGltZSgpLT5nZWNrb1Byb2ZpbGVyKCkuYWRk cmVzc09mRW5hYmxlZCgpKTsKLSsgICAgICBtYXNtLmJyYW5jaDMyKEFzc2VtYmxlcjo6RXF1YWws IGFkZHJlc3NPZkVuYWJsZWQsIEltbTMyKDApLAotKyAgICAgICAgICAgICAgICAgICAgJnNraXBQ cm9maWxpbmdJbnN0cnVtZW50YXRpb24pOwotKyAgICAgIG1hc20ucHJvZmlsZXJFbnRlckZyYW1l KGZyYW1lUHRyLCBzY3JhdGNoKTsKLSsgICAgICBtYXNtLmJpbmQoJnNraXBQcm9maWxpbmdJbnN0 cnVtZW50YXRpb24pOwotKyAgICB9Ci0rCi0rICAgIG1hc20uanVtcChqaXRjb2RlKTsKLSsKLSsg ICAgbWFzbS5iaW5kKCZub3RPc3IpOwotKyAgICAvLyBMb2FkIHRoZSBzY29wZSBjaGFpbiBpbiBS MS4KLSsgICAgTU9aX0FTU0VSVChSMS5zY3JhdGNoUmVnKCkgIT0gcmVnX2NvZGUpOwotKyAgICBt YXNtLm1vdmVQdHIocmVnX2NoYWluLCBSMS5zY3JhdGNoUmVnKCkpOwotKyAgfQotKwotKyAgLy8g VGhlIGNhbGwgd2lsbCBwdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgZnJhbWUgcG9pbnRlciBv biB0aGUgc3RhY2ssIHRodXMKLSsgIC8vIHdlIGNoZWNrIHRoYXQgdGhlIHN0YWNrIHdvdWxkIGJl IGFsaWduZWQgb25jZSB0aGUgY2FsbCBpcyBjb21wbGV0ZS4KLSsgIG1hc20uYXNzZXJ0U3RhY2tB bGlnbm1lbnQoSml0U3RhY2tBbGlnbm1lbnQsIDIgKiBzaXplb2YodWludHB0cl90KSk7Ci0rCi0r ICAvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHB1c2hpbmcgcmV0dXJuIGFkZHJlc3MgdG8gc3Rh Y2suCi0rICBtYXNtLmNhbGxKaXROb1Byb2ZpbGVyKHJlZ19jb2RlKTsKLSsKLSsgIHsKLSsgICAg Ly8gSW50ZXJwcmV0ZXIgLT4gQmFzZWxpbmUgT1NSIHdpbGwgcmV0dXJuIGhlcmUuCi0rICAgIG1h c20uYmluZCgmcmV0dXJuTGFiZWwpOwotKyAgICBtYXNtLmFkZENvZGVMYWJlbChyZXR1cm5MYWJl bCk7Ci0rICAgIG1hc20uYmluZCgmb29tUmV0dXJuTGFiZWwpOwotKyAgfQotKwotKyAgLy8gRGlz Y2FyZCBhcmd1bWVudHMgYW5kIHBhZGRpbmcuIFNldCBzcCB0byB0aGUgYWRkcmVzcyBvZiB0aGUg RW50ZXJKSVRSZWdzCi0rICAvLyBvbiB0aGUgc3RhY2suCi0rICBtYXNtLm1vdmVQdHIoRnJhbWVQ b2ludGVyLCBTdGFja1BvaW50ZXIpOwotKwotKyAgLy8gU3RvcmUgdGhlIHJldHVybmVkIHZhbHVl IGludG8gdGhlIHZwLgotKyAgbWFzbS5hc19sZChyZWdfdnAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0 b2YoRW50ZXJKSVRSZWdzLCByMTApKTsKLSsgIG1hc20uc3RvcmVWYWx1ZShKU1JldHVybk9wZXJh bmQsIEFkZHJlc3MocmVnX3ZwLCAwKSk7Ci0rCi0rICAvLyBSZXN0b3JlIG5vbi12b2xhdGlsZSBy ZWdpc3RlcnMgYW5kIHJldHVybi4KLSsgIEdlbmVyYXRlUmV0dXJuKG1hc20pOwotK30KLSsKLSsv LyBzdGF0aWMKLSttb3ppbGxhOjpNYXliZTw6OkpTOjpQcm9maWxpbmdGcmFtZUl0ZXJhdG9yOjpS ZWdpc3RlclN0YXRlPgotK0ppdFJ1bnRpbWU6OmdldENwcEVudHJ5UmVnaXN0ZXJzKEppdEZyYW1l TGF5b3V0KiBmcmFtZVN0YWNrQWRkcmVzcykgewotKyAgcmV0dXJuIG1vemlsbGE6Ok5vdGhpbmd7 fTsKLSt9Ci0rCi0rdm9pZCBKaXRSdW50aW1lOjpnZW5lcmF0ZUludmFsaWRhdG9yKE1hY3JvQXNz ZW1ibGVyJiBtYXNtLCBMYWJlbCogYmFpbG91dFRhaWwpIHsKLSsgIEF1dG9DcmVhdGVkQnkgYWNi KG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUludmFsaWRhdG9yIik7Ci0rCi0rICBpbnZhbGlk YXRvck9mZnNldF8gPSBzdGFydFRyYW1wb2xpbmVDb2RlKG1hc20pOwotKwotKyAgbWFzbS5jaGVj a1N0YWNrQWxpZ25tZW50KCk7Ci0rCi0rICAvLyBQdXNoIGFsbCByZWdpc3RlcnMgc28gd2UgY2Fu IGFjY2VzcyB0aGVtIGZyb20gW2Jhc2UgKyBjb2RlXS4KLSsgIG1hc20uUHVzaFJlZ3NJbk1hc2so QWxsUmVncyk7Ci0rCi0rICAvLyBQYXNzIHBvaW50ZXIgdG8gSW52YWxpZGF0aW9uQmFpbG91dFN0 YWNrIHN0cnVjdHVyZS4KLSsgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIEludEFyZ1JlZzAp OwotKwotKyAgLy8gUmVzZXJ2ZSBwbGFjZSBmb3IgQmFpbG91dEluZm8gcG9pbnRlci4gVHdvIHdv cmRzIHRvIGVuc3VyZSBhbGlnbm1lbnQgZm9yCi0rICAvLyBzZXR1cEFsaWduZWRBQklDYWxsLgot KyAgbWFzbS5zdWJQdHIoSW1tMzIoMiAqIHNpemVvZih1aW50cHRyX3QpKSwgU3RhY2tQb2ludGVy KTsKLSsgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIEludEFyZ1JlZzEpOwotKwotKyAgdXNp bmcgRm4gPSBib29sICgqKShJbnZhbGlkYXRpb25CYWlsb3V0U3RhY2sqIHNwLCBCYXNlbGluZUJh aWxvdXRJbmZvKiogaW5mbyk7Ci0rICBtYXNtLnNldHVwQWxpZ25lZEFCSUNhbGwoKTsKLSsgIG1h c20ucGFzc0FCSUFyZyhJbnRBcmdSZWcwKTsKLSsgIG1hc20ucGFzc0FCSUFyZyhJbnRBcmdSZWcx KTsKLSsgIG1hc20uY2FsbFdpdGhBQkk8Rm4sIEludmFsaWRhdGlvbkJhaWxvdXQ+KAotKyAgICAg IEFCSVR5cGU6OkdlbmVyYWwsIENoZWNrVW5zYWZlQ2FsbFdpdGhBQkk6OkRvbnRDaGVja090aGVy KTsKLSsKLSsgIG1hc20ucG9wKEludEFyZ1JlZzIpOwotKwotKyAgLy8gUG9wIHRoZSBtYWNoaW5l IHN0YXRlIGFuZCB0aGUgZGVhZCBmcmFtZS4KLSsgIG1hc20ubW92ZVRvU3RhY2tQdHIoRnJhbWVQ b2ludGVyKTsKLSsKLSsgIC8vIEp1bXAgdG8gc2hhcmVkIGJhaWxvdXQgdGFpbC4gVGhlIEJhaWxv dXRJbmZvIHBvaW50ZXIgaGFzIHRvIGJlIGluCi0rICAvLyBJbnRBcmdSZWcyIChyNSkuCi0rICBt YXNtLmp1bXAoYmFpbG91dFRhaWwpOwotK30KLSsKLSsvLyBXaGVuIGJhaWxvdXQgaXMgZG9uZSB2 aWEgb3V0IG9mIGxpbmUgY29kZSAobGF6eSBiYWlsb3V0KS4KLSsvLyBGcmFtZSBzaXplIGlzIHN0 b3JlZCBpbiBMUiAobG9vayBhdAotKy8vIENvZGVHZW5lcmF0b3JQUEM2NDo6Z2VuZXJhdGVPdXRP ZkxpbmVDb2RlKCkpIGFuZCB0aHVuayBjb2RlIHNob3VsZCBzYXZlIGl0Ci0rLy8gb24gc3RhY2su Ci0rc3RhdGljIHZvaWQgUHVzaEJhaWxvdXRGcmFtZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn aXN0ZXIgc3BBcmcpIHsKLSsgIC8vIFB1c2ggdGhlIGZyYW1lU2l6ZV8gc3RvcmVkIGluIExSLgot KyAgLy8gU2VlOiBDb2RlR2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRlT3V0T2ZMaW5lQ29kZSgpCi0r ICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7Ci0rCi0rICAvLyBQdXNoIHJlZ2lzdGVycyBzdWNo IHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVtIGZyb20gW2Jhc2UgKyBjb2RlXS4KLSsgIG1hc20uUHVz aFJlZ3NJbk1hc2soQWxsUmVncyk7Ci0rCi0rICAvLyBQdXQgcG9pbnRlciB0byBCYWlsb3V0U3Rh Y2sgYXMgZmlyc3QgYXJndW1lbnQgdG8gdGhlIEJhaWxvdXQoKS4KLSsgIG1hc20ubW92ZVB0cihT dGFja1BvaW50ZXIsIHNwQXJnKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgR2VuZXJhdGVCYWlsb3V0 VGh1bmsoTWFjcm9Bc3NlbWJsZXImIG1hc20sIExhYmVsKiBiYWlsb3V0VGFpbCkgewotKyAgUHVz aEJhaWxvdXRGcmFtZShtYXNtLCBJbnRBcmdSZWcwKTsKLSsKLSsgIC8vIE1ha2Ugc3BhY2UgZm9y IEJhaWxvdXQncyBiYWlsb3V0SW5mbyBvdXRwYXJhbS4KLSsgIG1hc20ucmVzZXJ2ZVN0YWNrKHNp emVvZih2b2lkKikpOwotKyAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwgSW50QXJnUmVnMSk7 Ci0rCi0rICAvLyBDYWxsIHRoZSBiYWlsb3V0IGZ1bmN0aW9uLgotKyAgdXNpbmcgRm4gPSBib29s ICgqKShCYWlsb3V0U3RhY2sqIHNwLCBCYXNlbGluZUJhaWxvdXRJbmZvKiogaW5mbyk7Ci0rICBt YXNtLnNldHVwVW5hbGlnbmVkQUJJQ2FsbChJbnRBcmdSZWcyKTsKLSsgIG1hc20ucGFzc0FCSUFy ZyhJbnRBcmdSZWcwKTsKLSsgIG1hc20ucGFzc0FCSUFyZyhJbnRBcmdSZWcxKTsKLSsgIG1hc20u Y2FsbFdpdGhBQkk8Rm4sIEJhaWxvdXQ+KEFCSVR5cGU6OkdlbmVyYWwsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJOjpEb250Q2hlY2tPdGhl cik7Ci0rCi0rICAvLyBHZXQgdGhlIGJhaWxvdXRJbmZvIG91dHBhcmFtLgotKyAgbWFzbS5wb3Ao SW50QXJnUmVnMik7Ci0rCi0rICAvLyBSZW1vdmUgYm90aCB0aGUgYmFpbG91dCBmcmFtZSBhbmQg dGhlIHRvcG1vc3QgSW9uIGZyYW1lJ3Mgc3RhY2suCi0rICBtYXNtLm1vdmVUb1N0YWNrUHRyKEZy YW1lUG9pbnRlcik7Ci0rCi0rICAvLyBKdW1wIHRvIHNoYXJlZCBiYWlsb3V0IHRhaWwuIFRoZSBC YWlsb3V0SW5mbyBwb2ludGVyIGhhcyB0byBiZSBpbgotKyAgLy8gSW50QXJnUmVnMiAocjUpLgot KyAgbWFzbS5qdW1wKGJhaWxvdXRUYWlsKTsKLSt9Ci0rCi0rdm9pZCBKaXRSdW50aW1lOjpnZW5l cmF0ZUJhaWxvdXRIYW5kbGVyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogYmFpbG91dFRhaWwpIHsKLSsgIEF1dG9D cmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZUJhaWxvdXRIYW5kbGVyIik7 Ci0rCi0rICBiYWlsb3V0SGFuZGxlck9mZnNldF8gPSBzdGFydFRyYW1wb2xpbmVDb2RlKG1hc20p OwotKwotKyAgR2VuZXJhdGVCYWlsb3V0VGh1bmsobWFzbSwgYmFpbG91dFRhaWwpOwotK30KLSsK LStib29sIEppdFJ1bnRpbWU6OmdlbmVyYXRlVk1XcmFwcGVyKEpTQ29udGV4dCogY3gsIE1hY3Jv QXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVk1G dW5jdGlvbklkIGlkLCBjb25zdCBWTUZ1bmN0aW9uRGF0YSYgZiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIER5bkZuIG5hdGl2ZUZ1biwgdWludDMyX3QqIHdyYXBwZXJPZmZz ZXQpIHsKLSsgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZVZN V3JhcHBlciIpOwotKwotKyAgKndyYXBwZXJPZmZzZXQgPSBzdGFydFRyYW1wb2xpbmVDb2RlKG1h c20pOwotKwotKyAgLy8gQXZvaWQgY29uZmxpY3RzIHdpdGggYXJndW1lbnQgcmVnaXN0ZXJzIHdo aWxlIGRpc2NhcmRpbmcgdGhlIHJlc3VsdCBhZnRlcgotKyAgLy8gdGhlIGZ1bmN0aW9uIGNhbGwu Ci0rICBBbGxvY2F0YWJsZUdlbmVyYWxSZWdpc3RlclNldCByZWdzKFJlZ2lzdGVyOjpDb2Rlczo6 V3JhcHBlck1hc2spOwotKwotKyAgc3RhdGljX2Fzc2VydCgKLSsgICAgICAoUmVnaXN0ZXI6OkNv ZGVzOjpWb2xhdGlsZU1hc2sgJiB+UmVnaXN0ZXI6OkNvZGVzOjpXcmFwcGVyTWFzaykgPT0gMCwK LSsgICAgICAiV3JhcHBlciByZWdpc3RlciBzZXQgc2hvdWxkIGJlIGEgc3VwZXJzZXQgb2YgVm9s YXRpbGUgcmVnaXN0ZXIgc2V0LiIpOwotKwotKyAgLy8gVGhlIGNvbnRleHQgaXMgdGhlIGZpcnN0 IGFyZ3VtZW50OyByMyBpcyB0aGUgZmlyc3QgYXJndW1lbnQgcmVnaXN0ZXIuCi0rICBSZWdpc3Rl ciBjeHJlZyA9IEludEFyZ1JlZzA7Ci0rICByZWdzLnRha2UoY3hyZWcpOwotKwotKyAgLy8gT24g bGluay1yZWdpc3RlciBwbGF0Zm9ybXMsIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUg Vk0gKmNhbGxlZSogdG8KLSsgIC8vIHB1c2ggdGhlIHJldHVybiBhZGRyZXNzLCB3aGlsZSB0aGUg Y2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MKLSsgIC8vIGlzIHN0b3JlZCBpbiBM UiBvbiBlbnRyeS4gVGhpcyBhbGxvd3MgdGhlIFZNIHdyYXBwZXIgdG8gd29yayB3aXRoIGJvdGgK LSsgIC8vIGRpcmVjdCBjYWxscyBhbmQgdGFpbCBjYWxscy4KLSsgIG1hc20ucHVzaFJldHVybkFk ZHJlc3MoKTsKLSsKLSsgIC8vIFB1c2ggdGhlIGZyYW1lIHBvaW50ZXIgdG8gZmluaXNoIHRoZSBl eGl0IGZyYW1lLCB0aGVuIGxpbmsgaXQgdXAuCi0rICBtYXNtLlB1c2goRnJhbWVQb2ludGVyKTsK LSsgIG1hc20ubW92ZVN0YWNrUHRyVG8oRnJhbWVQb2ludGVyKTsKLSsgIG1hc20ubG9hZEpTQ29u dGV4dChjeHJlZyk7Ci0rICBtYXNtLmVudGVyRXhpdEZyYW1lKGN4cmVnLCByZWdzLmdldEFueSgp LCBpZCk7Ci0rCi0rICAvLyBSZXNlcnZlIHNwYWNlIGZvciB0aGUgb3V0cGFyYW1ldGVyLgotKyAg bWFzbS5yZXNlcnZlVk1GdW5jdGlvbk91dFBhcmFtU3BhY2UoZik7Ci0rCi0rICBtYXNtLnNldHVw VW5hbGlnbmVkQUJJQ2FsbERvbnRTYXZlUmVzdG9yZVNQKCk7Ci0rICBtYXNtLnBhc3NBQklBcmco Y3hyZWcpOwotKwotKyAgc2l6ZV90IGFyZ0Rpc3AgPSBFeGl0RnJhbWVMYXlvdXQ6OlNpemUoKTsK LSsKLSsgIC8vIENvcHkgYW55IGFyZ3VtZW50cy4KLSsgIGZvciAodWludDMyX3QgZXhwbGljaXRB cmcgPSAwOyBleHBsaWNpdEFyZyA8IGYuZXhwbGljaXRBcmdzOyBleHBsaWNpdEFyZysrKSB7Ci0r ICAgIHN3aXRjaCAoZi5hcmdQcm9wZXJ0aWVzKGV4cGxpY2l0QXJnKSkgewotKyAgICAgIGNhc2Ug Vk1GdW5jdGlvbkRhdGE6OldvcmRCeVZhbHVlOgotKyAgICAgICAgaWYgKGYuYXJnUGFzc2VkSW5G bG9hdFJlZyhleHBsaWNpdEFyZykpIHsKLSsgICAgICAgICAgbWFzbS5wYXNzQUJJQXJnKE1vdmVP cGVyYW5kKEZyYW1lUG9pbnRlciwgYXJnRGlzcCksIEFCSVR5cGU6OkZsb2F0NjQpOwotKyAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFzbS5wYXNzQUJJQXJnKE1vdmVPcGVyYW5kKEZyYW1l UG9pbnRlciwgYXJnRGlzcCksIEFCSVR5cGU6OkdlbmVyYWwpOwotKyAgICAgICAgfQotKyAgICAg ICAgYXJnRGlzcCArPSBzaXplb2Yodm9pZCopOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2Fz ZSBWTUZ1bmN0aW9uRGF0YTo6V29yZEJ5UmVmOgotKyAgICAgICAgbWFzbS5wYXNzQUJJQXJnKE1v dmVPcGVyYW5kKEZyYW1lUG9pbnRlciwgYXJnRGlzcCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNb3ZlT3BlcmFuZDo6S2luZDo6RWZmZWN0aXZlQWRkcmVzcyksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgQUJJVHlwZTo6R2VuZXJhbCk7Ci0rICAgICAgICBhcmdEaXNw ICs9IHNpemVvZih2b2lkKik7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIFZNRnVuY3Rp b25EYXRhOjpEb3VibGVCeVZhbHVlOgotKyAgICAgIGNhc2UgVk1GdW5jdGlvbkRhdGE6OkRvdWJs ZUJ5UmVmOgotKyAgICAgICAgTU9aX0NSQVNIKCJOWUk6IFBQQzY0IGNhbGxWTSBzaG91bGQgbm90 IGJlIHVzZWQgd2l0aCAxMjhiaXRzIHZhbHVlcy4iKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICB9 Ci0rICB9Ci0rCi0rICAvLyBDb3B5IHRoZSBpbXBsaWNpdCBvdXRwYXJhbSwgaWYgYW55LgotKyAg Y29uc3QgaW50MzJfdCBvdXRQYXJhbU9mZnNldCA9Ci0rICAgICAgLWludDMyX3QoRXhpdEZvb3Rl ckZyYW1lOjpTaXplKCkpIC0gZi5zaXplT2ZPdXRQYXJhbVN0YWNrU2xvdCgpOwotKyAgaWYgKGYu b3V0UGFyYW0gIT0gVHlwZV9Wb2lkKSB7Ci0rICAgIG1hc20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFu ZChGcmFtZVBvaW50ZXIsIG91dFBhcmFtT2Zmc2V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTW92ZU9wZXJhbmQ6OktpbmQ6OkVmZmVjdGl2ZUFkZHJlc3MpLAotKyAgICAgICAg ICAgICAgICAgICAgQUJJVHlwZTo6R2VuZXJhbCk7Ci0rICB9Ci0rCi0rICBtYXNtLmNhbGxXaXRo QUJJKG5hdGl2ZUZ1biwgQUJJVHlwZTo6R2VuZXJhbCwKLSsgICAgICAgICAgICAgICAgICAgQ2hl Y2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrSGFzRXhpdEZyYW1lKTsKLSsKLSsgIC8vIFRl c3QgZm9yIGZhaWx1cmUuCi0rICBzd2l0Y2ggKGYuZmFpbFR5cGUoKSkgewotKyAgICBjYXNlIFR5 cGVfQ2VsbDoKLSsgICAgICBtYXNtLmJyYW5jaFRlc3RQdHIoQXNzZW1ibGVyOjpaZXJvLCBJbnRB cmdSZWcwLCBJbnRBcmdSZWcwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXNtLmZhaWx1 cmVMYWJlbCgpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBUeXBlX0Jvb2w6Ci0rICAgICAg bWFzbS5icmFuY2hJZkZhbHNlQm9vbChJbnRBcmdSZWcwLCBtYXNtLmZhaWx1cmVMYWJlbCgpKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBUeXBlX1ZvaWQ6Ci0rICAgICAgYnJlYWs7Ci0rICAg IGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJ1bmtub3duIGZhaWx1cmUga2luZCIpOwotKyAg fQotKwotKyAgLy8gTG9hZCB0aGUgb3V0cGFyYW0uCi0rICBtYXNtLmxvYWRWTUZ1bmN0aW9uT3V0 UGFyYW0oZiwgQWRkcmVzcyhGcmFtZVBvaW50ZXIsIG91dFBhcmFtT2Zmc2V0KSk7Ci0rCi0rICAv LyBQb3AgZnJhbWUgYW5kIHJlc3RvcmUgZnJhbWUgcG9pbnRlci4KLSsgIG1hc20ubW92ZVRvU3Rh Y2tQdHIoRnJhbWVQb2ludGVyKTsKLSsgIG1hc20ucG9wKEZyYW1lUG9pbnRlcik7Ci0rCi0rICAv LyBSZXR1cm4uIFN1YnRyYWN0IHNpemVvZih2b2lkKikgZm9yIHRoZSBmcmFtZSBwb2ludGVyLgot KyAgbWFzbS5yZXRuKEltbTMyKHNpemVvZihFeGl0RnJhbWVMYXlvdXQpIC0gc2l6ZW9mKHZvaWQq KSArCi0rICAgICAgICAgICAgICAgICAgZi5leHBsaWNpdFN0YWNrU2xvdHMoKSAqIHNpemVvZih2 b2lkKikgKwotKyAgICAgICAgICAgICAgICAgIGYuZXh0cmFWYWx1ZXNUb1BvcCAqIHNpemVvZihW YWx1ZSkpKTsKLSsKLSsgIHJldHVybiB0cnVlOwotK30KLSsKLSt1aW50MzJfdCBKaXRSdW50aW1l OjpnZW5lcmF0ZVByZUJhcnJpZXIoSlNDb250ZXh0KiBjeCwgTWFjcm9Bc3NlbWJsZXImIG1hc20s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JUlR5cGUgdHlwZSkg ewotKyAgQXV0b0NyZWF0ZWRCeSBhY2IobWFzbSwgIkppdFJ1bnRpbWU6OmdlbmVyYXRlUHJlQmFy cmllciIpOwotKwotKyAgdWludDMyX3Qgb2Zmc2V0ID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNt KTsKLSsKLSsgIE1PWl9BU1NFUlQoUHJlQmFycmllclJlZyA9PSBJbnRBcmdSZWcxKTsgIC8vIHI0 Ci0rICBSZWdpc3RlciB0ZW1wMSA9IEludEFyZ1JlZzA7ICAgICAgICAgICAgICAvLyByMwotKyAg UmVnaXN0ZXIgdGVtcDIgPSBJbnRBcmdSZWcyOyAgICAgICAgICAgICAgLy8gcjUKLSsgIFJlZ2lz dGVyIHRlbXAzID0gSW50QXJnUmVnMzsgICAgICAgICAgICAgIC8vIHI2Ci0rICBtYXNtLnB1c2go dGVtcDEpOwotKyAgbWFzbS5wdXNoKHRlbXAyKTsKLSsgIG1hc20ucHVzaCh0ZW1wMyk7Ci0rCi0r ICBMYWJlbCBub0JhcnJpZXI7Ci0rICBtYXNtLmVtaXRQcmVCYXJyaWVyRmFzdFBhdGgodHlwZSwg dGVtcDEsIHRlbXAyLCB0ZW1wMywgJm5vQmFycmllcik7Ci0rCi0rICAvLyBDYWxsIGludG8gQysr IHRvIG1hcmsgdGhpcyBHQyB0aGluZy4KLSsgIG1hc20ucG9wKHRlbXAzKTsKLSsgIG1hc20ucG9w KHRlbXAyKTsKLSsgIG1hc20ucG9wKHRlbXAxKTsKLSsKLSsgIExpdmVSZWdpc3RlclNldCBzYXZl OwotKyAgc2F2ZS5zZXQoKSA9IFJlZ2lzdGVyU2V0KEdlbmVyYWxSZWdpc3RlclNldChSZWdpc3Rl cnM6OlZvbGF0aWxlTWFzayksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlclNldChGbG9hdFJlZ2lzdGVyczo6Vm9sYXRpbGVNYXNrKSk7Ci0rICAvLyBPbiBQUEM2NCwg c2F2ZSBMUiBzaW5jZSB3ZSdsbCBiZSBtYWtpbmcgYSBjYWxsLgotKyAgbWFzbS5wdXNoUmV0dXJu QWRkcmVzcygpOwotKyAgbWFzbS5QdXNoUmVnc0luTWFzayhzYXZlKTsKLSsKLSsgIG1hc20ubW92 ZVB0cihJbW1QdHIoY3gtPnJ1bnRpbWUoKSksIEludEFyZ1JlZzApOwotKwotKyAgbWFzbS5zZXR1 cFVuYWxpZ25lZEFCSUNhbGwoSW50QXJnUmVnMik7Ci0rICBtYXNtLnBhc3NBQklBcmcoSW50QXJn UmVnMCk7Ci0rICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMSk7Ci0rICBtYXNtLmNhbGxXaXRo QUJJKEppdFByZVdyaXRlQmFycmllcih0eXBlKSk7Ci0rCi0rICBtYXNtLlBvcFJlZ3NJbk1hc2so c2F2ZSk7Ci0rICBtYXNtLnJldCgpOwotKwotKyAgbWFzbS5iaW5kKCZub0JhcnJpZXIpOwotKyAg bWFzbS5wb3AodGVtcDMpOwotKyAgbWFzbS5wb3AodGVtcDIpOwotKyAgbWFzbS5wb3AodGVtcDEp OwotKyAgbWFzbS5hYmlyZXQoKTsKLSsKLSsgIHJldHVybiBvZmZzZXQ7Ci0rfQotKwotK3ZvaWQg Sml0UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0VGFpbFN0dWIoTWFjcm9Bc3NlbWJsZXImIG1hc20s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogYmFpbG91 dFRhaWwpIHsKLSsgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0 ZUJhaWxvdXRUYWlsU3R1YiIpOwotKwotKyAgbWFzbS5iaW5kKGJhaWxvdXRUYWlsKTsKLSsgIG1h c20uZ2VuZXJhdGVCYWlsb3V0VGFpbChJbnRBcmdSZWcxLCBJbnRBcmdSZWcyKTsKLSt9Ci1kaWZm IC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFyZWQvQXNzZW1ibGVyLXNoYXJlZC5oIGIvanMvc3JjL2pp dC9zaGFyZWQvQXNzZW1ibGVyLXNoYXJlZC5oCi1pbmRleCBkNWZlZDJmYWJlMzEuLjQ5MGE5ZjUz OTFlMCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaAot KysrIGIvanMvc3JjL2ppdC9zaGFyZWQvQXNzZW1ibGVyLXNoYXJlZC5oCi1AQCAtMzAsMTQgKzMw LDE1IEBACi0gCi0gI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9BUk02NCkgfHwgICAgICBcCi0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdF Tl9XQVNNMzIpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZpbmVkKEpT X0NPREVHRU5fV0FTTTMyKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAotKyAg ICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gLy8gUHVzaCByZXR1cm4gYWRkcmVzc2VzIGNh bGxlZS1zaWRlLgotICMgIGRlZmluZSBKU19VU0VfTElOS19SRUdJU1RFUgotICNlbmRpZgotIAot ICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJN NjQpIHx8ICAgIFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pCi0r ICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSAvLyBKU19DT0RFTEFCRUxfTElOS01PREUgZ2l2ZXMgbGFiZWxzIGFkZGl0aW9uYWwgbWV0YWRh dGEKLSAvLyBkZXNjcmliaW5nIGhvdyBCaW5kKCkgc2hvdWxkIHBhdGNoIHRoZW0uCi0gIyAgZGVm aW5lIEpTX0NPREVMQUJFTF9MSU5LTU9ERQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvc2hhcmVk L0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1nY2MuaCBiL2pzL3NyYy9qaXQvc2hhcmVk L0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1nY2MuaAotaW5kZXggYTY5MDllNTYwYmVm Li5kODg2Y2JhMmM3ZTYgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L3NoYXJlZC9BdG9taWNPcGVy YXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmgKLSsrKyBiL2pzL3NyYy9qaXQvc2hhcmVkL0F0b21p Y09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1nY2MuaAotQEAgLTQ2LDcgKzQ2LDggQEAKLSAvLyBj b2RlIGluIHRoaXMgZmlsZS4KLSAKLSAjaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfQVJNNjQpIHx8 IGRlZmluZWQoSlNfU0lNVUxBVE9SX0FSTSkgfHwgXAotLSAgICBkZWZpbmVkKEpTX1NJTVVMQVRP Ul9NSVBTNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0xPT05HNjQpCi0rICAgIGRlZmluZWQo SlNfU0lNVUxBVE9SX01JUFM2NCkgfHwgZGVmaW5lZChKU19TSU1VTEFUT1JfTE9PTkc2NCkgfHwg XAotKyAgICBkZWZpbmVkKEpTX1NJTVVMQVRPUl9QUEM2NCkKLSAvLyBPbiBzb21lIHg4NiAoMzIt Yml0KSBzeXN0ZW1zIHRoaXMgd2lsbCBub3Qgd29yayBiZWNhdXNlIHRoZSBjb21waWxlciBkb2Vz IG5vdAotIC8vIG9wZW4tY29kZSA2NC1iaXQgYXRvbWljcy4gIElmIHNvLCB0cnkgbGlua2luZyB3 aXRoIC1sYXRvbWljLiAgSWYgdGhhdCBkb2Vzbid0Ci0gLy8gd29yaywgeW91J3JlIG1vc3RseSBv biB5b3VyIG93bi4KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3NoYXJlZC9Db2RlR2VuZXJhdG9y LXNoYXJlZC5jcHAgYi9qcy9zcmMvaml0L3NoYXJlZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC5jcHAK LWluZGV4IGFkYTg3ZjFmMTFhMi4uMTQ0NjgzNTZjZjMxIDEwMDY0NAotLS0tIGEvanMvc3JjL2pp dC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3BwCi0rKysgYi9qcy9zcmMvaml0L3NoYXJl ZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC5jcHAKLUBAIC04Niw4ICs4Niw4IEBAIENvZGVHZW5lcmF0 b3JTaGFyZWQ6OkNvZGVHZW5lcmF0b3JTaGFyZWQoTUlSR2VuZXJhdG9yKiBnZW4sIExJUkdyYXBo KiBncmFwaCwKLSAKLSAjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotICMgIGlmIGRlZmluZWQoSlNf Q09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8IFwKLS0gICAgICBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpCi0tICAgIC8vIE9uIFg2NC94ODYgYW5kIEFSTTY0LCB3ZSBk b24ndCBuZWVkIGFsaWdubWVudCBmb3IgV2FzbSBTSU1EIGF0IHRoaXMgdGltZS4KLSsgICAgICBk ZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsg ICAgLy8gT24gWDY0L3g4NiwgQVJNNjQsIGFuZCBQUEM2NCwgd2UgZG9uJ3QgbmVlZCBhbGlnbm1l bnQgZm9yIFdhc20gU0lNRCBhdCB0aGlzIHRpbWUuCi0gIyAgZWxzZQotICMgICAgZXJyb3IgXAot ICAgICAgICAgIndlIG1heSBuZWVkIHBhZGRpbmcgc28gdGhhdCBsb2NhbCBzbG90cyBhcmUgU0lN RC1hbGlnbmVkIGFuZCB0aGUgc3RhY2sgbXVzdCBiZSBrZXB0IFNJTUQtYWxpZ25lZCB0b28uIgot QEAgLTEwNzUsNyArMTA3NSw3IEBAIExhYmVsKiBDb2RlR2VuZXJhdG9yU2hhcmVkOjpnZXRKdW1w TGFiZWxGb3JCcmFuY2goTUJhc2ljQmxvY2sqIGJsb2NrKSB7Ci0gLy8gVGhpcyBmdW5jdGlvbiBp cyBub3QgdXNlZCBmb3IgTUlQUzY0L0xPT05HNjQvUklTQ1Y2NC4gVGhleSBoYXZlCi0gLy8gYnJh bmNoVG9CbG9jay4KLSAjaWYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpICYmICFkZWZpbmVk KEpTX0NPREVHRU5fTE9PTkc2NCkgJiYgXAotLSAgICAhZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCi0rICAgICFkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgJiYgIWRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKLSB2b2lkIENvZGVHZW5lcmF0b3JTaGFyZWQ6Omp1bXBUb0Jsb2NrKE1CYXNp Y0Jsb2NrKiBtaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3Nl bWJsZXI6OkNvbmRpdGlvbiBjb25kKSB7Ci0gICAvLyBTa2lwIHBhc3QgdHJpdmlhbCBibG9ja3Mu Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVkLWlubC5oIGIv anMvc3JjL2ppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVkLWlubC5oCi1pbmRleCBiZGNjMWRhN2Q0 MWEuLmI2MmY4ZjY4MWRmMSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5n LXNoYXJlZC1pbmwuaAotKysrIGIvanMvc3JjL2ppdC9zaGFyZWQvTG93ZXJpbmctc2hhcmVkLWlu bC5oCi1AQCAtNTI3LDcgKzUyNyw3IEBAIExBbGxvY2F0aW9uIExJUkdlbmVyYXRvclNoYXJlZDo6 dXNlUmVnaXN0ZXJPck5vbkRvdWJsZUNvbnN0YW50KAotIAotICNpZiBkZWZpbmVkKEpTX0NPREVH RU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8ICAgICAgXAotICAgICBkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg XAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSBMQWxsb2NhdGlvbiBM SVJHZW5lcmF0b3JTaGFyZWQ6OnVzZUFueU9yQ29uc3RhbnQoTURlZmluaXRpb24qIG1pcikgewot ICAgcmV0dXJuIHVzZVJlZ2lzdGVyT3JDb25zdGFudChtaXIpOwotIH0KLWRpZmYgLS1naXQgYS9q cy9zcmMvanMtY29uZmlnLm1vemJ1aWxkIGIvanMvc3JjL2pzLWNvbmZpZy5tb3pidWlsZAotaW5k ZXggMjJiZWNhZjRlY2ZiLi5mZjUyOTQ4MjVlOWQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvanMtY29u ZmlnLm1vemJ1aWxkCi0rKysgYi9qcy9zcmMvanMtY29uZmlnLm1vemJ1aWxkCi1AQCAtOCw2ICs4 LDcgQEAgaWYgKAotICAgICBDT05GSUdbIkpTX0NPREVHRU5fWDY0Il0KLSAgICAgb3IgQ09ORklH WyJKU19DT0RFR0VOX0FSTTY0Il0KLSAgICAgb3IgQ09ORklHWyJKU19DT0RFR0VOX1JJU0NWNjQi XQotKyAgICBvciBDT05GSUdbIkpTX0NPREVHRU5fUFBDNjQiXQotICk6Ci0gICAgIERFRklORVNb IldBU01fU1VQUE9SVFNfSFVHRV9NRU1PUlkiXSA9IFRydWUKLSAKLWRpZmYgLS1naXQgYS9qcy9z cmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcCBiL2pzL3NyYy9qc2FwaS10ZXN0cy90 ZXN0Sml0QUJJY2FsbHMuY3BwCi1pbmRleCBiNWMwM2E0N2RkODMuLjg4N2FkOWUzZDk1OSAxMDA2 NDQKLS0tLSBhL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0Sml0QUJJY2FsbHMuY3BwCi0rKysgYi9q cy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcAotQEAgLTcxOCw2ICs3MTgsOSBA QCBjbGFzcyBKaXRBQklDYWxsIGZpbmFsIDogcHVibGljIGpzYXBpdGVzdDo6UnVudGltZVRlc3Qs Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gICAgIFJlZ2lzdGVyIGJhc2Ug PSB0MDsKLSAgICAgcmVncy50YWtlKGJhc2UpOwotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkKLSsgICAgUmVnaXN0ZXIgYmFzZSA9IHIxMTsKLSsgICAgcmVncy50YWtlKGJhc2UpOwot ICNlbHNlCi0gIyAgZXJyb3IgIlVua25vd24gYXJjaGl0ZWN0dXJlISIKLSAjZW5kaWYKLWRpZmYg LS1naXQgYS9qcy9zcmMvanNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxscy5jcHAgYi9qcy9z cmMvanNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5DYWxscy5jcHAKLWluZGV4IDQ3MjhmMjQwNGFl OC4uYTA3ZGRiMmYyMTRlIDEwMDY0NAotLS0tIGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNt UmV0dXJuQ2FsbHMuY3BwCi0rKysgYi9qcy9zcmMvanNhcGktdGVzdHMvdGVzdFdhc21SZXR1cm5D YWxscy5jcHAKLUBAIC0zMiw3ICszMiwxMCBAQCBCRUdJTl9URVNUKHRlc3RXYXNtQ2hlY2tTbG93 Q2FsbE1hcmtlckhpdCkgewotIAotICAgbWFzbS5iaW5kKCZjaGVjayk7Ci0gIyAgaWZkZWYgSlNf VVNFX0xJTktfUkVHSVNURVIKLS0jICAgIGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg JiYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpICYmIFwKLSsjICAgIGlmIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKLSsgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcmEgPSBBQklOb25B cmdSZWczOwotKyAgbWFzbS54c19tZmxyKHJhKTsKLSsjICAgIGVsaWYgIWRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSAmJiAhZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgJiYgXAotICAgICAg ICAgIWRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp c3RlciByYSA9IGxyOwotICMgICAgZW5kaWYKLUBAIC03MCw3ICs3MywxMCBAQCBCRUdJTl9URVNU KHRlc3RXYXNtQ2hlY2tTbG93Q2FsbE1hcmtlck1pc3MpIHsKLSAKLSAgIG1hc20uYmluZCgmY2hl Y2spOwotICMgIGlmZGVmIEpTX1VTRV9MSU5LX1JFR0lTVEVSCi0tIyAgICBpZiAhZGVmaW5lZChK U19DT0RFR0VOX0xPT05HNjQpICYmICFkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSAmJiBcCi0r IyAgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICBzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIHJhID0gQUJJTm9uQXJnUmVnMzsKLSsgIG1hc20ueHNfbWZscihyYSk7Ci0rIyAgICBl bGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpICYmIFwKLSAgICAgICAgICFkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAgIHN0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcmEgPSBscjsKLSAjICAgIGVuZGlmCi1kaWZmIC0tZ2l0 IGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNwcCBiL2pzL3NyYy9qc2FwaS10ZXN0cy90 ZXN0c0ppdC5jcHAKLWluZGV4IGEyZGZlNWQwMTk2Yy4uN2YzZGNjYTg5NWQyIDEwMDY0NAotLS0t IGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RzSml0LmNwcAotKysrIGIvanMvc3JjL2pzYXBpLXRl c3RzL3Rlc3RzSml0LmNwcAotQEAgLTI1LDYgKzI1LDE0IEBAIHZvaWQgUHJlcGFyZUppdChqczo6 aml0OjpNYWNyb0Fzc2VtYmxlciYgbWFzbSkgewotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotICAgICBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSAgIHNhdmUuYWRkKGpzOjpqaXQ6OnJhKTsKLSsjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyBMUiBvbiBQUEM2NCBpc24ndCBhIEdQUjsgc2F2 ZSBpdCB0byB0aGUgc3RhY2sgbWFudWFsbHkuCi0rICB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKG1hc20pOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtYXNtLnhzX21mbHIoc2NyYXRjaCk7Ci0rICAgIG1hc20uYXNfc3RkdShzY3Jh dGNoLCBTdGFja1BvaW50ZXIsIC04KTsKLSsgIH0KLSAjZWxpZiBkZWZpbmVkKEpTX1VTRV9MSU5L X1JFR0lTVEVSKQotICAgc2F2ZS5hZGQoanM6OmppdDo6bHIpOwotICNlbmRpZgotQEAgLTQ0LDYg KzUyLDggQEAgYm9vbCBFeGVjdXRlSml0KEpTQ29udGV4dCogY3gsIGpzOjpqaXQ6Ok1hY3JvQXNz ZW1ibGVyJiBtYXNtKSB7Ci0gI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCi0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KQotICAgcmVzdG9yZS5hZGQoanM6OmppdDo6cmEpOwotKyNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKLSsgIC8vIExSIHdpbGwgYmUgcmVzdG9yZWQgbWFudWFsbHkgYWZ0ZXIgUG9w UmVnc0luTWFzay4KLSAjZWxpZiBkZWZpbmVkKEpTX1VTRV9MSU5LX1JFR0lTVEVSKQotICAgcmVz dG9yZS5hZGQoanM6OmppdDo6bHIpOwotICNlbmRpZgotQEAgLTU1LDYgKzY1LDE2IEBAIGJvb2wg RXhlY3V0ZUppdChKU0NvbnRleHQqIGN4LCBqczo6aml0OjpNYWNyb0Fzc2VtYmxlciYgbWFzbSkg ewotIAotICAgLy8gUmVzZXQgc3RhY2sgcG9pbnRlci4KLSAgIG1hc20uU2V0U3RhY2tQb2ludGVy NjQoUHNldWRvU3RhY2tQb2ludGVyNjQpOwotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSsgIC8vIFJlc3RvcmUgTFIgZnJvbSB0aGUgc3RhY2sgYW5kIHJldHVybi4KLSsgIHsKLSsg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1hc20uYXNfbGQoc2NyYXRjaCwgU3RhY2tQ b2ludGVyLCAwKTsKLSsgICAgbWFzbS54c19tdGxyKHNjcmF0Y2gpOwotKyAgICBtYXNtLmFzX2Fk ZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgpOwotKyAgfQotKyAgbWFzbS5hc19ibHIo KTsKLSAjZWxzZQotICAgLy8gRXhpdCB0aGUgSklULWVkIGNvZGUgdXNpbmcgdGhlIEFCSSByZXR1 cm4gc3R5bGUuCi0gICBtYXNtLmFiaXJldCgpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9zaGVsbC9q cy5jcHAgYi9qcy9zcmMvc2hlbGwvanMuY3BwCi1pbmRleCA0NWJjMDc5NmI5NjQuLjIwZWIxMjMx YmI3ZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy9zaGVsbC9qcy5jcHAKLSsrKyBiL2pzL3NyYy9zaGVs bC9qcy5jcHAKLUBAIC03ODk1LDYgKzc4OTUsMTMgQEAgc3RhdGljIHZvaWQgU2luZ2xlU3RlcENh bGxiYWNrKHZvaWQqIGFyZywgaml0OjpTaW11bGF0b3IqIHNpbSwgdm9pZCogcGMpIHsKLSAgIHN0 YXRlLmZwID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0b3I6OmZwKTsKLSAg IC8vIHNlZSBXYXNtVGFpbENhbGxGUFNjcmF0Y2hSZWcgYW5kIENvbGxhcHNlV2FzbUZyYW1lRmFz dAotICAgc3RhdGUudGVtcEZQID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0 b3I6OnQzKTsKLSsjICBlbGlmIGRlZmluZWQoSlNfU0lNVUxBVE9SX1BQQzY0KQotKyAgc3RhdGUu c3AgPSAodm9pZCopc2ltLT5nZXRSZWdpc3RlcihqaXQ6OlNpbXVsYXRvcjo6c3ApOwotKyAgc3Rh dGUubHIgPSAodm9pZCopc2ltLT5nZXRMUigpOwotKyAgc3RhdGUuZnAgPSAodm9pZCopc2ltLT5n ZXRSZWdpc3RlcihqaXQ6OlNpbXVsYXRvcjo6ZnApOwotKyAgLy8gV2FzbVRhaWxDYWxsRlBTY3Jh dGNoUmVnID0gQUJJTm9uQXJnUmVnMyA9IHIyMiBob2xkcyB0aGUgdW53aW5kIEZQCi0rICAvLyBk dXJpbmcgdGhlIHdhc20gdGFpbC1jYWxsIGNvbGxhcHNlIHdpbmRvdyAoUmVzdG9yZUZwUmEgdW53 aW5kIGluZm8pLgotKyAgc3RhdGUudGVtcEZQID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0 OjpTaW11bGF0b3I6OnIyMik7Ci0gIyAgZWxzZQotICMgICAgZXJyb3IgIk5ZSTogU2luZ2xlLXN0 ZXAgcHJvZmlsaW5nIHN1cHBvcnQiCi0gIyAgZW5kaWYKLUBAIC0xMzE0NCw2ICsxMzE1MSwxNSBA QCBib29sIEluaXRPcHRpb25QYXJzZXIoT3B0aW9uUGFyc2VyJiBvcCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgIlN0b3AgdGhlIFJJU0MtViBzaW11bGF0b3IgYWZ0ZXIgdGhlIGdpdmVuICIK LSAgICAgICAgICAgICAgICAgICAgICAgICJOVU1CRVIgb2YgaW5zdHJ1Y3Rpb25zLiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAtMSkgfHwKLSsjZW5kaWYKLSsjaWZkZWYgSlNfU0lNVUxBVE9S X1BQQzY0Ci0rICAgICAgIW9wLmFkZEJvb2xPcHRpb24oJ1wwJywgInBwYzY0LXNpbS1pY2FjaGUt Y2hlY2tzIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAiRW5hYmxlIGljYWNoZSBmbHVzaCBj aGVja3MgaW4gdGhlIFBQQzY0ICIKLSsgICAgICAgICAgICAgICAgICAgICAgICAic2ltdWxhdG9y LiIpIHx8Ci0rICAgICAgIW9wLmFkZEludE9wdGlvbignXDAnLCAicHBjNjQtc2ltLXN0b3AtYXQi LCAiTlVNQkVSIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICJTdG9wIHRoZSBQUEM2NCBzaW11 bGF0b3IgYWZ0ZXIgdGhlIGdpdmVuICIKLSsgICAgICAgICAgICAgICAgICAgICAgICJOVU1CRVIg b2YgaW5zdHJ1Y3Rpb25zLiIsCi0rICAgICAgICAgICAgICAgICAgICAgICAtMSkgfHwKLSAjZW5k aWYKLSAgICAgICAhb3AuYWRkSW50T3B0aW9uKCdcMCcsICJudXJzZXJ5LXNpemUiLCAiU0laRS1N QiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiU2V0IHRoZSBtYXhpbXVtIG51cnNlcnkgc2l6 ZSBpbiBNQiIsCi1AQCAtMTQyMzUsNiArMTQyNTEsMTUgQEAgYm9vbCBTZXRDb250ZXh0SklUT3B0 aW9ucyhKU0NvbnRleHQqIGN4LCBjb25zdCBPcHRpb25QYXJzZXImIG9wKSB7Ci0gICBpZiAoc3Rv cEF0ID49IDApIHsKLSAgICAgaml0OjpTaW11bGF0b3I6OlN0b3BTaW1BdCA9IHN0b3BBdDsKLSAg IH0KLSsjZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9QUEM2NCkKLSsgIGlmIChvcC5nZXRCb29s T3B0aW9uKCJwcGM2NC1zaW0taWNhY2hlLWNoZWNrcyIpKSB7Ci0rICAgIGppdDo6U2ltdWxhdG9y UHJvY2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQgPSAwOwotKyAgfQotKwotKyAgaW50 MzJfdCBzdG9wQXQgPSBvcC5nZXRJbnRPcHRpb24oInBwYzY0LXNpbS1zdG9wLWF0Iik7Ci0rICBp ZiAoc3RvcEF0ID49IDApIHsKLSsgICAgaml0OjpTaW11bGF0b3I6OlN0b3BTaW1BdCA9IHN0b3BB dDsKLSsgIH0KLSAjZW5kaWYKLSAKLSAjaWZkZWYgREVCVUcKLWRpZmYgLS1naXQgYS9qcy9zcmMv c2hlbGwvanNzaGVsbC5oIGIvanMvc3JjL3NoZWxsL2pzc2hlbGwuaAotaW5kZXggZThkNDdiYTY4 ODhjLi41N2UyYjE1ZjNjZGQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvc2hlbGwvanNzaGVsbC5oCi0r KysgYi9qcy9zcmMvc2hlbGwvanNzaGVsbC5oCi1AQCAtMjIsNyArMjIsOCBAQAotIAotIC8vIFNv bWUgcGxhdGZvcm0gaG9va3MgbXVzdCBiZSBpbXBsZW1lbnRlZCBmb3Igc2luZ2xlLXN0ZXAgcHJv ZmlsaW5nLgotICNpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9BUk0pIHx8IGRlZmluZWQoSlNfU0lN VUxBVE9SX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX1NJTVVMQVRPUl9BUk02NCkgfHwg ZGVmaW5lZChKU19TSU1VTEFUT1JfTE9PTkc2NCkKLSsgICAgZGVmaW5lZChKU19TSU1VTEFUT1Jf QVJNNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0xPT05HNjQpIHx8IFwKLSsgICAgZGVmaW5l ZChKU19TSU1VTEFUT1JfUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCi0g IyAgZGVmaW5lIFNJTkdMRVNURVBfUFJPRklMSU5HCi0gI2VuZGlmCi0gCi1kaWZmIC0tZ2l0IGEv anMvc3JjL3Rlc3RzL3NoZWxsL29zLmpzIGIvanMvc3JjL3Rlc3RzL3NoZWxsL29zLmpzCi1pbmRl eCA5Mjk5ODI3NTY1NDguLmYzZDIzOTZiMTdlYiAxMDA2NDQKLS0tLSBhL2pzL3NyYy90ZXN0cy9z aGVsbC9vcy5qcwotKysrIGIvanMvc3JjL3Rlc3RzL3NoZWxsL29zLmpzCi1AQCAtMjAsNyArMjAs MTMgQEAgdmFyIGluZm8gPSBvcy53YWl0cGlkKGtpZHBpZCwgdHJ1ZSk7Ci0gYXNzZXJ0RXEoaW5m by5oYXNPd25Qcm9wZXJ0eSgicGlkIiksIGZhbHNlKTsKLSBhc3NlcnRFcShpbmZvLmhhc093blBy b3BlcnR5KCJleGl0U3RhdHVzIiksIGZhbHNlKTsKLSAKLS1vcy5raWxsKGtpZHBpZCk7Ci0rLy8g VXNlIFNJR0tJTEwgKDkpIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgU0lHSU5UOiB1bmRlciBoZWF2 eSBwYXJhbGxlbCB0ZXN0Ci0rLy8gbG9hZCwgU0lHSU5UIGRlbGl2ZXJ5IGNhbiByYWNlIHdpdGgg dGhlIGNoaWxkJ3Mgc2lnbmFsLWhhbmRsZXIgc2V0dXAgYW5kCi0rLy8gdGhlIGtlcm5lbCdzIHJl YXBpbmcgcGF0aCwgbGVhZGluZyB0byB3YWl0cGlkIGJlbG93IGJsb2NraW5nIHVudGlsIHRoZQot Ky8vIGBzbGVlcCA2MGAgZXhpdHMgbm9ybWFsbHkuIFNJR0tJTEwgaXMgdW5jYXRjaGFibGUgYW5k IGZvcmNlcyBpbW1lZGlhdGUKLSsvLyB0ZXJtaW5hdGlvbiwgc28gdGhlIGFzc2VydGlvbiBiZWxv dyAoImtpbGxlZCBwcm9jZXNzIHNob3VsZCBub3QgaGF2ZQotKy8vIGV4aXRTdGF0dXMiKSBpcyBy ZWxpYWJsZS4KLStvcy5raWxsKGtpZHBpZCwgOSk7Ci0gCi0gaW5mbyA9IG9zLndhaXRwaWQoa2lk cGlkKTsKLSBhc3NlcnRFcShpbmZvLmhhc093blByb3BlcnR5KCJwaWQiKSwgdHJ1ZSwgIndhaXRp bmcgb24gZGVhZCBwcm9jZXNzIHNob3VsZCByZXR1cm4gcGlkIik7Ci1kaWZmIC0tZ2l0IGEvanMv c3JjL3V0aWwvUG9pc29uLmggYi9qcy9zcmMvdXRpbC9Qb2lzb24uaAotaW5kZXggNzIxZWNmZjYx NDlkLi5kZTc5ODFhYTZmNjAgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvdXRpbC9Qb2lzb24uaAotKysr IGIvanMvc3JjL3V0aWwvUG9pc29uLmgKLUBAIC05Miw2ICs5Miw4IEBAIGNvbnN0IHVpbnQ4X3Qg SlNfU0NPUEVfREFUQV9UUkFJTElOR19OQU1FU19QQVRURVJOID0gMHhDQzsKLSAjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBkZWZpbmUgSlNfU1dFUFRfQ09ERV9QQVRURVJO IFwKLSAgICAgMHgyOSAgLy8gaWxsZWdhbCBzYiBpbnN0cnVjdGlvbiwgY3Jhc2hlcyBpbiB1c2Vy IG1vZGUuCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGRlZmluZSBKU19T V0VQVF9DT0RFX1BBVFRFUk4gMHgwMCAgLy8gaWxsZWdhbCBpbnN0cnVjdGlvbiAoYWxsIHplcm9z KQotICNlbHNlCi0gIyAgZXJyb3IgIkpTX1NXRVBUX0NPREVfUEFUVEVSTiBub3QgZGVmaW5lZCBm b3IgdGhpcyBwbGF0Zm9ybSIKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNt QW55UmVmLmggYi9qcy9zcmMvd2FzbS9XYXNtQW55UmVmLmgKLWluZGV4IGY4MWQ0YzYxNzFiNi4u NzIwMGU5YWIwZTIzIDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbUFueVJlZi5oCi0rKysg Yi9qcy9zcmMvd2FzbS9XYXNtQW55UmVmLmgKLUBAIC0yMDksNyArMjA5LDcgQEAgY2xhc3MgQW55 UmVmIHsKLSAgICAgLy8gVHJ1bmNhdGUgdGhlIHZhbHVlIHRvIHRoZSAzMS1iaXQgdmFsdWUgc2l6 ZS4KLSAgICAgdWludHB0cl90IHdpZGVWYWx1ZSA9IHVpbnRwdHJfdCh2YWx1ZSAmIDB4N0ZGRkZG RkYpOwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fTUlQUzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAg ICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotICAgICAvLyBTaWduIGV4dGVuZCB0aGUgdmFsdWUgdG8gdGhlIG5hdGl2ZSBwb2ludGVyIHNp emUuCi0gICAgIHVpbnRwdHJfdCB3aWRlVmFsdWUgPSB1aW50cHRyX3QoaW50NjRfdCgodWludDY0 X3QodmFsdWUpIDw8IDMzKSkgPj4gMzMpOwotICNlbGlmICFkZWZpbmVkKEpTXzY0QklUKQotQEAg LTIzNCw2ICsyMzQsMTEgQEAgY2xhc3MgQW55UmVmIHsKLSAjICBpZmRlZiBERUJVRwotICMgICAg aWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQot ICAgICBNT1pfQVNTRVJUKHZhbHVlIDw9IFVJTlQzMl9NQVgpOwotKyMgICAgZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAot KyAgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9QUEM2NCkKLSsgICAgLy8gT24gc2lnbi1leHRlbmRpbmcgcGxhdGZvcm1zLCBhIGNhbm9uaWNh bCBpMzIgbXVzdCBiZSB0aGUgc2lnbgotKyAgICAvLyBleHRlbnNpb24gb2YgaXRzIGxvdyAzMiBi aXRzLgotKyAgICBNT1pfQVNTRVJUKHZhbHVlID09IHVpbnRwdHJfdChpbnQ2NF90KGludDMyX3Qo dmFsdWUpKSkpOwotICMgICAgZW5kaWYKLSAjICBlbmRpZgotICAgfQotZGlmZiAtLWdpdCBhL2pz L3NyYy93YXNtL1dhc21CQ0RlZnMuaCBiL2pzL3NyYy93YXNtL1dhc21CQ0RlZnMuaAotaW5kZXgg YjQ0ZTkxZTI4NjkzLi42NmE4YzlhZmU4YzYgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvd2FzbS9XYXNt QkNEZWZzLmgKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21CQ0RlZnMuaAotQEAgLTQ0LDYgKzQ0LDkg QEAKLSAjaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gIyAgaW5jbHVkZSAiaml0L3Jp c2N2NjQvQXNzZW1ibGVyLXJpc2N2NjQuaCIKLSAjZW5kaWYKLSsjaWYgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKLSsj ZW5kaWYKLSAjaW5jbHVkZSAianMvU2NhbGFyVHlwZS5oIgotICNpbmNsdWRlICJ1dGlsL01lbW9y eS5oIgotICNpbmNsdWRlICJ3YXNtL1dhc21Db2RlZ2VuVHlwZXMuaCIKLUBAIC0xNTEsNiArMTU0 LDEwIEBAIGVudW0gY2xhc3MgUmhzRGVzdE9wIHsgVHJ1ZSA9IHRydWUgfTsKLSAjICBkZWZpbmUg UkFCQUxEUl9QSU5fSU5TVEFOQ0UKLSAjZW5kaWYKLSAKLSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2 NAotKyMgIGRlZmluZSBSQUJBTERSX1BJTl9JTlNUQU5DRQotKyNlbmRpZgotKwotIC8vIE1heCBu dW1iZXIgb2YgcHVzaGVzIG9udG8gdGhlIHZhbHVlIHN0YWNrIGZvciBhbnkgb3Bjb2RlIG9yIGVt aXR0ZXIgdGhhdAotIC8vIGRvZXMgbm90IHB1c2ggYSB2YXJpYWJsZSwgdW5ib3VuZGVkIGFtb3Vu dCAoYW55dGhpbmcgd2l0aCBtdWx0aXBsZQotIC8vIHJlc3VsdHMpLiAgVGhpcyBpbmNsdWRlcyBh bHNvIGludGVybWVkaWF0ZSBwdXNoZXMgc3VjaCBhcyB2YWx1ZXMgcHVzaGVkIGFzCi1kaWZmIC0t Z2l0IGEvanMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcCBiL2pzL3NyYy93YXNtL1dhc21CQ01l bW9yeS5jcHAKLWluZGV4IDgzNTUxMmIwOWI4Yy4uOTEzN2IwOWY0Njg0IDEwMDY0NAotLS0tIGEv anMvc3JjL3dhc20vV2FzbUJDTWVtb3J5LmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbUJDTWVt b3J5LmNwcAotQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6Ym91bmRzQ2hl Y2tCZWxvdzRHQkFjY2Vzcyh1aW50MzJfdCBtZW1vcnlJbmRleCwKLSAvLyBNYWtlIHN1cmUgdGhl IHB0ciBjb3VsZCBiZSB1c2VkIGFzIGFuIGluZGV4IHJlZ2lzdGVyLgotIHN0YXRpYyBpbmxpbmUg dm9pZCBUb1ZhbGlkSW5kZXgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBwdHIpIHsKLSAj aWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05H NjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICAvLyBX aGVuIHB0ciBpcyB1c2VkIGFzIGFuIGluZGV4LCBpdCB3aWxsIGJlIGFkZGVkIHRvIGEgNjQtYml0 IHJlZ2lzdGVyLgotICAgLy8gU28gd2Ugc2hvdWxkIGV4cGxpY2l0bHkgcHJvbW90ZSBwdHIgdG8g NjQtYml0LiBTaW5jZSBub3cgcHRyIGhvbGRzIGEKLSAgIC8vIHVuc2lnbmVkIDMyLWJpdCB2YWx1 ZSwgd2UgemVyby1leHRlbmQgaXQgdG8gNjQtYml0IGhlcmUuCi1AQCAtNjQ1LDYgKzY0NSwxMyBA QCB2b2lkIEJhc2VDb21waWxlcjo6ZXhlY3V0ZUxvYWQoTWVtb3J5QWNjZXNzRGVzYyogYWNjZXNz LCBBY2Nlc3NDaGVjayogY2hlY2ssCi0gICB9IGVsc2UgewotICAgICBtYXNtLndhc21Mb2FkKCph Y2Nlc3MsIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBkZXN0LmFueSgpKTsKLSAgIH0KLSsjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICBNT1pfQVNTRVJUKHRlbXAuaXNJbnZhbGlkKCkp OwotKyAgaWYgKGRlc3QudGFnID09IEFueVJlZzo6STY0KSB7Ci0rICAgIG1hc20ud2FzbUxvYWRJ NjQoKmFjY2VzcywgbWVtb3J5QmFzZSwgcHRyLCBwdHIsIGRlc3QuaTY0KCkpOwotKyAgfSBlbHNl IHsKLSsgICAgbWFzbS53YXNtTG9hZCgqYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0ciwgZGVz dC5hbnkoKSk7Ci0rICB9Ci0gI2Vsc2UKLSAgIE1PWl9DUkFTSCgiQmFzZUNvbXBpbGVyIHBsYXRm b3JtIGhvb2s6IGxvYWQiKTsKLSAjZW5kaWYKLUBAIC02NzUsMTAgKzY4MiwxMSBAQCB2b2lkIEJh c2VDb21waWxlcjo6bG9hZChNZW1vcnlBY2Nlc3NEZXNjKiBhY2Nlc3MsIEFjY2Vzc0NoZWNrKiBj aGVjaywKLSAgIC8vIGdlbmVyYXRlZCBpcyB0aGUgc2FtZSBmb3IgdGhlIDY0LWJpdCBhbmQgdGhl IDMyLWJpdCBjYXNlLgotICAgcmV0dXJuIGV4ZWN1dGVMb2FkKGFjY2VzcywgY2hlY2ssIGluc3Rh bmNlLCBtZW1vcnlCYXNlLCBSZWdJMzIocHRyLnJlZyksIGRlc3QsCi0gICAgICAgICAgICAgICAg ICAgICAgbWF5YmVGcm9tSTY0KHRlbXApKTsKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKLS0gIC8vIE9uIG1pcHM2NCBhbmQg bG9vbmdhcmNoNjQsIHRoZSAncHJlcGFyZU1lbW9yeUFjY2VzcycgZnVuY3Rpb24gd2lsbCBtYWtl Ci0tICAvLyBzdXJlIHRoYXQgcHRyIGhvbGRzIGEgdmFsaWQgNjQtYml0IGluZGV4IHZhbHVlLiBU aHVzIHRoZSBjb2RlIGdlbmVyYXRlZCBpbgotLSAgLy8gJ2V4ZWN1dGVMb2FkJyBpcyB0aGUgc2Ft ZSBmb3IgdGhlIDY0LWJpdCBhbmQgdGhlIDMyLWJpdCBjYXNlLgotKyNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCi0rICAg IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgIC8vIE9uIG1pcHM2NCwgbG9vbmdhcmNoNjQs IGFuZCBwcGM2NCwgdGhlICdwcmVwYXJlTWVtb3J5QWNjZXNzJyBmdW5jdGlvbiB3aWxsCi0rICAv LyBtYWtlIHN1cmUgdGhhdCBwdHIgaG9sZHMgYSB2YWxpZCA2NC1iaXQgaW5kZXggdmFsdWUuIFRo dXMgdGhlIGNvZGUKLSsgIC8vIGdlbmVyYXRlZCBpbiAnZXhlY3V0ZUxvYWQnIGlzIHRoZSBzYW1l IGZvciB0aGUgNjQtYml0IGFuZCB0aGUgMzItYml0IGNhc2UuCi0gICByZXR1cm4gZXhlY3V0ZUxv YWQoYWNjZXNzLCBjaGVjaywgaW5zdGFuY2UsIG1lbW9yeUJhc2UsIFJlZ0kzMihwdHIucmVnKSwg ZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICBtYXliZUZyb21JNjQodGVtcCkpOwotICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotQEAgLTc4OCw2ICs3OTYsMTMgQEAgdm9pZCBC YXNlQ29tcGlsZXI6OmV4ZWN1dGVTdG9yZShNZW1vcnlBY2Nlc3NEZXNjKiBhY2Nlc3MsIEFjY2Vz c0NoZWNrKiBjaGVjaywKLSAgIH0gZWxzZSB7Ci0gICAgIG1hc20ud2FzbVN0b3JlKCphY2Nlc3Ms IHNyYy5hbnkoKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOwotICAgfQotKyNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKLSsgIE1PWl9BU1NFUlQodGVtcC5pc0ludmFsaWQoKSk7Ci0rICBp ZiAoYWNjZXNzLT50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2NCkgewotKyAgICBtYXNtLndhc21TdG9y ZUk2NCgqYWNjZXNzLCBzcmMuaTY0KCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKLSsgIH0gZWxz ZSB7Ci0rICAgIG1hc20ud2FzbVN0b3JlKCphY2Nlc3MsIHNyYy5hbnkoKSwgbWVtb3J5QmFzZSwg cHRyLCBwdHIpOwotKyAgfQotICNlbHNlCi0gICBNT1pfQ1JBU0goIkJhc2VDb21waWxlciBwbGF0 Zm9ybSBob29rOiBzdG9yZSIpOwotICNlbmRpZgotQEAgLTgxMiw3ICs4MjcsNyBAQCB2b2lkIEJh c2VDb21waWxlcjo6c3RvcmUoTWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLCBBY2Nlc3NDaGVjayog Y2hlY2ssCi0gICAgICAgICAgICAgICAgICAgICAgIG1heWJlRnJvbUk2NCh0ZW1wKSk7Ci0gI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8 fCAgICBcCi0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAg ICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotICAgcmV0dXJuIGV4ZWN1dGVTdG9yZShhY2Nlc3MsIGNoZWNrLCBpbnN0YW5jZSwgbWVtb3J5 QmFzZSwgUmVnSTMyKHB0ci5yZWcpLCBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgIG1heWJl RnJvbUk2NCh0ZW1wKSk7Ci0gI2Vsc2UKLUBAIC0xMjk1LDcgKzEzMTAsOCBAQCBzdGF0aWMgdm9p ZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0kzMiBydiwgY29uc3QgVGVtcHMmIHRl bXBzKSB7Ci0gICBiYy0+ZnJlZUkzMih0ZW1wcy50MCk7Ci0gfQotIAotLSNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KQotKyNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0 KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAKLSBzdHJ1Y3QgVGVtcHMg ewotICAgUmVnSTMyIHQwLCB0MSwgdDI7Ci1AQCAtMTUwNCw3ICsxNTIwLDcgQEAgc3RhdGljIHZv aWQgRGVhbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBBdG9taWNPcCBvcCwgUmVnSTY0IHJ2LCBS ZWdJNjQgdGVtcCkgewotIH0KLSAKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCi0gCi0gc3RhdGljIHZvaWQgUG9wQW5kQWxsb2NhdGUoQmFzZUNvbXBp bGVyKiBiYywgQXRvbWljT3Agb3AsIFJlZ0k2NCogcmQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnSTY0KiBydiwgUmVnSTY0KiB0ZW1wKSB7Ci1AQCAtMTY3OCw3ICsxNjk0LDggQEAg c3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBSZWdJMzIgcnYsIGNvbnN0 IFRlbXBzJikgewotICAgYmMtPmZyZWVJMzIocnYpOwotIH0KLSAKLS0jZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKLSsjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gCi0gc3RydWN0IFRlbXBzIHsK LSAgIFJlZ0kzMiB0MCwgdDEsIHQyOwotQEAgLTE4NDQsNyArMTg2MSw3IEBAIHN0YXRpYyB2b2lk IERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgUmVnSTY0IHJkLCBSZWdJNjQgcnYpIHsKLSB9 Ci0gCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KQotKyAgICBk ZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQot IAotIHN0YXRpYyB2b2lkIFBvcEFuZEFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0k2NCog cmQsIFJlZ0k2NCogcnYpIHsKLSAgICpydiA9IGJjLT5wb3BJNjQoKTsKLUBAIC0yMDE3LDcgKzIw MzQsOCBAQCBzdGF0aWMgdm9pZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0kzMiBy ZXhwZWN0LCBSZWdJMzIgcm5ldywKLSAgIGJjLT5mcmVlSTMyKHJleHBlY3QpOwotIH0KLSAKLS0j ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkgfHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gCi0g c3RydWN0IFRlbXBzIHsKLSAgIFJlZ0kzMiB0MCwgdDEsIHQyOwotQEAgLTIyODcsNyArMjMwNSw3 IEBAIHN0YXRpYyB2b2lkIERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgUmVnSTY0IHJleHBl Y3QsIFJlZ0k2NCBybmV3KSB7Ci0gfQotIAotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVnQWRkcmVzc1R5 cGU+Ci0gc3RhdGljIHZvaWQgUG9wQW5kQWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgUmVnSTY0 KiByZXhwZWN0LCBSZWdJNjQqIHJuZXcsCi1AQCAtMjg4NSw2ICsyOTAzLDExIEBAIHZvaWQgQmFz ZUNvbXBpbGVyOjpsb2FkRXh0ZW5kKE1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywgU2NhbGFyOjpU eXBlIHZpZXdUeXBlKSB7Ci0gICBSZWdJNjQgcnMgPSBwb3BJNjQoKTsKLSAgIFJlZ1YxMjggcmQg PSBuZWVkVjEyOCgpOwotICAgbWFzbS5tb3ZlR1BSNjRUb0RvdWJsZShycywgcmQpOwotKyNpZmRl ZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAvLyBtdHZzcmQgcGxhY2VzIHZhbHVlIGluIEJFIGR3MCAo PSBMRSBkdzEpLiB3aWRlbkxvdyogb3BlcmF0ZXMgb24gTEUgZHcwLgotKyAgLy8gU3dhcCBkd29y ZHMgdG8gbW92ZSBsb2FkZWQgZGF0YSB0byB0aGUgY29ycmVjdCBoYWxmLgotKyAgbWFzbS5hc194 eHBlcm1kaShyZCwgcmQsIHJkLCAyKTsKLSsjZW5kaWYKLSAgIHN3aXRjaCAodmlld1R5cGUpIHsK LSAgICAgY2FzZSBTY2FsYXI6OkludDg6Ci0gICAgICAgbWFzbS53aWRlbkxvd0ludDh4MTYocmQs IHJkKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQkNSZWdEZWZzLmggYi9qcy9zcmMv d2FzbS9XYXNtQkNSZWdEZWZzLmgKLWluZGV4IGJiODRmMDg2M2RlMi4uZmQzN2JkNDY0ZjM5IDEw MDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbUJDUmVnRGVmcy5oCi0rKysgYi9qcy9zcmMvd2Fz bS9XYXNtQkNSZWdEZWZzLmgKLUBAIC0xMTgsNiArMTE4LDEzIEBAIHN0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgUmFiYWxkclNjcmF0Y2hJMzIgPSBDYWxsVGVtcFJlZzI7Ci0gc3RhdGljIGNvbnN0 ZXhwciBSZWdpc3RlciBSYWJhbGRyU2NyYXRjaEkzMiA9IENhbGxUZW1wUmVnMjsKLSAjZW5kaWYK LSAKLSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyMgIGRlZmluZSBSQUJBTERSX1NDUkFUQ0hf STMyCi0rLy8gVXNlIHIyNSAoY2FsbGVlLXNhdmVkLCBub24tYXJnLCBub3QgdXNlZCBieSBhbnkg d2FzbSBpbmZyYXN0cnVjdHVyZSkKLSsvLyBpbnN0ZWFkIG9mIENhbGxUZW1wUmVnMiAocjEwKSB3 aGljaCBpcyBJbnRBcmdSZWc3LgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmFiYWxkclNj cmF0Y2hJMzIgPSByMjU7Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIFJBQkFMRFJfU0NSQVRDSF9GMzJf QUxJQVNFU19GNjQKLSAjICBpZiAhZGVmaW5lZChSQUJBTERSX1NDUkFUQ0hfRjMyKSB8fCAhZGVm aW5lZChSQUJBTERSX1NDUkFUQ0hfRjY0KQotICMgICAgZXJyb3IgIkJhZCBjb25maWd1cmF0aW9u IgotQEAgLTM4Niw4ICszOTMsOSBAQCBzdHJ1Y3QgU3BlY2lmaWNSZWdzIHsKLSAKLSAgIFNwZWNp ZmljUmVncygpIDogYWJpUmV0dXJuUmVnSTY0KFJldHVyblJlZzY0KSB7fQotIH07Ci0tI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8ICBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAotKyAgICBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0gc3RydWN0IFNwZWNpZmljUmVncyB7Ci0gICAvLyBSZXF1aXJlZCBieSBn Y2MuCi0gICBTcGVjaWZpY1JlZ3MoKSB7fQotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21C YXNlbGluZUNvbXBpbGUuY3BwIGIvanMvc3JjL3dhc20vV2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAK LWluZGV4IDJhZjdhZDdmNTgzYi4uYzU3MTgwZGQzNjJiIDEwMDY0NAotLS0tIGEvanMvc3JjL3dh c20vV2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21CYXNlbGlu ZUNvbXBpbGUuY3BwCi1AQCAtMzc2LDExICszNzYsMTUgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnRh YmxlU3dpdGNoKExhYmVsKiB0aGVUYWJsZSwgUmVnSTMyIHN3aXRjaFZhbHVlLAotICAgbWFzbS5t YV9sZHIoRFRSQWRkcihzY3JhdGNoLCBEdHJSZWdJbW1TaGlmdChzd2l0Y2hWYWx1ZSwgTFNMLCAy KSksIHBjLCBPZmZzZXQsCi0gICAgICAgICAgICAgICBBc3NlbWJsZXI6OkFsd2F5cyk7Ci0gI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05H NjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBTY3Jh dGNoSTMyIHNjcmF0Y2goKnRoaXMpOwotICAgQ29kZUxhYmVsIHRhYmxlQ2w7Ci0gCi0rIyAgaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgbWFzbS5tb3YoJnRhYmxlQ2wsIHNjcmF0Y2gp OwotKyMgIGVsc2UKLSAgIG1hc20ubWFfbGkoc2NyYXRjaCwgJnRhYmxlQ2wpOwotKyMgIGVuZGlm Ci0gCi0gICB0YWJsZUNsLnRhcmdldCgpLT5iaW5kKHRoZVRhYmxlLT5vZmZzZXQoKSk7Ci0gICBt YXNtLmFkZENvZGVMYWJlbCh0YWJsZUNsKTsKLUBAIC04OTgsNyArOTAyLDcgQEAgdm9pZCBCYXNl Q29tcGlsZXI6Omluc2VydEJyZWFrYWJsZVBvaW50KENhbGxTaXRlS2luZCBraW5kKSB7Ci0gICBt YXNtLmFwcGVuZChDYWxsU2l0ZURlc2MoaXRlcl8ubGFzdE9wY29kZU9mZnNldCgpLCBraW5kKSwK LSAgICAgICAgICAgICAgIENvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSAjZWxp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChK U19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIFNjcmF0 Y2hQdHIgc2NyYXRjaCgqdGhpcyk7Ci0gICBMYWJlbCBMOwotICAgbWFzbS5sb2FkUHRyKEFkZHJl c3MoSW5zdGFuY2VSZWcsIEluc3RhbmNlOjpvZmZzZXRPZkRlYnVnU3R1YigpKSwgc2NyYXRjaCk7 Ci1AQCAtOTcyLDcgKzk3Niw3IEBAIHZvaWQgQmFzZUNvbXBpbGVyOjppbnNlcnRQZXJGdW5jdGlv bkRlYnVnU3R1YigpIHsKLSAgICAgbWFzbS5tYV9ieChsciwgQXNzZW1ibGVyOjpaZXJvKTsKLSAg IH0KLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSAgIHsKLSAgICAgU2NyYXRjaFB0ciBzY3JhdGNoKCp0aGlzKTsKLSAKLUBAIC0xNDAzLDcgKzE0 MDcsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6cG9wU3RhY2tSZXN1bHRzKEFCSVJlc3VsdEl0ZXIm IGl0ZXIsIFN0YWNrSGVpZ2h0IHN0YWNrQmFzZSkgewotICAgICBzd2l0Y2ggKHYua2luZCgpKSB7 Ci0gICAgICAgY2FzZSBTdGs6OkNvbnN0STMyOgotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgICAgICAgIGZyLnN0b3JlSW1tZWRpYXRlUHRyVG9T dGFjayh2LmkzMnZhbF8sIHJlc3VsdEhlaWdodCwgdGVtcCk7Ci0gI2Vsc2UKLSAgICAgICAgIGZy LnN0b3JlSW1tZWRpYXRlUHRyVG9TdGFjayh1aW50MzJfdCh2LmkzMnZhbF8pLCByZXN1bHRIZWln aHQsIHRlbXApOwotQEAgLTE3MjMsNiArMTcyNywxMyBAQCB2b2lkIEJhc2VDb21waWxlcjo6cGFz c0FyZyhWYWxUeXBlIHR5cGUsIGNvbnN0IFN0ayYgYXJnLCBGdW5jdGlvbkNhbGwqIGNhbGwpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ0xvYy5vZmZzZXRGcm9t QXJnQmFzZSgpKSk7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgIGxvYWRJMzIoYXJnLCBSZWdJ MzIoYXJnTG9jLmdwcigpKSk7Ci0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgICAgICAgIC8v IGFkZGkgY2FuIHNpZ24tZXh0ZW5kLCB3aGljaCB5aWVsZHMgd3JvbmcgdmFsdWVzIHdoZW4gdGhl IEMrKwotKyAgICAgICAgLy8gY2FsbGVlIGV4cGVjdHMgYSB1aW50MzJfdC4gQ2xlYXIgdGhlIHVw cGVyIDMyIGJpdHMuCi0rICAgICAgICBpZiAoY2FsbC0+YWJpS2luZCA9PSBBQklLaW5kOjpTeXN0 ZW0pIHsKLSsgICAgICAgICAgbWFzbS5hc19ybGRpY2woYXJnTG9jLmdwcigpLCBhcmdMb2MuZ3By KCksIDAsIDMyKTsKLSsgICAgICAgIH0KLSsjZW5kaWYKLSAgICAgICB9Ci0gICAgICAgYnJlYWs7 Ci0gICAgIH0KLUBAIC0yMzcyLDkgKzIzODMsMTAgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmZpbmlz aFRyeU5vdGUoc2l6ZV90IHRyeU5vdGVJbmRleCkgewotIFJlZ0kzMiBCYXNlQ29tcGlsZXI6Om5l ZWRSb3RhdGU2NFRlbXAoKSB7Ci0gI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpCi0gICByZXR1 cm4gbmVlZEkzMigpOwotLSNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9BUk0pIHx8ICAgIFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdF Tl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICAgICBcCi0r ICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgICAgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX1JJU0NWNjQpIHx8IFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQot ICAgcmV0dXJuIFJlZ0kzMjo6SW52YWxpZCgpOwotICNlbHNlCi0gICBNT1pfQ1JBU0goIkJhc2VD b21waWxlciBwbGF0Zm9ybSBob29rOiBuZWVkUm90YXRlNjRUZW1wIik7Ci1AQCAtMjQzMyw2ICsy NDQ1LDggQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnBvcEFuZEFsbG9jYXRlRm9yTXVsSTY0KFJlZ0k2 NCogcjAsIFJlZ0k2NCogcjEsCi0gICBwb3AyeEk2NChyMCwgcjEpOwotICNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KQotICAgcG9wMnhJNjQocjAsIHIxKTsKLSsjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0rICBwb3AyeEk2NChyMCwgcjEpOwotICNlbHNlCi0gICBNT1pf Q1JBU0goIkJhc2VDb21waWxlciBwb3J0aW5nIGludGVyZmFjZTogcG9wQW5kQWxsb2NhdGVGb3JN dWxJNjQiKTsKLSAjZW5kaWYKLUBAIC0yODY2LDYgKzI4ODAsOSBAQCBzdGF0aWMgUmVnSTMyIFBv cGNudFRlbXAoQmFzZUNvbXBpbGVyJiBiYykgewotICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotICAgICBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSAgIHJldHVybiBiYy5uZWVkSTMyKCk7Ci0rI2VsaWYgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQotKyAgLy8gUFBDNjQgaGFzIG5hdGl2ZSBwb3BjbnRkL3BvcGNu dHc7IG5vIHRlbXAgcmVnaXN0ZXIgbmVlZGVkLgotKyAgcmV0dXJuIFJlZ0kzMjo6SW52YWxpZCgp OwotICNlbHNlCi0gICBNT1pfQ1JBU0goIkJhc2VDb21waWxlciBwbGF0Zm9ybSBob29rOiBQb3Bj bnRUZW1wIik7Ci0gI2VuZGlmCi1AQCAtOTM2Miw2ICs5Mzc5LDExIEBAIHN0YXRpYyB2b2lkIE11 bEk2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCwKLSAg ICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXAxLCBSZWdWMTI4IHRlbXAyKSB7Ci0gICBt YXNtLm11bEludDY0eDIocnNkLCBycywgcnNkLCB0ZW1wMSwgdGVtcDIpOwotIH0KLSsjICBlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLStzdGF0aWMgdm9pZCBNdWxJNjR4MihNYWNyb0Fz c2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QsCi0rICAgICAgICAgICAgICAg ICAgICAgUmVnVjEyOCB0ZW1wMSwgUmVnVjEyOCB0ZW1wMikgewotKyAgbWFzbS5tdWxJbnQ2NHgy KHJzZCwgcnMsIHJzZCwgdGVtcDEsIHRlbXAyKTsKLSt9Ci0gIyAgZW5kaWYKLSAKLSBzdGF0aWMg dm9pZCBNdWxGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCBy c2QpIHsKLUBAIC05Mzc2LDcgKzkzOTgsOCBAQCBzdGF0aWMgdm9pZCBEaXZGNjR4MihNYWNyb0Fz c2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKLSAgIG1hc20uZGl2Rmxv YXQ2NHgyKHJzZCwgcnMsIHJzZCk7Ci0gfQotIAotLSMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9Y ODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpCi0rIyAgaWYgZGVmaW5lZChKU19DT0RFR0VO X1g4NikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgXAotKyAgICAgIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKLSBzdGF0aWMgdm9pZCBNaW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFz bSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QsCi0gICAgICAgICAgICAgICAgICAgICAgUmVnVjEy OCB0ZW1wMSwgUmVnVjEyOCB0ZW1wMikgewotICAgbWFzbS5taW5GbG9hdDMyeDQocnNkLCBycywg cnNkLCB0ZW1wMSwgdGVtcDIpOwotQEAgLTkzOTcsNiArOTQyMCwyMiBAQCBzdGF0aWMgdm9pZCBN YXhGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QsCi0g ICBtYXNtLm1heEZsb2F0NjR4Mihyc2QsIHJzLCByc2QsIHRlbXAxLCB0ZW1wMik7Ci0gfQotIAot KyMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsvLyBQUEM2NDogdXNlIG5vbi1SaHNE ZXN0T3AgY29udmVudGlvbiAoZmlyc3Q9cmhzLCBzZWNvbmQ9bGhzRGVzdCksCi0rLy8gbWF0Y2hp bmcgdGhlIHBzZXVkb01pbi9NYXggZnVuY3Rpb24gc2lnbmF0dXJlLgotK3N0YXRpYyB2b2lkIFBN aW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsK LSsgIG1hc20ucHNldWRvTWluRmxvYXQzMng0KHJzLCByc2QpOwotK30KLStzdGF0aWMgdm9pZCBQ TWluRjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7 Ci0rICBtYXNtLnBzZXVkb01pbkZsb2F0NjR4MihycywgcnNkKTsKLSt9Ci0rc3RhdGljIHZvaWQg UE1heEYzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCkg ewotKyAgbWFzbS5wc2V1ZG9NYXhGbG9hdDMyeDQocnMsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lk IFBNYXhGNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2Qp IHsKLSsgIG1hc20ucHNldWRvTWF4RmxvYXQ2NHgyKHJzLCByc2QpOwotK30KLSsjICBlbHNlCi0g c3RhdGljIHZvaWQgUE1pbkYzMng0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzZCwg UmVnVjEyOCBycywKLSAgICAgICAgICAgICAgICAgICAgICAgUmhzRGVzdE9wKSB7Ci0gICBtYXNt LnBzZXVkb01pbkZsb2F0MzJ4NChyc2QsIHJzKTsKLUBAIC05NDE2LDYgKzk0NTUsNyBAQCBzdGF0 aWMgdm9pZCBQTWF4RjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnNkLCBSZWdW MTI4IHJzLAotICAgICAgICAgICAgICAgICAgICAgICBSaHNEZXN0T3ApIHsKLSAgIG1hc20ucHNl dWRvTWF4RmxvYXQ2NHgyKHJzZCwgcnMpOwotIH0KLSsjICBlbmRpZgotICMgIGVsaWYgZGVmaW5l ZChKU19DT0RFR0VOX0FSTTY0KQotIHN0YXRpYyB2b2lkIE1pbkYzMng0KE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCkgewotICAgbWFzbS5taW5GbG9hdDMyeDQo cnMsIHJzZCk7Ci1AQCAtOTgwNiw2ICs5ODQ2LDY4IEBAIHN0YXRpYyB2b2lkIFNoaWZ0UmlnaHRJ NjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKLSAgIG1h c20ucmlnaHRTaGlmdEludDY0eDIocnNkLCB0ZW1wLCByc2QpOwotIH0KLSAKLStzdGF0aWMgdm9p ZCBTaGlmdFJpZ2h0VUk2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1Yx MjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSsg IFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaHJVLCBycywgdGVtcCk7Ci0rICBtYXNt LnVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIocnNkLCB0ZW1wLCByc2QpOwotK30KLSsjICBlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsvLyBQUEM2NDogc2FtZSBhcyBBUk02NCBwYXR0 ZXJuIChzaGlmdCBhbW91bnQgaW4gR1BSLCByZXN1bHQgaW4gdmVjdG9yIHJlZykKLStzdGF0aWMg dm9pZCBTaGlmdExlZnRJOHgxNihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdW MTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgewotKyAg U2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJOHgxNlNobCwgcnMsIHRlbXApOwotKyAgbWFzbS5s ZWZ0U2hpZnRJbnQ4eDE2KHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rc3RhdGljIHZvaWQgU2hpZnRM ZWZ0STE2eDgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSsgIFNoaWZ0T3BNYXNr KG1hc20sIFNpbWRPcDo6STE2eDhTaGwsIHJzLCB0ZW1wKTsKLSsgIG1hc20ubGVmdFNoaWZ0SW50 MTZ4OChyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lkIFNoaWZ0TGVmdEkzMng0KE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0rICBTaGlmdE9wTWFzayhtYXNtLCBTaW1k T3A6OkkzMng0U2hsLCBycywgdGVtcCk7Ci0rICBtYXNtLmxlZnRTaGlmdEludDMyeDQocnNkLCB0 ZW1wLCByc2QpOwotK30KLStzdGF0aWMgdm9pZCBTaGlmdExlZnRJNjR4MihNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdJMzIgdGVtcCkgewotKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJNjR4MlNo bCwgcnMsIHRlbXApOwotKyAgbWFzbS5sZWZ0U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsK LSt9Ci0rc3RhdGljIHZvaWQgU2hpZnRSaWdodEk4eDE2KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBS ZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJ MzIgdGVtcCkgewotKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJOHgxNlNoclMsIHJzLCB0 ZW1wKTsKLSsgIG1hc20ucmlnaHRTaGlmdEludDh4MTYocnNkLCB0ZW1wLCByc2QpOwotK30KLStz dGF0aWMgdm9pZCBTaGlmdFJpZ2h0VUk4eDE2KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIg cnMsIFJlZ1YxMjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRl bXApIHsKLSsgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STh4MTZTaHJVLCBycywgdGVtcCk7 Ci0rICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYocnNkLCB0ZW1wLCByc2QpOwotK30K LStzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0STE2eDgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kz MiBycywgUmVnVjEyOCByc2QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0 ZW1wKSB7Ci0rICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkxNng4U2hyUywgcnMsIHRlbXAp OwotKyAgbWFzbS5yaWdodFNoaWZ0SW50MTZ4OChyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0YXRp YyB2b2lkIFNoaWZ0UmlnaHRVSTE2eDgoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywg UmVnVjEyOCByc2QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkg ewotKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJMTZ4OFNoclUsIHJzLCB0ZW1wKTsKLSsg IG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0 YXRpYyB2b2lkIFNoaWZ0UmlnaHRJMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJz LCBSZWdWMTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXAp IHsKLSsgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STMyeDRTaHJTLCBycywgdGVtcCk7Ci0r ICBtYXNtLnJpZ2h0U2hpZnRJbnQzMng0KHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rc3RhdGljIHZv aWQgU2hpZnRSaWdodFVJMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdW MTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0r ICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkzMng0U2hyVSwgcnMsIHRlbXApOwotKyAgbWFz bS51bnNpZ25lZFJpZ2h0U2hpZnRJbnQzMng0KHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rc3RhdGlj IHZvaWQgU2hpZnRSaWdodEk2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJl Z1YxMjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgewot KyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJNjR4MlNoclMsIHJzLCB0ZW1wKTsKLSsgIG1h c20ucmlnaHRTaGlmdEludDY0eDIocnNkLCB0ZW1wLCByc2QpOwotK30KLSBzdGF0aWMgdm9pZCBT aGlmdFJpZ2h0VUk2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjgg cnNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSAgIFNo aWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaHJVLCBycywgdGVtcCk7Ci1AQCAtMTAxMDcs NiArMTAyMDksMjMgQEAgc3RhdGljIHZvaWQgQml0bWFza0kzMng0KE1hY3JvQXNzZW1ibGVyJiBt YXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQsCi0gICBtYXNtLmJpdG1hc2tJbnQzMng0KHJzLCBy ZCwgdGVtcCk7Ci0gfQotIAotK3N0YXRpYyB2b2lkIEJpdG1hc2tJNjR4MihNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdWMTI4IHRlbXApIHsKLSsgIG1hc20uYml0bWFza0ludDY0eDIocnMsIHJkLCB0ZW1wKTsK LSt9Ci0rIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rc3RhdGljIHZvaWQgQml0 bWFza0k4eDE2KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggdGVtcCkgewotKyAgbWFzbS5iaXRtYXNr SW50OHgxNihycywgcmQsIHRlbXApOwotK30KLStzdGF0aWMgdm9pZCBCaXRtYXNrSTE2eDgoTWFj cm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ0kzMiByZCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnVjEyOCB0ZW1wKSB7Ci0rICBtYXNtLmJpdG1hc2tJbnQxNng4KHJzLCBy ZCwgdGVtcCk7Ci0rfQotK3N0YXRpYyB2b2lkIEJpdG1hc2tJMzJ4NChNYWNyb0Fzc2VtYmxlciYg bWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdWMTI4IHRlbXApIHsKLSsgIG1hc20uYml0bWFza0ludDMyeDQocnMsIHJkLCB0ZW1wKTsKLSt9 Ci0gc3RhdGljIHZvaWQgQml0bWFza0k2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4 IHJzLCBSZWdJMzIgcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggdGVtcCkg ewotICAgbWFzbS5iaXRtYXNrSW50NjR4MihycywgcmQsIHRlbXApOwotQEAgLTEwMTgyLDYgKzEw MzAxLDEzIEBAIHN0YXRpYyB2b2lkIEJpdHNlbGVjdFYxMjgoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFJlZ1YxMjggcmhzLCBSZWdWMTI4IGNvbnRyb2wsCi0gICBtYXNtLmJpdHdpc2VTZWxlY3RTaW1k MTI4KGxoc0Rlc3QsIHJocywgdGVtcCk7Ci0gICBtYXNtLm1vdmVTaW1kMTI4KHRlbXAsIGxoc0Rl c3QpOwotIH0KLSsjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLStzdGF0aWMgdm9p ZCBCaXRzZWxlY3RWMTI4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJocywgUmVnVjEy OCBjb250cm9sLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnVjEyOCBsaHNEZXN0LCBS ZWdWMTI4IHRlbXApIHsKLSsgIG1hc20ubW92ZVNpbWQxMjgoY29udHJvbCwgdGVtcCk7Ci0rICBt YXNtLmJpdHdpc2VTZWxlY3RTaW1kMTI4KGxoc0Rlc3QsIHJocywgdGVtcCk7Ci0rICBtYXNtLm1v dmVTaW1kMTI4KHRlbXAsIGxoc0Rlc3QpOwotK30KLSAjICBlbmRpZgotIAotICMgIGlmZGVmIEVO QUJMRV9XQVNNX1JFTEFYRURfU0lNRAotQEAgLTEwMjU3LDcgKzEwMzgzLDcgQEAgdm9pZCBCYXNl Q29tcGlsZXI6OmVtaXREb3RJOHgxNkk3eDE2QWRkUygpIHsKLSAgIFJlZ1YxMjggcnNkID0gcG9w VjEyOCgpOwotICAgUmVnVjEyOCByczAsIHJzMTsKLSAgIHBvcDJ4VjEyOCgmcnMwLCAmcnMxKTsK LS0jICAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKLSsjICAgIGlmIGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgUmVnVjEyOCB0 ZW1wID0gbmVlZFYxMjgoKTsKLSAgIG1hc20uZG90SW50OHgxNkludDd4MTZUaGVuQWRkKHJzMCwg cnMxLCByc2QsIHRlbXApOwotICAgZnJlZVYxMjgodGVtcCk7Ci1AQCAtMTA0NjMsNyArMTA1ODks NyBAQCBib29sIEJhc2VDb21waWxlcjo6ZW1pdFZlY3RvckxhbmVTZWxlY3QoKSB7Ci0gICBmcmVl VjEyOChsaHMpOwotICAgZnJlZVYxMjgobWFzayk7Ci0gICBwdXNoVjEyOChyaHNEZXN0KTsKLS0j ICAgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotKyMgICAgZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIFJlZ1YxMjgg bWFza0Rlc3QgPSBwb3BWMTI4KCk7Ci0gICBSZWdWMTI4IHJocyA9IHBvcFYxMjgoKTsKLSAgIFJl Z1YxMjggbGhzID0gcG9wVjEyOCgpOwotQEAgLTEyNjI4LDcgKzEyNzU0LDcgQEAgYm9vbCBqczo6 d2FzbTo6QmFzZWxpbmVQbGF0Zm9ybVN1cHBvcnQoKSB7Ci0gI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8ICAgICAgICBcCi0gICAgIGRlZmlu ZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgICAgICBc Ci0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAg cmV0dXJuIHRydWU7Ci0gI2Vsc2UKLSAgIHJldHVybiBmYWxzZTsKLWRpZmYgLS1naXQgYS9qcy9z cmMvd2FzbS9XYXNtQ29kZWdlbkNvbnN0YW50cy5oIGIvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5D b25zdGFudHMuaAotaW5kZXggOWMxMGQzMDdhZTZmLi5lMjUzMzJiNTQ2NGUgMTAwNjQ0Ci0tLS0g YS9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlbkNvbnN0YW50cy5oCi0rKysgYi9qcy9zcmMvd2FzbS9X YXNtQ29kZWdlbkNvbnN0YW50cy5oCi1AQCAtNDMsNyArNDMsOCBAQCBzdGF0aWMgY29uc3QgdW5z aWduZWQgSW50ZXJwRmFpbEluc3RhbmNlUmVnID0gMHhiYWQ7Ci0gLy8gVGhlIGZvbGxvd2luZyB0 aHJlc2hvbGRzIHdlcmUgZGVyaXZlZCBmcm9tIGEgbWljcm9iZW5jaG1hcmsuIElmIHdlIGJlZ2lu IHRvCi0gLy8gc2hpcCB0aGlzIG9wdGltaXphdGlvbiBmb3IgbW9yZSBwbGF0Zm9ybXMsIHdlIHdp bGwgbmVlZCB0byBleHRlbmQgdGhpcyBsaXN0LgotIAotLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5f WDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgXAotKyAgICBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCi0gc3RhdGljIGNvbnN0IHVpbnQzMl90IE1heElubGluZU1lbW9yeUNv cHlMZW5ndGggPSA2NDsKLSBzdGF0aWMgY29uc3QgdWludDMyX3QgTWF4SW5saW5lTWVtb3J5Rmls bExlbmd0aCA9IDY0OwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpCi1kaWZmIC0tZ2l0 IGEvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtQ29k ZWdlblR5cGVzLmNwcAotaW5kZXggOGI5ZjMyNjM5ZWEzLi5lOTA2YzRhZmVjYzMgMTAwNjQ0Ci0t LS0gYS9qcy9zcmMvd2FzbS9XYXNtQ29kZWdlblR5cGVzLmNwcAotKysrIGIvanMvc3JjL3dhc20v V2FzbUNvZGVnZW5UeXBlcy5jcHAKLUBAIC0xNDQsMTQgKzE0NCwxNSBAQCB2b2lkIFRyYXBTaXRl c0ZvcktpbmQ6OmNoZWNrSW52YXJpYW50cyhjb25zdCB1aW50OF90KiBjb2RlQmFzZSkgY29uc3Qg ewotICAgICBsYXN0ID0gcGNPZmZzZXQ7Ci0gICB9Ci0gCi0tIyAgaWYgKGRlZmluZWQoSlNfQ09E RUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8ICAgXAotLSAgICAgICBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IFwKLS0g ICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpKQotKyMgIGlmIChkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fWDg2KSB8fCAgICAgICAgXAotKyAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgICAgXAotKyAgICAgICBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotKyAg ICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpKQotICAgLy8gQ2hlY2sgdGhhdCBlYWNoIHRy YXBzaXRlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBsYXVzaWJsZSBpbnN0cnVjdGlvbi4gIFRoZQot ICAgLy8gcmVxdWlyZWQgaW5zdHJ1Y3Rpb24ga2luZCBkZXBlbmRzIG9uIHRoZSB0cmFwc2l0ZSBr aW5kLgotICAgLy8KLS0gIC8vIE5PVEU6IGN1cnJlbnRseSBlbmFibGVkIG9uIHg4Nl97MzIsNjR9 LCBhcm17MzIsNjR9LCBsb29uZ3NvbjY0IGFuZCBtaXBzNjQuCi0tICAvLyBJZGVhbGx5IGl0IHNo b3VsZCBiZSBleHRlbmRlZCB0byByaXNjdjY0IHRvby4KLSsgIC8vIE5PVEU6IGN1cnJlbnRseSBl bmFibGVkIG9uIHg4Nl97MzIsNjR9LCBhcm17MzIsNjR9LCBsb29uZ3NvbjY0LCBtaXBzNjQsCi0r ICAvLyBhbmQgcHBjNjQuIElkZWFsbHkgaXQgc2hvdWxkIGJlIGV4dGVuZGVkIHRvIHJpc2N2NjQg dG9vLgotICAgLy8KLSAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGgoKTsgaSsrKSB7 Ci0gICAgIHVpbnQzMl90IHBjT2Zmc2V0ID0gcGNPZmZzZXRzX1tpXTsKLWRpZmYgLS1naXQgYS9q cy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAK LWluZGV4IDA1MWM2MGViYWE1NS4uODk0NDdhYTY2OGZmIDEwMDY0NAotLS0tIGEvanMvc3JjL3dh c20vV2FzbUNvbXBpbGUuY3BwCi0rKysgYi9qcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAKLUBA IC03MSw4ICs3MSw5IEBAIHVpbnQzMl90IHdhc206Ok9ic2VydmVkQ1BVRmVhdHVyZXMoKSB7Ci0g ICAgIEFSTTY0ID0gMHg2LAotICAgICBMT09ORzY0ID0gMHg3LAotICAgICBSSVNDVjY0ID0gMHg4 LAotKyAgICBQUEM2NCA9IDB4OSwKLSAKLS0gICAgTEFTVCA9IFJJU0NWNjQsCi0rICAgIExBU1Qg PSBQUEM2NCwKLSAgICAgQVJDSF9CSVRTID0gNAotICAgfTsKLSAKLUBAIC0xMDEsNiArMTAyLDkg QEAgdWludDMyX3Qgd2FzbTo6T2JzZXJ2ZWRDUFVGZWF0dXJlcygpIHsKLSAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAgIE1PWl9BU1NFUlQoaml0OjpHZXRSSVNDVjY0RmxhZ3Mo KSA8PSAoVUlOVDMyX01BWCA+PiBBUkNIX0JJVFMpKTsKLSAgIHJldHVybiBSSVNDVjY0IHwgKGpp dDo6R2V0UklTQ1Y2NEZsYWdzKCkgPDwgQVJDSF9CSVRTKTsKLSsjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0rICBNT1pfQVNTRVJUKGppdDo6R2V0UFBDNjRGbGFncygpIDw9IChVSU5U MzJfTUFYID4+IEFSQ0hfQklUUykpOwotKyAgcmV0dXJuIFBQQzY0IHwgKGppdDo6R2V0UFBDNjRG bGFncygpIDw8IEFSQ0hfQklUUyk7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gICByZXR1cm4gMDsKLSAjZWxzZQotZGlmZiAt LWdpdCBhL2pzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwIGIvanMvc3JjL3dhc20vV2FzbUZy YW1lSXRlci5jcHAKLWluZGV4IGIzYjI2NGJjNjI1YS4uYjU0MGFjZjlhMDVkIDEwMDY0NAotLS0t IGEvanMvc3JjL3dhc20vV2FzbUZyYW1lSXRlci5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21G cmFtZUl0ZXIuY3BwCi1AQCAtNjIyLDYgKzYyMiwxOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg UHVzaGVkRlAgPSAxNjsKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgU2V0RlAgPSAyMDsKLSBzdGF0 aWMgY29uc3QgdW5zaWduZWQgUG9wcGVkRlAgPSA0OwotIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQ b3BwZWRGUEppdEVudHJ5ID0gODsKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0r Ly8gcHVzaFJldHVybkFkZHJlc3MgPSBtZmxyKDQpICsgc3RkdSg0KSA9IDggYnl0ZXMuCi0rLy8g cHVzaChGUCkgPSBzdGR1KDQpID0gNCBieXRlcyAoUFBDNjQgc3RkdSBpcyBhIHNpbmdsZSBEUy1m b3JtIGluc3RydWN0aW9uKS4KLSsvLyBtb3ZlU3RhY2tQdHJUbyA9IG1yKDQpID0gNCBieXRlcy4K LStzdGF0aWMgY29uc3QgdW5zaWduZWQgUHVzaGVkUmV0QWRkciA9IDg7Ci0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIFB1c2hlZEZQID0gMTI7Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNldEZQID0g MTY7Ci0rLy8gQ2FsbGFibGUgKyBqaXQtZW50cnkgZXBpbG9ndWVzIGJldHdlZW4gcG9wcGVkRlAg YW5kICpyZXQgYXJlOgotKy8vICAgbXRsciByMDsgYWRkaSBzcCwgc3AsIDE2ICAodHdvIDQtYnl0 ZSBpbnN0cnVjdGlvbnMg4oCUIDggYnl0ZXMpLgotKy8vIG10bHIgbXVzdCBjb21lIGJlZm9yZSBh ZGRpIHNvIExSIGhvbGRzIHRoZSBjYWxsZXIncyBSQSB0aHJvdWdob3V0IHRoZQotKy8vIHBvc3Qt cG9wcGVkRlAgd2luZG93IChzaW5nbGUtc3RlcCBwcm9maWxpbmcgZmlyZXMgZXZlcnkgaW5zdHJ1 Y3Rpb24pLgotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQb3BwZWRGUCA9IDg7Ci0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIFBvcHBlZEZQSml0RW50cnkgPSA4OwotICNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9OT05FKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQotIC8vIFN5bnRoZXRpYyB2 YWx1ZXMgdG8gc2F0aXNmeSBhc3NlcnRzIGFuZCBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KLSBz dGF0aWMgY29uc3QgdW5zaWduZWQgUHVzaGVkUmV0QWRkciA9IDA7Ci1AQCAtNzEwLDYgKzcyMywx NyBAQCBzdGF0aWMgdm9pZCBHZW5lcmF0ZUNhbGxhYmxlUHJvbG9ndWUoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIHVpbnQzMl90KiBlbnRyeSkgewotICAgICBtYXNtLm1vdmVTdGFja1B0clRvKEZyYW1l UG9pbnRlcik7Ci0gICAgIE1PWl9BU1NFUlRfSUYoIW1hc20ub29tKCksIFNldEZQID09IG1hc20u Y3VycmVudE9mZnNldCgpIC0gKmVudHJ5KTsKLSAgIH0KLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fUFBDNjQpCi0rICB7Ci0rICAgICplbnRyeSA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKwot KyAgICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7Ci0rICAgIE1PWl9BU1NFUlRfSUYoIW1hc20u b29tKCksIFB1c2hlZFJldEFkZHIgPT0gbWFzbS5jdXJyZW50T2Zmc2V0KCkgLSAqZW50cnkpOwot KyAgICBtYXNtLnB1c2goRnJhbWVQb2ludGVyKTsKLSsgICAgTU9aX0FTU0VSVF9JRighbWFzbS5v b20oKSwgUHVzaGVkRlAgPT0gbWFzbS5jdXJyZW50T2Zmc2V0KCkgLSAqZW50cnkpOwotKyAgICBt YXNtLm1vdmVTdGFja1B0clRvKEZyYW1lUG9pbnRlcik7Ci0rICAgIE1PWl9BU1NFUlRfSUYoIW1h c20ub29tKCksIFNldEZQID09IG1hc20uY3VycmVudE9mZnNldCgpIC0gKmVudHJ5KTsKLSsgIH0K LSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0gICB7Ci0gICAgIC8vIFdlIGRvIG5v dCB1c2UgdGhlIFBzZXVkb1N0YWNrUG9pbnRlci4gIEhvd2V2ZXIsIHdlIG1heSBiZSBjYWxsZWQg aW4gYQotQEAgLTgwMyw2ICs4MjcsMzggQEAgc3RhdGljIHZvaWQgR2VuZXJhdGVDYWxsYWJsZUVw aWxvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCB1bnNpZ25lZCBmcmFtZVB1c2hlZCwKLSAgICAg bWFzbS5qYWxyKHplcm8sIHJhLCAwKTsKLSAgICAgbWFzbS5ub3AoKTsKLSAgIH0KLSsjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyBMb2FkIFJBIGFuZCBGUCBmcm9tIHRoZSBG cmFtZSB3aGlsZSBpdCdzIHN0aWxsIG9uIHRoZSBzdGFjay4KLSsgIC8vIFVzaW5nIHIwIChqczo6 aml0OjpyMCkgZm9yIFJBIGlzIHNhZmU6IGl0J3Mgdm9sYXRpbGUsIHVzZWQgYXMKLSsgIC8vIFJU IChub3QgYmFzZSksIGFuZCB3ZSdyZSBpbiBhbiBlcGlsb2d1ZSB3aGVyZSBpdCdzIG5vdCBsaXZl LgotKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBGcmFtZTo6cmV0dXJuQWRk cmVzc09mZnNldCgpKSwKLSsgICAgICAgICAgICAgICBqczo6aml0OjpyMCk7Ci0rICBtYXNtLmxv YWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIEZyYW1lOjpjYWxsZXJGUE9mZnNldCgpKSwgRnJh bWVQb2ludGVyKTsKLSsKLSsgIC8vIEZlbmNlIHRoZSBwb29sIEJFRk9SRSBjYXB0dXJpbmcgcG9w cGVkRlAuIFBvcHBlZEZQIGlzIGEgc3RhdGljIDgKLSsgIC8vIChtdGxyICsgYWRkaSk7IGVudGVy Tm9Qb29sIGl0c2VsZiBjYW4gZW1pdCBpbnNlcnROb3BGaWxsKCkgYW5kIGEKLSsgIC8vIHByZWVt cHRpdmUgZmluaXNoUG9vbCgpIGF0IGl0cyB0b3AgZWRnZSwgc28gYW55IGxlYWRpbmcgaW5zZXJ0 aW9ucwotKyAgLy8gbXVzdCBsYW5kIGJlZm9yZSBwb3BwZWRGUCDigJQgbm90IGJldHdlZW4gcG9w cGVkRlAgYW5kICpyZXQuIEEgcG9vbAotKyAgLy8gZmx1c2ggaW5zaWRlIHRoZSAyLWluc24gd2lu ZG93IHdvdWxkIG90aGVyd2lzZSBleHRlbmQgKnJldCAtIHBvcHBlZEZQCi0rICAvLyBhbmQgdHJp cCB0aGUgcG9zdC1jb25kaXRpb24gYXNzZXJ0aW9uIGJlbG93LiBQOSByb3V0ZXMgRlAgY29uc3Rh bnRzCi0rICAvLyB0aHJvdWdoIHRoZSBwb29sIHNvIGZsdXNoZXMgYXJlIG1vcmUgZnJlcXVlbnQg dGhhbiBvbiBQOCAodGhlCi0rICAvLyBhc3NlcnRpb24gd2FzIGhpc3RvcmljYWxseSBzaWxlbnQg b24gUDggYnV0IHJlcHJvZHVjaWJsZSBvbiBQOSBkYmdvcHQpLgotKyAgbWFzbS5lbnRlck5vUG9v bCgyKTsKLSsgIHBvcHBlZEZQID0gbWFzbS5jdXJyZW50T2Zmc2V0KCk7Ci0rCi0rICAvLyBNb3Zl IFJBIGludG8gTFIgQkVGT1JFIHBvcHBpbmcgdGhlIEZyYW1lLiBJZiB0aGUgb3JkZXIgd2VyZSBh ZGRpL210bHIsCi0rICAvLyBzaW5nbGUtc3RlcCBwcm9maWxpbmcgZmlyaW5nIGF0IHRoZSBtdGxy IGluc3RydWN0aW9uIHdvdWxkIHNlZTogc3AKLSsgIC8vIGFscmVhZHkgbW92ZWQgKHNvIHNhdmVk IFJBIGF0IHNwWzhdIGlzIGdvbmUpLCBhZGRpIGFscmVhZHkgZXhlY3V0ZWQsCi0rICAvLyBhbmQg TFIgc3RpbGwgaG9sZGluZyB0aGUgYWRkcmVzcyByaWdodCBhZnRlciB0aGUgZnVuY3Rpb24ncyBs YXN0IGBibGAKLSsgIC8vIChpLmUuIGluc2lkZSB0aGlzIGZ1bmN0aW9uLCBub3QgdGhlIGNhbGxl cidzIFJBKS4gV2l0aCBtdGxyIGZpcnN0LAotKyAgLy8gdGhlIGVudGlyZSBwb3N0LXBvcHBlZEZQ IHdpbmRvdyBoYXMgTFIgPT0gY2FsbGVyJ3MgUkEgYXZhaWxhYmxlCi0rICAvLyBlaXRoZXIgdmlh IHNwWzhdIChwcmUtYWRkaSkgb3IgcmVnaXN0ZXJzLmxyIChwb3N0LW10bHIpLgotKyAgbWFzbS54 c19tdGxyKGpzOjpqaXQ6OnIwKTsKLSsgIG1hc20uYWRkVG9TdGFja1B0cihJbW0zMihzaXplb2Yo RnJhbWUpKSk7Ci0rICAqcmV0ID0gbWFzbS5jdXJyZW50T2Zmc2V0KCk7Ci0rICBtYXNtLmxlYXZl Tm9Qb29sKCk7Ci0rICBtYXNtLmFzX2JscigpOwotKwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9BUk02NCkKLSAKLSAgIC8vIFNlZSBjb21tZW50IGF0IGVxdWl2YWxlbnQgcGxhY2UgaW4gfEdl bmVyYXRlQ2FsbGFibGVQcm9sb2d1ZXwgYWJvdmUuCi1AQCAtMTQ4Myw2ICsxNTM5LDkgQEAgdm9p ZCB3YXNtOjpHZW5lcmF0ZUppdEVudHJ5UHJvbG9ndWUoTWFjcm9Bc3NlbWJsZXImIG1hc20sCi0g ICAgIEJsb2NrVHJhbXBvbGluZVBvb2xTY29wZSBibG9ja190cmFtcG9saW5lX3Bvb2woJm1hc20s IDEwKTsKLSAgICAgb2Zmc2V0cy0+YmVnaW4gPSBtYXNtLmN1cnJlbnRPZmZzZXQoKTsKLSAgICAg bWFzbS5wdXNoKHJhKTsKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAgIG9m ZnNldHMtPmJlZ2luID0gbWFzbS5jdXJyZW50T2Zmc2V0KCk7Ci0rICAgIG1hc20ucHVzaFJldHVy bkFkZHJlc3MoKTsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0gICAgIHsKLSAg ICAgICBBdXRvRm9yYmlkUG9vbHNBbmROb3BzIGFmcCgmbWFzbSwKLUBAIC0xNTM2LDYgKzE1OTUs MjAgQEAgdm9pZCB3YXNtOjpHZW5lcmF0ZUppdEVudHJ5RXBpbG9ndWUoTWFjcm9Bc3NlbWJsZXIm IG1hc20sCi0gICAgIG1hc20uUmV0KEFSTVJlZ2lzdGVyKGxyLCA2NCkpOwotICAgICBtYXNtLnNl dEZyYW1lUHVzaGVkKDApOwotICAgfQotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSsgIC8vIExvYWQgUkEgYW5kIEZQIGZyb20gdGhlIGZyYW1lIHdoaWxlIGl0J3Mgc3RpbGwgb24g dGhlIHN0YWNrLCB0aGVuCi0rICAvLyByZXN0b3JlIExSLCBwb3AgdGhlIGZyYW1lLCBhbmQgcmV0 dXJuLiBtdGxyIG11c3QgcHJlY2VkZSBhZGRpIHNvIExSCi0rICAvLyBob2xkcyB0aGUgY2FsbGVy J3MgUkEgYWNyb3NzIHRoZSB3aG9sZSBwb3N0LXBvcHBlZEZQIHdpbmRvdyAoc2VlCi0rICAvLyBH ZW5lcmF0ZUNhbGxhYmxlRXBpbG9ndWUgZm9yIHRoZSBtYXRjaGluZyByYXRpb25hbGUpLgotKyAg bWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBGcmFtZTo6cmV0dXJuQWRkcmVzc09m ZnNldCgpKSwKLSsgICAgICAgICAgICAgICBqczo6aml0OjpyMCk7Ci0rICBtYXNtLmxvYWRQdHIo QWRkcmVzcyhTdGFja1BvaW50ZXIsIEZyYW1lOjpjYWxsZXJGUE9mZnNldCgpKSwgRnJhbWVQb2lu dGVyKTsKLSsgIHBvcHBlZEZQID0gbWFzbS5jdXJyZW50T2Zmc2V0KCk7Ci0rCi0rICBtYXNtLnhz X210bHIoanM6OmppdDo6cjApOwotKyAgbWFzbS5hZGRUb1N0YWNrUHRyKEltbTMyKHNpemVvZihG cmFtZSkpKTsKLSsgIG9mZnNldHMtPnJldCA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKyAgbWFz bS5hc19ibHIoKTsKLSAjZWxzZQotICAgLy8gRm9yYmlkIHBvb2xzIGZvciB0aGUgc2FtZSByZWFz b24gYXMgZGVzY3JpYmVkIGluIEdlbmVyYXRlQ2FsbGFibGVQcm9sb2d1ZS4KLSAjICBpZiBkZWZp bmVkKEpTX0NPREVHRU5fQVJNKQotQEAgLTE5MDUsNiArMTk3OCwyMiBAQCBib29sIGpzOjp3YXNt OjpTdGFydFVud2luZGluZyhjb25zdCBSZWdpc3RlclN0YXRlJiByZWdpc3RlcnMsCi0gICAgICAg ICBmaXhlZEZQID0gZnA7Ci0gICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoZml4ZWRQQywg Zml4ZWRGUCk7Ci0gICAgICAgfSBlbHNlCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotKyAgICAgIGlmIChjb2RlUmFuZ2UtPmlzVGh1bmsoKSkgewotKyAgICAgICAgLy8gVGhlIEZh ckp1bXBJc2xhbmQgc2VxdWVuY2UgdGVtcG9yYXJ5IHNjcmFtYmxlcyB0aGUgbGluayByZWdpc3Rl ci4KLSsgICAgICAgIGZpeGVkUEMgPSBwYzsKLSsgICAgICAgIGZpeGVkRlAgPSBmcDsKLSsgICAg ICAgICp1bndvdW5kQ2FsbGVyID0gZmFsc2U7Ci0rICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNp dGUoCi0rICAgICAgICAgICAgRnJhbWU6OmZyb21VbnRhZ2dlZFdhc21FeGl0RlAoZnApLT5yZXR1 cm5BZGRyZXNzKCksCi0rICAgICAgICAgICAgRnJhbWU6OmZyb21VbnRhZ2dlZFdhc21FeGl0RlAo ZnApLT5yYXdDYWxsZXIoKSk7Ci0rICAgICAgfSBlbHNlIGlmIChvZmZzZXRGcm9tRW50cnkgPCBQ dXNoZWRGUCkgewotKyAgICAgICAgLy8gT24gUFBDNjQgdGhlIHJldHVybiBhZGRyZXNzIGlzIGlu IExSIChyZWdpc3RlcnMubHIpIHVudGlsCi0rICAgICAgICAvLyBwdXNoUmV0dXJuQWRkcmVzcygp IHNhdmVzIGl0IHRvIHRoZSBzdGFjay4KLSsgICAgICAgIGZpeGVkUEMgPSAodWludDhfdCopcmVn aXN0ZXJzLmxyOwotKyAgICAgICAgZml4ZWRGUCA9IGZwOwotKyAgICAgICAgQXNzZXJ0TWF0Y2hl c0NhbGxTaXRlKGZpeGVkUEMsIGZpeGVkRlApOwotKyAgICAgIH0gZWxzZQotICNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9BUk02NCkKLSAgICAgICBpZiAob2Zmc2V0RnJvbUVudHJ5IDwgU2V0RlAg fHwgY29kZVJhbmdlLT5pc1RodW5rKCkpIHsKLSAgICAgICAgIC8vIE9uIEFSTTY0IHdlIHJlbHkg b24gcmVnaXN0ZXIgc3RhdGUgaW5zdGVhZCBvZiBzdGF0ZSBzYXZlZCBvbgotQEAgLTE5NTYsNiAr MjA0NSwzNSBAQCBib29sIGpzOjp3YXNtOjpTdGFydFVud2luZGluZyhjb25zdCBSZWdpc3RlclN0 YXRlJiByZWdpc3RlcnMsCi0gICAgICAgICBmaXhlZFBDID0gRnJhbWU6OmZyb21VbnRhZ2dlZFdh c21FeGl0RlAoc3ApLT5yZXR1cm5BZGRyZXNzKCk7Ci0gICAgICAgICBmaXhlZEZQID0gZnA7Ci0g ICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoZml4ZWRQQywgZml4ZWRGUCk7Ci0rI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgICAgIH0gZWxzZSBpZiAob2Zmc2V0SW5Db2Rl ID49IGNvZGVSYW5nZS0+cmV0KCkgLSBQb3BwZWRGUCAmJgotKyAgICAgICAgICAgICAgICAgb2Zm c2V0SW5Db2RlIDwgY29kZVJhbmdlLT5yZXQoKSkgewotKyAgICAgICAgLy8gUFBDNjQgZXBpbG9n dWUgKFJBIGxvYWRlZCBpbnRvIHIwLCBGUCByZXN0b3JlZCwgUkEgbm90IHlldAotKyAgICAgICAg Ly8gbW92ZWQgdG8gTFIsIFNQIG5vdCB5ZXQgYWRqdXN0ZWQpOgotKyAgICAgICAgLy8gICBsZCBy MCwgOChzcCkgICAgICA7IHJlc3RvcmUgY2FsbGVyJ3MgUkEgaW50byByMAotKyAgICAgICAgLy8g ICBsZCBGUCwgMChzcCkgICAgICA7IHJlc3RvcmUgY2FsbGVyJ3MgRlAKLSsgICAgICAgIC8vICAg PC0tIHBvcHBlZEZQIC0tPgotKyAgICAgICAgLy8gICBtdGxyIHIwICAgICAgICAgICA7IExSIDo9 IGNhbGxlcidzIFJBCi0rICAgICAgICAvLyAgIGFkZGkgc3AsIHNwLCAxNiAgIDsgcG9wIHRoZSBG cmFtZQotKyAgICAgICAgLy8gICA8LS0gcmV0IC0tPgotKyAgICAgICAgLy8gICBibHIKLSsgICAg ICAgIC8vIEluIHRoZSBbcG9wcGVkRlAsIHJldCkgd2luZG93IHRoZSBhZGRpIGhhcyBub3QgcnVu LCBzbyAqc3AKLSsgICAgICAgIC8vIGlzIHN0aWxsIHRoZSBzYXZlZCBGcmFtZSBhbmQgc3BbOF0g aXMgdGhlIGNhbGxlcidzIFJBLgotKyAgICAgICAgLy8gKHJlZ2lzdGVycy5sciB3b3VsZCBhbHNv IGJlIGNvcnJlY3QgYWZ0ZXIgbXRsciBleGVjdXRlcywgYnV0Ci0rICAgICAgICAvLyBzcFs4XSBp cyB2YWxpZCB0aHJvdWdob3V0IHRoaXMgd2luZG93IOKAlCBpbmNsdWRpbmcgYmVmb3JlIG10bHIg 4oCUCi0rICAgICAgICAvLyBzbyB3ZSByZWFkIGl0IGNvbnNpc3RlbnRseS4pCi0rICAgICAgICBN T1pfQVNTRVJUKCpzcCA9PSBmcCk7Ci0rICAgICAgICBmaXhlZFBDID0gRnJhbWU6OmZyb21VbnRh Z2dlZFdhc21FeGl0RlAoc3ApLT5yZXR1cm5BZGRyZXNzKCk7Ci0rICAgICAgICBmaXhlZEZQID0g ZnA7Ci0rICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoZml4ZWRQQywgZml4ZWRGUCk7Ci0r ICAgICAgfSBlbHNlIGlmIChvZmZzZXRJbkNvZGUgPT0gY29kZVJhbmdlLT5yZXQoKSkgewotKyAg ICAgICAgLy8gUFBDNjQgZXBpbG9ndWUsIGF0IHRoZSBibHI6IGFkZGkgaGFzIHJ1biwgc28gU1Ag aXMgdGhlCi0rICAgICAgICAvLyBjYWxsZXIncyBhbmQgKnNwIGlzIHVucmVsYXRlZCBtZW1vcnku IG10bHIgcmFuIGVhcmxpZXIgaW4KLSsgICAgICAgIC8vIHRoZSBbcG9wcGVkRlAsIHJldCkgd2lu ZG93LCBzbyBMUiBob2xkcyB0aGUgY2FsbGVyJ3MgUkEuCi0rICAgICAgICAvLyBmcCBob2xkcyB0 aGUgcmVzdG9yZWQgY2FsbGVyJ3MgRlAuCi0rICAgICAgICBmaXhlZFBDID0gKHVpbnQ4X3QqKXJl Z2lzdGVycy5scjsKLSsgICAgICAgIGZpeGVkRlAgPSBmcDsKLSsgICAgICAgIEFzc2VydE1hdGNo ZXNDYWxsU2l0ZShmaXhlZFBDLCBmaXhlZEZQKTsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f QVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KQotICAgICAgICAgLy8gVGhlIHN0 YWNrIHBvaW50ZXIgZG9lcyBub3QgbW92ZSB1bnRpbCBhbGwgdmFsdWVzIGhhdmUKLSAgICAgICAg IC8vIGJlZW4gcmVzdG9yZWQgc28gc2V2ZXJhbCBjYXNlcyBjYW4gYmUgY29hbGVzY2VkIGhlcmUu Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUdDLmNwcCBiL2pzL3NyYy93YXNtL1dhc21H Qy5jcHAKLWluZGV4IGU1OWNkNGY1YWJhMC4uMjFjZDAxZmQxYzVlIDEwMDY0NAotLS0tIGEvanMv c3JjL3dhc20vV2FzbUdDLmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbUdDLmNwcAotQEAgLTQ0 NCw2ICs0NDQsMTQgQEAgYm9vbCB3YXNtOjpJc1BsYXVzaWJsZVN0YWNrTWFwS2V5KGNvbnN0IHVp bnQ4X3QqIG5leHRQQykgewotICAgICAgICAgICAgIGluc25bLTFdID09IDB4MDAwMDAwMTMgLyog YWRkaSB6ZXJvLCB6ZXJvLCAwICovKSB8fCAgLy8gamFsOyBub3AKLSAgICAgICAgICAgIChpbnNu Wy0xXSA9PSAweDAwMTAwMDczICYmCi0gICAgICAgICAgICAgKGluc25bLTJdICYga0lUeXBlTWFz aykgPT0gUk9fQ1NSUldJKSkpOyAgLy8gd2FzbSB0cmFwCi0rIyAgZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0rICBjb25zdCB1aW50MzJfdCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8 Y29uc3QgdWludDMyX3QqPihuZXh0UEMpOwotKyAgTU9aX0FTU0VSVCgodWludHB0cl90KGluc24p ICYgMykgPT0gMCk7Ci0rICAvLyB4c190cmFwKCkgPSB0dyAzMSxyMCxyMCAoUFBDX3RyYXApOyBi Y3RybCA9IFBQQ19iY3RyfDE7IGJsID0gSS1mb3JtCi0rICAvLyBvcGNvZGUgMTggKFBQQ19iKSB3 aXRoIExLPTEsIEFBPTAsIGNoZWNrZWQgdmlhIDB4RkMwMDAwMDMgbWFzay4KLSsgIHJldHVybiBp bnNuWy0xXSA9PSB1aW50MzJfdChQUENfdHJhcCkgfHwKLSsgICAgICAgICBpbnNuWy0xXSA9PSAo dWludDMyX3QoUFBDX2JjdHIpIHwgMXUpIHx8Ci0rICAgICAgICAgKGluc25bLTFdICYgMHhGQzAw MDAwM3UpID09ICh1aW50MzJfdChQUENfYikgfCAxdSk7Ci0gIyAgZWxzZQotICAgTU9aX0NSQVNI KCJJc1ZhbGlkU3RhY2tNYXBLZXk6IHJlcXVpcmVzIGltcGxlbWVudGF0aW9uIG9uIHRoaXMgcGxh dGZvcm0iKTsKLSAjICBlbmRpZgotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21HZW5lcmF0 b3IuY3BwIGIvanMvc3JjL3dhc20vV2FzbUdlbmVyYXRvci5jcHAKLWluZGV4IDJkYWZhYzczZTk2 YS4uMDdmZmUxNTBmYzU3IDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbUdlbmVyYXRvci5j cHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwCi1AQCAtOTMwLDcgKzkzMCwy MyBAQCBib29sIE1vZHVsZUdlbmVyYXRvcjo6ZmluaXNoQ29kZUJsb2NrKENvZGVCbG9ja1Jlc3Vs dCogcmVzdWx0KSB7Ci0gICBjYWxsU2l0ZVRhcmdldHNfLmNsZWFyKCk7Ci0gICBjYWxsRmFySnVt cHNfLmNsZWFyKCk7Ci0gCi0tICAvLyBOb25lIG9mIHRoZSBsaW5raW5nIG9yIGZhci1qdW1wIG9w ZXJhdGlvbnMgc2hvdWxkIGVtaXQgbWFzbSBtZXRhZGF0YS4KLSsgIC8vIE5vbmUgb2YgdGhlIGxp bmtpbmcgb3IgZmFyLWp1bXAgb3BlcmF0aW9ucyBzaG91bGQgZW1pdCBtYXNtIG1ldGFkYXRhLAot KyAgLy8gZXhjZXB0IG9uIFBQQzY0IHdoZXJlIHBhdGNoRmFySnVtcCB1c2VzIGFkZExvbmdKdW1w IHRvIGNyZWF0ZSBDb2RlTGFiZWxzCi0rICAvLyBmb3IgYWJzb2x1dGUtYWRkcmVzcyBmYXIganVt cHMuIERyYWluIHRob3NlIGludG8gbGlua0RhdGFfIGhlcmUuCi0rI2lmZGVmIEpTX0NPREVHRU5f UFBDNjQKLSsgIGZvciAoY29uc3Qgaml0OjpDb2RlTGFiZWwmIGNvZGVMYWJlbCA6IG1hc21fLT5j b2RlTGFiZWxzKCkpIHsKLSsgICAgTGlua0RhdGE6OkludGVybmFsTGluayBsaW5rOwotKyAgICBs aW5rLnBhdGNoQXRPZmZzZXQgPSBjb2RlTGFiZWwucGF0Y2hBdCgpLm9mZnNldCgpOwotKyAgICBs aW5rLnRhcmdldE9mZnNldCA9IGNvZGVMYWJlbC50YXJnZXQoKS5vZmZzZXQoKTsKLSsjICBpZmRl ZiBKU19DT0RFTEFCRUxfTElOS01PREUKLSsgICAgbGluay5tb2RlID0gY29kZUxhYmVsLmxpbmtN b2RlKCk7Ci0rIyAgZW5kaWYKLSsgICAgaWYgKCFsaW5rRGF0YV8tPmludGVybmFsTGlua3MuYXBw ZW5kKGxpbmspKSB7Ci0rICAgICAgcmV0dXJuIGZhbHNlOwotKyAgICB9Ci0rICB9Ci0rICBtYXNt Xy0+Y29kZUxhYmVscygpLmNsZWFyKCk7Ci0rI2VuZGlmCi0gCi0gICBNT1pfQVNTRVJUKG1hc21f LT5pbmxpbmluZ0NvbnRleHQoKS5lbXB0eSgpKTsKLSAgIE1PWl9BU1NFUlQobWFzbV8tPmNhbGxT aXRlcygpLmVtcHR5KCkpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21Jb25Db21waWxl LmNwcCBiL2pzL3NyYy93YXNtL1dhc21Jb25Db21waWxlLmNwcAotaW5kZXggOWM3OWI5Y2YwNzA0 Li4wZDBlNjYxNzcwYWYgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5j cHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21Jb25Db21waWxlLmNwcAotQEAgLTExNjAyLDcgKzEx NjAyLDcgQEAgYm9vbCBqczo6d2FzbTo6SW9uUGxhdGZvcm1TdXBwb3J0KCkgewotICNpZiBkZWZp bmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAgICAgICBc Ci0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBT NjQpIHx8ICAgIFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK LSsgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9Q UEM2NCkKLSAgIHJldHVybiB0cnVlOwotICNlbHNlCi0gICByZXR1cm4gZmFsc2U7Ci1kaWZmIC0t Z2l0IGEvanMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtTWVtb3J5 LmNwcAotaW5kZXggMGUzZTZkMzUwOWFkLi5mZWVlOWY2ZWExYzkgMTAwNjQ0Ci0tLS0gYS9qcy9z cmMvd2FzbS9XYXNtTWVtb3J5LmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAK LUBAIC0yODgsOSArMjg4LDkgQEAgc3RhdGljX2Fzc2VydChNYXhNZW1vcnlBY2Nlc3NTaXplIDw9 IEh1Z2VVbmFsaWduZWRHdWFyZFBhZ2UsCi0gc3RhdGljX2Fzc2VydChIdWdlT2Zmc2V0R3VhcmRM aW1pdCA8IFVJTlQzMl9NQVgsCi0gICAgICAgICAgICAgICAiY2hlY2tpbmcgZm9yIG92ZXJmbG93 IGFnYWluc3QgT2Zmc2V0R3VhcmRMaW1pdCBpcyBlbm91Z2guIik7Ci0gCi0tLy8gV2UgaGF2ZSBv bmx5IHRlc3RlZCBodWdlIG1lbW9yeSBvbiB4NjQsIGFybTY0IGFuZCByaXNjdjY0LgotKy8vIFdl IGhhdmUgb25seSB0ZXN0ZWQgaHVnZSBtZW1vcnkgb24geDY0LCBhcm02NCwgcmlzY3Y2NCBhbmQg cHBjNjQuCi0gIyAgaWYgIShkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fQVJNNjQpIHx8IFwKLS0gICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSkK LSsgICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fUFBDNjQpKQotICMgICAgZXJyb3IgIk5vdCBhbiBleHBlY3RlZCBjb25maWd1cmF0aW9uIgot ICMgIGVuZGlmCi0gCi1kaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbVNpZ25hbEhhbmRsZXJz LmNwcCBiL2pzL3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAKLWluZGV4IGNjOGJjMjc1 NTc0NS4uODRkM2M0ZWMxNjRkIDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbVNpZ25hbEhh bmRsZXJzLmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbVNpZ25hbEhhbmRsZXJzLmNwcAotQEAg LTExMSw3ICsxMTEsOSBAQCB1c2luZyBuYW1lc3BhY2UganM6Ondhc207Ci0gIyAgICBpZiBkZWZp bmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX1BQQzY0X18pIHx8IGRlZmluZWQoX19wcGM2NGxl X18pIHx8IFwKLSAgICAgICAgIGRlZmluZWQoX19QUEM2NExFX18pCi0gIyAgICAgIGRlZmluZSBS MDFfc2lnKHApICgocCktPnNjX2ZyYW1lLmZpeHJlZ1sxXSkKLSsjICAgICAgZGVmaW5lIFIzMV9z aWcocCkgKChwKS0+c2NfZnJhbWUuZml4cmVnWzMxXSkKLSAjICAgICAgZGVmaW5lIFIzMl9zaWco cCkgKChwKS0+c2NfZnJhbWUuc3JyMCkKLSsjICAgICAgZGVmaW5lIFIzNl9zaWcocCkgKChwKS0+ c2NfZnJhbWUubHIpCi0gIyAgICBlbmRpZgotICMgIGVsaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8 IGRlZmluZWQoX19zdW4pCi0gIyAgICBpZiBkZWZpbmVkKF9fbGludXhfXykKLUBAIC0xNTcsNyAr MTU5LDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNtOwotICMgICAgaWYgZGVmaW5lZChfX2xp bnV4X18pICYmIChkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX1BQQzY0X18pIHx8IFwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZChfX3BwYzY0bGVfXykgfHwg ZGVmaW5lZChfX1BQQzY0TEVfXykpCi0gIyAgICAgIGRlZmluZSBSMDFfc2lnKHApICgocCktPnVj X21jb250ZXh0LmdwX3JlZ3NbMV0pCi0rIyAgICAgIGRlZmluZSBSMzFfc2lnKHApICgocCktPnVj X21jb250ZXh0LmdwX3JlZ3NbMzFdKQotICMgICAgICBkZWZpbmUgUjMyX3NpZyhwKSAoKHApLT51 Y19tY29udGV4dC5ncF9yZWdzWzMyXSkKLSsjICAgICAgZGVmaW5lIFIzNl9zaWcocCkgKChwKS0+ dWNfbWNvbnRleHQuZ3BfcmVnc1szNl0pCi0gIyAgICBlbmRpZgotICMgICAgaWYgZGVmaW5lZChf X2xpbnV4X18pICYmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKLSAjICAgICAgZGVmaW5lIEVQQ19z aWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19wYykKLUBAIC0yMDAsNyArMjA0LDkgQEAgdXNpbmcg bmFtZXNwYWNlIGpzOjp3YXNtOwotICMgICAgaWYgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmlu ZWQoX19QUEM2NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRsZV9fKSB8fCBcCi0gICAgICAgICBkZWZp bmVkKF9fUFBDNjRMRV9fKQotICMgICAgICBkZWZpbmUgUjAxX3NpZyhwKSAoKHApLT51Y19tY29u dGV4dC5fX2dyZWdzW19SRUdfUjFdKQotKyMgICAgICBkZWZpbmUgUjMxX3NpZyhwKSAoKHApLT51 Y19tY29udGV4dC5fX2dyZWdzW19SRUdfUjMxXSkKLSAjICAgICAgZGVmaW5lIFIzMl9zaWcocCkg KChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tfUkVHX1BDXSkKLSsjICAgICAgZGVmaW5lIFIzNl9z aWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tfUkVHX0xSXSkKLSAjICAgIGVuZGlmCi0g IyAgZWxpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8 IFwKLSAgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKLUBAIC0yMzQsNyArMjQwLDkg QEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNtOwotICMgICAgaWYgZGVmaW5lZChfX0ZyZWVCU0Rf XykgJiYgKGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykgfHwgXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoX19wcGM2NGxlX18pIHx8IGRl ZmluZWQoX19QUEM2NExFX18pKQotICMgICAgICBkZWZpbmUgUjAxX3NpZyhwKSAoKHApLT51Y19t Y29udGV4dC5tY19ncHJbMV0pCi0rIyAgICAgIGRlZmluZSBSMzFfc2lnKHApICgocCktPnVjX21j b250ZXh0Lm1jX2dwclszMV0pCi0gIyAgICAgIGRlZmluZSBSMzJfc2lnKHApICgocCktPnVjX21j b250ZXh0Lm1jX3NycjApCi0rIyAgICAgIGRlZmluZSBSMzZfc2lnKHApICgocCktPnVjX21jb250 ZXh0Lm1jX2xyKQotICMgICAgZW5kaWYKLSAjICBlbGlmIGRlZmluZWQoWFBfREFSV0lOKQotICMg ICAgZGVmaW5lIEVJUF9zaWcocCkgKChwKS0+dGhyZWFkLnV0cy50czMyLl9fZWlwKQotQEAgLTQx Miw3ICs0MjAsOCBAQCBzdHJ1Y3QgbWFjb3NfYWFyY2g2NF9jb250ZXh0IHsKLSAgICAgICBkZWZp bmVkKF9fUFBDNjRMRV9fKQotICMgICAgZGVmaW5lIFBDX3NpZyhwKSBSMzJfc2lnKHApCi0gIyAg ICBkZWZpbmUgU1Bfc2lnKHApIFIwMV9zaWcocCkKLS0jICAgIGRlZmluZSBGUF9zaWcocCkgUjAx X3NpZyhwKQotKyMgICAgZGVmaW5lIEZQX3NpZyhwKSBSMzFfc2lnKHApCi0rIyAgICBkZWZpbmUg TFJfc2lnKHApIFIzNl9zaWcocCkKLSAjICBlbGlmIGRlZmluZWQoX19sb29uZ2FyY2hfXykKLSAj ICAgIGRlZmluZSBQQ19zaWcocCkgRVBDX3NpZyhwKQotICMgICAgZGVmaW5lIEZQX3NpZyhwKSBS RlBfc2lnKHApCi1AQCAtNDU4LDcgKzQ2Nyw4IEBAIHN0YXRpYyB1aW50OF90KiBDb250ZXh0VG9T UChDT05URVhUKiBjb250ZXh0KSB7Ci0gfQotIAotICMgIGlmIGRlZmluZWQoX19hcm1fXykgfHwg ZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgXAotLSAgICAgIGRl ZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChfX3Jpc2N2KQotKyAgICAgIGRlZmluZWQo X19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChfX3Jpc2N2KSB8fCBcCi0rICAgICAgZGVmaW5lZChf X3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKQotIHN0YXRpYyB1aW50OF90KiBDb250ZXh0 VG9MUihDT05URVhUKiBjb250ZXh0KSB7Ci0gIyAgICBpZmRlZiBMUl9zaWcKLSAgIHJldHVybiBt b3ppbGxhOjpCaXR3aXNlQ2FzdDx1aW50OF90Kj4oTFJfc2lnKGNvbnRleHQpKTsKLUBAIC00NzUs NyArNDg1LDggQEAgc3RhdGljIEpTOjpQcm9maWxpbmdGcmFtZUl0ZXJhdG9yOjpSZWdpc3RlclN0 YXRlIFRvUmVnaXN0ZXJTdGF0ZSgKLSAgIHN0YXRlLnBjID0gQ29udGV4dFRvUEMoY29udGV4dCk7 Ci0gICBzdGF0ZS5zcCA9IENvbnRleHRUb1NQKGNvbnRleHQpOwotICMgIGlmIGRlZmluZWQoX19h cm1fXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgXAot LSAgICAgIGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChfX3Jpc2N2KQotKyAgICAg IGRlZmluZWQoX19sb29uZ2FyY2hfXykgfHwgZGVmaW5lZChfX3Jpc2N2KSB8fCBcCi0rICAgICAg ZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKQotICAgc3RhdGUubHIgPSBD b250ZXh0VG9MUihjb250ZXh0KTsKLSAjICBlbHNlCi0gICBzdGF0ZS5sciA9ICh2b2lkKilVSU5U UFRSX01BWDsKLUBAIC03NzYsNiArNzg3LDkgQEAgc3RhdGljIHZvaWQgTWFjaEV4Y2VwdGlvbkhh bmRsZXJUaHJlYWQoKSB7Ci0gCi0gIyAgICBpZiBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVk KF9fbG9vbmdhcmNoX18pCi0gc3RhdGljIGNvbnN0IHVpbnQzMl90IGtXYXNtVHJhcFNpZ25hbCA9 IFNJR0ZQRTsKLSsjICAgIGVsaWYgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2 NF9fKSB8fCBcIAotKyAgICAgICAgICBkZWZpbmVkKF9fcHBjNjRsZV9fKSB8fCBkZWZpbmVkKF9f UFBDNjRMRV9fKQotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrV2FzbVRyYXBTaWduYWwgPSBTSUdU UkFQOwotICMgICAgZWxzZQotIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrV2FzbVRyYXBTaWduYWwg PSBTSUdJTEw7Ci0gIyAgICBlbmRpZgotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21TdGFj a3MuY3BwIGIvanMvc3JjL3dhc20vV2FzbVN0YWNrcy5jcHAKLWluZGV4IDcxNDk3MzUzYzVjMS4u NjUxNGQ4YjBlMmU0IDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbVN0YWNrcy5jcHAKLSsr KyBiL2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwCi1AQCAtNDI2LDYgKzQyNiwzMCBAQCBzdGF0 aWMgY29uc3RleHByIHNpemVfdCBDb250U3RhY2tNYXhKaXRTdGFja1NpemUgPSAxMCAqIDEwMjQg KiAxMDI0OwotIC8vIG9yIHN0YWNrIHNuYXBzaG90cyB1dGlsaXRpZXMuCi0gc3RhdGljIGNvbnN0 ZXhwciBzaXplX3QgQ29udFN0YWNrUmVkWm9uZVNpemUgPSAweDgwMDA7Ci0gCi0rLy8gRWZmZWN0 aXZlIHJlZC16b25lIHNpemUgdXNlZCB3aGVuIGxheWluZyBvdXQgYSBjb250aW51YXRpb24gc3Rh Y2suCi0rLy8KLSsvLyBUaGUgaml0IHN0YWNrIChhbmQgdGhlcmVmb3JlIHRoZSBib3R0b20gZ3Vh cmQgcGFnZSkgbXVzdCBzdGFydCBvbiBhIHBhZ2UKLSsvLyBib3VuZGFyeTsgb3RoZXJ3aXNlIGdj OjpQcm90ZWN0UGFnZXMgdHJpcHMgTU9aX1JFTEVBU0VfQVNTRVJUKGxlbmd0aCAlCi0rLy8gcGFn ZVNpemUgPT0gMCkuIFRoZSByZWQgem9uZSBzaXRzIGJldHdlZW4gdGhlIHRvcCBndWFyZCBwYWdl IGFuZCB0aGUgaml0Ci0rLy8gc3RhY2ssIHNvIGl0cyBzaXplIGhhcyB0byBiZSBhIHBhZ2UgbXVs dGlwbGUgdG8ga2VlcCB0aGF0IHN0YXJ0IGFsaWduZWQuCi0rLy8KLSsvLyBSb3VuZGluZyB0aGUg cmVkIHpvbmUgdXAgdG8gYSBwYWdlIGlzIGNvcnJlY3Qgb24gZXZlcnkgcGxhdGZvcm0gYW5kIHdv dWxkCi0rLy8gYWxzbyBjb3ZlciBhbnkgY29uZmlndXJhdGlvbiB3aG9zZSBwYWdlIHNpemUgZXhj ZWVkcyBDb250U3RhY2tSZWRab25lU2l6ZQotKy8vICgzMkspIC0tIGUuZy4gYSA2NEstcGFnZSBB QXJjaDY0IGtlcm5lbCAtLSBidXQgQ29udFN0YWNrUmVkWm9uZVNpemUgaXMKLSsvLyBhbHJlYWR5 IGEgbXVsdGlwbGUgb2YgdGhlIDRLLzE2SyBwYWdlcyB1c2VkIG9uIHRoZSB0aWVyLTEgcGxhdGZv cm1zLCBzbyB0aGUKLSsvLyByb3VuZC11cCBpcyBhIG5vLW9wIHRoZXJlIHRvZGF5LiBXZSBkZWxp YmVyYXRlbHkgZ2F0ZSBpdCB0byBQUEM2NCAoNjRLCi0rLy8gcGFnZXMsIHdoZXJlIHRoZSByb3Vu ZC11cCBpcyBsb2FkLWJlYXJpbmcpIHNvIHRoaXMgcGF0Y2ggY2Fubm90IGFsdGVyCi0rLy8gY29u dGludWF0aW9uIHN0YWNrIGxheW91dCBvbiBhbnkgdGllci0xIHBsYXRmb3JtLiBEcm9wIHRoZSBn YXRlIGlmIHRoZQotKy8vIGdlbmVyYWwgY2FzZSBpcyBldmVyIHdhbnRlZC4KLStzdGF0aWMgaW5s aW5lIHNpemVfdCBDb250U3RhY2tFZmZlY3RpdmVSZWRab25lU2l6ZSgKLSsgICAgW1ttYXliZV91 bnVzZWRdXSBzaXplX3QgcGFnZVNpemUpIHsKLSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAg cmV0dXJuIFJvdW5kVXAoQ29udFN0YWNrUmVkWm9uZVNpemUsIHBhZ2VTaXplKTsKLSsjZWxzZQot KyAgcmV0dXJuIENvbnRTdGFja1JlZFpvbmVTaXplOwotKyNlbmRpZgotK30KLSsKLSAvLyBOdW1i ZXIgb2YgZ3VhcmQgcGFnZXMgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVhY2ggY29udGludWF0 aW9uIHN0YWNrIHNsb3QuCi0gc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQ29udFN0YWNrVG9wR3Vh cmRQYWdlcyA9IDE7Ci0gc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQ29udFN0YWNrQm90dG9tR3Vh cmRQYWdlcyA9IDE7Ci1AQCAtNDQ0LDggKzQ2OCw4IEBAIHZvaWQgQ29udFN0YWNrU2l6ZTo6Y29t cHV0ZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udFN0YWNrTWluSml0U3RhY2tT aXplLCBDb250U3RhY2tNYXhKaXRTdGFja1NpemUpLAotICAgICAgICAgICAgICAgcGFnZVNpemUp OwotICAgaGVhZGVyU2l6ZSA9IFJvdW5kVXAoc2l6ZW9mKENvbnRTdGFjayksIHBhZ2VTaXplKTsK LS0gIHRvdGFsU2l6ZSA9IHRvcEd1YXJkU2l6ZSArIENvbnRTdGFja1JlZFpvbmVTaXplICsgaml0 U3RhY2tTaXplICsKLS0gICAgICAgICAgICAgIGJvdHRvbUd1YXJkU2l6ZSArIGhlYWRlclNpemU7 Ci0rICB0b3RhbFNpemUgPSB0b3BHdWFyZFNpemUgKyBDb250U3RhY2tFZmZlY3RpdmVSZWRab25l U2l6ZShwYWdlU2l6ZSkgKwotKyAgICAgICAgICAgICAgaml0U3RhY2tTaXplICsgYm90dG9tR3Vh cmRTaXplICsgaGVhZGVyU2l6ZTsKLSAKLSAgIC8vIEFzc2VydCB3ZSBjYW4ndCBvdmVyZmxvdyB3 aGVuIG11bHRpcGx5aW5nIG91ciBzaXplIGJ5IGNhcGFjaXR5LiBBc3N1bWUKLSAgIC8vIDMyLWJp dCBpbnRlZ2VycyB0byBiZSBjb25zZXJ2YXRpdmUuCi1AQCAtNDY3LDcgKzQ5MSw4IEBAIHZvaWQg Q29udFN0YWNrOjppbml0KENvbnRTdGFja0FyZW5hKiBhcmVuYSwgdWludHB0cl90IGFsbG9jYXRp b25CYXNlLAotICAgdWludHB0cl90IHRvcEd1YXJkUGFnZVBoeXNpY2FsU3RhcnQgPSBhbGxvY2F0 aW9uQmFzZTsKLSAgIHVpbnRwdHJfdCB0b3BHdWFyZFBhZ2VQaHlzaWNhbEVuZCA9IGFsbG9jYXRp b25CYXNlICsgdG9wR3VhcmRQYWdlU2l6ZTsKLSAgIHVpbnRwdHJfdCByZWRab25lUGh5c2ljYWxT dGFydCA9IHRvcEd1YXJkUGFnZVBoeXNpY2FsRW5kOwotLSAgdWludHB0cl90IGppdFN0YWNrUGh5 c2ljYWxTdGFydCA9IHJlZFpvbmVQaHlzaWNhbFN0YXJ0ICsgQ29udFN0YWNrUmVkWm9uZVNpemU7 Ci0rICB1aW50cHRyX3Qgaml0U3RhY2tQaHlzaWNhbFN0YXJ0ID0KLSsgICAgICByZWRab25lUGh5 c2ljYWxTdGFydCArIENvbnRTdGFja0VmZmVjdGl2ZVJlZFpvbmVTaXplKHBhZ2VTaXplKTsKLSAg IHVpbnRwdHJfdCBqaXRTdGFja1BoeXNpY2FsRW5kID0gaml0U3RhY2tQaHlzaWNhbFN0YXJ0ICsg aml0U3RhY2tTaXplOwotICAgdWludHB0cl90IGJvdHRvbUd1YXJkUGFnZVBoeXNpY2FsU3RhcnQg PSBqaXRTdGFja1BoeXNpY2FsRW5kOwotICAgdWludHB0cl90IGhlYWRlclBoeXNpY2FsU3RhcnQg PQotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21TdHVicy5jcHAgYi9qcy9zcmMvd2FzbS9X YXNtU3R1YnMuY3BwCi1pbmRleCA4YTk4ZTIwMWE0NTIuLjg0OTc4MTRmY2QzNyAxMDA2NDQKLS0t LSBhL2pzL3NyYy93YXNtL1dhc21TdHVicy5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21TdHVi cy5jcHAKLUBAIC02NDYsOCArNjQ2LDkgQEAgc3RhdGljIGJvb2wgR2VuZXJhdGVJbnRlcnBFbnRy eShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgY29uc3QgRnVuY0V4cG9ydCYgZmUsCi0gCi0gICAvLyBT YXZlIHRoZSByZXR1cm4gYWRkcmVzcyBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzYXZlZCBieSB0aGUg Y2FsbCBpbnNuLgotICNpZmRlZiBKU19VU0VfTElOS19SRUdJU1RFUgotLSMgIGlmIGRlZmluZWQo SlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAg ICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCi0rIyAgaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VO X01JUFM2NCkgfHwgICAgICBcCi0rICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCi0rICAgICAgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQotICAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygpOwotICMgIGVsaWYgZGVmaW5l ZChKU19DT0RFR0VOX0FSTTY0KQotICAgLy8gV2FzbVB1c2ggdXBkYXRlcyBmcmFtZVB1c2hlZCgp IHVubGlrZSBwdXNoUmV0dXJuQWRkcmVzcygpLCBidXQgdGhhdCdzCi1AQCAtMjEyMyw5ICsyMTI0 LDEwIEBAIHN0YXRpYyBib29sIEdlbmVyYXRlSW1wb3J0SW50ZXJwRXhpdChNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgY29uc3QgRnVuY0ltcG9ydCYgZmksCi0gICAvLyBUaGUgbmF0aXZlIEFCSSBwcmVz ZXJ2ZXMgdGhlIGluc3RhbmNlLCBoZWFwIGFuZCBnbG9iYWwgcmVnaXN0ZXJzIHNpbmNlIHRoZXkK LSAgIC8vIGFyZSBub24tdm9sYXRpbGUuCi0gICBNT1pfQVNTRVJUKE5vblZvbGF0aWxlUmVncy5o YXMoSW5zdGFuY2VSZWcpKTsKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0FSTSkgfHwgICAgICBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2lmIGRlZmlu ZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgICAgICAg XAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8ICAgIFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSAgIE1PWl9BU1NFUlQoTm9uVm9sYXRpbGVSZWdzLmhhcyhIZWFwUmVnKSk7Ci0gI2VuZGlm Ci0gCi1AQCAtMjU3MSw2ICsyNTczLDE1IEBAIGJvb2wgd2FzbTo6R2VuZXJhdGVCdWlsdGluVGh1 bmsoTWFjcm9Bc3NlbWJsZXImIG1hc20sIEFCSUZ1bmN0aW9uVHlwZSBhYmlUeXBlLAotICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyOjpGcm9tQ29kZShyZWdJZCArIDEpKTsKLSAgICAg ICAgIH0KLSAgICAgICB9Ci0rI2VuZGlmCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgICAg ICAvLyBQUEM2NCAzMi1iaXQgb3BlcmF0aW9ucyBkbyBub3QgemVyby1leHRlbmQgdG8gNjQgYml0 cyAodW5saWtlCi0rICAgICAgLy8geDg2LTY0L0FSTTY0L0xBNjQpLiBUaGUgRUxGdjIgQUJJIHJl cXVpcmVzIGNhbGxlcnMgdG8gemVyby9zaWduLWV4dGVuZAotKyAgICAgIC8vIG5hcnJvdyBhcmdz LiBXYXNtIGkzMiB2YWx1ZXMgbWF5IGhhdmUgZ2FyYmFnZSB1cHBlciBiaXRzIGluIDY0LWJpdAot KyAgICAgIC8vIHJlZ2lzdGVycywgc28gemVyby1leHRlbmQgdGhlbSBiZWZvcmUgY2FsbGluZyBD KysgYnVpbHRpbnMuCi0rICAgICAgaWYgKHNlbGZBcmdzLm1pclR5cGUoKSA9PSBNSVJUeXBlOjpJ bnQzMikgewotKyAgICAgICAgbWFzbS5tb3ZlMzJaZXJvRXh0ZW5kVG9QdHIoc2VsZkFyZ3MtPmdw cigpLCBzZWxmQXJncy0+Z3ByKCkpOwotKyAgICAgIH0KLSAjZW5kaWYKLSAgICAgICBjb250aW51 ZTsKLSAgICAgfQotQEAgLTI2NTksNiArMjY3MCwyOCBAQCBzdGF0aWMgY29uc3QgTGl2ZVJlZ2lz dGVyU2V0IFJlZ3NUb1ByZXNlcnZlKAotICMgIGlmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSAjICAg IGVycm9yICJoaWdoIGxhbmVzIG9mIFNJTUQgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgc2F2ZWQgdG9v LiIKLSAjICBlbmRpZgotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsvLyBFeGNs dWRlIHIwIChTY3JhdGNoUmVnaXN0ZXIsIG5vdCBhbGxvY2F0YWJsZSwgc3BlY2lhbCBhZGRyZXNz aW5nIHNlbWFudGljcyksCi0rLy8gcjEgKFNQKSwgcjIgKFRPQyBwb2ludGVyLCByZXNlcnZlZCks IGFuZCByMTMgKFRMUyBwb2ludGVyLCByZXNlcnZlZCkuCi0rc3RhdGljIGNvbnN0IExpdmVSZWdp c3RlclNldCBSZWdzVG9QcmVzZXJ2ZSgKLSsgICAgR2VuZXJhbFJlZ2lzdGVyU2V0KFJlZ2lzdGVy czo6QWxsTWFzayAmIH4oKHVpbnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6cjApIHwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KDEpIDw8IFJl Z2lzdGVyczo6cjEpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVpbnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6cjIpIHwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KDEpIDw8IFJlZ2lzdGVyczo6 cjEzKSkpLAotKyMgIGlmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgICAgLy8gVW5saWtlIEFSTTY0 LCB3aGVyZSB0aGUgdmVjdG9yIHJlZ2lzdGVycyBhbGlhcyB0aGUgZG91YmxlcywgUFBDNjQKLSsg ICAgLy8gZG91YmxlcyBsaXZlIGluIHRoZSBGUFJzIChWU1IwLTMxKSB3aGlsZSB3YXNtIHYxMjgg dmFsdWVzIGxpdmUgaW4gdGhlCi0rICAgIC8vIFZScyAoVlNSMzItNjMpIC0tIHR3byBkaXNqb2lu dCBwaHlzaWNhbCBwb29scywgc28gYm90aCBtdXN0IGJlCi0rICAgIC8vIHByZXNlcnZlZC4gU2F2 aW5nIG9ubHkgdGhlIGRvdWJsZXMgbG9zZXMgdGhlIGVudGlyZSBsaXZlIHYxMjggc3RhdGU6IGEK LSsgICAgLy8gdHJhcCBmaXJpbmcgd2hpbGUgYSB2MTI4IGlzIGxpdmUgKG5vdGFibHkgdGhlIGlu dGVycnVwdC1jaGVjayB0cmFwLAotKyAgICAvLyB3aGljaCBmaXJlcyBjb25zdGFudGx5IGluIGhv dCBsb29wcykgcmVzdW1lcyB3aXRoIHdoYXRldmVyIHRoZSBDKysKLSsgICAgLy8gaGFuZGxlcidz IGxpYmMgbGVmdCBpbiB0aGUgVlJzIChlLmcuIGdsaWJjJ3MgdmVjdG9yIG1lbWNweSBsZWF2ZXMg bHZzbAotKyAgICAvLyBhbGlnbm1lbnQtY29udHJvbCBwYXR0ZXJucyBpbiBsb3cgVlJzKS4KLSsg ICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVyczo6QWxsRG91YmxlTWFzayB8Ci0rICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbFNpbWQxMjhNYXNrKSk7Ci0rIyAg ZWxzZQotKyAgICBGbG9hdFJlZ2lzdGVyU2V0KEZsb2F0UmVnaXN0ZXJzOjpBbGxEb3VibGVNYXNr KSk7Ci0rIyAgZW5kaWYKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0gLy8gV2Ug YXNzdW1lIHRoYXQgdHJhcHMgZG8gbm90IGhhcHBlbiB3aGlsZSBsciBpcyBsaXZlLiBUaGlzIGJv dGggZW5zdXJlcyB0aGF0Ci0gLy8gdGhlIHNpemUgb2YgUmVnc1RvUHJlc2VydmUgaXMgYSBtdWx0 aXBsZSBvZiAyIChwcmVzZXJ2aW5nIFdhc21TdGFja0FsaWdubWVudCkKLWRpZmYgLS1naXQgYS9q cy9zcmMvd2FzbS9XYXNtU3VtbWFyaXplSW5zbi5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtU3VtbWFy aXplSW5zbi5jcHAKLWluZGV4IDdiYjRmNGI3YTcyNS4uMmFlNTVhMWIxYjllIDEwMDY0NAotLS0t IGEvanMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24uY3BwCi0rKysgYi9qcy9zcmMvd2FzbS9X YXNtU3VtbWFyaXplSW5zbi5jcHAKLUBAIC0xNzMxLDYgKzE3MzEsMTY5IEBAIE1heWJlPFRyYXBN YWNoaW5lSW5zbj4gU3VtbWFyaXplVHJhcEluc3RydWN0aW9uKGNvbnN0IHVpbnQ4X3QqIGluc25B ZGRyKSB7Ci0gICByZXR1cm4gTm90aGluZygpOwotIH0KLSAKLSsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gcHBjNjQg PT09PQotKwotKyMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKwotK01heWJlPFRy YXBNYWNoaW5lSW5zbj4gU3VtbWFyaXplVHJhcEluc3RydWN0aW9uKGNvbnN0IHVpbnQ4X3QqIGlu c25BZGRyKSB7Ci0rICBNT1pfQVNTRVJUKDAgPT0gKHVpbnRwdHJfdChpbnNuQWRkcikgJiAzKSk7 Ci0rCi0rICBjb25zdCB1aW50MzJfdCBpbnNuID0gKih1aW50MzJfdCopaW5zbkFkZHI7Ci0rICBj b25zdCB1aW50MzJfdCBtYWpvck9wID0gaW5zbiA+PiAyNjsKLSsgIC8vIFgtZm9ybSBzZWNvbmRh cnkgb3Bjb2RlOiBiaXRzIDEwLi4xLgotKyAgY29uc3QgdWludDMyX3QgeG8gPSAoaW5zbiA+PiAx KSAmIDB4M0ZGOwotKwotKyAgLy8gUFBDX3RyYXAgPSAweDdGRTAwMDA4ID0gdHcgMzEsMCwwLgot KyAgaWYgKGluc24gPT0gMHg3RkUwMDAwOCkgewotKyAgICByZXR1cm4gU29tZShUcmFwTWFjaGlu ZUluc246Ok9mZmljaWFsVUQpOwotKyAgfQotKwotKyAgLy8gRC1mb3JtIC8gRFMtZm9ybSBsb2Fk cy4KLSsgIHN3aXRjaCAobWFqb3JPcCkgewotKyAgICBjYXNlIDM0OiAgLy8gbGJ6Ci0rICAgICAg cmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkOCk7Ci0rICAgIGNhc2UgNDA6ICAvLyBs aHoKLSsgICAgY2FzZSA0MjogIC8vIGxoYQotKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5l SW5zbjo6TG9hZDE2KTsKLSsgICAgY2FzZSAzMjogIC8vIGx3egotKyAgICAgIHJldHVybiBTb21l KFRyYXBNYWNoaW5lSW5zbjo6TG9hZDMyKTsKLSsgICAgY2FzZSA1ODogIC8vIGxkIChEUz0wKSAv IGx3YSAoRFM9MikKLSsgICAgICBpZiAoKGluc24gJiAzKSA9PSAyKSB7Ci0rICAgICAgICByZXR1 cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7ICAvLyBsd2EKLSsgICAgICB9Ci0rICAg ICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQpOyAgLy8gbGQKLSsgICAgY2Fz ZSA0ODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZnMKLSsgICAgICByZXR1 cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7Ci0rICAgIGNhc2UgNTA6ICAvLyBsZmQK LSsgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQ2NCk7Ci0rICAgIGRlZmF1 bHQ6Ci0rICAgICAgYnJlYWs7Ci0rICB9Ci0rCi0rICAvLyBELWZvcm0gLyBEUy1mb3JtIHN0b3Jl cy4KLSsgIHN3aXRjaCAobWFqb3JPcCkgewotKyAgICBjYXNlIDM4OiAgLy8gc3RiCi0rICAgICAg cmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTgpOwotKyAgICBjYXNlIDQ0OiAgLy8g c3RoCi0rICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTE2KTsKLSsgICAg Y2FzZSAzNjogIC8vIHN0dwotKyAgICBjYXNlIDM3OiAgLy8gc3R3dQotKyAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Ci0rICAgIGNhc2UgNTI6ICAvLyBzdGZzCi0r ICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTMyKTsKLSsgICAgY2FzZSA2 MjogIC8vIHN0ZCAoRFM9MCkgLyBzdGR1IChEUz0xKQotKyAgICAgIHJldHVybiBTb21lKFRyYXBN YWNoaW5lSW5zbjo6U3RvcmU2NCk7Ci0rICAgIGNhc2UgNTQ6ICAvLyBzdGZkCi0rICAgIGNhc2Ug NTU6ICAvLyBzdGZkdQotKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2 NCk7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgYnJlYWs7Ci0rICB9Ci0rCi0rICAvLyBYLWZvcm0g aW5zdHJ1Y3Rpb25zIChtYWpvciBvcGNvZGUgMzEpLgotKyAgaWYgKG1ham9yT3AgPT0gMzEpIHsK LSsgICAgc3dpdGNoICh4bykgewotKyAgICAgIC8vIEluZGV4ZWQgbG9hZHMuCi0rICAgICAgY2Fz ZSA4NzogIC8vIGxiengKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9h ZDgpOwotKyAgICAgIGNhc2UgMjc5OiAgLy8gbGh6eAotKyAgICAgIGNhc2UgMzQzOiAgLy8gbGhh eAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMTYpOwotKyAgICAg IGNhc2UgMjM6ICAvLyBsd3p4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246 OkxvYWQzMik7Ci0rICAgICAgY2FzZSAyMTogIC8vIGxkeAotKyAgICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQpOwotKyAgICAgIGNhc2UgNTM1OiAgLy8gbGZzeAotKyAg ICAgIGNhc2UgODU1OiAgLy8gbGZpd2F4Ci0rICAgICAgY2FzZSA4ODc6ICAvLyBsZml3engKLSsg ICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDMyKTsKLSsgICAgICBjYXNl IDU5OTogIC8vIGxmZHgKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9h ZDY0KTsKLSsgICAgICBjYXNlIDc5MDogIC8vIGxoYnJ4IChieXRlLXJldmVyc2UgaGFsZndvcmQp Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQxNik7Ci0rICAgICAg Y2FzZSA1MzQ6ICAvLyBsd2JyeCAoYnl0ZS1yZXZlcnNlIHdvcmQpCi0rICAgICAgICByZXR1cm4g U29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7Ci0rCi0rICAgICAgLy8gSW5kZXhlZCBzdG9y ZXMuCi0rICAgICAgY2FzZSAyMTU6ICAvLyBzdGJ4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OlN0b3JlOCk7Ci0rICAgICAgY2FzZSA0MDc6ICAvLyBzdGh4Ci0rICAgICAg ICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMTYpOwotKyAgICAgIGNhc2UgMTUx OiAgLy8gc3R3eAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTMy KTsKLSsgICAgICBjYXNlIDE0OTogIC8vIHN0ZHgKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBN YWNoaW5lSW5zbjo6U3RvcmU2NCk7Ci0rICAgICAgY2FzZSA2NjM6ICAvLyBzdGZzeAotKyAgICAg ICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTMyKTsKLSsgICAgICBjYXNlIDcy NzogIC8vIHN0ZmR4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3Jl NjQpOwotKyAgICAgIGNhc2UgOTE4OiAgLy8gc3RoYnJ4IChieXRlLXJldmVyc2UgaGFsZndvcmQg c3RvcmUpCi0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMTYpOwot KyAgICAgIGNhc2UgNjYyOiAgLy8gc3R3YnJ4IChieXRlLXJldmVyc2Ugd29yZCBzdG9yZSkKLSsg ICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Ci0rCi0rICAgICAg Ly8gVlNYIFNJTUQgaW5kZXhlZCBsb2FkL3N0b3JlIChYWDEtZm9ybSwgc2FtZSBtYWpvciBvcGNv ZGUgMzEpLgotKyAgICAgIGNhc2UgMjY4OiAgLy8gbHh2eCAoUE9XRVI5KQotKyAgICAgIGNhc2Ug ODQ0OiAgLy8gbHh2ZDJ4IChQT1dFUjgpCi0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGlu ZUluc246OkxvYWQxMjgpOwotKyAgICAgIGNhc2UgMzk2OiAgLy8gc3R4dnggKFBPV0VSOSkKLSsg ICAgICBjYXNlIDk3MjogIC8vIHN0eHZkMnggKFBPV0VSOCkKLSsgICAgICAgIHJldHVybiBTb21l KFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUxMjgpOwotKwotKyAgICAgIC8vIEF0b21pYyAobG9hZC1y ZXNlcnZlIC8gc3RvcmUtY29uZGl0aW9uYWwpLgotKyAgICAgIGNhc2UgMjA6ICAgLy8gbHdhcngK LSsgICAgICBjYXNlIDUyOiAgIC8vIGxiYXJ4IChQT1dFUjcrKQotKyAgICAgIGNhc2UgODQ6ICAg Ly8gbGRhcngKLSsgICAgICBjYXNlIDExNjogIC8vIGxoYXJ4IChQT1dFUjcrKQotKyAgICAgICAg cmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpBdG9taWMpOwotKyAgICAgIGRlZmF1bHQ6Ci0r ICAgICAgICBicmVhazsKLSsgICAgfQotKyAgICAvLyBzdHdjeC4gKFhPPTE1MCwgUmM9MSksIHN0 ZGN4LiAoWE89MjE0LCBSYz0xKSwgc3RiY3guIChYTz02OTQsIFJjPTEpCi0rICAgIC8vIGFuZCBz dGhjeC4gKFhPPTcyNiwgUmM9MSkgaGF2ZSBiaXQgMCBzZXQuIE5vdGUgeG8gYWJvdmUgYWxyZWFk eQotKyAgICAvLyBkaXNjYXJkcyBiaXQgMCwgc28gd2UgbmVlZCBhIHNlcGFyYXRlIGxvdy0xMS1i aXQgbWF0Y2guCi0rICAgIGNvbnN0IHVpbnQzMl90IHhvUmMgPSBpbnNuICYgMHg3RkY7ICAvLyBi aXRzIDEwLi4wCi0rICAgIGlmICh4b1JjID09ICgoMTUwIDw8IDEpIHwgMSkgfHwgeG9SYyA9PSAo KDIxNCA8PCAxKSB8IDEpIHx8Ci0rICAgICAgICB4b1JjID09ICgoNjk0IDw8IDEpIHwgMSkgfHwg eG9SYyA9PSAoKDcyNiA8PCAxKSB8IDEpKSB7Ci0rICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hp bmVJbnNuOjpBdG9taWMpOwotKyAgICB9Ci0rICB9Ci0rCi0rICAvLyBQT1dFUjEwIHByZWZpeGVk IGxvYWRzL3N0b3JlcyAobWFqb3Igb3Bjb2RlIDEpLiBUaGUgdHJhcC1zaXRlIFBDCi0rICAvLyBw b2ludHMgYXQgdGhlIHByZWZpeCB3b3JkOyB0aGUgYWN0dWFsIGxvYWQvc3RvcmUga2luZCBpcyBl bmNvZGVkIGluCi0rICAvLyB0aGUgc3VmZml4IHdvcmQgYXQgaW5zbkFkZHIgKyA0LiBUaGUgNjQt Ynl0ZS1ib3VuZGFyeSBydWxlCi0rICAvLyAoZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQpIGd1YXJh bnRlZXMgdGhlIHN1ZmZpeCBpcyBpbiB0aGUgc2FtZSBibG9jay4KLSsgIGlmIChtYWpvck9wID09 IDEpIHsKLSsgICAgY29uc3QgdWludDMyX3Qgc3VmZml4ID0gKih1aW50MzJfdCopKGluc25BZGRy ICsgNCk7Ci0rICAgIGNvbnN0IHVpbnQzMl90IHN1ZmZpeE9wNiA9IHN1ZmZpeCA+PiAyNjsgICAg ICAgICAgLy8gNi1iaXQgc3VmZml4IG9wCi0rICAgIGNvbnN0IHVpbnQzMl90IHN1ZmZpeE9wNSA9 IHN1ZmZpeCA+PiAyNzsgICAgICAgICAgLy8gNS1iaXQgc3VmZml4IG9wIChwbHh2L3BzdHh2KQot KyAgICBzd2l0Y2ggKHN1ZmZpeE9wNikgewotKyAgICAgIGNhc2UgNTc6ICAvLyBwbGQKLSsgICAg ICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsKLSsgICAgICBjYXNlIDUw OiAgLy8gcGxmZAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQp OwotKyAgICAgIGNhc2UgNDg6ICAvLyBwbGZzCi0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFj aGluZUluc246OkxvYWQzMik7Ci0rICAgICAgY2FzZSA2MTogIC8vIHBzdGQKLSsgICAgICAgIHJl dHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU2NCk7Ci0rICAgICAgY2FzZSA1NDogIC8v IHBzdGZkCi0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOwot KyAgICAgIGNhc2UgNTI6ICAvLyBwc3RmcwotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hp bmVJbnNuOjpTdG9yZTMyKTsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgaWYgKHN1ZmZpeE9wNSA9PSAyNSkgeyAgLy8gcGx4dgotKyAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDEyOCk7Ci0rICAgIH0KLSsgICAgaWYgKHN1ZmZpeE9w NSA9PSAyNykgeyAgLy8gcHN0eHYKLSsgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246 OlN0b3JlMTI4KTsKLSsgICAgfQotKyAgfQotKwotKyAgcmV0dXJuIE5vdGhpbmcoKTsKLSt9Ci0r Ci0gLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09IG5vbmUgPT09PQotIAotICMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VO X05PTkUpCi1kaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbVZhbHVlLmNwcCBiL2pzL3NyYy93 YXNtL1dhc21WYWx1ZS5jcHAKLWluZGV4IGZkYTA5OTY4NTFlMS4uNDVmZmYyNGZhNTgyIDEwMDY0 NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbVZhbHVlLmNwcAotKysrIGIvanMvc3JjL3dhc20vV2Fz bVZhbHVlLmNwcAotQEAgLTQzMCw3ICs0MzAsNyBAQCBib29sIFRvV2ViQXNzZW1ibHlWYWx1ZV9p MzIoSlNDb250ZXh0KiBjeCwgSGFuZGxlVmFsdWUgdmFsLCBpbnQzMl90KiBsb2MsCi0gICBib29s IG9rID0gVG9JbnQzMihjeCwgdmFsLCBsb2MpOwotICAgaWYgKG9rICYmIG11c3RXcml0ZTY0KSB7 Ci0gI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAg ICBsb2NbMV0gPSBsb2NbMF0gPj4gMzE7Ci0gI2Vsc2UKLSAgICAgbG9jWzFdID0gMDsKLWRpZmYg LS1naXQgYS9tZmJ0L0Fzc2VydGlvbnMuaCBiL21mYnQvQXNzZXJ0aW9ucy5oCi1pbmRleCBhNDM2 ZDAxOWExOTcuLjQ4ODdhZjdlNzY3NiAxMDA2NDQKLS0tLSBhL21mYnQvQXNzZXJ0aW9ucy5oCi0r KysgYi9tZmJ0L0Fzc2VydGlvbnMuaAotQEAgLTI4Miw2ICsyODIsMTEgQEAgc3RhdGljIGlubGlu ZSB2b2lkIE1PWl9DcmFzaFNlcXVlbmNlKHZvaWQqIGFBZGRyZXNzLCBpbnRwdHJfdCBhTGluZSkg ewotICAgICAgICJzdC5kICUxLCUwLDA7XG4iICAvLyBXcml0ZSB0aGUgbGluZSBudW1iZXIgdG8g dGhlIGNyYXNoaW5nIGFkZHJlc3MKLSAgICAgICA6ICAgICAgICAgICAgICAgICAgLy8gbm8gb3V0 cHV0IHJlZ2lzdGVycwotICAgICAgIDogInIiKGFBZGRyZXNzKSwgInIiKGFMaW5lKSk7Ci0rIyAg ZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0rICBhc20gdm9sYXRpbGUoCi0rICAgICAgInN0 ZCAlMSwwKCUwKTtcbiIgIC8vIFdyaXRlIHRoZSBsaW5lIG51bWJlciB0byB0aGUgY3Jhc2hpbmcg YWRkcmVzcwotKyAgICAgIDogICAgICAgICAgICAgICAgICAvLyBubyBvdXRwdXQgcmVnaXN0ZXJz Ci0rICAgICAgOiAiciIoYUFkZHJlc3MpLCAiciIoYUxpbmUpKTsKLSAjICBlbHNlCi0gIyAgICB3 YXJuaW5nIFwKLSAgICAgICAgICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIHJlcGxhY2UgdGhl IGNvZGUgYmVsb3cgd2l0aCBhc3NlbWJseSBzdWl0YWJsZSB0byBjcmFzaCB0aGUgcHJvY2VzcyIK LS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS9maXJlZm94LnNwZWMgYi9maXJlZm94LnNwZWMK aW5kZXggYmU4YWJhZi4uMDZhNjkwMCAxMDA2NDQKLS0tIGEvZmlyZWZveC5zcGVjCisrKyBiL2Zp cmVmb3guc3BlYwpAQCAtMjgxLDExICsyODEsNiBAQCBQYXRjaDYwMDogICAgICAgIHBnby5wYXRj aAogUGF0Y2g2MDI6ICAgICAgICBtb3ppbGxhLTE1MTY4MDMucGF0Y2gKIFBhdGNoNjAzOiAgICAg ICAgZmlyZWZveC1nY2MtYWx3YXlzLWlubGluZS5wYXRjaAogCi0jIHBwYzY0bGUgSklUCi1QYXRj aDkwMDogICAgICAgIDAwMDEtQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLVNLSUEucGF0Y2gKLVBh dGNoOTAxOiAgICAgICAgMDAwMi1BZGQtVlNYLWluc3RydWN0aW9ucy1mb3ItbGlid2VicC5wYXRj aAotUGF0Y2g5MDI6ICAgICAgICAwMDAzLUFkZC1QUEM2NExFLUpJVC1iYWNrZW5kLnBhdGNoCi0K IAogJWlmICV7P3N5c3RlbV9uc3N9CiBCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKG5zcHIpID49 ICV7bnNwcl92ZXJzaW9ufQpAQCAtNjA2LDExICs2MDEsNiBAQCBjYXQgJXtTT1VSQ0U0OX0gfCBz ZWQgLWUgInN8TElCQ0xBTkdfUlRfUExBQ0VIT0xERVJ8YHB3ZGAvd2FzaS1zZGstMzAvYnVpbGQv c3lzcgogJWVuZGlmCiAlcGF0Y2ggLVA2MDMgLXAxIC1iIC5pbmxpbmUKIAotIyBwcGM2NGxlIEpJ VAotJXBhdGNoIC1QOTAwIC1wMQotJXBhdGNoIC1QOTAxIC1wMQotJXBhdGNoIC1QOTAyIC1wMQot CiBybSAtZiAubW96Y29uZmlnCiBjcCAle1NPVVJDRTEwfSAubW96Y29uZmlnCiBlY2hvICJhY19h ZGRfb3B0aW9ucyAtLWVuYWJsZS1kZWZhdWx0LXRvb2xraXQ9Y2Fpcm8tZ3RrMy13YXlsYW5kIiA+ PiAubW96Y29uZmlnCg==